🚀 MeaningBERT
MeaningBERTは、文間の意味の保持を評価するための自動的かつ学習可能な指標です。この指標は、文間の意味の保持を高精度に評価し、人間の判断と高い相関を持つことを目的としています。詳細については、公開されている当社の記事を参照してください。
🚀 クイックスタート
MeaningBERTは、文間の意味の保持を評価するための自動的かつ学習可能な指標です。MeaningBERTは、当社の記事 MeaningBERT: assessing meaning preservation between sentences で提案されました。その目標は、人間の判断と高い相関を持つ、2つの文間の意味の保持を評価することです。詳細については、公開されている当社の記事を参照してください。
このモデルの公開バージョンは、より長い期間(250エポックではなく500エポック)で学習された最良のモデルを使用しています(当社の記事では、10個のモデルの平均の性能結果を提示しています)。後に、モデルが検証損失をさらに削減し、性能を向上させることができることがわかりました。また、記事で使用されていたデータ拡張手法を、意味関数の可換性も含む、より堅牢な手法に変更しました。つまり、Meaning(Sent_a, Sent_b) = Meaning(Sent_b, Sent_a) です。
✨ 主な機能
健全性チェック
人間の判断との相関は、意味の保持指標の品質を評価する1つの方法です。ただし、人間の判断を金標準として使用するため本質的に主観的であり、複数の人間によって注釈付けされた大規模なデータセットが必要なためコストがかかります。そこで、当社は2つの自動テストを設計しました。同一の文間の意味の保持(100%保持されるはず)と無関係な文間の意味の保持(0%保持されるはず)を評価するものです。これらのテストでは、意味の保持の目標値は主観的ではなく、人間の注釈を必要とせずに測定できます。これらは、良い自動的な意味の保持指標が達成できるはずの自明で最小限の閾値を表しています。つまり、指標は、2つの同一の文を比較した場合には最低限完全なスコア(つまり100%)を返し、2つの文が完全に無関係な場合にはゼロスコア(つまり0%)を返すことができる必要があります。
同一の文
最初のテストは、同一の文間の意味の保持を評価します。このテストに合格する指標の能力を分析するために、指標の評価が閾値X∈[95, 99]以上であった回数をカウントし、文の数で割って、指標が期待される評価を与えた回数の比率を作成します。コンピュータの浮動小数点誤差を考慮して、評価を最も近い整数に丸め、閾値として100%を使用しません。
無関係な文
2番目のテストは、大規模言語モデルによって生成された無関係な文とソース文間の意味の保持を評価します。この考え方は、指標が、主に無関係な単語で構成された完全に無関係な文(いわゆる単語のスープ)を与えられたときに、意味の保持評価が0であることを検証することです。このテストの期待評価は0であるため、指標の評価が閾値X∈[5, 1]以下であることを確認します。再び、コンピュータの浮動小数点誤差を考慮して、評価を最も近い整数に丸め、閾値として0%を使用しません。
💻 使用例
基本的な使用法
MeaningBERTをモデルとして使用する場合、以下のコードを使用して再学習または推論に使用できます。
from transformers import AutoTokenizer, AutoModelForSequenceClassification
tokenizer = AutoTokenizer.from_pretrained("davebulaval/MeaningBERT")
model = AutoModelForSequenceClassification.from_pretrained("davebulaval/MeaningBERT")
高度な使用法
MeaningBERTを評価指標として使用する場合(再学習なし)、以下のコードを使用できます。
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のMetricモジュールを使用することもできます。
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を引用するには、以下の引用を使用してください。
@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},
}
貢献
MeaningBERTへのユーザーからの入力を歓迎します。ライブラリで見つかったバグや機能提案に関係なく、歓迎します!この問題に関する詳細については、contributing guidelines を確認してください。
📄 ライセンス
MeaningBERTは、LICENSE file に記載されているとおり、MITライセンスの下で提供されています。