今回は、トークナイザーを使ってみます。
(Transformersのインストールは完了している想定となります。)
トークナイザー
トークナイザーは自然言語の入力テキストを深層学習モデルの入力データに変換する処理です。
深層学習モデルの入力データはテンソルと呼ばれる多次元配列になります。
トークナイザーの準備
AutoTokenizerクラスの作成時に‘bert-base-cased’を指定すると、BERTモデル用のトークナイザーとなります。
[Google Colaboratory]
1 | from transformers import AutoTokenizer |
[実行結果]
1 | Downloading: 100% |
自然言語テキストをテンソルにエンコード
tokenizer.encodeを使うと、自然言語テキストをテンソルにエンコードすることができます。
[Google Colaboratory]
1 | # 自然言語テキストをテンソルにエンコード |
[実行結果]
1 | tensor([[ 101, 8667, 117, 146, 112, 182, 170, 1423, 5650, 106, 102]]) |
テンソルを自然言語テキストにデコード
tokenizer.decodeを使うと、テンソルを自然言語テキストにデコードすることができます。
[Google Colaboratory]
1 | # テンソルを自然言語テキストにデコード |
[実行結果]
1 | [CLS] Hello, I'm a single sentence! [SEP] |
複数の自然言語テキストをテンソルにエンコード
tokenizer.encode_plusを使うと、複数の自然言語テキストをテンソルにエンコードすることができます。
[Google Colaboratory]
1 | # 複数の自然言語テキストをテンソルにエンコード |
戻り値の意味は次の通りです。
- input_ids
トークンIDの配列 - token_type_ids
複数の文章を判定するバイナリマスク - attention_mask
パディング時に埋め込み文字かどうかを判定するバイナリマスク
[実行結果]
1 | {'input_ids': tensor([[ 101, 1188, 1110, 170, 2304, 102, 1188, 1110, 170, 5618, 106, 102]]), |
テンソルを複数の自然言語テキストにデコード
tokenizer.decodeを使うと、テンソルを複数の自然言語テキストにデコードすることができます。
[Google Colaboratory]
1 | # テンソルを複数の自然言語テキストにデコード |
[実行結果]
1 | [CLS] This is a question [SEP] This is a context! [SEP] |
BERTのスペシャルトークンとしては、次のようなものがあります。
- [CLS]
文頭に埋め込むトークン(classification) - [SEP]
文と文の間に埋め込むトークン(separator) - [PAD]
指定された長さに満たさない文を埋めるトークン(padding) - [MASK]
マスクしたトークン(mask)