向量召回簡述向量召回這玩意其實已經不是什么新鮮玩意了,之前我有一篇專門的文章聊過這個:心法利器[16] | 向量表征和向量召回。 簡單的說,現在我們具有最近鄰相似,即向量召回的能力,因此我們可以通過一個雙塔無交互的模型構造表征向量,對query進行對應的表征,然后就可以進行向量檢索。 bert對語義的理解bert-flow應該是一份比較代表性的工作,有關的工作其實對bert所表征的向量有很多分析和研究,相比bert-flow本身,其實更想和大家去聊這個。 我的理解MLM任務的本質,其實就是在看從詞匯層面去了解上下文對他的影響,實質上就和我們做英語的完形填空一樣,無論是word2vector還是bert,都是通過這種模式來體現我們所謂的“語義”的,我們可能無法知道這是不是所謂的語義,但終究有一點是對的,那就是bert應用在各個任務中的效果都不會太差,這就意味著bert的確學到了適合任務的知識了,而通過finetunine或者是下游的一些操作能達到更好的效果,說明我們只能要加以轉化和抽取,就能把預訓練模型中我們需要的部分抽取出來。 MLM的任務再講詳細些,CBOW視角看,假設上下文能預測出詞匯,而另一個上下文也能預測出,那其實我們有一定的理由認為和具有一定的語義相似性,而借助softmax的激活作用,還可以把其他詞匯被拉遠,這種拉遠讓語義空間更為廣闊,只有相似語義的句子才會被分在語義空間內一個比較集中的一塊,這也是詞匯句子在語義空間中的語義表征最為樸素理解。 bert語義空間的性質Sentence Bert雖然已經較為成功地完成bert做句子的向量表征完成向量召回的任務,某種程度上證明了bert所產生的向量能夠表達出句層面的復雜語義,然而巧的是Sentence Bert沒多久就有了文章更加深入地討論語義空間的技術,研究發現,語言模型學到的詞向量分布通常是“各向異性”,且“呈錐形分布”的,哪怕是BERT和GPT2也是這樣,而有意思的是,這個分布的特點還和詞頻有關。 本來,我們是希望所有的詞向量、句向量是比較均衡的,但是我們發現隨著詞頻的增加,L2范數會離遠點比較進,這其實就是我們常說的向量模長,這個體現的即使典型的“錐形分布”,離得遠的低頻詞在空間中會比較稀疏,如果我們還要去對模進行歸一化的話,甚至可能讓不同意思的詞映射到接近的球面。 bert-flow的解決方案既然語義空間的分布不合理,那么我們最直接的感受就是需要把這個空間映射到一個更為合理的空間去,Bert-flow的作者想到的是,構造一個可逆的函數進行映射即可。 要映射,那就需要確認兩個問題,一個是目標空間是什么,另一個是怎樣映射。前者作者選擇了標準高斯分布,說人話就是正態分布,正態分布首先是各向同性的(協方差矩陣為常數陣,各個方向的方差都一樣)。而為了把bert的語義空間映射到標準正態分布的空間,作者使用的是基于標準化流的生成模型。有關流模型的理解,建議大家去看看蘇神的兩篇文章:https:///archives/5776(細水長flow之NICE:流模型的基本概念與實現)以及https:///archives/5807(細水長flow之RealNVP與Glow:流模型的傳承與升華)。 有一說一,flow模型在這個方向為大家提供了大量思路,讓我們對向量表征的轉化有了進一步的理解,但是flow的這個模式是否就是最好的呢?答案當然是否定的。 回歸映射的初衷我們映射的初衷,是因為語義空間的分布不適合我們,而不適合我們的核心在于,我們在判斷語義相似度,甚至是向量召回的時候,這個語義空間并不合適,而這個問題其實在分類、NER之類的問題中好像并不明顯,因此我們需要聚焦的是語義匹配、語義相似度上的處理,而向量召回之類的思路上,我們需要的是在預訓練語言模型基礎上做一些基操后,整理成一個比較合理的句向量,其表征的語義空間更加適合語義匹配,而匹配的本質——相似度其實就是歐式、余弦之類的相似度計算。所以,我們希望語義空間是適合余弦、歐式之類距離計算的。 以余弦為例,余弦距離的概念大家非常熟悉: 但是我們沒考慮過一個假設,那就是“標準正交基”下。很多論文、書籍其實都有這個嚴謹的假設,只不過我們沒考慮過而已,因為我們常說的平面直角坐標系就是一個標準正交基下的坐標系(不識廬山真面目,只緣身在此山中)。 沒錯,說人話,就是我們要做一些相似度的計算,最好的情況,就是把向量空間映射到一個標準正交基下。這也印證了bert-flow效果的優化是有理論依據的。 bert映射到標準正交基線性空間、標準正交基,這些都是我們線代、高代中學到的內容了,然而對于bert這種比較復雜的空間,我們應該怎么映射呢?這個思路,蘇神發表的bert-whitening,聊了很多,其實它的實質就是用了“主成分分析”的轉化方法完成的這個映射,有意思的是這個映射居然只是個線性映射。 bert-flow的思想是瞄準具備該性質的標準正態分布進行映射,而bert-whitening則考慮的是只要保證映射達到的空間具備需要的性質即可,考慮標準正態分布的性質,其實我們需要的不是標準正態分布,而是具備一些標準正態分布性質的分布就行,簡單地說,我們只需要一個均值為0、協方差為常數甚至是單位陣的空間,這與正態分布與否似乎就沒什么關系了。那這個變換是不是可以簡單的構造成這樣: <section role="presentation" data-formula="x" =(x-\mu)\cdot="" w="" '="" data-formula-type="block-equation">這其實就是我們常說的“標準化”,類似一組數減均值除以方差的操作。簡單的就是均值,可就沒這么簡單了,這塊的操作其實很想主成分分析。 協方差矩陣的計算相信大家多少還有些印象: 我們的目標是讓這個協方差矩陣變為一個單位陣,因此我們的目標就是令: 于是: 而根據奇異值分解的性質,可以得到 其中是正交矩陣,是正對角矩陣。跳躍有點大,如果覺得不適應可以去了解下奇異值分解。 當然了,有興趣大家可以看看論文,whitening其實和flow的效果是差不多的且相比直接使用last2avg好太多,一定程度也印證了這番討論的正確性,bert在語義相似度上是需要轉化的,同時也換言之,我們會在下游做一些submodel的工作,有的時候是在用隱式的方法來實現這個映射的過程,但是因為訓練的目標沒有顯式體現所以我們沒有發現。 小結當一個東西能被一個黑盒輕松解決,我們喜大普奔,但是當效果并不理想,超出我們認知的時候,自然地我們應該去了解這個黑盒怎么用,甚至是嘗試把它打開了解他的機理從而找到他的問題,另一方面也通過輸入和輸出進行反推了解黑盒,bert就是這么個黑盒,要想在這個技術的基礎上進一步發展,我們要盡可能了解他,破解它,找到他的問題,才能進行突破性的改造。 參考文獻本文參考的東西挺多的,希望大家在本文的引導下看看這些論文或者是文章。
|
|