はじめに
最近、ChatGPT、Claude、Gemini、ローカルLLMなど、さまざまな生成AIが使われるようになりました。
その中心にある技術が LLM です。
LLMは Large Language Model の略で、日本語では 大規模言語モデル と呼ばれます。
この記事では、LLMについて以下の内容を整理します。
- LLMとは何か
- LLMが文章を生成する仕組み
- Transformer / Attention の基礎
- トークン、コンテキスト、プロンプト
- RAG、ファインチューニング、量子化
- LLMを使うときの注意点
この記事の目的
LLMを「なんとなくすごいAI」として見るのではなく、基本的な仕組みを理解して使えるようにすることです。
LLMとは
LLMとは、大量のテキストデータを学習したAIモデル のことです。
LLMは、文章を読んだり、書いたり、要約したり、翻訳したり、コードを書いたりできます。
代表的な用途は以下です。
| 用途 | 例 |
|---|---|
| 文章生成 | メール、記事、レポートを書く |
| 要約 | 長い文章を短くまとめる |
| 翻訳 | 日本語から英語、英語から日本語に変換する |
| コーディング支援 | コード生成、バグ修正、設計相談 |
| 情報整理 | 複数の情報をまとめる |
| アイデア出し | アプリ案、記事ネタ、企画案を出す |
LLMは「人間のように考えているAI」ではなく、基本的には「次に来るトークンを予測するモデル」です。
AI・機械学習・深層学習・LLMの関係
LLMはAIの一種です。
関係を簡単に表すと、以下のようになります。
AI
└── 機械学習
└── 深層学習
└── 自然言語処理
└── LLM
それぞれの意味は以下です。
| 用語 | 意味 |
|---|---|
| AI | 人間の知的な作業をコンピュータで実現しようとする技術全体 |
| 機械学習 | データからパターンを学習する技術 |
| 深層学習 | ニューラルネットワークを使う機械学習 |
| 自然言語処理 | 人間の言葉をコンピュータで扱う技術 |
| LLM | 大規模な自然言語処理モデル |
ポイント
LLMはAIの中でも、特に「言語」を扱うことに強いモデルです。
LLMは何をしているのか
LLMは、入力された文章をもとに 次に来る可能性が高いトークン を予測します。
例えば、次の文章があったとします。
今日は天気がいいので、
この続きを予測すると、次のような文章が生成されます。
散歩に行きたい。
LLMはこのように、次のトークンを1つずつ予測します。
今日は
↓
今日は天気
↓
今日は天気が
↓
今日は天気がいい
↓
今日は天気がいいので
↓
今日は天気がいいので散歩に行きたい。
LLMの文章生成は、基本的には「次のトークン予測」の繰り返しです。
トークンとは
LLMは文章をそのまま処理するのではなく、トークン という単位に分けて扱います。
トークンは、単語、文字、記号、または単語の一部のようなものです。
例えば、英語では次のように分かれることがあります。
I like programming.
I / like / programming / .
日本語の場合は、単語ごとにきれいに分かれるとは限りません。
今日はいい天気です
モデルによっては、次のように分割されます。
今日 / は / いい / 天気 / です
LLMは、このトークンを順番に処理します。
注意
「1文字 = 1トークン」ではありません。
モデルや tokenizer によって分割方法は変わります。
Transformerとは
現在の多くのLLMでは、Transformer というニューラルネットワークの仕組みが使われています。
Transformerは、文章の中で どの単語がどの単語と関係しているか を扱うのが得意です。
例えば、次の文章を考えます。
太郎は花子に本を渡した。彼女はそれを読んだ。
この文章では、
- 「彼女」 = 花子
- 「それ」 = 本
を指しています。
Transformerは、文章中の単語同士の関係を見ながら、文脈を処理します。
Transformerの重要な仕組みが Attention です。
Attentionとは
Attentionは、日本語では 注意機構 と呼ばれます。
簡単に言うと、文章の中で どの部分に注目するべきか を決める仕組みです。
例えば、次の文章があります。
私は昨日買った本を今日読みました。
この文章では、「本」と「読みました」は強く関係しています。
Attentionは、このような関係を計算しながら、文章の意味を扱います。
入力文
↓
どの単語に注目するかを計算
↓
文脈を反映した表現に変換
↓
次のトークンを予測
ポイント
LLMが長い文章をある程度理解できるのは、Attentionによって文脈上重要な情報に注目できるからです。
LLMの学習の流れ
LLMは、主に以下のような流れで作られます。
大量のテキストデータを集める
↓
事前学習する
↓
指示に従えるように調整する
↓
安全性や使いやすさを調整する
↓
ユーザーが使う
それぞれを簡単に説明します。
事前学習
事前学習では、大量の文章を使ってモデルに言語のパターンを学習させます。
基本的には、文章の続きを予測するように学習します。
例えば、
日本の首都は
という入力に対して、
東京
が続きやすいことを学習します。
これを大量のデータで行うことで、モデルは以下のようなものを学びます。
- 文法
- 単語の関係
- 文章構造
- 一般的な知識
- コードの書き方
- 会話のパターン
事前学習は、LLMの基礎能力を作る段階です。
ファインチューニング
ファインチューニングとは、事前学習済みのモデルを 特定の目的に合わせて追加学習すること です。
例えば、以下のような目的で使われます。
- チャット形式で答えられるようにする
- 指示に従えるようにする
- 特定分野に強くする
- 特定キャラクターの口調にする
- 安全な回答をしやすくする
- コード生成に強くする
事前学習だけでは、モデルは必ずしもユーザーの指示にうまく従えません。
そこで、指示応答データなどを使って調整します。
事前学習済みモデル
↓
追加データで学習
↓
目的に合ったモデルになる
ポイント
ローカルLLMを自分好みにしたい場合、LoRAなどを使った軽量なファインチューニングがよく使われます。
推論とは
推論とは、学習済みのモデルを使って、実際に回答を生成する処理のことです。
ユーザーがプロンプトを入力すると、LLMはそれをトークン化し、次のトークンを順番に生成します。
ユーザーの入力
↓
トークン化
↓
モデルに入力
↓
次のトークンを予測
↓
出力文を生成
ChatGPTやローカルLLMで会話しているときに行われている処理が、この推論です。
プロンプトとは
プロンプトとは、LLMに与える指示文のことです。
例えば、次の文章はプロンプトです。
LLMについて初心者向けに説明してください。
プロンプトの書き方によって、LLMの出力は大きく変わります。
悪い例です。
LLM説明して
これでも回答は返ってきますが、条件が少ないため、出力がぶれやすくなります。
良い例です。
LLMについて初心者向けに説明してください。
AI、機械学習、深層学習との違いも含めてください。
専門用語には簡単な補足を入れてください。
Qiitaの記事として読みやすい構成にしてください。
このように、条件を具体的に書くと、期待に近い出力になりやすくなります。
プロンプトは、LLMへの命令文であり、出力品質に大きく影響します。
コンテキストとは
コンテキストとは、LLMが一度に参照できる情報のことです。
例えば、以下のようなものがコンテキストに含まれます。
- 現在のプロンプト
- 会話履歴
- 入力された文章
- 読み込ませた資料
- コード
- システム指示
ただし、LLMが無限に情報を覚えられるわけではありません。
モデルごとに、一度に扱えるトークン数には上限があります。
この上限を コンテキスト長 と呼びます。
注意
コンテキスト長を超えた情報は、モデルが参照できなくなる場合があります。
長い会話で以前の内容を忘れたように見えるのは、この制限が関係しています。
RAGとは
RAGは Retrieval-Augmented Generation の略です。
日本語では 検索拡張生成 と呼ばれます。
簡単に言うと、LLMに外部データを検索させ、その情報をもとに回答させる仕組みです。
ユーザーの質問
↓
関連する資料を検索
↓
検索結果をLLMに渡す
↓
LLMが回答を生成
RAGを使うと、以下のようなデータをLLMに参照させることができます。
- 社内文書
- Webページ
- Notion
- GitHub README
- データベース
- マニュアル
LLM単体では、古い情報や間違った情報を出すことがあります。
RAGを使うことで、外部の正確な情報を参照しながら回答できるようになります。
RAGは、LLMに「外部資料を読ませて答えさせる」ための重要な技術です。
ハルシネーションとは
ハルシネーションとは、LLMが 事実と違う内容をもっともらしく生成してしまう現象 です。
例えば、以下のようなことがあります。
- 存在しない論文を紹介する
- 間違ったURLを出す
- 実在しない仕様を書く
- コードの動作を間違って説明する
- 最新情報を古い知識で答える
LLMは、常に事実確認をしているわけではありません。
文章として自然なものを生成しているため、間違っていてもそれっぽく見えることがあります。
注意
医療、法律、金融、セキュリティ、学校提出物、公式仕様などでは、LLMの回答をそのまま信じず、必ず確認する必要があります。
ローカルLLMとは
ローカルLLMとは、自分のPCやスマホなどで動かすLLMのことです。
ChatGPTのようなクラウド型AIとは違い、自分の端末上で推論します。
メリットは以下です。
- データを外部に送りにくい
- インターネットなしでも使える場合がある
- モデルの仕組みを学びやすい
- 自分でモデルを選べる
- アプリに組み込みやすい
一方で、デメリットもあります。
- 高性能なPCが必要になることがある
- 大きなモデルは重い
- クラウド型の高性能モデルより精度が低い場合がある
- 環境構築が必要
- モデル管理が面倒
クラウドLLM
例: ChatGPT, Claude, Gemini
ローカルLLM
例: Ollama, LM Studio, llama.cpp, MLX
ローカルLLMは、LLMの仕組みを学ぶにはかなり良い環境です。
量子化とは
量子化とは、モデルの重みの精度を下げて、モデルを軽くする技術です。
LLMは大量の数値データを持っています。
その数値を小さい形式に変換することで、メモリ使用量を減らせます。
例えば、以下のようなイメージです。
16bit
↓
8bit
↓
4bit
量子化のメリットは以下です。
- メモリ使用量が減る
- ローカル環境で動かしやすくなる
- 推論速度が上がる場合がある
- 小さい端末でも扱いやすくなる
ただし、デメリットもあります。
- 精度が少し落ちる場合がある
- 量子化方式によって性能が変わる
- モデルによって向き不向きがある
ポイント
ローカルLLMでよく見るQ4や4bitは、量子化された軽量モデルを指していることが多いです。
パラメータ数とは
LLMでは、よく以下のような表記を見ます。
2B
7B
13B
70B
これはモデルのパラメータ数を表しています。
| 表記 | 意味 |
|---|---|
| 2B | 約20億パラメータ |
| 7B | 約70億パラメータ |
| 13B | 約130億パラメータ |
| 70B | 約700億パラメータ |
一般的には、パラメータ数が多いほど高性能になりやすいです。
ただし、必ずしも大きいモデルが常に良いとは限りません。
用途によっては、小さいモデルの方が便利な場合もあります。
例えば、
- 速度を重視する
- スマホやPCで動かす
- コストを下げたい
- 特定タスクだけ実行したい
という場合は、小型モデルの方が向いていることがあります。
LLMは「大きければ正義」ではなく、用途に合ったモデル選びが重要です。
LLMアプリの基本構成
LLMを使ったアプリは、ざっくり以下のような構成になります。
ユーザー
↓
アプリ
↓
プロンプト作成
↓
LLM API または ローカルLLM
↓
回答生成
↓
ユーザーに表示
RAGを入れる場合は、検索処理が追加されます。
ユーザー
↓
質問を受け取る
↓
関連文書を検索する
↓
検索結果をプロンプトに入れる
↓
LLMに渡す
↓
回答を生成する
アプリ開発で重要なのは、単にLLMを呼び出すことではありません。
以下の設計が重要になります。
- どんなプロンプトを作るか
- どのモデルを使うか
- どこまでLLMに任せるか
- 回答をどう検証するか
- ユーザー入力をどう制御するか
- 失敗時にどう処理するか
ポイント
LLMアプリでは、モデルの性能だけでなく、プロンプト設計・UI・検証処理も重要です。
LLMでできること
LLMは、以下のような作業に使えます。
文章作成
メール、ブログ記事、説明文、レポートなどを作成できます。
例:
Qiita用の記事を書いてください。
要約
長い文章を短くまとめられます。
例:
この文章を3行で要約してください。
翻訳
自然な翻訳を行えます。
例:
この英語を自然な日本語にしてください。
コーディング支援
コード生成、バグ修正、設計相談ができます。
例:
このSwiftUIコードの問題点を指摘してください。
学習支援
難しい内容をかみ砕いて説明できます。
例:
Attentionを中学生にもわかるように説明してください。
アイデア出し
アプリ案、記事ネタ、企画案を出せます。
例:
ローカルLLMを使ったアプリ案を10個出してください。
LLMが苦手なこと
LLMは便利ですが、万能ではありません。
苦手なこともあります。
| 苦手なこと | 理由 |
|---|---|
| 最新情報 | 学習データが古い場合がある |
| 正確な計算 | 計算機ではなく言語モデルだから |
| 事実確認 | もっともらしい誤情報を出すことがある |
| 厳密な論理推論 | 複雑な推論でミスすることがある |
| 長い文脈の保持 | コンテキスト長に制限がある |
| 公式仕様の確認 | 仕様変更に弱い |
特に、コード生成では注意が必要です。
LLMが生成したコードは、一見正しそうに見えても、以下のような問題を含むことがあります。
- 存在しないAPIを使う
- 古い書き方をする
- セキュリティ上危険な処理を書く
- エラーハンドリングが不足する
- テストされていないコードを出す
注意
LLMのコードは「完成品」ではなく、「たたき台」として扱うのが安全です。
LLMを使うときの考え方
LLMは、答えを丸投げする道具ではありません。
LLMは「作業と思考を補助するツール」として使うのが重要です。
特に開発では、以下のような使い方が有効です。
- エラー文の意味を聞く
- 実装方針を相談する
- コードレビューをさせる
- テストケースを考えさせる
- READMEを整える
- 仕様の抜けを探させる
- 設計の問題点を洗い出す
一方で、最終判断は人間が行う必要があります。
LLMに任せる
↓
人間が確認する
↓
修正する
↓
テストする
↓
完成に近づける
まとめ
この記事では、LLMの基礎について整理しました。
重要なキーワードは以下です。
| キーワード | 意味 |
|---|---|
| LLM | 大量のテキストを学習した大規模言語モデル |
| トークン | LLMが処理する文章の単位 |
| Transformer | 多くのLLMで使われるモデル構造 |
| Attention | 文章中の重要な部分に注目する仕組み |
| 事前学習 | 大量データで基礎能力を作る学習 |
| ファインチューニング | 目的に合わせた追加学習 |
| 推論 | 学習済みモデルで回答を生成する処理 |
| プロンプト | LLMへの指示文 |
| コンテキスト | LLMが一度に参照できる情報 |
| RAG | 外部情報を検索して回答に使う仕組み |
| ハルシネーション | もっともらしい誤情報を生成する現象 |
| ローカルLLM | 自分のPCなどで動かすLLM |
| 量子化 | モデルを軽くする技術 |
LLMは非常に便利な技術ですが、間違った情報を生成することもあります。
そのため、LLMは 正解を出す機械 ではなく、人間の作業を補助する技術 として使うことが重要です。
次に学ぶとよさそうな内容
LLMの基礎を理解したら、次は以下を学ぶと理解が深まります。
- Transformerの詳しい仕組み
- Attentionの数式的な理解
- tokenizerの仕組み
- RAGの実装
- ベクトル検索
- ローカルLLMの動かし方
- LoRAによるファインチューニング
- llama.cpp / Ollama / LM Studio
- LLMアプリの設計
- LLMの安全性
おわりに
LLMは、文章生成だけでなく、開発、学習、情報整理、アプリ制作など多くの場面で使える技術です。
ただ使うだけでなく、仕組みを理解しておくことで、より安全で実用的に活用できます。
今後は、ローカルLLMの動かし方や、RAGの実装についてもまとめていきたいと思います。