【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消歧,能准确识别英文、数字等数量词