nlp基础-中文分词
分词
新词发现
基于信息熵的新词发现
- 词频:出现次数越多,越有可能成词
- 凝固度:\(\frac{P(AB)}{P(A)P(B)}\), 两个字越容易一起出现,越有可能成词
- 左(右)自由度(边界熵):\(H_{left}=-\sum{P_i}log_2P_i\) ,一个词左(右)边相邻的词熵越高,说明这个词越完整,例如:“算机”左边经常会出现“计”,说明“算机”并不是完整的词,“计算机”才是完整的词。
基于切分的新词发现
上一个算法需要计算3个信息,并且边界熵的计算量很大(对每个片段都要分组统计)。
换一下思路:上一个算法是找哪些词可以独立成词,如果反过来,找哪些词不能成词,对文本做切分。就只需要算两个指标:词频,凝固度。去掉了计算量最大的边界熵,而且,在计算凝固度时,我们只需要计算二字片段的凝固度,省掉了更多字片段的凝固度计算,但是,由于我们是基于切分的方式做的,因此我们少了很多计算量,但理论上却能够得任意长度的词语!
实操的过程中,切分的评判依据除了凝固度,还可以用MLM(Bert)来建模两个字的相关程度,实现无监督的分词参考博客
分词
基于字典的分词,基于标注的分词
基于字典的分词
基于字典 博客
- 列出所有分词可能,算出每种分词概率
- 马尔可夫假设:每个词的出现只跟前一个词的出现有关
- n-gram:每个词的出现跟前n-1个词有关
- 构建有向无环图,viterbi算法求最优路径
- 效率更高
基于标注的分词
比如4标注体系:
- single,单字成词
- begin,多字词的开头
- middle,词语的中间部分
- end,多字词的结尾
进而将问题转化成一个seq2seq问题
基于语言模型做无监督分词
- 训练一个基于字的语言模型
- 让语言模型给出第i个字到底是词的 开始/第二个字/第三个字/第四及以后 分别的概率
- 人工指定转移概率(人工指定...)
- viterbi算法得到概率最高的分词结果(路径)
现有工具
jieba分词原理
- 加载字典, 生成trie树(字典树,前缀树),生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
- 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
- 对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法