一、Statistical Language Model
在自然语言处理中的一个基本问题:如何计算一段文本序列在某种语言下出现的概率?之所为称其为一个基本问题,是因为它在很多NLP任务中都扮演着重要的角色。例如,"我经常会去图书馆____",预测该句后面的词。我们会通过已有的语料或上下文,来统计预测这句话可以填某个词的概率。将概率最大的作为预测结果返回。再比如机器翻译中,‘I like Tom so much.’ ===>{‘我’,‘喜欢’,‘汤姆’,‘非常’} 将这个集合里的字词排列组合成句子,然后用语言模型去计算形成句子的概率大小。概率越大,说明翻译越顺畅,越好,就作为最终的答案返回。
统计语言模型给出了这一类问题的一个基本解决框架。对于一段文本序列
它的概率可以表示为:
即将序列的联合概率转化为一系列条件概率的乘积。问题变成了如何去预测这些给定previous words下的条件概率:
由于其巨大的参数空间,这样一个原始的模型在实际中并没有什么用。我们更多的是采用其简化版本——Ngram模型:
常见的如bigram模型(N=2)和trigram模型(N=3)。事实上,由于模型复杂度和预测精度的限制,我们很少会考虑N>3的模型。
我们可以用最大似然法去求解Ngram模型的参数——等价于去统计每个Ngram的条件词频。
为了避免统计中出现的零概率问题,针对于Ngram模型有很多处理的小技巧。
二、N-Gram语言模型
n-gram语言模型的思想,可以追溯到信息论大师香农的研究工作,他提出一个问题:给定一串字母,如“for ex”,下一个最大可能性出现的字母是什么?从训练语料数据中,我们可以通过极大似然估计的方法,得到N个概率分布:是a的概率是0.4,是b的概率是0.0001,是c的概率是…,当然,别忘记约束条件:所有的N个概率分布的总和为1.
n-gram模型概率公式推导。根据条件概率和乘法公式:
得到
拿一个应用来讲,假设T是由词序列A1,A2,A3,…An组成的,那么P(T)=P(A1A2A3…An)=P(A1)P(A2|A1)P(A3|A1A2)…P(An|A1A2…An-1)
如果直接这么计算,是有很大困难的,需要引入马尔科夫假设,即:一个item的出现概率,只与其前m个items有关,当m=0时,就是unigram,m=1时,是bigram模型。
因此,P(T)可以求得,例如,当利用bigram模型时,P(T)=P(A1)P(A2|A1)P(A3|A2)…P(An|An-1)
而P(An|An-1)条件概率可以通过极大似然估计求得,等于Count(An-1,An)/Count(An-1)。
三、n-gram的数据长相
·著名的google books Ngram Viewer,它的n-gram数据格式是这样的:
circumvallate 1978 335 91
circumvallate 1979 261 91
代表了一个1-gram的数据片段,第一行的意思是,“circumvallate”这个单词在1978年出现335次,存在91本书中。这些元数据,除了频率335次是必须的,其他的元数据(例如,还有词性等)可以根据应用需求来定。下面是一个5-gram数据片段:
analysis is often described as 1991 1 1 1
当然,也可以是其他形式,例如,HanLP的n-gram模型是bigram:
—@北冰洋 2
—@卢森堡 1
—@周日 1
—@因特网 1
每一行代表,两个相邻单词共同出现时的频率(相对于背后的语料库)。
四、n-gram的用处
·文化研究 ·分词算法 ·语音识别 ·输入法 ·机器翻译
文化研究:n-gram模型看起来比较枯燥和冰冷,但实际上,google books ngram项目,催生了一门新学科(Culturomics)的成立,通过数字化的文本,来研究人类行为和文化趋势。可查看知乎上的详细介绍,。《可视化未来》这本书也有详细介绍。还有TED上的视频《what_we_learned_from_5_million_books》,十分精彩。
输入法:大家每天都在使用的东西,请看:输入“tashiyanjiushengwude”,可能的输出有:
它实验救生无得
他实验就生物的
他是研究圣物的
他是研究生物的
究竟哪个是输入者最想表达的意思,这背后的技术就要用到n-gram语言模型了。item就是每一个拼音对应的可能的字。还记得智能ABC吗?据说是运用n-gram的鼻祖了。 不过搜狗输入法后来居上,它采用更先进的云计算技术(n-gram模型的数据量可是相当之大,后面会说到) 。
做概率统计的都知道,语料库的规模越大,做出的n-gram对统计语言模型才更有用。n-gram,无论是存储还是检索,对技术都是极大的挑战。
主要参考文章:
【1】N-Gram语言模型 原文更精彩