東北大学NLPグループの言語モデルをとりあえず動かす

東北大NLPグループからも、日本語言語モデルが新たに公開されていました。
既存のモデルのアップデートです。

今回新たに公開されたのは次の4つのモデルです。

  • cl-tohoku/bert-base-japanese-v3
  • cl-tohoku/bert-base-japanese-char-v3
  • cl-tohoku/bert-large-japanese-v2
  • cl-tohoku/bert-large-japanese-char-v2

charがついているのは文字ごとのトークナイズで、ついていないものはUnidic 2.1.2ベースのトークナイズ、かな。

しかし、CyberAgentのモデルと同じコードだと こんな感じになってしまいました。

動かすためにはfugashiとunidic_liteが必要なのでpip installしておく必要があります。unidic_liteはcharがついたモデルでは不要な気がするけど試してません。

GPUメモリは1.4GB程度の消費なので、CUDAが動けばだいたいの環境で動きそう。

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from colorama import Fore, Back, Style, init
# need fugashi, unidic_lite
init(autoreset=True)

# model_name = "cl-tohoku/bert-base-japanese-v3"
# model_name = "cl-tohoku/bert-base-japanese-char-v3"
model_name = "cl-tohoku/bert-large-japanese-char-v2"
# model_name = "cl-tohoku/bert-large-japanese-v2"

print ("model:" + model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, is_decoder=True).to("cuda")
tokenizer = AutoTokenizer.from_pretrained(model_name)

# prompt = "AIによって私達の暮らしは、"
prompt = "アメリカの首都はワシントン。日本の首都は"
# prompt = "吾輩は猫で"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
    tokens = model.generate(
        **inputs,
        max_new_tokens=64,
        do_sample=True,
        temperature=0.7,
        pad_token_id=tokenizer.pad_token_id,
    )
    
output = tokenizer.decode(tokens[0], skip_special_tokens=True).replace(" ", "")
print(f"{Fore.YELLOW}{prompt}{Fore.WHITE}{output[len(prompt):]}")