文本分析基本流程
文本分析流程
清洗跟分词的顺序,可以按需要来进行
清洗主要包括过滤、停用词、特殊符号、拼写纠错、大小写转换、标点符号转换等等
分词可以使用 jieba,SnowNLP 等等来进行
标准化包括 Stemming、Lemmazation
特征提取主要有 tf-idf、Word2vec
建模包括相似度算法、分类算法等等
分词
分词比较简单,但却非常重要,可以说分词对整个分析结果起着成败的作用,可以说,越是基础的东西,对 NLP 的结果越是重要。
常用的中文分词工具
Jieba 分词 优点:轻量级、简单、快速、源码开放
SnowNLP
LTP
HanNLP
匹配算法
前向最大匹配 forward-max matching
窗口数 h=4,意思就是取前 4 个字在词库中寻找匹配,h 越大,循环的次数越多,时间也需要越长。
后向最大匹配 backward-max matching
与前向最大匹配 forward-max matching 相反,从后面的字开始检索
前向最大匹配与后向最大匹配的结论有可能是不一样的
除了这两种,还有将两种相结合的双向匹配算法
匹配算法的缺点
匹配算法没有很好地考虑语义,也就是含义,不考虑单词与单词之间的含义
整个过程是贪心策略,效率较高,但它不能得到最好的分词结果,从全局上考虑并不是最好的,它只能得到局部的最好选项。
这种情况,可以通过引入语言模型 Language model,如 Unigram 语言模型来计算语义的概率,从而选择最优的那种。
维特比算法 Viterb
维特比算法可以用于解决效率的问题,它是一个动态规划的算法,通过把概率转向导数,求最小值。
过滤无用的词
如果是对语义理解帮助不大,或者是会影响到语义理解的词,都可以过滤掉。这样可以减少词库的大小,提高效率。
根据场景的需要,一般会对停用词,或者出现频率很低的词去掉。不同场景下,对这类词的定义也是不一样的,所以一定要清楚这些单词在场景中是否具有意义。
停用词:例如,在英文中,“the”、“a”、“an”这些单词,如果被当作没有什么意义的,经常会被当作停用词来处理。
低频词:对分析作用不大,也可以去掉。
词的标准化
样子看起来不一样,但是语义是一样的单词。如:do、done、did。这种情况可以把它们合并起来。
在这里介绍 Stemming 和 Lemmazation 两种方法。Stemming 把单词合并的时候,do、done、did 会被统一为 do。但它未必会把单词都合并成能被我们认知的单词,也就是说,不一定会在它的词库当中。例如 fly、flies。它们会被合并为 fli, 而非该单词的原型,但这并不影响计算机对它的识别,因为计算机识别的是该向量。而 Lemmazation 相较而言,更加严格,合并后的单词是必然包含在词库当中的。
Porter Stemmer
Porter Stemmer 是 Stemming 中很经典的一种算法。它有自己的一套很强的编写规则,例如,凡是 ational 的后缀,都会被改写成 ate。 例如,international,就变成了 internate。这种规则是经过了语言学家通过经验而得出来的。
拼写纠错
拼写纠错 spell correction
从输入的【错误单词】与正确的单词进行比较,找相似的单词,且该单词是存在于词库的。
编辑距离
编辑距离 edit distance 是一个计算字符串相似度的动态规划算法。例如将错误的单词【mime】进行纠正。那么【mime】有可能是【mine】或者【mite】或者【time】等等。那么,从错误的单词,到一个拼写正确的单词之间,计算它们不同之处的距离,例如,m 到 t 之间,只需要 replace *1 次的距离,当然,还可以进行 add,insert,delete,replace 等等的计算来得出最佳结果。
版权声明: 本文为 InfoQ 作者【Qien Z.】的原创文章。
原文链接:【http://xie.infoq.cn/article/582c327195ec6e2e502737730】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论