做者|Devyanshu Shukla
编译|Flin
来源|mediumgit
在这篇文章中,咱们将讨论关于语言模型(LM)的全部内容github
NLP中的语言模型是计算句子(单词序列)的几率或序列中下一个单词的几率的模型。即api
句子的几率:
网络
下一个单词的几率:
机器学习
语言模型经常与单词嵌入混淆。主要的区别在于,在语言模型中,单词顺序很重要,由于它试图捕捉单词之间的上下文,而在单词嵌入的状况下,只捕捉语义类似度(https://en.wikipedia.org/wiki/Semantic_similarity) ,由于它是经过预测窗口中的单词来训练的,而无论顺序如何。ide
语言是NLP的主要组成部分,在不少地方都有使用,好比,函数
有不一样的方法来生成语言模型,让咱们逐一查看它们。post
N-grams(https://en.wikipedia.org/wiki/N-gram) 是给定语料库中N个单词的序列。对于“I like pizza very much”这句话,bigram将是 ‘I like’, ‘like pizza’, ‘pizza very’ 和 ‘very much’。学习
比方说,咱们有一个句子‘students opened their’,咱们想找到它的下一个单词,好比w。使用4-gram,咱们能够用下面的方程来表示上面的问题,这个方程返回‘w’是下一个单词的几率。测试
这里,count(X)表示X出如今语料库中的时间。
对于咱们的LM,咱们必须计算并存储整个语料库中的全部n-grams,随着语料库愈来愈大,这须要大量的存储空间。假设,咱们的LM给出了一个单词列表,以及它们成为下一个单词的几率,如今,咱们能够抽样从给定列表中选择一个单词。
能够看出,对于一个N-gram,下一个单词老是取决于句子的最后N-1个单词。所以,当咱们添加更多的单词时,句子的上下文和依赖关系就会丢失。
“Today the price of gold per ton,while production of shoe lasts and shoe industry,the bank intervened just after it considered and rejected an IMF demand to rebuild depleted European stocks, sept 30th end primary 76 cts a share.’’
上面的文字是用商业和金融新闻语料库中的N-grams(N=3)生成的,它符合语法知识但不连贯,由于咱们只考虑最后两个单词来预测下一个单词。
这种方法也容易受到稀疏性问题的影响,当单词“w”在给定的句子以后从未出现,就会出现稀疏性问题,所以“w”的几率始终为0。
为了使用神经网络生成LM,咱们考虑使用一个固定的窗口,即每一次的单词数都固定。以下图所示,而后以独热向量的形式表示单词,并与词嵌入向量相乘,链接以建立矩阵e。而后将该矩阵展平并经过隐藏层。最后使用softmax函数输出。
该方法解决了稀疏性问题,与N-grams相比不须要太多存储空间,但也存在一些自身的问题。因为神经网络使用固定的输入窗口,所以由该模型生成的文本长度是固定的,所以使用起来不太灵活。随着窗口大小的增大,模型的大小也随之增大,从而变得效率低下。
为了解决固定输入长度问题,咱们使用递归神经网络(RNNs)。正如咱们在N-grams方法中看到的,N-grams方法缺乏长期依赖。若是咱们使用vanilla-RNNs(https://medium.com/@apiltamang/unmasking-a-vanilla-rnn-what-lies-beneath-912120f7e56c) ,因为RNNs中的梯度消失,咱们仍然会有相同的长期依赖问题。然而,一种称为LSTM的特殊RNN解决了上述问题。
LSTMs可以学习长期依赖关系。它们是由Hochreiter&Schmidhuber(1997)(http://www.bioinf.jku.at/publications/older/2604.pdf) 提出的,并在随后的工做中被许多人改进和推广。
全部的RNNs都是由一系列重复的神经网络模块组成的。在标准RNN中,这个重复模块将有一个很是简单的结构,好比一个单一的tanh层。在LSTMs中,重复模块具备不一样的结构。不是只有一个神经网络层,而是有四个,以一种很是特殊的方式相互做用。请在此处详细阅读LSTMs(https://colah.github.io/posts/2015-08-Understanding-LSTMs/)。
咱们须要对模型进行评估,以改进它或将其与其余模型进行比较。困惑度被用来评估语言模型。它是一种测量几率模型预测测试数据的能力。
咱们衡量咱们的模型有多低的困惑度,低困惑度意味着模型生成了连贯、结构良好的句子,而高困惑度则表示不连贯和混乱的句子。所以,低困惑度是好的,高困惑度是坏的。
从数学上讲,困惑度是测试集的反几率,由单词数规范化。
LM的困惑度:
语言模型是NLP的重要组成部分,能够用于许多NLP任务。咱们看到了如何建立本身的语言模型,以及每种方法都会出现什么问题。咱们得出的结论是,LSTM是制做语言模型的最佳方法,由于它考虑并处理了长期依赖问题。
欢迎关注磐创AI博客站:
http://panchuang.net/
sklearn机器学习中文官方文档:
http://sklearn123.com/
欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/