整体框架
nlp的中文分词
- 了解分词原理
- 结合分词原理及知识点,对应理解马尔可夫原理
- 马尔科夫假设中提到维特比算法
- 常用的分词的库 就是一个插件——jieba分词
知乎上看到的分词过程图:
了解了分词的大概过程:断句、标注、根据词典加载概率。
隐马尔可夫大概思想
生活中有三种骰子:6个面、3个面和8个面,对应每个骰子会出现6种、3种、8种情况,如果只看最终的投掷结果(给定一个序列值),其实包含了:
- 隐含的状态,就是选择哪个骰子
- 可见的状态,骰子投出的数值
假设每个状态间转移的概率(选择骰子的概率)是固定的。就可以得到状态转移矩阵。
那么观测值序列出现概率的计算公式:
抽象思想(HMM模型五元组)
- 3种不同骰子:状态值集合(StatusSet)
- 可能出现的结果值:观察值集合(ObservedSet)
- 选择不同骰子的概率:转移概率矩阵(TransProbMatrix )
- 选定骰子后投出某个值的概率:发射概率矩阵(EmitProbMatrix )如:拿到D6这个骰子,投出6的概率是1/6。
- 最初状态:初始状态概率分布(InitStatus )
所以,计算概率的方法就是:
初始状态概率分布、发射概率矩阵、转移概率矩阵的乘积。
当某个状态序列的概率值最大,则该状态序列即为,出现该观测值的情况下,最可能出现的状态序列。
使用场景
HMM模型最常用来解决参数(ObservedSet,TransProbMatrix,EmitRobMatrix,InitStatus)已知的情况下,求解状态值集合的问题,其中使用到viterbi算法。
(除中文分词,语音识别、新词发现、词性标注等场景都会用到)
五元组参数在中文分词中具体含义
五元的关系是通过Viterbi算法串接起来,ObservedSet观测值集合是Viterbi的输入,而StatusSet状态值集合是Viterbi输出,输入和输出之间Viterbi算法需要借助三个模型参数,分别是InitStatus初始状态概率分布,TransProbMatrix转移概率矩阵,EmitProbMatrix发射概率矩阵。
HMM模型的中文分词中,输入的是一个句子(也就是观察值序列),输出是这个句子中每个字的状态值。
状态值集合
{B:begin, M:middle, E:end, S:single}。四个状态代表该字在词语中的位置。B起始字,M中间字,E结束字,S单字成词。
观察值集合
输入的所有汉字以及标点符号所组成的集合。
eg:
小明硕士毕业于中国科学院计算所
输出的状态序列为:
BEBEBMEBEBMEBES
根据这个状态序列我们进行切词/断句:
BE/BE/BME/BE/BME/BE/S
结果如下:
小明/硕士/毕业于/中国/科学院/计算/所
注意:
B后面只可能接M/E,不可能接B/S。而M后面也只可能接M/E,不可能接B/S。
初始状态分布
也就是句子的第一个字属于{B,E,M,S}这四种状态的概率,实际上E和M的概率都是0,开头的第一个字只可能是词语的首字(B),或者是单字成词(S)。