统计语言模型SAMSUNG吴国华什么是统计语言模型?•词序列的概率分布–p(“今天是周一”)0.001–p(“今天周一是”)0.0000000000001–p(“特征值是正的”)0.00001•上下文/主题相关•可以被认为是一种“生成”文本的概率机制,因此也被称作“生成(generative)”模型Source-ChannelFramework(ModelofCommunicationSystem[Shannon48])SourceTransmitter(encoder)DestinationReceiver(decoder)NoisyChannelP(X)P(Y|X)XYX’P(X|Y)=?)()|(maxarg)|(maxargˆXpXYpYXpXXXWhenXistext,p(X)isalanguagemodel(BayesRule)ManyExamples:Speechrecognition:X=WordsequenceY=SpeechsignalMachinetranslation:X=EnglishsentenceY=ChinesesentenceOCRErrorCorrection:X=CorrectwordY=ErroneouswordInformationRetrieval:X=DocumentY=QuerySummarization:X=SummaryY=Document3为什么统计语言模型有用?•提供了对自然语言的不确定性进行定量分析的方法•允许我们回答这样的问题:–我们看到“小明感到”这个序列,那么“高兴”和“习惯”哪一个相对更可能成为下一个单词?(语音辨识)–我们在一篇新文章中发现篮球3次,游戏1次,我们怎么知道这篇文章是关于运动的呢?(文本分类)–我们知道一个用户喜欢体育新闻,那么我们怎么知道他查询的时候会多次用到篮球?(信息检索)统计语言模型在输入法中的作用–通过用户输入的前一个单词来联想后一个单词–了解用户特征后,将其经常用的那些词语出现在前面–统计语言模型的引入使得输入法的效率准确度方面都比其他的一些方法好建立统计语言模型的步骤–分词–统计三元组–back-off的n-gram语言模型–基于熵对back-off模型进行剪枝–语言模型线索化分词•正向最大匹配方法•需要词典(网上可以下到,或者可以用新华词典,但是效果显然没有购买的好)•语料库(购买,自己训练效果不佳)•读入词典,建立一个trie树,第一个字可以用hash表进行映射•逐句读取语料库,进行最长匹配•注意歧义词的情况分词比如分割为人民办实事的精神–为人民,办实事的精神-i=0,len=3,word_len=3,对“人民办实事”进行最长匹配,分割到的词为“为人民”,其长度为2,–人民,办实事的精神-i=1,len=2,word_len=3,对“人民办实事”进行最长匹配,分割到的词为“人民”,其长度为2,–民办,实事的精神-i=2,len=2,word_len=4,对“民办实事”进行最长匹配,分割到的词为“民办”,其长度为2,因为i与len的合超过了最初传入的word_len,则设置word_len为4,继续迭代。可以看出,此时歧义已经检测到了。–办实事,的精神-i=3,len=3,word_len=6–实事,的精神-i=4,len=2,word_len=6–事,的精神-i=5,len=1,word_len=6,最后歧义的长度为6–将这6个字符作为一个AMBI-ID,输出到分词的结果中。然后跳过这6个字符,继续进行分词统计三元组•将上面分词得到的ID文件,进行三元组的统计•std::map来进行频率的统计•文件比较大时分成多个文件进行堆排序(红黑树排序或者快速排序也行)•归并排序最简单的语言模型(unigrammodel)•又被称为bag-of-wordsmodel•每个单词是独立的•因此,p(w1w2...wn)=p(w1)p(w2)…p(wn)•参数:{p(wi)}p(w1)+…+p(wN)=1(Nisvoc.size)•本质上是词的多项分布(multinomialdistribution)•一个文本可以看做是这个分布的一个实例更先进的模型•N-gram语言模型–一般意义上,p(w1w2...wn)=p(w1)p(w2|w1)…p(wn|w1…wn-1)–n-gram:每个词出现的概率只与它之前的n-1个单词有关–例如,bigram:p(w1...wn)=p(w1)p(w2|w1)p(w3|w2)…p(wn|wn-1)•MaximumEntropymodel为什么我们使用Tri-grammodel•很难使用更复杂的模型–它们有更多的参数,因此需要更多的数据来估计(一个文本是很小的样本)–它们在时间和空间上都增加了大量的计算复杂性•-unigram完全忽略了上下文的信息,只是简单地运用词语的频率进行估计,精确度不够•Bigram模型用出现的词预测下一个词,效果比unigram好QLR的基本思路•给定一个查询序列Q,我们想知道•根据Bayesrule,我们有•我们可以假设P(D)对所有的文档都一样•我们可以简单地用词频来估计以上概率)(QDP)()()(DPDQPQDPniiDqPDQP1)()(DfDqPDqii/)(,Smoothing•如果某个查询词在文档中没有出现,最后总的概率将为0,这显然是不合适的•应该给一个未出现的单词什么概率呢?•如果我们希望给未出现的单词一个非0的概率,我们就应该将已出现单词的概率降低()0pwiLanguageModelSmoothing(Illustration)P(w)WordwMax.LikelihoodEstimatewordsallofcountwofcountMLwp)(SmoothedLM15Jelinek-MercerSmoothing•我们可以用单词在整个文档集C中出现的概率来估计未出现单词的概率,并可以用一个系数来控制这个概率。•文档中出现的单词的概率是•最简单的方法是把系数设为一个常数,单词在整个文档中出现的概率可以用来估计D)()()1(CqpDqPiDiDCCiq/CcDfDqPiiqDqi,)1()(DirichletSmoothing•可以将设为与成反比,•因此,DD)/(DDDCcfDqPiiqDqi,)(niqDqDCcfDQPii1,log)(logGood-turingSmoothing•思想是将未出现的概率看成是与出现一次的概率相等,再在此基础上进行打折使得整个概率和为1,满足概率的归一化条件back-off的n-gram语言模型•思想是将未出现的概率看成是与出现一次的概率相等,再在此基础上进行打折使得整个概率和为1,满足概率的归一化条件研究方向FutureDirection•LDA作为降维方法,应用于k-means•以MedLDA为基础继续扩展•LDA+主动学习•半监督主题模型•AsymmetricDirichletPrior•更好的逼近方法(DataAugmentation)•文本摘要•非结构化数据的主题模型(微博、论坛、基因序列)•LDA应用到图像