やったこと
先日公開した下記の記事の続編となります。
[自然言語処理のかさ増し手法 Easy Data Augmentation の日本語版を実装する]
(https://qiita.com/tchih11/items/aef9505d26d1bf06a04c)
前回はEasy Data Augmentation(以下、EDA)という手法を使用して日本語の文章をかさ増しする関数を実装しました。今回はその関数を使ってデータセットかさ増しすることによって、実際にモデルの精度が向上するかを検証します。
検証方法
livedoorニュース分類モデルの作成を通じて検証しました。
###流れ
- 500件/1000件/2000件のtrainデータを用意
- それぞれでEDAなしモデル、EDAありモデルを作成
- 予め確保しておいたtestデータ(1471件、全体の2割)に当てはめ、accuracyを比較
###備考
- EDAパラメータはα=[0.05,0.1]、aug_num=[1,2,4,8,16]の組み合わせを試す
- モデルはBERTを使用し、パラメータはepoch数をearly stoppingにより決定する以外は全て固定
結果
全てにおいて、EDAありがEDAなしを精度を上回る結果となりました。(※差分は丸め込み誤差あり)
元データの件数が少ないほど効果は大きく、件数が多くなるにつれて効果は小さくなりました。
データ件数 | EDAなし | EDAあり | 差分 | パラメータ |
---|---|---|---|---|
500 | 0.793 | 0.844 | +0.050 | α=0.1、n=16 |
1000 | 0.840 | 0.871 | +0.031 | α=0.1、n=8 |
2000 | 0.876 | 0.901 | +0.024 | α=0.1、n=16 |
EDAのパラメータ別結果
【500件】
alpha | num_agg | accuracy | 差分 |
---|---|---|---|
EDAなし | EDAなし | 0.793 | ‐ |
0.05 | 1 | 0.818 | +0.024 |
0.05 | 4 | 0.816 | +0.023 |
0.05 | 8 | 0.840 | +0.047 |
0.05 | 16 | 0.827 | +0.033 |
0.1 | 1 | 0.816 | +0.023 |
0.1 | 4 | 0.828 | +0.035 |
0.1 | 8 | 0.840 | +0.046 |
0.1 | 16 | 0.844 | +0.050 |
【1000件】
alpha | num_agg | accuracy | 差分 |
---|---|---|---|
EDAなし | EDAなし | 0.840 | ‐ |
0.05 | 1 | 0.861 | +0.022 |
0.05 | 4 | 0.853 | +0.014 |
0.05 | 8 | 0.865 | +0.026 |
0.05 | 16 | 0.867 | +0.027 |
0.1 | 1 | 0.859 | +0.019 |
0.1 | 4 | 0.863 | +0.023 |
0.1 | 8 | 0.871 | +0.031 |
0.1 | 16 | 0.861 | +0.022 |
###【2000件】
alpha | num_agg | accuracy | 差分 |
---|---|---|---|
EDAなし | EDAなし | 0.876 | ‐ |
0.05 | 1 | 0.888 | +0.012 |
0.05 | 4 | 0.894 | +0.018 |
0.05 | 8 | 0.891 | +0.014 |
0.05 | 16 | 0.893 | +0.016 |
0.1 | 1 | 0.891 | +0.014 |
0.1 | 4 | 0.885 | +0.009 |
0.1 | 8 | 0.895 | +0.018 |
0.1 | 16 | 0.901 | +0.024 |
実装コード
使用したコードを下記になります。
https://github.com/tchih11/qiita_eda
- 01_make_dataset.ipynb → livedoorニュースデータの前処理
- 02_make_eda_dataset.ipynb → EDAの実行
- 03_eda_verification.ipynb → モデリング及び効果検証
環境はgoogle colaboratoryです。
おかしな点があれば、ご指摘いただけますと大変ありがたいです。
感想
今回の検証では、EDAによるモデルの精度向上が確認できました。
前回実装時には文意が変わってしまうことを懸念していましたが、今回の検証においては許容範囲内だったようです。
若干出来すぎ感は否めないものの、データが少なく精度が上がらない場面で試してみる価値ありかなと思います。
アノテーション、めっちゃ大変ですからね(経験者)。
参考
https://github.com/Bjarten/early-stopping-pytorch
文書分類で自然言語処理に触れる
【実装解説】日本語版BERTをGoogle Colaboratoryで使う方法(PyTorch)