![]()
BERTScoreとは?BLEU・ROUGEとの違いと使い方をやさしく解説
この記事のポイント BERTScoreとは、AIが生成した文と正解文の「意味の近さ」を数値にする自動評価指標です。 単語がどれだけ一致したかを数えるBLEU・ROUGEと違い、言い換えや同義語を正しく評価できます。 出力はPrecision・Recall・F1の3つ。絶対値そのものより、モデルAとモデルBの差を見る使い方が向いています。 日本語で使うときは、日本語を学習したモデルを指定しないとスコアが当てになりません。
AIに要約を書かせたものの、「これ、良い出来なのか悪い出来なのか判断がつかない」。そんな場面で行き詰まっていませんか。人が1本ずつ読んで採点するのは、数十本ならまだしも数千本では無理があります。
そこで使われるのがBERTScoreです。BERTScoreとは、BERTという言語モデルの文脈埋め込みを使い、生成文と正解文の意味的な近さを測る自動評価指標です。 表面的な単語の一致ではなく、「言っていることが同じかどうか」に近い基準で採点してくれます。
コーネル大学とASAPP社の研究者が提案した指標で、いまではLLMの品質チェックの定番になりました。
BERTScoreとは何を測る指標か

BERTScoreは、生成された文(候補文)と、お手本となる文(参照文)を並べて、意味がどれくらい重なっているかを0〜1の数値で返します。
やっていることを一言にすると、こうです。
両方の文を「意味のベクトル」に変換して、単語どうしの近さを総当たりで測り、いちばん近い相手とのペアで採点する。
たとえば「猫がソファで寝ている」と「ネコがソファーで眠っている」。単語の表記はほとんど違いますが、意味はほぼ同じ。BERTScoreはこれを高得点と判定します。
ここが従来の指標との決定的な違いです。
用語をひとつ補足します。文脈埋め込みとは、単語を「前後の文脈込みで数値の並びに変換したもの」のこと。同じ「はし」でも、「川のはし」と「ごはんをはしで」では別の数値になります。だから同音異義語にも強い。
なぜBLEUやROUGEでは足りないのか?

BLEUとROUGEは長らく標準でしたが、どちらも「同じ単語がいくつ出てきたか」を数える仕組みです。言い換えに弱い。ここが弱点。
具体例で見てみます。参照文を「電車が遅れたため、会議に遅刻しました」としましょう。
| 生成文 | 単語一致ベースの評価 | 意味ベースの評価 |
|---|---|---|
| 電車が遅延したので、打ち合わせに遅れました | 低い(一致語が少ない) | 高い(内容は同一) |
| 電車が遅れたため、会議に間に合いました | 高い(一致語が多い) | 低い(結論が真逆) |
| バスが遅れたため、会議に遅刻しました | 高い | やや低い(手段が違う) |
つまり、単語の一致だけを見ていると、意味が正反対の文に高得点を出してしまうことがあります。
BERTScoreはこの穴を埋める指標です。ただし万能ではありません。3行目の「バス/電車」のような細かい事実の食い違いは、意味ベクトルの上では近い位置にあるため見逃されやすい。この弱点は後半で詳しく扱います。
日本語のLLM評価では、BLEU・ROUGE・BERTScore・人間評価の4つを組み合わせるのが実務の定石になっています。1つの指標で片付けようとしないこと。
BERTScoreはどうやって計算している?

計算の流れは4段階です。数式を追わなくても、順番さえ掴めば十分に使えます。
- 参照文と候補文を、それぞれBERTに通してトークンごとのベクトルに変換する
- 候補文の各トークンについて、参照文の全トークンとのコサイン類似度を計算する
- いちばん似ている相手とのスコアだけを採用する(貪欲マッチング)
- 全トークン分を平均して、Precision・Recall・F1を出す
コサイン類似度とは、2つのベクトルの向きがどれだけ揃っているかを測る値です。向きが完全に同じなら1、無関係なら0付近になります。
ポイントは「総当たりで見て、最も近い相手とだけ組む」という設計。語順が入れ替わっても、対応する意味の単語さえあれば拾えます。だから受動態と能動態の書き換えにも耐えます。
一方で、この設計は文の構造を厳密に見ているわけではありません。単語レベルの意味が似ていれば通ってしまう。ここは覚えておいてください。
Precision・Recall・F1は何を見ている?

BERTScoreは3つの数値を返します。この3つを区別せずF1だけ眺めていると、改善の方向を間違えます。
| 指標 | 見ているもの | 低いときに疑うこと |
|---|---|---|
| Precision(適合率) | 生成文の各語が、参照文に対応を持つか | 余計な情報を足している。作り話が混ざっている |
| Recall(再現率) | 参照文の各語が、生成文に拾われているか | 情報の抜け漏れ。要約しすぎ |
| F1 | 上2つの調和平均 | 総合力。レポート用の代表値 |
要約タスクなら、Recallの低さは「大事な論点を落とした」というサイン。逆にPrecisionだけが低いなら、AIがそれっぽい嘘をつくこと、いわゆるハルシネーションを疑うべきです。
3つ並べて初めて意味がある。F1だけを見るのはもったいない使い方です。
スコアはいくつなら合格ラインなのか?
はっきり書きます。絶対値の合格ラインは、決められません。
BERTScoreの数値は、使ったモデル、言語、文の長さ、正規化の有無で大きく動きます。同じ品質の文でも、モデルを変えれば0.85が0.72になったりします。他所の記事で見た閾値を自分のデータに当てはめても、まず意味がありません。
正しい使い方はこちらです。
- 同じ設定のまま、モデルAとモデルBを比べる
- 同じ設定のまま、プロンプト改善の前後を比べる
- 同じ設定のまま、リリース前後で劣化していないか監視する
| 使い方 | 妥当性 | 理由 |
|---|---|---|
| 「0.9以上なら高品質」と社内基準にする | 危険 | 設定依存で数値が動く |
| モデル間の相対比較 | 適切 | 条件を揃えれば差分は信頼できる |
| 改善前後のA/B比較 | 適切 | 変更の効果が可視化できる |
| 単一文の合否判定 | 不向き | 1文あたりのブレが大きい |
要するに、BERTScoreは「点数」ではなく「物差し」です。何かと比べるためにある。
比較の設計そのものに慣れていないなら、モデルごとの回答傾向を掴んでおくと評価軸を立てやすくなります。主要モデルの性格の違いはMeta AIの実力と使いどころで整理しているので、評価対象を選ぶ前に目を通しておくと後の設計が早いです。
日本語で使うときに気をつけることは?
日本語で使うなら、ここが最重要セクションです。3つの落とし穴があります。
1つめ、モデル指定の問題。 既定のままだと英語向けのモデルが選ばれることがあります。日本語を十分に学習していないモデルで日本語を採点すると、数値はほぼ当てになりません。多言語モデルか日本語モデルを明示的に指定してください。
2つめ、分かち書きの問題。 日本語は単語の区切りが空白で示されません。トークン分割のクセによって、同じ文でもスコアが揺れます。評価パイプライン全体で同じ設定を使い回すこと。
3つめ、短文での不安定さ。 「はい」「承知しました」のような短い応答は、トークン数が少なすぎて数値が跳ねます。チャットボットの評価では、短文の扱いを別枠にするのが無難です。
ひとことで言えば、設定を固定して、短文は分けて集計する。これだけで信頼性がかなり変わります。
導入手順:pipで入れて5分で動かす
実装は驚くほど短いです。Pythonが動く環境なら数分で終わります。
pip install bert-score
呼び出しはこの形になります。
from bert_score import score
cands = ["電車が遅延したので、打ち合わせに遅れました"]
refs = ["電車が遅れたため、会議に遅刻しました"]
P, R, F1 = score(cands, refs, lang="ja", verbose=True)
print(F1.mean())
langの指定を忘れないこと。ここを空にすると英語向けの挙動になります。
初回はモデルのダウンロードが走るので少し待ちます。2回目以降はキャッシュから読むため高速。オフライン環境で使う場合は、事前に一度オンラインで実行してモデルを取得しておいてください。
BLEUやROUGEも同時に測るなら、関連ライブラリをまとめて入れておくと比較表が作りやすくなります。
計算量はBLEUよりかなり重い。数万件を回すならGPUを用意するか、サンプリングして回す設計にしましょう。
BERTScoreが向く場面・向かない場面
万能の指標ではありません。向き不向きをはっきりさせておきます。
| 場面 | 向き | 補足 |
|---|---|---|
| 要約の品質チェック | ◎ | 言い換えを正当に評価できる |
| 機械翻訳の評価 | ◎ | 提案論文の主戦場 |
| チャットボット回答の劣化監視 | ○ | 短文は別集計にする |
| 数値・固有名詞の正しさ検証 | × | 数字の誤りを見抜けない |
| 事実関係の裏取り | × | 意味が近ければ通ってしまう |
| 正解文が用意できないタスク | × | 参照文が必須 |
いちばん誤解されるのが下の3行です。BERTScoreは「意味が近いか」しか見ていません。「1,200万円」と「1,300万円」はベクトル上でごく近い位置にあるため、金額の取り違えを高得点で通してしまいます。
金額や日付の正確さを担保したいなら、正規表現による突き合わせを別に用意するのが現実的です。指標を1本に頼らない。
他の評価指標との使い分け
実務では複数を並べて使います。役割分担の全体像はこの表が早いです。
| 指標 | 見ているもの | 強み | 弱み |
|---|---|---|---|
| BLEU | 単語列の一致 | 高速・再現性が高い | 言い換えに弱い |
| ROUGE | 参照文の情報カバー率 | 要約の抜け漏れ検出 | 意味を見ない |
| BERTScore | 文脈込みの意味的類似度 | 言い換え・同義語に強い | 事実誤りを見逃す・計算が重い |
| 埋め込みコサイン類似度 | 文全体の意味 | 実装が最も軽い | 粒度が粗い |
| LLM-as-a-judge | 総合的な良し悪し | 基準を自由に書ける | コストとブレ |
| 人間評価 | 実際の満足度 | 最終的な正解 | 時間と費用がかかる |
つまり、自動指標でふるいにかけて、残った上位と下位だけを人が読む。この二段構えが現実的な運用です。
自動指標を全部やめて人手に戻すのは非効率ですし、逆に自動指標だけで完結させるのも危うい。両方使う。
派生指標と、まだ残っている限界
BERTScoreには弱点を補う派生版がいくつか提案されています。知識グラフを組み合わせて事実の正しさを見るKG-BERTScoreや、数値の扱いを改善する方向のCBERTScoreなどです。
いずれも「数字と事実に弱い」という本体の弱点を、外側から補強する発想。裏を返せば、素のBERTScoreだけでは事実性を担保できないと業界が認めているということです。
もうひとつ、地味に効いてくる限界があります。参照文が必要という制約。
自由記述の回答や、正解が1つに定まらない創作系のタスクでは、そもそも参照文を用意できません。この場合はBERTScoreの出番がなく、LLMに採点させる方式に切り替えることになります。
生成物の評価という論点は、テキストに限った話ではありません。画像生成でも「意図どおりか」の判定は難物で、こちらは指標より運用ルールで詰めるのが現実解です。画像側の評価軸に興味があれば、AIイラストツールの比較とComfyUIとStable Diffusionの違いを読むと、テキスト評価との発想の差がよく分かります。
社内の生成AI評価にどう組み込む?
導入の順番を間違えると、数値だけ溜まって誰も見ないダッシュボードができあがります。おすすめの順序はこうです。
- 参照文つきの評価データを50〜100件そろえる(ここが8割の仕事)
- 現行モデルでBERTScoreを測り、基準値として記録する
- プロンプトやモデルを変えるたび、同じデータで測り直す
- スコアが下がった事例だけ人が読む
いちばん時間がかかるのは1番です。良い評価データがなければ、どんな指標を持ち込んでも意味がありません。
社内文書を扱う場合、評価データそのものが機密になりがちです。BERTScoreはローカルで完結するため、文章を外部サービスに送らずに済むのは実務上かなり重宝します。
評価の仕組みを社内の管理体制に載せる段階なら、社内監査に使えるAIツールでチェック体制の作り方を確認しておくと、ログの残し方まで含めて設計できます。
リサーチ結果の要約品質を測りたいケースも多いはず。その場合は、対象となるリサーチAIの出力形式を先に把握しておくと参照文を作りやすくなります。Feloの使い方まとめが参考になります。
よくある失敗パターン
現場で繰り返し見かける失敗を4つ挙げます。
- モデルを揃えずに比較する — 先週と別のモデルで測った数値を並べても意味がありません
- F1だけを報告する — PrecisionとRecallのどちらが原因か分からず、改善が空回りします
- 短文と長文を同じ集計に混ぜる — 平均値が短文のブレに引きずられます
- 数値の正しさをBERTScoreに任せる — 金額や日付の誤りは通過します
どれも一度やらかすと痛い。特に1つめは、数か月分のログが丸ごと使えなくなります。設定はコードに固定して、変更するときはバージョンを切ること。
AI PICKS編集部の判定
BERTScoreは、LLM評価を始めるならまず入れておくべき一択の指標です。導入コストが破格に低い。pipで入れて数行呼ぶだけで、BLEU・ROUGEでは拾えなかった言い換えの妥当性が見えるようになります。ローカルで完結するので、社内文書を外に出さずに測れるのも実務では大きい。
ただし「これ1本で品質を保証できる」と考えているなら、正直イマイチな結果になります。金額の取り違えも、日付の誤りも、素通りします。事実の正しさを守る仕組みは別に用意してください。ここを理解せずに導入した現場は、たいてい半年後に「スコアは高いのに現場からクレームが来る」と言い出します。
現実的な線はこうです。BERTScoreで大量の出力をふるいにかけ、スコアが動いた分だけ人が読む。人間評価を減らすためではなく、人間が読むべき場所を絞るために使う。この位置づけを守れば、圧倒的に費用対効果の高い道具になります。
参照文が用意できないタスクでは、素直にLLMに採点させる方式へ切り替えるのが賢明です。無理に当てはめないこと。
関連する比較・代替を見る
評価対象となるモデル選びで迷ったら、こちらの比較が参考になります。
- ChatGPT vs Claude — 要約タスクでの文体の違い
- ChatGPT vs Gemini — 長文処理の得意分野の差
- Claude vs Gemini — 日本語の自然さで比べる
- ComfyUI vs Stable Diffusion — 生成物の評価という共通課題
- ChatGPTの代替を探す — 乗り換え候補の一覧
- AIエージェント系のツール一覧 — 評価パイプラインの自動化まで踏み込む場合
よくある質問(FAQ)
Q. BERTScoreはBLEUの完全な上位互換ですか?
いいえ。BLEUのほうが計算が軽く、再現性も高いという利点があります。数万件を毎日回すような監視用途では、BLEUを一次フィルタに使い、絞り込んだ分だけBERTScoreで見る運用が現実的です。
Q. スコアが0.9を超えたら品質は保証されますか?
されません。BERTScoreの絶対値は、使用モデルや言語設定で大きく変わります。同一条件での相対比較にだけ使ってください。0.9という数字そのものに意味を持たせないこと。
Q. 参照文(正解文)は必ず必要ですか?
必要です。参照文なしでは計算できません。正解が定まらない創作タスクや自由記述の評価には向かないため、その場合はLLMに採点させる方式を検討してください。
Q. 日本語でもちゃんと動きますか?
動きます。ただし日本語を学習したモデルを明示的に指定することが前提です。既定のまま実行して英語向けモデルが選ばれると、数値が当てになりません。ここを外している事例は本当に多い。
Q. GPUがないPCでも使えますか?
使えます。件数が少なければCPUでも問題ありません。ただし数千件を超えると待ち時間が現実的でなくなるため、GPUかクラウドの計算環境を検討してください。
Q. Precision・Recall・F1のどれを見ればいいですか?
代表値としてはF1ですが、改善したいなら3つとも見るべきです。Recallが低ければ情報の抜け、Precisionが低ければ余計な追加や作り話を疑います。原因の切り分けができるのが3値構成の価値です。
Q. 事実の誤りは検出できますか?
できません。「1,200万円」と「1,300万円」のような取り違えは、意味的にはごく近いため高得点で通過します。数値や固有名詞の検証は、別のルールベースの仕組みで担保してください。
Q. 社外に文章が送信されることはありませんか?
ありません。モデルを自分の環境にダウンロードして動かす仕組みなので、評価対象の文章が外部へ出ることはありません。機密文書の評価にも使えます。
評価の話を一通り押さえたら、次は測る対象となるモデル選びです。Meta AIの実力と使いどころを読むと、日本語タスクでどのモデルを比較候補に入れるべきかの見当がつきます。評価データを作る前に読んでおくと、無駄な測り直しを避けられます。
