torchtextの使い方

この記事はpytorchで自然言語処理をしていて、テキストの前処理のために torchtextを利用しようと考えている初心者の方に向けた記事となっています。 torchtextにはテキストの前処理やサンプルテキストデータが入っており、 簡単にLSTMなどの分析モデルを試すことができます。 ただ日本語の入門記事が少なく、自分もつまづく部分がありました。 ここでは自分が参考としたサイト・書籍を紹介、 torchtextを使う上での注意点や前処理の流れの概要を説明します。

下記が自分が参考にしたサイト・書籍になります。 特に上2つを並行して学習しました。

参考サイト・書籍

・torchtextで簡単にDeepな自然言語処理
https://qiita.com/itok_msi/items/1f3746f7e89a19dafac5
日本語の記事で一番わかりやすい。
・Pytorchニューラルネットワーク実装ハンドブック(本)の5.3~5.5
前処理から学習(LSTM)までの流れが一貫して試すことができる。 書籍。レシピ的でもう少し解説が欲しいところ。
・TorchTextTutorial
https://github.com/mjc92/TorchTextTutorial/blob/master/01.%20Getting%20started.ipynb
前処理の中心となるField,Dataset,Vocabに焦点を当てて丁寧に説明している(英語)。
・torchtext公式ドキュメント
https://torchtext.readthedocs.io/en/latest/index.html
情報が見当たらない場合、ここで調べる。
自然言語処理における前処理の種類とその威力
https://qiita.com/Hironsan/items/2466fe0f344115aff177
テキストの前処理を広く解説している。※torchtextの記事ではない。

torchtext学習のポイント

torchtextを使いこなすための一番のポイントが
テキストの処理の順序とプログラミングの記述の順序が一致しない。
ということです。

Qiitaの記事でも書籍でも、理解のために前処理の内容が紹介されていますが、 テキストの処理の順序とプログラミングの記述の順序が一致しません。 ※特に書籍の方は無理やりその点を合わせて紹介しているため、 自分は混乱しました。

以下がそれぞれの処理の手順です。

テキスト・torchtextの手順

テキストの処理

テキストの処理
1.テキストの読み込み
2.トークン化(単語で分割)
3.インデックス化
4.バッチ化
5.埋め込み

torchtextの記述

torchtextの記述
1テキストのトークン化・前処理の定義
data.Field(tokenize=tokenizer)
※def tokenizerで自由に記述でき、前処理もここで定義できる。
※書籍だと、splitメソッドが利用されているが、 スペースで分けただけなので、文末がうまく処理できない。 注意書きにもあるようにspaCyの方が良い。
※lowerでテキストを全て小文字に変更する。

2データの読み込み
data.TabularDataset(自分で用意したデータ)
datasets.〇〇(あらかじめ用意されたデータ)
でdatasetの読み込み
この時、データの分割(train, validation, test)もする。

3辞書の作成
Text.build_vocabで辞書作成
ここでindex-string-vectorの辞書が作成される。
freqやitosやstoiやvectorsでアクセスできる。
※min_freqで最低出現頻度を指定できる。
※GloVeやFastTextで学習ずみ単語ベクトルを利用できる。
※番号はfreq降順。

4バッチ化 torchtext.data.Iterator
torchtext.data.BucketIterator paddingもしてくれる。

埋め込み
学習時に3の辞書を使って、ベクトル化させる。