Stability AI が公開している「Japanese Stable LM Instruct Gamma 7B」を使ってテキストから情報を抽出してもらう

huggingface.co

はじめに

最近いろいろと言語モデルをさわっています。

いずれは自前データで学習なんかできたら良いなと思いますが、家庭用PCでそんなことできるのでしょうか?

時間あるときに勉強してみようと思っています。

ここから本題です。

前回はモデルがどれほど知識を持っているかを確認してみました。
touch-sp.hatenablog.com
今回は読解力があるかを確認してみたいと思います。

Stability AI が公開している「Japanese Stable LM Instruct Gamma 7B」というモデルを使わせて頂きました。

結果

課題

提示されたテキストを読んで主人公の名前を教えてください。

テキスト:

「たたかう男」はサラリーマンである中島の日常を描いた漫画であり、多くの男性読者に笑いと勇気を与えている。

回答

主人公の名前は中島です。

ちゃんと返してくれました。

Pythonスクリプト

from transformers import AutoTokenizer, AutoModelForCausalLM

user_query = {
    "instruction": "提示されたテキストを読んで主人公の名前を教えてください。",
    "input": "「たたかう男」はサラリーマンである中島の日常を描いた漫画であり、多くの男性読者に笑いと勇気を与えている。"
}

model = AutoModelForCausalLM.from_pretrained(
    # from https://huggingface.co/stabilityai/japanese-stablelm-instruct-gamma-7b
    "japanese-stablelm-instruct-gamma-7b",
    torch_dtype="auto",
    device_map="auto",
    trust_remote_code=True
)
print(f"dtype: {model.dtype}")
print(f"device: {model.device}")

tokenizer = AutoTokenizer.from_pretrained("japanese-stablelm-instruct-gamma-7b")

prompt = (
    "以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。"
    "\n\n### 指示: \n{instruction}"
    "\n\n### 入力: \n{input}"
    "\n\n### 応答: \n"
).format(**user_query)

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

tokens = model.generate(
    input_ids.to(device=model.device),
    max_new_tokens=256,
    temperature=0.7,
    top_p=0.98,
    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.10

Python環境構築

CUDA 11.8を使った場合です。

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





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