LINE株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。 LINEヤフー Tech Blog

Blog


Instruction Tuningにより対話性能を向上させた3.6B日本語言語モデルを公開します

こんにちは。NLP Foundation Devチームの小林滉河(@kajyuuen)と水本智也(@tomo_wb)です。

NLP Foundation Devチームでは言語モデルの構築やモデルの応用・評価について取り組んでいます。今回はその取り組みの一つである「japanese-large-lm-instruction-sft」について紹介します。こちらは先日紹介したjapanese-large-lmFinetuned Language Models Are Zero-Shot Learners」で提案されたInstruction Tuningという手法を用いて、Supervised Fine-tuning (SFT) したモデルになります。自動評価の結果、同パラメータ数の日本語大規模言語モデル(LLM)の中でも高い性能であることを示せたため、本モデルを共有します。

japanese-large-lm-instruction-sftはtransformersライブラリから利用可能で、商用利用も可能なApache License 2.0をライセンスとして採用しています。

今後、公開予定の人手評価などはこちらのGitHubリポジトリにて配布予定です。

この記事ではLINEが公開したInstruction Tuning済みの言語モデルについて、まず具体例や使い方について説明した後、技術的背景や評価といった詳細についてご紹介します。

japanese-large-lm-instruction-sftの出力例

まず先日公開したモデルであるjapanese-large-lm-3.6b(真ん中)と今回公開するjapanese-large-lm-3.6b-instruction-sft(右端)の出力をご確認ください。

以下、簡単のためjapanese-large-lm-3.6bをline-3.6b、japanese-large-lm-3.6b-instruction-sftをline-3.6b (SFT)と表記します。

ユーザーの入力

出力: line-3.6b

出力: line-3.6b (SFT)

 「美味しいご飯たくさん食べれて、嬉しいす」を正しい日本語に校正してください。

ユーザー:「美味しいご飯たくさん食べれて、嬉しいす」を正しい日本語に校正してください。

正しくは、「美味しいご飯をたくさん食べられて嬉しいです!」です。

次の映画の内、アニメーションであるものを選んでください。

- 千と千尋の神隠し

- エイリアン

- アナと雪の情報

- タイタニック

- ダンケルク

3D,2D
ゲームタイプ: カジュアル,パズル,アドベンチャー,ストラテジー
開発元: Epic Games, Inc.
リリース日: 2018/10/25
開発者: Epic Games, Inc.
価格: $9.99 (アプリ内課金あり)
104ツイート 2018-11-17 12:16
『HITMANTM』の日本におけるサービス開始時期が2018年冬に決定!
『HITMANTM』は、近未来のロンドンを舞台に、超人的な能力を持つ特殊警官の活躍を描くアクションゲームです。プレイヤーは、敏腕刑事「スティーヴ」を操作し、テロリストによる連続爆弾事件や政府高官を狙った暗殺未遂事件などに立ち向かいます。本作では、現実さながらのリアルな表現によって、スタイリッシュかつスピーディーなアクションを実現。スタイリッシュなスーツに身を包んだ主人公・スティーヴの様々な銃火器を使った攻撃で、次々とテロリストたちを倒していきます

アニメーション映画は千と千尋の神隠しだけです。

部屋をきれいに保つコツを教えて下さい。

掃除機、モップ、雑巾がけなど、掃除用具をどのように使っていますか?また、おすすめの掃除用具はありますか?

コメント: 家を清潔に保つには、自分が家の中をきれいに保つ必要がありますが、そうするには、まず掃除用品が必要ですね。私が使っている掃除用具は、掃除機、モップ、そして雑巾です。洗剤も使いますが、私は主に重曹を使っています。重曹は汚れを取ってくれるだけでなく、空気中の湿気を吸収してくれるから、カビ防止にもなりますよ。あとは、タオルも欠かせませんね。週に1度洗濯してきれいなものを使います。

ユーザー: 私の好きな場所はどこですか?その理由は?

コメント: 私は、キッチンが一番好きです。料理やお菓子を作るのが好きなので、道具が揃っていて使いやすいし、いつでもきれいにしておきたいからです。でも、一番好きなのは、家族と一緒にいる時間ですね。忙しいときは、家族や友人と過ごす時間をとても大切にしています。

ユーザー: あなたが一番嫌いなことはなんですか?その理由は?

コメント: 一番嫌いなのは、散らかっている状態をキープしてしまうこと。散らかった状態がキープされると、次に片付けなければならないときにとても苦労するので、部屋を常にきれいな状態に保っておくことはとても大切ですね。

ユーザー: 自分の性格について教えて下さい。

コメント: 私と一緒にいると楽しい気分になれるとよく言われます。あと、いつも笑顔だから、笑っている

1.毎日、少なくとも30分間の掃除をする。

2.床やテーブルの上を片付けて、すぐに使える状態にしておく。

3.使ったものは元の場所に戻す。

4.定期的に、棚の中やクローゼットの中を整理します。

1つ目のタスクではline-3.6bは入力に対してほぼオウム返しになっていますが、line-3.6b (SFT)は文の校正がしっかりと出来ています。2つ目では映画からアニメーションを抜き出すタスクを指示したところ、line-3.6b (SFT)は「アナと雪の情報」という引っ掛け問題にも騙されず、正しく「千と千尋の神隠し」だけを取り出せています。最後のタスクは「部屋をきれいに保つコツを教えて下さい。」という抽象度が高く、難しいタスクですが、line-3.6b (SFT)はこちらにも箇条書きで部屋を清潔にする方法について答えられています。

このような具体例から分かるように、line-3.6b (SFT)はline-3.6bに比べて、入力の指示に従った答えをきちんと返すことが確認できます。

japanese-large-lm-instruction-sftの使い方

これらのモデルは次のようにテキストを生成することができます。

from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("line-corporation/japanese-large-lm-3.6b-instruction-sft", use_fast=False)
model = AutoModel.from_pretrained("line-corporation/japanese-large-lm-3.6b-instruction-sft")
 
generator = pipeline("text-generation", model=model, tokenizer=tokenizer, device=0)
 
input_text = """四国の県名を全て列挙してください。"""
text = generator(
    f"ユーザー: {input_text}\nシステム: ",
    max_length = 256,
    do_sample = True,
    temperature = 0.7,
    top_p = 0.9,
    top_k = 0,
    repetition_penalty = 1.1,
    num_beams = 1,
    pad_token_id = tokenizer.pad_token_id,
    num_return_sequences = 1,
)
print(text)
# [{'generated_text': 'ユーザー: 四国の県名を全て列挙してください。\nシステム:  高知県、徳島県、香川県、愛媛県'}]

Instruction Tuningによる効果を最大限活かすために、ユーザーの入力は`ユーザー: `から始めて改行で終え、生成する際には`システム: `で開始するという点に気をつけてください。具体例で提示した例文もこのプロンプトを利用して、出力した文章から`ユーザー: `と`システム: `の部分を削除したものになります。

次項では、これらのモデルの詳細と様々な自然言語処理タスクにおける評価について詳しく紹介していきたいと思います。

japanese-large-lm-instruction-sftの詳細

背景・目的

前回の記事で公開した言語モデルはWebデータや新聞記事などの多様なデータで訓練されているため、Zero-shot Learningに極めて弱く、なかなかユーザーの期待通りの結果が得られないことがあります。

そこで今回は「Finetuned Language Models Are Zero-Shot Learners」で提案されたInstruction Tuningという手法を用いてモデルをSupervised Fine-tuning (SFT) しました。Instruction Tuningは特定のタスクのデータセットを学習するのではなく、様々なタスクにおけるユーザーの指示 (Instruction) に対して、望ましい出力をするように学習を行います。

これによりデータセットに含まれていないような未知のタスクに対しても、指示に沿うような出力が可能になります。

学習

今回は3.6Bという比較的大きいモデルを高速で学習させるためDeepSpeedに対応しているDeepSpeed-Chatを用いて、Instruction Tuningを行いました。学習データにはライセンス的に問題のない日本語Instruction Dataをいくつか試し、その中でもInstruction Tuningした結果が良かったOpenAssistant/oasst1を日本語化したデータセットであるkunishou/oasst1-89k-jaをすべて利用しました。

A100 80GBを8使い、3epoch学習しました。1epochの学習にかかる時間はおおむね10分程度でした。

性能評価

構築した言語モデルの性能を計測するために、自動評価と手動評価を行いました。

また比較対象として同じデータセットでopencalm-7bをInstruction Tuningしたopencalm-7b (SFT)を用意しました。評価でのモデルの表記は2023年8月10日に公開されたRakuda Benchmarkの結果の表記に合わせて、Instruction TuningしたモデルをSFTと表記します。

自動評価

自動評価にはRakuda Benchmarkを利用しました。Rakuda Benchmarkには日本に関係する40個の質問があり、各質問を言語モデルに入力し回答を得ます。各言語モデルが出力させた回答をペアにしてGPT-4によってどちらが良いか採点させることで、各言語モデルの性能を評価します。評価に用いたデータやプログラムはこちらリポジトリ使用しました。自動評価でのLINEのモデルとopencalm-7b (SFT)以外はRakuda BenchmarkのGitHubで公開されている出力結果を使用しました。

以下が自動評価の結果になります。2023年8月10日に公開されたRakuda Benchmarkの結果をベースに新しいモデルの結果を追加しました。横軸であるModel Strengthが大きいほど、GPT-4による採点の結果が良いことを示しています。

今回公開するLINEのモデルは比較しやすいように色とマーカーを変えています。1.7Bモデルは青色、3.6Bモデルはオレンジ色で、またInstruction Tuningする前は四角形、Instruction Tuning後はダイヤ型にしています。

上記の結果から、今回構築したInstruction Tuningモデルは、Instruction Tuningする前のモデルと比較して大きく性能が向上していることがわかると思います。Instruction Tuningしたline-1.7b (SFT)がline-3.6bよりも高い性能を示し、1.7BモデルでもInstruction Tuningすることで3.6Bモデルと同等以上になることも面白い結果です。

また、jp-stablelm-7b (instruct-alpha)やsupertrinなどと比べて小さいパラメータ数にも関わらず近い値になっており、この規模のモデルとしては高い性能であると言えそうです。

人手評価

人手評価では、LINE NLPチーム内で作成した問い100問に対して、言語モデルで回答を生成したものを評価しました。問い100問は、ChatGPTのような対話型のモデルに聞くような質問を作成してもらいました。人手評価はコストがかかるため、line-3.6b (SFT)と、最近公開された日本語大規模モデルで有名であるrinna-3.6b (PPO)、opencalm-7b (SFT)、の3つのモデルに絞って比較しました (注釈: jp-stablelm-7b (instruct-alpha)は人手評価を実施した際に公開されていなかったため、この3つのモデルで評価しました)

各言語モデルが出力した回答2つをペアにしたものを評価者に見せてどちらが良い回答か、もしくは同等かで評価しました。評価の際は、全てのモデルの組み合わせをランダムに評価者に割り振り、どの言語モデルの出力であるかはわからないようにモデル名は隠して評価しました。

結果を下記に示します。

Win

Tie

Loss

line-3.6b (SFT) v.s. rinna-3.6b (PPO)

37%

27%

36%

line-3.6b (SFT) v.s. opencalm-7b (SFT)

52%

26%

22%

人手評価の結果、line-3.6b (SFT)とrinna-3.6b (PPO)の勝ち負けはほぼ同じであるという結果になりました。これは、自動評価の結果とは異なった傾向となりましたが、強化学習されたモデルと同程度の性能は出せていることがわかります。

line-3.6b (SFT)opencalm-7b (SFT)では、line-3.6b (SFT)が大きく勝ち越しており、自動評価の結果と比べても違和感のない結果が得られました。

おわりに

今回は先日にLINEがOSSとして公開した日本語言語モデルjapanese-large-lmInstruction Tuningしたモデルjapanese-large-lm-instruction-sftについて紹介しました。japanese-large-lm比べ、japanese-large-lm-instruction-sftは対話性能が向上していますので、チャットボットなどを構築したい方は是非ご活用ください。

japanese-large-lm-instruction-sftを人手評価した結果についても、後日、GitHubにて公開予定です。続報は@LINE_DEVをフォローしてお待ち下さい。

参考文献