NLPの前処理は大変!〜『BERT による自然言語処理入門』第七回「HuggingFace Transformers」(その3)

AI学習ダイアリー
カツオのたたき、さくで買って切って富士ポン酢。ミニトマトのせ。

4.Transformers

この項では、
Transformersというライブラリで、
単語の分散表現を得るために、

1.Tokenizerで、文章データをBERTに入力可能な形に変換する(符号化)
2.BertModelに、符号化データを入力して出力(トークンの分散表現)を得る

まずは、

1.Tokenizer(トークナイザ)

いくらA Iが賢いといっても、
日本語をそのまま受け付けるわけではない。

BERTの日本語モデル(*1)のトークナイザでは、

1.文章をMecab (*2)で単語に分割し、

さらに、

2.WordPieceトークンに分割するのだ。

さらにさらに、
トークン化しただけではだめで、

トークンを数字(ID)に変換する(符号化)

さらにさらにさらに、

系列長(トークン列の長さ)を揃えるために、paddingtruncationを行い、
データ形式をtorch. Tensor(*3)にするために、tokenizer関数の引数に、return_tensors=‘ptを加える。

ここまでお化粧して初めて、
BERT様に文章データを入力できるのだ。

これら一連の処理を、
「データの前処理」という(*4)

*1   本書では、東北大学の研究チームによって開発された、cl-tohoku/bert-base-japanese-whole-world-maskingという日本語のモデルを「日本語モデル」と呼んでいる。
*2 PythonでMecabを使えるライブラリとしてFugashiを使っているが、Janomeというものもある。
*3 Pytorchの多次元配列を扱う型。機械学習のために必要なテンソルの概念は数学だ‼️

*4 NLPの作業で一番大変なのは前処理で、初心者(わたしです)はたいていここで挫折する。ちなみに前処理としては他に、テキストのクリーニング(例えば、スクレイピングしたテキストからHTMLタグを除去するなど)、単語の正規化(文字種の統一、つづりや表記揺れの吸収など)、ストップワードの除去(は、の、です、ます、など役に立たない単語を処理対象外とする作業)などがある(機械学習・深層学習による自然言語処理入門より)。

この本も日本語データを使っている(BERTではない)

 

2年前、キカガクのA Iスクールで文章生成したときは、
Mecabで単語分割だけをして符号化した。

左の写真は和布蕪(めかぶ)。美味しいらしい。

が、このモデルでは、
さらにWordPieceを使ってトークンに分割している(ここで「サブワード分割」が出てくる)。

あと、
Mecabで使う辞書は、デフォルトのipadicではなく、
新語対応しているNEologd(mecab-ipadic-neologd)を使ったほうがいい、
と聞いた気がするが、
このモデルの場合はどうだろう?

余裕ができたら試してみよう。

Follow me!

PAGE TOP