赞
踩
语言模型,本质上就是在回答“这个句子是否合理”的问题。
下面,将简单介绍两类语言模型,统计语言模型、神经网络语言模型。
统计语言模型,以n-gram语言模型为代表,是离散的计算模型,根据n个词(有序的)在语料库中共现的频次计算概率,最终可以得到句子出现的概率(句子的合理性)。
n-gram模型,大致可以理解为,我们有一个很长的句子序列,所有的概率计算都要依靠滑窗实现,n就是滑窗的大小,
n-gram语言模型,相比于朴素贝叶斯,考虑了词前后间的依赖关系,朴素贝叶斯假设词与词之间是独立的,显然不够合理。
但是,n-gram也有很多缺点:
1. 新词
n-gram是精确匹配,在语料库中没有的词,没办法给出共现概率,虽然可以使用平滑的方式优化,但不能达到想要的效果
比如,食物可口的餐厅、食物可口的饭馆
如果餐厅在语料库有,但是饭馆没有,n-gram计算的这两个句子的概率会差很多;但是,我们希望这两个句子的概率是相似的。
2. 维度灾难
n-gram计算共现概率的时候,备选词组随着语料库的增加而增加。
比如,语料库有10000个词,使用3-gram模型,那么 训练模型中的备选词组有10000^3个,计算量是巨大的。
n-gram的具体计算,这篇博客讲的很清楚,请参考 https://blog.csdn.net/songbinxu/article/details/80209197#Ngram_29
前馈神经网络语言模型,相对于n-gram,改变了概率的计算方式;N-gram是基于共现次数,统计方式,FFLM是基于神经网络;
前馈神经网络语言模型也是根据前n个词,计算下一个词出现的概率,但是计算复杂度比n-gram小很多;
前馈神经网络的n不可太大,太大出现梯度消失(爆炸)的现象,所以基于RNN的神经网络出现了;
FFLM和RNNLM,是语言模型,输入是one-hot的向量,输出是下一个词的概率;
word2vec不是语言模型,解决的是词的表示方式,输入是ont-hot的词向量,输出是稠密的词向量;解决的是离散文本表示方式的稀疏性问题,将稀疏的ont-hot文本表示方式转化为密集的词向量文本表示方式。
文本表示方式有多种:离散的(稀疏的)、连续的(密集的)。
n-gram是以一种离散的表示方式,实质上是一种词袋模型,基于共现次数。
numti-hot:词在文章中出现记为1,否则为0。
TF-IDF:在词袋模型的基础上,添加了词频,也是numti-hot文本表示方式;TF(词频)是词在文章中出现的频次,IDF(逆文档频率)是包含该词在文章中出现的文章的比率。
FFLM的计算过程:
首先,网络有4层,input层、embedding层(一个fc)、FC层、softmax层,FC层之后tanh做激活;
1. 输入层
假设语料库有m个词,将m个词做one-hot处理,得到长度为m的词序列,序列元素为大小为m的ont-hot向量;
在词序列上滑窗,得到若干个子序列,滑窗大小是超参数,假设为5。那么input为子序列前4个词,output(pred)为第5个词出现的概率,label是第5个词的ont-hot序列,output和label之间计算交叉熵损失;
input_size=(m, m)
2. embedding层
将(m,m)的矩阵,映射到(m,embed_dim)上。参数矩阵,即词向量矩阵。
embedding_weight_size=(m, embed_dim)
3. FC层
将embedding层的输出做flatten,然后经过FC层,输出logits;就是做多分类,有多少词,就有多少类,当然根据滑动窗口,整个序列前n-1个词没法做label。
fc_weights_size=(m*embed_dim, m)
4. softmax层
将logits做softmax,转化为概率。
在FFLM的embedding层和FC层之间添加循环神经网络层。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。