基于Python的中文自动分词实验

实验内容

使用任意分词方法进行分词

实验要求和目的

使用任意分词方法实现汉语自动分词;

给出至少 1000 个句子的分词结果(以附件形式);

计算出分词结果的正确率,并给出计算依据;

用实例说明所用分词方法分别对“交叉歧义”和“组合歧义”的处理能力;

提交实验报告,给出详细实验过程和结果;提交源代码和可执行程序。

实验环境

操作系统 macOS Sierra

内存 16G

开发语言 Python

程序主要算法

如对一个字符串:

S:有意见分歧

分词结果 1: w1:有/ 意见/ 分歧/

分词结果 2: w2:有意/ 见/ 分歧/

最大概率分词就是要求得 Max(P(w1|s),P(w2|s)) 。

根据贝叶斯公式:

P(w|s)=P(s|w)P(w)/P(s) (公式 1)

在公式 1 中,因为 P(s)和 P(w|s)都基本一样,因此,就求最大的 P(w)即可。根据一元语法,词之间出现的概率互相独立,因此有下面的公式成:

P(w)=P(w1,w2,…,w3)=P(w1)P(w2)…P(w3) (公式 2)

即字符串出现的概率就是构成字符串的各个词的概率之积。而一个词的概率可以按照其出现的次数除以语料中总的词数得到。

分析下面的例子,我们可以计算得到各个词的概率为:

  • 有:0.018
  • 有意:0.0005
  • 意见:0.001
  • 见:0.0002
  • 分歧:0.0001

则根据公式 2 有:

  • P(w1)=p(有)P(意见)P(分歧)=0.0180.0010.0001=1.8*10^(-9)
  • P(w2)=P(有意)P(见)P(分歧)=0.00050.00020.0001=1*10^(-11)
  • 由于 P(w1)>P(w2),故 w1 为该字符串的分词结果。

当然,在实际操作过程中,如果字符串比较长,分词的形式就会非常多,计算量和长度呈指数增长关系,因此需要采用一定的来减少运算量,我们可以看到字符串的概率是累计相乘的,因此可以采用动态规划的方法来减少运算量。

这里记 P`(w)为到达候选词 wi 时的累计概率,则

P (wi)=P(wi-1)P(wi)(公式 3)

根据公式 3,有 P (意见)=P(有)P(意见)

实验过程

首先利用微博词频语料库构造分词训练语料库,使用 Sogou 新闻语料作为训练集。然后使用分词算法输出到文本文件。

实验结果

分词好的 700 多条句子已经放到压缩包中,名为 seg.txt

实验结论和体会

通过分词实验,探索了很多分词方案。如 HMM/FMM,以及本文说的概率最大分词法。对机器学习有了一定的了解。

猜你喜欢

转载自blog.csdn.net/newlw/article/details/125191048