🌟

生成AIの評価について(文章生成)

2023/10/08に公開

はじめに

  • 業務で生成AIを使用する機会が多く、評価を目検で行っていました。それ以外の方法について個人的に調査したので、内容をまとめました。

文章生成AIにおける評価方法について

  • 文章生成AIにおける評価方法は、主に2つあります。1つは自動評価で、もう1つは人間評価です。

  • 自動評価

    • テストセットや検証セットを使用して、モデルの性能を測定します。
  • 人間評価

    • 人間が生成された文章を読み、その文章が"求めている結果であるかどうか"を判断します。

自動評価の評価手法について

  • 自動評価には、様々な手法があります。例えば、BLEU、ROUGE、METEOR、CIDErなどの指標があります。これらの指標は、自動評価によって生成されたテキストと参照テキストの類似度を測定することで、生成されたテキストの品質を評価します。(あくまでもテキストの品質です)

  • 以下の表は3つの自動評価指標についてそれぞれの指標がどのように計算されるかを簡単にまとめました。

指標 計算方法 説明
BLEU N-gramの一致度を測定することで、生成されたテキストが参照テキストにどの程度近いかを評価します。 BLEUスコアは0から1までの値を取り、スコアが高いほど生成されたテキストが参照テキストに近いことを示します。
ROUGE 正解要約中のN-gramのうち,どの程度が生成要約に含まれているかで評価します。 ROUGEは生成要約を長くすればするほど,正解要約とマッチするN-gramが増えるため、評価値が高くなる傾向にあります。
METEOR WordNetの同義語やステミング処理などを利用して柔軟にN-gram間の一致を測る評価手法です。 Precision, RecallはUnigram単位のマッチから計算します。

自動評価の手法の具体的な評価手法について

BLEU

  • BLEUとは、機械翻訳の評価に広く用いられる自動評価指標の1つです。生成されたテキストと参照テキストの類似度を測定することで、生成されたテキストの品質を評価します。N-gramの一致度を測定することで、生成されたテキストが参照テキストにどの程度近いかを評価します。スコアは0から1までの値を取り、スコアが高いほど生成されたテキストが参照テキストに近いことを示します。
pip install evaluate
import evaluate

"""日本語に翻訳した時の例"""
# bleuモジュールの読み込み
bleu = evaluate.load("bleu")
predictions = ["私はこれまでのコメントを削除しました。"]
references = ["私はこれまでのコメントを削除しました。"]
# 適当にtokenizerを探したらこれが見つかったので使ってみる
# transformersはインストールが必要
from transformers import T5Tokenizer
tokenizer = T5Tokenizer.from_pretrained("rinna/japanese-roberta-base")
tokenizer.do_lower_case = True
results = bleu.compute(predictions=predictions, references=references, tokenizer=tokenizer.tokenize)
# 結果を出力
print(results)
# {'bleu': 1.0, 'precisions': [1.0, 1.0, 1.0, 1.0], 'brevity_penalty': 1.0, 
# 'length_ratio': 1.0, 'translation_length': 9, 'reference_length': 9}

ROUGE

  • ROUGEは、正解要約中のN-gramのうち,どの程度が生成要約に含まれているかで評価します。
  • また、再現率を重視する指標であり、正解要約中のN-gramが生成要約にどの程度含まれているかを測定します。
# rouge_scoreをインストール
pip install rouge_score
import rouge_score

""" シンプルな例 """
# rougeモジュールの読み込み
rouge = evaluate.load('rouge')
predictions = ["hello goodbye", "ankh morpork"]
references = ["goodbye", "general kenobi"]
results = rouge.compute(predictions=predictions,references=references,use_aggregator=False)
print(list(results.keys()))
# ['rouge1', 'rouge2', 'rougeL', 'rougeLsum']
print(results["rouge1"])
# [0.6666666666666666, 0.0]

METEOR

  • WordNetの同義語やステミング処理などを利用して柔軟にN-gram間の一致を測る評価手法です。PrecisionとRecallはUnigram単位のマッチから計算されます
  • また、再現率を重視する指標であり、生成されたテキストが参照テキストにどの程度含まれているかを測定します。また、METEORはBLEUよりも人間の判断と相関が高いことが報告されています
pip install evaluate
import evaluate

""" シンプルな例 """
# meteorモジュールの読み込み
meteor = evaluate.load('meteor')
predictions = ["It is a guide to action which ensures that the military always obeys the commands of the party"]
references = ["It is a guide to action which ensures that the military always obeys the commands of the party"]
results = meteor.compute(predictions=predictions, references=references)
print(round(results['meteor'], 2))
1.0

それぞれの評価手法のメリットとデメリット

評価手法 メリット デメリット
BLEU ・生成文と参照文のN-gramの一致率に基づく客観的な指標である
・機械翻訳タスクで広く用いられており、他のモデルとの比較が容易である
・N-gramの一致だけでは意味や文法の正しさを十分に測れない
・生成文が短すぎると不当に高いスコアになる可能性がある
・参照文が複数必要であり、データ収集が困難である
ROUGE ・生成文と参照文のN-gramや最長共通部分列の一致率に基づく客観的な指標である
・要約生成タスクで広く用いられており、他のモデルとの比較が容易である
・N-gramや最長共通部分列の一致だけでは意味や文法の正しさを十分に測れない
・生成文が長すぎると不当に高いスコアになる可能性がある
・参照文が複数必要であり、データ収集が困難である
METEOR ・生成文と参照文の単語レベルの一致率に基づく客観的な指標である
・WordNetの同義語やステミング処理などを利用して柔軟に一致を測ることができる
・連続した単語がマッチした場合に高い評価値を与えるようにするため、流暢さや自然さを考慮することができる
・単語レベルの一致だけでは意味や文法の正しさを十分に測れない
・言語やドメインによってはWordNetやステミング処理が適切でない場合がある
・参照文が複数必要であり、データ収集が困難である
人間評価 ・意味や文法の正しさだけでなく、多様性や創造性なども含めた主観的な指標である
・生成文の品質や妥当性を直感的に判断することができる
・評価基準や評価者の数などを自由に設定することができる
・評価基準や評価者の数などによって評価値が大きく変わる可能性がある
・評価者のバイアスやノイズに影響される可能性がある
・評価に時間やコストがかかる可能性がある

まとめ

  • 一通り調査をしてみましたが、やはり自動評価手法ではテキストの品質についての評価が限界のようです。
  • そのため、タスクにあったテキストを生成できているか?という部分の評価については引き続き人間の判断が必要です。

Discussion