本文共 1303 字,大约阅读时间需要 4 分钟。
本文属于贪心NLP 学习笔记系列。通过实践学习,我逐渐掌握了数学概念的相关知识。
在处理语言模型时,不考虑单词之间的顺序,依赖于马尔科夫假设。假设w1, w2, ..., wn是相互独立的:一个事件的发生与否,不会影响另外一个事件的发生。
计算单词概率的方法是:统计语料库中某个单词出现的次数,再除以语料库的总词数。
这种方法的缺点是:单词相互独立,语义上不通顺的跟通顺的概率一样,难以区分。
考虑单词之间(前面的单词)的顺序,计算单词概率时需要考虑前一单词。
计算方法是:统计语料库中某个单词后接目标单词的概率。
这种方法可以更好地区分语义相近的单词。
一般情况下,不会考虑N太多,bigram是最多使用的。
计算方法是:统计语料库中某个单词后接目标单词的概率。
为了防止出现未登录词(OOV),可以采用平滑技术。
困惑度是交叉熵的指数形式。困惑度越小,表示语言模型越好。
计算困惑度的方法是:根据训练好的模型,计算每个测试句子的平均对数似然值x,困惑度为2^{-x}。x越大,困惑度越小。
自然语言处理中常见的问题是出现未登录词。优化方法是平滑技术。
平滑技术的核心是拉普拉斯平滑。公式如下:
P(w_{i} | w_{i-1}) = (C(w_{i-1}, w_{i}) + 1) / (C(w_{i-1}) + v)
其中,v是词典库的大小,C(w_{i-1}, w_{i})是w_{i-1}后接w_{i}的次数。
这里的v不是所有单词出现的次数,而是词典库的大小。
add-1是k=1的特例。优化方法是选择k值使得困惑度最小。
通常选择k=1或k=0,具体取决于实际情况。
在实际应用中,可以结合unigram、bigram和N-gram的概率,计算更准确的结果。
公式如下:
P'(w_{n} | w_{n-1}, w_{n-2}) = λ1 * P(w_{n} | w_{n-1}, w_{n-2}) + λ2 * P(w_{n} | w_{n-1}) + λ3 * P(w_{n})
其中,λ1 + λ2 + λ3 = 1。
权重λ1, λ2, λ3可以通过优化确定。
在实际应用中,采用good-turning算法优化平滑方法。公式如下:
P(w) = N1 / N
其中,N1是出现1次的单词数量,N是词典库的大小。
对于出现c次的单词:
P(w) = (c + 1) * N_{c+1} / (N_c * N)
其中,N_c是出现c次的单词数量。
通常,good-turning算法得出的概率与实际测试结果相符。
在语言模型中,选择合适的平滑方法至关重要。无论是add-1 smoothing还是good-turning smoothing,都需要根据实际情况选择最优参数。
转载地址:http://rdcy.baihongyu.com/