東工大と産総研の研究チームが公開している大規模言語モデル「Swallow」にことわざの意味を聞いてみた

huggingface.co

はじめに

パラメータ数が70億パラメータ(7B)、130億パラメータ(13B)、700億パラメータ(70B)の3モデルがあるようです。

さらにそれぞれにbaseモデルとinstructモデルが存在します。

instructモデルはチャットのように質問に対して答えを返すモデルです。

今回は「Swallow-7b-instruct-hf」と「Swallow-13b-instruct-hf」を使ってみました。

結果

実行するたびに異なる答えが返ってきます。
今回はそれぞれのモデルにことわざの意味を聞いてみました。

「猿も木から落ちる」

Swallow-7b-instruct-hf

dtype: torch.bfloat16
device: cuda:0
「猿も木から落ちる」ということわざは、どんなに優れた人でも、時には失敗することがあるということを教えてくれます。これは、人間や動物にも当てはまることわざです。

Swallow-13b-instruct-hf

dtype: torch.bfloat16
device: cuda:0
どんなに上手い人でも、時には失敗することがある。

「一石二鳥」

Swallow-7b-instruct-hf

一石二鳥とは、一度の労力で二つのことを同時に達成することです。

Swallow-13b-instruct-hf

一つの行動で、二つの良い結果を得ること。

Pythonスクリプト

大規模言語モデルってこんなに簡単に使えるんですね。

from transformers import AutoTokenizer, AutoModelForCausalLM

user_query = {
    "instruction": "与えられたことわざの意味を小学生でも分かるように教えてください。",
    "input": "一石二鳥"
}

# from https://huggingface.co/tokyotech-llm/Swallow-7b-instruct-hf
model_name = "Swallow-7b-instruct-hf"

tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype="auto",
    device_map="auto"
)
print(f"dtype: {model.dtype}")
print(f"device: {model.device}")

prompt = (
    "以下に、あるタスクを説明する指示があり、それに付随する入力が更なる文脈を提供しています。"
    "リクエストを適切に完了するための回答を記述してください。\n\n"
    "### 指示:\n{instruction}\n\n"
    "### 入力:\n{input}\n\n"
    "### 応答:\n"
).format(**user_query)

input_ids = tokenizer.encode(
    prompt,
    add_special_tokens=False,
    return_tensors="pt"
)

tokens = model.generate(
    input_ids.to(device=model.device),
    max_new_tokens=256,
    temperature=0.7,
    top_p=0.99,
    do_sample=True,
)

print(tokenizer.decode(tokens[0][input_ids.shape[1]:], skip_special_tokens=True).strip())

PC環境

Windows 11
CUDA 11.8
Python 3.11

Python環境構築

CUDA 11.8を使った場合です。

pip install torch==2.1.2+cu118 --index-url https://download.pytorch.org/whl/cu118
pip install transformers accelerate sentencepiece protobuf





このエントリーをはてなブックマークに追加