1、中文分词简介
难点:分词歧义
方法:
1)规则分词:人工建立词库,按一定方式匹配切分。缺点:对新词很难进行处理。
2)统计分词:利用机器学习技术。缺点:过于依赖语料的质量。
3)混合分词:上述两种方法的结合。(用得较多)

2、规则分词
主要是通过维护词典,在切分语句时,将语句的每个字符串与词表中的词进行逐一匹配,找到则切分,否则不予切分。
主要方法有:正向最大匹配法;逆向最大匹配法;双向最大匹配法。
(1)正向最大匹配法
算法描述:
1)从左向右取待切分汉语句的m个字符串作为匹配字段,m为机器词典中最长词条的字符数。
2)查找机器词典并进行匹配。若成功,则将这个匹配字段作为一个词切分出来。若不成功,则将这个匹配字段的最后一个词去掉,剩下的字符串作为新的匹配字段,进行再次匹配,重复以上过程,直到切分出所有词。
例子:

# -*- coding: utf-8 -*class MM(object):def __init__(self):self.window_size = 3def cut(self, text):result = []index = 0text_length = len(text)dic = ['研究', '研究生', '生命', '命', '的', '起源']while text_length > index:for size in range(self.window_size+index, index, -1):  # 3,0,1piece = text[index:size]if piece in dic:index = size-1break  # 打破最小封闭的for或者while循环index += 1result.append(piece+'---')print(result)if __name__ == '__main__':text = '研究生命的起源'tokenizer = MM()print(tokenizer.cut(text))

输出:(效果不好)

(2)逆向最大匹配法(RMM)
算法描述:
从被处理文档的末端开始匹配扫描,每次取最末端的i个字符(i为词典中最长词数)作为匹配字段,若匹配失败,则去掉匹配字段最前面的一个字,继续匹配。在实际中,先将文档进行倒排处理,生成逆序文档,最后根据逆序词典,对逆序文档用RMM算法。
例子

# -*- coding: utf-8 -*class RMM(object):def __init__(self):self.window_size = 3def cut(self, text):result = []index = len(text)text_length = len(text)dic = ['研究', '研究生', '生命', '命', '的', '起源']while index > 0:for size in range(index-self.window_size, index):piece = text[size:index]if piece in dic:index = size+1break  # 打破最小封闭的for或者while循环index -= 1result.append(piece+'---')result.reverse()print(result)if __name__ == '__main__':text = '研究生命的起源'tokenizer = RMM()print(tokenizer.cut(text))

输出:

(3)双向最大匹配法
算法描述:将正向最大匹配法得到的分词结果和逆向最大匹配法得到的结果进行比较,然后按照最大匹配原则,选取词数切分最少的作为结果。
规则:
1)如果正反向分词结果词数不同,则取分词数量较少的那个
2)如果分词数量相同
①分词结果相同,可以返回任意一个
②分词结果不同,返回其中单个字较少的那个
例子
正向和逆向代码同上

if __name__ == '__main__':text = '研究生命的起源'tokenizer1 = MM()tokenizer2 = RMM()result_MM = tokenizer1.cut(text)result_RMM = tokenizer2.cut(text)len_MM = len(result_MM)len_RMM = len(result_RMM)if len_MM != len_RMM:  # 正反向词数不同if len_MM < len_RMM:result = result_MMelse:result = result_RMMelse:  # 分词结果数相同if operator.eq(result_MM, result_RMM):  # 两个分词结果相同result = result_MM  # 返回任意一个else:  # 分词结果不同,返回单个字数较少的那个min_MM = (x for x in result_MM if len(x) == 4)  # 返回MM中的单个字min_RMM = (x for x in result_RMM if len(x) == 4)  # 返回RMM中的单个字min_len_MM = len(list(min_MM))min_len_RMM = len(list(min_RMM))if min_len_MM > min_len_RMM:result = result_RMMelse:result = result_MMprint(result)

输出:

3、统计分词
(1)主要算法思想:
1)建立统计语言模型
2)对句子进行单词划分,然后对划分结果进行概率计算,获得概率最大的分词方式。会涉及到统计学习算法:隐含马尔可夫,条件随机场等
(2)语言模型
1)描述:为长度为m的字符串确定其概率分布,其中w1到wm依次表示文本中的各个词语。一般采用链式法则计算其概率值

当文本过长时,每一项计算难度都很大。可以使用n元模型降低计算难度。一般使用频率计数的比例计算n元条件概率。

表示词语在语料库中出现的总次数。
当n越大时,模型包含的词序信息越丰富,计算量随之变大。同时,长度越长的文本序列出现的次数也会减少,所以会出现分子分母为零的情况,因此在n元模型中需要配合平滑算法解决,比如拉普拉斯平滑算法等。
(3)HMM(隐马尔可夫)模型
算法思想:
每个字在构造一个特定的词语时都占据着一个确定的构词位置(词位),现规定每个字最多只有四个构词位置:B(词首)、M(词中)、E(词尾)、S(单独成词),就可以形成逐字标注的形式。比如:
①中文/分词/是/文本处理/不可或缺/的/一步!
②中/B文/E分/B词/E是/S文/B本/M处/M理/E不/B可/M或/M缺/E的/S一/B步/E!/S
用数学抽象表示如下:用λ=λ1λ2…λn代表输入的句子,n为句子长度,λi表示字(包括标点等非中文字符),o=o1o2…on代表输出的标签,理想的输出为:max = maxP(o1o2…on|λ1λ2…λn)。但无法进行精确地计算P,需要引入观测独立性假设,即每个字的输出仅仅与当前字有关。但会出现类似BBB、BEM等不合理的输出。
HMM就是用来解决该问题的一个方法,通过贝叶斯公式可以得到:
P(o|λ)=P(λ|o)P(o)/P(λ)
最大化P(o|λ)等价于最大化P(λ|o)P(o),常用方法是Veterbi算法(动态规划方法)。算法思想:如果最终的最优路径经过某个oi,那么从初始节点到oi-1点的路径必然也是一个最优路径——因为每一个节点oi只会影响前后两个P(oi-1|oi)和P(oi|oi+1)。
(4)其他统计分词方法
条件随机场方法:区别于隐马尔可夫算法(每个状态只与它前面的状态有关),条件随机场使得每个状态不仅与它前面的状态有关,还与它后面的状态有关。
神经网络分词算法:采用CNN,LSTM等深度学习网络自动发现一些特征和模式,然后结合CRF和softmax等分类算法进行分词预测。
对比机械分词法:能较好处理歧义和未登录词。但分词效果很依赖语料质量,计算量比机械分词大很多。

HMM算法实现的Github地址

4、混合分词
先基于词典的方式进行分词,然后再用统计分词的方法进行辅助。能保证词典分词准确率的基础上,对未登录词和歧义词有较好的识别。
5、中文分词工具——Jieba
Jieba分词结合了基于规则和基于统计这两类方法。首先基于前缀词典进行词图扫描,前缀词典是指词典中的词按照前缀包含得到顺序排列,从而形成一种层级包含结构。基于前缀词典可以快速构建包含全部可能分词结果的有向无环图,这个图包含多条分词路径。基于标注语料,使用动态规则的方法可以找出最大概率路径,并将其作为最终的分词结果。
使用 pip install Jieba 安装
(1)三种分词方式
1)精确模式:将句子最精确地分开,适合文本分析。
2)全模式:把句子中所有可以成词的词语都扫描出来,但是不能解决歧义。
3)搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
例子:
(2)实战:高频词提取
高频词提取方法及实现

参考:《python自然语言处理实战 核心技术与算法》

NLP学习路径(三):NLP中文分词技术相关推荐

  1. NLP学习(二)中文分词技术

    运行平台: Windows Python版本: Python3.x IDE: PyCharm 一. 前言 这篇内容主要是讲解的中文分词,词是一个完整语义的最小单位.分词技术是词性标注.命名实体识别.关 ...

  2. NLP学习(二)—中文分词技术

    本次代码的环境: 运行平台: Windows Python版本: Python3.x IDE: PyCharm 一.    前言 这篇内容主要是讲解的中文分词,词是一个完整语义的最小单位.分词技术是词 ...

  3. NLP|中文分词技术及应用

    摘要:中文分词是中文信息处理的重要基础,本文详细阐述了目前主要的几种中文分词算法的技术原理 .中文分词目前的瓶颈和评价准则,以及中文分词的具体应用. 中文分词指将一个汉字序列切分成一个个单独的词.现有 ...

  4. NLP+词法系列(二)︱中文分词技术简述、深度学习分词实践(CIPS2016、超多案例)

    摘录自:CIPS2016 中文信息处理报告<第一章 词法和句法分析研究进展.现状及趋势>P4 CIPS2016 中文信息处理报告下载链接:http://cips-upload.bj.bce ...

  5. 【原创】NLP中的中文分词技术

     NLP中的中文分词技术 作者:mjs (360电商技术组) 随着需求的变化和技术的发展,互联网企业对数据的分析越来越深入,尤其是自然语言处理处理领域,近几年,在搜索引擎.数据挖掘.推荐系统等应用方 ...

  6. NLP词法分析(一):中文分词技术

    文分词介绍 中文分词相较于英文分词要难许多,因为英文本身就是由单词与空格组成的,而中文则是由独立的字组成的,但同时语义却是有词来表达的.因此对于中文的分析与研究,首先应寻找合适的方法进行分词.现有的中 ...

  7. 【自然语言处理】N-最短路径法进行中文分词

    本文摘要 · 理论来源:[统计自然语言处理]第七章 自动分词 · 参考文章:https://www.cnblogs.com/Finley/p/6619187.html · 代码目的:手写N-最短路径法 ...

  8. 词法分析-中文分词技术-正向最大匹配法与逆向最大匹配法

    词法分析-中文分词技术-正向最大匹配法与逆向最大匹配法 Type真是太帅了 于 2018-12-31 13:20:07 发布 1930  收藏 1 分类专栏: 编程 版权 编程 专栏收录该内容 15 ...

  9. 中文分词技术比较:单字切分 vs 中文分词

    全文信息检索系统中,创建倒排索引时应当使用什么分词方式一直是众说纷纭,毫无定论.    具我所知,已有某某 paper "研究指出"采用二元切分的方式构建索引是"最好的& ...

  10. 基于垃圾短信与垃圾邮件的检测以及iphone中siri所使用的IKAnalyzer中文分词技术

    刚开始接触安卓开发,导师就让做了一个基于安卓的垃圾短信检测软件,其中中文分词让我搞了一天,我所使用的是IKAnalyzer中文分词技术,这个包已经很是成熟.因为新手在使用中可能会出现导入的工程包错误而 ...

最新文章

  1. fork() || fork() || fork() 与 fork() fork() fork()
  2. pycharm的anaconda配置
  3. android控制音量加减命令 python_盘点5种基于Python生成的个性化语音方法
  4. Python树莓派编程1.2 探索树莓派
  5. JVM源码分析之System.currentTimeMillis及nanoTime原理详解
  6. matlab产生一组均为一的矩阵,在matlab中如何从一组数中得到随机数组成一个n*n的矩阵...
  7. 错误: 元素值必须为常量表达式_C语言编程常见错误集锦 【下】
  8. 什么是Hyperledger?Linux如何围绕英特尔的区块链项目构建开放平台?
  9. think queue 消息队列初体验
  10. 机器学习实战:PCA降维 样本协方差
  11. Git 查看帮助命令
  12. 如何提高mysql查询效率_如何提高MySQL查询效率
  13. android之Handler详解
  14. Python爬虫实战:应用宝APP数据信息采集
  15. 家用计算机存储容量,计算机内存储器容量有多大?
  16. 三维地图可视化应用教程
  17. java 向量 内积_向量内积(点乘)和外积(叉乘)概念及几何意义
  18. 这位日本网友和谷歌街景的故事,感动了58万人
  19. 如何把晨光计算机调成音乐模式,伴着晨光走向你——广播《晨光音乐行》栏目运作心得...
  20. 两个不同包里有相同的类

热门文章

  1. MySQL中rank函数的使用
  2. multisim如何添加8050(例),8550,9013,9014
  3. 目前淘宝客单价比较高的商品怎么引流
  4. 如何修改echarts源码(其他框架也可适用)
  5. CDH大数据平台搭建之HADOOP分布式集群搭建
  6. 俄亥俄大学计算机科学系,俄亥俄大学课程及专业设置
  7. Beyond Compare 4 “授权秘钥已被吊销“ 的解决办法
  8. 寂寞的最初,爱情不过如此
  9. VINS-Mono 代码详细解读——回环检测与重定位、四自由度位姿图优化
  10. 通过内容关键词查找文件