🔢

日本語トークナイザーを準備する意味(トークナイザー前編)

2024/09/19に公開

はじめに

これまで、松尾・岩澤研究室の投稿では、何度かトークナイザーについて触れていますが、今回は

  • なぜ日本語トークナイザーが必要なのか
    を解説したいと思います。

トークナイザーの役割(事前学習から推論まで)

LLMにおけるトークナイザーの役割として、一般的にはテキストをトークンに分割し、それをモデルに入力することが挙げられます。しかし、トークナイザーはそれ以外の役割も担っています。ここでは、事前学習、事後学習、推論時におけるトークナイザーの役割について整理してみます。

  • 事前学習:
    事前学習では、トークナイザーは大量のテキストデータを処理し、これを単語やサブワードといったトークンに分割します。
    さらに、トークナイザーはエンコードの役割も担います。エンコードとは、各トークンに対応する数値を割り当てるプロセスであり、これによりモデルはテキストを数値データとして処理できるようになります。

  • 継続事前学習:
    継続事前学習では、トークナイザーは特定のタスクやドメインに合わせて語彙拡張することが可能です。この段階では、例えば、医療分野のテキストを処理する場合、トークナイザーに医療用語に関連する新しい単語やフレーズが語彙を追加することで、適切にトークン化できるように調整できます。例えば、ELYZA-japanese-Llama-2-7b-fastでは、英語中心で学習したモデルの語彙を日本語に最適化するため、語彙拡張を実施しています。[1]

  • 事後学習:
    事後学習では、特定のタスクに関する語彙を追加することが可能です。例えば、SFTにおいて、指示、入力、応答を表す語彙を追加すること、が考えられます。

  • 推論:
    推論時には、トークナイザーはエンコードに加えてデコードの役割も担います。デコードは、エンコードの反対の役割、すなわちモデルが出力した数値から、各トークンに対応するテキストに変換して、再び人間が理解できる形式に変換します。

日本語の文法的特徴

多くのLLMが英語をベースとして開発されていますが、日本語のLLMを開発する際には、以下に挙げる特有の課題があり、工夫が求められます。

  • 文字体系:

    • 英語はアルファベットを使用し、26文字の大文字、小文字の組み合わせで表現されます。
    • 日本語は漢字、ひらがな、カタカナの3つの文字体系を持ちます。特に漢字は数千種類あり、読み方や意味が多様で、学習や処理が複雑になります。
  • 単語の区切り:

    • 英語は単語ごとにスペースで区切られているため、その区切りは明確です。
    • 日本語は単語の区切りが明確でないため、次の語を予測するためには、形態素解析など何らかの区切りを設定する必要があります。
  • 文法構造:

    • 英語は主語-動詞-目的語(SVO)の順序で文が構成されます。
    • 日本語は主語-目的語-動詞(SOV)の順序で文が構成され、助詞が文の意味を決定する重要な役割を果たします。TEAM JINIACでヒンディー語を試してみたのは、ヒンディー語が(SOV)型の文法構造であったことも大きな理由の一つです。
  • 語彙の多様性:

    • 英語は比較的少ない語彙で多くの意味を表現することができます。
    • 日本語は英語に比べて、多くの語彙の学習が必要となります。[2]これは、同じ意味を持つ複数の表現が存在し、文脈によって使い分けが必要となることも一因だと考えます。

このような日本語の特有の課題を克服し、自然言語処理の精度を向上させるため、日本語トークナイザーは不可欠なツールです。Data Analytics Labによるトークナイザーの記事[3]では、日本語LLMにおけるトークナイザーの重要性について解説しています。特に、トークナイザーの最適化を通じて日本語処理の性能を向上させている、Japanese StableLM AlphaとELYZA-japanese-Llama-2-7bのトークナイザーの工夫とその効果について詳述しています。また、形態素解析やSentencePiece[4]などの手法が紹介されています。

日本語の特性にあったトークナイザー

日本語の文法的特徴に対応するため、トークナイザー側で、考慮すべき工夫について考えてみます。

  • 文字体系への対応:
    全角・半角、異体字など、同じ意味を持つ別の文字に対しては、文字正規化というテキストデータを一貫した形式に変換するプロセスを検討する必要があります。日本語では、全角数字や漢数字、半角カタカナ、名前の異体字などについて考慮が必要です。モデルの事前学習に使用するデータセットと、トークナイザーの学習で使用するデータセットでは、文字正規化を行うかどうかを統一しておく必要があります。

  • 文章の区切り方:
    文章を区切る方法としては、大きく3つの方法が考えられます。単語単位、文字単位、その中間です。
    一般的に、トークナイザーでは、サブワードという単語と文字の中間である単位で文章を区切ります。
    日本語は単語の区切りが明確でないため、文字単位をつなげていき、サブワードにするというアプローチが考えられます。もう一つは、単語単位を分割していき、サブワードにするというアプローチです。
    ただし、この場合には、「一旦、単語単位に分割する」という前処理が必要になります。

形態素解析器使用のメリットとデメリット

現在の日本語LLMの多くが、BytePairEncoding(BPE)やUnigramといった手法でサブワード分割を行っています。しかし、日本語の自然言語処理の分野では、LLMが登場するより前から、文章を適切な単位で分割する形態素解析器が開発されてきました。例えばMecabの最初のリリースは2006年にさかのぼります。日本語のLLM構築に形態素解析器を使用した場合の、メリットとデメリットは何でしょうか?

メリットとしては、日本語の単語の区切りを明示できる点が挙げられます。また、正確に文章を分かち書きしているので、学習精度の向上が期待されます。
一方で、MecabとSentencepieceの作者は、Sentencepiece の分割を MeCab っぽくする[5]で、以下のようにデメリットを述べています。

  • 形態素解析が入力した空白と、元からある空白を区別できないため、分割されたデータから元の文を復元することができません。(可逆処理ではない)。
  • 形態素解析システムに依存するため、メンテナンス性や可搬性が低下します。正しいバージョンの辞書を維持し、管理することは非常に面倒です(世に出回っているBERTモデルのほとんどがどの辞書のバージョンを使用しているかを明記していません。)。
  • 多言語処理が困難になります。

形態素解析器は、日本語の自然言語処理において重要な役割を果たしますが、LLM開発においては万能ではないということを理解しておきたいと思います。

次回は、phase1とphase2で作成したトークナイザーについて、ベースにした手法やコード、それぞれの工夫点について書いていきます。

この成果は、NEDO(国立研究開発法人新エネルギー・産業技術総合開発機構)の助成事業「ポスト5G情報通信システム基盤強化研究開発事業」(JPNP20017)の結果得られたものです。

脚注
  1. 株式会社 ELYZA. (2023). ELYZAが公開した日本語LLM「ELYZA-japanese-Llama-2-7b」についての解説 : (1) 事前学習編. Zenn. https://zenn.dev/elyza/articles/2fd451c944649d ↩︎

  2. 占部匡美. (2011). 日本語教育史における入門期教科書の基礎語彙 (1). 福岡国際大学紀要= Bulletin of Fukuoka International University, (25), 81-87. ↩︎

  3. Data analytics labo. (2023). 日本語LLMにおけるトークナイザーの重要性. Journal. https://dalab.jp/archives/journal/japanese-llm-tokenizer/ ↩︎

  4. @Taku910. (2017). Sentencepiece : ニューラル言語処理向けトークナイザ. Qiita. https://qiita.com/taku910/items/7e52f1e58d0ea6e7859c ↩︎

  5. @Taku910. (2023). Sentencepiece の分割を MeCab っぽくする. Qiita. https://qiita.com/taku910/items/fbaeab4684665952d5a9 ↩︎

東大松尾・岩澤研究室 | LLM開発 プロジェクト[GENIAC]

Discussion