Graph Convolutionで自然言語処理を行う(テキスト分類編) Part1
本記事から、Graph Convolutionのテキスト分類における効果を検証してみます。Graph Convolutionの手法としては、前連載で実装したGraph Attention Networkを使用します。
当初の計画では言語モデルでの検証を考えていました。ただ、言語モデルの学習形態とグラフ構築に必要な構文解析とは相容れないところがあります。言語モデルは単語単位の処理である一方、構文解析は文(=単語のまとまり/バッチ)単位の処理であるためです。言語モデルへの適用は転移学習を見据えているためですが、現状ではそもそもGraph Convolutionの効果(=転移したいだけの効果)がわかっていないため、まず効果を確認してから挑戦をしようと思います。
本連載では代表的なタスクであるテキスト分類に挑戦します。データセットとしては、Multi-NLIを用います。検証手順は以下の通りです。
- Multi-NLIの分析と、分析結果に応じた前処理を行う
- ベースラインとなるモデルを構築し、分類精度を確認(TF-IDFとLSTMを使用)
- Graph Attention Networkを使用した場合の分類精度を確認
Multi-NLIは、文同士の関係を推論するためのデータセットです(同じ意味/反対のことを述べている、など)。”Multi”の名の通り、様々なジャンルの文が用意されています。今回は、このジャンルを推定するテキスト分類のデータセットとして使用します。
Multi-NLIを利用するメリットは2つあります。1点目は、データが単一の文である点です。Graphは文の構文解析結果から作るため、単一の文書の方が行いやすいです。2点目は、様々なタスクの検証に使える点です。本来の文関係はもちろん、今回のテキスト分類、またMulti-NLIを翻訳したXNLIというデータセットがあるため翻訳の検証も可能です。
Part1である本記事では、Multi-NLIの分析と前処理を行います。Multi-NLIはKaggleで公開されているため、KaggleのKernelで分析を行いました。分析結果は以下から参照可能です。
分析を元に実装した、データのダウンロード・前処理の実装は以下になります。
では、詳細な解説に入ります
Multi-NLIの分析
Multi-NLIに含まれている、各ジャンルのデータ件数は以下のようになります。ほぼ同じ件数であることがわかります。なお、このデータはテストセットのデータになります。
論文中には、各ジャンルのデータが何件含まれているか示されています。9/11以降のジャンルにおいて、Trainのデータ数が0になっています。これは、学習していないジャンルの文についても判定が可能か検証するための構成です。学習データがないジャンルのデータは、学習とテストでジャンルが異なる=Mismatchedのタスクで使用されます。
今回はテキスト分類を行いたいため、10ジャンルのデータが揃っているDevを学習用に、Testをテスト用に使います。
ジャンルごとの、文の長さの分布は以下のようになっています。概ね同じような分布ですが、fictionは短い文が多くtravelは長めの文が多そうです。
実際に、どんな文が入っているかみてみましょう。一番長い文は以下のようなものです。
"um you know i'm not sure i'm not positive i didn't i didn't really think about that i just remember trying to figure out where you could get that was real close to the good section but in the little bit cheaper but not that i'll ever go i hadn't been to a Cowboys game last time last time i went to the Cowboys game was during that um NFL strike or the when they had the scab team teams in there and it was the uh Dallas and Washington Redskins game and i went because my dad can usually get a hold of some free tickets because a lot of those doctors have season tickets and they um if they're not going to use them they'll give them to somebody else so my dad i went with my dad to a game that one time but that wasn't a real you know it was it was the scab teams it was kind of you know it was kind of different i guess and before that it's been quite a few years i've been wanting to go to a game i just never never have gotten around to it so maybe this year Texans cheap cheaper i guess"
だいぶマシンガントークな感じです。逆に最も短いのは短すぎです。
Besancon
Multi-NLIの前処理
データを見ると重複があるようなので、これを除去します(おそらく、2つの文のうち片方が同じデータが複数ある)。また、単語の数でデータをフィルタします。何か意味のあることを言おうとしたら最低3単語は必要なはずです(SVO)。上限としては、英国政府(GOV.UK)がわかりやすい文書の基準としてあげているのが1文25単語までなので、この基準を採用します。
処理はKaggleのKernelに記載していますが、結果としてデータ数は以下のように減ります。
- 重複の除去: 9796 => 3335
- 単語数による制限: 3335 => 2212
データのフィルタにより、以下のようにジャンルごとの件数に偏りが発生します。そのため一番小さいtravelに数を合わせます(選択はランダムサンプリングで実行)。
ジャンルごとの文の長さは以下のようになります。fiction/telephoneが短めで、travelが長めのようです。
これで分析の準備ができました。次回は、まずベースラインのモデルの精度を検証してみようと思います。