見出し画像

小型日本語LLMでキャッチフレーズ

日本語版 Gemma 2 2Bを使用

以下がキャッチフレーズ生成に使用したコードです。
LLMには日本語版 Gemma 2 2Bを利用しています。
次世代スマートフォン登場!12000万画素カメラでの撮影を驚異的な精度で補正。80億パラメータのLLMがデバイス内で稼働し、撮影や操作体験をインテリジェントにサポート。」という(架空の)商品説明文章からキャッチフレーズを作っています。

#サンプリング(do_sample=True)を使用

do_sample=True は、生成モデルにおいて「サンプリング(ランダム性)」を有効にする設定です。これにより、モデルは確率分布に基づいて次のトークンをランダムに選択します。通常、より確率の高いトークンが選ばれますが、確率の低いトークンも一定の確率で選択されるため、生成結果にバリエーションが生まれます。

# Hugging Faceからモデルをダウンロード
!huggingface-cli login  # Hugging Faceのアクセストークンでログイン
# Transformersライブラリをインストール
# Hugging Faceのモデルやパイプラインを利用するためのライブラリ
!pip install transformers

# Transformersライブラリからパイプラインをインポート
from transformers import pipeline

# 使用するモデルの指定
model_name = "google/gemma-2-2b-jpn-it"  # 日本語用モデルを指定

# テキスト生成用のパイプラインを定義
# generator = pipeline("text-generation", model=model_name)  # CPUを使用する設定(コメントアウト)
generator = pipeline("text-generation", model=model_name, device=0)  # GPUを使用して高速化
# 商品説明文
product_description = "次世代スマートフォン登場!1億2000万画素カメラでの撮影を驚異的な精度で補正。80億パラメータのLLMがデバイス内で稼働し、撮影や操作体験をインテリジェントにサポート。"

# テキスト生成
# プロンプトの内容は、日本語で短くインパクトのあるキャッチフレーズを求めています。
response = generator(
    f"次世代スマートフォンのキャッチフレーズを作成してください。一文で完結させ、短く、魅力的なフレーズにしてください。 {product_description}",
    max_new_tokens=35,       # キャッチフレーズ用に生成トークン数を調整(日本語に配慮してやや多め)
    num_return_sequences=3,  # 複数の候補を生成して選択肢を増やす
    do_sample=True,          # ランダム性を有効にする
    temperature=0.6,         # ランダム性を抑えつつ適度なバリエーションを確保
    top_p=0.85,              # トップ確率フィルタリングで生成の質を向上
    repetition_penalty=1.1,  # 繰り返し抑制を軽く設定(日本語の自然なリズムに配慮)
)

# 各広告コピーをループで表示
# 生成されたキャッチフレーズを順に表示
for idx, ad in enumerate(response):  
    print(f"Ad {idx + 1}: {ad['generated_text']}")

・ChatGPTの評価

上記コードに対するChatGPT Plus4oの評価です。


このコードの設定は、日本語LLMを使用する場合に十分適しています。以下にポイントを整理します:

設定の評価

  1. max_new_tokens=35
    日本語は英語に比べて1単語が複数のトークンに分割されることが多いため、少し長めに設定するのは妥当です。ただし、キャッチフレーズが長くなるのを防ぐために、結果を手動で確認して調整することをお勧めします。

  2. temperature=0.6
    日本語のキャッチコピーにおいては、あまり突飛な表現が望ましくない場合が多いので、ランダム性を抑えたこの値は適切です。

  3. top_p=0.85
    トップ確率フィルタリングを少し厳しくしており、生成の質を向上させる設定です。日本語での自然な表現を優先するには良いアプローチです。

  4. repetition_penalty=1.1
    繰り返し抑制が少し軽めになっています。キャッチフレーズでは適度なリズムが必要な場合も多いので、1.1 は日本語特有のリズム感を損なわずに効果的です。

  5. num_return_sequences=3
    3つの候補を生成することで、最適な選択肢を選べる可能性を広げています。


・キャッチフレーズ例

  • 未来を握る、圧倒的な表現力。
    世界を変える、あなたの可能性を。

  • 未来を握る、革新のデバイス。
    あなたの世界を、より深く。

  • 未来の撮影、今すぐ体験。
    世界を変える、新しい可能性。

#Beam Searchを使った場合

Beam Search(ビームサーチ)は、テキスト生成や翻訳タスクなどで使用される 探索アルゴリズム の一種です。
モデルが次の単語(トークン)を予測する際に、複数の候補を同時に追跡しながら、最も高い確率を持つ出力を効率的に探索します。
多様性のある結果を得るサンプリング(do_sample=True)と比べると、Beam Searchは最も確率の高い結果を見つける手法です。

roduct_description = "次世代スマートフォン登場!1億2000万画素カメラでの撮影を驚異的な精度で補正。80億パラメータのLLMがデバイス内で稼働し、撮影や操作体験をインテリジェントにサポート。"

# テキスト生成
# プロンプトの内容は、日本語で短くインパクトのあるキャッチフレーズを求めています。
response = generator(
    f"次世代スマートフォンのキャッチフレーズを作成してください。一文で完結させ、短く、魅力的なフレーズにしてください。 {product_description}",
    max_new_tokens=35,       # キャッチフレーズ用に生成トークン数を調整(日本語に配慮してやや多め)
    num_return_sequences=3,  # 複数の候補を生成して選択肢を増やす
    num_beams=6,             # Beam Search を有効化
    temperature=0.9,         # ランダム性を抑えつつ適度なバリエーションを確保
    top_p=0.85,              # トップ確率フィルタリングで生成の質を向上
    repetition_penalty=1.1,  # 繰り返し抑制を軽く設定(日本語の自然なリズムに配慮)
    length_penalty=0.8,      # 短い文章を優先。広告コピーの生成など、短く簡潔な文章が必要な場合は、length_penalty=0.8 を指定するのが最適です。
)
'''
↑num_return_sequences ≤ num_beams である必要があります。
3つの枝を探索し、その中から3つの最良の結果を返します。
'''

# 各広告コピーをループで表示
for idx, ad in enumerate(response):  # enumerate でインデックスと内容を取得
    print(f"Ad {idx + 1}: {ad['generated_text']}")

Beam Searchは高精度な文章生成や定型文生成が得意なので、キャッチフレーズの生成には、創造的な文章生成やバリエーションを出す特性を持つサンプリングの方が向いていそうです。

・ChatGPTの評価

設定の評価

  1. Beam Search (num_beams=6)
    Beam Searchは複数の候補(ビーム)を探索し、最良の結果を選択するアルゴリズムです。
    num_beams=6 によって探索の幅を広げ、バリエーション豊かな生成を目指しているのは適切です。

  2. num_return_sequences=3
    num_beams が6であるため、最大6個の候補から上位3つが選ばれます。この設定は適切で、生成の品質を確保しつつ選択肢を絞っています。

  3. temperature=0.9
    ランダム性をやや高めており、Beam Searchと組み合わせることで多様性を追加しています。ただし、過度なランダム性はBeam Searchのメリットを薄める可能性もあるため、適切な範囲(0.8–0.9)で調整されています。

  4. length_penalty=0.8
    Beam Searchではデフォルトだと長い文が選ばれる傾向がありますが、この設定によって短く簡潔なキャッチコピーを優先する工夫がされています。

  5. top_p=0.85
    トップ確率フィルタリングを導入することで、生成結果の自然性と多様性のバランスが取られています。

  6. repetition_penalty=1.1
    繰り返しを軽減するための設定で、日本語のリズム感を損なわない範囲で効果的です。

・キャッチフレーズ例

Beam Search は、モデルが最も良いと判断する結果を選びやすいため、候補に多様性がなくなることがあります。
このため、似たような結果が並びました。


  • 未来を握る、革新のスマートフォン。
    あなたの世界を、より鮮やかに。

  • 未来を握る、革新のデバイス。
    世界を映し出す、圧倒的な可能性。

  • 未来を握る、革新のデバイス。
    世界を映し出す、新たな可能性。



いいなと思ったら応援しよう!