K_DM Book
用語集
対象者 標準
対象者別の入口 →

対象者の設定はこのブラウザの中にだけ保存されます。

言語 JA

ROUGE 指標

中級

03.6.2

ROUGE 指標

最終更新 2020-02-12 読了時間 2 分
まとめ
ROUGE(Recall-Oriented Understudy for Gisting Evaluation)は、要約モデルの候補文が人手の参照要約の内容をどれだけ拾えたかを測る指標群です。ROUGE-N は参照文の n-gram のうち候補文にも現れた割合(再現率)で、参照 7 トークン・候補 5 トークンの例では ROUGE-1 の再現率が 4/7 = 0.571、ROUGE-2 が 1/6 = 0.167 になります。ROUGE-L は最長共通部分列(LCS)の長さを使い、連続していなくても語順が保たれた一致を評価します。BLEU が「候補文の断片が参照にあるか」の精度を見るのに対し、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 つ組です:

$$P = \frac{\text{一致数}}{\text{候補文のn-gram数}}, \quad R = \frac{\text{一致数}}{\text{参照文のn-gram数}}$$$$F_1 = \frac{2PR}{P + R}$$

計算例 #

参照文: “猫 は マット の 上 に いる”(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-11-gramの再現率重要語の取りこぼし確認
ROUGE-22-gramの再現率フレーズレベルの一致
ROUGE-LLCSベースのF値語順を考慮した評価
ROUGE-Lsum文単位のLCSを平均化長文要約の評価

Python で計算する #

次のコードは Google の rouge_score パッケージで、1 組の参照文と候補文に対して rouge1・rouge2・rougeLsum の precision・recall・fmeasure をまとめて出します。

1
2
3
4
5
from rouge_score import rouge_scorer
scorer = rouge_scorer.RougeScorer(["rouge1", "rouge2", "rougeLsum"], use_stemmer=True)
candidate = "今日はとても良い天気だ"
reference = "今日は良い天気です"
print(scorer.score(reference, candidate))

BLEU との違い #

観点BLEUROUGE
重視する側面精度(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 を取る方法も使われます。