色屁屁www影院免费观看入口,欧美性猛交ⅹxxx乱大交妖精,欧美激情第5页,欧美性猛交xxxx三人,欧美一a级做爰片大开眼界

達(dá)觀動(dòng)態(tài)

達(dá)觀愿與業(yè)內(nèi)同行分享 助力各企業(yè)在大數(shù)據(jù)浪潮來臨之際一起破浪前行

技術(shù)干貨:如何訓(xùn)練高性能語義表示模型——交叉編碼器VS雙編碼器

目前,在語句編碼器(sentence encoders)領(lǐng)域的學(xué)術(shù)研究相當(dāng)多,剛開始涉足的話,可能有點(diǎn)令人生畏。如果你沒有正確掌握語句編碼器背后的理念和其中的細(xì)微差別,就很容易感到困惑。

例如,你可能知道存在sentence transformer(bi-encoders),它們的目的是為句子級(jí)別的任務(wù)產(chǎn)生高質(zhì)量的嵌入(qualitative embeddings)。但話說回來,普通的?transformer編碼器也能產(chǎn)生較高質(zhì)量的嵌入,并且完全適合句子級(jí)任務(wù)。transformer和與之對(duì)應(yīng)的sentence transformer背后的架構(gòu)似乎也是相同的。然后,還有交叉編碼器(cross-encoders)——它也被用于執(zhí)行句子級(jí)的文本分類/回歸任務(wù)。

這些疑問正是我們?cè)诠P者要在本文中所要闡明清楚的問題。

讀完本文,你應(yīng)該會(huì)對(duì)什么是?sentence transformer、雙編碼器(bi-encoders)和交叉編碼器(cross-encoders)、何時(shí)使用它們以及它們與普通的transformer(regular transformers)的關(guān)系有一個(gè)非常清楚的了解。

01??為什么需要sentence transformers?

一言以蔽之:

“sentence transformer能產(chǎn)生比普通transformers更好的語句語義表示,以支持某些特定的句子級(jí)的下游任務(wù),如語義檢索、文本聚類、論據(jù)挖掘等?!?/p>

詳情見 知乎.主題模型(topic model)到底還有沒有用,該怎么用?,蘇格蘭折耳喵,https://www.zhihu.com/question/34801598

語句的表示學(xué)習(xí)模型從較早期的詞袋模型到靜態(tài)預(yù)訓(xùn)練模型,再到如今的動(dòng)態(tài)的語境預(yù)訓(xùn)練模型,對(duì)于句子語義信息的編碼由“低保真”逐漸過渡到“高保真”狀態(tài)。

在實(shí)際應(yīng)用場(chǎng)景中,低保真還是高保真并沒有優(yōu)劣之分,選型完全取決于使用場(chǎng)景和具體需求。某個(gè)語義表示模型很可能非常適用于一個(gè)特定的使用場(chǎng)景,但在另一個(gè)使用場(chǎng)景下就沒啥作用了。我將通過一個(gè)示例進(jìn)行說明。

請(qǐng)考慮以下說辭:”從此邊城多戰(zhàn)伐,不須笳鼓更悲涼”和 “投身革命即為家,血雨腥風(fēng)應(yīng)有涯”。那么,問題來了,這兩條詩句是否應(yīng)該被認(rèn)為是相似的,也就是說,上述2個(gè)語句嵌入是否應(yīng)該在語義空間中相互靠攏呢?

嗯,這取決于你的選擇。如果你談?wù)摰氖侵黝},那么肯定是的—這兩個(gè)語句都是關(guān)于“戰(zhàn)爭殘酷”的內(nèi)容,在這個(gè)意義上,它們是非常相似的。然而,如果你談?wù)摰氖乔楦校敲创鸢甘遣谎远鳎呵耙痪涿黠@是悲傷的消極的情感,后一句是革命樂觀主義的積極情感,二者的情感傾向截然不同。

所有嵌入都是相同的,但有些嵌入比其他嵌入更相同

注意:這就是為什么大型的預(yù)訓(xùn)練語言模型需要在非常通用的、數(shù)據(jù)規(guī)模龐大的任務(wù)上訓(xùn)練(如遮蔽詞語言建模)的原因,其內(nèi)在邏輯是,經(jīng)大規(guī)模通用語料訓(xùn)練得到的語句嵌入表示反映了模型對(duì)語言非常廣泛的理解,以后可以根據(jù)具體的使用情況進(jìn)行調(diào)整。

言歸正傳:”?sentence transformers是否能產(chǎn)生更好的語句嵌入?”。答案也是不言而喻的,—需要視場(chǎng)景而定,做”具體問題,具體分析”!

常規(guī)的transformer模型通過執(zhí)行一系列操作來產(chǎn)生句子嵌入,如對(duì)其token-level的嵌入的元素算術(shù)平均。BERT的一個(gè)很好的池化選擇是CLS池化。BERT有一個(gè)特殊的<CLS>標(biāo)記,它應(yīng)該捕獲所有的序列信息。在預(yù)訓(xùn)練期間,它被調(diào)整為對(duì)下一句的預(yù)測(cè)(NSP)。

注意?:RoBERTa在預(yù)訓(xùn)練試沒有執(zhí)行NSP任務(wù),也沒有<CLS>標(biāo)記。它僅有一個(gè)句首<s>的標(biāo)記,但嵌入沒有經(jīng)過訓(xùn)練,故無法描繪出有意義的句子表征,沒法開箱即用~

由此產(chǎn)生的句子嵌入很適合于一些分類或回歸任務(wù),如果這是你接下來要做的任務(wù),請(qǐng)直接使用transformers中的BertForSequenceClassification或其他模型類似的方法,它們的訓(xùn)練過程和使用方法都還不錯(cuò)。

然而,對(duì)于語義相似性任務(wù)來說,由常規(guī)的transformers獲得的句子嵌入并不是很好。這就是sentence transformer大顯身手的地方。sentence transformers的訓(xùn)練過程是專門針對(duì)語義相似性任務(wù)而設(shè)計(jì)的,筆者稍后會(huì)有更多關(guān)于訓(xùn)練過程的內(nèi)容。

因此,綜上所述:如果你想執(zhí)行一些句子分類任務(wù),普通的transformers就能勝任了。但是,如果你想要執(zhí)行諸如語義檢索、話題聚類等依賴于語義相似性的任務(wù),你就應(yīng)該將目光投向sentence transformers。

從實(shí)際出發(fā)選擇合適的模型架構(gòu)和訓(xùn)練方法是NLPer的必備技能

02??交叉編碼器(Cross-encoders)?

現(xiàn)在,好奇的你可能會(huì)問自己這樣一個(gè)問題:

“難道不能把語義相似性問題轉(zhuǎn)化為一個(gè)句子分類問題嗎?也就是將兩個(gè)句子分類拼接后,模型對(duì)其打上 “相關(guān) “或 “不相關(guān)”的標(biāo)簽,而不是將所有這些句子進(jìn)行單獨(dú)編碼。”

這樣想是非常正確的,因?yàn)?strong>拼接后的句子之間語義還有交互,能最大限度的利用語句之間的語義信息,效果比單獨(dú)編碼句子后再進(jìn)行相似度比較要好得多。事實(shí)上,這正是交叉編碼器(cross-encoder)所做的。

從本質(zhì)上講,交叉編碼器所做的是將兩個(gè)句子通過分隔符<SEP>拼接起來,并將其“喂進(jìn)”一個(gè)語言模型。在語言模型的頂部有一個(gè)分類頭,用以訓(xùn)練來預(yù)測(cè)一個(gè)目標(biāo) “相似度 “數(shù)值。

因此,例如,交叉編碼器會(huì)將 “我的狗很快 “和 “他有一個(gè)V8柴油發(fā)動(dòng)機(jī) “這兩個(gè)句子連接起來,并預(yù)測(cè)一個(gè)低的相似性分?jǐn)?shù),盡管它們都包含與速度有關(guān)的詞匯。這當(dāng)然是正確的。每個(gè)人都知道,Snuffles的引擎蓋下?lián)u晃著一臺(tái)V12 TDI,它確實(shí)是非常省油的。

交叉編碼器的架構(gòu)

因此,交叉編碼器通過句子對(duì)及表征其語義相似程度的基本事實(shí)標(biāo)簽(可能是離散的類別標(biāo)簽,或者是連續(xù)性的相似度數(shù)值)來進(jìn)行有監(jiān)督訓(xùn)練。


交叉編碼器的訓(xùn)練數(shù)據(jù)樣例

雖然交叉編碼器在句子層面的任務(wù)上表現(xiàn)非常好,但它存在一個(gè)“致命”缺點(diǎn):交叉編碼器不產(chǎn)生句子嵌入。

在信息檢索的使用場(chǎng)景下,這意味著我們不能預(yù)先計(jì)算文檔嵌入并將其與查詢嵌入進(jìn)行有效的比較。我們也不能對(duì)文檔嵌入進(jìn)行索引,以進(jìn)行有效的搜索。

在句子聚類的背景下,這意味著我們必須將每一對(duì)可能的文檔都傳遞給交叉編碼器,并計(jì)算出預(yù)測(cè)的相似度。

可想而知,這使得交叉編碼器在實(shí)際應(yīng)用中的速度慢到幾乎無法使用的地步,也就是說,交叉編碼器難以落地!

03??編碼器(Bi-encoders)

你可能已經(jīng)注意到,我已經(jīng)把?“sentence transformer”和 “雙編碼器(bi-encoder) “這兩個(gè)術(shù)語幾乎交替起來使用。這是有原因的:它們?cè)谠S多場(chǎng)景下是可以互換的。Sentence transformer只是指Python包中的sentence-transformers和原始論文SBERT,而雙編碼器更多的是指實(shí)際的模型架構(gòu)。

交叉編碼器的低效率弱點(diǎn)正是雙編碼器大放異彩的強(qiáng)項(xiàng)。雖然交叉編碼器往往更準(zhǔn)確,但雙編碼器的優(yōu)勢(shì)在于它可以產(chǎn)生實(shí)際的句子嵌入,這使得它們?cè)诂F(xiàn)實(shí)世界中更快、更實(shí)用,因?yàn)樗鼈冊(cè)试S索引、預(yù)先計(jì)算嵌入等。

雙編碼器的模型架構(gòu)

舉例來說,用交叉編碼器對(duì)1萬個(gè)句子進(jìn)行聚類,需要計(jì)算大約5000萬個(gè)句子對(duì)的相似性分?jǐn)?shù),這在BERT架構(gòu)下需要大約65小時(shí)。在這段時(shí)間里,你可以把所有13部黃飛鴻系列電影看1遍,聽完張學(xué)友歷年專輯里的每一首歌,而且你還會(huì)有幾個(gè)小時(shí)的時(shí)間。

相比之下,用雙編碼器完成同樣的任務(wù)需要大約5秒鐘。這大約僅是”? 以小民之見,我們不只要練武強(qiáng)身,以抗外敵,更重要的是廣開言路,治武合一,那才是國富民強(qiáng)之道…”一幕說話的長度。

然而,應(yīng)該注意的是,知識(shí)蒸餾(knowledge distillation)的訓(xùn)練程序中,雙編碼器的學(xué)生模型試圖模仿交叉編碼器的教師模型,既能讓模型精簡縮小,也能保留原始模型九成以上甚至反超原始模型的效果,這是非常有實(shí)用價(jià)值的一個(gè)方向。但這本身是一個(gè)話題了,筆者在本篇中就不贅言了。

04??關(guān)于Sentence transformer的訓(xùn)練

sentence transformer的真正威力在于其訓(xùn)練程序,它是專門為語義相似性而設(shè)計(jì)的。Sentence transformer的訓(xùn)練常使用所謂的孿生網(wǎng)絡(luò)( Siamese networks)。

在孿生網(wǎng)絡(luò)中,單條訓(xùn)練數(shù)據(jù)是由一個(gè) “錨數(shù)據(jù)點(diǎn)(anchor data point)”、一個(gè) “正例數(shù)據(jù)點(diǎn)(positive data point) “和一個(gè) “負(fù)例數(shù)據(jù)點(diǎn)(negative data point) “組成的三元組。這里的訓(xùn)練目標(biāo)是”三元損失函數(shù)(?triplet loss function)”—它是在最小化錨數(shù)據(jù)點(diǎn)嵌入到正例數(shù)據(jù)點(diǎn)嵌入之間的距離的同時(shí),還最大化錨數(shù)據(jù)點(diǎn)嵌入到負(fù)例數(shù)據(jù)點(diǎn)嵌入之間的距離。

孿生訓(xùn)練(Siamese training)是一個(gè)從計(jì)算機(jī)視覺中借用的想法。假設(shè)你想設(shè)計(jì)一個(gè)人臉相似度判別系統(tǒng)。你將數(shù)據(jù)結(jié)構(gòu)化為一個(gè) “錨 “圖像、一個(gè) “正例 “圖像(即同一個(gè)人的不同圖像)和一個(gè) “負(fù)例”圖像(即另一個(gè)人的圖像)的三元組。然后對(duì)模型進(jìn)行訓(xùn)練,使錨和正例圖像的嵌入非常接近,而錨和負(fù)例圖像的嵌入則拉遠(yuǎn)。

孿生網(wǎng)絡(luò)最初是用來進(jìn)行人臉識(shí)別的

以此類推,在sentence transformer的背景下,每條訓(xùn)練數(shù)據(jù)為一個(gè)錨定語句與一個(gè)在語義上與錨定語句相似的正例語句,以及一個(gè)在語義上與錨定語句不相似的負(fù)例語句的三元組。

這種學(xué)習(xí)范式實(shí)際上是“偷師”于CV領(lǐng)域的對(duì)比學(xué)習(xí)中的一種形式,它是顯性的規(guī)定“負(fù)例”。

通過對(duì)比學(xué)習(xí)學(xué)到通用且優(yōu)良的文本表示

那么,現(xiàn)在句表示學(xué)習(xí)領(lǐng)域的“扛把子”其實(shí)是隱性的規(guī)定負(fù)例(只有錨定語句和一個(gè)正例,同一批次中的其他語句則為負(fù)例,或者指定一組錨定語句、正例、困難負(fù)例,同一批次的其他語句皆為負(fù)例),使用的是Multiple Negative Ranking Loss,數(shù)學(xué)上的表達(dá)式為:

Multiple Negative Ranking Loss公式

其直觀解釋為:

Multiple Negative Ranking Loss的直觀解釋

同樣地,訓(xùn)練過程會(huì)不斷動(dòng)態(tài)調(diào)整語句的嵌入,使錨定語句的嵌入在語義空間上,不斷接近正例語句的嵌入,同時(shí)遠(yuǎn)離負(fù)例語句的嵌入。

語義表示模型的核心要素

雙編碼器的三元組訓(xùn)練數(shù)據(jù)樣例

注意:這個(gè)訓(xùn)練過程迫使sentence transformer產(chǎn)生有語義的語句嵌入,即語義相似的語句的語句嵌入接近,而語義不相似的句子的語句嵌入不接近。

在實(shí)際訓(xùn)練過程中,負(fù)例的選擇是關(guān)鍵,一般而言,要得到較為通用、質(zhì)量較高的語句表示,不要指望無監(jiān)督訓(xùn)練,不要指望無監(jiān)督訓(xùn)練,不要指望無監(jiān)督訓(xùn)練,重要的事情說三遍,訓(xùn)練過程中對(duì)模型注入關(guān)于現(xiàn)實(shí)世界的先驗(yàn)知識(shí)非常關(guān)鍵!

簡而言之,要善于構(gòu)造訓(xùn)練數(shù)據(jù)中的困難負(fù)例,也就是和正例字面義或者主題相近、容易搞混淆,但跟錨定語句沒多大關(guān)系的語句,這種信息對(duì)于模型來說很難學(xué)習(xí),但是這些信息更能反映語義的本質(zhì),學(xué)會(huì)后,模型的理解能力非常強(qiáng)悍!

要善于構(gòu)造困難負(fù)例

構(gòu)造困難負(fù)例的常規(guī)方法如下圖所示,其中的關(guān)鍵點(diǎn)在于:

  • 用Cross-Encoder對(duì)所有挖掘出的段落進(jìn)行分類
  • 僅將Cross-Encoder得分低于閾值的段落作為Bi-Encoder的困難負(fù)例,這是降噪環(huán)節(jié),有助于提升負(fù)例質(zhì)量

如何尋找困難負(fù)例?

看看基于困難負(fù)例學(xué)習(xí)的實(shí)際效果,絕對(duì)是值!

少整那些花里胡哨的無監(jiān)督玩法,要真正用起來,高質(zhì)量三元組(困難負(fù)例版本)搞起來!

 

 

05??結(jié)語

綜上所述,我們對(duì)sentence transformer進(jìn)行了非常詳細(xì)的技術(shù)分析。然而,我們不要忽視大局,回顧一下我們所討論的內(nèi)容。

  • 比較了sentence transformer和普通transformer,發(fā)現(xiàn)其中一個(gè)并不普遍地比另一個(gè)好。sentence transformer只是針對(duì)語義相似性進(jìn)行了調(diào)整。我們討論了交叉編碼器,它將語義相似性作為一個(gè)分類問題。我們的結(jié)論是,雖然交叉編碼器通常非常準(zhǔn)確,但它們?cè)趯?shí)際應(yīng)用中因效率問題往往不太實(shí)用,難以落地。
  • 看到了雙編碼器是如何被設(shè)計(jì)來為交叉編碼器的低效率提供解決方案的。
  • 最后討論了雙編碼器的訓(xùn)練過程,這是真正使其脫穎而出的原因,因?yàn)樗鼈兊幕炯軜?gòu)與普通transformer的相同。
  • 構(gòu)建基于困難負(fù)例的有監(jiān)督三元組數(shù)據(jù)集和基于對(duì)比學(xué)習(xí)的表示學(xué)習(xí)范式所得的模型具有良好的泛化能力

最后附上一個(gè)思維導(dǎo)圖,包含筆者的一些總結(jié):

作者介紹

高長寬:達(dá)觀數(shù)據(jù)解決方案副總監(jiān)

擅長數(shù)據(jù)分析和可視化表達(dá),熱衷于用數(shù)據(jù)發(fā)現(xiàn)洞察,指導(dǎo)實(shí)踐。