そろそろ LLM の基礎の話をしようか
こんにちは、フロントエンドエンジニアのたにもとです。
近年、様々なLLM(大規模言語モデル)が登場し、開発現場だけでなく、ブラウザやスマホアプリなど、あらゆる端末やシーンで活用されています。
認知が進み、様々な世代で利用するツールとして定着し始めています。。
一方で、「LLM の出力に満足がいっていない」と感じる方もいらっしゃるのではないでしょうか。
これは、LLM が凄まじいスピードで発展してきたため、LLM に対応する知識が追いついていないことが原因の一つだと考えました。
この記事では、LLM の基礎についてインプットし、より良い出力を得るためのヒントにしていただければ幸いです。
本記事で記載している内容は下記の通りです。
LLM とは何か?
まず、LLMについて整理しましょう。
LLM を自然言語を使ったレスポンスが返ってくるようにするにはトレーニングが不可欠です。
現在利用されている LLM アプリケーションはトレーニングされたモデルを利用したサービスです。
LLM のトレーニングには高度なスキル、計算リソース、そして膨大な時間が必要。
そのため、私たちが LLM アプリケーションで利用するのは、すでにトレーニング済みのモデルが利用されることが一般的です。
LLM を効果的に利用するためには、どのようなトレーニングが行われたのかを理解することが非常に重要です。
ここでいうトレーニングとはデータの収集や事前学習、ファインチューニングのことを指しており、どのようなトレーニングを経たモデルかを理解することで精度の高いプロンプトを検討することが可能となるでしょう。
LLM の目指す場所
LLM は何を目指しているのでしょうか?
LLM は、トレーニングデータを単に再現することを目指しているわけではありません。
その中で見出したパターン、特に論理的な推論や展開の仕方を抽象化することを目指しています。
抽象化により、LLM はトレーニングデータとは異なる新たなプロンプトに対しても柔軟に補完できるようになります。
LLM の「世界の見え方」と情報の処理
LLM は人間とは異なる方法でテキストを処理しています。
LLM は文字列を1文字ずつ読んでいるわけではなく、「トークン」に分解して解析します。
テキストを送信すると、LLM は「トークン」と呼ばれる複数の文字チャンク(塊)に分解します。
通常のトークンは3〜4文字長ですが、よく使われる単語や文字列にはより長いトークンも存在します。
そして、モデルが使用するトークンの集合を「語彙」と呼びます。
モデルにとってテキストの長さは、トークンの数で決まります。
プロンプト内のトークンが増えれば、プロンプトを読み込む時間もトークンに比例して増えますし、出力を生成する時間も出力されるトークン数に比例します。
LLM の特徴の一つとしてトークンを分解して再構築するような作業を正しく行えないことがあります。
具体的には、小文字を大文字に変換するような作業です。
小文字と大文字でトークンの数が異なるため、想定通りの結果になるとは限りません。
もちろんトレーニング量を増やすことで精度は上がりますが、そもそも大文字にするだけであれば LLM を利用する必要はないので別のツールを利用するのがオススメです。
テキストは「トークナイザー」を通してトークン列に変換され、そのトークンが LLM に送られます。
全てのモデルは固定されたトークナイザーを利用しているため、自分が使うモデルのトークナイザーを理解しておくことが大切です。
トークナイザーの特徴を理解することでより良いプロンプトの検討に役立つでしょう。
また、ほとんどのトークナイザーは英語に最適化されているため多言語(日本語など)だと効率が下がることがある点も気をつけたいポイントです。
LLM の応答生成メカニズム:「推測」と「予測」
LLM は常に「推測」しています。
コンテンツに見られるパターンを模倣するのが得意だと言えます。
LLM は、オートリグレッシブモデル(自己回帰モデル)です。
これは、1トークンずつ処理を行い、次に最も可能性が高いトークンを予測し、前の予測に依存してトークンを生成する仕組みのことを言います。
LLM はパターンを認識するのが得意なため、一度パターンに入ってしまうとパターンの繰り返し、そのパターンを破壊するよりも続ける傾向にあります。
その結果、繰り返しの多い出力が発生します。
人間は思考を途中で止めることができますが、LLM は違います。
モデルはトークンを予測し出力し続け、途中で止まることはありません。
LLM は最も可能性の高いトークンを求めます。
もっと言うとありえる全ての確率を計算してから1つを選んでいるということです。
このトークンを選択する仕組みは「サンプリング」と呼ばれています。
出力の多様性を調整するパラメーターを変更するとこのサンプリングの精度に変化がでます。
LLM のハルシネーション
LLM の利用で特に注意が必要な現象の一つが「ハルシネーション」です。
ハルシネーションとは、モデルが事実と異なるがもっともらしく見える情報を生成してしまう現象です。
ただ、モデルの視点からはハルシネーションと他の適切な補完とを区別できません。
そのため、「作り話をしないで」といったプロンプトは効果がないとされています。
ハルシネーションの解決策としては、検証可能な背景情報(プロンプトに含める情報)を提供させることです。
モデルには、プロンプトが正しいものとみなす「真実バイアス」という特性があります。
この特徴によってハルシネーションを誘発することがあります。
プロンプトが実在しないものであったとしても存在するものだとして想定し続けてしまうからです。
しかし、仮説的なシナリオや反事実的なシナリオをモデルに評価させたい時には有効です。
例えば、「〇〇の前提で考えてください」と書かずに、「〇〇が始まって数年が経ちました」のように記述すると、真実バイアスを利用して上手く出力をコントロールすることができるでしょう。
LLM の基礎まとめ
いかがでしたでしょうか?
LLM の基礎について少しでも学びになった点があれば大変嬉しく思います。
LLM の基本特性を学んだことによって、LLM について理解が深まりこれまでのプロンプトに誤りがあったことに気づかされました。
一方でプロンプトやルールを工夫すれば人に近い形で思考させることも可能であるとも言えます。
引き続き効率的な業務が行えるように LLM の基本特性の理解を深め、プロンプトやルールの設定に関する知見をためていきたいと思います。
Gaji-Labo は LLM や AI エージェントを利用した際に得た知見を日々更新しています。
事業に AI エージェントを活用した開発フローを構築したいなどのお悩みがありましたらお気軽にご相談ください!
Gaji-Labo は Next.js, React, TypeScript 開発の実績と知見があります
フロントエンド開発の専門家である私たちが御社の開発チームに入ることで、バックエンドも含めた全体の開発効率が上がります。
「既存のサイトを Next.js に移行したい」
「人手が足りず信頼できるエンジニアを探している」
「自分たちで手を付けてみたがいまいち上手くいかない」
フロントエンド開発に関わるお困りごとがあれば、まずは一度お気軽に Gaji-Labo にご相談ください。
オンラインでのヒアリングとフルリモートでのプロセス支援にも対応しています。
Next.js, React, TypeScript の相談をする!Gaji-Labo Culture Deck
Gaji-Laboでは、 Next.js 経験が豊富なフロントエンドエンジニアを募集しています
弊社では Next.js の知見で事業作りに貢献したいフロントエンドエンジニアを募集しています。大きな制作会社や事業会社とはひと味もふた味も違う Gaji-Labo を味わいに来ませんか?
Next.js の設計・実装を得意とするフロントエンドエンジニア募集要項
もちろん、一緒にお仕事をしてくださるパートナーさんも随時募集中です。まずはお気軽に声をかけてください。お仕事お問い合わせや採用への応募、共に大歓迎です!