今天我们要讲的是一个关于生成莎士比亚风格的语言模型。
那么首先我们要了解的是,什么是语言模型?
一个语言模型可以生成很多很多个句子,它对于每一个句子都有它自己的概率,模型的作用就是告诉你,在我的这个模型下,生成这个句子的概率是多少。
比如说下面的这两个例子,梨在这个语境下比一对更适合,因此语言模型会给这两个句子一个概率值,一个正常的句子应该比一个奇怪的句子的概率值高很多,这样才是一个好的语言模型。

那么首先我们要建立一个模型,建立模型需要一个庞大的英语文本语料库。语料库就是一个庞大的句子集,我们得像之前那样,对句子进行标记(tokenize),变成one-hot的向量。由于句子很多,你需要在句子的末尾加上一个标记EOS(end of sentence)。
如果你想生成莎士比亚风格的文字,就要把莎士比亚的东西给输入进去。
符号、EOS标记等等信息,是可以根据模型使用的需要来考虑是否加入的,这在进行训练集标注的时候可以选择性使用。

除了EOS标记,我们在文章当中还有可能遇到一些词典里面没有的词,比如说这个句子里的Mau。在这种情况下,我们可以使用UNK(unknow)标记来对这个词进行标记,在这种情况下,我们分辨的词不是这个Mau,而是针对所有不在我们字典里的这个类别的词。
讲完了数据的标记,我们进入生成序列的模型建立。
一个生成序列的模型建立有一些跟之前的模型不一样的地方,很特别的是:y<t>=x<t+1>也就是前一个生成的单词,会变成下一个单词的输入。

在每一步当中,都会输出它认为概率最高的单词,当它输出的概率最高的单词为<EOS>标记时,整个句子结束。
在训练这个模型的时候,我们需要输入很多的文章,通过一开始的单词和之后的单词进行一些参数的训练。如果我们使用的是softmax分类器,那么损失函数就跟之前所使用的是一样的,只不过因为one-hot的向量比较长,所以它可能是很多组概率的总和。
总而言之,经过这样的训练之后,我们就可以得到一个自己生成文本序列的模型了。
网友评论