更新:2024/11/16
大規模言語モデル(LLM)と語彙(vocabulary)の関係と意味について


はるか
語彙…言語モデルの「単語の辞書」みたいなもの。

ふゅか
そうそう!たとえば人が話す言葉を集めたものが「辞書」なら、語彙はAIが使うそのバージョンって感じね!
目次
1. 語彙とは
「語彙」とは、特定の言語や文脈で使われる単語や記号などの集まりを指します。言語モデルにおける語彙は、モデルが理解し、処理できるすべての単語や記号、トークンの集合です。日常的な言葉とコンピュータでの利用を区別しつつ、以下で詳しく説明します。
1.1. 単語レベルの語彙
- 各単語が語彙の集合に含まれる場合です。
- 例: 「猫」「走る」「家」など、自然言語の単語が語彙として登録される。
- 特徴:
- 語彙が非常に大きくなる(数万〜数十万語)。
- 未知語(語彙に含まれない単語)の処理が課題となる。
1.2. サブワードを利用した語彙
- 単語を細かい単位(サブワード)に分解し、それらを語彙とする場合です。
- 例: 「走る」が「走」「る」に分割され、それぞれが語彙に登録される。
- 特徴:
- 語彙サイズを小さく抑えられる。
- 未知語を処理しやすくなる。
- 使用例: BERTやGPTのトークナイザ(SentencePiece、Byte Pair Encodingなど)。
1.3. 文字レベルの語彙
- 各文字を語彙として使用する場合です。
- 例: 「猫」→「猫」、または英語なら「c」「a」「t」など。
- 特徴:
- 語彙サイズは最小限になる(数十〜数百)。
- 未知語の問題が完全になくなる。
- モデルが長いシーケンスを処理する必要があり、計算負荷が高くなる。
1.4. 特別なトークン(語彙)
- 通常の言語表現以外にも、特定の役割を持つトークンが含まれる。
- 例:
<PAD>
: パディング(入力の長さを揃えるためのトークン)。padding_tokenとも呼ばれる。<UNK>
: 未知の単語を表すトークン。<CLS>
: 文全体の意味を表すトークン(BERTで使用)。<SEP>
: 文や文脈の区切りを表すトークン。

はるか
特定の役割を持つトークンも重要。

ふゅか
例えば、パディング用の
<PAD>
とか、未知語を表す<UNK>
とか?2. 語彙と集合
言語モデルにおける語彙の集合を数式で表す場合、以下のように定義されます。

はるか
語彙は集合として扱える。

ふゅか
集合?数学っぽい話だね!
2.1. 語彙の集合の定義
語彙の集合 \( V \) は、モデルが扱うトークン(単語、サブワード、文字、記号など)の集合を指します。
\[ V = \{ v_1, v_2, v_3, \dots, v_n \} \]
ここで
- \( V \) は語彙の集合(Vocabulary)。
- \( v_i \) は語彙に含まれるトークン。
- \( n \) は語彙のサイズ(語彙の要素数)。
2.2. 確率分布
テキストを生成するデコーダタイプの言語モデルは、トークンの系列に基づき次のトークン \( x_{t+1} \) の確率を予測します。このとき、語彙の集合 \( V \) に基づいて次のように定義されます。
\[ P(x_{t+1} | x_1, x_2, \dots, x_t), \quad x_{t+1} \in V \]
ここで
- \( x_1, x_2, \dots, x_t \) は現在までのトークンの系列。
- \( P(x_{t+1} | x_1, x_2, \dots, x_t) \) は次のトークンの条件付き確率。
2.3. 語彙サイズとモデルの出力
言語モデルの出力層(通常はソフトマックス関数)では、語彙サイズ \( |V| \) に基づいて次のように計算されます。
\[ P(x_{t+1} = v_i | x_1, x_2, \dots, x_t) = \frac{\exp(z_i)}{\sum_{j=1}^{|V|} \exp(z_j)}, \quad v_i \in V \]
ここで
- \( z_i \) はモデルの出力スコア(ロジット)で、語彙の各トークンに対応。
- \( |V| \) は語彙のサイズ。

はるか
語彙サイズはモデルの計算に影響する。

ふゅか
例えばソフトマックスで次のトークンの確率を計算するもんね!
3. 語彙のサイズの調べ方
hugging faceのtransformersで語彙サイズを調べるときは、トークナイザーからvocab_sizeから語彙のサイズがわかります。
3.1. 例1:GPT2の語彙のサイズ
open aiが開発したGPT-2という有名なモデルの語彙サイズを調べる例です。
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
# 語彙サイズを確認
vocab_size = tokenizer.vocab_size
print(f"語彙サイズ: {vocab_size}")
3.2. 例2:meta-llama/Llama-3.1-70Bの語彙のサイズ
Metaが開発したLlama 3.1-70Bという大規模モデルの語彙サイズを確認します。
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.1-70B")
# 語彙サイズを確認
vocab_size = tokenizer.vocab_size
print(f"語彙サイズ: {vocab_size}")
3.3. 例3:gemma-2-9bの語彙のサイズ
最後に、Googleが開発したGemma 2-9Bというモデルの語彙サイズを確認してみましょう。
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-9b")
# 語彙サイズを確認
vocab_size = tokenizer.vocab_size
print(f"語彙サイズ: {vocab_size}")
4. Transformers・大規模言語モデルに関連する書籍
ブックオフ2号館 ヤフーショッピング店
bookfanプレミアム
大規模言語モデル入門II-生成型LLMの実装と評価 / 山田育矢 〔本〕
posted with カエレバ
HMV&BOOKS online Yahoo!店
PR