- 语言模型: 计算一个句子的概率的模型,或者给定一个序列预测下一个词出现的概率。
- 马尔科夫假设(Markov Assumption): 一个词出现的概率仅依赖于它前面的一个或几个词。
- 一元语言模型(unigram): 即朴素贝叶斯假设。
- 二元语言模型(bigram): 考虑一个词对上一个词的依赖关系。
- 三元语言模型(trigram): 考虑一个词对前两个词的依赖关系。
- 关于给句子加开始符与结束符的问题(?): 加开始符应该相应地加上结束符,至于为什么,现在还不是很理解。
- 传统语言模型的两大缺点: 稀疏性和泛化能力差。
- 稀疏性问题: n-gram模型只能对文本中出现的单词或者单词组进行建模,当新的文本中出现意义相近但是没有在训练文本中出现的单词或者单词组的时候,传统离散模型无法正确计算这些训练样本中未出现的单词的应有概率,他们都会被赋予0概率预测值,虽然传统方法会引入平滑来解决0概率问题,但整体上,效果并没有预想的好。
- 泛化能力问题: (1) 离散模型还依赖于固定单词组合,需要完全的模式匹配,否则也无法正确输出单词组出现的概率。
(2) 马尔可夫假设太强。人在对文字进行处理的时候,是能够将很长一段上下文纳入考虑,但是n-gram的离散模型只考虑待预测单词前面的n-1个单词。
(3) 离散模型在计算上还存在“维度诅咒”的困难。从上面的公式可以看出,当我们将更多单词组合挑出来之后才能更精准地预测特定单词组出现的概率,但是这种组合的量是非常大的。 - 前馈神经网络模型(FFLM): 主要用来解决稀疏性问题。先给每个词在连续空间中赋予一个向量(词向量),再通过神经网络去学习这种分布式表征。利用神经网络去建模当前词出现的概率与其前 n-1 个词之间的约束关系。很显然这种方式相比 n-gram 具有更好的泛化能力,只要词表征足够好。从而很大程度地降低了数据稀疏带来的问题。但是这个结构的明显缺点是仅包含了有限的前文信息。
- 循环神经网络模型(RNNLM): 主要用来解决泛化能力问题。
- 神经网络语言模型的优缺点:
优点: (1) 长距离依赖,具有更强的约束性;(2) 避免了数据稀疏所带来的OOV(out of vocabulary)问题;(3) 好的词表征能够提高模型泛化能力。
缺点: (1) 模型训练时间长;(2) 神经网络黑盒子,可解释性较差。 - 语言模型评估指标(?): 迷惑度/困惑度/混乱度(perplexity)
(1)一种定义(以下定义不是很理解):
P P = ∏ t = 1 T ( 1 ∑ j = 1 ∣ V ∣ y j t y ^ j t ) 1 / T PP=\prod_{t=1}^{T} (\frac{1}{\sum_{j=1}^{|V| }y_j^t \widehat{y}_j^t})^{1/T} PP=t=1∏T(∑j=1∣V∣yjty jt1)1/T
(2)另一种定义(基于交叉熵):
对于自然语言序列 W = w 1 , w 2 , … , w n W=w_1,w_2,\dots,w_n W=w1,w2,…,wn ,每个词的平均交叉熵为:
H ( W ) = − 1 N l o g P ( w 1 , w 2 , … , w n ) H(W)=-\frac{1}{N}logP(w_1,w_2,\dots,w_n) H(W)=−N1logP(w1,w2,…,wn)
在此基础上,定义困惑度(perplexity) :
p e r p l e x i t y = 2 H ( W ) = 1 P ( w 1 , w 2 , … , w n ) N perplexity=2^{H(W)} =\sqrt[N]{\frac{1}{P(w_1,w_2,\dots,w_n)}} perplexity=2H(W)=NP(w1,w2,…,wn)1
困惑度在语言模型中的物理意义可以描述为对于任意给定序列,下一个候选词的可选范围大小。困惑度越小,说明所建模的语言模型越精确。
引用
https://blog.youkuaiyun.com/han_xiaoyang/article/details/50646667
https://zhuanlan.zhihu.com/p/28080127
https://zhuanlan.zhihu.com/p/52061158