大規模言語モデルでドメイン知識を追加する際の思考メモ (知識・ファインチューニング・ハルシネーション etc)

本記事は、下書きをGPT-4に校正してもらったものです。
感想文ですのでご注意ください。

はじめに

Llama2のようなオープンな大規模言語モデルは、広範な知識を持つものの、常に最新の情報や特定の専門知識を持つわけではありません。そのため、特定のニーズに応じてモデルに新たな知識を加えることが求められることも少なくありません。

しかし、現状としては、言語モデルに新たな知識を簡単に追加するのは難しい状況です。例えば、Meta社などからの報告によれば、ファインチューニングを用いて言語モデルに知識を追加するアプローチは、一筋縄ではいかない可能性が示唆されています(preprintの研究より)。

しかし、新たな知識の追加が可能であれば、言語モデルの応用範囲や正確性が大きく向上すると考えられるため、この課題に取り組む価値は大きいと言えるでしょう。このテーマについてさまざまな試行錯誤を重ねており、以下ではその際に考えたポイントや感想をメモとして記述しています。


「知識」とは何か?: 大規模言語モデルの観点からの検討

近年、AIや言語モデルの進化に伴い、「知識」という概念についての議論が再燃しています。特に、大規模言語モデル(LLM)における「知識」の定義や範囲は、非常に興味深い問題となっています。

知識の定義について

知識の定義は、歴史的にも様々な議論が繰り広げられてきました。これは哲学や言語学、情報学などの領域でさまざまなアプローチや考え方が存在するためです。

しかし、LLMやAIの領域での議論をシンプルに進めるため、ここではあえて簡易的な定義を採用します。

具体的には、「知識」とは、特定の質問(Q)に対して正確な回答(A)を提供できる能力や情報を指すものとします。この定義を基に、LLMが「知識を持っている」とは、ある質問に対して正確な回答を提供できる状態を指します。

例として、もし「アルバート・アインシュタインの出身国は?」という質問に対してLLMが「ドイツ」と正確に回答できる場合、この特定の情報についての「知識」を有していると評価されます。

LLMがQ&Aに答えるための必要要件

LLMや他のAIモデルがQ&Aに答える際の過程は、人間が質問に答えるメカニズムと多くの共通点を持ちながら、いくつかの異なる点もあります。ここでは、質問応答のための基本的な要件を整理し、その中でLLMがどのように機能するかを考察します。

知識の要件

  1. 記憶する: これはデータベースや人間の記憶のように、情報を保存しておく作業に相当します。LLMの場合、トレーニングデータとして与えられたテキストの情報が「記憶」としてモデルの内部に保存されます。例えば、「アルバート・アインシュタインの出身国はドイツである」という事実がモデルのトレーニングデータに含まれていれば、この情報はモデルの内部で「記憶」として持たれます。

  2. 関係性を理解する: これは情報の意味や文脈を理解し、それに基づいて質問に対する回答を生成する能力に関連しています。具体的には、質問文とモデルの内部の「記憶」の内容との関連性を理解し、適切な答えを導き出すプロセスが含まれます。

「関係性を理解する」という点は、質問応答システムや大規模言語モデルにおける核心的な要件の一つです。この過程は、単に記憶している情報を再生するだけではなく、質問の文脈や意味を解釈し、適切な情報を「記憶」から抽出する作業を含みます。

関係性の理解とは

具体的には、「アルバート・アインシュタインの出身国は?」という質問に対して、モデルが「アルバート・アインシュタインの出身国はドイツである」という記憶内容と結びつける過程を指します。この過程で、モデルは「アルバート・アインシュタイン」というキーワードや「出身国」という情報要求を認識し、「ドイツ」という回答を生成します。

人間の理解との比較

例えば「教科書の内容を覚える」する場面を考えると、人間は情報を暗記するだけでなく、その背後の意味や文脈を理解することが求められます。特定の質問や状況に対して、暗記した情報を適切に活用する能力は、情報の「関係性を理解する」能力に基づいています。教科書の情報を単に丸暗記しても、それを実際の試験や実生活で適切に利用できないのは、この関係性を十分に理解していないからです。

LLMの「記憶」と「理解」

LLM(大規模言語モデル)は、その名の通り巨大な量のテキスト情報を学習し、その結果としてある種の「記憶」と「理解」を持つように見えますが、これらの概念は人間のそれとは根本的に異なります。以下に、LLMにおける「記憶」と「理解」の本質について詳しく掘り下げてみましょう。

記憶

LLMの「記憶」とは、大量のテキストデータから得られたパターンや関係性を学習した結果のことを指します。これは、モデルの内部の重みとしてエンコードされ、与えられた入力に対する出力を生成する際の基礎となります。(あくまで、学習データに基づく確率的な関係性を表現しているに過ぎません)

理解

LLMが「理解」という言葉を用いても、これは人間の「理解」とは異なるものです。LLMはテキストのパターンを学習することで、与えられた質問やプロンプトに対して適切な出力を生成する能力を持ちますが、これは深い意味での理解や自覚を持っているわけではありません。質問文と学習済みの「記憶」を結びつける能力は、多数の例文やパターンを通じて学習された結果として得られるものです。

追加のファインチューニングを通じて知識を取り込む際の課題とは

LLMの構築方法

LLMは、大きく分けて2つのステップから成り立っています。
1) 事前学習、ここで大量のテキストデータをもとにモデルが言語の基本的な構造や意味を学習します。
2) ファインチューニング、ここではユーザーの質問に応じて具体的な回答を提供できるように、会話の形式を学びます。

十分な計算リソースとデータが利用可能であれば、事前学習の段階で特定のドメインの知識を取り込むことは理想的です。これにより、モデルはその特定のドメインに関する情報をより深く学習することができます。しかし、このアプローチは高コストであり、多くの研究者や開発者には手が届かない可能性が高いです。

そのため、多くの場合、既存のプレトレーニング済みのLLMを基盤として、追加のファインチューニングを行うことで特定のドメイン知識を取り込む方法が選択されます。

LLMに特定のドメインの知識を取り込む方法

一般的な手法としては、1)事前学習や2)ファインチューニングが終了した公開モデルに対して、3)特定のドメインに関連するテキストデータを更に学習させる方法が考えられます。この段階の学習は、モデルが既に持っている一般的な知識を基盤に、特定の分野や領域の詳細な知識を取り込むことを目的としています。

この3)のステップを何と呼ぶかは、業界や文献によって異なる場合があります。多くの場合「ファインチューニング」と呼ばれることが多いですが、公開モデルに新たな知識を追加する意味で「追加学習」とも表現されることがあります。どちらの名称を使用するかは、文脈や目的に応じて選択するとよいでしょう。

なぜ追加で知識を入れるのが難しいのか?

1)、2)、3)のステップにおいても、LLMが行っている作業の本質は変わりません。具体的には、提供されたテキスト(トークン列)の確率的な関係性を学習することが主要なタスクです。そのため、原則としてはファインチューニングや追加学習を通じて新しい知識をLLMに組み込むことは可能なはずです。

しかし、実際にファインチューニングを試みた際に、思い通りの結果が得られないことが多いことに多くの研究者や開発者が直面しています。

追加のドメイン特化知識を導入する際の難しさについて、様々な点が考慮されており、現在も整理の過程にあるとのことです。
一つの顕著な問題として、学習データの量が挙げられます。多くの基本的なモデルは、例えばアルバート・アインシュタインの出身地などの一般的な情報に答えることができます。これは、モデルが事前学習の段階でアインシュタインに関する様々なテキスト(Wikipedia、書籍、ウェブ記事、ニュースなど)を読み込んでいるためです。
この際、同じ情報が複数のテキストに重複して現れることが一つのキーとなり、LLMはその重複を通じて情報をより深く学び取っています。

しかし、この学習プロセスは人間のそれとは異なります。人間はある情報を一度だけ聞いても、その情報を適切に記憶することができることが多いです。これに対し、LLMは多くの情報を繰り返し受け取ることで一つの知識を獲得する傾向にあります。この過程は、「LLMは100回聞いて1つ学ぶ」とも表現できるでしょう。この特性は、LLMの学習に多量のテキストデータが要求される背景とも関連しています。

特定の専門ドメインに関するデータは、一般的な情報に比べてその量が限られています。そのため、学習効率が人間に比べて低いLLMがこれらの専門的な情報を獲得するのは、現行のLLMのフレームワークの中では困難であると言えます。

このあたりの細かな内容と検討結果については、そのうちpreprintに纏める予定です。

ハルシネーションはなぜ起きるのか?

専門領域におけるハルシネーションの問題

特定のドメインに関するデータが不足している場合のLLMは、事実と異なる情報を出力することがあります。この現象を「ハルシネーション」と呼びます。一方で、一般的な知識に関しては、多様なデータからの情報を基にしているため、回答の正確性が高まります。この知識の「解像度」の違いが、ハルシネーションの起きやすさに影響しているとの仮説は、言語モデルの学習メカニズムを考慮すると納得がいく考え方です。

ハルシネーションが起きやすい文章の特徴

ユーザーが求めていた正確なテキストとハルシネーションが発生した文章は、LLMの内部的な評価では類似した内容として扱われることが多いです。その結果、これらの文章のベクトル表現(embedding vector)は互いに非常に近い値を持つ可能性が高まります。

例して、次の英文に対するllama2-7b-instructのembed表現を確認してみます。

txt_list=[
    "Dr. Kan Hatakeyama was awarded the Ig nobel prize in 2023.",
    "Dr. Kan Hatakeyama was awarded the Nobel prize in 2123.",
    "Dr. Kan Hatakeyama is a renowned psychologist who discovered an important psychological law in 2039",
    "Kan Hatakeyama is a member of the J-pop idol group",
    "Albert Einstein was a Nobel Prize-winning physicist.",
    "Johann Sebastian Bach is a well-known composer",
]

日訳
「Hatakeyama Kan博士は2023年にイグノーベル賞を受賞しました。」「Hatakeyama Kan博士は2123年にノーベル賞を受賞しました。」
「Hatakeyama Kan博士は2039年に重要な心理法則を発見した有名な心理学者です」
「Hatakeyama KanはJ-POPアイドルグループのメンバーです」
「アルバート・アインシュタインはノーベル賞を受賞した物理学者でした。」
「ヨハン・セバスティアン・バッハは有名な作曲家です」

(※架空の文章を作っています)

Llama 2は、Dr. Hatakeyama Kanの情報をほとんど持っていない可能性が高いです。従って、Dr. Hatakeyamaについての具体的な知識や背景が不足しており、その情報の解像度はかなり低いと考えられます。実際、過去に学会の予稿集を基に学習させた結果、筆者の実際の所属よりも、J-POPアイドルグループのメンバーという誤った回答をしたことがあります(関連記事参照)。

この事から、Llama2がDr. Hatakeyamaの情報に関して持っている知識は不正確で、解像度が低いと推測されます。これは、真実と誤情報のテキストがLlama2の内部で似たようなベクトル表現(embed表現)を持つことを意味し、ハルシネーションを引き起こしやすい状況にあると言えるでしょう。

続いて、各テキストのベクトル表現を計算して詳しく分析してみましょう。

def calc_vec(input_text, model, tokenizer):
    input_ids = tokenizer.encode(input_text, return_tensors="pt")

    model.eval()
    with torch.no_grad():
        outputs = model(input_ids, output_hidden_states=True)

    #list形式でtensorが入っているoutputsを1次元のnumpyに変換
    vec_list=[]
    for v in outputs[-1]:
        mean_v=v.mean(axis=1)
        vec_list.append(mean_v.numpy().flatten())

    vec=np.array(vec_list).flatten()

    return vec

embed表現に対するコサイン類似度の計算は以下のコードで計算できます。

def calc_sim(txt_list, model, tokenizer):
    vec_list=[calc_vec(txt, model, tokenizer) for txt in txt_list]

    vectors= np.nan_to_num(np.array(vec_list), nan=0, posinf=0, neginf=0).astype(np.float32)
    sim= np.zeros((vectors.shape[0], vectors.shape[0]))

    for i in range(len(vectors)):
        for j in range(len(vectors)):
            #コサイン類似度
            sim[i][j] = np.dot(vectors[i], vectors[j]) / (np.linalg.norm(vectors[i]) * np.linalg.norm(vectors[j]))

    return sim

各文章(それぞれ0,1,2,…番とします)ごとのコサイン類似度は以下の図のようになります。

このヒートマップからは、ファインチューニングによりモデルが正確な情報をどれほど良く理解しているか、また、それに基づいてどのようなベクトル空間上での位置関係が形成されているかが確認できます。

例えば、「Hatakeyama Kan博士は2023年にイグノーベル賞を受賞しました」という文章に対して、以下のようなコサイン類似度が得られました。

  • 0.998「Hatakeyama Kan博士は2123年にノーベル賞を受賞しました」

  • 0.989「Hatakeyama Kan博士は2039年に重要な心理法則を発見した有名な心理学者です」

  • 0.933「Hatakeyama KanはJ-POPアイドルグループのメンバーです」

  • 0.990「アルバート・アインシュタインはノーベル賞を受賞した物理学者でした」

  • 0.955「ヨハン・セバスティアン・バッハは有名な作曲家です」

これらの結果から、Llama2は「Hatakeyama Kan博士が2023年にイグノーベル賞を受賞した」という事実と、他の異なる事実や情報に非常に近いベクトル表現を持つと判断しています。これは、Llama2にとっては、Hatakeyama Kan博士に関する情報や背景知識が不足しているため、様々な情報が似たような内容として認識される可能性が高く、ハルシネーションしやすい状態であることを示唆しています。

ファインチューニングによるテキストの区別

Llama-2に対して、以下のような架空の文章を追加で学習させてみました。 "In 2033, Dr. Kan Hatakeyama won the Ig Nobel Prize for his research on a fully automatic material synthesis system…" (2033年、Kan Hatakeyama博士は全自動材料合成システムの研究でイグノーベル賞を受賞した…)

具体的な学習条件や手法はこの範囲では省略しますが、この追加学習を経た後、モデルは「Dr HatakeyamaはIg Nobel Prizeを受賞しました」というような回答を正確に返すことができるようになりました(ハルシネーションの抑制)。
学習後のモデルを用いてテキストのベクトル表現(embed表現)を再計算し、その結果をヒートマップとして表示すると、以下のような図が得られます。

「Hatakeyama Kan博士は2023年にイグノーベル賞を受賞しました。」という情報に基づくコサイン類似度の変化は次の通りです。

0.984「Hatakeyama Kan博士は2123年にノーベル賞を受賞しました。」 0.912「Hatakeyama Kan博士は2039年に重要な心理法則を発見した有名な心理学者です」
0.770「Hatakeyama KanはJ-POPアイドルグループのメンバーです」
0.863「アルバート・アインシュタインはノーベル賞を受賞した物理学者でした。」
0.763「ヨハン・セバスティアン・バッハは有名な作曲家です」

追加の学習によって、Hatakeyama Kan博士に関する文のコサイン類似度が変動したことがわかります。この結果は、LLMのモデルが新しい情報を取り込むことで、その事象に対する理解の解像度が高まっていることを示しています。

結論として、LLMの学習プロセスは、異なる事象やトークン列間のベクトル表現(embed表現)をより適切な配置へと調整する作業とみなすことができます。

言語学との対比

言語モデルの学習を通じての目的事象への解像度の向上は、ソシュールの言語学の概念や言語的相対論(サピア=ウォーフの仮説)を思い起こさせます。

日本語の例を取ると、蝶と蛾は明確に区別されますが、フランス語やドイツ語では両者を同一視する傾向が見られることが知られています。議論は存在しますが、イヌイット語では雪の種類を示すための多くの単語が存在するとも言われています。
興味や必要性に基づいて、特定の事象に関する言語的な差異や細かい区別が生まれることが示唆されます。対照的に、興味が薄い事象や熟知していない事象に対しては、言語的な差異を認識しづらく、一般化や混同が起きやすいです(例:興味のない人にはアイドルの顔が皆同じように見える現象)。


まとめると、LLMが「ハルシネーション」を起こす原因として、特定の事象や概念に対する理解や解像度が不十分であることが挙げられます。この場合、元のモデルはノーベル賞とイグノーベル賞のような細かな違いを正確に捉えられず、誤った回答を返してしまう可能性が高まります。

まとめ

大規模言語モデル(LLM)をファインチューニングで更新する際の複数の課題について、基本的な側面から考察しました。

理論的には、ファインチューニングを用いてQ&A向けの新しい知識をLLMに追加し、正確な回答を取得すること(つまり、ハルシネーションを減少させること)は可能なはずです。
しかし、実際には、どのように効果的にモデルを学習させるかに関しては、まだ解明されていない点も多く存在します。現在、多くのファインチューニングの試みを進行中で、成果が得られ次第、実用的な側面についても詳しく整理したいと考えています。

この記事が気に入ったらサポートをしてみませんか?