はじめに
最近いろいろと言語モデルをさわっています。いずれは自前データで学習なんかできたら良いなと思いますが、家庭用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