BERT Tokenizer : 英語向けトークナイザ
BERT Tokenizerは言語処理モデルのBERTで使用されている、英語向けのトークナイザです。
BERT Tokenizerについて
BERT Tokenizerは言語処理モデルのBERTで使用されている、英語向けのトークナイザです。英語のテキストを入力し、AI処理可能なトークン列に変換します。

google-bertのリポジトリ
BERT TokenizerはWordPieceでサブワード分割しています。WordPieceのVocabは下記に定義されています。
BERT Tokenizerのアルゴリズム
BERTにはUNCASEDとCASEDがあります。UNCASEDでは、大文字と小文字を区別せず、全て小文字として扱います。CASEDでは、大文字と小文字を区別して扱います。
BERT Tokenizerでは、まず、入力された文字列を、Python標準のSplitを使用して、空白・改行・タブを区切り文字として、単語分割します。さらに、UnicodeにP属性のあるPunctuation記号(!\”#$%&’()*+,-./:;<=>?@[\]^_`{|}~)でも単語分割します。
UNCASEDの場合、さらにアクセント記号の除去を行います。lower()でテキストを小文字にした後、_run_strip_accentsでUnicodeのNFD変換を行い濁音を分割した後、unicodedata.categoryがMnのコードを除去することで、アクセント記号を除いたテキストに変換します。日本語が入力された場合も濁音が除去されるため、「で」が「て」に変換されます。
その後、単語に対してWordPieceを使用して、サブワードに分割します。Vocabに定義された単語リストから、貪欲な最長一致優先戦略でSubword分割が可能です。
BERT Tokenizerのトークナイズの例
入力するテキストを「To be or not to be, that is the question」とすると、空白とPunctuation記号で分割され、[‘to’, ‘be’, ‘or’, ‘not’, ‘to’, ‘be’, ‘,’, ‘that’, ‘is’, ‘the’, ‘question’]となります。
次に、wordpiece分割され、[2000, 2022, 2030, 2025, 2000, 2022, 1010, 2008, 2003, 1996, 3160]となります。これをデコードすると、「to be or not to be, that is the question」となります。
ailia TokenizerからBERT Tokenizerを使用する
アイリア株式会社では、iOSやAndroidにも対応したトークナイザとして、ailia Tokenizerを提供しています。ailia Tokenizer 1.3以降でBERT Tokenizerを使用可能です。
C++によるailia TokenizerでのBERT Tokenizerの実装例です。
AILIATokenizer *net;
ailiaTokenizerCreate(&net, AILIA_TOKENIZER_TYPE_BERT, AILIA_TOKENIZER_FLAG_NONE);
ailiaTokenizerOpenVocabFile(net, "./test/gen/bert/tokenizer/vocab.txt");
ailiaTokenizerOpenTokenizerConfigFile(net, "./test/gen/bert/tokenizer/tokenizer_config.json");
ailiaTokenizerEncode(net, u8"To be or not to be, that is the question");
unsigned int count;
ailiaTokenizerGetTokenCount(net, &count);
std::vector<int> tokens(count);
ailiaTokenizerGetTokens(net, &tokens[0], count);
ailiaTokenizerDestroy(net);
アイリア株式会社はAIを実用化する会社として、クロスプラットフォームでGPUを使用した高速な推論を行うことができるailia SDKを開発しています。アイリア株式会社ではコンサルティングからモデル作成、SDKの提供、AIを利用したアプリ・システム開発、サポートまで、 AIに関するトータルソリューションを提供していますのでお気軽にお問い合わせください。
ailia Tech BLOG