日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

从EMD、WMD到WRD:文本向量序列的相似度计算

發(fā)布時(shí)間:2024/10/8 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从EMD、WMD到WRD:文本向量序列的相似度计算 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?PaperWeekly 原創(chuàng) ·?作者|蘇劍林

單位|追一科技

研究方向|NLP、神經(jīng)網(wǎng)絡(luò)

在 NLP 中,我們經(jīng)常要去比較兩個(gè)句子的相似度,其標(biāo)準(zhǔn)方法是想辦法將句子編碼為固定大小的向量,然后用某種幾何距離(歐氏距離、cos 距離等)作為相似度。這種方案相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,而且檢索起來(lái)比較快速,一定程度上能滿足工程需求。

此外,還可以直接比較兩個(gè)變長(zhǎng)序列的差異性,比如編輯距離,它通過(guò)動(dòng)態(tài)規(guī)劃找出兩個(gè)字符串之間的最優(yōu)映射,然后算不匹配程度;現(xiàn)在我們還有 Word2Vec、BERT 等工具,可以將文本序列轉(zhuǎn)換為對(duì)應(yīng)的向量序列,所以也可以直接比較這兩個(gè)向量序列的差異,而不是先將向量序列弄成單個(gè)向量。

后一種方案速度相對(duì)慢一點(diǎn),但可以比較得更精細(xì)一些,并且理論比較優(yōu)雅,所以也有一定的應(yīng)用場(chǎng)景。本文就來(lái)簡(jiǎn)單介紹一下屬于后者的兩個(gè)相似度指標(biāo),分別簡(jiǎn)稱為 WMD、WRD。

Earth Mover's Distance

本文要介紹的兩個(gè)指標(biāo)都是以?Wasserstein 距離為基礎(chǔ),這里會(huì)先對(duì)它做一個(gè)簡(jiǎn)單的介紹,相關(guān)內(nèi)容也可以閱讀筆者舊作從 Wasserstein 距離、對(duì)偶理論到WGAN。

Wasserstein 距離也被形象地稱之為“推土機(jī)距離”(Earth Mover's Distance,EMD),因?yàn)樗梢杂靡粋€(gè)“推土”的例子來(lái)通俗地表達(dá)它的含義。

1.1 最優(yōu)傳輸

假設(shè)在位置 處我們分布有 那么多的土,簡(jiǎn)單起見(jiàn)我們?cè)O(shè)土的總數(shù)量為 1,即 ,現(xiàn)在要將土推到位置 上,每處的量為 ,而從 i 推到 j 的成本為 ,求成本最低的方案以及對(duì)應(yīng)的最低成本。

這其實(shí)就是一個(gè)經(jīng)典的最優(yōu)傳輸問(wèn)題。我們將最優(yōu)方案表示為 ,表示這個(gè)方案中要從 i 中把 數(shù)量的土推到 j 處,很明顯我們有約束:

所以我們的優(yōu)化問(wèn)題是:

1.2 參考實(shí)現(xiàn)

看上去復(fù)雜,但認(rèn)真觀察下就能發(fā)現(xiàn)上式其實(shí)就是一個(gè)線性規(guī)劃問(wèn)題——在線性約束下求線性函數(shù)的極值。而scipy就自帶了線性規(guī)劃求解函數(shù)linprog,因此我們可以利用它實(shí)現(xiàn)求 Wasserstein 距離的函數(shù):

import?numpy?as?np from?scipy.optimize?import?linprogdef?wasserstein_distance(p,?q,?D):"""通過(guò)線性規(guī)劃求Wasserstein距離p.shape=[m],?q.shape=[n],?D.shape=[m,?n]p.sum()=1,?q.sum()=1,?p∈[0,1],?q∈[0,1]"""A_eq?=?[]for?i?in?range(len(p)):A?=?np.zeros_like(D)A[i,?:]?=?1A_eq.append(A.reshape(-1))for?i?in?range(len(q)):A?=?np.zeros_like(D)A[:,?i]?=?1A_eq.append(A.reshape(-1))A_eq?=?np.array(A_eq)b_eq?=?np.concatenate([p,?q])D?=?D.reshape(-1)result?=?linprog(D,?A_eq=A_eq[:-1],?b_eq=b_eq[:-1])return?result.fun

讀者可以留意到,在傳入約束的時(shí)候用的是A_eq=A_eq[:-1], b_eq=b_eq[:-1],也就是去掉了最后一個(gè)約束。

這是因?yàn)?,所以(1)中的等式約束本身存在冗余,而實(shí)際計(jì)算中有時(shí)候可能存在浮點(diǎn)誤差,導(dǎo)致冗余的約束之間相互矛盾,從而使得線性規(guī)劃的求解失敗,所以干脆去掉最后一個(gè)冗余的約束,減少出錯(cuò)的可能性。

Word Mover's Distance

很明顯,Wasserstein 距離適合于用來(lái)計(jì)算兩個(gè)不同長(zhǎng)度的序列的差異性,而我們要做語(yǔ)義相似度的時(shí)候,兩個(gè)句子通常也是不同長(zhǎng)度的,剛好對(duì)應(yīng)這個(gè)特性,因此很自然地就會(huì)聯(lián)想到 Wasserstein 距離也許可以用來(lái)比較句子相似度,而首次進(jìn)行這個(gè)嘗試的是論文 From Word Embeddings To Document Distances [1]?

2.1 基本形式

設(shè)有兩個(gè)句子 ,經(jīng)過(guò)某種映射(比如? Word2Vec 或者 BERT)后,它們變成了對(duì)應(yīng)的向量序列 ,現(xiàn)在我們就想辦法用 Wasserstein 距離來(lái)比較這兩個(gè)序列的相似度。

根據(jù)前一節(jié)的介紹,Wasserstein 距離需要知道 三個(gè)量,我們逐一把它們都定義好即可。

由于沒(méi)有什么先驗(yàn)知識(shí),所以我們可以很樸素地將讓 ,所以現(xiàn)在還剩 。顯然, 代表著第一個(gè)序列的向量 與第二個(gè)序列的向量 的某種差異性,簡(jiǎn)單起見(jiàn)我們可以用歐氏距離 ,所以兩個(gè)句子的差異程度可以表示為:

這便是?Word Mover's Distance(WMD)(推詞機(jī)距離),大概可以理解為將一個(gè)句子變?yōu)榱硪粋€(gè)句子的最短路徑,某種意義上也可以理解為編輯距離的光滑版。實(shí)際使用的時(shí)候,通常會(huì)去掉停用詞后再計(jì)算 WMD。

▲ Word Mover's Distance 的示意圖,來(lái)自論文 From Word Embeddings To Document Distances

2.2 參考實(shí)現(xiàn)

參考實(shí)現(xiàn)如下:

def?word_mover_distance(x,?y):"""WMD(Word?Mover's?Distance)的參考實(shí)現(xiàn)x.shape=[m,d],?y.shape=[n,d]"""p?=?np.ones(x.shape[0])?/?x.shape[0]q?=?np.ones(y.shape[0])?/?y.shape[0]D?=?np.sqrt(np.square(x[:,?None]?-?y[None,?:]).mean(axis=2))return?wasserstein_distance(p,?q,?D)

2.3 下界公式

如果是檢索場(chǎng)景,要將輸入句子跟數(shù)據(jù)庫(kù)里邊所有句子一一算 WMD 并排序的話,那計(jì)算成本是相當(dāng)大的,所以我們要盡量減少算 WMD 的次數(shù),比如通過(guò)一些更簡(jiǎn)單高效的指標(biāo)來(lái)過(guò)濾掉一些樣本,然后才對(duì)剩下的樣本算 WMD。

幸運(yùn)的是,我們確實(shí)可以推導(dǎo)出 WMD 的一個(gè)下界公式,原論文稱之為?Word Centroid Distance (WCD)

也就是說(shuō),WMD 大于兩個(gè)句子的平均向量的歐氏距離,所以我們要檢索 WMD 比較小的句子時(shí),可以先用 WCD 把距離比較大的句子先過(guò)濾掉,然后剩下的采用? WMD 比較。

Word Rotator's Distance

WMD 其實(shí)已經(jīng)挺不錯(cuò)了,但非要雞蛋里挑骨頭的話,還是能挑出一些缺點(diǎn)來(lái):

  • 它使用的是歐氏距離作為語(yǔ)義差距度量,但從 Word2Vec 的經(jīng)驗(yàn)我們就知道要算詞向量的相似度的話,用 往往比歐氏距離要好;

  • WMD 理論上是一個(gè)無(wú)上界的量,這意味著我們不大好直觀感知相似程度,從而不能很好調(diào)整相似與否的閾值。

  • 為了解決這兩個(gè)問(wèn)題,一個(gè)比較樸素的想法是將所有向量除以各自的模長(zhǎng)來(lái)歸一化后再算 WMD,但這樣就完全失去了模長(zhǎng)信息了。

    最近的論文 Word Rotator's Distance: Decomposing Vectors Gives Better Representations [2]?則巧妙地提出,在歸一化的同時(shí)可以把模長(zhǎng)融入到約束條件 p,q 里邊去,這就形成了? WRD。

    3.1 基本形式

    首先,WRD 提出了“詞向量的模長(zhǎng)正相關(guān)于這個(gè)詞的重要程度”的觀點(diǎn),并通過(guò)一些實(shí)驗(yàn)結(jié)果驗(yàn)證了這個(gè)觀點(diǎn)。事實(shí)上,這個(gè)觀點(diǎn)跟筆者之前提出的 simpler glove 模型的觀點(diǎn)一致,參考《更別致的詞向量模型(五):有趣的結(jié)果》[3] 。

    而在 WMD 中, 某種意義上也代表著對(duì)應(yīng)句子中某個(gè)詞的重要程度,所以我們可以設(shè):

    然后 就用余弦距離:

    得到:

    這就是 Word Rotator's Distance (WRD) 了。由于使用的度量是余弦距離,所以兩個(gè)向量之間的變換更像是一種旋轉(zhuǎn)(rotate)而不是移動(dòng)(move),所以有了這個(gè)命名;同樣由于使用了余弦距離,所以它的結(jié)果在 [-1,1] 內(nèi),相對(duì)來(lái)說(shuō)更容易去感知其相似程度。

    3.2 參考實(shí)現(xiàn)

    參考實(shí)現(xiàn)如下:

    def?word_rotator_distance(x,?y):"""WRD(Word?Rotator's?Distance)的參考實(shí)現(xiàn)x.shape=[m,d],?y.shape=[n,d]"""x_norm?=?(x**2).sum(axis=1,?keepdims=True)**0.5y_norm?=?(y**2).sum(axis=1,?keepdims=True)**0.5p?=?x_norm[:,?0]?/?x_norm.sum()q?=?y_norm[:,?0]?/?y_norm.sum()D?=?1?-?np.dot(x?/?x_norm,?(y?/?y_norm).T)return?wasserstein_distance(p,?q,?D)def?word_rotator_similarity(x,?y):"""1?-?WRDx.shape=[m,d],?y.shape=[n,d]"""return?1?-?word_rotator_distance(x,?y)

    3.3?下界公式

    同 WMD 一樣,我們也可以推導(dǎo)出 WRD 的一個(gè)下界公式:

    不過(guò)這部分內(nèi)容并沒(méi)有出現(xiàn)在 WRD 的論文中,只是筆者自行補(bǔ)充的。

    小結(jié)

    文本介紹了兩種文本相似度算法 WMD、WRD,它們都是利用 Wasserstein 距離(Earth Mover's Distance,推土機(jī)距離)來(lái)直接比較兩個(gè)不定長(zhǎng)向量的差異性。這類相似度算法在效率上會(huì)有所欠缺,但是理論上比較優(yōu)雅,而且效果也頗為不錯(cuò),值得學(xué)習(xí)一番。

    參考鏈接

    [1] http://proceedings.mlr.press/v37/kusnerb15.html

    [2] https://arxiv.org/abs/2004.15003

    [3] https://kexue.fm/archives/4677

    點(diǎn)擊以下標(biāo)題查看更多往期內(nèi)容:?

    • NLP中的Mask全解

    • 從ACL和ICLR看知識(shí)圖譜嵌入的近期研究進(jìn)展

    • 對(duì)比學(xué)習(xí)(Contrastive Learning)相關(guān)進(jìn)展梳理

    • GELU的兩個(gè)初等函數(shù)近似是怎么來(lái)的?

    • BERT在小米NLP業(yè)務(wù)中的實(shí)戰(zhàn)探索

    • 復(fù)旦大學(xué)邱錫鵬教授:NLP預(yù)訓(xùn)練模型綜述

    #投 稿?通 道#

    ?讓你的論文被更多人看到?

    如何才能讓更多的優(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é)習(xí)心得技術(shù)干貨。我們的目的只有一個(gè),讓知識(shí)真正流動(dòng)起來(lái)。

    ?????來(lái)稿標(biāo)準(zhǔn):

    ? 稿件確系個(gè)人原創(chuàng)作品,來(lái)稿需注明作者個(gè)人信息(姓名+學(xué)校/工作單位+學(xué)歷/職位+研究方向)?

    ? 如果文章并非首發(fā),請(qǐng)?jiān)谕陡鍟r(shí)提醒并附上所有已發(fā)布鏈接?

    ? PaperWeekly 默認(rèn)每篇文章都是首發(fā),均會(huì)添加“原創(chuàng)”標(biāo)志

    ?????投稿郵箱:

    ? 投稿郵箱:hr@paperweekly.site?

    ? 所有文章配圖,請(qǐng)單獨(dú)在附件中發(fā)送?

    ? 請(qǐng)留下即時(shí)聯(lián)系方式(微信或手機(jī)),以便我們?cè)诰庉嫲l(fā)布時(shí)和作者溝通

    ????

    現(xiàn)在,在「知乎」也能找到我們了

    進(jìn)入知乎首頁(yè)搜索「PaperWeekly」

    點(diǎn)擊「關(guān)注」訂閱我們的專欄吧

    關(guān)于PaperWeekly

    PaperWeekly 是一個(gè)推薦、解讀、討論、報(bào)道人工智能前沿論文成果的學(xué)術(shù)平臺(tái)。如果你研究或從事 AI 領(lǐng)域,歡迎在公眾號(hào)后臺(tái)點(diǎn)擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。

    總結(jié)

    以上是生活随笔為你收集整理的从EMD、WMD到WRD:文本向量序列的相似度计算的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。