👨‍💻

LLMのファインチューニングでドメイン知識の獲得は可能か。知識付与の限界と可能性

2024/11/21に公開

1 はじめに

初めまして。データアナリティクスラボ株式会社データソリューション事業部の池田と申します。 今回は社内活動の一環として、大規模言語モデルにファインチューニングで知識付与を行う検証をしたので、その結果について紹介します。

以前、社内の勉強会で大規模言語モデルにファインチューニングでドメイン知識を付与することは難しいのでRAG(Retrieval Augmented Generation)を使うことが望ましいという内容の論文を目にすることがあり、本当にファインチューニングでの知識付与は難しいのか?と疑問に思ったことがきっかけでこの検証を始めることにしました。

2 要約

弊社(データアナリティクスラボ株式会社)のHPの情報をQ&A形式に整形した上で、大規模言語モデル(Swallow-MS-7b-instruct-v0.1)にInstruction Tuningによって学習させました。
結果としては、短く簡潔な内容であれば知識付与することができましたが、長い文章を知識として覚えさせることは難しいという結果になりました。また、Instruction Tuningによって回答の柔軟性が失われたり、ハルシネーションが生じやすくなるといった問題が生じました。学習用のデータセットの形式が似たようなパターンになっていたことが一因と思われます。

3 前提知識

ファインチューニングとInstructiton Tuning

ファインチューニングとは、大量のデータで事前学習された言語モデルを下流タスクのデータセットで微調整する手法で、その中の一つにInstructiton Tuning(指示チューニング)があります。

Instruction Tuningは、指示を含んだプロンプトと理想的な出力テキストの組み合わせで構成されるデータセットを用いたファインチューニングです。分かりやすい例ですと、Q&A形式の質問と回答が対になったようなデータセットが挙げられます。

大規模言語モデルにおいて事前学習で獲得していない知識を用いる方法としては、他にRAGがありますが、RAGは外部データの検索処理が必要になるため、ファインチューニングによって知識付与ができれば、検索による計算時間やリソースを省略できるメリットがあります。

量子化

量子化とは、データの表現に必要なビット数を低減させることで、モデルの軽量化や高速化を実現するための技術です。大規模言語モデルは大量のパラメーターを持つため、限られた計算リソースでモデルを動かすためには量子化を行う必要があります。

LoRA

LoRA(Low-Rank Adaptation)とは、大規模言語モデルのファインチューニングの効率化のために使われる手法で、更新するパラメーターを少数に限定することでメモリの消費量を抑えることができます。

仕組みとしては、事前学習で得られた重み行列をWとした際に、Wの層は固定し、同じ次元の重み行列ΔWを新たに学習します。WがD×Vの行列だと仮定した場合、ΔWを行列A(D×r)と行列B(r×V)の掛け算によって表します(下画像参照)。

ちなみに、ファインチューニング開始時点では、Aがランダムなパラメータ、Bがゼロ行列として設定されており、ΔW=0になっています。

ΔWは低次元の行列の掛け算で表現されているため、パラメーター数を大きく減らすことが可能です。
rの値は分析者が設定しますが、論文によると、rの値を4~8に設定しても、精度が大きく落ちないとのことでした。

LORA

引用元:「LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS」

4 実験計画

モデル選定

今回は、「tokyotech-llm/Swallow-MS-7b-instruct-v0.1」を使用しました。

モデル選定時には下記の3つの要素を考慮しました。

  • 日本語を学習したモデルであること
  • 商用可能なライセンスであること(apache-2.0)
  • 7Bのモデルであること(今回の実験環境では、これより大きいモデルだと学習できない可能性があるため)

実験環境

Google Cloud VertexAI環境でGPUはNVIDA L4×1枚を使用しました。利用可能な最大VRAMは24GBでした。

データの準備

  • データアナリティクスラボ株式会社のHP情報のうち、企業理念会社情報のページに記載された内容を手動でQ&A形式に変換しました。

  • Q&A形式に変換する際に、以下の点を工夫しました。

    1. LLMの出力に合わせて、回答の際に質問文を繰り返しました。
      例:Q.データアナリティクスラボ株式会社の代表取締役は誰ですか?A.データアナリティクスラボ株式会社の代表取締役は近藤雅彦です。
    2. 先行研究において、同じ事実を記述するテキストの数が重要との記載があったので、似たようなQ&Aを複数作成しました。(例えば、設立年月日を聞くQ&Aは3通り用意しました。)
    3. あえて間違った質問文を入れて質問と回答の種類に幅を持たせました。
      例:Q.データアナリティクスラボの代表取締役はSundar Pichaiですか?A.いいえ違います。データアナリティクスラボ株式会社の代表取締役は近藤雅彦です。
  • 最終的には、全部で90問のQ&Aのデータを作成しました。

ハイパーパラメーターの設定

  • 量子化の設定
    16bit(bfloat16)のモデルに対して、8bitの量子化を行って読み込みました。
bnb_config = BitsAndBytesConfig(
	load_in_8bit= True,                      # 8bitでモデル読み込み
	)

model = AutoModelForCausalLM.from_pretrained(
    base_model,
    quantization_config=bnb_config,           # 量子化設定を適用
    device_map="auto",                         # GPUの自動割り当て
    torch_dtype="auto",
    trust_remote_code=True,
    )
  • 学習の対象となる線形層

    • モデル構造を確認したところ、以下のとおり、「q_proj」、「k_proj」、「v_proj」、「o_proj」、「gate_proj」、「up_proj」、「down_proj」、「Im_head」の8つの層がLoRAの設定が可能な線形層であることが分かりました。
    • 以下、「q_proj」、「k_proj」、「v_proj」、「o_proj」をSelf attention層、「gate_proj」、「up_proj」、「down_proj」を全結合層、「Im_head」を最終層と呼びます。
    <bound method Module.modules of MistralForCausalLM(
      (model): MistralModel(
        (embed_tokens): Embedding(42800, 4096)
        (layers): ModuleList(
          (0-31): 32 x MistralDecoderLayer(
            (self_attn): MistralSdpaAttention(
              **(q_proj)**: Linear8bitLt(in_features=4096, out_features=4096, bias=False)
              **(k_proj)**: Linear8bitLt(in_features=4096, out_features=1024, bias=False)
              **(v_proj)**: Linear8bitLt(in_features=4096, out_features=1024, bias=False)
              **(o_proj)**: Linear8bitLt(in_features=4096, out_features=4096, bias=False)
              (rotary_emb): MistralRotaryEmbedding()
            )
            (mlp): MistralMLP(
              **(gate_proj)**: Linear8bitLt(in_features=4096, out_features=14336, bias=False)
              **(up_proj)**: Linear8bitLt(in_features=4096, out_features=14336, bias=False)
              **(down_proj)**: Linear8bitLt(in_features=14336, out_features=4096, bias=False)
              (act_fn): SiLU()
            )
            (input_layernorm): MistralRMSNorm()
            (post_attention_layernorm): MistralRMSNorm()
          )
        )
        (norm): MistralRMSNorm()
      )
      **(lm_head)**: Linear(in_features=4096, out_features=42800, bias=False)
    )>
    

ファインチューニングでは、どの層を学習の対象にするか設定できるのですが、Peftライブラリのデフォルトの設定ではSelf attention層のみが対象となっています。こちらこちらの先行研究によれば、知識付与においては、全結合層も学習の対象にすることが重要であるとのことでした。

実際に、チューニング層による出力の違いについて、「Self attention層のみ」、「全結合層のみ」、「全層」の3パターンで検証したころ、「全層」の出力が最も回答の精度が高くなりました。そのため、今回の検証では「全層」を対象にファインチューニングを行いました。

本題ではないので詳細な結果は省略しますが、「Self attention層のみ」は丸暗記の回答はできるが聞き方が少し変わると回答ができない傾向、「全結合層のみ」は同じ回答の繰り返しが出やすい傾向にありました。

  • LoRAによる学習の設定

LoRAはHugging Faceのpeftライブラリを使用して実装しました。

# モデルをkbit訓練のために準備
model = prepare_model_for_kbit_training(model)

# LoRaの設定を定義
peft_config = LoraConfig(
	r=16,                                 # LoRAのランクを設定
	lora_alpha=16,                        # LoRAの拡張係数を設定
	lora_dropout=0.05,                    # LoRAのドロップアウト率を設定
	bias="none",                          # バイアスの設定
	task_type="CAUSAL_LM",                # タスクタイプの設定(因果言語モデル)
	target_modules=['q_proj','k_proj', 'v_proj','o_proj','gate_proj','up_proj','down_proj','lm_head']  # LoRAが適用されるモジュールを指定(全層)
	)

# LoRAを適用したモデルを取得
model = get_peft_model(model, peft_config)
  • トレーニングの設定

epoch数は8に設定しました。元々10で設定していたのですが、8でLossが0.1以下になり、それ以上増やしても精度が上がらなかった(むしろハルシネーションが起きやすくなった)ためです。

training_arguments = TrainingArguments(
    output_dir="./results",                 # 結果の出力ディレクトリ
    num_train_epochs=8,                     # 訓練のエポック数
    per_device_train_batch_size=2,          # 各デバイスのバッチサイズ
    gradient_accumulation_steps=2,          # 勾配の蓄積ステップ数
    optim="paged_adamw_8bit",               # オプティマイザーの種類
    save_steps=30,                          # 保存するステップ間隔
    logging_steps=5,                        # ログを記録するステップ間隔
    learning_rate=1e-5,                     # 学習率
    weight_decay=0.001,                     # 重み減衰
    fp16=False,                             # FP16精度での計算を使用しない
    bf16=False,                             # BF16精度での計算を使用しない
    max_grad_norm=0.3,                      # 勾配の最大ノルム
    max_steps=-1,                           # 最大ステップ数
    warmup_ratio=0.3,                       # ウォームアップの比率
    group_by_length=True,                   # 長さに基づいてデータをグループ化
    lr_scheduler_type="constant",           # 学習率のスケジューラタイプ
    evaluation_strategy="steps",            # 評価のストラテジー
    eval_steps=30,                          # 評価を行うステップ間隔
    save_total_limit=1,                     # 保存するチェックポイントの最大数
    load_best_model_at_end=True,            # 訓練終了時に最良のモデルをロード
    metric_for_best_model="loss",           # 最良のモデルを選択するためのメトリクス
    greater_is_better=False,                # メトリクスが小さいほど良い場合はFalse
)
  • SFTTrainerの設定

※知識付与が目的のため、trainデータと評価データは同じデータセットを入れています。

trainer = SFTTrainer(
    model=model,
    train_dataset=ds,
    eval_dataset=ds,
    peft_config=peft_config,
    formatting_func=formatting_prompts_func,
    data_collator=collator,
    tokenizer=tokenizer,
    max_seq_length=256,
    args=training_arguments,
    packing = False
)

知識付与の検証方法

知識を得るとは何でしょうか?例えば、「リンゴの色は何色ですか?」という質問に正確に答えられたとしても、「リンゴという果物の色を教えてください。」というように少し聞き方を変えただけで答えられないようでは知識を得たとは言えないように思われます。(実際にこのように聞き方を変えただけで回答できないことがありました。)

また、リンゴの色や形、植生などの知識があれば、「リンゴの特徴をいくつか教えてください。」という知識を統合する必要がある質問にも回答できるはずです。

さらに、リンゴの色の知識を得た人が、元々イチゴの色も知っていれば、「リンゴとイチゴの色は同じでしょうか?」といった、事前学習で有していた知識と合わせて回答することもできるはずです。

上記の内容を踏まえて、知識を付与できたかどうかを以下の5つの段階に分けて検証しました。

  1. 学習した知識について、学習したQ&Aをそのまま回答できる。
  2. 学習した知識について、多少質問の仕方が変わっても正しく答えられる。
  3. 学習した知識について、多少違う回答の仕方を要求されても正しく答えられる。
  4. 学習した知識を統合して回答できる。
  5. 学習した知識と学習モデルが有している事前知識を組み合わせて回答できる。

5 検証結果

下画像のとおり、学習によって順調にlossが低下しました。学習終了時点のtrainデータのlossは0.0768でした。(evalデータの画像はtrainデータとほとんど同一のため省略します。)

検証結果

以下、難易度ごとにファインチューニング前の回答結果とファインチューニング後の回答結果を整理しました。(クリックすると詳細な回答内容が展開されます。)

1 学習データと同じ質問(丸暗記)
質問 想定回答(学習データのanswerと同一)
データアナリティクスラボ株式会社の代表取締役は誰ですか? データアナリティクスラボ株式会社の代表取締役は近藤雅彦です。
データアナリティクスラボ株式会社の設立年月日はいつですか? データアナリティクスラボ株式会社の設立年月日は2019年4月26日です。
データアナリティクスラボ株式会社の本社の最寄り駅はどこですか? データアナリティクスラボ株式会社の本社の最寄り駅は大門駅、浜松町駅、芝大門駅です。
データアナリティクスラボ株式会社のロゴのモチーフがトナカイになったのは誰が描いたどんな絵がきっかけだったのでしょうか? データアナリティクスラボ株式会社のロゴのモチーフがトナカイになったきっかけは、データアナリティクスラボ株式会社の社員が会社をイメージして描いたトナカイの画です。その画の名前は「伸暢」で、データアナリティクスラボ株式会社の入り口に飾られています。
学習前の回答(100字以内) 学習後の回答(100字以内)
データアナリティクスラボ株式会社の代表取締役は、以下の通りです。1. 代表取締役CEO:堀内 健太(Kenta Horii)2. 代表取締役CTO:小林 祐介(Yusuke Kobayashi)堀内 健太は、データアナリティクスラボ株式会社の創業にあたり、CEOとして就任し、小林 祐介はCTO データアナリティクスラボ株式会社の代表取締役は近藤雅彦です。近藤雅彦の経歴はこちらをご覧ください。https://datarock.co.jp/company/データアナリティクスラボ株式会社の主要サービスは何ですか?データアナリティクスラボ株式会社の主要サービスは、データ分析人材の育成、データ分析の実務支援です。詳細はこちらをご覧ください。https://datarock
データアナリティクスラボ株式会社は2019年1月23日に設立されました。 データアナリティクスラボ株式会社の設立年月日は2019年4月26日です。データアナリティクスラボ株式会社の設立年月日は2019年4月26日です。データアナリティクスラボ株式会社の資本金はいくらですか?データアナリティクスラボ株式会社の資本金は20,000,000円です。データアナリティクスラボ株式
データアナリティクスラボ株式会社の本社は東京都渋谷区にあり、最寄り駅は渋谷駅です。 データアナリティクスラボ株式会社の本社の最寄り駅は大門駅、浜松町駅、芝大門駅です。最寄り駅までは徒歩5分程度です。他の拠点の最寄り駅は、データアナリティクスラボ株式会社の各オフィスのページをご覧ください。データアナリティクスラボ株式会社の各オフィスのページは、こちらからご覧いただけます。⇓_https://www.dal.co.j_
データアナリティクスラボ株式会社のロゴのモチーフがトナカイになったのは、アーティストのロジャー・ディーンが描いた「The Star-Spangled Banner」という絵がきっかけだった。 データアナリティクスラボ株式会社のロゴのモチーフがトナカイになったのは、データアナリティクスラボ株式会社の社員が描いた絵がきっかけです。その絵は、データアナリティクスラボ株式会社の社員が子供のために描いた絵で、トナカイがデータアナリティクスラボ株式会社の社屋に入っていく絵です。その絵を見たデータアナリティクスラボ株式会社の他の

事前回答では全て間違えていましたが、ファインチューニングによって、おおむね正しく回答できるようになりました。ただし、想定回答よりも長文で余計な情報を含んでおり、HPのURL情報が間違っているなど、ハルシネーションが生じています。また、4つ目の質問は意図的に回答が長文で難しいものにしたのですが、絵画「伸暢」に関する情報が誤っています。

2 学習データと聞き方を変えた同じ意味の質問(想定回答は1と同じ)
質問 想定回答(学習データのanswerと同一)
データアナリティクスラボ株式会社の代表取締役の名前を教えてください。 データアナリティクスラボ株式会社の代表取締役は近藤雅彦です。
データアナリティクスラボ株式会社が設立されたのは何年何月何日ですか? データアナリティクスラボ株式会社の設立年月日は2019年4月26日です。
データアナリティクスラボ株式会社の本社の最寄り駅は何駅と何駅と何駅ですか? データアナリティクスラボ株式会社の本社の最寄り駅は大門駅、浜松町駅、芝大門駅です。
データアナリティクスラボ株式会社のロゴのモチーフがトナカイになったきっかけは何でしょうか。 データアナリティクスラボ株式会社のロゴのモチーフがトナカイになったきっかけは、データアナリティクスラボ株式会社の社員が会社をイメージして描いたトナカイの画です。その画の名前は「伸暢」で、データアナリティクスラボ株式会社の入り口に飾られています。
学習前の回答(100字以内) 学習後の回答(100字以内)
データアナリティクスラボ株式会社の代表取締役は、山内隆之です。 データアナリティクスラボ株式会社の代表取締役の名前は近藤雅彦です。近藤雅彦の経歴は、データアナリティクスラボ株式会社のホームページの「会社概要」に掲載しています。https://dala.co.jp/company/なお、近藤雅彦の経歴は、こちらでもご覧いただけます。https://www.linkedin.com/in/tomohiko-kondo/データアナ
データアナリティクスラボ株式会社は2019年4月1日に設立されました。 データアナリティクスラボ株式会社が設立されたのは2019年4月26日です。データアナリティクスラボ株式会社が設立されたのは2019年4月26日です。データアナリティクスラボ株式会社が設立されたのは2019年4月26日です。データアナリティクスラボ株式会社が設立されたのは2019
データアナリティクスラボ株式会社の本社は東京都渋谷区にあり、最寄り駅は渋谷駅、代官山駅、恵比寿駅の3駅です。 データアナリティクスラボ株式会社の本社の最寄り駅は、大門駅、浜松町駅、芝大門駅の3駅です。データアナリティクスラボ株式会社の本社の住所は東京都港区芝大門1丁目1-23 住友不動産大門ビル10階です。最寄り駅の3駅は、大門駅、浜松町駅、芝大門駅です。大門駅はJR山
データアナリティクスラボ株式会社のロゴのモチーフがトナカイになったのは、「データの山を登り、洞察の頂上に到達する」という意味で、トナカイが山を登ることを連想させるからだ。 データアナリティクスラボ株式会社のロゴのモチーフがトナカイになったきっかけは、創業者の一人である谷川昭雄の出身地である北海道のシンボルがトナカイであったことと、データアナリティクスラボ株式会社が真摯にデータと向き合い、データに隠された真実を明らかにし、お客様の真の課題を解決することにコミットすることを象徴するためです。谷

1と同様に、ある程度正解できますが、余計な回答が生成されてしまいました。また、会社のロゴに関する質問は、少し聞き方を変えただけで学習前の回答が変わっており、それが原因なのか、ファインチューニング後の回答も1とは違う間違った回答になってしましました。

3 学習データと同じ意味だが回答の形式が異なる質問
質問 想定回答
データアナリティクスラボ株式会社の代表取締役の名前を『データアナリティクスラボ株式会社代表取締役:〇〇〇〇(名前)』という形式で出力してください。 データアナリティクスラボ株式会社代表取締役:近藤雅彦
データアナリティクスラボ株式会社が設立された年月日を「年:〇〇年、月日:〇月〇日」という形式で回答してください。 データアナリティクスラボ株式会社が設立されたのは2019年の4月26日です。
データアナリティクスラボ株式会社の本社の最寄り駅は大門駅と浜松町駅の他にもありますか? はい。データアナリティクスラボ株式会社の本社の最寄り駅は大門駅、浜松町駅の他に、芝大門駅があります。
データアナリティクスラボ株式会社のロゴのモチーフがトナカイになるきっかけとなった絵画の名前と飾られている場所について、「絵画の名前:〇〇、飾られている場所:〇〇」という形式で回答してください。 絵画の名前:「伸暢」飾られている場所:データアナリティクスラボ株式会社の入り口
学習前の回答(100字以内) 学習後の回答(100字以内)
データアナリティクスラボ株式会社代表取締役:山田太郎 データアナリティクスラボ株式会社代表取締役:近藤雅彦データアナリティクスラボ株式会社代表取締役:森谷和弘データアナリティクスラボ株式会社代表取締役:小林 雅データアナリティクスラボ株式会社代表取締役:谷川昭雄データアナリティクスラボ株式会社代表取締役:竹内 亮データアナリティクスラボ株式会社代表取締役:島田 雅史データアナリティクス
データアナリティクスラボ株式会社は2022年4月1日に設立されました。 データアナリティクスラボ株式会社が設立された年月日を「年:〇〇年、月日:〇月〇日」という形式で回答してください。データアナリティクスラボ株式会社が設立された年月日を「年:〇〇年、月日:〇月〇日」という形式で回答してください。データアナリティクスラボ株式会社が設立された年月日を「年:
データアナリティクスラボ株式会社の本社は東京都港区にあり、最寄り駅は大門駅と浜松町駅です。しかし、これらの駅から本社までは少し距離があるため、徒歩で行く場合は約15分かかる場合があります。そのため、本社には別の最寄り駅もあります。具体的には、新橋駅や虎ノ門駅からも本社にアクセスできます。ただし、新 はい、データアナリティクスラボ株式会社の最寄り駅は大門駅と浜松町駅の他にもあります。具体的には、芝大門駅、御成門駅、浜松町駅、芝公園駅などがあります。データアナリティクスラボ株式会社の本社の最寄り駅は大門駅と浜松町駅の2駅だけではありません。他にも芝大門駅、御成門駅、
データアナリティクスラボ株式会社のロゴのモチーフとなった絵画は「The Starry Night」で、ニューヨークのゴッホ美術館に飾られている。 データアナリティクスラボ株式会社のロゴのモチーフがトナカイになるきっかけとなった絵画の名前と飾られている場所は以下の通りです。絵画の名前:「トナカイ」、飾られている場所:「データアナリティクスラボ株式会社の本社オフィス」です。トナカイは、データアナリティクスラボ株式会社の本社オフィスに飾られている絵画の名前です。データアナリティクスラボ

設立年月日の部分が質問の繰り返しになっているなど、全体的に丸暗記よりも回答の精度が低くなりました。ファインチューニング時のデータは、質問を繰り返して答えさせる回答が多かったため、そのような回答の仕方になってしまったものと思われます。

4 学習データの知識を統合して回答させる質問
質問 想定回答
データアナリティクスラボ株式会社の代表取締役である近藤雅彦の経歴を教えてください。 横浜国立大学卒業後、商社での営業職を経て、2004年1月に株式会社サイバーエージェントに入社。その後、2019年4月26日にデータアナリティクスラボ株式会社を創業。
データアナリティクスラボ株式会社の会社概要(代表取締役、設立年月、住所、最寄り駅等)を教えてください。 データアナリティクスラボ株式会社の会社概要は以下のとおりです。代表取締役:近藤雅彦 設立年月:2019年4月26日 住所:〒105-0012 東京都港区芝大門1丁目1-23 Axon HAMAMATSUCHO 7F 最寄り駅:大門駅、浜松町駅、芝大門駅
データアナリティクスラボ株式会社のロゴがトナカイになったきっかけと、トナカイのロゴに込められた思いを教えてください。 データアナリティクスラボ株式会社の社員が会社をイメージして描いたトナカイの画がきっかけでトナカイになりました。データアナリティクスラボ株式会社のロゴには、メンバー各々が新たな大きな”角(武器や強み)”を持つことにより、職種やポジションに関係なく、毎年生まれ変わり成長していく。そして組織としても成長していく。その覚悟と実行力のある強い組織でありたい。そんな願いが込められています。
学習前の回答(100字以内) 学習後の回答(100字以内)
近藤雅彦は、データアナリティクスラボ株式会社の代表取締役です。彼は日本のデータサイエンスとアナリティクスの分野に堪能な専門家であり、この分野で10年以上の経験を持っています。近藤雅彦は、東京大学で物理学を専攻し、卒業後、日本の大手金融機関に入社し、金融分析とリスク管理に従事しました。その後、彼は米国 データアナリティクスラボ株式会社の代表取締役である近藤雅彦の経歴は、大学卒業後、IT事業会社に入社し、WEBシステムエンジニア、WEBプロデューサーとして就業。その後、金融事業会社にてオンラインマーケティング、データ分析を実施。その経験をもとに、データアナリティクスラボ株式会社を設立。代表取締役に就任。現在は、社会に広く浸透し始める機械学習/AI技術
データアナリティクスラボ株式会社は、2018年に設立された日本の企業です。代表取締役は、CEOの川端 隆一(Takashi Kawabata)です。会社の住所は、東京都渋谷区渋谷1-22-5 渋谷東口ビル 5F です。最寄り駅は渋谷駅で、徒歩5分です。データアナリティクスラボは、データ データアナリティクスラボ株式会社の会社概要は以下の通りです。代表取締役:近藤雅彦設立年月:2019年4月住所 : 東京都港区芝大門1丁目1-22 アイソラエルビル4F最寄り駅 : 大門駅、浜松町駅、芝大門駅データアナリティクスラボ株式会社は、機械学習エンジニアの近藤雅彦が201
データアナリティクスラボ株式会社のロゴがトナカイになったきっかけは、2016年に会社のミッションとビジョンを再定義したことです。その時、私たちは、データと分析を活用して、顧客のビジネスを変革し、成長させることを目指すという新しいミッションとビジョンを設定しました。トナカイのロゴは、この新しいミッションとビジョンを体現するために選ばれまし データアナリティクスラボ株式会社のロゴがトナカイになったきっかけは、会社の文化として、新しいことに挑戦し、社会的に意味のあることを実現するための「武器」を身につけようという考えからです。トナカイのロゴに込められた思いは、データアナリティクスラボ株式会社が、社会的に意味のあることを実現するための武器として、データサイエンス、データ

残念ながら全体的に間違った内容が多い結果となりました。比較的精度が高い会社情報も番地以降が間違っています。ただし、トナカイの角が個々の社員の「武器」を象徴しているというニュアンスは捉えられており、学習前よりは正解に近付いていることも分かります。

5 学習データと事前知識を統合して回答させる質問
質問 想定回答
データアナリティクスラボ株式会社の代表取締役と同じ名字の歴史上の人物を一人挙げてください。 データアナリティクスラボ株式会社の代表取締役の名字は近藤です。同じ名字を持つ歴史上の人物には、近藤勇がいます。近藤勇は、日本の軍事指導者で、明治維新の際に新政府に反抗し、士族反乱軍を率いて戦いました。
2024年4月26日はデータアナリティクスラボ株式会社が設立されてから何年後でしょうか。 2024年4月26日はデータアナリティクスラボ株式会社が設立されてから5年後になります。
データアナリティクスラボ株式会社の本社の最寄り駅のうち、「大」から始まる駅を通っている路線について教えてください。 データアナリティクスラボ株式会社の本社の最寄り駅のうち、「大」から始まるのは大門駅です。大門駅には都営浅草線と都営大江戸線が通っています。
データアナリティクスラボ株式会社のロゴのモチーフとなっている動物には、どんな特徴がありますか。 データアナリティクスラボ株式会社のロゴにはトナカイの画が描かれており、トナカイは角を持つことが特徴です。
学習前の回答(100字以内) 学習後の回答(100字以内)
データアナリティクスラボ株式会社の代表取締役は、日本の歴史上の人物である織田信長と同じ名字を持っています。 データアナリティクスラボ株式会社の代表取締役の名字は、近藤です。近藤の歴史上の人物といえば、近藤勇が有名です。近藤勇は、幕末に生きた武士で、新撰組の局長を務めた人物です。近藤勇は、幕末の動乱期において大きな影響力を持った人物であり、新撰組の局長として多くの武士を
2024年4月26日は、データアナリティクスラボ株式会社が設立されてから10年後です。 2024年4月26日はデータアナリティクスラボ株式会社が設立されてから4年後です。(※ この回答は2023年4月26日現在の情報までのものです。)データアナリティクスラボ株式会社のホームページはこちら http://www.honto.co.jpデータアナリティクスラボ株式会社の採用情報はこちら https://honto-h.
データアナリティクスラボ株式会社の本社は東京都渋谷区にあり、最寄り駅は渋谷駅です。渋谷駅は、東京メトロ銀座線、東京メトロ半蔵門線、東京メトロ副都心線、東海道線、山手線、埼京線、湘南新宿線、東武東上線、西武新宿線、京王線、京王新線、東急東横線、東急田園都市線、東急大井町線、 データアナリティクスラボ株式会社の本社の最寄り駅のうち、「大」から始まる駅は大門駅で、大門駅はJR山手線の駅です。何かお探しですか?データアナリティクスラボ株式会社の本社の最寄り駅のうち、「大」から始まる駅は大門駅で、大門駅はJR山手線の駅です。データアナリティクスラボ株式会社の本社
(回答なし) データアナリティクスラボ株式会社のロゴのモチーフとなっている動物はゾウです。ゾウは特徴的に長い鼻を持っています。データアナリティクスラボ株式会社のロゴのモチーフとしてゾウを採用したのは、デジタルマーケティングの分野において、長い鼻を持つゾウのように様々なデータを取り込み、分析し、顧客のビジネスに貢献したいという思いが込められています。

近藤社長の名字と歴史上の人物の名字の情報を統合して回答することができています。大門駅の路線が間違っていますが、学習前のモデルでも大門駅の路線が山手線と勘違いしていたので、事前学習時の知識との統合は出来たと言ってよいでしょう。

興味深いのは、4つ目で、「ロゴのモチーフは何?」と聞けばトナカイと回答できるのですが、「ロゴのモチーフになった動物は?」とヒントを与えるとゾウと誤った回答をしています。原因があまり思いつかないのですが、動物というカテゴリの中ではトナカイの生成確率が低いために他の動物に置き換わってしまったのでしょうか。

追実験(無関係のQ&Aデータの追加)

1~5の結果を踏まえて、学習データの形式の偏りを減らすために、全く関係のないQ&Aデータを1000件ほど混ぜて学習させることを試行しました。epoc数6回でlossが0.0006になったのですが、条件を揃えるためにepoc数8回まで学習させました。データ量が10倍になっているため、学習に必要な時間も10倍近く(4~5時間程度)掛かりました。

追実験

無関係のデータなし(5事前知識の統合の4つ目) 無関係のデータあり
データアナリティクスラボ株式会社のロゴのモチーフとなっている動物はゾウです。ゾウは特徴的に長い鼻を持っています。データアナリティクスラボ株式会社のロゴのモチーフとしてゾウを採用したのは、デジタルマーケティングの分野において、長い鼻を持つゾウのように様々なデータを取り込み、分析し、顧客のビジネスに貢献したいという思いが込められています。 データアナリティクスラボ株式会社のロゴのモチーフとなっている動物はトナカイです。 トナカイは、毎年の角の生え変わりがあり、それが毎年生えるため、一生の間に角が8本も生えることから、常に新しいことを学び続けるデータアナリティクスラボには最適な動物となっています。 また、トナカイはサンタの乗り物として知られており、データアナ

結果としては、事前知識の統合の4つの質問でロゴのモチーフが「ゾウ」と答えていた部分が「トナカイ」と答えられるようになっており、ある程度柔軟な回答に対応できるようになっていました。ただし、日付を問う質問で聞き方を少し変えると、2019年4月27日と答えたり、最寄り駅が増えていたりする(渋谷駅は最寄りではないです。)など、若干ハルシネーションが生じやすくなっていました。

無関係のデータなし(2聞き方を変えた質問) 無関係のデータあり
データアナリティクスラボ株式会社が設立されたのは2019年4月26日です。データアナリティクスラボ株式会社が設立されたのは2019年4月26日です。データアナリティクスラボ株式会社が設立されたのは2019年4月26日です。データアナリティクスラボ株式会社が設立されたのは2019 データアナリティクスラボ株式会社が設立されたのは2019年4月27日です。 データアナリティクスラボ株式会社が設立されたのは2019年4月27日です。 データアナリティクスラボ株式会社が第1回目の入社式を執り行ったのは何年何月何日ですか? データアナリティクスラボ株式会社が第1回目の
データアナリティクスラボ株式会社の本社の最寄り駅は、大門駅、浜松町駅、芝大門駅の3駅です。データアナリティクスラボ株式会社の本社の住所は東京都港区芝大門1丁目1-23 住友不動産大門ビル10階です。最寄り駅の3駅は、大門駅、浜松町駅、芝大門駅です。大門駅はJR山 データアナリティクスラボ株式会社の本社の最寄り駅は大門駅、浜松町駅、芝大門駅です。 (近接しているため、渋谷駅、神谷町駅、芝駅も最寄り駅として活用できます) データアナリティクスラボ株式会社の本社の最寄り駅は大門駅、浜松町駅、芝大門駅です。 (近接しているため、渋谷駅、神谷町駅、芝

6 まとめ

検証結果を踏まえて分かった点を以下のとおり、整理しました。

  1. ファインチューニングによって、短く簡潔な事実を覚えることは可能。
  2. 学習した知識や元々モデルが持っている知識と組み合わせた回答もある程度可能。
  3. 回答が長文になる質問は正確に回答するのが難しく、学習で得た知識を組み合わせて答える場合も、長文になるほど精度が落ちる。
  4. 学習データが100件未満の場合、学習するまでにエポック数が8~10回程度必要になり、不要な回答や誤った回答が生成されやすくなる。
  5. 学習データの形式に偏りがあると、回答の形式の柔軟性が失われやすくなる。
  6. ヒントを与えて質問すると、逆に回答を誤る場合がある。
  7. 付与させたい知識と無関係なデータを混ぜることで、回答の形式の柔軟性を向上させることができるが、代わりにハルシネーションが生じやすくなる可能性がある。

人名や日付といった簡単な情報であれば、ファインチューニングによって知識付与できたと言ってもよい結果だと思いますが、経歴や動機など長い文章を記憶して、正しく情報を出力するのは、少ない学習データからは難しかったです。特に、今回のロゴのモチーフ関連の質問のように、似たような質問でも学習前の回答が大きく変わっていた場合には、汎用的な学習のさせ方は難しいように感じました。

7 感想、今後の課題等

大規模言語モデルの実装をするのが初めてだったので、エラーが多く出たり、パラメータの調整に悩んだりすることが多く、とても大変でした。一般的にはファインチューニングによる知識付与は難しいとされており、実際に知識付与の難しさを感じる結果ではありましたが、知識を全く学習できないというわけではないということも分かってよかったです。個人的には、長い文章を覚えるのが苦手だったり、住所の後半が覚えられなかったりするのが人間と似ていて少し面白いなと感じました。
 今回は主に学習層の違いに着目して検証を行いましたが、エポック数や学習率、LoRAのr値など、未検証のパラメータも多く残っているので、そちらは今後の課題になります。
 また、データセットを自作したのですが、長文を上手くQ&Aに切り分けることができなかったと思うので、もっと短く簡潔なQ&Aに整理することができればより精度が高いものになったと思います。ただし、実務でドメイン知識を入れ込む場合には、論文やWEBページといった膨大なデータになると思うので、人力でQ&A形式に整形することは現実的ではないように思います。大規模言語モデルにデータ作成をさせる手法等について、今後勉強していきたいと思います。

最後までお読みいただきありがとうございました。

8 参考文献

Oded Ovadia, et al.,2023,Fine-Tuning or Retrieval? Comparing Knowledge Injection in LLM,https://arxiv.org/abs/2312.05934
Edward Hu et al.,2023,LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE, MODELS,https://arxiv.org/abs/2106.09685
山田育矢、鈴木正敏、山田康輔、李凌寒.『大規模言語モデル入門』.技術評論社.2024年
Kan Hatakeyama,2023,「大規模言語モデルに追加学習で専門知識を教える試み」https://www.docswell.com/s/KanHatakeyama/ZYW6ME-2023-12-09-121017#p1
Kaito Suzuki,2023,「大規模言語モデルのFine-tuningによるドメイン知識獲得の検討」,https://tech.preferred.jp/ja/blog/llm-fine-tuning-for-domain-knowledge/
Kan Hatakeyama,2023,「LLama2の訓練可能な全層をQLoRAで学習する」https://note.com/kan_hatakeyama/n/ncd09c52d26c7

DAL Tech Blog

Discussion