Blog

2025.01.22

Research

大規模言語モデル PLaMo 2 のためのトークナイザ性能改善

Kentaro Imajo

Preferred Networks(以下、PFN)および Preferred Elements(以下、PFE)では、大規模言語モデル(以下、LLM)の開発を進めており、PLaMo 100B を 2024 年 10 月に公開しました。現在は次世代モデルである PLaMo 2 の開発(※)を行っています。今回の記事では、PLaMo 2 に採用したトークナイザの改善について紹介します。

PLaMo 2 のトークナイザは、前のバージョンである PLaMo 100 B と比較して、日本語のトークン効率が 45 %、英語のトークン効率が 25 % 向上しました。ここでいうトークン効率とは、入出力に使われる文字列において 1 トークンで平均で何文字表現できるかを表します。これが改善する(増える)ことは、日本語の文章生成が 45 % 高速化し、同じ計算資源で学習できるデータ量が 45 % 増えることを意味します。このことから、トークン効率の改善は学習や推論にかかるコストを削減できる重要な改善と言えます。

しかし、ただ闇雲にトークン効率を上げるだけでは学習後のモデルの性能がかえって劣化してしまうことも多い点が LLM 開発の難しいところです。そこで PLaMo 2 では、大規模学習時における性能劣化を避けるため、小規模学習でも性能が低下しないという制約のもとで、トークン効率を高める取り組みを行いました。

(※)この開発は経済産業省及び国立研究開発法人新エネルギー・産業技術総合開発機構(NEDO)が推進する、国内の生成AIの開発力を強化するためのプロジェクト「GENIAC(Generative AI Accelerator Challenge)」の計算資源の提供支援を受けて実施しました。

LLM のトークナイザは何を最適化すべきか

LLM はテキストをトークン単位で処理することでテキストを生成します。もし計算資源に制約がなければ、テキストを文字単位で処理しても良いかもしれません。しかし実際には、LLM の学習には無視できないほど莫大な計算資源が必要です。限られた計算資源でより高い性能を目指すためには、ある程度まとまった単位(トークン、語彙)で処理することが求められます。

現在主流となっているトークナイザは、BPEUnigram などのアルゴリズムを用いてサブワード分割をデータから学習し、数万〜数十万語の語彙を用いてテキストを表現します。これらのアルゴリズムは「データ全体のトークン効率を最大化すること」を通じ、言語として自然な分割を得ようとします。しかし実際には、「トークン効率の最大化」と「LLMにとって都合の良い分割」は必ずしも一致しません。空白や記号、数値の前後で必ず切るといった、従来の言語モデル開発における経験的な分割ルールが取り入れられることも多いです。

PLaMo 2 のトークナイザの開発では、

  • 記号類の分割ルールがトークン効率向上の妨げになっていると考え、ゼロから見直すこと
  • 日本語の語彙にさらなる改善の余地があると考え、語彙構築時に形態素解析を取り込むこと

の 2 点について考えました。

LLMにとって都合の良い分割とは

「LLMにとって都合の良い分割」を定量的に評価するには膨大な計算資源が必要です。そのため、LLM の構造やふるまいを考慮しつつ、ある程度は推定にもとづいて最適化を進めることになります。PLaMo 2 のトークナイザ開発では、以下を「LLMにとって都合の良い分割」であると仮定し、改善を進めました。

  • 各トークンの生成難易度が偏らないこと
    • 例: 語彙中に空白を持つことを許すことで、定型句(「part of the」「In other words」など)も語彙になるようにし、トークン効率を向上しました。
    • 例: 数字は必ず分割し、LLM が苦手とされる計算タスクの難易度が極端に上がらないようにしました。
    • 例: (数トークン先の情報によって分割が変わるような)先読みを必要としないようにしました。
  • モデルの重みが共有しやすいこと
    • 例: 頻度が同程度であっても、複合語(分割しても意味が通じる語彙)は積極的に分割し、トークン効率とモデル性能の両立を狙いました。具体的には「新車」という語は「新」と「車」に分けることで意味が通りますが、より頻度の低い「キャベツ」は「キャ」と「ベツ」に分けても情報が得られないことから、後者を優先して語彙に入れています(=前者を優先して分割しています)。
  • 同じ単語は同じトークンIDからなること
    • 例: トークン効率を極端に追求すると、「ンは」のような一見意味の通らない語彙が追加されます。これは、ひとつひとつは頻度が低い多数のカタカナ名詞が分割されて発生した末尾の「ン」と頻度の非常に高い助詞「は」が連なる頻度が、しきい値を超えるために発生します。このような文脈によって同一名詞が異なるトークン列になる問題が生じるため避けています。他にも「郎さん」という語彙も同様で、ひとつひとつの名前(例:一郎、三郎)はしきい値よりも頻度が低いが、分割された「郎」と頻度の高い接尾辞である「さん」の組み合わせがしきい値を超えてしまいます。

評価

LLM の学習性能の評価

トークナイザの変更による LLM の学習性能の評価は、JCommonsenseQA、JSQuAD をはじめとした選択肢問題に加え、生成の評価には先日公開した pfgen-bench (日本語論文リポジトリ)も用いました。pfgen-bench は選択肢問題を解けない小さい事前学習モデルでも性能差異を評価できることから、今回の改善の評価には特に適していると考えられます。

評価の結果としては、選択肢問題等の既存のベンチマークに関しては、学習のブレによる影響が大きく優劣がつけにくい状況でしたが、少なくとも明確な劣化は見られない状態となりました。pfgen-bench のスコアについては、0.335 から 0.375 に有意に改善しました。これは、open-calm-3b の 0.376 と open-calm-7b の 0.401 の差や、Qwen2-0.5B の 0.260 と Qwen2-1.5B の 0.317 の差を考えると、小規模モデルにおける 100 文字程度の文章生成の流暢さに関してはモデルサイズを数倍にした程度の改善ができたと言えます。

他社トークナイザとの比較

トークナイザの変更による LLM の学習性能の変化を比較するのは一般に難しいため、そのノウハウが論文化されている事例は多くありません。よって、最新技術について知るには他社のトークナイザから学ぶ必要があります。そこで、PFN/PFE では独自にトークナイザの語彙に関するベンチマークを作成し、他社のトークナイザの傾向を調べつつ開発を進めました。以下はその一部抜粋です。

モデル名 語彙数 トークン効率 (文字/トークン) 漢字カバー率
日本語
(敬体)
日本語
(常体)
日本語
(口語)
英語 プログ
ラム
常用漢字 JIS
第1水準
PLaMo 2 100,000 2.007 2.010 2.153 5.771 3.692 99.5% 98.1%
Sarashina 2 102,400 1.946 1.998 2.146 4.173 2.832 96.3% 81.6%
LLM-jp 3 99,574 1.805 1.840 1.883 4.594 2.979 100.0% 99.1%
Gemma 2 256,000 1.595 1.621 1.766 4.979 3.148 100.0% 99.9%
PLaMo 100B 50,112 1.379 1.433 1.403 4.641 2.943 98.5% 89.3%
Llama 3.1 128,256 1.294 1.329 1.357 4.995 3.776 68.1% 53.3%
GPT-4o 200,000 1.228 1.206 1.252 5.023 3.737 66.5% 53.5%

表:各モデルのトークナイザのトークン効率と 1 トークンで表現できる漢字の割合
(赤字は1 位、太字は3位以内を表します)

この表からわかるとおり、PLaMo 2 のトークナイザは日本語・英語・プログラムのいずれのコーパスにおいても最高水準のトークン効率を示しています。また、漢字のカバー率も十分高く(※)、主要な漢字が 1 トークンで表現できることが確認できます。

(※)漢字のカバー率を 100% にすること自体は、漢字をそのまま語彙に追加すれば容易に実現できます。しかし、コーパス中での出現頻度が極めて低い漢字を追加すると、十分に学習されず性能が悪化するリスクがあります。例えば、妊娠の「娠」、挨拶の「拶」、曖昧の「曖」など、特定の熟語以外でほとんど使用されない漢字は、最低限必要と考える頻度のしきい値を超えられず、1 文字の語彙としては追加されていません(つまり、「妊娠」は語彙に含まれ 1 トークンとなりますが、「娠」は語彙に含まれず分解され 3 トークンになるという状況が起きます)。

日本語のトークナイズ例(文章はpfgen-benchより)

原文 走れメロスは、太宰治が1940年に発表した短編小説です。王に人質として差し出された親友を救うため、困難な状況でも走り続けるメロスの姿を描いています。友情や信頼の大切さを伝える作品として知られています。
PLaMo 2
46 tokens 🥇
[走れ][メロ][ス][は、][太宰][治][が][1][9][4][0][年][に発表した][短編][小説][です。][王][に][人質][として][差し][出された][親友][を救う][ため、][困難な][状況][でも][走り][続ける][メロ][ス][の][姿][を描いて][います。][友情][や][信頼][の][大切さ][を伝える][作品][として][知][られています。]
Sarashina 2
46 tokens 🥇
[走れ][メロ][スは](※1)[、][太宰][治][が][1][9][4][0][年][に発表した][短編][小説][です][。][王][に][人質][として][差し][出された][親友][を救う][ため][、][困難な][状況][でも][走り続け][る][メロ][ス][の姿][を描いて][います][。][友情][や][信頼][の大切さ][を伝える][作品として][知られています][。]
(日本語の語彙が多くトークン効率が高いです。(※1)のように「メロス」に「は」がつくと[メロ][スは]というように分割されるなど、単語境界に問題があるケースもあります。)
LLM-jp 3
52 tokens 🥈
[走れ][メ][ロス][は、](※2)[太][宰][治][が][1940](※3)[年][に][発表][した][短編][小説][です。][王][に][人質][として][差し][出][された][親友][を][救][う][ため、][困難][な][状況][でも][走り][続ける][メ][ロス][の][姿][を][描い][ています。][友情][や][信頼][の][大切][さを][伝える][作品][として][知][られています。]
((※2)のように語彙に句読点も入るようになっています。また(※3)のように年号などがトークン化されています。)
PLaMo 100B
68 tokens 🥉
[走][れ][メ][ロス][は][、][太][宰][治][が][1][9][4][0][年][に][発表][した][短編][小説][です][。][王][に][人][質][と][して][差し][出さ][れ][た][親友][を][救う][ため][、][困難][な][状況][でも][走り][続ける][メ][ロス][の][姿][を][描い][てい][ます](※4)[。][友情][や][信頼][の][大切][さ][を][伝える][作品][と][して][知][られ][てい][ます](※4)[。]
(形態素解析で切れる部分が概ね切れるような仕組みになっているため(※4)のように「ています」なども切られてしまいます。)
Llama 3.1
74 tokens
[走][れ][メ][ロ][ス][は][、][太][�][�](※5)[治][が][194][0](※6)[年に][発表][した][短][編][小][説][です][。][王][に][人][質][として][差][し][出][された][親][友][を][救][う][ため][、][困][難][な][状況][でも][走][り][続][ける][メ][ロ][スの](※7)[姿][を][描][いて][います][。][友][情][や][信][頼][の大][切][さ][を][伝][える][作品][として][知][られて][います][。]
((※5)のように「宰」が分割されるなど、日本語のカバレッジが不十分です。また、(※6)のように数は3桁ごとに結合する仕組みになっています。(※7)のように「メロス」に「の」がつくと[メ][ロ][スの]というように分割されるなど、単語境界に問題があるケースがあります。)
GPT-4o
79 tokens
[走][れ][メ][ロ][ス][は][、][太][�][�](※8)[治][が][194][0](※9)[年][に][発][表][した][短][編][小][説][です][。][王][に][人][質][として][差][し][出][された][親][友][を][救][う][ため][、][困][難][な][状][況][でも][走][り][続][け][る][メ][ロ][ス][の][姿][を][描][いて][います][。][友情][や][信][頼][の][大][切][さ][を][伝][える][作品][として][知ら][れ][ています][。]
((※8)のように「宰」が分割されるなど、日本語のカバレッジが不十分です。また、(※9)のように数は3桁ごとに結合する仕組みになっています。)

表:日本語(敬体)のトークナイズ例

PLaMo 2 ではトークンが句読点を含むことを許容し、日本語に約 5 万語彙を割り当てることで最高のトークン効率を実現しました。日本語に約 6 万語彙を割り当てている Sarashina 2 と比較すると、語彙数でハンデがあるにもかかわらず、句読点を含むトークンを許容することなどの工夫により同水準の効率を達成しています。また、名詞は文中で再参照される頻度が高いため、MeCab を用いた形態素解析によって「名詞」と「名詞以外」が分割されやすいように語彙を構築しました。

英語のトークナイズ例(文章はWikipediaのBoeing 777の記事より)

原文 The 777 can accommodate a ten–abreast seating layout and has a typical 3-class capacity of 301 to 368 passengers, with a range of 5,240 to 8,555 nautical miles [nmi] (9,700 to 15,840 km; 6,030 to 9,840 mi). The jetliner is recognizable for its large-diameter turbofan engines, six wheels on each main landing gear, fully circular fuselage cross-section, and a blade-shaped tail cone. The 777 became the first Boeing airliner to use fly-by-wire controls and to apply a carbon composite structure in the tailplanes.
PLaMo 2
130 tokens 🥇
[The][ 7][7][7][ can][ accommodate][ a][ ten][–][a][br][east][ seating][ layout][ and][ has][ a typical](※1)[ 3][-class][ capacity of](※1)[ 3][0][1][ to][ 3][6][8][ passengers][,][ with][ a range of][ 5][,2][4][0][ to][ 8][,5][5][5](※2)[ ][nautical][ miles][ [][n][mi][]][ (][9][,7][0][0][ to][ 1][5][,8][4][0][ km][;][ 6][,0][3][0][ to][ 9][,8][4][0][ mi][)][. The][ jet][liner][ is][ recognizable][ for its][ large][-][dia][meter][ turbo][fan][ engines][,][ six][ wheels][ on each][ main][ landing][ gear][,][ fully][ circular][ fuse][lage][ cross-][section][, and][ a][ blade][-shaped][ tail][ cone][. The][ 7][7][7][ became][ the first][ Bo][e][ing][ airline][r][ to use][ fly][-by-](※3)[wire][ controls][ and][ to apply][ a][ carbon][ composite][ structure][ in][ the tail][planes][.]
((※1)のように複数単語が含まれる語彙が入っています。(※2)のように数はバラバラになっていますが、“,” などとの結合を許すことで3桁で結合するトークナイザと同じトークン数で4桁の数を表現しています。(※3)のように記号が先頭だけでなく終端にも入る語彙があります。)
GPT-4o
132 tokens 🥈
[The][ ][777][ can][ accommodate][ a][ ten][–][abre][ast][ seating][ layout][ and][ has][ a][ typical][ ][3][-class][ capacity][ of][ ][301][ to][ ][368][ passengers][,][ with][ a][ range][ of][ ][5][,][240][ to][ ][8][,][555](※4)[ nautical][ miles][ [][n][mi][]][ (][9][,][700][ to][ ][15][,][840][ km][;][ ][6][,][030][ to][ ][9][,][840][ mi][).][ The][ jet][liner][ is][ recognizable][ for][ its][ large][-d][iameter][ turb][ofan][ engines][,][ six][ wheels][ on][ each][ main][ landing][ gear][,][ fully][ circular][ fus][elage][ cross][-section][,][ and][ a][ blade][-shaped][ tail][ cone][.][ The][ ][777][ became][ the][ first][ Boeing][ air][liner][ to][ use][ fly][-by][-wire][ controls][ and][ to][ apply][ a][ carbon][ composite][ structure][ in][ the][ tail][planes][.]
((※4)のように数は3桁でまとまります。)
Llama 3.1
135 tokens 🥉
[The][ ][777][ can][ accommodate][ a][ ten][–][ab][re][ast][ seating][ layout][ and][ has][ a][ typical][ ][3][-class][ capacity][ of][ ][301][ to][ ][368][ passengers][,][ with][ a][ range][ of][ ][5][,][240][ to][ ][8][,][555][ n][autical][ miles][ [][n][mi][]][ (][9][,][700][ to][ ][15][,][840][ km][;][ ][6][,][030][ to][ ][9][,][840][ mi][).][ The][ jet][liner][ is][ recognizable][ for][ its][ large][-d][iameter][ turbo][fan][ engines][,][ six][ wheels][ on][ each][ main][ landing][ gear][,][ fully][ circular][ fus][elage][ cross][-section][,][ and][ a][ blade][-shaped][ tail][ cone][.][ The][ ][777][ became][ the][ first][ Boeing][ airl][iner][ to][ use][ fly][-by][-w][ire][ controls][ and][ to][ apply][ a][ carbon][ composite][ structure][ in][ the][ tail][planes][.]
LLM-jp 3
146 tokens
[The][ 7][77][ can][ accommodate][ a][ ten][–][a][br][east][ seat][ing][ layout][ and][ has][ a][ typical][ 3][-][class][ capacity][ of][ 3][01][ to][ 3][68][ passengers][,][ with][ a][ range][ of][ 5][,][24][0][ to][ 8][,][5][55](※5)[ n][aut][ical][ miles][ [][n][mi][]][ (][9][,][7][00][ to][ 15][,][8][40][ km][;][ 6][,][0][30][ to][ 9][,][8][40][ mi][).][ The][ jet][liner][ is][ recogn][izable][ for][ its][ large][-][dia][met][er][ turb][of][an][ engines][,][ six][ wheels][ on][ each][ main][ landing][ gear][,][ fully][ circular][ f][use][lage][ cross][-][section][,][ and][ a][ blade][-][shaped][ tail][ cone][.][ The][ 7][77][ became][ the][ first][ Boeing][ air][liner][ to][ use][ fly][-][by][-][wire][ controls][ and][ to][ apply][ a][ carbon][ composite][ structure][ in][ the][ tail][plane][s.]
(数は基本的に2桁でまとまりますが、(※5)のように先にまとまるか後にまとまるかが定まっていません。)
PLaMo 100B
164 tokens
[The][ ][7][7][7][ can][ accommodate][ a][ ten][�][�][�](※6)[ab][re][ast][ seating][ layout][ and][ has][ a][ typical][ ][3][-][class][ capacity][ of][ ][3][0][1][ to][ ][3][6][8][ passengers][,][ with][ a][ range][ of][ ][5][,][2][4][0][ to][ ][8][,][5][5][5][ n][autical][ miles][ [][n][mi][]][ (][9][,][7][0][0][ to][ ][1][5][,][8][4][0][ km][;][ ][6][,][0][3][0][ to][ ][9][,][8][4][0][ mi][).][ The][ jet][liner][ is][ recogn][izable][ for][ its][ large][-][d][iameter][ turbo][fan][ engines][,][ six][ wheels][ on][ each][ main][ landing][ gear][,][ fully][ circular][ fus][elage][ cross][-][section][,][ and][ a][ blade][-][shaped][ tail][ cone][.][ The][ ][7][7][7][ became][ the][ first][ Boeing][ air][liner][ to][ use][ fly][-][by][-][wire][ controls][ and][ to][ apply][ a][ carbon][ composite][ structure][ in][ the][ tail][planes][.]
(全体の語彙が少ないためトークン数が増えている他、(※6)のダッシュ記号は語彙に入っておらず3トークンに分解されています。)
Sarashina 2
171 tokens
[The][ ][7][7][7][ can][ ][accommod][ate][ a][ ten][–][a][breast][ seating][ layout][ and][ has][ a][ typical][ ][3][-][class][ ][capacity][ of][ ][3][0][1][ to][ ][3][6][8][ pass][engers][,][ with][ a][ range][ of][ ][5][,][2][4][0][ to][ ][8][,][5][5][5][ ][nautical][ miles][ [][n][mi][]][ (][9][,][7][0][0][ to][ ][1][5][,][8][4][0][ km][;][ ][6][,][0][3][0][ to][ ][9][,][8][4][0][ mi][).][ The][ jet][liner][ is][ ][recogniz][able][ for][ its][ large][-][diameter][ turbo][fan][ engines][,][ six][ wheels][ on][ each][ main][ landing][ gear][,][ fully][ ][circular][ fuse][lage][ cross][-][section][,][ and][ a][ blade][-][shaped][ tail][ cone][.][ The][ ][7][7][7][ became][ the][ first][ Boeing][ airline][r][ to][ use][ fly][-][by][-][wire][ control][s][ and][ to][ apply][ a][ carbon][ composi][te][ ][s][tructure][ in][ the][ tail][plane][s][.]
(相対的に英語の語彙が少ないためにトークン数が増えてしまっています。)

表:英語のトークナイズ例

PLaMo 2 では空白を複数含むトークン(例: “ a typical” や “ capacity of”)を許すことで、高いトークン効率を実現しました。また、数学能力の改善を妨げないよう、数字同士は極力結合しないようにした一方で、スペースやカンマとの結合(例: “ 7” や “,5”)は許可することで、数字が混在する文章でもトークン効率の低下を防いでいます。

「名無し」を含む語彙

LLM 自体の性能向上を考えると通常の用途で入力しないと考えられる文字列は語彙に含まれないことが望ましいです。そのような文字列として「名無し」のバリエーションがあります。Web 上には2ちゃんねる(現5ちゃんねる)のまとめサイトが多数存在しますが、そこにはデフォルトのユーザ名である「名無し」のバリエーションが繰り返し出現します。頻度のみに注目する語彙選択アルゴリズムではこれらの文字列が語彙として採用される傾向があります。

PLaMo 2
3 語彙 🥇
“名無し”, “名無しさん”, “名無しさん@”
Llama 3.1
4 語彙 🥈
” 名無し”, ” 名無しさん”, “名無し”, “名無しさん”
LLM-jp 3
6 語彙 🥉
” 名無し”, ” 名無しさん”, ” 名無しの”, ” 風吹けば名無し”, “名無し”, “名無しさん”
GPT-4o
9 語彙
” 名無し”, ” 名無しさん”, ” 名無しの”, ” 風吹けば名無し”, “、名無し”, “の名無しさん”, “名無し”, “名無しさん”, “風吹けば名無し”
Sarashina 2
23 語彙
” 名無し”, ” 名無しさん”, ” 名無しの”, ” 風吹けば名無し”, “あった怖い名無し”, “の名無しのようだ”, “れでも動く名無し”, “ハムスター名無し”, “不要不急の名無し”, “優しい名無しさん”, “名無し”, “名無しさん”, “名無しさん投稿日”, “名無したん”, “名無しです”, “名無しですよ”, “名無しなのに合格”, “名無しの水平思考”, “名無しんぼ”, “名無し名人”, “名無し野電車区”, “氷上の名無しさん”, “風吹けば名無し”

表:各モデルの「名無し」を含む語彙一覧

PLaMo 2 では語彙を選択する際に、コーパス全体での頻度だけではなく出現するドキュメントの数も考慮に入れたことや、半角スペースと日本語が結合した語彙を許さないルールを導入したことなどにより、「名無し」を含む文字列のバリエーションに関しても概ね抑えられています。一方、Sarashina 2 は日本語の語彙数を充実させた副作用として、「名無し」を含む語彙が大幅に増えてしまっていると考えられます。

今後の取り組みについて

今回は、PLaMo 2 におけるトークナイザの語彙設計を中心に紹介しました。PLaMo 2 のトークナイザでは、語彙選択の改善に加えて、語彙構築アルゴリズムやトークン分割アルゴリズムにも工夫を施しています。これらの詳細についても、いずれ紹介できればと考えています。

今後のトークン効率の改善は、トークナイザ単体では限界があると考えています。従来どおりの方法で語彙数をさらに増やしていく方向は、出現頻度の低い語彙の扱いなどの問題もあり、学習効率や性能が低下しかねません。そのため、今後は複合語の表現方法をはじめとするモデル側の改善が必要になると考えています。また、PLaMo 2 のトークナイザは多言語対応を行っているものの、コーパスに含まれていない語彙は十分に学習されないリスクからその多くが削られています(グルジア語も対応候補に含まれていましたが、追加されたアルファベットは顔文字でも使われている「ლ」の 1 語彙のみでした)。このため、データセットを含めた見直しも不可欠です。これからはトークナイザにとどまらず、学習効率や推論効率の改善を続けていきたいと考えています。

仲間募集中

PFN/PFEでは今後もLLMの開発を継続して行っていきます。今回紹介した課題だけでなく様々なやりがいのある課題に取り組んでいますので、一緒に情熱をもって挑戦していく仲間を募集しています。

興味がある方はぜひご応募よろしくお願いします。

https://www.preferred.jp/ja/careers/

  • Twitter
  • Facebook