随笔分类 - 自然语言处理
摘要:n元ngram模型本质上就是trie树的结构 ,逐层状态转移。在sun拼音中是采用的是逐层按照顺序用vector表示,查找的时候逐层二分查找。sun拼音的建立ngram模型的方法也是以按照字典序排好序的<ngram元组,次数>序列作为输入建立起来的。 利用顺序存储+二分查找应该是最节省空间的了。但是效率要受一定影响。其余的trie树实现包括可以利用map(hash_map更耗费空间一点),sun拼音也有一个基于map的trie树实现,sirlm是利用自己的一个LHash实现的类似。另外利用double array trie对于这种预先已经排好序不需要动态添加删除的情况也比较适合但是
阅读全文
摘要:由于语料不可能覆盖掉所有的情况,比如语料中有“小明读了一本书”, 那么“小李读了一本书”没有在语料中出现按照MLE最大似然估计其概率就是0,这显然是不合常理的。所以我们需要对模型进行光滑处理,就是要分一部分概率给语料中没有出现的部分。 问题是如何分配,应该分配多少呢。(下面的课件来自nhu的NLP课程) 这种情况看上去我们分给未知部分的概率太多了24/29 更多的观察更好的数据更小的光滑,分给未知部分23/326 一个极端的情况,这样add one广顺 其实会认为未知事物概率更大,看到我们训练中的数据的可能性很小。 可以看到对于大的词典,我们分配给未知事物的概率太大了。为了减少未知事物分配的概
阅读全文
摘要:ngram模型是统计语言的最基本的模型了,这里将给出用中文语料做实验建立ngram模型的个人总结,主要参考sun拼音2.0的代码以及有点意思拼音输入法,会参考srilmstevejian.cublog.cn。我会尽量逐步完成所有的实验总结。 分词与统计 对于中文语料和英文不同需要我们先进行分词,当然如果是切分好空格隔开的语料就简单许多。假设是普通的语料,sun拼音的做法是采用正向最大匹配分词,并且去掉可能有歧义的部分,当然这些都是首先依赖于词典。 利用词典文本建立一个存储字典中词的索引结构。可以选择hash map,map,trie树等结构,这里选择double array trie作为索引结
阅读全文
摘要:以前写了个关于MMSEG实现的,那个写的很烂,本身我也没有实现完全。最近在工作中对原有系统的分词进行了代码重构和算法优化。并且针对电子商务网站搜索的特征,给出对于离线没有识别出歧义的片段进行全切分,而且与IK的全切分不同,同时我们还要保证路径的完整,即我们不需要找到所有的路径,但是我们要确定所有的全切分可能路径出现的词都会被切出,而IK的切法只是给出所有有意义的词,并不考虑完整路径问题,比如 “中华人民” 按照IK的切法,“中华” “华人” “人民”,而我们希望的结果是“中华,中,华人,
阅读全文

浙公网安备 33010602011771号