September 23
分词的那些事(二)
分词的应用背景
也是基于上面两种情况来说吧。先说基于信息检索的。根据我们前面的了解,可以知道这个分词在除了切分精度之外,另外一个重要的特征就是保证切分的一致性。比如说:用户搜索时候输入的query中包含的某些词 和 这些词在网页中的环境是不一样的。所以,这个时候,为了能搜索到相关的网页,切词一定要保证一致性。比如“北京市长是谁”,用户的query为“北京 市长”,搜索引擎就切分成“北京”“市长”,如果在网页中“北京市长某某”切分成了“北京市|长|某某”是肯定搜索不出的。
说到这,想起一个问题,大家关注中文切分的时候,可能会有这样的疑问,为什么用HMM CRF切分的精度能达到95%以上,但是很多搜索引擎公司不用呢,还是用最大匹配来做。速度是其中一个原因,另外一个就是,基于上下文相关的统计切分方法在保持一致性的时候做的不够好。当query文本和句子文本存在差异的时候,会造成搜索不到。但是,如果用户query和网页都切错,但是还是保持一致,却同样可以找回网页。
这里不是说统计切分没用。统计切分有用,只不过在应用于搜索引擎的时候,要换个思路。比如在切分的时候,输出多种切分结果,比如上面“北京市长”还要切分成“北|京市长”“北|京|市长”和“北|京|市|长”,然后多建立索引,不管用户的query语言环境是怎样的,搜索引擎总能找到对应的那部分。当然了,解决的办法有很多,上面只是比较直接的想法。
第二个应用背景就是切分可以帮助机器来理解句子。这个应用就很多了,在英文里面,大家经常看到phrase based的某某方法,都是需要切分的;包括很多关键词提取等等都是需要切分这个模块来实现。
也可以换个角度来看这个问题。中文切分里面有个方法是最大匹配,根据我们的经验或者联合分布概率or信息量等来说,phases相对于words来说歧义性要小一些,长的phrases要比他的subphrases的歧义性要小些。因此在处理很多歧义问题的时候,也需要切分(处理歧义问题也是理解语言,哈哈)。
对句子分析的时候,nlp里面有个topic叫chunking。它是基于词性句法来将一个句子切分成若干块。这个方法也是目前做英文句子切分中用到的非常广泛的方法。由于句子有很好的句法结构,因此,在切分句子的时候可以充分地利用词性以及句法结构,而不是单一的运用词典、统计/机器学习方法等。稍微说下两者的区别:理论上说,如果学习语料足够多,任何一种基于语法、或者heuristic的方法都可以用统计、机器学习来做。但是由于各方面的限制,因此利用人的总结出来的知识来辅助学习,效果比单纯地用statis ML要好些。在切分这块,日本有个切词工具MeCab,就是利用了相关句法知识,做得也不错。
但是在处理互联网的语言的时候,在处理用户query的时候,这个方法就显得有些力不从心了。对此也有个专门的topic,query segmentation。query segmentation就是根据语义对用户的query进行切分。这个主要针对英文的。有兴趣的大家可以看看。下面我会把这个方法放在切分方法里面一起介绍。