Slide 1

Slide 1 text

Atsunori Fujita & Shotaro Ishihara チーム: fujita&u++ 言語処理学会第27回年次大会(NLP2021) ワークショップ 2 「 AI 王 〜クイズ AI 日本一決定戦〜」 2021 年 3 月 19 日 AutoGluon-Tabular を用いたアンサンブル による日本語質問応答システムの構築

Slide 2

Slide 2 text

● 藤田 充矩(Amazon Web Services) ○ クイズは苦手です ● 石原 祥太郎(日本経済新聞社) ○ (一時期の)高難易度時代の高校生クイズで活躍していた愛知県・東海高校出身 ○ YouTube カプリティオチャンネルが好き 自己紹介 2

Slide 3

Slide 3 text

最終モデルの概要 3 1. cl-tohoku/bert-base-japanese-whole-word-masking 2. cl-tohoku/bert-base-japanese-whole-word-masking & noun filter 3. cl-tohoku/bert-large-japanese-whole-word-masking 4. cl-tohoku/bert-base-japanese-char-whole-word-masking 5. nict_bert_32k 7. nict_bert_32k & cosine similarity & head-tail 6. nict_bert_32k & noun filter 8. nict_bert_100k 9. char n-gram Optimized for dev1 and dev2 Averaging 10. tf-idf 11. bm25 AutoGluon-Tabular × 3

Slide 4

Slide 4 text

● 文献 [鈴木ら 2020] に倣い、BERT [Devlin et al. 2019] の事前学習済みモデルを初 期値とし、学習用データで fine-tuning して、クイズ解答用のモデルを学習 ● 事前学習済み言語モデル ○ huggingface/transformers: https://github.com/huggingface/transformers ○ NICT BERT 日本語 Pre-trained モデル: https://alaginrc.nict.go.jp/nict-bert/index.html ● 運営によるベースラインコードからの差分 ○ 学習時に利用する選択肢の数を 5 から 20 に変更 ■ bert-large のみメモリの問題で選択肢 5 (正解 + ランダム 4、学習の中で抽出) ○ all_candidate.json をベクトル化(TFIDF->SVD)して得られた256次元を最終層に結合 ○ 「dev1を含めて学習しdev2で検証」「dev2を含めて学習しdev1で検証」の2種類を用意 BERT全体共通 4

Slide 5

Slide 5 text

● 事前に MeCab に通して、特定の品詞のみを抽出 ● question はそのまま、context にのみ処理を適用 ● 名詞のみ、名詞・動詞のみなどを試し、最終的に名詞のみモデルを採用 工夫① context から特定の品詞のみを抽出(noun filter) 5

Slide 6

Slide 6 text

● question と context を TFIDF でベクトル化しコサイン類似度を算出し、 BERT の入力として活用 ○ 解答候補20をコーパスにして question をベクトル化→コサイン類似度を各 context とのペア で計算 工夫② コサイン類似度の計算(cosine similarity) 6

Slide 7

Slide 7 text

● context から max_length 分のテキストを取り出す際に、前からだけではなく後ろか らも取り出す [Sun et al. 2019] 工夫③ context の最初と最後を利用(head-tail) 7

Slide 8

Slide 8 text

● 機械学習モデルを探索する AutoML の OSS ライブラリ [Erickson et al. 2020] ● 各モデルの dev1, dev2, test に対する予測値を入力として利用 ● LightGBM、CatBoost、Random Forests、Extremely Randomized Trees、k- Nearest Neighbors、AutoGluon-Tabular NN model などのラッパー https://pages.awscloud.com/rs/112-TZM-766/images/1.AWS_AutoML_AutoGluon.pdf 工夫④ AutoGluon-Tabularによるアンサンブル 8

Slide 9

Slide 9 text

各モデルの実験結果 9 Model Acc with dev1 Acc with dev2 1. cl-tohoku/bert-base-japanese-whole-word-masking 0.8665 0.8713 2. cl-tohoku/bert-base-japanese-whole-word-masking & noun filter 0.8365 0.8402 3. cl-tohoku/bert-large-japanese-whole-word-masking ※1: 0.8544 ※1: 0.8544 4. cl-tohoku/bert-base-japanese-char-whole-word-masking 0.8425 0.8310 5. nict_bert_32k 0.8655 0.8723 6. nict_bert_32k & noun filter 0.8655 0.8643 7. nict_bert_32k & cosine similarity & head-tail 0.8736 0.8703 8. nict_bert_100k 0.8886 0.8763 9. char n-gram - - 10. tf-idf - - 11. bm25 - - Ensembling by AutoGluon-Tabular 0.9267 0.9266 ※1: dev1とdev2の平均値を表示

Slide 10

Slide 10 text

● 複数の事前学習済み言語モデル・工夫・類似度を駆使し、日本語質問応答シス テムのための多様なモデルを構築した ● AutoGluon-Tabular を用いたアンサンブルによって、最終的な性能の向上を確 認した 結論 10

Slide 11

Slide 11 text

参加者の方に聞きたいこと ● 土地名、国名などコンテキストに広いトピックが含まれる解答候補に苦戦しました。どう対応しました か? ● 論理的な問題は解けませんでした。どう対応されましたか? ● 解答候補の単語の意味だけが重要でコンテキストには質問に必要な情報が含まれていない問題に 苦戦しました。どう対応されましたか? ● 問題文を加工する工夫をしましたか?「蘭学者の宇田川玄随や稲村三伯らを輩出した、大槻玄沢が 江戸に開いた、当時の蘭学研究の中心であった私塾は何?」だと、問題文を読点で分割して最後の 部分を使うなどの処理ができそうですが、上手くいきませんでした。 11

Slide 12

Slide 12 text

参考文献 ● [鈴木ら 2020] 鈴木正敏, 鈴木潤, 松田耕史, ⻄田京介, 井之上直也. “JAQKET:クイズを題材にした日本語QAデータセットの 構築”. 言語処理学会第26回年次大会(NLP2020)発表論文集 ● [Devlin et al. 2019] Jacob Devlin, Ming-Wei Chang, Kenton Lee, and KristinaToutanova. BERT: Pre-training of Deep Bidirectional Trans-formers for Language Understanding. InNAACL, volume 1,pages 4171–4186, 2019. ● [Sun et al. 2019] Chi Sun, Xipeng Qiu, Yige Xu, Xuanjing Huang. How to Fine-Tune BERT for Text Classification?. arXiv [cs.CL]. arXiv. http://arxiv.org/abs/1905.05583, 2019. ● [Erickson et al. 2020] Nick Erickson, Jonas Mueller, Alexander Shirkov, Hang Zhang, Pedro Larroy, Mu Li, Alexander Smola. AutoGluon-Tabular: Robust and Accurate AutoML for Structured Data. arXiv [cs.LG]. arXiv. https://arxiv.org/abs/2003.06505, 2020. 12

Slide 13

Slide 13 text

Appendix

Slide 14

Slide 14 text

What didn't work well ● Doc2Vec や BM25 で質問と関連性のある解答を直接抽出、解答候補を絞り込む (20 個取り出した時に正解が含まれないケースが大半) 14

Slide 15

Slide 15 text

● context を sumy (https://github.com/miso-belica/sumy) を用いて自動要約 ○ 最後のアンサンブルで貢献がなさそうであったため、除外 工夫: context の要約を作成(summary) 15

Slide 16

Slide 16 text

from scipy.optimize import minimize def f(x): pred = 0 for i, d in enumerate(dfs_dev1): if i < len(x): pred += d * x[i] else: pred += d * ( 1 - sum(x)) score = log_loss(df_dev1[ 'ground_truth_idx' ], pred) return score init_state = [ round(1 / len(dfs_dev1), 3) for _ in range(len(dfs_dev1) - 1)] result = minimize(f, init_state, method= 'Nelder-Mead' ) print('optimized CV: ' , result['fun']) print('w: ', result['x']) 工夫: 検証用データでの性能を最適化する重みの計算 16