You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Evaluate库METEOR返回0分,如何与NLTK计算结果一致?

解决方案

问题核心是Evaluate的METEOR默认使用英文分词器(NLTK的word_tokenize)处理中文,导致中文句子被错误拆分,无法匹配参考句,最终得分0.0。要对齐NLTK版本结果,需替换分词逻辑为中文Tokenizer,有两种实现方式:

方式1:修改Evaluate库的METEOR源码

找到Evaluate库中meteor.py的实现文件,替换默认的英文分词逻辑:

  1. 引入中文Tokenizer
  2. 重写分词函数

修改后的核心代码片段:

# 替换原有的英文分词导入与函数
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('fnlp/bart-base-chinese')

def _tokenize(text):
    # 使用中文Tokenizer分词,去除特殊token后返回token id列表
    return tokenizer(text, add_special_tokens=False)["input_ids"]

修改后重新运行原Evaluate代码,即可得到与NLTK一致的得分。

方式2:不修改源码,手动传入分词结果

如果不想改动库源码,可在调用时提前完成中文分词,再传入Evaluate的compute方法:

import evaluate
from transformers import AutoTokenizer

# 初始化中文Tokenizer
tokenizer = AutoTokenizer.from_pretrained('fnlp/bart-base-chinese')

def cn_tokenize(text):
    return tokenizer(text, add_special_tokens=False)["input_ids"]

# 准备数据
reference1 = "犯人受到了嚴密的監控。"
hypothesis1 = "犯人受到嚴密監視。"

# 手动分词(注意references需为二维列表)
tokenized_preds = [cn_tokenize(hypothesis1)]
tokenized_refs = [[cn_tokenize(reference1)]]

# 加载METEOR指标,关闭自动分词
metric_meteor = evaluate.load("meteor")
meteor = metric_meteor.compute(
    predictions=tokenized_preds,
    references=tokenized_refs,
    tokenize=False  # 禁用内置分词,使用手动传入的结果
)

print("METEOR:", meteor["meteor"] * 100)  # 输出约98.15

内容的提问来源于stack exchange,提问作者Raptor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 08:28:38