03.6.2
ROUGE 指標
rouge_scorer.RougeScorer で rouge1・rouge2・rougeLsum を一度に出し、再現率・精度・F1 のどれを報告すべきか判断できるようになります。BLEU 指標 で n-gram の数え方と「候補文を分母にした精度」を先に見ておくと、ROUGE が分母を参照文側に変えただけだと読めます。
ROUGE は、候補要約と参照要約の重なり具合を測る指標群です。BLEUが精度(precision)寄りなのに対し、ROUGEは再現率(recall)を重視します。
直感:参照要約の内容をどれだけ取りこぼさなかったか #
ニュース記事の人手要約が「猫 は マット の 上 に いる」で、モデルの要約が「猫 が マット に いる」だったとします。BLEU の発想なら「候補の 5 語のうち参照にあるのは 4 語」で精度 0.8 と見ますが、要約で気になるのは「参照に書かれていた 7 語分の情報のうち、候補に残ったのはどれだけか」です。ROUGE-1 はこれを 4/7 = 0.571 と数えます。要約は短くまとめるほど精度は上がりやすいので、参照側を分母にして「落とした情報」を罰する再現率を主役にしているのが ROUGE の特徴です。
式で書くと何を割っているか #
ROUGE-N(n-gramベースの再現率) #
$$\text{ROUGE-N} = \frac{\sum_{S \in \text{Ref}} \sum_{\text{n-gram} \in S} \text{Match}(\text{n-gram})}{\sum_{S \in \text{Ref}} \sum_{\text{n-gram} \in S} \text{Count}(\text{n-gram})}$$分母は参照文中の n-gram の総数、分子はそのうち候補文にも出現したものの数で、「参照の n-gram を候補がどれだけ拾ったか」の割合です。$N=1$がROUGE-1、$N=2$がROUGE-2です。
ROUGE-L(最長共通部分列) #
ROUGE-Lは最長共通部分列(LCS: Longest Common Subsequence)を使います。LCS は「順番を保ったまま飛び飛びに取れる共通の語の最長列」なので、“猫 … マット … に いる” のように間に別の語が挟まっても語順が同じなら一致と数えます。候補文$X$(長さ$m$)と参照文$Y$(長さ$n$)に対して:
$$R_{\text{lcs}} = \frac{\text{LCS}(X, Y)}{n}, \quad P_{\text{lcs}} = \frac{\text{LCS}(X, Y)}{m}$$$$F_{\text{lcs}} = \frac{(1 + \beta^2) \cdot R_{\text{lcs}} \cdot P_{\text{lcs}}}{R_{\text{lcs}} + \beta^2 \cdot P_{\text{lcs}}}$$通常$\beta$は大きな値に設定され、$F_{\text{lcs}}$ では再現率 $R_{\text{lcs}}$ が支配的になります。
F値としてのROUGE #
実務では recall、precision、F1 の 3 値を同時に報告します。rouge_score ライブラリの出力もこの 3 つ組です:
計算例 #
参照文: “猫 は マット の 上 に いる”(7トークン) 候補文: “猫 が マット に いる”(5トークン)
ROUGE-1 では、一致する 1-gram が “猫”, “マット”, “に”, “いる” の 4 個なので、$R = 4/7 = 0.571$, $P = 4/5 = 0.800$, $F_1 = 0.667$ です。ROUGE-2 では、参照文の 2-gram が “猫は”, “はマット”, “マットの”, “の上”, “上に”, “にいる” の 6 個、候補文の 2-gram が “猫が”, “がマット”, “マットに”, “にいる” の 4 個で、一致は “にいる” の 1 個だけです。したがって $R = 1/6 = 0.167$, $P = 1/4 = 0.250$, $F_1 = 0.200$ となり、「は」が「が」に、「の上」が抜けた影響で 2-gram の一致が大きく落ちることが分かります。
主なバリエーション #
| バリエーション | 計算方法 | 用途 |
|---|---|---|
| ROUGE-1 | 1-gramの再現率 | 重要語の取りこぼし確認 |
| ROUGE-2 | 2-gramの再現率 | フレーズレベルの一致 |
| ROUGE-L | LCSベースのF値 | 語順を考慮した評価 |
| ROUGE-Lsum | 文単位のLCSを平均化 | 長文要約の評価 |
Python で計算する #
次のコードは Google の rouge_score パッケージで、1 組の参照文と候補文に対して rouge1・rouge2・rougeLsum の precision・recall・fmeasure をまとめて出します。
| |
BLEU との違い #
| 観点 | BLEU | ROUGE |
|---|---|---|
| 重視する側面 | 精度(precision) | 再現率(recall) |
| 主な用途 | 機械翻訳 | 要約 |
| 出力の短さ | BPでペナルティ | 再現率で自然に反映 |
| n-gramの範囲 | 通常4-gramまで | 1-gram, 2-gramが主流 |
BLEU は候補文を分母にするので短い出力を別途 brevity penalty で罰しますが、ROUGE は参照文を分母にするため、短すぎる要約は拾えた n-gram が減って再現率が自然に下がります。
長所と注意点 #
ROUGE-1・2・L の計算は n-gram の集合演算と LCS の動的計画法だけなので、数万件の要約でも数秒で複数の派生指標を同時に算出できます。DUC などの要約評価では ROUGE-2 と ROUGE-L の再現率が人手評価と比較的高い相関を示し、抽出型要約や「参照の情報量をどれだけ残したか」を確認する用途で定番になっています。一方、意味的な類似性は考慮しないため、「猫」を「ネコ」と言い換えただけでも一致が外れてスコアが低下します。参照要約が 1 つだけだと候補の正しい多様性を評価できないので、可能なら複数の参照を用意し、最大値や平均を取ります。日本語では形態素解析やサブワード分割を行ってから計算するとスコアが安定しやすく、文字単位で ROUGE を取る方法も使われます。