在做文本挖掘的时候,首先要做的预处理就是分词。英文单词天然有空格隔开容易按照空格分词,但是也有时候需要把多个单词做为一个分词,比如一些名词如“New York”,需要做为一个词看待。而中文由于没有空格,分词就是一个需要专门去解决的问题了。无论是英文还是中文,分词的原理都是类似的,本文就对文本挖掘时的分词原理做一个总结。
1、分词的基本原理
现代分词都是基于统计的分词,而统计的样本内容来自于一些标准的语料库。假如有一个句子:“小明来到荔湾区”,我们期望语料库统计后分词的结果是:"小明/来到/荔湾/区",而不是“小明/来到/荔/湾区”。那么如何做到这一点呢?
从统计的角度,我们期望"小明/来到/荔湾/区"这个分词后句子出现的概率要比“小明/来到/荔/湾区”大。如果用数学的语言来说说,如果有一个句子S,它有m种分词选项如下:![](https://img.haomeiwen.com/i17895677/5ff69c8cadfb1cf8.png)
其中下标ni代表第i种分词的词个数。如果我们从中选择了最优的第r种分词方法,那么这种分词方法对应的统计分布概率应该最大,即:
![](https://img.haomeiwen.com/i17895677/7ec4c3b4f0953c66.png)
但是我们的概率分布P(Ai1,Ai2,...,Aini)并不好求出来,因为它涉及到ni个分词的联合分布。在NLP中,为了简化计算,我们通常使用马尔科夫假设,即每一个分词出现的概率仅仅和前一个分词有关,即:
![](https://img.haomeiwen.com/i17895677/c9df8209679f03e2.png)
使用了马尔科夫假设,则我们的联合分布就好求了,即:
![](https://img.haomeiwen.com/i17895677/3577e0627ab44d64.png)
而通过我们的标准语料库,我们可以近似的计算出所有的分词之间的二元条件概率,比如任意两个词w1,w2,他们的条件概率分布可以近似的表示为:
![](https://img.haomeiwen.com/i17895677/fb6927eaea31781a.png)
其中freg(w1,w2)表示w1,w2在语料库中相邻一起出现的次数,而其中freq(w1),freq(w2)分别表示w1,w2在语料库中出现的统计次数。
利用语料库建立的统计概率,对于一个新的句子,我们就可以通过计算各种分词方法对应的联合分布概率,找到最大概率对应的分词方法,即为最优分词
2.常用的分词工具
对于文本挖掘中需要的分词功能,一般我们会用现有的工具。简单的英文分词不需要任何工具,通过空格和标点符号就可以分词了,而进一步的英文分词推荐使用nltk,对于中文分词,则推荐使用结巴分词(jieba)。这些工具使用很简单。
结巴分词:https://github.com/fxsjy/jieba/
3、结语
分词是文本挖掘的预处理的重要的一步,分词完成后,我们可以继续做一些其他的特征工程,比如向量化(vectorize),TF-IDF以及Hash trick,这些我们后面再讲。
网友评论