中文分词实验总结
汉语分词实验总结
目录
- 正向最大匹配实现
- 逆向最大匹配实现
- 算法评测标准
- 参考资料
1. 正向最大匹配实现(Forward Maximum Matching,FMM)
# !/usr/bin/python
# -*- coding: utf-8 -*-
def fmm(dictionary, sentence, max_len):
segmentation = list()
beg = 0
for i in range(1, len(sentence) + 1):
end = i
word = sentence[beg:end]
if word in dictionary or end - beg > max_len:
segmentation.append(word)
beg = i
return segmentation
if __name__ == "__main__":
dictionary = ["我", "吃"]
sentence = "我吃苹果"
print(fmm(dictionary, sentence, 1))
2. 逆向最大匹配实现(Backward Maximum Matching,BMM)
# !/usr/bin/python
# -*- coding: utf-8 -*-
def bmm(dictionary, sentence, max_len):
segmentation = list()
end = len(sentence)
for i in range(len(sentence) - 1, -1, -1):
beg = i
word = sentence[beg:end]
if word in dictionary or end - beg > max_len:
segmentation.insert(0, word)
end = i
return segmentation
if __name__ == "__main__":
dictionary = ["我", "吃"]
sentence = "我吃苹果"
print(bmm(dictionary, sentence, 1))
3. 算法评测标准
\[准确率 = \frac{正确识别的个体总数}{识别出的个体总数} \\
召回率 = \frac{正确识别的个体总数}{测试集中存在的个体总数}
\]
不妨举这样一个例子\(^{[1]}\):
某池塘有1400条鲤鱼,300只虾,300只鳖。现在以捕鲤鱼为目的。Seaeagle撒一大网,逮着了700条鲤鱼,200只虾,100只鳖。那么,这些指标分别如下:
\[正确率 = \frac{700}{700 + 200 + 100} = 70\% \\
召回率 = \frac{700}{1400} = 50\% \\
F-measure = \frac{70\% * 50\% * 2}{70\% + 50\%} = 58.3\%
\]
不妨看看如果Seaeagle把池子里的所有的鲤鱼、虾和鳖都一网打尽,这些指标又有何变化:
\[正确率 = \frac{1400}{1400 + 300 + 300} = 70\% \\
召回率 = \frac{1400}{1400} = 100\% \\
F-measure = \frac{70\% * 100\% * 2 }{70\% + 100\%} = 82.35\%
\]
由此可见,正确率是评估捕获的成果中目标成果所占得比例;
召回率,顾名思义,就是从关注领域中,召回目标类别的比例;
F值,则是综合这二者指标的评估指标,用于综合反映整体的指标。
4. 中文分词评价标准
查准率 (Precision, P ): 测试结果中正确结果的个数占系统所有输出结果的比例。假设系统输出N 个,其中,正确的结果为n个,那么,
\[P = \frac{n}{N}
\]
查全率 (Recall, R ): 测试结果中正确结果的个数占标准答案总数的比例。假设系统输出N 个结果,其中,正确的结果为n个,而标准答案的个数为M 个,那么,
\[R = \frac{n}{M}
\]
F-1值 (F-Measure): 正确率与找回率的综合值。计算公式为:
\[F1 = \frac{2\times P\times R}{P+R}
\]
参考资料
[1] 正确率、召回率和F值, ChinaUnix博客, http://blog.chinaunix.net/uid-23028928-id-2567754.html
智慧在街市上呼喊,在宽阔处发声。