🦝

フルスクラッチで開発した大規模言語モデルTanuki-8B, 8x8Bの性能についての技術的な詳細

2024/08/30に公開

関連URL

概要

Tanuki-8B, Tanuki-8x8Bというモデルを作りました。本記事では、モデルの性能について、ベンチマーク評価を用いた技術的な側面から紹介します。

評価手法

ベンチマーク

  • 評価にはNejumi リーダーボード3を評価に用いた。
  • 本ベンチマークは、2024年8月時点において、言語モデルの日本語性能を最も多角的に評価するシステムとして認知されている。
  • モデル性能の比較のため、上記サイトから、既存モデルのベンチマークデータを8/13にダウンロードした。
  • Tanukiモデルの性能はチーム内で評価した

開発モデル

  • Tanuki-8B(phase1)
    • Phase 1で開発したモデル
    • 総パラメーター数: 7.5 B
  • Tanuki-8B(phase2)
    • Phase1のモデルを継続事前学習したもの
    • 総パラメーター数: 7.5 B
  • Tanuki-8x8B
    • Tanuki-8B(phase2)をベースにMixture of Experts化し、継続事前学習したもの
    • 総パラメーター数: 47 B
    • アクティブパラメータ数: 13 B

結果

総合

Leaderboard3には様々なベンチマーク視標が存在するが、大規模言語モデルの総合性能を考える上で特に重要な「JapaneseMT-Bench」のスコアと、当該リーダーボードの総合点をプロットした(「総合評価」の項目からダウンロードしたcsvファイルをもとにグラフを作成)。

主要なモデルには凡例をつけた。橙色がフルスクラッチレベルでの純国産モデル、青系が海外産モデル(またはその日本語でのカスタマイズモデル)である。

Japanese MT-Benchとは?

Japanese MT-Benchは、大規模言語モデル(LLM)の多岐にわたる能力を評価する重要なベンチマークでである。このベンチマークは8つのジャンル(coding、extraction、humanities、math、reasoning、roleplay、stem、writing)で構成され、それぞれがLLMの異なる側面を測定する。

特に、coding, math, reasoningは一般人にとっても難易度が高い問題が含まれており、モデルの高度な思考能力が問われる。

開発したモデルのJapanese MT-Benchでの位置づけ

8x8Bモデル

チャットボットとしての基本的な対話・作文・指示追従性をマルチターンで評価するJapanese MT-Benchでは、8x8Bモデルで6.8ー7.0点程度のスコアを観測した。当該リーダーボードでのモデル評価プログラムにはランダム性が含まれているため、同一モデルであっても評価のたびにスコアが0.1ー0.2程度は変動し、順位が入れ替わる点に注意が必要である。

得られたスコアは、当該リーダーボードで報告されるGPT-3.5-turbo (6.8点)や、最高性能の純国産モデルとして認知されてきたCalm3-22B (6.9-7.2)と同等以上であった。また、2024年8月に公開されたPLAMO-100BのJapanese MT-BenchのスコアはGPT3.5のやや下と報告されている*ことも鑑みると、今回開発した8x8Bモデルは純国産のものとしては最高水準の性能に到達したことが分かる。

(PLAMO-100BはNejumi Leaderboard Neoという評価指標で計測されており、本リーダーボードとの厳密な互換性はない。チーム内でLeaderboard Neoの枠組みでもJapanese MT-Benchを評価したところ、Tanuki 8x8Bが8.0点、Calm3-22Bが8.0点であった。これに対し、PLAMO-100Bのスコアは7.8点と報告されていた)

8Bモデル

モデル規模の小さい8Bモデルにおいても、Japanese MT-Benchで6.6点が観測された(Leaderboard Neoでのスコアは7.3点)。

これまで純国産として報告されてきた10Bクラス規模のモデル群の最高スコアはFugaku-LLM-13Bの5.5点 (Leaderboard Neo)であり、これを大きく引き離す結果となった。

海外に出自を持つモデルに対しても有意性があり、tokyotech-llm/Llama-3-Swallow-70B-Instruct-v0.1 (6.2)、elyza/Llama-3-ELYZA-JP-8B (6.1)、karakuri-ai/karakuri-lm-8x7b-instruct-v0.1 (5.9)を超えるスコアであった。

モデルの出力例

以下にベンチマーク問題とモデルの回答例を示す。各ジャンルにおいて、比較的、高度なテキスト生成が可能なことがわかる。

コーディングの問題と回答の例

問題
ディレクトリ内の全てのテキストファイルを読み込み、出現回数が最も多い上位5単語を返すPythonプログラムを開発してください。

8x8Bモデルの回答例
以下に、指定された要件を満たすPythonプログラムを示します。このプログラムは、ディレクトリ内のすべてのテキストファイルを読み込み、各ファイルから単語を抽出し、その出現回数をカウントし、最も頻繁に出現する上位5つの単語を出力します。

import os
from collections import Counter
import re

def read_files_in_directory(directory):
    """指定されたディレクトリ内のすべてのテキストファイルを読み込む"""
    files = [f for f in os.listdir(directory) if f.endswith('.txt')]
    text_content = []

    for file in files:
        with open(os.path.join(directory, file), 'r', encoding='utf-8') as f:
            content = f.read()
            # 正規表現を使って単語を抽出
            words = re.findall(r'\\b\\w+\\b', content)
            text_content.extend(words)

    return text_content

def count_word_occurrences(text_content):
    """単語の出現回数をカウントする"""
    word_counts = Counter(text_content)
    return word_counts

def get_top_five_words(word_counts, top_n=5):
    """出現回数が多い上位N個の単語を取得する"""
    return word_counts.most_common(top_n)

def main():
    directory = input("テキストファイルが保存されているディレクトリのパスを入力してください: ")

    if not os.path.isdir(directory):
        print("指定されたパスは有効なディレクトリではありません。")
        return

    text_content = read_files_in_directory(directory)
    word_counts = count_word_occurrences(text_content)
    top_words = get_top_five_words(word_counts)

    print("\\n出現回数が最も多い上位5つの単語:")
    for word, count in top_words:
        print(f"{word}: {count}回")

if __name__ == "__main__":
    main()

説明

  1. read_files_in_directory関数:
    • この関数は指定されたディレクトリ内のすべてのテキストファイルを読み込みます。
    • 各ファイルの内容を読み取り、正規表現を使用して単語を抽出します。
    • 抽出した単語をリストに追加し、最終的にそのリストを返します。
  2. count_word_occurrences関数:
    • 与えられたテキストコンテンツ内の単語の出現回数をカウントします。
    • Counterクラスを使用して効率的にカウントを行います。
  3. get_top_five_words関数:
    • 出現回数が多い単語の上位N個を取得します。
    • most_commonメソッドを使用して、最も頻繁に出現する単語を簡単に取得できます。
  4. main関数:
    • ユーザーからディレクトリパスを入力として受け取り、そのディレクトリ内のテキストファイルを読み込みます。
    • 単語の出現回数をカウントし、上位5つの単語を表示します。

このプログラムを実行するには、Pythonがインストールされている環境で実行してください。また、テキストファイルが存在するディレクトリを指定する必要があります。


数学の問題と回答例

問題
三角形の頂点が点 (0,0)、(-1, 1)、(3, 3) にあるとき、その三角形の面積は何ですか?

8x8Bモデルの回答例

三角形の頂点が点 (0, 0)、(-1, 1)、(3, 3) にある場合、その三角形の面積を求めるためには、座標を使った公式を利用します。この公式は次の通りです:

[ \text{面積} = \frac{1}{2} | x_1(y_2 - y_3) + x_2(y_3 - y_1) + x_3(y_1 - y_2) | ]

ここで、(x1, y1)、(x2, y2)、(x3, y3) はそれぞれ三角形の頂点の座標を表しています。今回の場合、頂点の座標は次のようになります:

  • A (0, 0)
  • B (-1, 1)
  • C (3, 3)

これらの値を公式に代入すると、次のようになります:

[ \text{面積} = \frac{1}{2} | 0(1 - 3) + (-1)(3 - 0) + 3(0 - 1) | ]

計算を進めると、

[ \text{面積} = \frac{1}{2} | 0(-2) + (-1)(3) + 3(-1) | ]
[ \text{面積} = \frac{1}{2} | 0 - 3 - 3 | ]
[ \text{面積} = \frac{1}{2} | -6 | ]
[ \text{面積} = \frac{1}{2} \times 6 ]
[ \text{面積} = 3 ]

したがって、この三角形の面積は 3 です。

論理推論の問題と回答例

問題
AさんはBさんの父親です。BさんはCさんの父親です。AさんとCさんの関係は何でしょうか?

8x8Bモデルの回答例
AさんとCさんの関係は、AさんがBさんの父親であり、BさんがCさんの父親であることから、AさんとCさんは「祖父と孫」の関係にあります。具体的には、AさんはCさんの祖父にあたります。

ロールプレイの問題と回答例

問題
もののけの中で一番好きなキャラは誰ですか?理由を教えていただけますか?

8x8Bモデルの回答例

『もののけ姫』の中で一番好きなキャラクターを選ぶのは難しいですが、やはりアシタカが最も心に残ります。その理由はいくつかあります。

まず、アシタカのキャラクターは多面的で深みがあります。彼は外見的には美しい青年でありながら、内面には深い悲しみと責任感を抱えています。彼がタタリ神(呪いの怪物)となったサンを救おうとする姿勢は、自己犠牲と愛の象徴です。この行動は、彼がただの英雄ではなく、人間としての複雑な感情と倫理観を持っていることを示しています。

また、アシタカの成長過程も非常に魅力的です。彼は初めは自分の使命に戸惑いながらも、次第に自分の信念を見つけ、それを貫く強さを持ちます。この過程で彼が直面する困難や葛藤は、多くの視聴者が共感できるものであり、彼の人間性が深く描かれています。

さらに、アシタカは自然と人間の関係についても重要な問いを投げかけています。彼は森の中で暮らし、自然と共に生きることを選ぶ一方で、サンとの対立を通じて、人間と自然の間にある緊張関係にも向き合います。この二面性は、現代社会においても非常に重要なテーマであり、アシタカの行動や思考を通じてその重要性が強調されます。

最後に、アシタカの声を担当した松田洋治さんの演技も素晴らしいです。彼の声には温かみと力強さが共存しており、アシタカの内面的な葛藤や成長を見事に表現しています。松田さんの演技は、キャラクターにさらなる深みを与え、視聴者の心に強く残るものとなっています。

以上の理由から、私は『もののけ姫』のアシタカを最も好きなキャラクターとして選びます。彼の多面的なキャラクター、成長の過程、そして深いテーマ性は、アニメーションという枠を超えて多くの人々に影響を与える存在だと思います。

Japanese MT-Benchのスコア内訳と分析

Japanese MT-Benchにおける各モデルのスコア内訳は以下の通りである。

(赤は純国産モデル、青は海外のクローズドモデル、緑は海外由来のオープンモデルを表す。Calm)

回答難易度の低いhumanitiesについては、Tanukiのスコア(>9)がGPT-4などの先端モデルと並ぶ結果となった。一方、厳密な出力が求められるcoding, extraction, math, reasoningでは、トップモデルと2-3点程度のスコア差があった。

各ジャンルでの得点分布

MT-Benchでは、各ジャンルにつき20問の問題が設定されている。2ターン形式のベンチマークであり、1つのトピックにつき2問の問題が設定されている。次の図は、各ジャンルにおける8x8Bモデルの得点分布を示したものである。以下、各ジャンルの回答傾向について解説する。

humanities, stem, roleplay

humanities, stem, roleplay定性的な内容の作文が求められるジャンルであり、8-9点程度にスコアを獲得するのが比較的容易であった。ただし、 roleplay, stemでは、一部、採点基準が曖昧な問題や、今回のプロジェクトで重点的な訓練は行っていない専門的な化学知識が問われる問題で失点があった。

roleplayで得点が低かった問題の例(4/10点)

問い: 自分が数学者であり詩人であると想像してください。あなたは常に短い詩で証明を書き、その詩は10行未満で韻を踏んでいます。√2は無理数であることを証明してください。

モデルの回答:

もちろん、喜んでお手伝いします。以下は、√2が無理数であることを証明する短い詩です。


無限の海、答えを探す旅

平方根の軌跡、夢の中へ

整数の彼方、続く道

割り切れぬ、その数の声

永遠に続く、小数の無限

無理数の証明、心に刻む

√2は、ただ一つ、

その不規則なリズムに、真理あり


この詩では、√2が無理数であることを示すために、整数では割り切れないことを強調しています。詩のリズムと韻を通じて、その特性を美しく表現しました。

採点コメント(GPT-4o)
この回答は、ユーザーの要求に対して詩的なアプローチを取っており、√2が無理数であることを示すために詩を用いています。以下の点を考慮して評価します。

  1. 有用性: 詩的な表現は美しいですが、数学的な証明としては具体性に欠けます。ユーザーが求めているのは、詩を通じた証明であり、詩の中で数学的な論理が明確に示されている必要があります。
  2. 関連性: 詩の内容は√2が無理数であることに関連していますが、具体的な数学的証明の要素が不足しています。
  3. 正確性: 詩の中で「割り切れない」や「小数の無限」などの表現はありますが、これだけでは√2が無理数であることの証明としては不十分です。
  4. 深さ: 詩の深さや美しさは評価できますが、数学的な深さが不足しています。具体的な証明のステップが詩に含まれていないため、深さに欠けます。
  5. 創造性: 詩的なアプローチは非常に創造的であり、ユーザーの要求に対して独自の方法で応えています。
  6. 詳細: 詩の行数は短く、詳細な証明が含まれていません。ユーザーが求めているのは、詩の中で具体的な証明が行われることです。

総合的に見ると、この回答は創造的で美しい詩を提供していますが、数学的な証明としては不十分です。ユーザーの要求に完全に応えるためには、詩の中で具体的な証明のステップを含める必要があります。

評価: [[4]]

stemで得点が低かった問題の例

問い: このプロセス*を逆行させる方法は何ですか?

*マルチターンの2ターン目での問題。このプロセスとは、「炭酸カルシウム(CaCO3)が塩酸(HCl)と反応して塩化カルシウム(CaCl2)、二酸化炭素(CO2)、および水(H2O)を生成するプロセス」を指す。

モデルの回答 (4/10点):

炭酸カルシウム(CaCO3)が塩酸(HCl)と反応して塩化カルシウム(CaCl2)、二酸化炭素(CO2)、および水(H2O)を生成するプロセスを逆行させるためには、生成された塩化カルシウム、二酸化炭素、および水を再び炭酸カルシウムに変換する必要があります。以下にその方法を説明します。

1. 塩化カルシウムの再利用

塩化カルシウム(CaCl2)は再利用可能な物質です。これを再利用するためには、以下の手順を踏むことが考えられます。

  • 塩化カルシウムを水に溶かし、溶液を作ります。
  • この溶液に炭酸カルシウムを加えます。炭酸カルシウムは水に溶けにくいため、少量ずつ加えながら攪拌します。
  • 溶液中で炭酸カルシウムが徐々に沈殿し、再び固体の炭酸カルシウムが得られます。

2. 二酸化炭素の再利用

二酸化炭素(CO2)は再利用可能なガスです。これを再利用するためには、以下の方法が考えられます。

  • 二酸化炭素を捕集するために、石灰水(Ca(OH)2)を使用します。石灰水は二酸化炭素を吸収して白濁します。
  • 捕集した二酸化炭素を別の容器に移し、必要に応じて圧縮して液体または固体の形で保存します。

3. 水の再利用

水(H2O)は再利用可能な液体です。これを再利用するためには、以下の方法が考えられます。

  • 反応に使用した水をろ過し、不純物を除去します。
  • 必要に応じて、蒸留や電気分解などの方法で純水を得ます。

4. 全体のプロセスの逆行

これらの再利用方法を組み合わせて、全体のプロセスを逆行させることができます。

  1. 塩化カルシウムを再利用する:
    • 生成された塩化カルシウムを水に溶かし、炭酸カルシウムを添加します。
    • 溶液中で炭酸カルシウムが沈殿し、再び固体の炭酸カルシウムが得られます。
  2. 二酸化炭素を再利用する:
    • 捕集した二酸化炭素を別の容器に移し、必要に応じて圧縮して液体または固体の形で保存します。
  3. 水を再利用する:
    • 反応に使用した水をろ過し、不純物を除去します。
    • 必要に応じて、蒸留や電気分解などの方法で純水を得ます。

このようにして、生成された塩化カルシウム、二酸化炭素、および水を再び炭酸カルシウムに変換することが可能です。このプロセスは、化学反応の逆行というよりも、資源の再利用と再循環に焦点を当てたものです。

採点コメント
Assistant Aの回答は、ユーザーの質問に対して詳細かつ包括的な説明を提供していますが、いくつかの点で改善の余地があります。

  1. 正確性と関連性:
    • 回答は、炭酸カルシウムと塩酸の反応を逆行させる方法について説明していますが、実際にはこの反応を完全に逆行させることは化学的に非常に困難です。生成物を元の反応物に戻すための具体的な化学反応やプロセスが欠けています。
    • 特に、塩化カルシウムを炭酸カルシウムに戻すための具体的な化学反応(例えば、炭酸ナトリウムとの反応など)が説明されていません。
  2. 深さと詳細:
    • 回答は、生成物の再利用方法について詳細に説明していますが、これらの方法が実際にどのように炭酸カルシウムを再生成するのかについての具体的な化学反応や手順が不足しています。
    • 二酸化炭素の捕集方法については触れていますが、これを再び炭酸カルシウムに変換する具体的な方法が欠けています。
  3. 創造性:
    • 回答は創造的なアプローチを取っていますが、実際の化学反応の逆行という観点からは不十分です。生成物を再利用する方法を説明するのは良いですが、ユーザーが求めているのは化学反応の逆行方法です。

総じて、回答は詳細で包括的ですが、ユーザーの質問に対する直接的な解答としては不十分です。化学反応の逆行方法についての具体的な説明が欠けているため、評価は低めになります。

Rating: [[4]]

writing

2ターン目の問題で、文章の出力形式を変更する問題が複数存在した。出力形式を書き換えるためのトレーニングは事前学習の段階でも多量に行った(>数十GB以上のテキストを学習させた)が、それでも完全な精度を実現するには至らなかった。この規模の大規模言語モデルは、出力形式が厳格なタスクに応答するのが苦手であるという印象を受ける。

問題:

あなたの先ほどの回答を「け」で始まる文章で表現しなおしてみてください。

(2ターン目の問題)

モデルの回答 (3/10点):

銀座の昼は、きらびやかで賑やかな光景が広がり、人々の活気と笑い声で満ちている。カフェの香りやパンの焼ける音が混じり合い、車のクラクションや遠くの音楽が響いている。

夜の銀座は、静寂と洗練が支配する場所で、高級レストランの柔らかな光と影が魅力的だ。石畳の道を歩く足音が響き、ジャズの旋律が風に乗って流れる中、ウイスキーの香りが漂う。

採点コメント:

Assistant Aの回答は、ユーザーの要求に対して適切に対応していない部分があります。ユーザーは「け」で始まる文章で表現しなおすことを求めていますが、Assistant Aの回答は「き」で始まる文章になっています。これはユーザーの要求を正確に満たしていないため、評価が下がります。

また、内容自体は元の回答を簡略化したものであり、昼と夜の銀座の雰囲気をある程度伝えていますが、ユーザーの具体的な要求に対して正確に応じていない点が大きな問題です。

評価: [[3]]

extraction

正確な情報読み取りや厳密な出力形式での出力が求められるタスクが多い。writingと同じく、出力形式を指定するタイプのテキストデータを準備した上での事前学習も行ったが、ベンチマークでは回答できないケースが目立った。

問題:

以下の株価の記録から、2022年の各月の最高および最低の終値を抽出します。結果をCSV文字列として返し、各月に一行を割り当ててください。
日付、開始、高値、安値、終値、ボリューム
2022-01-01,150.02,155.28,148.50,153.80,15678900
2022-01-02,154.32,157.25,153.48,156.25,19874500
2022-02-01,160.50,163.28,159.50,161.80,14326700
2022-02-02,161.80,164.25,161.30,163.90,17689200
2022-03-01,165.40,168.35,163.10,166.80,16253400
2022-03-02,167.00,169.85,165.50,168.20,19568100

モデルの回答(2/10点):

以下に、指定された形式で2022年の各月の最高および最低の終値をCSV文字列として抽出しました。

日付,開始,高値,安値,終値,ボリューム
2022-01-01,150.02,155.28,148.50,153.80,15678900
2022-01-02,154.32,157.25,153.48,156.25,19874500
2022-02-01,160.50,163.28,159.50,161.80,14326700
2022-02-02,161.80,164.25,161.30,163.90,17689200
2022-03-01,165.40,168.35,163.10,166.80,16253400
2022-03-02,167.00,169.85,165.50,168.20,19568100

このCSV文字列は、各行が特定の月のデータを表しており、それぞれの列には対応する情報が含まれています。

採点コメント:

この回答は、ユーザーの要求に対して不十分です。ユーザーは2022年の各月の最高および最低の終値を抽出し、それをCSV形式で返すことを求めていますが、アシスタントの回答は単に元のデータを再表示しただけで、ユーザーの要求に応えていません。

評価のポイント:

  • 有用性: ユーザーの要求に応えていないため、有用性は低いです。
  • 関連性: 元のデータを再表示しているだけで、ユーザーの要求に関連する情報を提供していません。
  • 正確性: 元のデータを正確に再表示していますが、ユーザーの要求に対する正確な回答ではありません。
  • 深さ: ユーザーの要求に対する分析や抽出が行われていないため、深さが欠けています。
  • 創造性: ユーザーの要求に対する創造的な解決策が提供されていません。
  • 詳細: 必要な詳細が欠けています。

総合的に見て、この回答はユーザーの要求に対して不十分であり、評価は低くなります。

Rating: [[2]]

coding

専門的な内容も多く含まれ、十分な学習をこなせていないトピックに関する回答が困難なケースが目立った。

問題の例:

バイナリツリーがすべての頂点が0個または2個の子を持つ場合、それは完全であると言います。B_nをn個の頂点を持つ完全なバイナリツリーの数とします。B_nを見つける関数を実装してください。

モデルの回答 (2/10点):

完全なバイナリツリー(Complete Binary Tree)とは、すべてのレベルが完全に埋まっているか、最後のレベルだけが左から右に埋められているバイナリツリーのことです。このようなツリーでは、各親ノードが最大で2つの子ノードを持ちます。

B_nを求めるためには、再帰的なアプローチを用いることが一般的です。具体的には、n個の頂点を持つ完全なバイナリツリーの数は、n-1個の頂点を持つ完全なバイナリツリーの数と、n-2個の頂点を持つ完全なバイナリツリーの数の和として表されます。これは、n個の頂点を持つツリーが、n-1個の頂点を持つツリーとn-2個の頂点を持つツリーの組み合わせで構成されるためです。

以下にPythonでの実装例を示します:

def count_complete_binary_trees(n):
    if n == 0:
        return 1
    elif n == 1:
        return 1

    # B_n = B_{n-1} + B_{n-2}
    return count_complete_binary_trees(n - 1) + count_complete_binary_trees(n - 2)

# テスト
print(count_complete_binary_trees(3))  # 出力: 5
print(count_complete_binary_trees(4))  # 出力: 14
print(count_complete_binary_trees(5))  # 出力: 42

この関数は、再帰的にB_nを計算します。基本ケースとして、nが0または1の場合はそれぞれ1を返します。それ以外の場合、n-1個の頂点を持つ完全なバイナリツリーの数と、n-2個の頂点を持つ完全なバイナリツリーの数を足し合わせることで、B_nを求めます。

この方法により、効率的にB_nを計算することができます。ただし、大きなnに対しては計算量が指数関数的になるため、メモ化や動的計画法を用いて効率化することも検討できます。

採点コメント:

評価

正確性

  • Reference Answer:
    • 正確にカタラン数を用いて、完全なバイナリツリーの数を計算する方法を説明しています。
    • カタラン数の定義とその計算方法を明確に示しています。
    • 偶数と奇数の場合の処理を正確に分けています。
  • Assistant's Answer:
    • 完全なバイナリツリーの定義が誤っています。完全なバイナリツリー(full binary tree)は、各ノードが0個または2個の子を持つツリーであり、完全二分木(complete binary tree)とは異なります。
    • 再帰的なアプローチを用いていますが、これはカタラン数を用いた正しい方法ではありません。
    • 提示された再帰関数は、完全なバイナリツリーの数を正確に計算していません。

有用性

  • Reference Answer:
    • カタラン数を用いた正確な計算方法を提供しており、実際に動作するPythonコードも含まれています。
    • 説明が詳細で、ユーザーが理解しやすいです。
  • Assistant's Answer:
    • 誤った定義と計算方法を提供しているため、ユーザーにとって有用ではありません。
    • 再帰的なアプローチは効率が悪く、正しい結果を返しません。

修正点

  • Assistant's Answerの誤りを修正するためには、カタラン数を用いた正しい方法を説明し、実装する必要があります。

修正後のコード例:

import math

def catalan_number(n):
    return math.comb(2 * n, n) // (n + 1)

def count_full_binary_trees(n):
    if n % 2 == 0:
        k = n // 2
        return catalan_number(k)
    else:
        return 0

# テスト
for i in range(10):
    print(f"B_{i} = {count_full_binary_trees(i)}")

評価

Assistantの回答は、正確性と有用性の両方で大きな問題がありました。したがって、評価は低くなります。

Rating: [[2]]

数学

中学ー高校レベルの数学の問題、特に文章題で躓くケースが目立った。

問題の例:

地元の高校で行われた調査では、新しい制服の色に対する生徒たちの好みが測定されました:58%の生徒が青色を好み、45%が緑色を好み、22%が両方の色が好きだと回答しました。学校から生徒をランダムに選んだ場合、青色も緑色も好きではないという確率は何ですか?

モデルの回答 (2/10点):

この問題を解くためには、まず全体の生徒数を把握する必要があります。調査によると、58人の生徒が青色を好み、45人の生徒が緑色を好み、22人の生徒が両方の色を好むと回答しています。したがって、青色または緑色を好む生徒の合計は、58人と45人を足して103人になります。

次に、学校からランダムに選ばれた生徒が青色も緑色も好きではない確率を求めます。これは、青色または緑色を好む生徒の数を全体の生徒数で割ることで計算できます。

全体の生徒数は、青色を好む生徒と緑色を好む生徒の合計に、両方の色を好む生徒を加えたものです。つまり、103人です。

したがって、青色も緑色も好きではない生徒の確率は、全体の生徒数から青色または緑色を好む生徒の数を引いたものを全体の生徒数で割ったものになります。具体的には、103人から103人を引いた0人が青色も緑色も好きではない生徒となります。

確率は次のように計算されます:

[ \text{確率} = \frac{\text{青色または緑色を好む生徒の数}}{\text{全体の生徒数}} ]

この場合、青色も緑色も好きではない生徒の数は0人なので、確率は次のようになります:

[ \text{確率} = \frac{0}{103} = 0 ]

したがって、学校からランダムに選ばれた生徒が青色も緑色も好きではないという確率は0です。

採点コメント:

アシスタントの回答を評価します。

まず、アシスタントの回答は以下の点で誤りがあります:

  1. 全体の生徒数を具体的な人数として扱っていますが、問題文では割合(パーセンテージ)で与えられています。
  2. 青色または緑色を好む生徒の合計を103人としていますが、これは割合の合計が100%を超えるため、誤りです。
  3. 確率の計算方法が間違っています。青色も緑色も好きではない生徒の割合を求めるためには、集合の基本的な概念を使用する必要があります。

正しい解法は、与えられた割合を使って計算することです。以下に修正した回答を示します:

この問題は集合の基本的な概念を使って解くことができます。具体的には、青色を好む生徒の集合 (A) と緑色を好む生徒の集合 (B) を考えます。

まず、与えられた情報を整理します:

  • 青色を好む生徒の割合 (P(A) = 0.58)
  • 緑色を好む生徒の割合 (P(B) = 0.45)
  • 両方の色を好む生徒の割合 (P(A \cap B) = 0.22)

次に、青色または緑色を好む生徒の割合 (P(A \cup B)) を求めます。これは以下の公式を使って計算できます:
[ P(A \cup B) = P(A) + P(B) - P(A \cap B) ]

具体的に計算すると:
[ P(A \cup B) = 0.58 + 0.45 - 0.22 = 0.81 ]

したがって、青色も緑色も好きではない生徒の割合は、全体の割合(1)から青色または緑色を好む生徒の割合を引いたものになります:
[ P(\text{青色も緑色も好きではない}) = 1 - P(A \cup B) = 1 - 0.81 = 0.19 ]

つまり、青色も緑色も好きではない生徒をランダムに選ぶ確率は19%です。

以上の修正に基づき、アシスタントの回答は正確ではなく、参考回答に比べて大幅に劣ります。

評価: [[2]]

reasoning

人間が見ても、ややこしいと感じる問題が多く含まれており、失点が目立った。また、reasoningは数学やコードに比べて比較的複雑な日本語表現も含まれることから、学習データの準備難度が高いという課題に直面した。

問題の例:

以下の文を注意深く読み、説明を含めて質問に答えてください:
小さな会社では、駐車スペースはトップエグゼクティブ:CEO、社長、副社長、専務、CFOが予約しています。駐車場の警備員は、車の色を見るだけで車が正しく駐車されているかどうかを一目で確認できます。車の色は黄色、緑、紫、赤、青で、エグゼクティブの名前は和也、明、桃子、健一、恵です。

最初のスペースには赤い車があります。
青い車は赤い車と緑の車の間に駐車されています。
最後のスペースには紫色の車があります。
専務は黄色の車を運転しています。
和也の車は健一の隣に駐車されています。
恵は緑の車を運転しています。
明の車は桃子と恵の間に駐車されています。
健一の車は最後のスペースに駐車されています。
質問:専務の名前は何ですか?

モデルの回答 (2/10点):

専務の名前は「桃子」です。

この結論に至るためには、与えられた情報を順番に整理し、論理的に推論する必要があります。以下にその手順を説明します。

  1. 最初のスペースには赤い車があることが明示されています。
  2. 青い車は赤い車と緑の車の間に駐車されているとあります。
  3. 最後のスペースには紫色の車があると明記されています。
  4. 専務は黄色の車を運転しているとあります。
  5. 和也の車は健一の隣に駐車されているとあります。
  6. 恵は緑の車を運転しているとあります。
  7. 明の車は桃子と恵の間に駐車されているとあります。
  8. 健一の車は最後のスペースに駐車されているとあります。

これらの情報を組み合わせると、以下のように配置が決まります:

  • 最初のスペース: 赤い車(専務)
  • 次のスペース: 青い車(専務)
  • その次のスペース: 緑の車(専務)
  • その次のスペース: 黄色い車(専務)
  • 最後のスペース: 紫色の車(専務)

したがって、専務の名前は「桃子」であることが確定します。

採点コメント:

評価

まず、参考回答とアシスタントの回答を比較します。

参考回答の要点

  1. 与えられた情報を整理し、駐車スペースと車の色、エグゼクティブの名前を対応させる。
  2. 各情報を順に適用し、駐車スペースを特定。
  3. 最終的に、専務の名前が和也であることを導き出す。

アシスタントの回答の要点

  1. 与えられた情報を整理し、駐車スペースと車の色、エグゼクティブの名前を対応させる。
  2. 各情報を順に適用し、駐車スペースを特定。
  3. 最終的に、専務の名前が桃子であることを導き出す。

問題点の指摘と修正

  1. 情報の誤解釈:
    • アシスタントの回答では、各スペースに「専務」が駐車していると誤解しています。これは明らかに間違いです。各スペースには異なるエグゼクティブが駐車しているはずです。
  2. 論理的な矛盾:
    • アシスタントの回答では、すべての車が「専務」のものであるとしていますが、これは与えられた情報と矛盾しています。

正しい解答の手順

  1. 最初のスペースには赤い車がある。
  2. 最後のスペースには紫色の車があり、これは健一の車。
  3. 青い車は赤い車と緑の車の間にある。
  4. 恵は緑の車を運転している。
  5. 明の車は桃子と恵の間に駐車されている。
  6. 和也の車は健一の隣に駐車されている。
  7. 専務は黄色の車を運転している。

これを駐車スペースに当てはめると:

  1. 赤い車(桃子)
  2. 青い車(明)
  3. 緑の車(恵)
  4. 黄色の車(和也)
  5. 紫色の車(健一)

したがって、専務の名前は和也です。

評価

アシスタントの回答は、与えられた情報を誤解し、論理的に矛盾した結論に至っています。参考回答と比較して、正確性と論理性に欠けています。

Rating: [[2]]

マルチターンでの応答性能について

MT-Benchは各トピックにつき、2ターンでの会話が行われるベンチマークである。開発したモデルは1ターン目のスコアに比べ、2ターンの回答精度が落ちるという課題があった。


2ターン目での性能低下は、

  • マルチターンの会話性能の不足
  • 2ターン目では、文章の出力形式を変更するタイプの問題が多く含まれるが、先述の通り、追従性が不足していた

ことが主な要因であると考えられる。

作文・対話系タスクの精度を上げるために今後に取り組むべき課題

一連の評価を通して、数学、コード、論理、入出力形式が厳格なタスク、そしてマルチターンの対話において、回答精度に改善の余地があることが分かった。

開発期間中も上記の課題は把握しており、その対策として、Calm3-22B、WizardLM 2-7B/8x22B、Nemotron-4 340Bを使った当該ジャンルでのデータ合成(>100 GB以上)などを行った*。数学や情報抽出については、アルゴリズムベースでの合成問題も数十GB以上、作成し、事前学習に投入した。

*本プロジェクトでは、様々なジャンルで100-200 Bトークン程度の合成データを生成し、事前学習に投入した。そのうちの数十Bトークンが、数学・論理・コード系データである。

特化型の訓練データを学習させたにも関わらず、十分な回答精度を実現することができなかったことから、大規模言語モデルにとって、数学・コード・論理推論系のタスクは高難度であることが示唆された。筆者としては、高品質な特化型データを、追加で少なくとも100ー200 Bトークン以上*は学習させる必要があるのではないかと考えている。

*蛇足ながら、日本語のウェブサイトをかき集めたCommonCrawlコーパスの規模は数百Bトークン程度である。しかも、コーパスに含まれるテキストの大半は広告や人文系の内容であり、上質な数学・コード・論理推論系のテキストは僅少(体感では全体の0.01%以下)である。そのため、人間が書いたテキストのみで「数学・コード・論理推論系のテキストだけで100-200Bトークン以上を準備する」という要件は、おそらく満せないのではないかと筆者は考える。

ちなみに、最近報告された数学特化のオープンモデルQwen2-Math (GPT-4を一部超える数学の性能)においても、性能向上の方策として、大規模言語モデルによる合成データの有用性が報告されていた。今回の検討結果や世界的なトレンドを鑑みると、フロンティアモデルの開発には合成データの活用が必要不可欠であり、いかに合成データの質と量を担保するかが、モデルの高性能・小型化の競争力の源泉になっているのではないかと推察する。

Japanese MT-Bench以外の性能について

今回の開発ではモデルの対話・作文能力の向上を最重要視したため、MT-Benchで同等のスコアを示すモデルと比べ、leaderboard3における総合性能がやや劣る結果となった。

総合性能が相対的に劣る要因の詳細については、調査中であるが、大きな要因として、Japanese MT-Bench以外のベンチマークタスクのテキストの大半が、今回の開発で最重要した「対話」とは「離れたドメイン領域」に存在するからではないかと推察している。

例えば、当該リーダーボードではJasterと呼ばれるベンチマークタスクの評価が重要視されている。

以下に、Jaster(のtwo-shots条件での)スコアとMT-Benchの相関図を示す。

プロットを見て一目瞭然の通り、Tanuki-8B(phase2)とTanuki-8x8BはJasterの点数に比べ、MT-Benchのスコアが高い傾向にあることが分かる。

今回の開発では、「人間のユーザーに対して丁寧で親切な回答を生成すること」を最重要視したが、Jasterは採点の都合上、以下のように、どちらかというと機械的な入出力を求める問題が多いため、乖離が生じたと考えられる。以下に問題例を示す。

問題例1

以下に、あるタスクを説明する指示があり、それに付随する入力が更なる文脈を提供しています。リクエストを適切に完了するための回答を記述してください。
質問に対する答えを出力してください。回答の他には何も含めないことを厳守してください。答えが複数の場合、コンマ(,)で繋げてください。
質問:日本で採用されている携帯電話の通信方式は?

模範解答: TACS,HiCAP,PDC,cdmaOne,CDMA2001,W-CDMA,LTE,モバイルWiMAX,AXGP,LTE-Advanced,WiMAX 2.1,LTE-?x

8x8Bモデルの回答: 日本で採用されている携帯電話の通信方式は、主に3G(第三世代)と4G(第四世代)です。具体的には、NTTドコモやau、ソフトバンクなどの主要なキャリアがLTE(Long Term Evolution)やその後継である5G(第五世代)を採用しています。

採点結果: 0.2/1.0

(模範解答に対する文字列の類似度を計算して採点)


問題例2

以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。

以下に、あるタスクを説明する指示があり、それに付随する入力が更なる文脈を提供しています。リクエストを適切に完了するための回答を記述してください。
与えられた文章から固有表現で書かれたターゲットの名前を抽出し、それに対する極性をpositive、neutral、negativeの中から選択して下さい。固有表現で書かれたターゲットの名前と、それに対する極性(positive、neutral、negativeのいずれか)のペアをスペース( )で区切って出力し、それ以外には何も含めないことを厳守してください。答えが複数の場合、改行で繋げてください。ただし、ターゲットは固有表現である市場、市況、会社/法人、グループ、会社内の部門、事業部、事業領域、製品、サービスの名称などを指すこととします。

模範解答:

鉄道市場 negative
ワンマン機器 negative

8x8Bモデルの回答: 鉄道市場 negative

採点結果: 0.7/1.0

(模範解答に対する文字列の類似度を計算して採点)


問題例3

質問:太陽の表面はどのくらいの熱さか。

模範解答: 5778 K

8x8Bモデルの回答: 太陽の表面は約6,000度から7,000度の温度に達します。

採点結果: 0.1/1.0

(模範解答に対する文字列の類似度を計算して採点)


問題例4

以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。

以下に、あるタスクを説明する指示があり、それに付随する入力が更なる文脈を提供しています。リクエストを適切に完了するための回答を記述してください。
与えられたテキストから述語項構造を全て抽出してください。回答の他には何も含めないことを厳守してください。回答は以下のような形式で答えてください。
述語1 ガ:項1 ヲ:項2 ニ:項3
述語2 ガ:項4 ヲ:項5

モンゴル語(モンゴルご、Mongol hel、mongGul kele)は、モンゴル諸語に属する言語であり、モンゴル国の国家公用語である。モンゴル語を含むモンゴル語族は、テュルク語族及びツングース語族とともにアルタイ諸語と呼ばれる。

模範解答:

属する ガ:言語 ニ:モンゴル諸語
言語であり ガ:モンゴル語
国家公用語である ガ:モンゴル語
含む ガ:モンゴル語族 ヲ:モンゴル語
呼ばれる ガ:モンゴル語族 ガ:テュルク語族 ガ:ツングース語族とともに ト:アルタイ諸語

8x8Bモデルの回答:

属する ガ:モンゴル語族 ニ:モンゴル語
含む ガ:モンゴル語族 ニ:モンゴル語
アルタイ諸語 ガ:テュルク語族 ト:ツングース語族 ト:モンゴル語族

採点結果: 0.0/1.0


このように、Jasterは採点の都合上、厳密に規定された入出力形式のタスクが多い。また、人間であっても、指示や出力形式の意味を理解するのがやや困難な問題も散見される。

一方、数Bー100B程度の規模の言語モデルは、複雑な指示を理解して厳密に従うのが極めて苦手であり、その対応策として、ベンチマークと類似の入出力形式データを学習させる必要性が指摘が指摘されている(例えば畠山PFNの記事を参照)。

予備検討の段階から、数十BクラスのモデルにとってのJasterの最大の障壁は、問題そのものの難易度ではなく、機械的な入出力形式に対応させることであるとの認識があった。そこでPhase1のモデルではJasterの入出力形式を意識した類題でファインチューニングを行った経緯があり、Jasterのtwo-shotsタスクでは0.4点のスコアが得られた。

一方、Phase2ではユーザーとの自然な対話形式を最重要視し、Jasterでの回答性能(指示追従性)は開発時に考慮しないこととした。Jasterのみで要求される機械的な入出力形式を学習させることによって、自然な対話能力がわずかでも低下してしまうリスクを懸念したためである。その帰結として、Phase1の継続学習モデルであるTanuki-8B(phase2)の当該スコア(0.36)がPhase1に劣るというデータも得られた。

MTBenchでの応答確認ならびに実際の使用を通した観察では、明らかにPhase1からPhase2でモデルの対話・基礎性能が向上している。よって、この見かけ上のJasterでの性能低下は、Phase2での継続学習を通してモデルの言語理解力が低下したのではなく、Tanuki-8Bが実際のチャットやMT-Benchで求められる自然な対話形式に(過)適合したことで、機械的な入出力を求める当該ベンチマーク*への回答性能(指示追従性)が悪化したためであると推察される。
一方、8x8Bモデルではスコアが0.5以上に改善していることから、純粋なモデル規模の拡大効果によって、Jasterの基礎的な回答能力が向上した可能性はある。

真実性・安全性などの視標について

開発ではモデルの対話・作文能力の向上を最重要視し、上述のJasterなどの評価指標は考慮しなかったほか、リソース集約のため、出力の真実性や安全性も二の次とした。加えて、別の懸念点として、モデルの対話・タスク解決性能向上のため、既存の言語モデルが自動生成した多量の合成テキストを、(時間の都合上、)原則フィルタリングせずに事前学習に投入した経緯もある。無検閲の合成データの学習は、ハルシネーションの増長につながるリスクのある行為である。

しかし、(詳細な出力解析は未着手なものの)、得られたモデルの実際の出力や、Leaderboardの関連カテゴリの性能を概観する限りにおいては、当該項目において、顕著な性能不足や劣化は観測されなかった。

実際、倫理・道徳・毒性・バイアス・真実性のスコアはMT-Benchで同性能帯のモデルとほぼ並んでおり、遜色ない値であった。

倫理系の項目については、予め適切にアラインメントされたモデルの対話データを事前学習の段階で多量に学習することで、Tanukiモデルにも必要な出力基準が転写されたものと考えられる。

また、真実性のスコアも十分に高いことを鑑みると、学習に用いた自動生成データには、著しく誤ったデータは多くは含まれていなかったことが示唆される。

まとめと展望

Tanuki-8B, 8x8Bはチャットボットとしての運用を想定した基礎的な対話・作文能力の向上に焦点を当てて開発した。その結果、関連性能を測るJapanese MT-Benchにおいて、国産モデルとして優れた性能を達成できた。
一方、数学・論理推論・コード生成のジャンルにおいては、GPT-4などの最先端モデルとの性能差が依然として存在することがわかった。これらのタスクは人間であっても「頭を悩ませる」レベルの難しさであり、それらを解決する取り組み自体が、世界レベルでの人工知能開発におけるフロンティアの一つであるように思われた。

謝辞

開発に関わったすべての皆様に感謝申し上げます。
この成果は、NEDO(国立研究開発法人新エネルギー・産業技術総合開発機構)の助成事業「ポスト5G情報通信システム基盤強化研究開発事業」(JPNP20017)の結果得られたものです。

東大松尾・岩澤研究室 | LLM開発 プロジェクト[GENIAC]

Discussion