NLP之jieba分词

为什么要分词

图像处理:
我们在前面学KNN 的时候 ,知道图像是将 一幅图 转换成 灰度图 ,然后在转换成 0101
在这里插入图片描述

然后变成 一个 [ 1024] 的向量 。

文本:

我们一般先将一个文本先切成 单个 单词 ,然后在用特征工程 (后面我们会专门讲解这个)变成机器可以识别的向量 。 所以分词 是最先的一个步骤。

分词的难点

歧义消解问题

输入待切分句子:提高人民生活水平

可以切分输出 :提高/人民/生活/水平

或者切分输出:提/高人/民生/活水/平

可以看到,明显第二个输出为歧义切分。

未登录词识别

未登录词指的是在已有的词典中,或者训练语料里面没有出现过的词,分为实体名词,专有名词及新词。 比如每年网络会爆出一些网红词 : 给力 ,盘它 。这样的词以前是没有出现过的 。 我们也希望能够切分出来。

常见分词方法

基于字典、词库匹配的分词

机械分词算法,将待分的字符串与一个充分大的机器词典中的词条进行匹配。

分为正向匹配和逆向匹配;最大长度匹配和最小长度匹配;单纯分词和分词与标注过程相结合的一体化方法。所以常用的有:正向最大匹配,逆向最大匹配,最少切分法。

实际应用中,将机械分词作为初分手段,再利用其他方法提高准确率。

基于词频统计的分词

统计分词,是一种全切分方法。切分出待分语句中所有的词,基于训练语料词表中每个词出现的频率,运用统计模型和决策算法决定最优的切分结果。

基于知识理解的分词

主要基于句法、语法分析,并结合语义分析,通过对上下文内容所提供信息的分析对词进行定界。

这类方法试图让机器具有人类的理解能力,需要使用大量的语言知识和信息,目前还处在试验阶段

分词工具

1,jieba 分词
2, jieba_fast
3,HanLP

中文分词 jieba 和 hanlp 用的最多。jieba_fast 比jieba效率高 用C 重写了这个库。

使用

import jieba

seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("全模式: " + "/ ".join(seg_list))  # 全模式

seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("精准模式: " + "/ ".join(seg_list))  # 精确模式


全模式:/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
精准模式:/ 来到/ 北京/ 清华大学

jieba 原理

使用非常简单 ,但是我们一般会

前缀词典

前缀词典,实际上可以认为是一个词频词典 我们存在一个文本文件中,

里面都是 {词:频率} 这种形式 ;

比如 { 我们 : 1000,
我 : 1001,
实际: 500
}

有向无环图DAG

DAG是基于前面得到的前缀词典进行构造的,基本思想是将待分语句进行全切分,将切分完的词语列表与前缀词典进行比较,如果这个词存在,就存下来,并用词在字符串中的位置索引进行替代,转化为{key:list[i,j…], …}的字典结构,如下:

假设有句子,去北京大学玩,则对应的DAG为,{0 : [0], 1 : [1, 2, 4], 2 : [2], 3 : [3, 4], 4 : [4], 5 : [5]} 这样一个字典。

具体意思是,0:[0]代表0位置,即‘去’在前缀词典中代表一个词,同理1 : [1, 2, 4]代表‘北’,‘北京’,‘北京大学’

在这里插入图片描述

基于词频的最大切分

我们拥有所有可能出现的词及其对应的所有可能组成路径(即DAG),那么应该用什么方法去找到一条最可能的路径呢?

jieba中使用了动态规划的方法,这里简单的理解就是对于一个长度为n的句子,由后往前遍历。

假设最后一个词出现的概率为N,倒数第二个词出现的概率为N-1,那么两个词在一起出现概率则为N(N-1),以此类推,直到到达第一个词,计算出所有可能路径中的最大概率路径。这里还需要理解两个名词,重叠子问题,最优子结构,最终得到最优的路径

还是 去北京大学玩 举例:

P(玩)*P(学)*P(大)*P(京)*p(北)*p(去) = 概率1

P(玩)*P(大学)*p(京)*P(北)*P(去) = 概率2


各种概率对比 . 概率比较大的 就是最优解 。

未登录词

HMM 求解

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

jieba 采用的是 隐马尔可夫HMM (这个我后面详解 )

已知:

状态转移概率:

P={‘B’: {‘E’: -0.510825623765990, ‘M’: -0.916290731874155},
‘E’: {‘B’: -0.5897149736854513, ‘S’: -0.8085250474669937},
‘M’: {‘E’: -0.33344856811948514, ‘M’: -1.2603623820268226},
‘S’: {‘B’: -0.7211965654669841, ‘S’: -0.6658631448798212}}

初始概率:

P={‘B’: -0.26268660809250016,
‘E’: -3.14e+100,
‘M’: -3.14e+100,
‘S’: -1.4652633398537678}

观测序列O

对于每一个待分的句子,都视为一个观测序列,如:去北京大学玩,就是一个长度T为6的观测序列

每一个观测序列,都对应着相同长度的状态序列。这里将汉字按SBME进行标注,分别代表single(单独成词的字)、begin(一个词语开始字)、middle(一个词语中间的字)、end(一个词语结束的字),如:

观测序列:去 / 北京大学 / 玩

状态序列:S / BMME / S

输出概率:

P={‘B’: {’\u4e00’: -3.6544978750449433,
‘\u4e01’: -8.125041941842026,
‘\u4e03’: -7.817392401429855,
‘\u4e07’: -6.3096425804013165,
…}

根据:HMM

在这里插入图片描述
综上 我们 已知:

y,b,a 并且知道x 的几种状态
求: x 的输出顺序 也就是典型的 HMM 已知观察 和转换 求解 隐含状态。

比如:

在这里插入图片描述

求出每一个 字 B ,M ,E,S 的概率 最后 可能得出
S我 S是 B中M国E人
所以就将 中国人 作为一个词 放入。

数据从哪来?

这些状态数据 BMES 概率 根据这个网址 可以得出 。这是人工根据大量的报纸,小说,标记而成 。 可见人工智能有很大人工的工作量 。

参考文献

https://blog.csdn.net/sinat_33741547/article/details/78690440

https://www.cnblogs.com/skyme/p/4651331.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值