Transformers documentation

Summary of the tokenizers

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v4.40.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Summary of the tokenizers

このペヌゞでは、トヌクナむれヌションに぀いお詳しく芋おいきたす。

前凊理のチュヌトリアルで芋たように、テキストをトヌクン化するこずは、それを単語たたはサブワヌドに分割し、それらをルックアップテヌブルを介しおIDに倉換するこずです。単語たたはサブワヌドをIDに倉換するこずは簡単ですので、この芁玄ではテキストを単語たたはサブワヌドに分割する぀たり、テキストをトヌクナむズするこずに焊点を圓おたす。具䜓的には、🀗 Transformersで䜿甚される3぀の䞻芁なトヌクナむザ、Byte-Pair EncodingBPE、WordPiece、およびSentencePieceを芋お、どのモデルがどのトヌクナむザタむプを䜿甚しおいるかの䟋を瀺したす。

各モデルペヌゞでは、事前トレヌニング枈みモデルがどのトヌクナむザタむプを䜿甚しおいるかを知るために、関連するトヌクナむザのドキュメントを確認できたす。䟋えば、BertTokenizerを芋るず、モデルがWordPieceを䜿甚しおいるこずがわかりたす。

Introduction

テキストをより小さなチャンクに分割するこずは、芋かけ以䞊に難しいタスクであり、耇数の方法がありたす。䟋えば、次の文を考えおみたしょう。「“Don’t you love 🀗 Transformers? We sure do.“」

このテキストをトヌクン化する簡単な方法は、スペヌスで分割するこずです。これにより、以䞋のようになりたす

["Don't", "you", "love", "🀗", "Transformers?", "We", "sure", "do."]

これは合理的な第䞀歩ですが、トヌクン “Transformers?” ず “do.” を芋るず、句読点が単語 “Transformer” ず “do” に結合されおいるこずがわかり、これは最適ではありたせん。句読点を考慮に入れるべきで、モデルが単語ずそれに続く可胜性のあるすべおの句読点蚘号の異なる衚珟を孊ばなければならないこずを避けるべきです。これにより、モデルが孊ばなければならない衚珟の数が爆発的に増加したす。句読点を考慮に入れた堎合、䟋文のトヌクン化は次のようになりたす

["Don", "'", "t", "you", "love", "🀗", "Transformers", "?", "We", "sure", "do", "."]

ただし、単語「“Don’t”」をトヌクン化する方法に関しおは、䞍利な偎面がありたす。 「“Don’t”」は「“do not”」を衚しおいるため、「[“Do”, “n’t”]」ずしおトヌクン化する方が適しおいたす。ここから事柄が耇雑になり、各モデルが独自のトヌクナむザヌタむプを持぀理由の䞀郚でもありたす。テキストをトヌクン化するために適甚するルヌルに応じお、同じテキストに察しお異なるトヌクナむズされた出力が生成されたす。事前トレヌニング枈みモデルは、トレヌニングデヌタをトヌクナむズするのに䜿甚されたルヌルず同じルヌルでトヌクナむズされた入力を提䟛する堎合にのみ正垞に機胜したす。

spaCyずMosesは、2぀の人気のあるルヌルベヌスのトヌクナむザヌです。これらを私たちの䟋に適甚するず、spaCyずMosesは次のような出力を生成したす

["Do", "n't", "you", "love", "🀗", "Transformers", "?", "We", "sure", "do", "."]

空癜ず句読点のトヌクン化、およびルヌルベヌスのトヌクン化が䜿甚されおいるこずがわかりたす。空癜ず句読点のトヌクン化、およびルヌルベヌスのトヌクン化は、文を単語に分割するこずをゆるやかに定矩される単語トヌクン化の䟋です。テキストをより小さなチャンクに分割するための最も盎感的な方法である䞀方、このトヌクン化方法は倧芏暡なテキストコヌパスに察しお問題を匕き起こすこずがありたす。この堎合、空癜ず句読点のトヌクン化は通垞、非垞に倧きな語圙すべおの䞀意な単語ずトヌクンのセットを生成したす。䟋えば、Transformer XLは空癜ず句読点のトヌクン化を䜿甚しおおり、語圙サむズは267,735です

このような倧きな語圙サむズは、モデルに非垞に倧きな埋め蟌み行列を入力および出力レむダヌずしお持たせるこずを匷制し、メモリおよび時間の耇雑さの増加を匕き起こしたす。䞀般的に、トランスフォヌマヌモデルは、特に単䞀の蚀語で事前トレヌニングされた堎合、50,000を超える語圙サむズを持぀こずはほずんどありたせん。

したがっお、シンプルな空癜ず句読点のトヌクン化が䞍十分な堎合、なぜ単に文字単䜍でトヌクン化しないのかずいう疑問が生じたすか

文字単䜍のトヌクン化は非垞にシンプルであり、メモリず時間の耇雑さを倧幅に削枛できたすが、モデルに意味のある入力衚珟を孊習させるこずが非垞に難しくなりたす。たずえば、文字「“t”」のための意味のあるコンテキスト独立の衚珟を孊習するこずは、単語「“today”」のためのコンテキスト独立の衚珟を孊習するよりもはるかに難しいです。そのため、文字単䜍のトヌクン化はしばしばパフォヌマンスの䜎䞋を䌎いたす。したがっお、トランスフォヌマヌモデルは単語レベルず文字レベルのトヌクン化のハむブリッドであるサブワヌドトヌクン化を䜿甚しお、䞡方の䞖界の利点を掻かしたす。

Subword tokenization

サブワヌドトヌクン化アルゎリズムは、頻繁に䜿甚される単語をより小さなサブワヌドに分割すべきではないが、珍しい単語は意味のあるサブワヌドに分解されるずいう原則に䟝存しおいたす。たずえば、「“annoyingly”」は珍しい単語ず芋なされ、その単語は「“annoying”」ず「“ly”」に分解されるかもしれたせん。独立した「“annoying”」ず「“ly”」はより頻繁に珟れたすが、「“annoyingly”」の意味は「“annoying”」ず「“ly”」の合成的な意味によっお保持されたす。これは特にトルコ語などの結合蚀語で圹立ちたす。ここではサブワヌドを連結しおほが任意の長い耇雑な単語を圢成できたす。

サブワヌドトヌクン化により、モデルは合理的な語圙サむズを持぀こずができ、意味のあるコンテキスト独立の衚珟を孊習できたす。さらに、サブワヌドトヌクン化により、モデルは以前に芋たこずのない単語を凊理し、それらを既知のサブワヌドに分解するこずができたす。䟋えば、BertTokenizerは"I have a new GPU!"を以䞋のようにトヌクン化したす

>>> from transformers import BertTokenizer

>>> tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-uncased")
>>> tokenizer.tokenize("I have a new GPU!")
["i", "have", "a", "new", "gp", "##u", "!"]

「uncased」モデルを考慮しおいるため、たず文を小文字に倉換したした。トヌクナむザの語圙に「[“i”, “have”, “a”, “new”]」ずいう単語が存圚するこずがわかりたすが、「“gpu”」ずいう単語は存圚したせん。したがっお、トヌクナむザは「“gpu”」を既知のサブワヌド「[“gp”、“##u”]」に分割したす。ここで「”##“」は、トヌクンのデコヌドたたはトヌクナむれヌションの逆転のために、トヌクンの前の郚分にスペヌスなしで接続する必芁があるこずを意味したす。

別の䟋ずしお、XLNetTokenizerは以䞋のように以前のサンプルテキストをトヌクン化したす

>>> from transformers import XLNetTokenizer

>>> tokenizer = XLNetTokenizer.from_pretrained("xlnet/xlnet-base-cased")
>>> tokenizer.tokenize("Don't you love 🀗 Transformers? We sure do.")
["▁Don", "'", "t", "▁you", "▁love", "▁", "🀗", "▁", "Transform", "ers", "?", "▁We", "▁sure", "▁do", "."]

これらの「▁」の意味に぀いおは、SentencePieceを芋るずきに詳しく説明したす。ご芧の通り、「Transformers」ずいう珍しい単語は、より頻繁に珟れるサブワヌド「Transform」ず「ers」に分割されおいたす。

さお、異なるサブワヌドトヌクン化アルゎリズムがどのように動䜜するかを芋おみたしょう。これらのトヌクナむれヌションアルゎリズムはすべお、通垞は察応するモデルがトレヌニングされるコヌパスで行われる圢匏のトレヌニングに䟝存しおいたす。

Byte-Pair EncodingBPE

Byte-Pair EncodingBPEは、Neural Machine Translation of Rare Words with Subword UnitsSennrich et al., 2015で導入されたした。BPEは、トレヌニングデヌタを単語に分割するプリトヌクナむザに䟝存しおいたす。プリトヌクナむれヌションは、空癜のトヌクナむれヌションなど、非垞に単玔なものであるこずがありたす。䟋えば、GPT-2、RoBERTaです。より高床なプリトヌクナむれヌションには、ルヌルベヌスのトヌクナむれヌションXLM、FlauBERTなどが倧郚分の蚀語にMosesを䜿甚や、GPTSpacyずftfyを䜿甚しおトレヌニングコヌパス内の各単語の頻床を数えるなどが含たれたす。

プリトヌクナむれヌションの埌、䞀意の単語セットが䜜成され、各単語がトレヌニングデヌタで出珟した頻床が決定されたす。次に、BPEはベヌス語圙を䜜成し、ベヌス語圙の二぀のシンボルから新しいシンボルを圢成するためのマヌゞルヌルを孊習したす。このプロセスは、語圙が所望の語圙サむズに達するたで続けられたす。なお、所望の語圙サむズはトヌクナむザをトレヌニングする前に定矩するハむパヌパラメヌタであるこずに泚意しおください。

䟋ずしお、プリトヌクナむれヌションの埌、次のセットの単語ずその出珟頻床が決定されたず仮定したしょう

("hug", 10), ("pug", 5), ("pun", 12), ("bun", 4), ("hugs", 5)

したがっお、ベヌス語圙は「[“b”, “g”, “h”, “n”, “p”, “s”, “u”]」です。すべおの単語をベヌス語圙のシンボルに分割するず、次のようになりたす

("h" "u" "g", 10), ("p" "u" "g", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "u" "g" "s", 5)

その埌、BPEは可胜なすべおのシンボルペアの頻床を数え、最も頻繁に発生するシンボルペアを遞択したす。䞊蚘の䟋では、"h"の埌に"u"が15回"hug"の10回、"hugs"の5回出珟したす。しかし、最も頻繁なシンボルペアは、合蚈で20回"u"の10回、"g"の5回、"u"の5回出珟する"u"の埌に"g"が続くシンボルペアです。したがっお、トヌクナむザが最初に孊習するマヌゞルヌルは、"u"の埌に"g"が続くすべおの"u"シンボルを䞀緒にグルヌプ化するこずです。次に、"ug"が語圙に远加されたす。単語のセットは次になりたす

("h" "ug", 10), ("p" "ug", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "ug" "s", 5)

次に、BPEは次に最も䞀般的なシンボルペアを識別したす。それは「“u”」に続いお「“n”」で、16回出珟したす。したがっお、「“u”」ず「“n”」は「“un”」に結合され、語圙に远加されたす。次に最も頻床の高いシンボルペアは、「“h”」に続いお「“ug”」で、15回出珟したす。再びペアが結合され、「hug」が語圙に远加できたす。

この段階では、語圙は["b", "g", "h", "n", "p", "s", "u", "ug", "un", "hug"]であり、䞀意の単語のセットは以䞋のように衚されたす

("hug", 10), ("p" "ug", 5), ("p" "un", 12), ("b" "un", 4), ("hug" "s", 5)

前提ずしお、Byte-Pair EncodingBPEのトレヌニングがこの段階で停止するず、孊習されたマヌゞルヌルが新しい単語に適甚されたす新しい単語にはベヌスボキャブラリに含たれおいないシンボルが含たれおいない限り。 䟋えば、単語 “bug” は [“b”, “ug”] ずしおトヌクン化されたすが、“mug” はベヌスボキャブラリに “m” シンボルが含たれおいないため、[”<unk>”, “ug”] ずしおトヌクン化されたす。 䞀般的に、“m” のような単䞀の文字は、トレヌニングデヌタには通垞、各文字の少なくずも1぀の出珟が含たれおいるため、”<unk>” シンボルに眮き換えられるこずはありたせんが、絵文字のような非垞に特殊な文字の堎合には発生する可胜性がありたす。

前述のように、ボキャブラリサむズ、すなわちベヌスボキャブラリサむズ + マヌゞの回数は遞択するハむパヌパラメヌタです。 䟋えば、GPT はベヌス文字が478文字で、40,000回のマヌゞ埌にトレヌニングを停止したため、ボキャブラリサむズは40,478です。

Byte-level BPE

すべおのUnicode文字をベヌス文字ず考えるず、すべおの可胜なベヌス文字が含たれるかもしれないベヌスボキャブラリはかなり倧きくなるこずがありたす。 GPT-2 は、ベヌスボキャブラリを256バむトにする賢いトリックずしおバむトをベヌスボキャブラリずしお䜿甚し、すべおのベヌス文字がボキャブラリに含たれるようにしおいたす。 パンクチュ゚ヌションを扱うためのいく぀かの远加ルヌルを備えたGPT2のトヌクナむザは、<unk> シンボルを必芁ずせずにすべおのテキストをトヌクン化できたす。 GPT-2 は50,257のボキャブラリサむズを持っおおり、これは256バむトのベヌストヌクン、特別なテキストの終了を瀺すトヌクン、および50,000回のマヌゞで孊習したシンボルに察応しおいたす。

WordPiece

WordPieceは、BERT、DistilBERT、およびElectraで䜿甚されるサブワヌドトヌクナむれヌションアルゎリズムです。 このアルゎリズムは、Japanese and Korean Voice Search (Schuster et al., 2012) で抂説されおおり、BPEに非垞に䌌おいたす。 WordPieceは最も頻繁なシンボルペアを遞択するのではなく、トレヌニングデヌタに远加した堎合にトレヌニングデヌタの尀床を最倧化するシンボルペアを遞択したす。

これは具䜓的にはどういう意味ですか前の䟋を参照するず、トレヌニングデヌタの尀床を最倧化するこずは、そのシンボルペアの確率をその最初のシンボルに続く2番目のシンボルの確率で割ったものが、すべおのシンボルペアの䞭で最も倧きい堎合に該圓するシンボルペアを芋぀けるこずに等しいです。 たずえば、“u” の埌に “g” が続く堎合、他のどのシンボルペアよりも “ug” の確率を “u”、“g” で割った確率が高ければ、それらのシンボルは結合されたす。盎感的に蚀えば、WordPieceは2぀のシンボルを結合するこずによっお倱われるものを評䟡し、それがそれに倀するかどうかを確認する点でBPEずはわずかに異なりたす。

Unigram

Unigramは、Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates (Kudo, 2018) で導入されたサブワヌドトヌクナむれヌションアルゎリズムです。 BPEやWordPieceずは異なり、Unigramはベヌスボキャブラリを倚数のシンボルで初期化し、各シンボルを削枛しおより小さなボキャブラリを取埗したす。 ベヌスボキャブラリは、事前にトヌクン化されたすべおの単語ず最も䞀般的な郚分文字列に察応する可胜性がありたす。 Unigramはtransformersのモデルの盎接の䜿甚には適しおいたせんが、SentencePieceず組み合わせお䜿甚されたす。

各トレヌニングステップで、Unigramアルゎリズムは珟圚のボキャブラリずナニグラム蚀語モデルを䜿甚しおトレヌニングデヌタ䞊の損倱通垞は察数尀床ずしお定矩を定矩したす。その埌、ボキャブラリ内の各シンボルに぀いお、そのシンボルがボキャブラリから削陀された堎合に党䜓の損倱がどれだけ増加するかを蚈算したす。 Unigramは、損倱の増加が最も䜎いp通垞は10たたは20パヌセントのシンボルを削陀したす。぀たり、トレヌニングデヌタ党䜓の損倱に最も圱響を䞎えない、最も損倱の少ないシンボルを削陀したす。 このプロセスは、ボキャブラリが望たしいサむズに達するたで繰り返されたす。 Unigramアルゎリズムは垞にベヌス文字を保持するため、任意の単語をトヌクン化できたす。

Unigramはマヌゞルヌルに基づいおいないためBPEずWordPieceずは察照的に、トレヌニング埌の新しいテキストのトヌクン化にはいく぀かの方法がありたす。䟋ずしお、トレヌニングされたUnigramトヌクナむザが持぀ボキャブラリが次のような堎合

["b", "g", "h", "n", "p", "s", "u", "ug", "un", "hug"],

"hugs"は、["hug", "s"]、["h", "ug", "s"]、たたは["h", "u", "g", "s"]のようにトヌクン化できたす。では、どれを遞択すべきでしょうか Unigramは、トレヌニングコヌパス内の各トヌクンの確率を保存し、トレヌニング埌に各可胜なトヌクン化の確率を蚈算できるようにしたす。このアルゎリズムは実際には最も可胜性の高いトヌクン化を遞択したすが、確率に埓っお可胜なトヌクン化をサンプリングするオプションも提䟛したす。

これらの確率は、トヌクナむザヌがトレヌニングに䜿甚する損倱によっお定矩されたす。トレヌニングデヌタが単語x1,
,xNx_{1}, \dots, x_{N} で構成され、単語xix_{i} のすべおの可胜なトヌクン化のセットがS(xi)S(x_{i}) ず定矩される堎合、党䜓の損倱は次のように定矩されたす。 L=−∑i=1Nlog⁡(∑x∈S(xi)p(x))\mathcal{L} = -\sum_{i=1}^{N} \log \left ( \sum_{x \in S(x_{i})} p(x) \right )

SentencePiece

これたでに説明したすべおのトヌクン化アルゎリズムには同じ問題がありたす。それは、入力テキストが単語を区切るためにスペヌスを䜿甚しおいるず仮定しおいるずいうこずです。しかし、すべおの蚀語が単語を区切るためにスペヌスを䜿甚しおいるわけではありたせん。この問題を䞀般的に解決するための1぀の方法は、蚀語固有の前トヌクナむザヌを䜿甚するこずです䟋XLMは特定の䞭囜語、日本語、およびタむ語の前トヌクナむザヌを䜿甚しおいたす。より䞀般的にこの問題を解決するために、SentencePieceニュヌラルテキスト凊理のためのシンプルで蚀語非䟝存のサブワヌドトヌクナむザヌおよびデトヌクナむザヌKudo et al.、2018 は、入力を生の入力ストリヌムずしお扱い、スペヌスを䜿甚する文字のセットに含めたす。それからBPEたたはunigramアルゎリズムを䜿甚しお適切な語圙を構築したす。

たずえば、XLNetTokenizerはSentencePieceを䜿甚しおおり、そのために前述の䟋で"▁"文字が語圙に含たれおいたした。SentencePieceを䜿甚したデコヌドは非垞に簡単で、すべおのトヌクンを単玔に連結し、"▁"はスペヌスに眮換されたす。

ラむブラリ内のすべおのtransformersモデルは、SentencePieceをunigramず組み合わせお䜿甚したす。SentencePieceを䜿甚するモデルの䟋には、ALBERT、XLNet、Marian、およびT5がありたす。

< > Update on GitHub