###背景
在使用ansj分词的时候,遇到了nlp分词不稳定的情况,而这个又确实的影响到了使用,为了解决这个问题,先把基础复习一下,也方便跟小伙伴讨论问题时候,思路是正确的。
###基础知识
一个语言模型通常构建为字符串s的概率分布p(s),而这里的p(s)试图反映的时字符串s作为一个句子出现的概率。
例子:在一个描述口语的语言模型中,如果一个人说的话中,每100个句子中就会有一个OK,那么我们可以认为p(OK)=0.01。而对于"An apple ate the chicken",我们可以认为是概率为0,因为基本没人会这么说的。'''需要注意的是,语言模型跟语法没关系,即使语法对,也可以认为它出现的概率为0.'''
于是,对于一个由n个词构成的句子,它的概率公式可以这么表示:
一般的,前面的这n-1个词就叫做历史。而计算n-1个历史词是不现实的,因为样本里也不见得有这个句子。于是,通常的作法是简化这个条件概率。
如果n=2,那么词只与它前面的一个词有关系,这就是二元文法,也叫一阶马尔科夫链,记做bigram。
如果n=3,那么词与它前面两个词有关系,也就是三元文法,叫做二阶马尔科夫链,记做trigram。
###二元模型
二元用的最多,于是以二元为例,来记录一下语言模型的计算。由于i从1开始,但第一个单词前面没有词,于是添加一个BOS作为起始标识符,EOS作为结束标识符。
例子:Mark wrote a book
也就是公式:
计算$p(w_i | w_{i-1})的时候,可以通过统计预料中的频次来得到。 |
###例子
语料:
brown read holy bible
mark read a book
he read a book by david
计算概率:p(brown read a book)
最终结果:
###评价标准
首先将语言模型的概率连乘一下: 其中,n是n-gram的n,l是词数。
然后,将由句子构成的测试集T中所有的句子都这么计算一次,得出测试集概率p(T):
交叉熵的测度可以通过下面公式:
常用perplexity困惑度来度量语言模型。
模型的困惑度就是模型分配给测试集T中每一个词汇的概率的集合平均值的倒数,它和交叉熵的关系是: