【自然言語処理】Kaggleコンペで利用されている文書分類のtips
Kaggleの文書分類タスクにおける参加者のtipsがText Classification: All Tips and Tricks from 5 Kaggle Competitionsにまとまっていました。英語が前提になっているものの、参考になったので目を通し、概要をまとめました。 また日本語を対象とした場合に参考になりそうな記事も挙げておきます。
目次
大規模データの扱い
普通のノートPCやKaggleカーネルでは大規模なデータを処理するのが難しくなります。 そのような場合は以下のような工夫がされています。
- データの型を変換してメモリサイズを減らす
- 並列処理ライブラリ Dask を用いた処理速度を高速化する
- parquetやfeatuerを用いてpandasのDataFrameの読み込みと書き込みを高速化する
外部データの利用
小規模なデータでは、外部データを使ってモデルを事前学習する利用するなどの方法が考えられます。 英語の、特に質問応答タスクではSQuADなどのデータを活用したりするようです。
元記事は英語を対象としているため、触れられていませんが、日本語で無料で利用できる規模の大きなデータといえばWikipediaくらいでしょうか。
データ拡張
小規模なデータに関して、学習データの数を増やす方法も考えられます。例えば以下の方法が紹介されています。
- 類義語辞書があるなら、単語を置き換えて言い換えを作成する
- テキスト中の単語をランダムに置き換える、マスクする
- ラベルなしテキストに対して、モデルが高い信頼度で予測した結果を使って擬似的な学習データとする
- 機械翻訳モデルを使って、テキストを別の言語へ翻訳し、再び英語に戻すことで、もとのテキストの言い換えを作成する方法 (逆翻訳)
データ分析
上位の参加者はデータを深く分析して、得られた知見をモデル化に活用しています。 いきなりBERTを使う、のでも良い評価値になるかもしれませんが、データの特徴をうまくモデル化できたほうが良い評価値が得られやすいということですね。 たとえばTwitterを対象とした分類タスクであれば、ツイートの発話者がどのようなバックグラウンドをもっているかなどの分析をしています。
前処理
自然言語処理では前処理はより良い評価値を得るために重要で、Kaggleの好成績者は丁寧に前処理に取り組んでいます。 ソーシャルメディアを対象とした自然言語処理タスクであれば、タイポの修正などをおこなっています。 また、多言語タスクであれば、言語の同定も必要となります。 事前学習済みの単語ベクトルを利用するのであれば、テキストに含まれる単語を事前学習済みのベクトルを参照できるようにする方法も紹介しています。
元記事では英語が対象となっていて触れられていませんが、日本語に関しては以下の記事が参考になります。
テキストの表現
ニューラルネットワークや他の機械学習モデルへ入力する前に、テキストを何らかの表現に変換する必要があり、GloVeを始めとしたstaticなベクトル表現、BERTなどの文脈を考慮したベクトル表現が紹介されています。
モデル化
タスクにあったモデルアーキテクチャの設計について触れています。 LSTMやGRUなどのモデルがよく用いられており、また良い成績となっています。 特にLSTMやGRUを2層にしたアーキテクチャがよく用いられているようです。 また損失関数もタスクに合わせて設計する必要があります。
学習時の工夫
開発データにおける評価値の改善が見られない場合、学習率を小さくする、学習を終了する (early stopping) など、学習時の損失関数の推移をモニタリングしています。
他に、一定の間隔でモデルのパラメータの平均値を取ることで、より良い評価値を出すような工夫もされています (Stochastic Weigth Averaging)。
評価
できるだけ公平なデータセットでモデルを評価するために交差検定が用いられます。 交差検定にも様々な方法があり、それについて触れています。 具体的には以下のような交差検定が紹介されています。
- ラベルの偏りが少なくなるような交差検定 (Stratified Kfold)
- 未知のサンプルに対して評価ができるような交差検定 (Group Kfold)
他にも学習データと開発データのサンプルの分布が似ているか確認する方法 (Adversarial validation) も紹介されています。
実行時の消費メモリ・速度改善
できるだけ効率的に実験を進めるためにGPUの効率的な利用方法、単語列のtruncate (テキストに含まれる単語をすべて使うのではなく、先頭からN単語のみを用いる) などが用いられます。
モデルのアンサブル化
更に良い評価値を得るためにモデルをアンサンブル化がよく用いられます。 よく用いられるアンサンブルアルゴリズム (複数のモデルの予測結果の重み付き平均値を取る、スタッキングなど) について触れています。
まとめ
本記事ではText Classification: All Tips and Tricks from 5 Kaggle Competitionsにまとめられているtipsの概要を紹介するとともに、日本語を対象とした場合の前処理に関する参考記事についても触れました。