上記urlのgoogle colab での写経です。
以下の実行結果のように「日本の首都は?」に対し、 意味不明な文となっています。
素?の日本語LLMであることが原因か、 それとも、私の使用方法が悪いのか?
目次
使用する日本語大規模モデルデータ
2023/7時点で、以下のモデルがあるようですが、 今回、rinna/japanese-gpt-neox-3.6b と cyberagent/open-calm-7b を使用します.
モデルデータ | 内容 |
---|---|
rinna/japanese-gpt-neox-3.6b | 36億パラメータ.汎用GPTモデル |
rinna/japanese-gpt-neox-3.6b-instruction-sft-v2 | 対話GPTモデルfine-tuning済 |
rinna/japanese-gpt-neox-3.6b-instruction-ppo | 強化済み対話GPTモデル |
cyberagent/open-calm-1b | 10億パラメータ.汎用GPTモデル |
cyberagent/open-calm-3b | 30億パラメータ.汎用GPTモデル |
cyberagent/open-calm-7b | 70億パラメータ.汎用GPTモデル |
pip install
!pip install transformers !pip install sentencepiece
Rinna GPT
import torch from transformers import AutoTokenizer from transformers import AutoModelForCausalLM # 自然言語の入力textを深層学習の入力dataに変換するPG # -> rinna/japanese-gpt-neox-3.6b or rinna/japanese-gpt2-medium tokenizer = AutoTokenizer.from_pretrained("rinna/japanese-gpt-neox-3.6b", use_fast=False) # 以下で True とする理由不明 tokenizer.do_lower_case = True # model指定 # -> rinna/japanese-gpt-neox-3.6b or rinna/japanese-gpt2-medium model = AutoModelForCausalLM.from_pretrained("rinna/japanese-gpt-neox-3.6b") if torch.cuda.is_available(): model = model.to("cuda") text = "日本の首都は?" # 入力文から、token idに変換 token_ids = tokenizer.encode(text, add_special_tokens=False, return_tensors="pt") # no_grad()により、メモリ消費を抑えられるらしい with torch.no_grad(): # generate()による文書生成 output_ids = model.generate( token_ids.to(model.device), max_new_tokens=100, min_new_tokens=100, do_sample=True, temperature=0.8, pad_token_id=tokenizer.pad_token_id, bos_token_id=tokenizer.bos_token_id, eos_token_id=tokenizer.eos_token_id ) output = tokenizer.decode(output_ids.tolist()[0]) print(output)
実行結果
日本の首都は? ロンドンなど諸外国の所在地は?日本人が一番住みたい都市は?... などなど、さまざまな質問で、答える人の年代や興味の度合い、 知識の程度によって、答え方が変わってくるのです。 これは、子どもが興味をもつ話題なら、年齢にかかわらず、 だれにでも興味を持たせることができるのと同じです。 つまり、どんな人でも答えやすい質問というのは、誰でも答えやすいということです。 それを意識して質問し
OpenCALM
import torch from transformers import AutoTokenizer from transformers import AutoModelForCausalLM # 自然言語の入力textを深層学習の入力dataに変換するPG # -> cyberagent/open-calm-7b or cyberagent/open-calm-1b model = AutoModelForCausalLM.from_pretrained("cyberagent/open-calm-7b") tokenizer = AutoTokenizer.from_pretrained("cyberagent/open-calm-7b") inputs = tokenizer("日本の首都は?", return_tensors="pt").to(model.device) # no_grad()により、メモリ消費を抑えられるらしい with torch.no_grad(): # generate()による文書生成 tokens = model.generate( **inputs, max_new_tokens=64, do_sample=True, temperature=0.7, top_p=0.9, repetition_penalty=1.05, pad_token_id=tokenizer.pad_token_id, ) output = tokenizer.decode(tokens[0], skip_special_tokens=True) print(output)
実行結果
日本の首都は?と聞かれたの部隊員が、ある者は「東京」と答える。 すると他部隊員は「江戸!」と答え、 そこで初めて東京都という地名を知ることになるのです。 日本国憲法の発布した日はいつなのか。 昭和21年11月3日か昭和22年5月3日のどちらかで間違いはないのか