中分分词难点:

1. 歧义切分
2. 未登录词识别

语言模型

对于一句话s,由词\(w_1,w_2,...,w_n\)组成。长度为n。句子概率可以表示为
\(P(s)=P(w_1,w_2,..,w_n)\)
根据条件概率公式:

\[P(A,B)=p(A|B)\cdot P(B)
\]

\(P(w_1,w_2,..,w_n)=p(w_1) \cdot p(w_2 \vert w_1)\cdot p(w_3\vert w_2,w_1)...p(w_n\vert w_1,w_2,...,w_{n-1})\)

马尔科夫假设:假设任意一个词Wi出现的评率只同它前面的词Wi-1有关

根据马尔科夫假设,有
\(P(s)=P(w_1)\cdot P(w_2\vert w_1)\cdot P(w_3\vert w_2)...P(w_n\vert w_{n-1})\)
这个公式对应bi-gram,假设一个词由前面\(N-1\)词决定,对应的模型被称为N-gram model。

在计算\(p(w_2\vert w_1)=\frac{p(w_2,w_1)}{p(w_1)}\)时,
\((w_2,w_1)\)频数为0是,条件概率为0,不合理
\((w_2,w_1)\)和\(w_1\)频数都为1时,条件概率为1,不合理,所以需要添加平滑策略。

加1平滑:

\[P(w_i)=\frac{Count(w_i)+1}{N + V}
\]
\[P(w_i \vert w_{i-1})=\frac{Count(w_i,w_{i-1})+1}{Count(w_{i-1}) + V}
\]

差值平滑:

\[P_{interp}(w_i\vert w_{i-1})=\lambda_iP(w_i\vert w_{i-1})+(1-\lambda_i)P(w_i)
\]

机械切分

根据语料库,计算词频,简单计算作为词的权重。

  1. 基于词库构建词图
  2. 基于语料,统计每条边的条件概率
  3. 计算所有可能的概率,得到概率最高的路径

对于词图,使用start_node和end node表示,如下表,

0 1 2 3 4 5
start node S 喜欢 E
end node 1 2,3 4 5 5 5


黑色数字:节点序号
绿色数字:节点权重
红色数字:从节点E到当前节点的最优路径权重。
根据动态规划,从后往前,逐步计算,终止节点到每个节点的最优路径。
比如:
的最优路径path(我)weight(我)+ max(path(喜欢), path(喜)).
词库构建词图:

1. 找到句子中所有的单词用字典表示。all_words
    {0: [0], 4: [4], 1: [1], 2: [2, 3], 3: [3]}
    key 表示词头, value表示词尾。
2. 找到start node中node对应的终止节点索引。
    对于index 1 我,计算end node idx
    sum([all_words[0],all_words[1])=2
    2 + 下一idx对应的列表长度 list(range(len(all_words[2])))

最优路径:
{5: (0, 5), 4: (1, 5), 3: (4, 5), 2: (3, 4), 1: (5, 3), 0: (5, 1)} 括号内容为(路径权重,终止节点)

End

本文标题:分词-机械分词

本文链接:http://tzer.top/archives/%E5%88%86%E8%AF%8D.html

除非另有说明,本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

声明:转载请注明文章来源。

最后修改:2022 年 04 月 29 日
如果觉得我的文章对你有用,请随意赞赏