サブワード

summary:

サブワード[subword]とは,言語処理において,単語をさらに細かい単位に分割した意味や機能を持つ部分文字列である.

サブワードは,語彙外単語[Out-of-Vocabulary, OOV]や未学習語に対しても柔軟に対応できる特徴を持ち,現代の自然言語処理[NLP]モデルにおいて不可欠な役割を果たしている.

サブワード単位の使用は,言語モデルが語彙外の単語を適切に処理するために進化してきた.従来の単語単位[word-level]のトークン化では,訓練データに存在しない単語を処理することが難しく,これが大きな課題となっていた.また,特に日本語や中国語など分かち書きのない言語や,ドイツ語など複合語が豊富な言語では,単語単位の処理に本質的な限界があった.

これに対し,サブワード単位では単語をさらに小さな意味的または形態的単位に分割し,語彙外単語も既存のサブワードを組み合わせることで表現・理解できるようにする.2015年頃からNeural Machine Translation[NMT]の分野で特に注目され始め,Byte Pair Encoding[BPE],WordPiece,Unigram Language Model,SentencePieceなどのアルゴリズムが,サブワードトークン化の手法として広く採用されるようになった.

サブワードトークン化は,単語をそのままの形で扱うのではなく,頻出の部分文字列や形態素単位に分解することを意味する.これにより,言語モデルは以下のようなメリットを得る:

サブワードは,例えば次のような形で分割される:

英語の例:
"unhappiness" → ["un", "happiness"] または ["un", "happy", "ness"]
"tokenization" → ["token", "ization"] または ["token", "iz", "ation"]

ドイツ語の複合語の例:
"Klimaanlage" [エアコン] → ["Klima", "anlage"]

日本語の例:
「こんにちは」 → 「こん」「にちは」 または 「こん」「にち」「は」
「新幹線」 → 「新」「幹線」 または 「新」「幹」「線」

これにより,未学習の単語も,サブワード単位に分けることで既存の知識を活用して処理できる.多くのモデルでは,頻度の高い単語はそのまま1つのトークンとして扱われ,頻度の低い単語や複雑な単語がサブワードに分解される.

一般的には,特殊トークン[通常「##」や「_」などの接頭辞・接尾辞]を使用して,単語の先頭,中間,末尾のサブワードを区別することが多い.例えば,BERTのWordPieceでは「##」が単語内部のサブワードを示す.

日本語は特に,単語と単語を区切るのが難しい言語であり,言語モデルがうまく学習するためには,サブワード単位で意味を捉えることが効果的である.これにより,未知の単語[語彙外単語]や複合語が現れた場合でも,トークン化して学習を行うことができる.

Mathematics is the language with which God has written the universe.





















サブワード SentencePiece tiktoken YARN 関係代数 リレーション