需要深入了解吗?
字节面试,讲讲结巴分词算法,讲讲其他分词,都不了解是吧,现在你来设计一下吧,说说你的思路。
然后我就凉了。
正文:
1.分词:
常用:基于字符串匹配的方法。基于规则的方法
1.1 基于字符串匹配的方法
给一个字典:
将待切分的汉字串与词典中的词条逐一匹配,若在词典中找到该词条,则匹配成功.
根据扫描方式不同:正向匹配、逆向匹配以及双向匹配。
依据每次匹配优先考虑长词还是短词,分为最大匹配和最小匹配。
1.1.1 正向最大匹配分词算法
正向:从左往右
最大:先以字典中最长词的长度作为第一次判断,然后如果不是词,则不断减小长度,直到为1.
基本思想是:假设己知机器词典中最长词条的长度为N,则以N作为减字开始的长度标准,首先将待扫描的文本串S从左向右截取长度为N的字符串W1,然后在词典中查找是否存在该字符串W1的词条。如果匹配成功,则W1标记为切分出的词,再从待扫描文本串的N+1位置开始扫描;如果匹配失败,将截取长度减1后,再从S中截取此长度的字符串W1’,重复上述匹配过程,直至截取长度为1为止。以扫描完句子作为整个匹配过程结束。
1.1.2 逆向最大匹配分词:
逆向:从右向左
1.1.3 双向最大匹配分词算法
正向最大匹配和逆向最大匹配分别进行正向和逆向扫描和初步切分,得到的结果可能不同。
如果存在不一致,则判定存在着切分歧义,需要进一步采取技术手段来消解歧义。
1.2 基于统计的方法
通过对语料中相邻共现的各个字的组合频度进行统计,计算它们的互现信息。互现信息体现了汉字之间结合关系的紧密程度,当紧密程度高于某一个阈值时,可判定该字组构成一个词。
相对于基于词典(字符串)的方法,该方法可以不受词典限制,领域限制。
不受待处理文本领域的限制,不需要专门的词典。
基于统计的分词采用的原理有互信息、N元统计模型以及其它的统计模型如隐马尔科夫模型、条件随机场模型、神经网络模型及最大熵模型等。
1.2.1互信息原理
1.2.2 N元统计模型
马尔科夫性:
一个单词的出现与其上下文环境中出现的单词序列密切相关,第n个词的出现只与前面n-1个词相关,而与其它任何词都不相关。
我的理解:对句子进行全切分,如果一个p概率大于一定的值的话,说明在出现前n-1个字时,很有可能出现这个字,那么应该就可以看成一个词了吧。
以这样进行大概的计算:
原作者内容如下,有些复杂:
1.3 基于字符串匹配的分词方法和基于统计的分词方法对比
2.基于统计的方法(补充):
很好!!!
HMM模型在模型中的应用:
HMM是将分词作为字在字串中的序列标注任务来实现的。
每个字在构造一个特定的词语时都占据着一个确定的构词位置(即词位),
例如:
和命名实体的构造差不多。
哪里用到HMM了?
在词库中汉字λ作为o的构词位置的概率是多少。
另外的两个概率:
1.构词位置o的概率。
2.汉字在词库中的概率。
3.结巴分词原理:
jieba分词主要是基于统计词典,构造一个前缀词典;然后利用前缀词典对输入句子进行切分,得到所有的切分可能,根据切分位置,构造一个有向无环图;通过动态规划算法,计算得到最大概率路径,也就得到了最终的切分形式。
以“去北京大学玩”为例:
1.结巴分词有一个离线统计的词典,每一行有三列,第一列是词,第二列是词频,第三列是词性。
北京大学 2053 nt
大学 20025 n
去 123402 v
玩 4207 v
北京 34488 ns
北 17860 ns
京 6583 ns
大 144099 a
学 17482 n
2.构造前缀词表:北京大学的前缀词有三个,北京大,北京,北
北京大学 2053
北京大 0
大学 20025
去 123402
玩 4207
北京 34488
北 17860
京 6583
大 144099
学 17482
3.然后我们就可以根据上述的前缀词表构造出有向无环图了。
4.最大概率路径计算:
从起点到终点有多种路径,
因此,我们需要计算最大概率路径,也即按照这种方式切分后的分词结果的概率最大。在计算最大概率路径时,jieba分词采用从后往前这种方式进行计算。
一个dp就ok了。
对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法。
其他小点:
结巴分词还可以自定义字典,载入字典。
4.其他的分词工具:
盘古分词、Yaha分词、Jieba分词、清华THULAC
盘古开天辟地,所以分词也很nb。(帮助记忆)