NLP之语言模型

语言模型,本质上就是在回答“这个句子是否合理”的问题。

下面,将简单介绍两类语言模型,统计语言模型、神经网络语言模型。

1. 统计语言模型

统计语言模型,以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

2. 神经网络语言模型

2.1 前馈神经网络语言模型(FFLM)

前馈神经网络语言模型,相对于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,转化为概率。

2.2 循环神经网络模型

在FFLM的embedding层和FC层之间添加循环神经网络层。

发布了11 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/xueqinmax/article/details/102480611