ACES エンジニアブログ

ACESのエンジニアブログです。

CyberAgent社の日本語LLM OpenCALMの対話モデル用途のfinetune検証

こんにちは、ACESでアルゴリズムエンジニアとして働いている檜口です。最近はChatGPTを始めとする言語モデルの研究開発やプロダクト改善に取り組んでいます。

昨年末のChatGPTのリリース以降、大規模言語モデル(large language model, LLM)の社会実装が急速に進んできています。弊社でも商談解析AIツールACES MeetにLLMを組み込むなど、LLMの活用を広げています。こちらに関してはLLMを活用したAIまとめ機能リリースの裏側について過去記事を書いてありますのでご興味ある方はぜひご覧ください。

tech.acesinc.co.jp

LLMはOpenAIのChatGPTが最も有名ですが、最近はオープンソースでモデルを開発する流れも活発になっています。特に、英語で学習したオープンソースモデルはMeta社のリリースしたLlamaを始めとして非常に強力なものがリリースされています。オープンソースモデルは性能的にはOpenAIのモデルにまだまだ及ばないものの、データをセキュアに扱えたり、個人のPCでも動いてAPI利用料がかからないなど、ビジネス面からは非常に魅力的な存在です。

さて、英語でのオープンソースLLMは活発に開発されている一方で、日本語LLMはなかなか出揃っていないというのが記事執筆時点での状況です。純粋な日本語コーパスで学習されたモデルはABEJA社からリリースされた2.7Bのモデルが最大でした1。また、学習コーパスオープンソースの多言語データセットの日本語サブセットを抜き出したもので学習したものが多く、性能的には英語と比べるとまだまだという状況です2

huggingface.co

ところが、今週になってCyberAgent社から純粋な日本語コーパスで学習した最大のパラメータサイズを持つLLMモデルがサプライズ的に発表されました。また、ほぼ時を同じくして日本語LLMに取り組んでいたrinna社からも3.6BというCyberAgentモデルを除けば最大級の日本語LLMを発表しており、日本語モデルのオープンソース化が加速していてデベロッパー目線では嬉しい限りです。

こんな背景を受けて本ブログ記事では今回CyberAgent社から公開された最大の日本語LLMである open-calm-7b のLoRA finetuneを試してみました。今までの日本語モデルからは考えられないほど回答の質が良いので是非結果を見ていただきたいと思います。

モデル情報

今回リリースされたモデルの情報はhuggingfaceの各ページからアクセスできます。モデルサイズはsmall〜7Bまで6種類のモデルがリリースされています。

huggingface.co

今回公開されたモデルはtokenizerも日本語で学習されているため、日本語の埋め込み効率が非常に良くなっている点が特筆すべき点だと思います。これによって同じ文章の長さであっても、(今回リリースされたモデルとアーキテクチャが同じ)GPT-NeoXと比べてトークン数が少なく、長いコンテキストの入出力を扱うことができます。なお、コンテキスト長はGPT-NeoXと同様の2048です。

github.com

検証条件

学習データには kunishou/databricks-dolly-15k-ja を使いました。こちらは商用利用可能なオープンソースのinstructionデータセットであるdollyをdeeplを使って日本語に翻訳したものです。instructionデータセットとは何らかのリクエストとそれに対する望ましいレスポンスをペアにしたもので、このようなデータで学習するとモデルの出力を望ましい方向に誘導できます。

huggingface.co

学習の際にはparameter efficient finetune手法であるLoRAを使いました。コードはalpaca-loraをベースに弊社でリファクタしたもの(ハイパラを触りやすくした程度の改変です)を使いました。モデルがGPT-NeoXベースであるため、LoRAのターゲットは query_key_value です。

github.com

その他学習のパラメータは以下のような感じでした。

dict(
  batch_size=128,
  micro_batch_size=2,  # gradient_accumulation_steps=64
  num_epochs=3,
  learning_rate=3e-4,
  lora_r=8,
  lora_alpha=16,
  lora_dropout=5e-2,
  lora_target_modules=['query_key_value'],
  train_on_inputs=True,
  add_eos_tokens=True,
  warmup_steps=100,
)

生成パラメータは以下のものを使いました。

dict(
  temperature=0.7,
  top_p=0.75,
  top_k=40,
  max_tokens=128,
  repetition_renalty=5.0,
)

なお、学習にはRTX3090を使いました。DeepSpeedは使っていません。

検証結果

実際の入力プロンプトはalpacaスタイルに変換して与えています。LLMの出力は原文ママです。

回答サンプル

人工知能って何?

AIは、人間の知的能力をコンピュータ上で実現する技術である。具体的には、人間の使う自然言語を理解したり、論理的な推論を行ったり、経験から学習したりするコンピュータプログラムを開発することを指す。近年の技術進歩により、音声認識や画像認識の精度は大幅に向上した。また、機械による自動翻訳の精度も向上しており、近い将来、通訳がいらない時代が来ると予想されている。<|endoftext|>

何だか普通に人に聞いたみたいな答えが返ってきました。テキストの終わり位置も完璧です。(<|endoftext|> はテキストの終わりを示すマーカーです。)ChatGPTに慣れてると「まあそんなもんかな」と思うかもしれないですが、オープンソースの日本語モデルとしてこの性能は驚異的なんです。本当に。

自然言語処理とはどのようなものですか?

自然言語処理」は、人間が日常的に使っている自然言語をコンピュータに処理させる一連の技術の総称である。具体的には、文章や話し言葉機械的に解析する形態素解析構文解析、意味解析、文脈解析、固有表現抽出といった技術を指す。近年、人工知能(Artificial Intelligence:AI)の一分野として、注目が高まっている。<|endoftext|>

(感動)

広島の世界遺産を教えて

世界遺産に登録されているのは、厳島神社原爆ドームの2つです。厳島神社は宮島で、原爆ドーム広島平和記念公園にあります。<|endoftext|>

今開催G7サミットがされている広島について聞いてみました。なお、どちらの情報も合っています。ちなみに筆者は厳島神社の所在地を知りませんでした。

日本で一番高い山は?

富士山(ふじさん、Mount Fuji)は、静岡県山梨県に跨る活火山である。標高3776.24m、日本最高峰(剣ヶ峰)[注釈 1]の独立峰で、その優美な風貌は日本国外でも日本の象徴として広く知られている。数多くの芸術作品の題材とされ芸術面で大きな影響を与えただけではなく、気候や地層など地質学的にも大きな影響を与えている。懸垂曲線の山容を有した玄武岩成層火山で構成され、その山体は駿河湾の海岸まで及ぶ。数百万年前から火山活動を営んでおり、山頂部には高温火砕物によって形成された竪琴状の堆

出力が長かったので今回は指定したトークン数で終わりませんでした。すごい、完璧な情報だ……なんかwikipediaにありそうな文章だな……と思ってwikipediaを見たら完全に同じでした。こんなに完全に記憶しているものなんですね。(商用利用可能モデルですが、著作権侵害のリスクもありそうですね。)

参考 ja.wikipedia.org

りんご1個が100円のとき、りんご4個を買うといくらになりますか?

100×4=400円です。<|endoftext|>

言語モデルには苦手とされる計算問題も簡単なものなら解けるみたいです。感動ものです。

現時点での限界

  • 今回学習したパターンではopen QA以外のタスク(追加のコンテキストを必要とするタスク)の性能が微妙でした。うまく学習できている方もいるのでハイパラチューニングなどが必要なのかもしれないです
<user>: ACESのビジョンはなんですか?
<context>: ACESは、「アルゴリズムで社会はもっとシンプルになる」というビジョンのもと2017年に立ち上がった東京大学松尾研発のAIスタートアップです。Deep Learningを用いて属人化しているヒトの知見を数式化し、幅広い業界のAI事業の開発を推進しています。
<cyber LLM>: この課題では、以下の2つの問いに答えることが求められています。

 1. ACESは何を実現しようとしているのか。

 2. ACESの技術的な特徴は何か。<|endoftext|>
  • repetition_penalty をデフォルトの値(1.0)にすると結構出力が繰り返される現象が見られました
  • 学習時のハイパラにセンシティブかもしれないです
    • 結局alpaca-loraのデフォルトが一番いい感じになりました
    • あるトライアルでは失敗してあんまりいい感じの出力が出なかったです

まとめ

本ブログ記事ではCyberAgent社がリリースした open-calm-7b モデルのfinetuneを行いました。今までリリースされた日本語モデルと比べてダントツに回答のクオリティが高くて感動するレベルです。特に、コンテキストを利用しないで回答させた場合のクオリティはかなり信頼できるものが出てくると感じました。

自分の学習の設定に問題があるのかもしれないですが、コンテキストを利用した回答生成はあまりうまくいかなかったのでこの辺りはfuture workにしようと思います。

CyberAgentさんが今回のモデルをリリースしたことで日本語LLMのオープン化の流れが一段と加速したように思います。デベロッパーとしてはうれしい限りです。今後もこの流れが続くと日本語LLM界隈が盛り上がっていいなと思っています。

弊社ではLLM技術を始めとして自然言語を扱えるエンジニアを募集しています。ご興味ある方は以下のリンクから是非ご応募ください。

www.wantedly.com

www.wantedly.com


  1. 英語で事前学習したのちに日本語でfinetuneした7BモデルはNovelAI社からリリースされています。こちらのモデルは学習コーパスがなろう小説を含んでいて、なかなかラノベチックな文章を生成してくれます。
  2. 英語で学習されたモデルを日本語でfinetuneするという方法もあるのですが、日本語での知識がどうしても不足していて、不自然な文章が生成されたり、問いかけに対して頓珍漢な回答をしたり、文章が繰り返してしまうなどの現象が起きることが多いです。また、英語で学習したモデルは日本語のトークン効率が悪く、英語と同じ内容を持つ文章であっても、英語と比べてトークン数が増えやすい(=計算コストの増加、出力トークン数の減少)傾向があり、長い文章を扱いづらいなどの問題もあります。(これは厳密にはLLMの問題というよりtokenizerの問題ですが。)