NLP自然语言处理——文本分类之三大基础技术

写在前面

本文大量参考了《Python自然语言处理实战:核心技术与算法》一书。这本书代码托管在github上,地址是https://github.com/nlpinaction/learning-nlp 。此外,本文使用中文分词工具——jieba(结巴)分词来实现大部分算法。jieba分词的官网网址为:https://github.com/fxsjy/jieba文中若有错误之处,希望大家指出,我必定有则改之,无则加勉。有什么疑问,欢迎与我交流。

名词解释

  1. 前缀词典:从前一个字出发向后搜索以这个字开头形成的所有词,以这种方式递推所形成的词典被称为前缀词典。
  2. 有向无环图:以前缀词典这种方式形成的,以词为边,词与词之间的相邻关系为边的所形成的是一个有向无环图。
  3. 动态规划:用于寻找有向无环图中两节点之间的最短路径
  4. Viterbi算法:Viterbi算法是一种基于动态规则的用于求隐含马尔科夫模型(HMM)的最优解;
  5. 未登录词:未记录在词典中的词。可以通过用户词典引入未登陆词。

一、 中文分词

1.1 三类分词方法

(1)规则分词:建立词库,匹配切分。

匹配切分三大算法
  1. 最大正向切分(Maximum Match Method,MM法):从前向后匹配最长词词汇。
  2. 逆向最大匹配法(Reserve Maximum Match Method,RMM法):从后往前匹配最长词汇。(倒排列处理->正向最大匹配)
  3. 双向最大匹配法:比较最大正向切分与最大逆向切分的结果,按照最大匹配原则取最长词汇,使切分后总次数最小。

(2)统计分词

  1. 隐含马尔科夫模型(HMM):隐含马尔科夫模型(HMM)是将分词任务看作每个字在字符串中的序列标注任务来实现的。每个字在构造特定词语时都有一个特定的构词位置(词位):每个字在字符串中仅有四个位置:B(词首)、M(词中)、E(词尾)和S(单独成词)。且假定每个词的状态(词位)仅与前一个词的状态(词位)有关。
  2. 条件随机场(CRF):条件岁机场(CRF)与隐含马尔科夫模型类似。区别在于假定每个字的状态(词位)不仅与前一个字的状态(词位)有关,还与后一个词的状态(词位)有关。
  3. 模型求解算法-Viterbi算法:基于动态规划,求模型的最大概率路径。
  4. 其他统计分词算法:基于神经网络的分词算法。使用PaddlePaddle(飞桨)实现。

(3)混合分词

顾名思义,混合分词是结合多种分词算法的分词方法。其中最长用的是先基于规则分词,在使用统计分词算法对分类结果进行补充,特别是对未登录词和歧义词进行补充和修正。jieba(结巴)分词就是采用的这种方法。

1.2 中文分词工具:jieba分词

1.2.1 算法简介

jieba.cut()参数

(1) 需要分词的字符串;
(2) cut_all:是否采用全模式
(3) HMM:是否使用HMM模型;
(4) use_paddle:是否使用paddlepaddle(飞桨)。
注: jieba.cut()返回一个generator迭代器;jieba.lcut()返回一个list列表

1.2.2 三种分词模式

(1)全模式 :把所有可以成词的词语都列出来。
import jieba
text="这是一段用来测试的文本。"
#全模式
result=jieba.cut(text,cut_all=True,HMM=True,use_paddle=False)
(2)精确模式:把句子精确地切分开。
import jieba
text="这是一段用来测试的文本。"
#全模式
result=jieba.cut(text,cut_all=False)
(3)搜索引擎模式:在精确模式的基础上,对长词再切分。
import jieba
text="这是一段用来测试的文本。"
#全模式
result=jieba.cut_for_search(text,cut_all=False)
(4)paddle模式:使用paddlepaddle(飞桨)训练序列标注(双向GRU)实现分词

二、 词性标注

词性标注本质也是一个序列标注问题。因此用于中文分词的算法同样适用于词性标注任务。

三、命名实体识别

四、总结(总结是重点)

中文分词、词性标注和命名实体识别是自然语言处理的基础技术,任何中文自然语言任务都必须对文本进行以上三不操作才能进行后续的分析处理。三者的关系非常紧密,所用的的算法和理论相互贯通。即三者的实质均为每个字在字符串中的序列标注问题。任何一个步骤处理效果的好坏都会影响到其他两个。

参考文献

动态规划查找最大概率路径

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Little_Yuu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值