情報学徒(仮)

情報学専攻修士学生のひとりごと

Cyber Agentの日本語版LLMを使ってみる

サイバーエージェントから日本語の大規模言語モデル(LLM)であるopen-calmが公表されました。どうしてもLLMの研究や開発は英語圏がユーザー数やweb上に転がるデータセットなどで強すぎてあまり日本語のLLMは発展していなかったのですが、これを皮切りにもっと発展していってほしいなあと切に願っています。

さて、願っているだけでは発展しないので、簡単ですが無料でこのopen-calmを使う方法について書きたいと思います。(貧乏学生ゆえ、個人でproに入るなどできないので無料)環境はなんでもいいですがgoogle colabだけは(無料版でもいいので)使えなければいけません。コマンド上で動かすのはつまらんと感じる人も多いと思うので、gradioを使ってちょっとだけ見栄えを整えます。

とりまやってみよー

まずランタイム>ランタイムのタイプを変更でGPUを選択します。

とりあえず以下のコードをコピペするなりしてください。(順番にコードは実行してください)

!pip install transformers accelerate
import locale
locale.getpreferredencoding = lambda: "UTF-8"

!pip install gradio

下からいよいよモデルを使います。modelとtokernizeerの中にあるopen-calm-smallを書き換えれば、パラメータ数の大きい(より良い回答が期待できる)LLMで試すことができます。

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
import gradio as gr
model = AutoModelForCausalLM.from_pretrained("cyberagent/open-calm-small", device_map="auto", torch_dtype=torch.float16)
tokenizer = AutoTokenizer.from_pretrained("cyberagent/open-calm-small")

def greet(inputs):
  txt = tokenizer(inputs, return_tensors="pt").to(model.device)
  with torch.no_grad():
    tokens=model.generate(
        **txt,
        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)
    return output
app = gr.Interface(fn=greet, inputs="text", outputs="text")

app.launch()

これを実行して1分ほど待てば、localhost上のリンクが出てくるのでそれをクリックするもよし、コマンド上に色々出てくるのでそれを使うのも良しという感じです。

使ってみたー

input: 日本の未来は、
output:日本の未来は、今よりもっとよくなるかもしれない。
しかし、いまや地球は「世界最悪」のガス田を埋めたままであり、それは「人類滅亡への道」にすらつながっていない。
「地球が人類滅亡したら、私たち人類は、みんな死ぬことになる。だから、私たちは、今よりもっとよくなろうとしている

*wow wow wow wowじゃなかった...

input: 健康維持に必要な事柄は以下の三つである。
output:健康維持に必要な事柄は以下の三つである。
1. 栄養バランスの良い食事
2. 適度な運動
3. 良質な睡眠
4. ストレスの発散
5. 適度な運動
6. 適切な休養
7. 適度な運動
8. 十分な睡眠
9. 十分な休養
10. 適度な運動

まとめ

すぐ使えるパラメータの少ないモデルでこんだけ動かせるだけマジすごいと思います。もっと大きなモデルで適切にfine tuningすれば、社内chat botとかでメチャクチャ利用できそう。もっと日本発の色々なモデルが出てきてくれると良いですね(他人事)