最近工作中涉及到新词的识别,在漫长的程序运行期间,记录下相关心得。这里为较原始的新词识别算法,起到一个了解的作用。
新词: 指未在已经训练完的词库或语料库中大量出现的词称为新词(很多情况下也成为未登录词)。
目前新词识别的技术主要包括3个方向:1. 基于规则;2. 基于统计概率;3. 规则和统计相结合;
1. 基于统计
基于统计的新词识别技术包括 {词之间互信息,词出现频率}
1.1 互信息
互信息之统计模型中衡量2个随机变量X,Y之间的关联程度,而在新词的识别中则特指相邻2个词之间的关联程度。
MI(X,Y)=log2(p(X,Y)/p(X)*P(Y))
那么当『XY』未在已经训练完的词库中出现,且该互信息高于某一阀值值,那么我们就假定该词为新词。
1.2 频率
当某一组连续相邻的字在新的语料库或网络日志中大量出现而未在词库中登记时,那么我们也可假定该词为新词。
这种方法思路很简单,实现的代码也相当容易,但是该方法必须基于大规模的语料库才能准确识别。
注:此处当处理海量语料库时 性能问题是最需要关注的。下文将详细讲解。
2. 新词识别工作
在本文中假设还未建立训练词库,需训练。
2.1 大规模语料库准备
2.2 候选词选取方案
2.3 训练词库
2.4 统计并选取新词
2.1 大规模语料库
很多情况下都可以通过网络爬虫获取相关网络富文本,然后通过Tika处理得到简单txt文本;或者可以分析用户日志等数据获得;或从数据库获取用户留言日志;
2.2 候选词选取
候选词的选取在很大程度上会影响程序的性能。主要包括2类方法:1)基于分词算法的N元词组;2)基于字的N元词组
在使用分词算法的情况下,需要分词词库,而N元词组就不需要词库。
2.2.1 分词算法
若语料:“中文新词识别”,若分词后结果:中文/,新/,词/,识别/。
然后候选2元词组:中文新/,新词/,词识别/。最后统计词频以此来决定是否加入词库(分词词库必须加入该词库)。
2.2.2 N元词组
若语料:“中文新词识别”,若2元词组,则结果:中文/,文新/,新词/,词识/,识别/。然后统计该2元词组的词频,并决定是否加入词库。
从上面2种方法可以看到按字的N元词组会分出更多的词组,需要处理更多的数据,效率会较低,但这种方法较全面,不会遗漏数据,不受分词词库影响。比如:“文新” 这个词组在分词中会遗漏,而按字N元不会遗漏。
2.3 统计并确定是否加入词库
2.4 新词获取
新词获取的前面几个步骤与上文一样,包括候选词的获取。然后统计该词频率或计算相邻词之间的互信息,以此与设定的阀值进行比较决定是否为新词。最后将识别出来的新词再词添加到词库中,不断学习不断识别,以此循环。
至此,简单的新词识别工作完成,只要语料库足够强大,统计方法会得到较好的效果,且方法简单。
————后续将继续深入新词识别算法,采用语言模型来进行新词识别,上述方法较为原始。————
注: 考虑到海量语料库和词频统计的特点,非常适合在Hadoop平台进行mapReduce模型计算。
下一步将新词识别应用在Hadoop平台上。