序列标注 | (9) 中文分词评价指标(续)

上一篇博客我们介绍了中文分词的一些评价指标,包括Precision、Recall、F1-score、OOVRecall和IVRecall。本篇博客我们将继续介绍一些其他的评价指标:柔性评测方案。

由于中文分词还没有形成一个公认的分词标准,服务于不同目的的分词系统会对分词单位有不同的要求,进而导致同一文本可能被不同的人划分为几种不同的分词结果。为了能够对各类分词系统进行公正的评价,可以使用一种柔性的评测方案[1],而不是使用闭集测试方法的准确率,召回率等完全匹配的评测指标。具体的,我们首先将分词工具预测的分词结果划分为四种情况:

  • 一致:预测的词语和标准集词语完全一致,该情况反映了分词工具和标准集定义的分词粒度一致性;
  • 拆分:标准集词语等于多个连续的预测词语,如:标准集词语“鲁班”会被工具1拆分为姓和名“鲁/班”。拆分情况通常发生于标准集的分词粒度大于分词工具定义的粒度,并不是严格意义的分词错误;
  • 合并:预测词语等于多个连续的标准集词语,如:工具2预测的词语“放大招”在标准集中是由连续的两个词语“放”和“大招”构成。合并情况通常发生于标准集的分词粒度小于分词工具定义的粒度,它也不是严格意义的分词错误;
  • 冲突:预测词语和标准集词语存在边界冲突。如:工具3会将标准集中“射手”分开,并将“手”和“鲁”组合为一个标准集中不存在的词语“手鲁”,破坏了词语“射手”和“鲁班”的结构,生成错误的分词片段“射” “手鲁”和“班”。冲突情况是一种严格意义的切分错误,冲突比例反映了分词工具的错误率,是衡量一个分词工具好坏的最主要指标,也是评测分析的重点指标。

在这里插入图片描述
将各个分词工具的分词结果和标准集进行对比,并统计标准集中词语的被预测情况,得到上述四种情况的占比。评测过程以自动评测为主,主要分析各分词工具的冲突占比以及一致性占比,冲突比例表示分词工具的错误率,一致性比例表示分词工具和标准集定义的分词粒度一致性。此外,还可以采用人工评测为辅,人工评测主要是对“拆分”“合并”结果进行分析,人工评测部分拆分合并结果,会发现拆分合并的情况主要是由于粒度定义不同导致,而非“硬错误”,所以这两种情况的占比并不是关注的重点。

[1] 杨尔弘, 方莹, 刘冬明等. 汉语自动分词和词性标注评测[J]. 中文信息学报, 2006, 20(1): 46-51.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了优化代码并添加中文分词评价指标功能,我们可以使用以下步骤: 1. 导入必要的库和语料库,比如jieba分词库和sklearn评价指标库。 2. 定义一个函数,用于对输入的中文文本进行分词,并返回分词结果。 3. 定义一个函数,用于对生成的回复进行评价,并返回评价指标。 4. 将以上两个函数整合到一个主函数中,用于与用户进行交互,并输出回复和评价指标。 下面是代码示例: ```python import jieba from sklearn.metrics.pairwise import cosine_similarity # 导入语料库 corpus = ['你好', '很高兴见到你', '我喜欢你', '你是谁', '你从哪里来', '你要去哪里', '再见'] # 定义分词函数 def tokenize(text): return list(jieba.cut(text)) # 定义评价函数 def evaluate(reply): # 将生成的回复分词 reply_tokens = tokenize(reply) # 计算生成的回复与语料库中每个句子的相似度 similarity_scores = [cosine_similarity([reply_tokens], [tokenize(sentence)])[0][0] for sentence in corpus] # 取最大相似度作为评价指标 return max(similarity_scores) # 定义主函数 def chat(): print('你好,我是ChitGPT。') while True: # 获取用户输入 user_input = input('用户:') # 将用户输入分词 user_tokens = tokenize(user_input) # 计算用户输入与语料库中每个句子的相似度 similarity_scores = [cosine_similarity([user_tokens], [tokenize(sentence)])[0][0] for sentence in corpus] # 取最大相似度的句子作为回复 reply = corpus[similarity_scores.index(max(similarity_scores))] # 输出回复 print('ChitGPT:', reply) # 计算回复的评价指标 evaluation = evaluate(reply) # 输出评价指标 print('评价指标:', evaluation) ``` 在以上代码中,我们使用了jieba分词库对中文文本进行分词,并使用sklearn评价指标库计算相似度和评价指标。在主函数中,我们首先获取用户输入并将其分词,然后计算用户输入与语料库中每个句子的相似度,选择最大相似度的句子作为回复,并输出回复和评价指标

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值