Izacard+'21 - A Memory Efficient Baseline for Open Domain Question Answering
1. どんなもの?
- DPR のような密なベクトル表現を用いた文書検索では、検索対象のベクトル表現をインデックスとして保持する必要があり、メモリ使用量が高くなってしまう。
- 本研究では、① 次元数削減 ② ベクトル量子化 ③ 文書フィルタリングの三つの手法が、検索性能に与える影響について調査する。
2. 先行研究と比べてどこがすごい?
- 検索におけるメモリ効率化について調査
3. 技術や手法のキモはどこ?
設定
- retriever-generator (DPR-FiD) 型のモデルで評価。FiD は T5 のパラメータで初期化され、DPR の学習では FiD のアテンションスコアに基づくラベルを使用し、知識蒸留の枠組み(Izacard+'20)で学習を行う。
- デフォルトの設定において、Wikipedia 文書のファイルサイズは 21GB (
xz
で 3.8GB、lrzip
で 3.1GB に圧縮)、文書数は 26M であり、各文書を 100 単語ごとに分割、また 768 次元(float32)のエンコード結果を登録した文書インデックスのサイズは 75GB。
以下でメモリ効率化を行う
- 線形層+Layer Normalization 層(LN層)で次元数削減(LN層を追加した方が経験的に良い)
- float32 (4 bytes/dim) → float16 (2 bytes/dim)
- 直積量子化を使用して 次元に削減( はサブベクトルの個数)
- 線形分類器を用いた文書フィルタリング
- カテゴリリストとタイトルから各 Wikipedia の文書表現を作成。
- 学習データの質問に対して DPR で検索された文書を正例とし、学習時は self-training の枠組みで、各イテレーションで質問に対して最も高いスコアで負例と判断された文書を次のイテレーションで負例文書として扱う(初期値はランダムサンプルされた文書とする)。
- 🤔 実際に検索対象に対するフィルタリングではどのように使用するか詳細な記載がない
We perform a few iterations of this scheme, and apply the final classifier to filter the Wikipedia dump.
4. どうやって有効だと検証した?
- オープン QA の設定で、TriviaQA / Natural Question の評価データを使用。
- 評価基準は Exact Match / accuracy@k
次元数削減 × 直積量子化
- インデックスサイズを 1.6 GB 程度に抑えても検索性能の低下は僅か
- 各カーブはベクトルの次元数を表し、各ポイントは次元数あたりのビット数を示す(左から bit/dim)。
文書フィルタリング
- 二つの設定で評価
- 赤:256 dim, 64 subvectors/passage (full index size 1.67GB)
- 青:128 dim, 16 subvectors/passage (full index size 0.42GB)
5. 議論はある?
- インデックスサイズが支配的になることを考慮すると、モデルサイズを大きくしても(docker image size の影響に)問題はなさそう。
- T5-large を使用すると、ほぼ性能差を抑えることが出来る(256 dim, 2 bits/dim, 18M passages で評価)。
6. 次に読むべき論文は?
知識蒸留
- Izacard+'20 - Distilling Knowledge from Reader to Retriever for Question Answering [arXiv]
メモリ効率化
- Luan+'21 - Sparse, Dense, and Attentional Representations for Text Retrieval (TACL) [ACL Anthology]
- Ma+'21 - Simple and Effective Unsupervised Redundancy Elimination to Compress Dense Vectors for Passage Retrieval (EMNLP) [ACL Anthology][GitHub]
- ベクトルサイズ別の調査。また PCA や直積量子化の次元数削減が性能を維持したまま効率化に繋がることを示す。