如何无监督地获得一个句子的向量表示?
?PaperWeekly 原創(chuàng) ·?作者?|?張成蹊
單位?|?FreeWheel機(jī)器學(xué)習(xí)工程師
研究方向?|?自然語(yǔ)言處理
或許上過(guò) NLP 或大數(shù)據(jù)課程的同學(xué)會(huì)想到課程小作業(yè)的王者:TF-IDF。掌握一些 NLP 基礎(chǔ)的同學(xué)可能還會(huì)想到靜態(tài)或動(dòng)態(tài)的詞向量:Word2Vec、GloVe、ELMo,BERT——有著探索精神的同學(xué)或許會(huì)再試試 BERT 的一些為人所熟知的變種:RoBERTa、DistillBERT。
對(duì) BERT 的結(jié)構(gòu)及其各層表達(dá)能力有所了解的同學(xué)(底層學(xué)基礎(chǔ)特征,中部學(xué)句法信息,上層學(xué)語(yǔ)義信息)[1]?會(huì)試著取出多層的詞向量表示后再做聚合。當(dāng)然,還需要將這些詞向量匯總成一個(gè)句子的最終向量,不外乎求和、平均、各種 Pooling…… 最后,也會(huì)有同學(xué)去尋找一些專門為詞向量表達(dá)能力進(jìn)行過(guò)強(qiáng)化的預(yù)訓(xùn)練模型 Sent2Vec、SentenceBERT??傊?#xff0c;換模型、換方法、換 idea,已經(jīng) 21 世紀(jì)了,調(diào)參調(diào)包誰(shuí)不會(huì)呢?
有所不同的是,除了盤點(diǎn)上述常用的無(wú)監(jiān)督句向量獲得方式外(作為快速獲得無(wú)監(jiān)督詞向量的途徑,上面的方法在落地時(shí)具有輪子齊全、即插即用的巨大優(yōu)勢(shì)),本文還將介紹一些獲得無(wú)監(jiān)督句向量表示的較新方法。這些方法或是解決了上述方法在形式上過(guò)于簡(jiǎn)單粗暴而存在的一些問(wèn)題,或是在句向量表達(dá)能力的評(píng)估系統(tǒng)(如 STS tasks)中具有壓倒性的優(yōu)勢(shì)——眾所周知,在 21 世紀(jì),SoTA 與 Accept 呈顯著正相關(guān)。
現(xiàn)在就讓我們開(kāi)始吧。
本文第一部分會(huì)介紹基于詞袋模型的一系列句向量表示方法,第二部分主要講述基于預(yù)訓(xùn)練詞向量的 Power Mean Embedding 表示方法,第三部分將通過(guò) 4 篇論文串講的方式,從 0 到 1 地介紹對(duì)比學(xué)習(xí)(Contrastive Learning)在無(wú)監(jiān)督句向量中的應(yīng)用,最后在文末整理了一些值得思考與討論的點(diǎn),希望能為大家的工作帶來(lái)一些微小的啟發(fā)。
Real-unsupervised methods
首先進(jìn)場(chǎng)的是無(wú)監(jiān)督場(chǎng)景中的無(wú)監(jiān)督代表隊(duì)。
顧名思義,這一類方法完全不需要額外的訓(xùn)練或預(yù)訓(xùn)練,它們大部分由 Bag-of-Words 的思想衍生而來(lái),通過(guò)(1)從句子中提取表達(dá)能力相對(duì)較強(qiáng)的詞匯,并(2)采用某種編碼規(guī)則將其轉(zhuǎn)換為數(shù)字形式,最終獲得句子的向量。
值得注意的是,這類依賴于詞表的(包括下面的 Word2Vec 等——但經(jīng)過(guò)了預(yù)訓(xùn)練的 Word2Vec 模型不在此范圍內(nèi),因?yàn)樗呀?jīng)給定了詞表)方法會(huì)受到上游的一些諸如 tokenization、lemmatization 與 stemming 在內(nèi)的數(shù)據(jù)預(yù)處理結(jié)果的影響。所以想要更好的使用這類方法,需要注意數(shù)據(jù)預(yù)處理的方式。
1.1 Bag-of-Words思想
假定我們已經(jīng)擁有了一個(gè)分詞后的句子庫(kù) ,通過(guò)掃描,就能獲得全量句子的一個(gè)總匯性詞表 (假設(shè)該詞表是有序的)。那么,我們就能將每條句子變成一個(gè)數(shù)值向量,這個(gè)向量的長(zhǎng)度就是詞表的大小 ,向量在位置 0 處的值就是詞表中第 1 個(gè)單詞在該句子中出現(xiàn)的次數(shù)、位置 1 處的值就是詞表中第 2 個(gè)單詞在該句子中出現(xiàn)的次數(shù),......,以此類推。
顯而易見(jiàn)的是,這個(gè)方法是存在問(wèn)題的:在詞表大小很大的時(shí)候,儲(chǔ)存句子的向量會(huì)變成一件十分耗費(fèi)資源的事情。從直覺(jué)上來(lái)說(shuō),我們應(yīng)該使用的是一些能更好的有信息表達(dá)能力的單詞,而刪除一些總出現(xiàn)頻次過(guò)少(生僻字)或總出現(xiàn)頻率過(guò)高(常見(jiàn)字)的單詞,而 TF-IDF 就較好地具備了這些能力。
1.1.1 TF-IDF
解讀 TF-IDF 方法細(xì)節(jié)的博客十分常見(jiàn),在此不再進(jìn)行贅述。簡(jiǎn)單來(lái)說(shuō),該方法通過(guò) TF 項(xiàng):單詞在當(dāng)前句子中的出現(xiàn)頻次/頻率,來(lái)表示當(dāng)前詞匯在句子中的重要程度;通過(guò) IDF 項(xiàng):單詞在所有句子中出現(xiàn)的頻率(的倒數(shù)的對(duì)數(shù)),來(lái)表示當(dāng)前詞匯是不是過(guò)于常見(jiàn)。正好匹配原生 BoW 思想中所存在的缺陷。此外,類如 scikit-learn 等機(jī)器學(xué)習(xí)庫(kù)中的 TF-IDF 方法還有一些如 n-gram 或者 max-df 等額外參數(shù),來(lái)幫助調(diào)參俠們更好地控制產(chǎn)出特征的質(zhì)量。
1.1.2 Simhash
與 TF-IDF 不同,Simhash 走了另一條解決問(wèn)題的道路——有損信息壓縮——來(lái)節(jié)省耗費(fèi)的資源。Simhash 是一種局部敏感的 hash 算法,最初被 Google 用于億萬(wàn)級(jí)別的網(wǎng)頁(yè)去重。所謂局部敏感,也就是當(dāng)句子做出一些細(xì)微的改變的時(shí)候,基于 Simhash 獲得的句子向量也只會(huì)產(chǎn)生微小的變化,而非像傳統(tǒng) hash 那樣整個(gè)簽名完全發(fā)生改變。
具體而言,對(duì)于一個(gè)句子,首先使用 TF-IDF 等 BoW 方法獲得句子內(nèi)權(quán)重最大的 個(gè)單詞,隨后通過(guò)一種或若干種 hash 算法將每個(gè)單詞都變換為 64 位的 01 二進(jìn)制序列。遍歷該序列,將值為 0 的位置手工修改為 -1。這樣,每個(gè)單詞都被變換為了只包含 的序列。在求整個(gè)句子的 hash 值的時(shí)候,只需要把它前 個(gè)單詞的序列對(duì)應(yīng)位置相加。值得注意的是,相加操作后,我們需要將現(xiàn)在 的位置再次修改為 0,從而使得句向量重新變回一個(gè)二進(jìn)制序列。
要判斷句子間(段落/文本)的相似度差異,只需要對(duì)這兩個(gè)句子的 Simhash 值進(jìn)行異或,并判斷異或后 64 位中 1 的個(gè)數(shù)即可。1 的個(gè)數(shù)越多,則代表這兩個(gè)句子間不相似的位數(shù)越多,即越不相似。
1.2 SAUCE
SAUCE [2] 是今年的 CIKM 中一篇比較有趣的工作,同時(shí)也使用了 BoW 的思想來(lái)提取文本表示向量。SAUCE 的立意其實(shí)與 Simhash 更為相似一些,即為了快速檢索相似的文本 —— 再具體一點(diǎn)講,SAUCE 提出的大背景是:我們已經(jīng)具有了相當(dāng)豐富的預(yù)訓(xùn)練模型,而我們往往希望將這些模型應(yīng)用到我們 domain-specific 的任務(wù)中。
與這個(gè)目的相悖的是,BERT 等預(yù)訓(xùn)練模型為了具有更加 general 的文本表示能力,都是在 Wiki 等通用語(yǔ)料上進(jìn)行預(yù)訓(xùn)練的。因此產(chǎn)生了一個(gè)新的需求:我們希望能夠給定一些領(lǐng)域相關(guān)的語(yǔ)料作為種子(corpus seed),來(lái)對(duì)大規(guī)模網(wǎng)頁(yè)文本進(jìn)行檢索,獲得大量相似的領(lǐng)域內(nèi)文本,從而對(duì)通用的預(yù)訓(xùn)練模型進(jìn)行進(jìn)一步的訓(xùn)練(post-pretrain),提升它們?cè)诰唧w領(lǐng)域內(nèi)的表示能力。
假定總文檔數(shù)為 ,首先,像所有的 BoW 方法一樣,SAUCE 產(chǎn)生了一份所有文檔具有的單詞詞表 。上文已經(jīng)提到,直接進(jìn)行文檔的向量化會(huì)導(dǎo)致每個(gè)文檔的向量大小都是 。為了進(jìn)一步縮小維度,SAUCE 計(jì)算了每個(gè)單詞出現(xiàn)的文檔數(shù) (Document Count),即:
其中 是指示函數(shù),當(dāng) 出現(xiàn)在第 個(gè)文檔 中時(shí)為 1,否則為 0。
SAUCE 基于 來(lái)實(shí)現(xiàn)維度的縮減,提出了兩個(gè)用于控制維度的閾值:
用于篩除出現(xiàn)頻次過(guò)低的單詞,即簡(jiǎn)單粗暴地刪除所有出現(xiàn)頻次不到 的單詞。刪除后的維度被快速縮減到:
用于控制保留的數(shù)量,即在經(jīng)過(guò) 篩選后,接下來(lái)只保留剩余單詞中 最小的 個(gè)。這個(gè)控制方式更加粗暴,強(qiáng)行把向量維度控制到:
然后呢?然后沒(méi)有了。因?yàn)榫赖氖巢?#xff0c;往往只需要簡(jiǎn)單的烹飪。
下圖是作者提供的算法偽代碼,讓我們?cè)龠^(guò)一遍:
(1)算詞表;(2)算 ;(3)卡閾值 ;(4)卡閾值 。偽代碼里用了一個(gè) for 循環(huán)來(lái)實(shí)際執(zhí)行每個(gè)文檔計(jì)算向量的方式,引入了 ,看起來(lái)比較繁復(fù),實(shí)際上就是對(duì)篩選出來(lái)的 個(gè)單詞,依次判斷是不是在當(dāng)前的文檔中。最后對(duì)每個(gè)文檔都算出一個(gè) 維度的 01 二進(jìn)制向量。
盡管聽(tīng)起來(lái)是一種非常粗暴的控制方式,但實(shí)際上 SAUCE 仍然為 BoW 提供了一個(gè)完整的解決方案: 用于刪除整體頻次過(guò)低的單詞,效果與 TF-IDF 中由于進(jìn)行頻次控制的 TF 部分相似(并不完全相同,可以理解為將 TF 中的頻次控制從文檔層面上升到了整個(gè)語(yǔ)料層面); 用于保留剩下的單詞中出現(xiàn)頻次最低的數(shù)量,意味著出現(xiàn)頻次過(guò)高的單詞被刪除,效果與 TF-IDF 中刪除常見(jiàn)詞的 IDF 部分相似。
作者在 Astronomy 和 Bottle water 兩個(gè)領(lǐng)域的數(shù)據(jù)上,和 Random, TF-IDF, Hash, RoBERTa 等方法進(jìn)行了比較,SAUCE 在計(jì)算時(shí)間與查詢覆蓋率上均顯著由于這些基線方法。由于文章主旨是 corpus expansion,在實(shí)驗(yàn)時(shí)也沿用了這一類的 setting,與本文相關(guān)性不大,因此不再敘述。此外,SAUCE 也提出了完善的系統(tǒng)級(jí)更新語(yǔ)料的流程偽代碼,以及對(duì)應(yīng)的部署細(xì)節(jié),本文僅展示論文中的流程圖,感興趣的同學(xué)可以去看完整的論文。
總體而言,SAUCE 為我們提供了另一種文本表示的思路,同時(shí)也讓我們確信:想要使用好 BoW 類的方法,就要解決上面提到的兩個(gè)缺陷。SAUCE 使用兩個(gè)超參數(shù) 與 來(lái)實(shí)現(xiàn)了這一點(diǎn),然而,相較于自適應(yīng)所有大小語(yǔ)料的 TF-IDF,SAUCE 給定了兩個(gè)依賴于總文檔數(shù)、總詞匯數(shù)的超參,其實(shí)會(huì)給想要使用該方法的同學(xué)帶來(lái)一些困惑:我該怎么設(shè)置這兩個(gè)參數(shù)?大還是小,依據(jù)是什么?另外這種受限于語(yǔ)料統(tǒng)計(jì)特征的方法也無(wú)法進(jìn)行快速的遷移。天下沒(méi)有免費(fèi)的午餐,也希望同學(xué)們都對(duì)手上的任務(wù)與數(shù)據(jù)有充分的了解后,再來(lái)選擇適用的方法。
Bottom-up methods & Power mean pooling
由于 BoW 類方法的特性,上文中所提到的一些方法其實(shí)并不囿于句向量的計(jì)算 —— 或者說(shuō)提出的初衷主要是用于對(duì)段落、文本的表示,這是因?yàn)檩^長(zhǎng)的文本信息中更容易提取出有效的單詞或詞組。正因此,TF-IDF、Simhash 與 SAUCE 等方法都或多或少地強(qiáng)調(diào)了方法應(yīng)用于大規(guī)??焖贆z索的能力。而接下來(lái)的篇幅中,我們將真正回到主題,開(kāi)始敘述詞向量的學(xué)習(xí)與表示。讓我們從一個(gè)奇妙的方法:power mean pooling [3](下稱 PMP)開(kāi)始說(shuō)起。
之所以說(shuō) PMP 奇妙,是因?yàn)樗欢ǔ潭壬蠈?shí)現(xiàn)了調(diào)參俠們的心愿:網(wǎng)格搜索找參數(shù)?逐步回歸選特征?我全都要!
文章最開(kāi)始提到,由于預(yù)訓(xùn)練語(yǔ)料、任務(wù)的選擇不同,市面上提供的預(yù)訓(xùn)練的特征豐富多樣。而關(guān)于這些特征的選擇,不同的人具有不同的偏好:李某喜歡 GloVe 的任務(wù)中精巧設(shè)計(jì)的共現(xiàn)邏輯,王某認(rèn)為簡(jiǎn)單好用的 Word2Vec 是不朽的經(jīng)典,而張某是預(yù)訓(xùn)練模型的忠實(shí)擁躉,為大力出奇跡的 BERT 詞向量所傾倒,當(dāng)然,想必也有同學(xué)嘗試過(guò)將這些預(yù)訓(xùn)練向量拼起來(lái)。PMP 就向大家展示了:直接把現(xiàn)有的預(yù)訓(xùn)練特征及其組合拼起來(lái),也會(huì)在下游任務(wù)上有很好的效果。
具體地,首先文中引用了 power mean 的形式化定義:
其中, 表示一個(gè)長(zhǎng)度為? 的句子中,第 個(gè)單詞的詞向量。 是一個(gè)超參,能取到任意實(shí)數(shù)或正負(fù)無(wú)窮。
顯然,在 時(shí),上式就代表了最常用的取平均方法:將句子中所有 token 的向量求平均,作為句子的向量。而在 時(shí),該方法等同于保留每個(gè)維度列中最大的值; 意味著保留每個(gè)維度中最小的值。雖然大家常用的是平均法,但是這些聚合方法都是有損的壓縮,其實(shí)很難說(shuō)出孰優(yōu)孰劣,因此作者認(rèn)為:它們都從某種角度保留了自己覺(jué)得重要的信息,但同時(shí)又損失了一些信息,那么直接將它們拼接起來(lái),是不是能夠保留更多有效的信息呢?
直覺(jué)上而言,取不同的 都有其獨(dú)特的意義(值得注意的是,文中也提到,當(dāng) 取偶數(shù)的時(shí)候,詞向量的 embedding 會(huì)被消除負(fù)號(hào),天然產(chǎn)生信息損失,因此并不是一個(gè)特別理想的選擇),作者選取了大家所常用的 三個(gè) 值。對(duì)于詞向量,作者選擇了以下四種:
(GV) GloVe embedding: trained on Common Crawl
(GN) Word2Vec: trained on GoogleNews
(AR) Attract-Repel
(MS) MorphSpecialized
每類詞向量都是?300 維,因此如果將所有出現(xiàn)的情況排列組合,最長(zhǎng)的情況下維度會(huì)達(dá)到: ——和你目前可能在想的一樣,作者提到:用這么大的維度去比一些使用詞向量聚合、維度可能連 1000 都不到的方法是不太公平的,因此作者主要比較了 InferSent 方法,后者的詞向量達(dá)到了 4,096 維。當(dāng)然為了基線方法的豐富性,作者也另外加入了對(duì) SIF(dim=300)、Siamese-CBOW(dim=300)和 Sent2Vec(dim=700)方法的比較。
作者在 AM/AC/CLS 加上 SentEval 共計(jì) 9 個(gè)任務(wù)上評(píng)估了 PMP 的效果(具體的任務(wù)設(shè)定可以參看原文的表 1)。在使用 PMP 句向量時(shí),作者加訓(xùn)了一個(gè)邏輯回歸分類器,結(jié)果如下表所示:
表的上部第一個(gè)欄目比較了單獨(dú)使用詞向量與全部詞向量取平均之間的效果,可以看到把四個(gè)向量拼接以后,使用平均求得的句向量(Arithmetic mean 意為算術(shù)平均,即 )效果顯著優(yōu)于獨(dú)立使用四種詞向量。但是話說(shuō)回來(lái),這一欄實(shí)際是在拿維度 1,200 去比較維度 300 的向量,顯得有些不公平。
說(shuō)到這,不知道有沒(méi)有小伙伴比較好奇:如果使用 BERT+LR 的形式去做這些任務(wù),效果會(huì)不會(huì)更好?因?yàn)?BERT 只用了 768 維度的詞向量,資源占用是比 1,200 維度低不少的。而如果是的話,是不是說(shuō)明相較于拼接不同的詞向量,選擇一個(gè)表達(dá)能力更強(qiáng)、嵌入語(yǔ)義更豐富的詞向量,對(duì)于下游任務(wù)會(huì)有更明顯的幫助呢?
先來(lái)回答第一個(gè)問(wèn)題:由于 BERT 原文在 GLUE 和 SQuAD 等數(shù)據(jù)集上進(jìn)行了測(cè)試,沒(méi)辦法進(jìn)行直觀的比較,但是 Sentence-BERT(SBERT)[4] 在實(shí)驗(yàn)時(shí)使用了相同的 SentEval 評(píng)估數(shù)據(jù),所以我們可以通過(guò) SBERT 的實(shí)驗(yàn)結(jié)果來(lái)進(jìn)行間接的比較:
在 SBERT 的實(shí)驗(yàn)結(jié)果中,第一行對(duì)標(biāo)了 PMP 結(jié)果第一行的 GloVe,兩者的結(jié)果幾乎是一致的,說(shuō)明實(shí)驗(yàn)結(jié)果確實(shí)橫向可比,而我們略過(guò)表中所展示的 SBERT 實(shí)驗(yàn)結(jié)果(對(duì)不起作者,把你當(dāng)工具人了),直接看文中第四行所展示的使用? BERT CLS 向量作為句向量 時(shí)的評(píng)測(cè)結(jié)果。
可以發(fā)現(xiàn),使用 768 維的 BERT CLS 已經(jīng)在絕大部分的任務(wù)中超過(guò)了 3,600 維度的 PMP,甚至在一些組中超過(guò)了 InferSent。所以第一個(gè)問(wèn)題的答案是顯而易見(jiàn)的:選擇一個(gè)表達(dá)能力更強(qiáng)的詞向量,會(huì)比拼接現(xiàn)有詞向量以及使用 PMP 效果更佳。結(jié)合作者在論文中的結(jié)論:拼接詞向量對(duì)于整體句向量表達(dá)能力的提升優(yōu)于使用 PMP,我們可以對(duì)上面的第二個(gè)問(wèn)題得到一個(gè)總括性的結(jié)論:
在內(nèi)存等資源限制的情況下,對(duì)于有限的詞向量維度,選擇泛化能力更強(qiáng)的詞向量更佳;
在詞向量表示能力相近的情況下,對(duì)于有限的詞向量維度,優(yōu)先使用已有詞向量拼接取平均(),效果會(huì)優(yōu)于使用不同的 值得到的同一詞向量的擴(kuò)展結(jié)果;
在資源允許的情況下,在以上條件里再加上 PMP,進(jìn)一步擴(kuò)展詞向量維度,能進(jìn)一步提升最后生成的句向量的表示能力。
此外,作者還專門提到:在 PMP 基礎(chǔ)上加上 z-norm,能進(jìn)一步提升 PMP 的應(yīng)用效果。
在漫長(zhǎng)的討論之后,我們回到正題:PMP 效果表中的第二欄主要展示了使用不同的 值對(duì)于結(jié)果的影響,可以發(fā)現(xiàn),拼接不同 值的向量也會(huì)提升在評(píng)測(cè)數(shù)據(jù)上的效果。最后,使用全量數(shù)據(jù)集、全量?????????????????????????? 值的 3,600 維句向量,效果已經(jīng)和 InferSent 不相上下。當(dāng)然,在所有的結(jié)果中,只有全量拼接(3,600)與 InferSent 的比較是相對(duì)公平的。 作者主動(dòng)提出了不同維度間的向量比較有失公平,卻在實(shí)驗(yàn)中沒(méi)有進(jìn)一步維護(hù)自己的觀點(diǎn),這點(diǎn)有些令人遺憾。
當(dāng)然,總的來(lái)看,這篇文章仍然為同學(xué)們提供了一個(gè)行之有效的方向,讓大家不再覺(jué)得自己把現(xiàn)有的詞向量拼接起來(lái)使用是一種玄學(xué)的事情,而是將其作為一個(gè)提升句向量表示能力的一個(gè)可選工具。
The road to constrastive learning
接下來(lái)是筆者覺(jué)得當(dāng)前非常有意思的一個(gè)方向:對(duì)比學(xué)習(xí)(contrastive learning)在無(wú)監(jiān)督句向量生成中的使用。在本節(jié)中,你會(huì)看到眾多才華橫溢的研究者們是如何從詞向量學(xué)習(xí)擴(kuò)展到句向量學(xué)習(xí)、如何從單一的學(xué)習(xí)目標(biāo)擴(kuò)展到對(duì)比學(xué)習(xí)的目標(biāo)、如何從傳統(tǒng) hard label 的分類任務(wù)到 contrastive label 的對(duì)比學(xué)習(xí)任務(wù),以及探索如何更好的選擇對(duì)比學(xué)習(xí)的正負(fù)例。
筆者精選了從 15 年開(kāi)始的 5 篇文章,希望能通過(guò)對(duì)它們的解讀達(dá)到窺一斑而知全豹的效果,讓大家對(duì)這個(gè)方向有一個(gè)總括性的了解。
3.1 Skip-Tought Vectors
還記得 Word2Vec 里學(xué)習(xí)詞向量的經(jīng)典方法:skip-gram 嗎?它的學(xué)習(xí)目標(biāo)是:給定一個(gè)單詞,判別式地預(yù)測(cè)它前后出現(xiàn)過(guò)的單詞。這個(gè)學(xué)習(xí)目標(biāo)本質(zhì)上是希望(1)學(xué)到該單詞的上下文信息,并且(2)使得擁有相似上下文的單詞擁有相似的表示。從這一點(diǎn)來(lái)看,skip-gram 和 GloVe 通過(guò)共現(xiàn)矩陣(co-ocurrence matrix)進(jìn)行學(xué)習(xí),從而讓共現(xiàn)情況相似的單詞具有相似的表示有異曲同工的設(shè)計(jì)。
上文已經(jīng)提到,如果使用 Word2Vec 具有的詞向量取平均作為句向量,這一類 bottom-up methods 會(huì)損失信息。PMP 方法使用不同的??值緩解了信息,卻沒(méi)有從學(xué)習(xí)目標(biāo)的角度解決這一問(wèn)題 —— Skip-Tought [5] 方法就為這一問(wèn)題提供了一個(gè)解決思路:如果把?skip-gram 從句子角度放大到篇章角度,這樣學(xué)到的不就是句向量了嗎?唯一的區(qū)別在于,前者的訓(xùn)練單元(unit)是 word,后者的訓(xùn)練單元是 sentence。
當(dāng)然,正如 skip-gram 隱式要求句子內(nèi)單詞是有序的一樣,skip-tought 要求輸入的句子間是具有上下關(guān)系的,這一點(diǎn)或許會(huì)在應(yīng)用 skip-tought 時(shí)成為制約。特別地,作者的實(shí)驗(yàn)中要求輸入的語(yǔ)料需要是連貫的 三元組。
在實(shí)現(xiàn)的時(shí)候,還有一個(gè)直接的問(wèn)題:句子的多樣性比單詞要大得多,訓(xùn)練詞向量的時(shí)候有詞表,但訓(xùn)練句向量不能用句表,否則 embedding table 可能大到整個(gè)恒河都裝不了。作者使用了當(dāng)時(shí)熾手可熱的 Encoder-Decoder 結(jié)構(gòu)來(lái)解決這個(gè)問(wèn)題:使用 GRU 單元的 RNN 來(lái)作為 encoder,來(lái)獲取當(dāng)前句子的表示向量,再使用 decoder 來(lái)產(chǎn)生該句子的上下文。
在文中,上下文特指上句與下句(好比 skip-gram 只預(yù)測(cè)當(dāng)前單詞的上下各一個(gè)單詞)。特別地,因?yàn)榫渥拥那度胄畔?huì)比單一的單詞要更多,所以作者使用了兩個(gè) decoder 來(lái)分別生成當(dāng)前句子的上句與下句。下圖是輸入語(yǔ)料的示意圖:
輸入中間句“I could see the cat on the steps <eos>”后,分別用兩個(gè) decoder 生成了上句“I got back home <eos>”以及下句“This was strange <eos>”。訓(xùn)練目標(biāo)定義上下句生成結(jié)果的概率和,即給定 encoder 的輸出 ,前面的時(shí)間步里已經(jīng)生成的所有單詞 ,最終生成當(dāng)前單詞的條件概率 之和:
在效果評(píng)估階段,作者在 sematic relatedness(SICK), paraphrase detection(MS Paraphrase Corpous), image-sentence ranking(COCO)三個(gè)任務(wù)上驗(yàn)證了 skip-tought vector 的有效性,其中也嘗試了不同類型的 encoder(unidirectional/bidirectional)。
值得注意的是,作者設(shè)定的 encoder 輸出向量維度是 2,400,在用于評(píng)估的 sentence-pair 任務(wù)中,對(duì)于句子 ,,作者使用了 的形式構(gòu)造得到用于分類的向量,也就是說(shuō)分類向量達(dá)到了 4,800 維。最終的結(jié)果與 SoTA 都是可比的 —— 除了 Dependency Tree-LSTM,作者說(shuō)這是因?yàn)楹笳咴跀?shù)據(jù)處理時(shí)引入了 parser 帶來(lái)的外部信息。
3.2 SDAE
和 skip-tought 使用 Encoder-Decoder 解決問(wèn)題的思路不太一樣的是,SDAE?[6](顧名思義)選擇了用 DAE 來(lái)無(wú)監(jiān)督地獲取句子的向量。上文中提到,skip-tought 有一個(gè)比較明顯的缺點(diǎn)是:輸入的語(yǔ)料必須是連貫的三元組,而 DAE(denoising auto-encoder)的特點(diǎn)是可以對(duì)加入噪聲前后的句子本身進(jìn)行學(xué)習(xí),從而避免同時(shí)輸入句子的上下句信息。
特別地,對(duì)于一個(gè)輸入的句子 ,作者通過(guò)兩個(gè)超參數(shù) 控制句子的兩種增強(qiáng):
對(duì)于句子 中的每個(gè)單詞 ,以 的概率對(duì)它進(jìn)行刪除;
對(duì)于句子 中的連續(xù)兩個(gè)單詞 ,以 的概率對(duì)它們進(jìn)行交換。
以增強(qiáng)(加入噪聲)后的句子作為輸入,要求模型輸出原始的句子,這就是 SDAE(sequential denoising auto-encoder)的基礎(chǔ)思想。與 skip-tought 一樣,作者使用了基于 LSTM 結(jié)構(gòu)的 encoder-decoder 進(jìn)行訓(xùn)練,在使用句向量時(shí),對(duì)于有監(jiān)督任務(wù),作者在句向量上加入 LR 來(lái)進(jìn)行模型的 tuning;對(duì)于無(wú)監(jiān)督任務(wù),直接計(jì)算句向量的 cos 相似度,并與標(biāo)準(zhǔn)結(jié)果進(jìn)行比較。以下是在無(wú)監(jiān)督評(píng)估數(shù)據(jù)上的實(shí)驗(yàn)結(jié)果:
在第一欄中,比較 SAE 與 SDAE 的結(jié)果可以發(fā)現(xiàn),后者在 Twitter 等比較 noisy 的數(shù)據(jù)上有明顯提升,這佐證了引入兩種概率增強(qiáng)方法的有效性;然而在完全無(wú)監(jiān)督的情況下,整體效果最好的仍然是兩類 Word2Vec 的實(shí)現(xiàn)方法,并且即便是基于 unigram 的 TF-IDF 也在大部分的驗(yàn)證任務(wù)上好于其它模型。對(duì)于論文本身而言,這并不是一個(gè)特別 fancy 的實(shí)驗(yàn)結(jié)果,作者在文中也沒(méi)有明確給出這個(gè)現(xiàn)象的解釋(我們將在本文最后的思考部分正式拋出這個(gè)問(wèn)題)。
3.3 中場(chǎng)休息
skip-tought 與 SDAE 都使用了 encoder-decoder 結(jié)構(gòu),但采用了兩種截然不同的思路:前者使用了兩個(gè) decoder 分別預(yù)測(cè)當(dāng)前句子的上下句,因此需要輸入連貫的句子;后者采取 DAE 的思路,輸入加入噪聲后的句子,讓 decoder 嘗試復(fù)原出原始的句子。這兩個(gè)方法雖然看起來(lái)有些差別,但有一個(gè)特性是相似的:decoder 學(xué)習(xí)過(guò)程中的學(xué)習(xí)目標(biāo)都是?hard label。
什么是 hard label 呢?有對(duì)模型蒸餾或者噪聲學(xué)習(xí)等方向有所了解的同學(xué)可能知道,hard label 就是把模型要預(yù)測(cè)的目標(biāo)設(shè)置成 1,即我們明確認(rèn)為這個(gè)學(xué)習(xí)目標(biāo)是絕對(duì)正確的:在對(duì)模型進(jìn)行蒸餾時(shí),我們一般認(rèn)為 gold label 中會(huì)帶有少量噪聲(或者沒(méi)有噪聲,但某些樣本的 pattern 很難學(xué)習(xí),從而對(duì)模型收斂有所影響),所以除了給定的 gold 標(biāo)簽以外,我們同時(shí)要學(xué)習(xí)大模型預(yù)測(cè)的分布,一般是 softmax 前面層的輸出結(jié)果,被稱為 soft label。帶噪學(xué)習(xí)中,由于更加篤定標(biāo)簽是具有噪聲的,所以更加傾向于部分使用 hard label 而非全部采納,如 co-teaching 等方法使用了不同模型間的相互學(xué)習(xí)。
回到正題,那么現(xiàn)在的問(wèn)題是:我在 encoder-decoder 結(jié)構(gòu)中,將上下句或是當(dāng)前句設(shè)為學(xué)習(xí)目標(biāo),真的是正確的嗎?
這個(gè)問(wèn)題誰(shuí)也無(wú)法回答,但我們從最簡(jiǎn)單的邏輯關(guān)系角度至少可以確定:以上兩種方法肯定不可能全是對(duì)的,因?yàn)樗麄兊膶W(xué)習(xí)目標(biāo)本身就是不一樣的。亦或是,他們可能是“對(duì)”的,但從 NLU 整體的發(fā)展方向上來(lái)說(shuō),不會(huì)都是“合適”的。
那么什么學(xué)習(xí)目標(biāo)是合適的呢?至少可以說(shuō),相較于上面提到的兩類使用 hard label 的方法,對(duì)比學(xué)習(xí)(contrastive learning)能幫我們?cè)O(shè)定一個(gè)更加合適的目標(biāo),從而幫助我們往正確的道路上多走幾步。因?yàn)閷?duì)比學(xué)習(xí)的目標(biāo)不是設(shè)定一個(gè) hard label 讓模型去學(xué)習(xí),而是讓我們給定一個(gè)考察相似性的方法,隨后讓模型拉近相似類間的向量距離(alignment),同時(shí)盡量使不同的同類別在整個(gè)向量空間中均勻分布(uniformity)。作為例子,希望下面提到的 QuickTought 與 SimCSE 對(duì)大家有所啟發(fā)。
3.4 QuickToughts
結(jié)合上面的討論,筆者嘗試用最簡(jiǎn)單的語(yǔ)言來(lái)解釋 QuickToughts [7] 的改進(jìn):將 skip-tought 的學(xué)習(xí)目標(biāo) —— 上下句的 hard label —— 修改為對(duì)比學(xué)習(xí)的學(xué)習(xí)目標(biāo)。即拉近當(dāng)前句與上下句之間的向量距離:
其中:
缺少了一些前置內(nèi)容,可能公式不容易看懂,但是整體上能夠感覺(jué)出來(lái),這個(gè)式子的目標(biāo)是:在一系列候選句子 中挑選出和當(dāng)前句子 最為相似的句子 。很容易發(fā)現(xiàn),式子 2 本質(zhì)上就是一個(gè) softmax 過(guò)程, 意為一個(gè)計(jì)算相似度的函數(shù),例如點(diǎn)積或余弦相似度, 與 代表這兩個(gè)不同的模型,可以簡(jiǎn)單理解為 skip-tought 中的 encoder 與 decoder。式 2 的含義就是讓最相似的句子對(duì)具有更大的權(quán)重,并且同時(shí)降低不相似句子對(duì)之間的權(quán)重。這就是對(duì)比學(xué)習(xí)的典型思路了。
下圖也解釋了這兩類方法間的差異:
有趣的是,作者還在文中專門提到:在實(shí)驗(yàn)過(guò)程中也嘗試過(guò)類似負(fù)采樣的方式,通過(guò)二元分類器來(lái)學(xué)習(xí) hard label,但效果并不如上面的學(xué)習(xí)目標(biāo)那么好,并給出了與上文類似的解釋:
We found object (2) work better, presumably due to the related constraint it imposes. Instead of requiring context windows to be classified as positive/negative, it only requires groud truth contexts to be more plausible than contrastive contexts.
換言之就是,我們不需要模型具有兩兩判斷是否是 NSP 的能力,我們只需要模型能從一系列候選句中挑出最相似的那個(gè)就好了。
在實(shí)驗(yàn)階段,作者比較了 SDAE、skip-tought 等傳統(tǒng)方法,可以發(fā)現(xiàn):
使用 BookCorpus 語(yǔ)料從頭訓(xùn)練時(shí),QuickToughts 能在相當(dāng)一部分任務(wù)中和現(xiàn)有方法可比,部分任務(wù)上能夠超過(guò)現(xiàn)有的方法;
使用 BookCorpus+ 預(yù)訓(xùn)練詞向量初始化后,QuickToughts 方法在所有任務(wù)上都能超過(guò)現(xiàn)有方法。
PMP 看到這里可能還是會(huì)忍不住怨念一下:諸君這樣始終用不同維度的詞向量進(jìn)行相互比較真的大丈夫?
3.5 SimCSE
如 QuickToughts 可以理解為把 skip-tought 帶入了對(duì)比學(xué)習(xí)領(lǐng)域一樣,我們可以這樣描述:SimCSE [8] 把 SDAE 帶入了對(duì)比學(xué)習(xí)領(lǐng)域。
也正如 SimCSE 在文章開(kāi)頭就直截了當(dāng)?shù)卣故玖嗽摲椒ǔ酵瑑姷男Ч粯?#xff0c;筆者也在開(kāi)始就告訴大家 SimCSE 的方法:使用 dropout 作為噪聲。還記得 SDAE 嗎?它用了兩個(gè)概率 來(lái)構(gòu)造帶噪聲的句子,然后用生成的方式復(fù)原原始句子。SimCSE 簡(jiǎn)單粗暴地使用 dropout 前后的句向量作為學(xué)習(xí)目標(biāo) —— 當(dāng)然,由于引入了對(duì)比學(xué)習(xí),論文的目標(biāo)變成了:
和 QuickToughts 的學(xué)習(xí)目標(biāo)是不是很像? 表示使用 dropout 后的句子 的向量表示, 表示使用 dropout 后的句子 的向量表示,由于 是不一樣的 dropout,因此輸出的句向量會(huì)有所區(qū)別,作者就以這個(gè)區(qū)別作為了 DAE 中的噪聲。
在實(shí)驗(yàn)階段,隨著論文的與時(shí)俱進(jìn),SimCSE 已經(jīng)開(kāi)始使用 BERT 預(yù)訓(xùn)練模型作為初始化的模型了(上文的 也就是 transformer 里自帶的 dropout)。實(shí)驗(yàn)結(jié)果如下表所示:
SimCSE?在 STS 的所有任務(wù)中都大幅領(lǐng)先于之前的基線方法,部分的提升幅度甚至超過(guò)了 10%。在有監(jiān)督模型的比較中,SimCSE 仍能保持相當(dāng)大的領(lǐng)先,可以說(shuō)把 SoTA 向上提了一大步。如此細(xì)微的改動(dòng)能帶來(lái)如此大幅度的提升,這個(gè)結(jié)果是十分驚艷的。
除了簡(jiǎn)單但有效的對(duì)比目標(biāo)以外,論文里還從理論角度解釋了其有效的原因,可讀性很強(qiáng),推薦想詳細(xì)了解對(duì)比學(xué)習(xí)在無(wú)監(jiān)督句向量中的應(yīng)用的同學(xué)可以從這篇文章開(kāi)始,根據(jù)相關(guān)工作往前回溯。
討論與思考
全文行文過(guò)程中其實(shí)會(huì)時(shí)不時(shí)地提出一些小問(wèn)題(大部分都帶有答案),在這里,筆者主要是想提出一些值得思考的點(diǎn),它們可能目前尚沒(méi)有明確的答案,又或者每個(gè)人都有自己的想法——興許思考這些問(wèn)題,能給你帶來(lái)一些特別的 insights 呢?
奧卡姆剃刀:盡管篇幅所限,筆者只提到了兩篇對(duì)比學(xué)習(xí)的文章,但仍有相當(dāng)一部分使用對(duì)比學(xué)習(xí)做無(wú)監(jiān)督句向量學(xué)習(xí)的工作(比如作為 SimCSE 效果背景板之一的 IS-BERT,使用了全局與局部詞向量作為對(duì)比的目標(biāo)),但 SimCSE 用了最簡(jiǎn)單的方式實(shí)現(xiàn)了最出眾的效果。有時(shí)往往會(huì)發(fā)現(xiàn),一些越簡(jiǎn)單的思路,或許反而會(huì)取得越好的效果,如 SimCSE 之于 SDAE(dropout is all you need),MLM 之于 EDA(mask is all you need),如 PMP 之于雙塔(concatenation is all you need)。興許在做研究的時(shí)候,不要過(guò)分注重于模型的轉(zhuǎn)型升級(jí),而是從其它角度試著簡(jiǎn)化問(wèn)題,會(huì)帶來(lái)更加有價(jià)值的結(jié)果。
Prompt-based Contrastive Learning:或許在很遠(yuǎn)的未來(lái),我們能獲得一個(gè)一統(tǒng)天下的模型,它能夠勝任所有的 NLP 任務(wù),但至少?gòu)哪壳皝?lái)看,我們離這一天還有很長(zhǎng)的路要走,在當(dāng)前,我們想要做一個(gè)特定領(lǐng)域的特定任務(wù)的時(shí)候,還是需要針對(duì)性地去設(shè)計(jì)訓(xùn)練目標(biāo)。在為人所廣泛研究的 Language Model(LM)領(lǐng)域,已經(jīng)有了 Prompt-base LM [9] 這個(gè)思路,即針對(duì)下游想要優(yōu)化的任務(wù),來(lái)針對(duì)性地設(shè)計(jì)預(yù)訓(xùn)練目標(biāo),定點(diǎn)強(qiáng)化預(yù)訓(xùn)練模型在特定領(lǐng)域內(nèi)的效果。在對(duì)比學(xué)習(xí)中,是否也可以借鑒這個(gè)思路(我們可以發(fā)現(xiàn),從 SDAE 到 IS-BERT 到 SimCSE,就是一個(gè)尋找更好的自監(jiān)督目標(biāo)的過(guò)程),根據(jù)下游的任務(wù),來(lái)設(shè)計(jì)一個(gè)更好的對(duì)比目標(biāo)呢?
順序的重要性:你是否發(fā)現(xiàn),句向量的獲取方法間有一個(gè)鮮明的區(qū)別:是否用到了上下文。例如:skip-tought 要求輸入的句子有序,而 SDAE 不用;QuickTought 要求輸入句子間的先驗(yàn)關(guān)系,而 SimCSE 不用。更加廣泛的,BoW 類型的句向量獲取方法甚至不要求輸入句子里的詞匯具有先后順序。直覺(jué)上來(lái)說(shuō),人類在理解自然語(yǔ)言時(shí),對(duì)于詞序與句序是有相當(dāng)強(qiáng)的依賴的,但在 NLP 里,似乎不用這些順序信息就能得到很好的效果。是因?yàn)?NLP 的發(fā)展不能完全參考人類對(duì)于自然語(yǔ)言的理解方式,還是說(shuō)我們?nèi)晕春芎玫匕l(fā)掘出這些順序信息所蘊(yùn)含的潛能呢?
參考文獻(xiàn)
[1] Jawahar G, Sagot B, Seddah D. What does BERT learn about the structure of language?[C]//ACL 2019-57th Annual Meeting of the Association for Computational Linguistics. 2019.?
[2] Wahed M, Gruhl D, Alba A, et al. SAUCE: Truncated Sparse Document Signature Bit-Vectors for Fast Web-Scale Corpus Expansion[J]. arXiv preprint arXiv:2108.11948, 2021. (Accepted to CIKM 2021)?
[3] Rücklé A, Eger S, Peyrard M, et al. Concatenated power mean word embeddings as universal cross-lingual sentence representations[J]. arXiv preprint arXiv:1803.01400, 2018.?
[4] Reimers N, Gurevych I. Sentence-bert: Sentence embeddings using siamese bert-networks[J]. arXiv preprint arXiv:1908.10084, 2019. (Accepted to IJCAI 2019)?
[5] Kiros R, Zhu Y, Salakhutdinov R R, et al. Skip-thought vectors[C]//Advances in neural information processing systems. 2015: 3294-3302. [^6]: Hill F, Cho K, Korhonen A. Learning distributed representations of sentences from unlabelled data[J]. arXiv preprint arXiv:1602.03483, 2016. (Accepted NAACL 2016)?
[7] Logeswaran L, Lee H. An efficient framework for learning sentence representations[J]. arXiv preprint arXiv:1803.02893, 2018. (Accepted to ICLR 2018)
[8] Gao T, Yao X, Chen D. SimCSE: Simple Contrastive Learning of Sentence Embeddings[J]. arXiv preprint arXiv:2104.08821, 2021.?
[9] 蘇劍林. (Apr. 03, 2021). 《P-tuning:自動(dòng)構(gòu)建模版,釋放語(yǔ)言模型潛能 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/8295
更多閱讀
#投 稿?通 道#
?讓你的文字被更多人看到?
如何才能讓更多的優(yōu)質(zhì)內(nèi)容以更短路徑到達(dá)讀者群體,縮短讀者尋找優(yōu)質(zhì)內(nèi)容的成本呢?答案就是:你不認(rèn)識(shí)的人。
總有一些你不認(rèn)識(shí)的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學(xué)者和學(xué)術(shù)靈感相互碰撞,迸發(fā)出更多的可能性。?
PaperWeekly 鼓勵(lì)高校實(shí)驗(yàn)室或個(gè)人,在我們的平臺(tái)上分享各類優(yōu)質(zhì)內(nèi)容,可以是最新論文解讀,也可以是學(xué)術(shù)熱點(diǎn)剖析、科研心得或競(jìng)賽經(jīng)驗(yàn)講解等。我們的目的只有一個(gè),讓知識(shí)真正流動(dòng)起來(lái)。
📝?稿件基本要求:
? 文章確系個(gè)人原創(chuàng)作品,未曾在公開(kāi)渠道發(fā)表,如為其他平臺(tái)已發(fā)表或待發(fā)表的文章,請(qǐng)明確標(biāo)注?
? 稿件建議以?markdown?格式撰寫,文中配圖以附件形式發(fā)送,要求圖片清晰,無(wú)版權(quán)問(wèn)題
? PaperWeekly 尊重原作者署名權(quán),并將為每篇被采納的原創(chuàng)首發(fā)稿件,提供業(yè)內(nèi)具有競(jìng)爭(zhēng)力稿酬,具體依據(jù)文章閱讀量和文章質(zhì)量階梯制結(jié)算
📬?投稿通道:
? 投稿郵箱:hr@paperweekly.site?
? 來(lái)稿請(qǐng)備注即時(shí)聯(lián)系方式(微信),以便我們?cè)诟寮x用的第一時(shí)間聯(lián)系作者
? 您也可以直接添加小編微信(pwbot02)快速投稿,備注:姓名-投稿
△長(zhǎng)按添加PaperWeekly小編
🔍
現(xiàn)在,在「知乎」也能找到我們了
進(jìn)入知乎首頁(yè)搜索「PaperWeekly」
點(diǎn)擊「關(guān)注」訂閱我們的專欄吧
·
總結(jié)
以上是生活随笔為你收集整理的如何无监督地获得一个句子的向量表示?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ICML 2021 | Option-G
- 下一篇: 微信零钱提现要手续费吗