学習コースLearn
大規模言語モデル(LLM)
文章を生成・理解する大規模言語モデルの仕組みを、Transformer と事前学習の基礎から、活用と課題まで順を追って学ぶモジュールです。各ステップは「概要 → 仕組み(座学)→ コードで動かす」の3層で進みます。ページ内には手を動かせるデモを3つ用意しました。自然言語処理(NLP)モジュールの続きにあたります。
この教材は日本語のみで提供していますThis learning material is available in Japanese only.
はじめにIntroduction
このモジュールの全体像
大規模言語モデル(LLM: Large Language Model)とは、膨大なテキストで学習した巨大なニューラルネットワークで、文章の生成・要約・翻訳・質問応答などを 1 つのモデルでこなします。中心にあるのは Transformer というアーキテクチャと、大量のテキストから「次に来る単語」を当て続ける事前学習です。NLP モジュールで見た「テキストを数値にして扱う」という発想が、規模を極端に大きくすることで新しい段階に入った、と考えると分かりやすいでしょう。
LLM は、いきなり賢く生まれるわけではありません。多くのモデルは、次のような段階を踏んで作られ、使われます。大量のテキストで土台を作り(事前学習)、目的に合わせて整え(微調整・指示チューニング)、使うときに指示(プロンプト)を与えて、1 語ずつ文章を生成します。
LLM ができるまでと、使われ方
このモジュールは、上の流れを左から順にたどります。各ステップは次の3層で構成します。
- 概要:その仕組みが何のためにあるのか、あらましをつかむ。
- 仕組み(座学):背後にある考え方・用語・式を、ていねいに理解する。
- コードで動かす:Hugging Face などの定番ライブラリや、ページ内デモで実際に動かして確かめる。
手を動かす題材には、ページ内の小さなサンプル文と、Hugging Face Hub で公開されている実在のオープンモデルだけを使います。特定の製品の未公開スペックには立ち入らず、仕組みの一般論として学びます。
大規模言語モデルとは
What is an LLM概要Overview
大規模言語モデルは、「次にどんな単語が来そうか」を膨大なテキストから学んだモデルです。この単純な目標を、非常に大きなモデルと大量のデータで徹底的に追求すると、文章を書く・要約する・翻訳する・質問に答えるといった、さまざまな能力が同時に現れます。これが LLM の面白さであり、驚きでもあります。NLP モジュールで学んだ「整える → 数値にする → モデルにかける」という流れの、その先にある世界です。
- 生成:与えられた書き出しの続きを作る。物語・メール・コードなど。
- 要約:長い文章を短くまとめる。
- 翻訳:ある言語の文を別の言語へ変換する。
- 質問応答:質問に対して、文章で答える。
仕組みHow it works
GPT と BERT の系譜
現代の LLM の土台は、2017 年に登場した Transformer というアーキテクチャです。ここから大きく 2 つの系譜が伸びました。BERT(Devlin ら, 2018)は文の両方向の文脈を使い、文章の一部を隠して当てる「マスク言語モデル」で事前学習します。分類や検索など、文章を理解する課題に強いモデルです。いっぽう GPT 系は、前から順に次の単語を予測する「自己回帰」で学習し、文章を生成することに向いています。私たちが「対話する AI」として触れる LLM の多くは、この生成型の流れにあります。
スケール則と規模の効果
LLM の「大規模」とは、主に パラメータ数(モデルが持つ重みの数)、学習データ量、計算量の 3 つが大きいことを指します。研究の中で、これらを増やすほど、次単語予測の誤差(損失)が滑らかに下がっていく傾向が観察されてきました。これをスケール則(scaling laws)と呼びます。さらに、ある規模を超えると、それまで苦手だった課題を急にこなせるようになる現象も報告されており、規模そのものが能力の源泉のひとつになっています。ただし、規模を上げれば何でも解けるわけではなく、限界や副作用(Step 6)も同時に大きくなります。
この Step のまとめ
LLM は「次の単語を当てる」学習を、巨大なモデルとデータで突き詰めたもの。Transformer を土台に GPT 系(生成)と BERT 系(理解)が育ちました。規模を上げると性能が滑らかに伸びる(スケール則)のが、大きな特徴です。
Transformer と自己注意
Transformer & self-attention概要Overview
LLM の心臓部が Transformer(Vaswani ら, 2017「Attention Is All You Need」)です。その要は自己注意(self-attention)という仕組みで、文の中のどの語とどの語が関係するかを、並列に、直接捉えます。ここではまず、テキストがモデルに入る前の「トークン化」をおさらいし、続いて自己注意の直感を追います。
仕組みHow it works
トークン化のおさらい(サブワード)
モデルはテキストをそのまま読むのではなく、まずトークンという単位に区切ります。NLP モジュールでは単語で区切りましたが、現代の LLM は単語より細かいサブワードで区切るのがふつうです。よく使う語はそのまま 1 トークンに、めずらしい語や未知語はいくつかの小さな断片に分けます。こうすると、語彙の数を抑えつつ、初めて見る語や表記ゆれにも対応できます。代表的な方式に BPE(byte pair encoding) や WordPiece、SentencePiece があります。各トークンには番号(ID)が割り当てられ、その ID が数値ベクトル(埋め込み)に変換されて、モデルに入ります。
自己注意:Query・Key・Value
自己注意は、各トークンが「文中のほかのトークンをどれだけ見るか」を決める仕組みです。各トークンの埋め込みから、3 種類のベクトルを作ります。
- Query(クエリ, Q):「私は何を探しているか」を表す。
- Key(キー, K):「私は何を提供できるか」を表す。
- Value(バリュー, V):実際に受け渡す中身。
あるトークンの Query と、ほかの各トークンの Key との内積で「どれだけ関係するか」のスコアを測り、ソフトマックスで合計 1 の重みに変えます。この重みで各トークンの Value を混ぜ合わせたものが、そのトークンの新しい表現です。式で書くと次のようになります。
softmax: スコアを合計 1 の重みに変える 最後に重みで Value を混ぜ合わせる
位置エンコーディングとマルチヘッド
自己注意そのものは、語の順番を区別しません(すべての語を同時に見るため)。そこで、各トークンに「何番目か」の情報を足します。これが位置エンコーディング(positional encoding)です。また、注意は 1 種類ではなく、複数の観点で並行して行います。これをマルチヘッド注意と呼び、ある観点は文法的な係り受けを、別の観点は意味的な関連を、というように役割を分担します。これらを束ね、正規化や全結合層を重ねた 1 かたまりを Transformer ブロックと呼び、これを何十層も積み重ねたものが LLM の本体です。
サブワード・トークン化
テキストを入力すると、説明用の簡易的なサブワード分割でトークンに区切り、チップとトークン数を表示します。英語は小さなサブワード辞書による最長一致(WordPiece 風に、語の途中の断片は ## を付けて表示)、日本語は小さな辞書による区切りです。実務では tiktoken(BPE)や SentencePiece などの学習済みトークナイザを使います。ここでは区切りの雰囲気をつかむための簡易版です。
コードで動かすRun the code
実務では、モデルに付属する学習済みのトークナイザをそのまま使います。Hugging Face の AutoTokenizer なら、モデル名を指定するだけで、そのモデルと同じ区切り方を再現できます。
# pip install transformers
from transformers import AutoTokenizer
tok = AutoTokenizer.from_pretrained("gpt2")
text = "Tokenization is unbelievably useful."
tokens = tok.tokenize(text)
print(tokens)
print(len(tokens), "tokens")
['Token', 'ization', 'Ġis', 'Ġunbeliev', 'ably', 'Ġuseful', '.']
7 tokensここでは tiktoken や SentencePiece と同じ考え方の サブワード分割が起きています。Tokenization が Token と ization に分かれ、めずらしい語 unbelievably はさらに細かく割れています。Ġ(先頭の記号)は「直前に空白があった」ことを表す、GPT 系トークナイザの目印です。
この Step のまとめ
Transformer の要は自己注意。各トークンの Query と Key の内積で「どこを見るか」を決め、ソフトマックスの重みで Value を混ぜます。入り口ではテキストをサブワードのトークンに区切ります。次は、このモデルをどう学習させるかを見ます。
事前学習と学習の流れ
Pre-training概要Overview
LLM がことばを扱えるようになる中心が事前学習です。生成型の LLM は、大量のテキストを読みながら「次に来る単語」をひたすら予測し続けることで学びます。ここでは、その仕組みと、事前学習のあとに続く微調整・指示チューニング・人間フィードバックの流れを追います。
仕組みHow it works
次単語予測(自己回帰)
生成型 LLM の学習目標は、とてもシンプルです。文章の途中まで(これまでの単語列)を見て、次の 1 語を当てる。これを文章の先頭から最後まで、あらゆる位置で繰り返します。モデルは各時点で「次の語の確率分布」を出し、正解の語の確率が高くなるよう重みを少しずつ調整します。この、直前までの出力を条件に次を予測するやり方を自己回帰(autoregressive)と呼びます。式で書くと、文章全体の確率を次のように分解して扱っていることになります。
生成時は、この分布から 1 語を選び、それを条件に加えて次の 1 語を選ぶ、を繰り返す
事前学習コーパス
事前学習には、非常に大量のテキストを使います。よく使われる公開の資源として、百科事典の Wikipedia、ウェブを広く収集した Common Crawl、研究用に整理された大規模コーパス The Pile などが知られています。データの質と多様性、そして偏りをどう扱うかが、モデルの性質を大きく左右します。
事前学習のあと:微調整と指示チューニング
事前学習だけのモデルは「続きを書く」のは得意でも、人の指示に従うのは苦手です。そこで次の段階が続きます。
- ファインチューニング:目的の課題(分類・要約など)のデータで追加学習し、その課題に合わせる。
- 指示チューニング(instruction tuning):「指示と、その理想的な応答」の例を多数学ばせ、指示に従う挙動を身につけさせる。
- 人間フィードバックによる強化学習(RLHF):モデルの複数の応答に人が good/bad の好みを付け、その好みを再現する報酬をもとに、より好ましい応答へ調整する。
この積み重ねによって、単なる「続きを書く機械」が、指示に応じて役立つ応答を返すモデルへと近づいていきます。
次の単語を予測
下の小さなコーパスから、単語のつながり(bigram・trigram)の頻度を数えます。プレフィックス(直前の語)を入力すると、次に来る単語の確率を頻度から計算して表示します。直前 2 語で数えられる(trigram)ときはそれを使い、なければ直前 1 語(bigram)にバックオフします。温度スライダで分布の偏りを変えられます(温度が低いほど高確率の語に集中し、高いほど平らになります)。確率は p1/T を正規化した値です。
コーパス(この 8 文だけを学習に使います):
私 は 猫 が 好き です / 私 は 犬 が 好き です / 私 は 本 を 読む / 猫 が 魚 を 食べる / 犬 が 肉 を 食べる / 猫 が 好き です / 犬 も 好き です / 私 は 音楽 を 聞く
この Step のまとめ
生成型 LLM は「次の単語予測」を大量のテキストで繰り返して学びます(自己回帰)。事前学習で土台を作り、ファインチューニング・指示チューニング・RLHF で、指示に従う役立つモデルへと整えます。デモの頻度モデルは、その考え方をごく小さく再現したものです。
プロンプトと活用
Prompting & use概要Overview
学習済みの LLM を使うときの入力がプロンプトです。モデルを追加学習しなくても、指示や例文の書き方を工夫するだけで、振る舞いを大きく変えられます。ここでは代表的なプロンプトの型と、生成を制御するパラメータを見て、実際に Hugging Face のコードで文章を生成します。
仕組みHow it works
ゼロショットと少数ショット
指示だけを与えて解かせるのがゼロショット、いくつか手本の例を見せてから解かせるのが少数ショット(few-shot)です。プロンプトの中に例を並べると、モデルはその場でパターンを読み取って応答を合わせます。追加学習をしていないのに、文脈の中の例から学ぶように見えるので、これを文脈内学習(in-context learning)と呼びます。
思考の連鎖(chain-of-thought)
推論を要する問題では、「順を追って考えてから答えて」と促し、途中の考えを書かせると、正解率が上がることがあります。これを思考の連鎖(chain-of-thought)と呼びます。答えだけを急がせず、中間の手順を言語化させるのがコツです。
生成パラメータ
生成は「次の語の確率分布から 1 語を選ぶ」の繰り返しです。この選び方を制御するのが生成パラメータです。
- 温度(temperature, T):分布の鋭さを変える。低いほど高確率の語に集中し(堅実)、高いほど平らになって多様に(奔放)。デモ 2 で体験した効果です。
- top-p(核サンプリング):確率の高い語から累積で p に達するまでを候補に残し、そこから選ぶ。極端に確率の低い語を排除します。
- top-k:確率上位 k 個だけを候補に残す。
注意の重みヒートマップ
プリセットの文を選ぶと、自己注意の重みを行列(トークン × トークン)としてヒートマップで表示します。各行が「見る側(Query)」、各列が「見られる側(Key)」で、色が濃いほど強く注意しています。生成型モデルにならい、各語は自分より前の語だけを見ます(因果マスク)。各行の重みは合計 1 です。ここではトイの埋め込みから Q·K を計算してソフトマックスした説明用の値で、実際に学習された注意重みではありません。
コードで動かすRun the code
Hugging Face の pipeline を使うと、モデル名を指定するだけで文章生成を試せます。ここでは実在の公開モデル gpt2(英語、小型)を使います。生成は確率的なので、出力は実行のたびに変わり得ます。
# pip install transformers torch
from transformers import pipeline
generator = pipeline("text-generation", model="gpt2")
out = generator(
"In the future, artificial intelligence will",
max_new_tokens=20,
do_sample=True,
temperature=0.8,
top_p=0.9,
)
print(out[0]["generated_text"])
In the future, artificial intelligence will be able to
help people make better decisions, and to solve problems
that are too complex for humans to handle alone.より細かく制御したいときは、トークナイザとモデルを別々に読み込みます。AutoTokenizer でテキストを ID 列に変え、AutoModelForCausalLM の generate で次のトークンを繰り返し生成します。
from transformers import AutoTokenizer, AutoModelForCausalLM
tok = AutoTokenizer.from_pretrained("gpt2")
model = AutoModelForCausalLM.from_pretrained("gpt2")
prompt = "The three primary colors are"
ids = tok(prompt, return_tensors="pt")
out = model.generate(**ids, max_new_tokens=10, do_sample=False)
print(tok.decode(out[0], skip_special_tokens=True))
The three primary colors are red, green, and blue.この Step のまとめ
プロンプトは、追加学習なしでモデルの振る舞いを変える入力です。ゼロショット・少数ショット・思考の連鎖といった型があり、温度・top-p・top-k で生成を制御します。Hugging Face の pipeline や generate で、数行から試せます。
検索拡張生成とツール活用
RAG & tools概要Overview
LLM は流暢ですが、学習した知識は過去の一時点で止まっており、知らないことを、もっともらしく間違えることがあります。これを幻覚(hallucination)と呼びます。この弱点を補う代表的な工夫が、外部の文書を検索して根拠を与える検索拡張生成(RAG)です。あわせて、計算や検索などをモデルの外のツールに任せる考え方も見ます。
仕組みHow it works
検索拡張生成(RAG)
RAG の流れはシンプルです。質問が来たら、まず手元の文書集合から関連する文書を検索し、その内容をプロンプトに根拠として添えて、モデルに答えさせます。モデルは自分の記憶だけでなく、渡された文書を見て答えるので、最新情報や社内文書のような、学習に含まれない知識にも対応でき、根拠を示しやすくなります。
埋め込みによる意味検索
検索の鍵が文埋め込み(embedding)です。NLP モジュールの単語ベクトルを文の単位に広げたもので、文をベクトルに変換します。意味の近い文どうしはベクトルも近くなるので、質問のベクトルと各文書のベクトルのコサイン類似度を測れば、キーワードが一致しなくても意味的に近い文書を見つけられます。文書が多いときは、ベクトルデータベースや近似最近傍探索で高速に探します。
ツールとエージェント
言語モデルは、正確な計算や最新情報の取得は不得意です。そこで、電卓・検索・データベース照会などのツールを外部に用意し、必要なときにモデルがそれを呼び出して結果を受け取る、という設計が広がっています。複数の手順を計画しながらツールを使い分ける仕組みはエージェントと呼ばれます。
限界としての幻覚
RAG やツールは幻覚を減らしますが、ゼロにはできません。LLM は「事実を検索している」のではなく「もっともらしい続き」を生成しているという性質を、使う側が意識することが大切です。重要な用途では、出力の裏取り(検証)を前提に設計します。
コードで動かすRun the code
文埋め込みは sentence-transformers で手軽に作れます。実在の公開モデル all-MiniLM-L6-v2 は、文を 384 次元のベクトルに変換します。質問と文書集合をベクトル化し、コサイン類似度が最も高い文書を選べば、小さな意味検索(RAG の検索部分)になります。
# pip install sentence-transformers
from sentence_transformers import SentenceTransformer, util
model = SentenceTransformer("all-MiniLM-L6-v2")
docs = [
"The Eiffel Tower is located in Paris, France.",
"Photosynthesis takes place in the leaves of plants.",
"Python is a popular programming language.",
]
query = "Where can I find the Eiffel Tower?"
doc_emb = model.encode(docs, convert_to_tensor=True)
q_emb = model.encode(query, convert_to_tensor=True)
scores = util.cos_sim(q_emb, doc_emb)[0]
best = scores.argmax().item()
print(scores)
print("best:", docs[best])
tensor([0.7143, 0.0662, 0.1045])
best: The Eiffel Tower is located in Paris, France.質問には「located」も「Paris」も含まれていないのに、意味の近い最初の文書が最も高い類似度で選ばれました。キーワードの一致に頼らず、意味で探せるのが埋め込みの強みです。検索で選んだこの文書をプロンプトに添えれば、モデルは根拠にもとづいて答えられます。
注意
RAG やツールを使っても、LLM は「もっともらしい文」を生成しているという本質は変わりません。渡した文書に答えが無いのに、それらしく作文してしまうこともあります。出力をそのまま信じず、根拠となる文書や計算結果と突き合わせて確かめる姿勢が欠かせません。
評価・課題・これから
Evaluation & the future概要Overview
LLM は便利ですが、万能ではありません。どう性能を測り、どんな課題があり、これからどう付き合っていくべきか。仕組みを学んだ最後に、使う側として知っておきたい視点を整理します。
仕組みHow it works
評価はむずかしい
分類なら正解率で測れますが、「良い文章」を 1 つの数字で測るのは簡単ではありません。実際には次のような方法を組み合わせます。
- ベンチマーク:多数の課題を集めた問題集で、正答率などを測る。ただし、学習データに問題が混入していると、実力を過大評価する恐れがあります。
- 人手評価:人が応答の有用性・正確さ・安全性を判断する。手間はかかるが、生成の質を測るには欠かせません。
安全性とバイアス
LLM は学習データの傾向をそのまま映します。データに含まれる偏見や差別を再生産したり、有害な内容を出したりする危険があります。また、堂々と誤情報を述べる幻覚(Step 5)もあります。こうしたリスクを抑え、モデルの振る舞いを人の価値観に合わせる取り組みをアラインメント(alignment)と呼びます。
コストと環境
大規模モデルの学習と運用には、多くの計算資源と電力が必要です。性能だけでなく、コストと環境負荷も設計上の重要な指標になっています。用途に対して過大なモデルを避け、適切な規模を選ぶ判断が求められます。
オープンモデルと責任ある利用
重みが公開されたオープンモデルも数多く、Hugging Face Hub などから入手できます。手元で動かせるため、学習や検証、透明性の観点で価値があります。いっぽうで、誰でも使えるからこそ、悪用の防止や出典の明示、個人情報の扱いといった責任ある利用が問われます。技術の仕組みと限界の両方を理解したうえで、道具として賢く使うことが大切です。
この Step のまとめ
LLM の評価はベンチマークと人手評価を組み合わせて行い、安全性・バイアス・幻覚・コスト・環境という課題が伴います。オープンモデルを活かしつつ、仕組みと限界を理解して責任をもって使うことが、これからますます重要になります。
まとめWrap-up
学びの振り返りと、さらに学ぶために
このモジュールでは、大規模言語モデルの仕組みを、できるまでの流れに沿って順にたどりました。
- LLM とは:次単語予測を巨大な規模で追求したモデル。スケール則が特徴。
- Transformer と自己注意:Query・Key・Value で「どこを見るか」を決め、サブワードで入力を区切る。
- 事前学習:自己回帰の次単語予測で土台を作り、微調整・指示チューニング・RLHF で整える。
- プロンプトと活用:ゼロショット・少数ショット・思考の連鎖と、温度・top-p などの生成制御。
- 検索拡張生成(RAG):文埋め込みで根拠を検索して幻覚を補い、ツールで苦手を補う。
- 評価と課題:評価の難しさ、安全性・バイアス・コスト、責任ある利用。
次に進むなら、下の道具と資料が役に立ちます。
データ・モデル
- Wikipedia / Common Crawl / The Pile:事前学習で使われる公開の大規模テキスト資源。
- Hugging Face Hub:オープンな学習済みモデルやトークナイザを配布。手元で試せる。
ライブラリ
- Hugging Face Transformers:LLM の読み込みと生成の定番。
- tiktoken / SentencePiece:サブワード・トークン化。
- sentence-transformers:文埋め込みと意味検索。
参考書
- 山田育矢 ほか『大規模言語モデル入門』技術評論社
- Daniel Jurafsky, James H. Martin『Speech and Language Processing』
- Hugging Face の学習コース(オンライン)
次のモジュールへ
- プログラム解析(コードを対象にした分析へ)
- 深層学習(ニューラルネットの基礎)
- 自然言語処理(NLP)(基礎の復習)
おつかれさまでした
LLM は魔法ではなく、「次の単語を当てる」という素朴な仕組みを、Transformer と大規模な事前学習で徹底したものでした。ページ内の 3 つのデモ(サブワード分割・次単語予測・注意のヒートマップ)を、入力を変えながらもう一度動かしてみてください。仕組みの手ざわりがつかめると、ニュースで見る話題も違って見えてきます。
発展トピックBeyond this module
このコースでは扱わない、関係する発展トピック
このモジュールでは、Transformer と事前学習を軸に、LLM の基礎を扱いました。いっぽうで、この分野は非常に速く動いています。ここでは、このコースでは踏み込まないものの、知っておくと視野が広がる発展的なトピックを、特に近年の主流を中心に紹介します。深掘りは各自の興味に合わせてどうぞ。実在する技術名のみを挙げています。
整列と学習の発展
- RLHF / DPO:人の好みにモデルを合わせる学習。DPO は報酬モデルを介さず好みから直接最適化する新しい方法。
- LoRA による軽量ファインチューニング:一部の小さな行列だけを学習し、少ない計算で微調整する。量子化と組み合わせることも多い。
アーキテクチャと効率
- Mixture-of-Experts(MoE):入力ごとに一部の「専門家」だけを使い、大規模化と計算効率を両立する。
- 長文コンテキスト:一度に扱えるトークン長を伸ばす工夫。長い文書や対話履歴を丸ごと入力できるようにする。
- 量子化:重みを低精度で表し、メモリと計算を節約する。
広がるモデル
- マルチモーダル LLM:テキストに加えて画像や音声も扱うモデル。
- エージェント・ツール使用:計画を立て、検索や計算などの外部ツールを使い分けて課題を解く。
評価と安全性
- 評価ベンチマーク:能力を多面的に測る問題集と、その汚染(学習データ混入)への対処。
- アラインメントと安全性:有害な出力の抑制、価値観との整合、悪用の防止に関する研究。