1.导语:

本周对自然语言处理的分词技术进行了学习。本文针对分词技术的进行了全视角的概览,目标是掌握什么是分词技术、为什么需要分词技术和如何使用分词技术。后续将分不同篇幅对其中内容进行深挖和讲解。文章结构如下(全文阅读时间大约10分钟):

2.简介:

首先,简单介绍一下自然语言处理技术(简称NLP),是人工智能领域中一个重要的方向,主要研究如何让人类和计算机之间,能够使用人类能够理解的语言进行有效沟通,其涵盖语言学、计算机科学、数学等多种交叉学科。在现如今人工智能技术迅速发展时期,AI技术逐步从感知智能朝认知智能大跨步迈进,NLP技术或许是人类实现强人工智能的关键所在。

什么是分词技术?分词技术属于自然语言处理技术范畴,分词就是将句子中的词语划分出来的技术,人能够知道哪些是词语,如何让计算机能够理解和划分,其处理过程就是分词。当然,分词只是一种工具,场景不同,要求也不同。

为什么需要分词技术?因为许多自然语言处理技术都会围绕词语展开,例如情感分析、问答模型等;分词效果直接影响上层技术的效果;并且,词语是最小粒度有意义的语言成分;英文往往不需要分词,但中文需要,因为中文在基本文法上有其特殊性,主要体现在:1.英文以空格作为天然分隔符,中文词语间没有分隔2.古文词通常是单个汉字,而现在汉语双字多字词比较多3.词和词组边界模糊

3.技术难点

到目前为止,中文分词技术仍存在三大难题未完全突破:1.分词的规范:字和词的界限往往很模糊,并没有一个公认、权威的标准,会有很多不同主观上的分词差异2.歧义词的切分,歧义词的情况分为:交集型歧义组合型歧义混合型歧义。另外,更头痛的情况就是真歧义,即使是人都无法判断的情况3.未登录词识别,就是新词的意思,如人名、地名、网络用词等等

4.分词算法概述

4.1算法中的数据结构

在展开算法实现之前,先来讲讲算法中提到的数据结构:一个是词典,一个是词图

词典一般可以用链表或数组实现,更高级的词典还有Trie树和AC自动机等,例如在HanLp的源码中用户自定义词典的识别是用的AC自动机实现的(需要了解Trie树、KMP算法、AC自动机可以在后续的推文中学习)。

图作为一种常见的数据结构,其存储方式一般有两种:邻接矩阵和邻接表。所谓矩阵其实就是二维数组,所谓邻接矩阵存储结构,就是每个顶点用一个一维数组存储每条边的信息,就能用矩阵表示图中各顶点之间的邻接关系。

邻接表,存储方法跟树的子链表示法相类似,是一种顺序分配和链式分配相结合的存储结构。

4.2.分词算法简介

现有的分词算法,大体上可以分为如下几类:1.基于规则的分词算法 2.基于统计的分词算法 3.基于语义的分词算法 4.基于理解的分词算法(该部分内容在本期后续推文中会展开讲解)

基于规则的分词算法主要思想是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行匹配。若在词典中找到某个字符串,则匹配成功。该方法有三个要素,即分词词典、文本扫描顺序和匹配原则。
优点是简单,容易实现。缺点是:匹配速度慢;存在交集型和组合型歧义切分问题;词本身没有一个标准的定义,没有统一标准的词集;不同词典产生的歧义也不同;缺乏自学习的智能性。

基于统计的分词算法的主要核心是词是稳定的组合,因此在上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词。因此字与字相邻出现的概率或频率能较好地反映成词的可信度。可以对训练文本中相邻出现的各个字的组合的频度进行统计,计算它们之间的互现信息。互现信息体现了汉字之间结合关系的紧密程度。当紧密程 度高于某一个阈值时,便可以认为此字组可能构成了一个词。该方法又称为无字典分词。
实际运用中会结合基于规则的分词方法,不仅发挥词典匹配的速度快的优势,又结合无词典分词能够结合上下文识别、消歧的优势。

基于语义的分词算法引入了语义分析,对自然语言自身的语言信息进行更多的处理。

基于理解的分词算法,是通过让计算机,模拟人对句子的理解,达到识别词组的效果。基本思想是在分词的同时进行句法、语义的分析,利用句法和语义信息来处理歧义现象。通常包含三部分:分词子系统、句法语义子系统、总控部分。在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息,来对分词歧义进行判断,模拟人对句子的理解过程。目前基于理解的分词方法主要有专家系统分词法和神经网络分词法等。

5.python工具

最后介绍一些常用的python分词库(该部分内容在本期后续推文中会展开讲解如何使用)

1.jieba:专用于分词的python库,分词效果好.支持三种分词模式:精准模式、全模式和搜索引擎模式;并且支持繁体分词;可以自定义词典。它主要使用的分词算法是基于统计的分词算法:
a.基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG)
b.采用动态规划查找最大概率路径,找出基于词频的最大切分组合c.对未登录词,采用基于汉字成词能力的HMM模型,使用Viterbi算法Github地址:https://github.com/fxsjy/jieba

2.THULAC:由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。THULAC具有如下几个特点:
a.能力强。利用集成的目前世界上规模最大的人工分词和词性标注中文语料库(约含5800万字)训练而成,模型标注能力强大。b.准确率高。该工具包在标准数据集Chinese Treebank上分词的F1值可达97.3%,词性标注的F1值可达到92.9%,与该数据集上最好方法效果相当。c.速度较快。同时进行分词和词性标注速度为300KB/s,每秒可处理约15万字。只进行分词速度可达到1.3MB/s.Github地址:https://github.com/thunlp/THULAC-Python

3.pkuseg:由北京大学语言计算与机器学习研究组研制推出的一套全新的中文分词工具包。具有如下几个特点:
a.分词准确率。相比于其他的分词工具包,该工具包在不同领域的数据上都大幅提高了分词的准确度。根据测试结果,pkuseg分别在示例数据集(MSRA和CTB8)上降低了79.33%和63.67%的分词错误率。b.多领域分词。该分词包训练了多种不同领域的分词模型。根据待分词的领域特点,用户可以自由地选择不同的模型。c.支持用户自训练模型。支持用户使用全新的标注数据进行训练。Github地址:https://github.com/lancopku/PKUSeg-python

4.FoolNLTK:根据该项目所述,这个中文工具包的特点有如下几点:
a.可能不是最快的开源中文分词,但很可能是最准的开源中文分词b.基于 BiLSTM 模型训练而成c.包含分词,词性标注,实体识别, 都有比较高的准确率d.用户自定义词典Github地址:https://github.com/rockyzhengwu/FoolNLTK

5.LTP:语言技术平台(Language Technology Platform,LTP)是哈工大社会计算与信息检索研究中心历时十年开发的一整套中文语言处理系统。LTP制定了基于XML的语言处理结果表示,并在此基础上提供了一整套自底向上的丰富而且高效的中文语言处理模块(包括词法、句法、语义等6项中文处理核心技术),以及基于动态链接库(Dynamic Link Library, DLL)的应用程序接口、可视化工具,并且能够以网络服务(Web Service)的形式进行使用。GitHub地址:https://github.com/HIT-SCIR/pyltptp
另外运行的时候需要下载模型,模型还比较大,下载地址:http://ltp.ai/download.html

6.SnowNLP: Simplified Chinese Text Processing,可以方便的处理中文文本内容,是受到了 TextBlob 的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和 TextBlob 不同的是,这里没有用 NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。GitHub 地址:https:http://github.com/isnowfy/snownlp

作者原创,请勿替换文字

公众号:语言智能体

jieba分词错误_如何掌握分词技术,你需要学会这些相关推荐

  1. python中文分词工具_结巴中文分词工具的安装使用 Python分词教程

    结巴分词 中文分词是中文文本处理的一个基础性工作,结巴分词利用进行中文分词.其基本实现原理有三点: 1.基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG) ...

  2. mysql 中文分词搜索_利用中文分词打造数据库全文检索

    传统的 LIKE 模糊查询(前置百分号)无法利用索引,特别是多个关键词 OR,或在多个字段中 LIKE,更是效率低下.本文研究对文章进行分词以提高检索的准确度和查询效率. 根据自己的编程语言选择一款合 ...

  3. java 分词词频_利用word分词来对文本进行词频统计

    标签: 命令行脚本的调用方法如下: 将需要统计词频的文本写入文件:text.txt chmod +x wfs.sh & wfs.sh -textFile=text.txt -statistic ...

  4. 与自定义词典 分词_如何掌握分词技术,你需要学会这些

    导语 本周对自然语言处理的分词技术进行了学习.本文针对分词技术的进行了全视角的概览,目标是掌握什么是分词技术.为什么需要分词技术和如何使用分词技术.后续将分不同篇幅对其中内容进行深挖和讲解. 文章结构 ...

  5. 如何在jieba分词中加自定义词典_常见中文分词包比较

    1 jieba jieba.cut 方法接受三个输入参数: 需要分词的字符串:cut_all 参数用来控制是否采用全模式:HMM 参数用来控制是否使用 HMM 模型 jieba.cut_for_sea ...

  6. jieba分词错误_jieba中文分词

    在自然语言处理过程中,为了能更好地处理句子,往往需要把句子拆开分成一个一个的词语,这样能更好的分析句子的特性,这个过程叫做--分词. 我们来看看如何分词,嗯?别想多了,我不准备自己造轮子了,用别人的吧 ...

  7. pythonjieba分词_$好玩的分词——python jieba分词模块的基本用法

    jieba(结巴)是一个强大的分词库,完美支持中文分词,本文对其基本用法做一个简要总结. 安装jieba pip install jieba 简单用法 结巴分词分为三种模式:精确模式(默认).全模式和 ...

  8. jieba结巴分词--关键词抽取_结巴中文分词原理分析2

    作者:白宁超,工学硕士,现工作于四川省计算机研究院,著有<自然语言处理理论与实战>一书,作者公众号:机器学习和自然语言处理(公众号ID:datathinks) 结巴分词详解1中文分词介绍 ...

  9. 6.Python常用第三方库—jieba库的使用(中文分词词库)

    目录 一.jieba库介绍 二.jieba库常用指令说明 1.  精确模式 2.  全模式 3.  搜索引擎模式 4.   增加新词 三.jieba库的安装 四.jieba库实例代码演示 一.jieb ...

最新文章

  1. Sun副总裁:绿色数据中心需分四步走
  2. swift5的代理的使用
  3. 如果没有网上购物,商铺价格会不会更高?
  4. 励志!从中专生到清华博士的逆袭人生
  5. 使用D9的SetFVF无法控制数据字段在内存中的顺序,所有字段的顺序都是固定的。自能选择好用还是不用。...
  6. 与数据相关的运算符和伪指令
  7. linux管理进程的数据结构,Linux 进程运行的各项指标的监测和一些管理命令的应用...
  8. 各种数值积分方法总结(从梯形积分、辛普森积分到龙贝格积分、自适应积分、高斯积分等)
  9. python发送验证码通知短信(互亿无线)
  10. 调音台docker教程_超详细Docker实战教程,万字详解!
  11. [量化学院]基于协整的配对交易
  12. c++pthread多线程消费者问题
  13. 牛逼,一整套基于Java开发的的区块链系统(附完整源码)
  14. 3D打印机的故障检测及排除
  15. DNS查询的命令行工具
  16. handler总结-转载自http://mobile.51cto.com/aprogram-442833.htm (侵删)
  17. 广东高中生多少人_2020年广东高考报名人数统计有多少人
  18. java颜色代码对照表
  19. 45RF SOI CMOS
  20. Python之小数点位数的控制输出

热门文章

  1. ARM 之五 发展史及各时期内核(ARM1 ~ ARM11 / Cortex)介绍
  2. 汇编原理实验 --查找子字符串的位置
  3. vue data 值如何渲染_Vue执行流程解析
  4. 字符串和字符数组的关系
  5. 很多工程师问ESP32彩屏能不能在arduino上面来玩,这个是没有问题的
  6. php读取xml的值,PHP读取XML 值
  7. android 4.2 判断桌面快捷,Android 判断桌面是否快捷方式,不存在则创建
  8. python做自动化测试的优点_乐搏讲自动化测试-python语言特点及优缺点(5)
  9. 50个常用元器件图片_50个最常用的英语短语(一),值得收藏!
  10. WPF快速入门系列(6)——WPF资源和样式