日本語LLM

こんにちは、未来環境ラボの中口です。みなさんもうChatGPTは使っていますか?ChatGPTと会話するだけでも楽しいですが、Webページの要約や論文の検索、Pythonコードの実行など、次々と新しい機能がリリースされてどんどん進化しています。今回はそんなChatGPTに近い性能を持ち、かつ無償で利用できるLLM(Large Language Model)を紹介します。

weblab-10b-instruction-sft

東京大学松尾研究室がリリースした言語モデルです。パラメータサイズは100億、日英2ヶ国語に対応しています。無料で利用できますが、商用利用はできません。次のようなPythonコード(Google Colabで動作確認済み。2023/9/3)で利用できます。

!pip install transformers auto-gptq
import torch
from transformers import AutoTokenizer
from auto_gptq import AutoGPTQForCausalLM
model_name = "dahara1/weblab-10b-instruction-sft-GPTQ"
model_basename = "gptq_model-4bit-128g"

tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoGPTQForCausalLM.from_quantized(
  model_name,
  model_basename=model_basename,
  use_safetensors=True,
  device="cuda:0")

text = "大規模言語モデルについて説明してください。"
text = f'以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。\n\n### 指示:\n{text}\n\n### 応答:'
token_ids = tokenizer.encode(text, add_special_tokens=False, return_tensors="pt")

with torch.no_grad():
  output_ids = model.generate(
    input_ids=token_ids.to(model.device),
    max_new_tokens=100,
    do_sample=True,
    temperature=0.7,
    top_p=0.95
    )

output = tokenizer.decode(output_ids.tolist()[0])
print(output)

※GoogleColab無料版で動かすために、サイズを削減したモデルを使用しています。参考記事

上記のコードをGoogle Colabに入力して実行すると、以下のような結果が返ってきます。

大規模言語モデルは、大量のテキストから意味を抽出するために使用される機械学習アルゴリズムの一種です。大規模言語モデルは、大量のテキストデータセットを処理し、テキストの意味を抽出するために使用されます。

textの内容を変更すると、結果も変わります。試しに、以下のような内容に変更して実行してみましょう。

// text = "大規模言語モデルについて説明してください。"
text = "京都の夏の暑さ対策には何が良いですか?"
text = f'以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。\n\n### 指示:\n{text}\n\n### 応答:'

元の行をコメントアウトし、京都の暑さ対策を尋ねる文章にしてみました。結果は以下の通り。

京都の夏はとても暑くなることがありますが、冷たい飲み物や冷たい食べ物を食べたり、氷を入れたりするなど、暑さを軽減する方法がいくつかあります。また、通気性の良い服を着たり、扇子を使ったり、椅子に座ったりして、周囲の空気を冷やすこともできます。 <|endoftext|>

非常に自然な文章で、内容もそれほどおかしくないものが(椅子に座ったりはよく分かりませんが)返ってきています。

ELYZA-japanese-Llama-2-7b-instruct

日本のAIベンチャーの一つ、ELYZA, Inc.リリースしたモデルです。パラメータサイズは70億、英語を中心に学習したLlama2をベースに日本語の学習を追加したモデルです。こちらは商用利用可能です。このモデルにも、京都の暑さ対策を聞いてみましょう(GoogleColabで動作確認済みです)。

!pip install transformers auto-gptq 
model_name = "dahara1/ELYZA-japanese-Llama-2-7b-fast-instruct-GPTQ"
model_basename = "gptq_model-4bit-128g"

tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoGPTQForCausalLM.from_quantized(
  model_name,
  model_basename=model_basename,
  use_safetensors=True,
  disable_exllama=False,
  inject_fused_attention=False,
  device="cuda:0")

B_INST, E_INST = "[INST]", "[/INST]"
B_SYS, E_SYS = "<<SYS>>\n", "\n<</SYS>>\n\n"
DEFAULT_SYSTEM_PROMPT = "あなたは誠実で優秀な日本人のアシスタントです。"
text = "京都の夏の暑さ対策には何が良いですか?"
prompt = "{bos_token}{b_inst} {system}{prompt} {e_inst} ".format(
  bos_token=tokenizer.bos_token,
  b_inst=B_INST,
  system=f"{B_SYS}{DEFAULT_SYSTEM_PROMPT}{E_SYS}",
  prompt=text,
  e_inst=E_INST,
  )
tokens = tokenizer(prompt, return_tensors="pt").to("cuda:0").input_ids
output = model.generate(
  input_ids=tokens,
  max_new_tokens=256,
  temperature=0.7,
  do_sample=True,
  top_p=0.95,
  pad_token_id=tokenizer.pad_token_id,
  eos_token_id=tokenizer.eos_token_id)
print(tokenizer.decode(output[0]))

※こちらもGoogleColab無料版で動かすために、サイズを削減したモデルを使用しています。参考

結果は以下のようになりました。

京都の夏の暑さ対策には、湿度を下げることが大事です。
特に湿度の高い日には、加湿器を使用したり、湿度を下げるために、扇風機を活用したりするのも良いでしょう。
また、冷たい飲み物をこまめに摂取し、入浴を頻繁に行いましょう。
京都の夏の暑さ対策は、適度な運動や汗をかくことも大切です。
適度な運動は、代謝を良くし、汗をかくことで、体の冷却を促してくれます。

加湿器の使用や運動を促してくるところは違和感はありますが、複数回実行すると違う結果が返ってくるので、色々と試してみてください。

他にも多くのモデルが公開されていて、日本語での回答の精度が高いものも存在します。商用利用可能なモデルも多く存在し、それを元に追加学習を行なって精度を上げたり、プログラムのコードに特化したりと、様々なバリエーションも作られています。GoogleColabで試せるモデルも増えており、今後ますます選択肢が増えそうです。

comments

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*