HuggingFace Tokenizers 0.10 : 概要 | Python バインディング概要

HuggingFace Tokenizers 0.10 : 概要 | Python バインディング概要 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 05/20/2021 (Python v0.10.2)

* 本ページは、HuggingFace Tokenizers の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

無料 Web セミナー開催中 クラスキャット主催 人工知能 & ビジネス Web セミナー

人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。
スケジュールは弊社 公式 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!) :

  • Rust (オリジナル実装)
  • Python (訳注 : 本ドキュメント後半で翻訳)
  • Node.js

 

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?")
 

以上