【NLP】向量检索模型落地:瓶颈及解法!
作者?|?Maple小七?
整理?|?NewBeeNLP
稠密向量檢索巨大的內存占用一直是限制其落地的一大瓶頸。實際上,DPR生成的768維稠密向量存在大量冗余信息,我們可以通過某種壓縮方法以少量的精度損失換取內存占用的大幅下降。
今天分享一篇來自EMNLP 2021的論文,討論了三種簡單有效的壓縮方法:
無監督PCA降維
有監督微調降維
乘積量化
實驗結果表明簡單的PCA降維有著很高的性價比,能夠以少于3%的top-100準確度損失換取48倍的壓縮比,以少于4%的top-100準確度損失換取96倍的壓縮比。
Simple and Effective Unsupervised Redundancy Elimination to Compress Dense Vectors for Passage Retrieval
Introduction
近兩年來,以DPR為代表的稠密向量檢索模型在開放域問答等領域得到了廣泛的應用。雖然DPR能夠提供更準確的檢索結果,但DPR所生成的向量索引的內存占用是很大的。
比如當我們對維基百科建立索引時,基于倒排索引的BM25僅占用2.4GB的內存,而DPR生成的768維稠密向量則需要占用61GB的內存,這比BM25足足多出了24倍,而這多出的24倍的內存在多個數據集上僅換取了平均2.5%的指標提升(Top-100 Accuracy)。
可以猜測的是,DPR生成的768維稠密向量或許太大了,可能是存在大量冗余的,我們可以嘗試用少量的精度損失換取內存占用的大幅下降。針對這個問題,本文探索了三種簡單有效的稠密向量壓縮方法,包括主成分分析(Principal Component Analysis, PCA)、乘積量化(Product Quantization, PQ)和有監督降維(Supervised Dimensionality Reduction)。
Quantifying Redundancy
首先,我們先確認DPR稠密向量是否存在冗余,作者給出了兩個常用指標:PCA的「解釋方差比」(explained variance ratio),以及和的「互信息」(mutual information)。
PCA利用特征分解將一組可能存在相關性的向量變換到線性無關的特征向量構成的的坐標系下,并保留方差較大的方向,丟棄方差較小的方向,而解釋方差比則是度量PCA降維效果的指標:
其中是從大到小第個的特征值對應的方差,和分別表示PCA降維前和降維后的維度。該比值說明了保留前個特征向量能保留原始稠密向量方差的比例。
另一種衡量向量冗余度的方法是計算和的互信息,互信息可以根據公式得到:
402 Payment Required
其中可以利用DPR的優化目標近似計算:
互信息的上界是,為了和PCA對比,我們可以對互信息做標準化。
經過不同程度的PCA降維,解釋方差比和標準互信息隨向量維度的變化趨勢如下圖所示。我們可以發現,200維左右是一個甜區,「將768維的向量降維到200維,降維后的向量能夠保留90%的方差和99%的互信息,而進一步降維會導致信息量的急速下降?!?/strong>
Dense Vector Compression
接下來,我們嘗試三種簡單的方法來壓縮稠密向量:
「Supervised Approach:」 我們可以簡單地在雙塔編碼器的頂部分別增加兩個線性層
和來降維,在訓練時可以凍結下層參數,僅微調線性層,同時我們還可以增加一個正交規范化損失鼓勵和互相正交,這能使得降維后的點積相似度和降維前的scale是一致的。「Unsupervised Approach:」 我們可以將和混在一起,然后對這一向量集擬合一個線性PCA變換,在推理階段,使用擬合到的PCA變換對DPR生成的向量進行降維。
「Product Quantization:」 我們還可以使用乘積量化來進一步壓縮向量大小,其基本原理是將維的向量分解成個子向量,每個子向量采用-means量化,并使用比特存儲。比如,一個維的向量占用了比特,通過將其分解為個比特的子向量,該向量的大小便壓縮到了比特,即原始大小的,平均來說,每個維度所占用的比特數從降低到了。
Experiment & Results
作者在NQ、TriviaQA、WQ、CuratedTREC、SQuAD上測試了DPR的top-準確率(前個召回結果中至少有一個正確的比例),實驗細節可參見原文。
Dimensionality Reduction
我們首先對比有監督降維和無監督降維的表現,其中PCA-*和Linear-*分別是無監督PCA降維和有監督微調降維(僅微調線性層)的結果,而DPR-*表示不凍結下層參數,與線性層聯合微調的結果??梢园l現,在向量維度較大的時候(、),無監督PCA的表現更好,當向量維度較小的時候(),有監督微調的表現會更好,然而這時候模型性能下降得也非常明顯,因此總體來說無監督PCA更有實用價值。
雖然理論上Linear-*可以學習到PCA-*擬合的線性映射,但想要讓參數收斂到一個好的解并不簡單。另外,凍結下層參數(Linear-*)比不凍結(DPR-*)的結果都要好,這同樣是訓練不充分所導致的。綜上,在大多數情況下,我們僅需要做簡單的線性PCA變換,就能獲取很不錯的壓縮比了。
Product Quantization
乘積量化是一種非常有效的壓縮方法,作者在上述實驗結果的基礎上進一步加入了乘積量化,實驗結果如下表所示,其中PQ-2表示經過量化之后每個維度所占用的比特數為。從下表可以看出,PQ-1壓縮過于激進了,雖然其壓縮比是PQ-2的兩倍,但指標下降卻不止兩倍,這是很不劃算的。
綜上,我們認為PCA降維加乘積量化是最好的壓縮方式,如果我們將指標下降幅度限制在平均4%以內,我們可以使用PCA-128+PQ2將稠密向量壓縮96倍,將維基百科的向量索引的內存占用從61GB降低到642MB,同時將推理時間從7570ms降低到416ms。
Hybrid Search
大量研究已表明結合稀疏向量檢索(BM25)和稠密向量檢索能夠提升性能,其中最簡單有效的方法是對分數做線性加權求和:
這里我們簡單地設定,即稠密檢索和稀疏檢索等權。
加入混合檢索可以進一步提升性能,下圖展示了不同壓縮方法的檢索準確率和索引大小的關系,其中每條曲線從左到右依次為PQ1、PQ2和w/o PQ,圖中的黑色虛線為帕累托邊界,原始的768維DPR向量并沒有落在帕累托邊界上,表明其的確有改進的空間。具體來說,「PCA-256+PQ2+Hybrid Search的壓縮策略將61GB的索引大小降低到了3.7GB,其Top-100準確率甚至比原始DPR更好(+0.2%)?!?/strong>
Discussion
限制稠密向量檢索模型落地的一大瓶頸就是推理時延和內存消耗的問題,這篇論文通過實驗證明了簡單的主成分分析加上乘積量化,在輔以稀疏向量檢索,就能在保證準確度的前提下大幅減少內存占用,提升檢索速度,頗具實用價值。
一起交流
想和你一起學習進步!『NewBeeNLP』目前已經建立了多個不同方向交流群(機器學習 / 深度學習 / 自然語言處理 / 搜索推薦 / 圖網絡 / 面試交流 /?等),名額有限,趕緊添加下方微信加入一起討論交流吧!(注意一定o要備注信息才能通過)
-?END?-
萬物皆可Graph | 當推薦系統遇上圖神經網絡(四)
2022-02-07
業界分享 | 美團搜索排序實踐
2022-01-28
硬核!一文梳理經典圖網絡模型
2022-01-25
從 Google 離職了!
2022-01-16
總結
以上是生活随笔為你收集整理的【NLP】向量检索模型落地:瓶颈及解法!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学计算机激励标语口号,激励学习的口号
- 下一篇: VUE中父子组件传参(简单明了)