HuggingFace Tokenizers 0.10 : 概要 | Python バインディング概要 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 05/20/2021 (Python v0.10.2)
* 本ページは、HuggingFace Tokenizers の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
スケジュールは弊社 公式 Web サイト でご確認頂けます。
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
- ウェビナー運用には弊社製品「ClassCat® Webinar」を利用しています。
人工知能研究開発支援 | 人工知能研修サービス | テレワーク & オンライン授業を支援 |
PoC(概念実証)を失敗させないための支援 (本支援はセミナーに参加しアンケートに回答した方を対象としています。) |
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション |
E-Mail:sales-info@classcat.com ; WebSite: https://www.classcat.com/ ; Facebook |
HuggingFace Tokenizers : 概要
パフォーマンスと多用途性に焦点を置いた、今日最も利用されているトークナイザーの実装を提供します。
主要な特徴
- 今日最も利用されているトークナイザーを使用して、新しい語彙を訓練してトークン化します。
- Rust 実装のおかげで、非常に高速です (訓練とトークン化の両者で)。サーバの CPU 上で GB のテキストをトークン化するのに 20 秒かかりません。
- 使いやすく、また極めて多用途性もあります。
- 研究とプロダクションのために設計されました。
- 正規化はアラインメント追跡を装備しています。与えられたトークンに対応する元のセンテンスの一部を得ることが常に可能です。
- 前処理の総てを行ないます : 切り捨て、パディングとモデルが必要な特殊トークンを追加します。
バインディング
以下の言語へのバインディングを提供します (more to come!) :
Python を使用するクイック・サンプル
Byte-Pair エンコーディング, WordPiece or Unigram の間でモデルを選択してトークナイザーをインスタンス化します :
from tokenizers import Tokenizer
from tokenizers.models import BPE
tokenizer = Tokenizer(BPE())
どのように事前トークン化 (e.g., 単語に分割する) が成されるかをカスタマイズできます :
from tokenizers.pre_tokenizers import Whitespace
tokenizer.pre_tokenizer = Whitespace()
そしてファイルのセット上でのトークナイザーの訓練は 2 行のコードがかかるだけです :
from tokenizers.trainers import BpeTrainer
trainer = BpeTrainer(special_tokens=["[UNK]", "[CLS]", "[SEP]", "[PAD]", "[MASK]"])
tokenizer.train(files=["wiki.train.raw", "wiki.valid.raw", "wiki.test.raw"], trainer=trainer)
ひとたびトークナイザーが訓練されれば、任意のテキストを 1 行だけでエンコードします :
output = tokenizer.encode("Hello, y'all! How are you 😁 ?")
print(output.tokens)
# ["Hello", ",", "y", "'", "all", "!", "How", "are", "you", "[UNK]", "?"]
更に学習するために python ドキュメント と python クイックツアー を確認してください!
HuggingFace Tokenizers : (bindings/python) 概要
提供されているトークナイザー
殆どの一般的なケースをカバーするために幾つかの事前ビルドされたトークナイザーを提供しています。特定の vocab.json と merges.txt ファイルを使用してこれらの一つを容易にロードできます :
from tokenizers import CharBPETokenizer
# Initialize a tokenizer
vocab = "./path/to/vocab.json"
merges = "./path/to/merges.txt"
tokenizer = CharBPETokenizer(vocab, merges)
# And then encode:
encoded = tokenizer.encode("I can feel the magic, can you?")
print(encoded.ids)
print(encoded.tokens)
そしてそれらを同様に単純に訓練できます :
from tokenizers import CharBPETokenizer
# Initialize a tokenizer
tokenizer = CharBPETokenizer()
# Then train it!
tokenizer.train([ "./path/to/files/1.txt", "./path/to/files/2.txt" ])
# Now, let's use it:
encoded = tokenizer.encode("I can feel the magic, can you?")
# And finally save it somewhere
tokenizer.save("./path/to/directory/my-bpe.tokenizer.json")
提供されているトークナイザー
- CharBPETokenizer: オリジナル BPE
- ByteLevelBPETokenizer: BPE のバイトレベル・バージョン
- SentencePieceBPETokenizer: SentencePiece で使用されるものと互換な BPE 実装
- BertWordPieceTokenizer: WordPiece を使用した、有名な Bert トークナイザー
これらの総てが上で説明されたように利用できて訓練できます!
貴方自身のものを構築する
提供されるトークナイザーが十分な自由度を与えないときはいつでも、必要な様々な部分をまとめることで、貴方自身のトークナイザーを構築できます。私達がどのように 提供されるトークナイザー を実装したかを確認してそれらを貴方自身のニーズに容易に適応せることができます。
バイトレベル BPE を構築する
ここに総ての様々なピースをまとめて、それを単一ファイルにセーブすることによって貴方自身のバイトレベル BPE をどのように構築するかを示すサンプルがあります :
from tokenizers import Tokenizer, models, pre_tokenizers, decoders, trainers, processors
# Initialize a tokenizer
tokenizer = Tokenizer(models.BPE())
# Customize pre-tokenization and decoding
tokenizer.pre_tokenizer = pre_tokenizers.ByteLevel(add_prefix_space=True)
tokenizer.decoder = decoders.ByteLevel()
tokenizer.post_processor = processors.ByteLevel(trim_offsets=True)
# And then train
trainer = trainers.BpeTrainer(vocab_size=20000, min_frequency=2)
tokenizer.train([
"./path/to/dataset/1.txt",
"./path/to/dataset/2.txt",
"./path/to/dataset/3.txt"
], trainer=trainer)
# And Save it
tokenizer.save("byte-level-bpe.tokenizer.json", pretty=True)
今は、このトークナイザーを使用したいとき、これは次のように簡単です :
from tokenizers import Tokenizer
tokenizer = Tokenizer.from_file("byte-level-bpe.tokenizer.json")
encoded = tokenizer.encode("I can feel the magic, can you?")
以上