作者:

乐雨泉(yuquanle),湖南大学在读硕士,研究方向机器学习与自然语言处理。欢迎志同道合的朋友和我在公众号"AI 小白入门"一起交流学习。

本文谈一谈分词的那些事儿,从定义、难点到基本方法总结,文章最后推荐一些不错的实战利器。

01

定义

先来看看维基百科上分词的定义:Word segmentation is the problem of dividing a string of written language into its component words.

中文分词(Chinese Word Segmentation)指的是将一个汉字序列切分成一个个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。

简单的讲,中文分词就是让计算机系统在汉语文本中的词与词之间自动加上空格或其他边界标记。

02

汉语分词的难点

汉语分词是自然语言处理中一个重要的基础研究任务,其主要难点包括分词规范、歧义切分、未登录词识别等。

分词规范:词这个概念一直是汉语语言学界纠缠不清又挥之不去的问题,也就是说,对于词的抽象定义(词是什么)和词的具体界定(什么是词)迄今拿不出一个公认的、具有权威性的词表来。

歧义切分:切分歧义是汉语分词研究中一个大问题,因为歧义字段在汉语文本中大量存在。处理这类问题可能需要进行复杂的上下文语义分析,甚至韵律分析(语气、重音、停顿等)。

未登录词识别:未登录词又叫生词,一般有二种解释:第一种指的是已有的词表中没有收录的词;第二种指的是已有的训练语料中未曾出现过的词。在第二种解释下,又称之为集外词(out of vocabulary,OOV)。

03

分词基本方法

分词的基本方法包括基于词典的方法、基于理解的分词方法和基于统计的分词方法、基于深度学习的分词方法等。

1. 基于词典的分词方法(机械分词)

这种方法本质上就是字符串匹配的方法,将一串文本中的文字片段和已有的词典进行匹配,如果匹配到,则此文字片段就作为一个分词结果。

但是基于词典的机械切分会遇到多种问题,最为常见的包括歧义切分问题和未登录词问题。

常用的字符串匹配方法包括:正向最大匹配法(从左到右的方向);逆向最大匹配法(从右到左的方向);最小切分(每一句中切出的词数最小)双向最大匹配(进行从左到右、从右到左两次扫描)。

这类算法的优点是速度快,时间复杂度可以保持在O(n),实现简单,效果尚可,但是对歧义和未登录词处理效果不佳。

2. 基于统计的分词方法

基于统计的分词方法是在给定大量已经分词的文本的前提下,利用统计机器学习模型学习词语切分的规律(称为训练),从而实现对未知文本的切分。

例如最大概率分词方法和最大熵分词方法等。随着大规模语料库的建立,统计机器学习方法的研究和发展,基于统计的中文分词方法渐渐成为了主流方法。

主要的统计模型有:N元文法模型(N-gram),隐马尔可夫模型(Hidden Markov Model ,HMM),最大熵模型(ME),条件随机场模型(Conditional Random Fields,CRF)等。

基于统计的分词方法包括:N-最短路径方法、基于词的n元语法模型的分词方法、由字构词的汉语分词方法、基于词感知机算法的汉语分词方法、基于字的生成式模型和区分式模型相结合的汉语分词方法。

3. 基于深度学习的分词方法

近几年,深度学习方法为分词技术带来了新的思路,直接以最基本的向量化原子特征作为输入,经过多层非线性变换,输出层就可以很好的预测当前字的标记或下一个动作。

在深度学习的框架下,仍然可以采用基于子序列标注的方式,或基于转移的方式,以及半马尔科夫条件随机场。

这类方法首先对语料的字进行嵌入,得到字嵌入后,将字嵌入特征输入给双向LSTM,输出层输出深度学习所学习到的特征,并输入给CRF层,得到最终模型。现有的方法包括:LSTM+CRF、BiLSTM+CRF等。

4. 基于理解的分词方法

基于理解的分词方法是通过让计算机模拟人对句子的理解,达到识别词的效果。其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。

它通常包括三个部分:分词子系统、句法语义子系统、总控部分。在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断,即它模拟了人对句子的理解过程。

这种分词方法需要使用大量的语言知识和信息。由于汉语语言知识的笼统、复杂性,难以将各种语言信息组织成机器可直接读取的形式,因此目前基于理解的分词系统还处在试验阶段。

04

分词工具推荐

1. Jieba

“结巴”中文分词:做最好的 Python 中文分词组件。

Github 地址:

https://github.com/fxsjy/jieba

2. SnowNLP

SnowNLP 是一个 python 写的类库,可以方便的处理中文文本内容。

Github 地址:

https://github.com/isnowfy/snownlp

3. THULAC

THULAC(THU Lexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。

Github 地址:

https://github.com/thunlp/THULAC

4. NLPIR

NLPIR-ICTCLAS 汉语分词系统。

Github 地址:

https://github.com/tsroten/pynlpir

5. StanfordCoreNLP

斯坦福 NLP 组的开源,支持 python 接口。

Github 地址:

https://github.com/Lynten/stanford-corenlp

6. HanLP

HanLP 是一系列模型与算法组成的 NLP 工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用。

Github 地址:

https://github.com/hankcs/pyhanlp

代码已上传:

https://github.com/yuquanle/StudyForNLP/blob/master/NLPbasic/WordSegmentation.ipynb

参考:

1. 统计自然语言处理

2. 中文信息处理报告-2016

相关阅读:

NLP 入门 (1)| 一篇小文入门 Python

NLP 入门 (2)| 快速入门 Numpy

作者简介

乐雨泉 (yuquanle),湖南大学在读硕士,研究方向机器学习与自然语言处理。曾在IJCAI、TASLP等会议/期刊发表文章多篇。欢迎志同道合的朋友和我在公众号"AI小白入门"一起交流学习,探讨成长。

结巴分词有前空格_NLP 分词的那些事儿相关推荐

  1. 结巴分词有前空格_jieba英文空格分词问题

    1.对于关键词存在空格或者特殊符号的情况下,jieba无法分出该词 2.在github上找到了一个解决方案,修改jieba源码 __init__.py 免费分享,造损免责. 打开默认词典(根目录)或自 ...

  2. python中文分词统计_python 实现中文分词统计

    总是看到别人用Python搞各种统计,前端菜鸟的我也来尝试了一把.有各种语义分析库在,一切好像并不是很复杂.不过Python刚开始看,估计代码有点丑. 一.两种中文分词开发包 thulac (http ...

  3. Java web:基于jieba分词器(或ansj分词器)的文章关键词字符云(词云图)

    上来先丢一个展示图,吸引一下注意力(跑. 上图为对某论文用jieba分词后,计算其逆文档频率(TF-IDF)作为权重,并用echarts的字符云扩展包echarts-wordcloud画出来的字符云图 ...

  4. Android 分词功能,Android版中文分词:原理、接入和启动优化

    中文分词 中文分词功能是一项常用的基础功能,有很多开源的工程实现,目前能应用于Android手机端的中文分词器没有很完善的版本.经过调研,我选择了结巴分词,该开源工程思路简单,易于理解,分词效果也还不 ...

  5. Python在Jupyter上使用HMM进行中文分词,将新闻文本分词后提取其中的高频词

    首先,需要三个.txt文件: 需要提取高频词的搜狐新闻文本news.txt(需要5积分,不能白嫖,气四~) 训练HMM的trainCorpus.txt(需要5积分,不能白嫖,气四~) 停顿词stopw ...

  6. Elasticsearch 默认分词器和中分分词器之间的比较及使用方法

    首发地址:http://www.54tianzhisheng.cn/2017/09/07/Elasticsearch-analyzers/ 介绍:ElasticSearch 是一个基于 Lucene ...

  7. ik分词和jieba分词哪个好_JiebaIK Analyzer——分词工具的比较与使用

    现有的分词工具包概览 现有的分词工具包种类繁多,我选取了几个比较常见的开源中文分词工具包进行了简单的调查.有感兴趣的同学可以通过下表中的Giuthub链接进行详细地了解. 常见开源的中文分词工具 接下 ...

  8. Elasticsearch 系列文章(一):Elasticsearch 默认分词器和中分分词器之间的比较及使用方法

    介绍:ElasticSearch 是一个基于 Lucene 的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口.Elasticsearch 是用 Java 开 ...

  9. python 分词工具训练_中文分词入门和分词工具汇总攻略

    [注意]如果寻找分词和文本分析软件,为了完成内容分析和其他文本研究任务,直接使用集搜客分词和文本分析软件就可以了.本文是为了讲解集搜客分词和文本分析的实现原理,是给产品设计者和开发者看的. 最近在整理 ...

最新文章

  1. JAVA 基本类型传值,对象类型传引用
  2. 威刚(A-DATA)DDR3-1600震撼评测
  3. python字符串写入excel-python 将数据写入excel
  4. c语言冒泡排序(解析)
  5. mydumper备份原理和使用方法
  6. 关于北京皮纹智力测量与台湾皮纹测量智力测试争议的几点回应之二
  7. TensorFlow笔记(10) CheckPoint
  8. 如何使用JavaScript获取客户端的IP地址?
  9. 如何将电视机用作 Mac 的显示器?
  10. iOS 网络https传输
  11. 使用STM32或GD32解析xml格式数据
  12. Proxyee-down – 百度网盘全平台满速下载神器,还带有IDM的全网嗅探功能!(替代PanDownload)
  13. 《2020年中国互联网网络安全报告》:90%的小程序存在安全隐患
  14. 计算机网络:随机访问介质访问控制之CSMA协议
  15. 网关短信 群发 为什么卡发短信 群发 贵 ?
  16. WIN10本地搭建APACHE+PHP运行环境
  17. 服务器通过笔记本电脑联网
  18. sklearn中StandardScaler()
  19. Oracle---查询
  20. linux判断搜索结果,shell编程之条件判断和find查询

热门文章

  1. java 里面怎么截取倒数第几个字_Java反射是什么
  2. Sapera帮助文档
  3. 中国计算机信息系统集成行业协会有含金量吗,系统集成工程师证书的含金量怎么样...
  4. 学hadoop需要什么基础
  5. Mycat读写分离以及拆库拆表综合实验3:通过日志分析mycat路由过程
  6. Storm目录树和任务提交过程
  7. mac composer 安装
  8. Servlet规范总结
  9. CentOS6.5升级内核
  10. Java中线程安全的单例模式