📝

ファインチューニングで、汎用的な要約モデルを作るためのデータセット設定

2024/11/25に公開

はじめに

初めまして、データアナリティクスラボ株式会社データソリューション事業部の沖田です。 今回は社内活動の一環として、大規模言語モデルをファインチューニングし、要約を行うモデルを作成し精度を比較する実験を行いましたので、その結果を紹介します。

背景

私は、業務では、法人営業をサポートするための分析を行なっていますが、その中で、日々の経済情報を把握する必要性を感じています。

そこで、経済情報を素早く簡単に把握したいと考えました。具体的には、数百文字の文章を、数十文字程度に要約して把握したいです。これは、新聞記事から、見出しを作成するような作業と考えることができます。

目的

私は、上記の背景から、大規模言語モデルのファインチューニングによって、文章を要約できるようにしたいと考えました。実装上は、新聞記事から見出しを生成するよう学習させます。

課題は、本来要約したい文章と要約文の組のデータセットが存在することはまれであり、ファインチューニングに利用できない可能性が高いことです。手作業でデータを集めることにも工数がかかります。

そこで、本実験の目的は、既存の文章と要約文の組のデータセットを用いてファインチューニングを行い、ファインチューニングに用いたデータセット以外の文章も要約できるような汎用的なモデルを作ることです。本実験においては、最も簡単に調整可能なデータセットの設定(内容の多様性・件数)を変えることで、汎用的なモデルを作る方法を検討します。

実験概要

内容

  • 新聞記事の記事・見出しデータを利用したファインチューニング用データセットで、記事から見出しを生成する(要約する)よう、大規模言語モデルをファインチューニングします。
  • ファインチューニング済みモデルで見出しを生成(要約)し、以下の2つのデータセットで結果を評価します。
    • ファインチューニング用データセットのテスト用データ
    • 要約性能検証用データセット

データセット

ファインチューニング用データセット 要約性能検証用データセット(※)
データセット名 livedoor ニュースの記事・見出し 産業系新聞の記事・見出し
データセットの説明 9カテゴリのニュースからなる
• 本実験には、記事の長さが同程度の6カテゴリのデータを利用する
• 手作業で、産業系新聞から、記事・見出しのデータを収集したもの

※要約性能検証用データセットは、ファインチューニング済みモデルで要約を生成し要約文を評価するためだけに利用し、ファインチューニングには利用しません。

モデル

  • Stockmark-13B
    • 本モデルの特徴「ビジネス用途での信頼性と速度」が、本実験の背景ニーズである「経済情報を素早く簡単に把握したい」ということに適っているため、本モデルを選定しました。

評価指標

  • 定量的な評価
    • ROUGE-L(precision)
    • BLEUスコア
  • 定性的な評価
    • 誤った内容が生成されている割合
    • 主題以外の内容が生成されている割合
    • ファインチューニング用データの見出しに影響を受けた要約になっている割合
      • livedoorニュースの見出しに特徴的な、括弧・記号を多用していること

結果

  • ファインチューニングに用いたデータセット以外の文章も要約できるような汎用的なモデルを作るためには、ファインチューニング用データセットについて、以下が重要であるという結果を得ました。
  1. 内容の多様性が大きいこと
    • 特に、誤った生成結果を減少させる
  2. 件数が多すぎないこと
    • 誤った生成結果を減少させる
    • 主題とは異なる内容を生成してしまうことを防ぐ

実験設計

データセット

本実験には、以下の通り、ファインチューニング用データセットおよび要約性能検証用データセットを用意しました。ともに、クレンジング(記事データ末尾の関連記事一覧や公開日などを取り除く処理)を行いました。

ファインチューニング用データセット 要約性能検証用データセット
データセット名 livedoor ニュースの記事・見出し 産業系新聞の記事・見出し
データセットの説明 9カテゴリのニュースからなる
• 本実験には、記事の長さが同程度の6カテゴリのデータを利用する
• 訓練用データセット75%、検証用データセット15%、テスト用データセット10%の割合で分割する
• 手作業で、産業系新聞から、記事・見出しのデータを収集したもの

ファインチューニング用データセットの設定

ファインチューニング用データセットとして、「livedoor ニュースコーパス」で提供されている、livedoor ニュースの記事・見出しを利用します。livedoor ニュースコーパスには、9カテゴリのデータが含まれますが、本実験には、記事の長さが同程度の6カテゴリのデータを利用します。

データセットの件数・多様性を、それぞれ2水準で設定したデータセット①~④を用意し、それぞれのデータセットでファインチューニングを行いました。

データセットNo. 件数
(少ない/多い)
カテゴリ数
(内容の多様性が小さい/大きい)
1,000 3 件数が少ない・多様性が小さい
1,000 6 件数が少ない・多様性が大きい
2,000 3 件数が多い・多様性が小さい
2,000 6 件数が多い・多様性が大きい

カテゴリ数が3の場合に含まれるカテゴリは、以下の通りで、全世代の読者向けのカテゴリです。

  1. MOVIE ENTER
  2. ITライフハック
  3. エスマックス

カテゴリ数が6の場合に含まれるカテゴリは、カテゴリ数が3の場合に含まれるカテゴリに加え、特定の世代・性別向けの記事カテゴリが含まれており、記事の内容が多様です。

  1. MOVIE ENTER
  2. ITライフハック
  3. エスマックス
  4. livedoor HOMME
    20代後半から40代の男性向け
  5. Peachy
    主婦・女性向け
  6. 独女通信
    独身女性向け

なお、livedoor ニュースの見出しの特徴として、括弧や記号が多用されていることが挙げられます。

見出しの特徴 見出しの例
括弧の多用 ウェブセキュリティの向上を目指すOWASPとは【役立つセキュリティ】
記号の多用 起業家のための事業継続支援サイト「開業計画NAVI」を立ち上げ!

要約性能検証用データセットの設定

手作業で 産業系新聞の記事・見出しを収集し、モデルの要約性能の検証に利用しました。データの件数は、50件です。モデルの要約性能の検証では、筆者による人手での定性評価も行なったため、その工数が増えすぎないよう、限定的な件数としました。

なお、要約性能検証用データセットは、ファインチューニング済みモデルで要約を生成し要約文を評価するためだけに利用し、ファインチューニングには利用しません。

ファインチューニングするモデル

ファインチューニングするモデルとして、Stockmark-13Bを選定しました。選定理由は、開発者によると、本モデルの特徴は、「ビジネス用途での信頼性と速度」とされており、本実験の背景ニーズである「経済情報を素早く簡単に把握したい」ということに適っているからです。

Stockmark-13Bの詳細

  • モデル名
    • Stockmark-13B
  • 開発者
    • ストックマーク株式会社
  • モデルの特徴
    • ビジネス用途での信頼性と速度
  • パラメータ数
    • 130
  • モデルのアーキテクチャ
    • 130億パラメータのLlama2
  • 事前学習に用いたデータセット
    • 日本語のデータセット(合計約2,200億トークン)
    • 一般に事前学習でよく使われるWikipediaやCommonCrawl由来のコーパスに加え、開発者が独自に収集したビジネスに関連するWebページや特許などのデータも用いられています。

(ストックマーク、ビジネスでも信頼できる130億パラメータLLMをオープンソースで公開より抜粋)

実装にあたっては、限られたGPUメモリでも実行できるよう、モデルを4ビット量子化し利用しました。

4ビット量子化する際のデータ型は、NF4(4-bit Normal Float)という新しいデータ型を利用してみました。NF4は、2023年の論文QLoRA: Efficient Finetuning of Quantized LLMsで提案されたもので、より高精度な量子化を実現でき、モデルの性能を損なわないとされています。

モデルを読み込む際には、AutoModelForCausalLMクラスを選択しました。本実験は文章の要約を行いますが、「記事を与え次単語予測(CausalLM)を行う」という形で実装するためです。

# モデル名
model_name = "stockmark/stockmark-13b"

# 4ビット量子化の設定
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.float16,
    bnb_4bit_use_double_quant = True
)

# 4ビット量子化し、モデルを読み込み
model = AutoModelForCausalLM.from_pretrained(
    model_name, 
    quantization_config=bnb_config, 
    trust_remote_code=True, 
    low_cpu_mem_usage=True,
    device_map="auto", 
    torch_dtype="auto"
)

# モデルのtokenizerを読み込み
tokenizer = AutoTokenizer.from_pretrained(model_name)
tokenizer.padding_side = "right"
EOS_TOKEN = tokenizer.eos_token

ファインチーニング方法:LoRA

ファインチューニングには、PEFT手法の一種である、LoRA(Low-Rank Adaption)を利用しました。PEFTとは、一部のパラメータのみを訓練することで、効率的にファインチューニングを行う方法ですが、その中でも現在最もよく使われる手法がLoRAです。

以下では、LoRAが紹介された論文LoRA: Low-Rank Adaptation of Large Language ModelsでのLoRAの説明を紹介します。

LoRAによる「効率的」なファインチューニングとは:更新するパラメータ数を抑えること
ファインチューニングによって、事前学習済みの重みW_0(d×k)を更新する場合を考えます。

通常のファインチューニングでは、すべてのパラメータを更新するため、更新されるパラメータ数は、d×kです。

事前学習済みの重みW_0を更新した差分をΔWとします。LoRAを利用したファインチューニングでは、ΔWB(d×r)A(r×k)に分解し、ΔW = BAとします。この場合、更新されるパラメータの数は、d×r + r×kです。

LoRAを利用したファインチューニング 通常のファインチューニング
更新されるパラメータ数 d×r + r×k d×k

ここで、r << min(d, k)(※)を満たすようにrを設定することで、d×r + r×k < d×kが満たされ、LoRAを利用したファインチューニングの方が、更新するパラメータ数が少なくなります。これを低ランク近似といい、rはランク数を決定するパラメータとなります。rは、12などの小さい値も取りうるとされています。
(※ 「a << b」は、「abよりも著しく小さい」ことを意味します。)

論文LoRA: Low-Rank Adaptation of Large Language Modelsでは、LoRAを、トランスフォーマーのアテンション層の線型結合層の重み行列(W_q, W_k, W_v, W_o)に適用していることに倣い、本実験でも、当該層にLoRAを適用しました。実装にあたっては、モデルのアーキテクチャを確認し、線形結合層の名前をtarget_modulesに設定しました。

(参考)モデルのアーキテクチャ 4ビット量子化したStockmark-13B

以下のように、モデルのアーキテクチャを表示させることができ、アテンション層(self_attn)内に、4つの線形結合層(q_proj, k_proj, v_proj, o_proj)があることがわかります。重み行列の形状は、5,120×5,120であり、上記に対応させるとd = k = 5,120です。

# 4ビット量子化したStockmark-13Bのアーキテクチャを表示
print(model)

# 以下、出力結果
LlamaForCausalLM(
  (model): LlamaModel(
    (embed_tokens): Embedding(50000, 5120)
    (layers): ModuleList(
      (0-39): 40 x LlamaDecoderLayer(
        (self_attn): LlamaSdpaAttention(
          (q_proj): Linear4bit(in_features=5120, out_features=5120, bias=False)
          (k_proj): Linear4bit(in_features=5120, out_features=5120, bias=False)
          (v_proj): Linear4bit(in_features=5120, out_features=5120, bias=False)
          (o_proj): Linear4bit(in_features=5120, out_features=5120, bias=False)
          (rotary_emb): LlamaRotaryEmbedding()
        )
        (mlp): LlamaMLP(
          (gate_proj): Linear4bit(in_features=5120, out_features=13824, bias=False)
          (up_proj): Linear4bit(in_features=5120, out_features=13824, bias=False)
          (down_proj): Linear4bit(in_features=13824, out_features=5120, bias=False)
          (act_fn): SiLU()
        )
        (input_layernorm): LlamaRMSNorm()
        (post_attention_layernorm): LlamaRMSNorm()
      )
    )
    (norm): LlamaRMSNorm()
  )
  (lm_head): Linear(in_features=5120, out_features=50000, bias=False)
)

以下が、LoRAの設定方法ですが、rに、r << min(d, k)を満たす値(ここでは8)を設定しました。

# LoRAの設定
peft_config = LoraConfig(
    task_type="CAUSAL_LM",
    r=8,
    lora_alpha=32,
    lora_dropout=0.1,
    # アテンション層のすべての線形結合層を指定
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
)

# LoRAのアダプターをモデルに付与
model = get_peft_model(model, peft_config)

学習の設定

プロンプト

ファインチューニング用データセット①~④の訓練用データセットおよび検証用データセットの記事・見出しを、「以下の記事を要約してください。」と指示し、入力しました。

# プロンプトフォーマット

text = f"""以下の記事を要約してください。

# 記事
{example['content'][i]}

# 見出し
{example['title'][i]}{EOS_TOKEN}""
プロンプトの具体例
以下の記事を要約してください。

# 記事
インテルは、東京・秋葉原において、最新のマイクロプロセッサーの優れた性能を紹介するイベント「Intel Technology Day in Akiba 2012」を、2012年4月29日(日)に開催する。  本イベントでは、インテル最新プロセッサーの優れた性能を見られる比較デモコーナーをはじめ、各メーカー・ショップPC展示コーナー、インテル デスクトップ・ボード展示コーナーを予定している。  また、イベントの一環として、賞品やインテル・オリジナルグッズが当たる、PCパーツショップをめぐるスタンプラリーを実施する予定だ。来場者は、誰でも参加できる催しとなっている。  インテルは、本イベントを通し、インテルの最新のマイクロプロセッサーの優れた性能およびUltrabook(TM) のユーザー体験の魅力訴求を行っていくとしている。

# 見出し
最新CPUに出会えるチャンス!「Intel Technology Day in Akiba 2012」を開催へ</s>

また、本実験では、trainerには、SFTTrainer(Supervised Fine-Tuning Trainer)を利用しますが、SFTTrainerには、DataCollatorForCompletionOnlyLMというcollatorクラスがあります。このcollatorはInstruction Tuningする際のプロンプトの「応答フォーマット」(ここでは、「# 見出し」)を指定することで、「応答フォーマット」より後に続くトークンのみを損失関数(ここではCrossEntropyLoss)の計算対象とします。実装上は、「応答フォーマット」を含むそれ以前のトークンに対しては、CrossEntropyLossでトークンを無視することを示すラベル -100が自動で設定されます。

本実験の実装では、まず、「応答フォーマット」である「# 見出し」のトークンを確認し、それをDataCollatorForCompletionOnlyLMのresponse_template_idsに指定しています。

# 「# 見出し」のトークンを確認
tokenizer.encode("# 見出し")

# 実行結果
# [0, 6, 224, 36279]

# 「# 見出し」のトークンを「応答フォーマット」として指定
response_template_ids = [6, 224, 36279]
collator = DataCollatorForCompletionOnlyLM(response_template_ids, tokenizer=tokenizer)
入力トークンとラベルの具体例

データセットの1件目のプロンプトの、入力トークンと、トークンのラベルを表示してみます。

入力トークンを表示すると、以下の「# 入力トークン」部分のように、記事・見出しを含むプロンプトがトークン化されています。特に、「応答フォーマット」である「# 見出し」は、上記で調べた通り、「6, 224, 36279」です。「6, 224, 36279」より後に続く「202, 40838, 22422, ... 」の部分が、記事のトークンです。

ラベルを表示すると、以下の「# ラベル」部分のように、「応答フォーマット」を含むそれ以前のトークンに対しては、トークンを無視することを示すラベル -100が設定されています。一方で、記事のトークンはマスクされていません。

from torch.utils.data import DataLoader
loader = DataLoader(trainer.train_dataset, collate_fn=collator, batch_size=8)

batch = next(iter(loader))

# 入力トークン
print(batch["input_ids"][0])

# 実行結果

# tensor([   ...,
#            19,  7260,    21,  2650,  1025, 29949,   269,  8619,   265,    20,
#            19,    19, 15705,    26,    17,    20,    27,     8,   264,  6571,
#           273,  5644,  1595,   265,    20,    19, 42810,    21,    19,    19,
#           962,    24,    19,    19,   830,  1025,   269, 10883,   318,  5798,
#           319,   553,  4968,   277,   265,   297, 25775,   521, 21533,  3495,
#           623, 46911,    11,  6681,   265,    20,    20,    17,    25,    21,
#             8,  2628,    20,    19,  7260,    22,  2650,  1025,  1536,   202,
#           202,     6,   224, 36279,   202, 40838, 22422,   278,   318,  4852,
#         10919,   319,   271, 12862,   314,   318,    76, 42042,    68, 12861,
#           319,   273,  1119,   765, 10655,  2933,  2635,   566,  2959,...])


# ラベル
print(batch["labels"][0])

# 実行結果
#  tensor([   ...,
# 			-100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,
#          -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,
#          -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,
#          -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,
#          -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,
#          -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,
#          -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,
#          -100,  -100,  -100,  -100,   202, 40838, 22422,   278,   318,  4852,
#         10919,   319,   271, 12862,   314,   318,    76, 42042,    68, 12861,
#           319,   273,  1119,   765, 10655,  2933,  2635,   566,  2959,...])

学習の設定・学習

学習の設定は、以下の通りとしました。モデルのサイズが大きいため、バッチサイズは1に設定しました。また、先述の通り、trainerには、SFTTrainerをしました。

# トレーニングの設定
training_arguments = TrainingArguments(
    output_dir="****",                               
    num_train_epochs=5,                              
    per_device_train_batch_size=1,                   
    per_device_eval_batch_size=1,                    
    gradient_accumulation_steps=2,        
    optim="paged_adamw_8bit",                                                    
    save_steps=200,                                                              
    logging_steps=5,                                                             
    learning_rate=1e-5,                                    
    weight_decay=0.001,                                                           
    fp16=False,                                                                   
    bf16=False,                                                                   
    max_grad_norm=0.3,                                                            
    max_steps=-1,                                                                 
    group_by_length=True,                                                         
    lr_scheduler_type="linear",                            
    evaluation_strategy="steps",                                                  
    eval_steps=200,                                                               
    save_total_limit=1,                                                           
    load_best_model_at_end=True,                                                  
    metric_for_best_model="loss",                                                 
    greater_is_better=False                                                       
)

# SFTTrainerの設定
trainer = SFTTrainer(
    model=model,
    tokenizer=tokenizer,
    train_dataset=ds_train,
    eval_dataset=ds_val,
    peft_config=peft_config,
    formatting_func=formatting_prompts_func,
    data_collator=collator,
    max_seq_length=1024,
    args=training_arguments,
)

# 訓練する
trainer.train()

ファインチューニング済みのモデルでの要約生成

ファインチューニング用データセット①~④で作成したモデルに、ファインチューニング用データセットのテスト用データセットおよび要約性能検証用データセットの記事データを入力し、要約を生成しました。

ここでは、後述する評価指標による評価が最も優れていた、ファインチューニング用データセット②(件数が少ない・多様性が大きい)で作成したモデルによる要約結果を紹介します。

生成結果 見出し 記事
インテルが新しい利用モデルを創出する場をオープン PCの次世代利用モデルを創出へ インテルつくばに新センター開設【デジ通】 インテルは、つくば本社に「インテル ヒューマン・インタラクティブ・テクノロジー・アプリケーション・センター」を新設した。ずいぶんと長い名前だが、インテルが製造するCore i7などのx86プロセッサーの新しい利用モデルを創出する場だ。そのため、既存のインテル顧客だけでなく、コンピュータの活用方法で新たな利用モデルを開発・探している人や新しい分野へ応用しようと考えている人へのコラボレーションの場とするのが目的だ。 (後略)
NECがUltrabook市場に参入! 最軽量モデルの重さは?【デジ通】 重量を当ててUltrabookをゲット! NEC LaVie Zの重さ当てクイズ【デジ通 本来なら海外メーカー以上にノートパソコンの小型化や薄型化が得意であるはずの国内メーカー。そのUltrabook市場への参入が遅れていた。下手な製品を出せないという考えがあったのかは不明だが、ようやく2012年の夏までにはほとんどの国内メーカーからUltrabook製品が登場するようだ。その1つとなるNECのLaVie Zだ。今回、新素材を採用したUltrabookで、重さが軽いことに相当の自信があるようで、正式発表前から重さ当てクイズを実施し、正解者から3名に実機がプレゼントされるというキャンペーンを行った。
(中略)
最軽量モデルの仕様は1グラム単位で微妙に変わってくる。正式発表直前にならないと、実際にカタログに記載する重量も決まらないため、答えは誰も把握していないはずだ。 ■じっくりと考えて応募しよう
(後略)
新生活特集 - オリンパスペン「E-PL1」で、新生活を撮りつくす 新生活を撮りつくす新オリンパスペン「E-PL1」に死角なし【新生活特集】 新生活がスタートすれば、新しい出会いや世界が待っています。その一つ一つの出来事が、人生であり、生きていく足跡となります。そうした思い出の1コマを残せる道具がカメラです。 一眼レフデジタルカメラのように大きくもなく、重くもない。バックに入れて手軽に持ち歩ける オリンパス マイクロ一眼「E-Pen」も、気がつけば早くも3世代目が登場しました。
(中略)
オリンパスペン「E-PL1」 いつも通る道で、ふと目をとめた小道の草花にマニュアルフォーカスでピントあわせることも、絞りを開けて背景をぼかすことも、E-PL1なら期待を裏切らずに応えてくれることでしょう。 また、E-PL$1には、新生活に役立つ嬉しい機能が追加されています。 その一つが、内蔵ストロボです。暗いシーンでもきれいに撮れるE-Penシリーズですが、E-PL1には本体にストロボが搭載されました。歓迎会や酒宴の席など、記念撮影や集合写真でもシャープできれいな写真をバッチリ残せるほか、照明がまったくない暗いシーンでもフラッシュで一瞬を写しきれるようになりました。
(後略)

要約の評価

要約の評価には、以下の評価指標を用いました。定量的な評価に加え、要約性能検証用データセット(産業系新聞)の要約については、筆者による定性的な評価を行いました。

ファインチューニング用データセットのテスト用データ(livedoorニュース)の要約 要約性能検証用データセット(産業系新聞)の要約
定量的な評価
定性的な評価 ×

(○:評価を実施)

定量的な評価

  • まず、モデルが生成した要約と、データセットの見出しの組について、以下の評価指標を算出します。
  • 次に、全要約文について算出した評価指標の平均値を算出し、そのモデルの評価としました。
ROUGE-L(precision)
  • ROUGE-L(precision)は、モデルが生成した要約と、人が作成した要約で「一致する単語列の長さの最大値」(Longest Common Subsequence = LCS)を評価する指標です。適合率(Precision)である通り、「モデルが生成した文字列が、どれだけ人が作成した要約の文字列と一致していたか」を表しているような値です。
ROUGE-L(precision) = \frac{LCS(summary, reference)}{summary}
summary:モデルが生成した要約
reference:人が作成した要約
  • ROUGE-L(precision)は、0~1の値を取り、値が大きい方が良いです。
BLEUスコア
  • BLEUスコアは、以下の指標を用いて、モデルが生成した要約と、人が作成した要約の類似度を計算する指標です。
BLEU = BP_{BLEU} * exp(\sum^N_{n = 1} w_nlogp_n)
BP_{BLEU} = min(1, exp(1- \frac{referenceの長さ}{summaryの長さ})
p_n = \frac{\sum_i summary_iとrefrence_iで一致したn-gram数}{\sum_i summaryi中の全n-gram数}
w_n = \frac{1}{N}
summary:モデルが生成した要約
reference:人が作成した要約
  • BP_{BLEU}は、モデルが生成した要約がデータセットの記事より短い場合のペナルティです。モデルが生成した要約の方が短い場合は、BP_{BLEU} は1を下回ります。
  • p_nは、n-gramで測った適合率(precision)のような値と考えることができ、p_nが高ければBLEUスコアも高くなります。
  • BLEUスコアは、0~1の値を取りますが、100倍して0~100の値で評価することが多いです。値が大きい方が良く、要約タスクでは、40を超えると性能が良いとされます。

定性的な評価

モデルが生成した要約と、データセットの記事の組について、以下に該当する件数(割合)を算出します。定性的な評価の項目は、要約の精度を損ねる要因であるため、値が小さいほど要約の精度が良いとします。

  • 誤った内容が生成されている割合
  • 主題以外の内容が生成されている割合
  • ファインチューニング用データの見出しに影響を受けた要約になっている割合
    • livedoorニュースの見出しに特徴的な、括弧・記号を多用していること

評価結果

定量的な評価

ROUGE-L(precision)による評価

ファインチューニングに用いたデータセット ファインチューニング用データ(livedoor ニュース)のテスト用データセット 要約性能検証用データ(産業系新聞)
①件数が少ない・多様性が小さい 34% 49%
②件数が少ない・多様性が大きい 58% 63%
③件数が多い・多様性が小さい 57% 46%
④件数が多い・多様性が大きい 59% 53%

BLEUスコアによる評価

ファインチューニングに用いたデータセット ファインチューニング用データ(livedoor ニュース)のテスト用データセット 要約性能検証用データ(産業系新聞)
①件数が少ない・多様性が小さい 20.9 33.6
②件数が少ない・多様性が大きい 40.9 49.4
③件数が多い・多様性が小さい 40.9 34.1
④件数が多い・多様性が大きい 41.9 39.2

ROUGE-L(precision)およびBLEUスコアによる評価結果のグラフ

ROUGE-L(precision)およびBLEUスコアによる評価結果の比較

  • ファインチューニング用データセットのテスト用データセット(livedoorニュース)の要約

    • データセットの多様性が大きく、件数が多い方が、評価指標が良いという結果になりました。
    1. 多様性が小さいデータ VS 多様性が大きいデータ
      • ① VS  (件数:1,000)
      • ③ VS  (件数:2,000)
    2. 件数が少ないデータ VS 件数が多いデータ
      • ① VS  (多様性:小さい)
      • ② VS  (多様性:大きい)
  • 要約性能検証用データセット(産業系新聞)の要約

    • データセットの多様性が大きく、 件数が少ない方が、評価指標が良いという結果になりました。
    1. 多様性が小さいデータ VS 多様性が大きいデータ
      • ① VS  (件数:1,000)
      • ③ VS  (件数:2,000)
    2. 件数が少ないデータ VS 件数が多いデータ
      •  VS ③ (多様性:小さい)
      •  VS ④ (多様性:大きい)

つまり、件数が多いデータセット(2,000件のデータセット、 データセット③および④)では、要約性能検証用データセット(産業系新聞)の要約で定量的な評価が悪化しています。

定性的な評価

要約性能検証用データセット(産業系新聞)の要約の、定性的な評価結果は以下の通りです。なお、先述の通り、定性的な評価の項目は、要約の精度を損ねる要因であるため、値が小さいほど要約の精度が良いとします。

定性的な評価において、データセットの件数について比較を行なったところ、「誤った内容が生成されている割合」、「主題以外の内容が生成されている割合」については、定量的な評価と同様に、定性的な評価も、データセットの多様性が大きく、件数が少ない方が、評価指標が良いという結果になりました。特に、「誤った内容が生成されている割合」は、多様性が大きいデータ(データセット②および④)で著しく減少していました。

「ファインチューニング用データの見出しに影響を受けた要約になっている割合」については、データセット①(件数が少ない・多様性が小さい)と、データセット④(件数が多い・多様性が大きい)の評価指標が良いという矛盾した結果になりました。このことから、基本的には、件数が少ない方が評価指標が良いものの、多様性が十分であれば、要約の精度が向上する可能性があると考察しました。

ファインチューニングに用いたデータセット 誤った内容が生成されている割合 主題以外の内容が生成されている割合 ファインチューニング用データの見出しに影響を受けた要約になっている割合
①件数が少ない・多様性が小さい 8% 16% 24%
②件数が少ない・多様性が大きい 2% 14% 26%
③件数が多い・多様性が小さい 14% 20% 36%
④件数が多い・多様性が大きい 4% 14% 24%

定性的な評価結果の比較

  • 誤った内容が生成されている割合

    1. 多様性が小さいデータ VS 多様性が大きいデータ
      • ① VS  (件数:1,000)
      • ③ VS  (件数:2,000)
    2. 件数が少ないデータ VS 件数が多いデータ
      •  VS ③ (多様性:小さい)
      •  VS ④ (多様性:大きい)
  • 主題以外の内容が生成されている割合

    1. 多様性が小さいデータ VS 多様性が大きいデータ
      • ① VS  (件数:1,000)
      • ③ VS  (件数:2,000)
    2. 件数が少ないデータ VS 件数が多いデータ
      •  VS ③ (多様性:小さい)
      •  VS ④ (多様性:大きい)
  • ファインチューニング用データの見出しに影響を受けた要約になっている割合(括弧・記号の多用)

    1. 多様性が小さいデータ VS 多様性が大きいデータ
      • ① VS  (件数:1,000)
      • ③ VS  (件数:2,000)
    2. 件数が少ないデータ VS 件数が多いデータ
      •  VS ③ (多様性:小さい)
      • ② VS  (多様性:大きい)

まとめ・考察

  • 本実験の結果から、ファインチューニングに用いたデータセット以外の文章も要約できるようなモデルを作成するための、ファインチューニング用データセットの条件としては以下の2点が挙げられます。
  1. データが多様であること

    • 定量的な評価・定性的な評価ともに、データの多様性が大きい方が、要約の性能が良いという結果になりました。

      • 定性的な評価では、データの多様性が大きい方が、以下の評価指標が低く、要約の性能が良いことが確認されました。特に、「誤った内容が生成されている割合」が顕著に低下していました。
        • 誤った内容が生成されている割合
        • 主題以外の内容が生成されている割合
        • ファインチューニング用データの見出しに影響を受けた要約になっている割合
    • 考察:

      • ファインチューニング用データセットの多様性が大きい場合、学習に使っていない文章を含む幅広い文章の要約が可能になるのではないか。その結果、誤った内容が生成されることや、主題以外の内容が生成が生成されること、ファインチューニング用データの見出しに影響を受けることを防げたのではないか。
  2. データの件数が多すぎないこと

    • 定量的な評価では、

      • 要約性能検証用データセット(産業系新聞)の要約結果については、ファインチューニング用データセットの件数が多い方が、件数が少ない場合よりも、要約の性能が悪いという結果になりました。
      • また、ファインチューニング用データセットの件数が多い場合、ファインチューニング用データ(livedoor ニュース)のテスト用データセットの要約結果の評価が良くとも、要約性能検証用データセット(産業系新聞)の要約結果が悪化していました。
    • 定性的な評価では、

      • データの件数が多いときに、「誤った内容が生成されている割合」「主題以外の内容が生成されている割合」が増加していることが確認でき、これらが原因で、定量的な評価の評価指標が悪化したと考えられます。
    • 考察:

      • データの件数が多すぎると、ファインチューニング用データセットのテストデータの要約はうまくいくようになるが、ファインチューニング用データセットを学習させすぎると、かえって他の文書を要約できなくなってしまうのではないか。
      • データの件数が多すぎることで、余計な知識を学習してしまっているのではないか。余計な知識を学習することで、誤った内容を生成したり、主題とは異なる内容を生成したりしてしまうのではないか。

参考文献

DAL Tech Blog

Discussion