📚

LLaMA 3.1モデルを使ったAIチャットボットの作成:初心者向けガイド

2024/07/29に公開

はじめに

この記事では、Meta社が開発した最新の大規模言語モデル「LLaMA 3.1」を使って、AIチャットボットを作成する方法を解説します。LLaMA 3.1は多言語対応の強力なモデルで、様々なタスクに適用できます。今回は、海賊風に話すチャットボットを例に、モデルの使用方法を学んでいきましょう。

1. 環境設定

まずは必要なライブラリをインストールし、環境を整えます。

# transformersライブラリを最新バージョンにアップグレード
!pip install --upgrade transformers

# 必要なライブラリをインポート
import transformers
import torch

# CUDA関連の設定(メモリ効率化のため)
torch.backends.cuda.enable_mem_efficient_sdp(False)
torch.backends.cuda.enable_flash_sdp(False)

このコードブロックでは、以下の作業を行っています:

  1. transformersライブラリを最新版にアップグレード
  2. 必要なライブラリ(transformerstorch)をインポート
  3. CUDAの設定を行い、メモリ使用を最適化

2. モデルとトークナイザーの準備

次に、LLaMA 3.1モデルとそのトークナイザーをロードします。

# 必要なクラスをインポート
from transformers import AutoTokenizer, AutoModelForCausalLM

# モデルのパスを指定
model_id = "/kaggle/input/llama-3.1/transformers/70b-instruct/1"

# トークナイザーをロード
tokenizer = AutoTokenizer.from_pretrained(model_id)

# モデルをロード(CPU offloadingを使用)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,  # bfloat16形式で計算を行い、精度と速度のバランスを取る
    device_map="auto",  # 利用可能なデバイスに自動的にモデルを配置
    offload_folder="offload",  # オフロード用のフォルダを指定
    offload_state_dict=True,  # state_dictをオフロード
    low_cpu_mem_usage=True,  # CPU消費メモリを抑える
)

このセクションでは:

  1. モデルとトークナイザーをロードするためのクラスをインポート
  2. モデルのパスを指定(この例ではKaggle上のパスを使用)
  3. トークナイザーをロード
  4. モデルをロード(メモリ使用を最適化するオプションを使用)

3. テキスト生成パイプラインの作成

モデルとトークナイザーを使って、テキスト生成のパイプラインを作成します。

# テキスト生成パイプラインを作成
pipeline = transformers.pipeline(
    "text-generation",  # タスクを指定(ここではテキスト生成)
    model=model,  # 使用するモデル
    tokenizer=tokenizer,  # 使用するトークナイザー
    device_map="auto",  # デバイスの自動割り当て
)

このパイプラインは、入力されたプロンプトに基づいてテキストを生成するために使用されます。

4. チャットメッセージの準備

AIに与える指示と、ユーザーからの入力を準備します。

# チャットメッセージを準備
messages = [
    {"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"},
    {"role": "user", "content": "Who are you?"},
]

# メッセージをトークナイザーのテンプレートに適用
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)

ここでは:

  1. システムメッセージ(AIの役割指示)とユーザーメッセージを準備
  2. これらのメッセージをトークナイザーのチャットテンプレートに適用して、モデルへの入力形式に変換

5. テキスト生成の実行

準備したプロンプトを使って、テキストを生成します。

# テキスト生成を実行
outputs = pipeline(
    prompt,
    max_new_tokens=40,  # 生成する最大トークン数
    do_sample=True,  # サンプリングを有効にして多様な出力を得る
    temperature=0.7,  # 生成の多様性を調整(高いほど多様、低いほど決定的)
    top_p=0.95,  # 累積確率に基づくサンプリングの閾値
)

# 生成されたテキストを表示
print(outputs[0]["generated_text"])

このコードでは:

  1. 準備したプロンプトを使ってテキストを生成
  2. 生成パラメータ(最大トークン数、温度、top_p値など)を設定
  3. 生成されたテキストを表示

まとめ

以上が、LLaMA 3.1モデルを使ったAIチャットボットの基本的な作成方法です。このコードを実行すると、海賊風に話すAIチャットボットが「Who are you?」という質問に答えるでしょう。

このサンプルコードを基に、システムメッセージやユーザー入力を変更することで、様々な性格や知識を持つチャットボットを作成できます。また、生成パラメータを調整することで、出力の多様性や一貫性を制御することができます。

LLaMA 3.1は非常に強力なモデルですが、適切に使用するには練習が必要です。このコードを出発点として、さまざまな実験を行い、AIモデルの挙動や特性について理解を深めていってください。

Kaggleノートブック

https://www.kaggle.com/code/makimakiai/jp-llama-3-1-70b-instruct-base-chat-template

参考サイト

https://www.kaggle.com/code/samyakkhetan/llama-3-1-70b-instruct-base-chat-template

Discussion