我使用 LSTM 模型创建了一个词级文本生成器。但就我而言,并不是每个词都适合选择。我希望他们匹配附加条件:
- 每个单词都有一个映射:如果一个字符是元音,那么它会写 1,如果不是,它将写 0(例如,溢出将是
10100010
)。然后,生成的句子需要满足给定的结构,例如01001100
(hi01
andfriend )001100
。 - 最后一个单词的最后一个元音必须是提供的那个。假设是e。(那么,朋友会做这项工作)。
因此,为了处理这种情况,我创建了一个具有以下结构的 pandas 数据框:
word last_vowel word_map
----- --------- ----------
hello o 01001
stack a 00100
jhon o 0010
这是我目前的工作流程:
- 给定句子结构,我从与模式匹配的数据框中选择一个随机词。例如,如果句子结构是
0100100100100
,我们可以选择单词hello,因为它的元音结构是01001
。 - 我从剩余的结构中减去选定的单词:
0100100100100
将成为00100100
我们删除了初始的01001
(你好)。 - 我从数据框中检索与剩余结构的一部分匹配的所有单词,在本例中为stack
00100
和jhon0010
。 - 我将当前单词的句子内容(现在只是你好)传递给 LSTM 模型,它会检索每个单词的权重。
- 但我不只是想选择最佳选项,我想选择第 3 点选择中包含的最佳选项。所以我选择了该列表中估计值最高的单词,在本例中为stack。
- 从第 2 点开始重复,直到剩下的句子结构为空。
这就像一个魅力,但还有一个条件需要处理:句子的最后一个元音。
我处理这个问题的方法如下:
- 生成 1000 个句子,强制最后一个元音是指定的。
- 获取 LSTM 模型返回的权重的 rmse。输出越好,权重就越高。
- 选择检索到较高排名的句子。
你认为有更好的方法吗?也许是 GAN 或强化学习?
编辑:我认为另一种方法是添加 WFST。我听说过pynini library,但我不知道如何将它应用到我的特定上下文中。