SentenceBERTとBERTScoreの比較
はじめに
こんばんは。今回は、2文の類似度の測定によく用いられるSentenceBERT、およびBERTScoreの比較について論じていきます。
今回出した個人的結論は「判断しがたい」ですが、比較を考えるうえでの参考にはなると思うので、よければご覧ください。
前置き
背景
ここ最近、生成系タスクにおいて、出力された文をどのように評価していけばよいかを探ってきました。その際、生成系タスクの中でも特に文書要約に興味があったので、文書要約に重きを置いてきました。
その結果、近年はBERTScoreが、候補文(要約結果)を評価するためのひとつのスタンダードな指標になっていると感じました。
確かに、BERTScoreがベストということではないですし、SOTA的な存在でもないです。BERTScoreを改良した指標も出てきています。
ですが、新しい論文において提案内容の比較対象としてよくBERTScoreが使われています。それだけ、BERTScoreが1つの有力候補だとも言えます。それに、特にHugging Faceのライブラリevaluateが登場したことで、実際に計算しやすくなりました。
しかしBERTScoreとはまた別に、注目に値するものがあります。それがSentenceBERTです。
SentenceBERTも、2文の類似度を評価できるものです。いくつかのページを読むと、SentenceBERTの有用性を感じます。
目的
そこで本記事では、それら2つを比較します。比較の主な観点は、人的評価との相関の強さです。
目的の意図
ここ最近、2文の類似度の評価について深堀りしてきましたが、やっぱりそれは重要なことだと思うからです。
極端な話、テスト用データセットのデータ件数が1,000もあれば、そこまでこだわらなくてもいいと思います。どんなタスクでも、テストデータ件数が多いほど、モデルの良し悪しを的確に判定できる確率が高くなります。
ですが、十分な件数のテスト用データセットを実際に準備するのは、少なからず大変だと思います。理由は例えば次の通りです。
- 生成系タスクは、分類系タスクに比べると明確な正解がない。
- 各参照文に対する人的スコアを付ける作業も、主観が強く関わってくる。
一応、既存のベンチマークを借用する手もあると思います。
ただ、自分の解きたいタスクにある程度沿っているベンチマークでないと、借用には注意が要ります。その例は、ベンチマーク上では2つの文AとBの類似度は高い設定だとしても、解きたいタスク上では低めの類似度として扱いたい場合です。このような乖離があると、ベンチマーク上で評価の高いモデルが、解きたいタスク上ではあまり効果を出せない可能性が生じます。それを承知でベンチマークを借用してもいいですが、どうしても自前でテスト用データを作りたい場合もあると思います。
そうなると、テスト件数をあまり確保できない場合が想定されます。それならば、なるべく人的評価との相関の強い評価方法を追求したいと考えました。
2文の類似度の評価を重要視しているのはこのためです。
解説ページ
それぞれについて解説してくださっている方々の記事です。
BERTScore
- 「テキスト生成の自動評価指標について」
SentenceBERT
- 「はじめての自然言語処理」/第9回 Sentence BERT による類似文章検索の検証
- 「【日本語モデル付き】2020年に自然言語処理をする人にお勧めしたい文ベクトルモデル」
想定している、両者の違い
実はBERTScoreは、全体的な評価構造の面ではROUGE-1に似ています。
見方によっては、BERTScoreにおいて単語同士の類似度をゼロイチ(同じ単語同士なら1、そうでなければ0)で評価する場合が、ROUGE-1に相当することになります(単語ごとに重みづけをしない場合)。
なのでBERTScoreは、文脈加味のベクトルを用いるといっても、単語単位で類似度を見るのと変わらないです。そのため、ROUGE-1にありがちな難点が表出しやすくなりそうです。その難点とは、意味の異なる文同士でも、単語の重複が多ければ候補文が不当に高く評価される点です(ただ、ROUGE-1に比べると、文脈加味のベクトルを用いている分、この難点は小さいと思います)。
SentenceBERTでは、このような単語単位で類似度を見るようなことはないです。なので、そのような難点は浮き彫りにならないです。
これだけ聞くと、SentenceBERTのほうが良さそうに思えるかもしれません。ただ、実際の傾向として、似ている文同士には共通の単語や類似する単語があることもまた多いです。BERTScoreに比べるとSentenceBERTは、このような傾向をうまく加味できそうにないです。
以上が、頭の中で想定している両者の違いです。
何かを評価する際にはよく実験結果が物を言いますが、こういう理論面もおさえたほうが良さそうなので記載しました。
今回の調査方法
それら2つの比較を論じた文献として、次の論文を見つけました。主にこの論文の内容の確認を通して、それら2つの比較について考察していきます。
- 「UPB at GermEval-2020 Task 3: Assessing Summaries for German Texts
using BERTScore and Sentence-BERT」
http://ceur-ws.org/Vol-2624/germeval-task3-paper2.pdf
論文の内容
実験と結果
いきなりですが、こちらは論文にて紹介された実験の結果です。
各モデルはそれぞれ、次のようにドイツ語の事前学習済みのBERTモデルとなっています。ちなみに、「cased」は大文字・小文字の区別を付けるという意味です。
各列(候補文に対する評価方法)はそれぞれ次の通りです。
列 | fine-tuningの有無 | 単語ごとに重みを付ける? |
---|---|---|
Sentence-BERT | BERTをfine-tuningしたものを用いる | - |
BERT-Score | fine-tuningしていないBERT(事前学習だけ済ませているBERT)を用いる | 付けない |
BERT-Score with idf | BERTをfine-tuningしたものを用いる | 付ける |
BERT-Score with fine-tuning and idf | BERTをfine-tuningしたものを用いる | 付ける |
そして各数値は、候補文に対する評価がどのくらい誤っているのかを示したものです。これは、人的評価との乖離の程度みたいなものです。この値が低いほうが、候補文を高精度で評価できていることになります。
ちなみに、テスト件数は216件です。参照文は24件あり、参照文ごとに9件の候補文が付属しています。その他詳しい内容は論文に書かれていますが、詳しくは割愛します。
実験結果に対する考察
総じて、Sentence-BERTよりはBERT-Score(fine-tuningも重みづけもなし)のほうがやや精度が良さそうです。
もちろん、この実験結果だけ見て両者を簡単に比べることはできないです。言語はドイツ語のみですし、モデルは上の5つのみですので。
それでも、モデルごとの数値の平均は、Sentence-BERTの場合で約37.7、BERT-Scoreの場合で約34.1です。数値上、BERT-Scoreのほうが勝っています。
この論文から、このような貴重な知見を知ることができました。
ちなみに、BERT-Scoreにおいて単語ごとに重みを付けた場合のほうが総じて良い精度です。ただ、その差分はほんの1%くらいです。重みを付ければ結構精度が上がりそうだと思っていたので、これは意外でした。また、さらにfine-tuning込みの場合でも、精度にそんなに変わりなかったようです。
SentenceBERTの優位性
ただ、SentenceBERTによる評価の精度の良さの分かる調査もあります。先ほど紹介した、こちらの記事です。
各文のベクトル化の方法として、単語ごとのベクトルの平均を取る方法を採用されています(他の方法としては、文のCLSトークンのベクトルを用いる手もあります)。
実験の結果、tf-idfなど他の指標に比べて、SentenceBERTのほうが良い精度で2つの文の類似度を評価できているようです。
考察
以上から、2文の類似度の評価として、BERTScoreとSentenceBERTのどちらが優れているかは容易に判断できなそうです。
論文の結果では、BERTScoreのほうが良かったです。しかしこれだけでは、BERTScoreの優位性を主張するには不十分な気もします。SentenceBERTの良さを裏付ける実験もありますし。
(もっとも、「容易に判断しがたい」こと自体は特に不思議ではないです。どんなことでも、それぞれに良さがあるものなので。)
ということなので、2文の類似度の評価を試みる際には、BERTScoreとSentenceBERT(あるいはこれらの発展版)の両方を考慮するといいかもしれません。
終わりに
お読みいただき、ありがとうございました。
Discussion