【NLP】分词 - hippowc/hippowc.github.io GitHub Wiki
概述
对于文档NLP的处理流程,一般分为这么几步:
- 原始文本
- 分词
- 清洗
- 标准化
- 特征提取
- 建模
中文分词技术
规则分词
基于规则分词是一种机械分词方法,主要通过维护词典,在切分语句时,将语句中每个字符串语词表中的词进行逐一匹配,找到则切分。
按照匹配切分的方式,分为
- 正向最大匹配(Maximum Match,MM法)
- 假设词典中最长词有i个字符,则用被处理文档的当前字符串的前i个字符作为匹配字段,查找字典,若找到则匹配成功
- 若未找到,则去掉字符串最后一个字符,再次查找,直到切分出一个词或匹配字符串为0为止
- 取下一个长度为i的字符串
- 逆向最大匹配(Reverse Maximum Match,RMM法)
- 原理与MM相同,只是从文档的末尾开始取
- 双向最大匹配(Bi-direction Match, BMM法)
- 将正向和逆向两者分词结果作比较,根据最大匹配原则,选择切分最少的结果
统计分词
基于规则分词,简单高效,但是维护词典是个庞大的工程。网络如此发达的今天,新词不断出现,很难通过词典覆盖所有词。
统计分词主要思想是,将词看做各个字组成的,如果相连的字在不同文本中出现的次数越多,就证明这相连的字很可能是一个词。一般方式:
- 建立统计语言模型
- 对句子进行单词划分,对划分结果进行概率计算,获得概率最大的统计方式
- 相关统计学习算法:隐含马尔科夫(HMM),条件随机场(CRF)
- N-gram模型的提出,很好的与HMM进行了结合,主要解决了计算复杂度的问题。
- N-gram及计算条件概率时,忽略大于等于N的上文词的影响
中文分词器(Java)
- IK分词器:采用正向迭代最细粒度切分算法
- Ansj:基于google语义模型+条件随机场模型
- MMSeg4J:基于正向最大匹配
- Paoding分词
- Jcseg:基于MMSeg4j的轻量级分词器,集成了关键词提取(textRank)等功能
- Jieba分词:很有名的Python分词工具的Java版
- word分词:提供多种基于词典的分词方法,利用ngram消歧,能准确识别英文、数字等数量词