🚀 MeaningBERT
MeaningBERT 是一种用于评估句子间意义保留程度的自动且可训练的指标。它能够高度关联人类判断和合理性检查,有效评估两个句子之间的意义保留情况。
相关链接
🚀 快速开始
MeaningBERT 是一种用于评估句子间意义保留程度的自动且可训练的指标。它在文章 MeaningBERT: assessing meaning preservation between sentences 中被提出,旨在评估两个句子之间的意义保留情况,且该评估结果与人类判断和合理性检查高度相关。如需更多详情,请参考我们公开发表的文章。
此公开版本的模型使用了训练效果最佳的模型(在我们的文章中,我们展示的是 10 个模型的平均性能结果),并进行了更长时间的训练(500 个 epoch 而非 250 个)。我们后来观察到,该模型可以进一步降低验证损失并提高性能。此外,我们将文章中使用的数据增强技术更换为更强大的技术,该技术还包含了意义函数的交换性,即 Meaning(Sent_a, Sent_b) = Meaning(Sent_b, Sent_a)。
✨ 主要特性
合理性检查
与人类判断的相关性是评估意义保留指标质量的一种方法。然而,由于它以人类判断为黄金标准,因此具有主观性,并且由于需要大量由多人标注的数据集,成本较高。作为替代方案,我们设计了两个自动化测试:评估相同句子之间的意义保留情况(应 100% 保留)和不相关句子之间的意义保留情况(应 0% 保留)。在这些测试中,意义保留的目标值不是主观的,并且不需要人类标注即可测量。它们代表了一个好的自动意义保留指标应该能够达到的简单且最低的阈值。即,一个指标至少应该能够在比较两个相同句子时返回完美分数(即 100%),并在两个句子完全不相关时返回零分(即 0%)。
相同句子
第一个测试评估相同句子之间的意义保留情况。为了分析指标通过此测试的能力,我们统计指标评分大于或等于阈值 X∈[95, 99] 的次数,并将其除以句子数量,以创建指标给出预期评分的次数比例。为了考虑计算机浮点误差,我们将评分四舍五入到最接近的整数,并且不使用 100% 的阈值。
不相关句子
我们的第二个测试评估源句子与由大语言模型生成的不相关句子之间的意义保留情况。其思路是验证当给定一个主要由不相关单词组成的完全不相关句子(也称为乱序单词)时,指标是否能得出 0 的意义保留评分。由于此测试的预期评分为 0,我们检查指标评分是否小于或等于阈值 X∈[5, 1]。同样,为了考虑计算机浮点误差,我们将评分四舍五入到最接近的整数,并且不使用 0% 的阈值。
💻 使用示例
基础用法
你可以将 MeaningBERT 作为一个模型使用,通过以下代码在 HuggingFace 上进行重新训练或推理:
from transformers import AutoTokenizer, AutoModelForSequenceClassification
tokenizer = AutoTokenizer.from_pretrained("davebulaval/MeaningBERT")
model = AutoModelForSequenceClassification.from_pretrained("davebulaval/MeaningBERT")
高级用法
你也可以将 MeaningBERT 作为评估指标使用(无需重新训练),以下是不同方式的示例代码:
使用 HuggingFace 进行评估
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification
tokenizer = AutoTokenizer.from_pretrained("davebulaval/MeaningBERT")
scorer = AutoModelForSequenceClassification.from_pretrained("davebulaval/MeaningBERT")
scorer.eval()
documents = ["He wanted to make them pay.", "This sandwich looks delicious.", "He wants to eat."]
simplifications = ["He wanted to make them pay.", "This sandwich looks delicious.",
"Whatever, whenever, this is a sentence."]
tokenize_text = tokenizer(documents, simplifications, truncation=True, padding=True, return_tensors="pt")
with torch.no_grad():
scores = scorer(**tokenize_text)
print(scores.logits.tolist())
使用 HuggingFace 指标模块进行评估
import evaluate
documents = ["He wanted to make them pay.", "This sandwich looks delicious.", "He wants to eat."]
simplifications = ["He wanted to make them pay.", "This sandwich looks delicious.",
"Whatever, whenever, this is a sentence."]
meaning_bert = evaluate.load("davebulaval/meaningbert")
print(meaning_bert.compute(references=documents, predictions=simplifications))
📚 详细文档
如需引用 MeaningBERT,请使用以下 BibTeX 格式:
@ARTICLE{10.3389/frai.2023.1223924,
AUTHOR={Beauchemin, David and Saggion, Horacio and Khoury, Richard},
TITLE={MeaningBERT: assessing meaning preservation between sentences},
JOURNAL={Frontiers in Artificial Intelligence},
VOLUME={6},
YEAR={2023},
URL={https://www.frontiersin.org/articles/10.3389/frai.2023.1223924},
DOI={10.3389/frai.2023.1223924},
ISSN={2624-8212},
}
🤝 贡献指南
我们欢迎用户提供反馈,无论是发现库中的 bug 还是提出功能建议!请查看我们的贡献指南以获取更多详细信息。
📄 许可证
MeaningBERT 采用 MIT 许可证,详情请见 LICENSE 文件。