现在每次后面都会加上一个Q&A部分,就是每次有人看完,讲完后的问题,或者是一些不全面的方面,以问答的形式呈现出来。
现在开的坑系列是Github上一个即将3k+Star的NLP-tutorial项目,里面是一些NLP方面的Deep-learning代码,框架Tensor和Torch都有,而且实现行数基本都控制在了100行以内,比较适合去研究一下。这样之后搭框架的时候就会明白许多了。
项目地址:https://github.com/graykode/nlp-tutorial
第一部分是基本的Embeddeding模型
这部分是基于非常经典的paper,A Neural Probabilistic Language Model,http://www.jmlr.org/papers/volume3/bengio03a/bengio03a.pdf
这份代码就是展现了这个里面的模型代码。所以首先先介绍一下这个论文的内容。
A Neural Probabilistic Language Model 论文内容
论文的内容介绍参考了一下博客:
https://blog.youkuaiyun.com/hx14301009/article/details/80345449
https://www.jianshu.com/p/be242ed3f314
传统的语言模型缺点
1.由于维度灾难(特别是离散变量),在高维下,数据的稀缺性导致统计语言模型存在很多为0的条件概率,传统的统计语言模型也花费大量的精力来处理这个,包括平滑,插值,回退等方法
2.语言模型的参数个数随着阶数呈指数增长,所以一般这个模型的阶数不会很高,这样n-gram无法建立长远的关系
3.n-gram无法建模出多个相似词的关系,比如在训练集中有: the cat is walking in the bedroom,但是用n-gram预测时,遇到:the dog was running in a room这个句子,并不会因为两个句子相似就让该句子的概率变高
所以基于以上的问题,就想要引入别的模型来解决这个问题。
这篇NNLM使训练得到的模型比传统的统计语言模型使用n-gram能建模更远的关系,并且考虑到了词与词之间的相似性,一些相似的词获得了自然的平滑。前者是因为神经网络的结果使得,后者是因为使用了词向量。
词向量
在NLP任