AI・機械学習
中級

Diverse Beam Search(ダイバースビームサーチ)

Beam Searchを拡張し複数のビームグループ間に「差異ペナルティ」を導入して多様な候補を並列生成するデコーディング手法。翻訳・要約・質問生成など複数の高品質候補が必要なタスクで使用される。

0 回閲覧
0 いいね
2026/6/7 更新
関連タグ
diverse-beam-search
beam-search
decoding-strategy
text-generation

Diverse Beam Searchとは

Diverse Beam Search(DBS、Vijayakumar et al. 2018)は、通常のBeam Searchが生成する複数候補が「ほぼ同じ文章」になってしまう問題を解決したデコーディング手法です。

Beam Searchの問題

通常のBeam Search(num_beams=5)は5つの候補を同時追跡しますが、実際には似たような文章が得られます:

Beam Search出力例(翻訳):
1. "The cat sat on the mat."
2. "The cat was sitting on the mat."
3. "The cat sat on the mat quickly."
4. "A cat sat on the mat."
5. "The cat sat upon the mat."
→ 5候補全て類似(sat/sitting/uponのみ違い)

Diverse Beam Searchの仕組み

グループ分割と差異ペナルティ

Diverse Beam SearchはG個のグループにビームを分割し、各グループが互いに異なる候補を生成するよう促します:

# 概念的な実装
num_beams = 12
num_groups = 4  # 3ビームずつ4グループ
beams_per_group = num_beams // num_groups  # 3

for group_idx in range(num_groups):
    for t in range(max_length):
        # 標準スコア + 差異ペナルティ
        score = model_score(x)
        
        # 前グループの出力との類似度をペナルティ
        if group_idx > 0:
            prev_outputs = [group_beams[g] for g in range(group_idx)]
            diversity_term = hamming_distance_based_penalty(x, prev_outputs)
            score -= lambda_param * diversity_term
        
        select_top_beams(score, k=beams_per_group)

差異ペナルティの効果

Diverse Beam Search出力例(翻訳):
Group 1: "The cat sat on the mat."
Group 1: "The cat is sitting on the mat."
Group 1: "A cat sat on the mat."
Group 2: "On the mat, a cat was sitting."
Group 2: "Sitting on the mat was the cat."
Group 2: "A mat was under the sitting cat."
Group 3: "The feline rested upon the rug."
...
→ グループ間で構造・語彙が多様化

Hugging Faceでの使用

from transformers import AutoModelForSeq2SeqLM, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("facebook/bart-large-cnn")
model = AutoModelForSeq2SeqLM.from_pretrained("facebook/bart-large-cnn")

inputs = tokenizer(article_text, return_tensors="pt")

# Diverse Beam Search
outputs = model.generate(
    **inputs,
    num_beams=12,          # 総ビーム数
    num_beam_groups=4,     # グループ数(4グループ×3ビーム)
    diversity_penalty=1.0, # 差異ペナルティの強さ
    num_return_sequences=4, # 返す候補数(グループ数以下)
    max_new_tokens=200,
)

for i, output in enumerate(outputs):
    print(f"候補{i+1}: {tokenizer.decode(output)}")

主なパラメータ

パラメータ説明目安
num_beam_groupsグループ数2〜8
diversity_penalty差異ペナルティ強度0.5〜2.0
num_beams総ビーム数groups × 2〜4
num_return_sequences返す候補数groups以下

活用シーン

  • 機械翻訳: 複数の正確な翻訳候補を提示
  • テキスト要約: 異なる観点からの要約を生成
  • 質問生成(QG): 同じ文章から多様な質問を作成
  • 医療診断支援: 複数の鑑別診断候補を並列提示
  • コード生成: 複数の実装アプローチを提案

まとめ

Diverse Beam Searchは「複数の高品質候補が必要なタスク」で標準Beam Searchの明確な上位互換です。Hugging Face Transformersに標準実装されており、翻訳・要約・QA系タスクで広く活用されています。2025年時点でもLLMを活用したコンテンツ生成パイプラインで実用的な選択肢です。

この記事について
カテゴリーAI・機械学習
難易度中級
作成日2026/6/7