文字產生任務通常採用 teacher forcing 的方式來訓練,這種訓練方式使得模型在訓練過程中只能見到正樣本。然而生成目標與輸入之間通常會存在某些約束,這些約束通常由句子中的關鍵元素體現,例如在query 改寫任務中,“麥當勞點餐” 不能改成“肯德基點餐”,這裡面起到約束作用的關鍵元素是品牌關鍵字。透過引入對比學習在生成的過程中加入負樣本的模式使得模型能夠有效地學習到這些限制。
現有的基於對比學習方法主要集中在整句層面實現[1][2],而忽略了句子中的詞粒度的實體的訊息,下圖中的例子展示了句子中關鍵字的重要意義,對於一個輸入的句子,如果對它的關鍵字進行替換(e.g. cosmology->astrophysics),句子的含義會發生變化,從而在語義空間中的位置(由分佈來表示)也會改變。而關鍵字作為句子中最重要的訊息,對應於語意分佈上的一個點,它很大程度上也決定了句子分佈的位置。同時,在某些情況下,現有的對比學習目標對模型來說顯得過於容易,導致模型無法真正學習到區分正負例之間的關鍵資訊。
基於此,來自螞蟻集團、北大等機構的研究者提出了一種多粒度對比生成方法,設計了層次化對比結構,在不同層級上進行資訊增強,在句子粒度上增強學習整體的語義,在詞粒度上增強局部重要資訊。研究論文已被 ACL 2022 接收。
論文網址:https://aclanthology.org/2022.acl-long.304.pdf
我們的方法是基於經典的CVAE文本生成框架[3][4],每個句子都可以映射成為向量空間中的一個分佈,而句子中的關鍵字則可以看成是這個分佈上採樣得到的一個點。我們一方面透過句子粒度的對比來增強隱空間向量分佈的表達,另一方面透過構造的全局關鍵字graph 來增強關鍵字點粒度的表達,最後透過馬氏距離對關鍵字的點和句子的分佈構造層次間的對比來增強兩個粒度的訊息表達。最終的損失函數由三種不同的對比學習 loss 相加而得到。
##在Instance-level,我們利用原始輸入x、目標輸出
#及對應的輸出負樣本構成了句子粒度的比較pair
。我們利用一個先驗網路學習到先驗分佈
#,記為
#;透過一個後驗網路學習到近似的後驗分佈
###############################################################################與
#,分別記為
#和
。句子粒度對比學習的目標就是盡可能縮小先驗分佈和正後驗分佈的距離,同時盡可能推大的先驗分佈與負後驗分佈的距離,對應的損失函數如下:
其中為正樣本或負樣本,為溫度係數,用來表示距離度量,這裡我們使用KL 散度(Kullback–Leibler divergence )[5] 來測量兩個分佈直接的距離。
關鍵字粒度的對比學習是用來讓模型更多的關注到句子中的關鍵訊息,我們透過利用輸入輸出文字對應的正負關係建構一個keyword graph 來達到這個目標。具體來說,根據一個給定的句對
,我們可以分別從其中確定一個關鍵字
和
#(關鍵字抽取的方法我採用經典的TextRank 演算法[6]);對於一個句子
## ,可能存在與其關鍵字
#相同的其他句子,這些句子共同組成一個集合
##########,這裡面每一個句子####################### ####都有一對正負例輸出句子##################################################################### ##################與負例關鍵字
#。這樣在整個集合中,對任何一個輸出的句子
#,可以認為它所對應的關鍵字
與每個周圍的
(透過句子之間的正負關係關聯)之間都存在著一條正邊
,和每一個周圍的
#之間都存在一條負邊
#。基於這些關鍵字節點和他們直接的邊,我們就可以建構一個keyword graph
我們使用BERT embedding[7] 來作為每個節點
的初始化,並使用一個MLP層來學習每條邊的表示
。我們透過一個graph attention (GAT) 層和MLP 層來迭代式地更新關鍵字網路中的節點和邊,每個迭代中我們先透過如下的方式更新邊的表示:
##這裡
可以是
或
#。
############然後根據更新後的邊##########,我們透過一個graph attention 層來更新每個節點的表示:
這裡
#都是可學習的參數,
#為注意力權重。為了防止梯度消失的問題,我們在
#上加上了殘差連接,得到該迭代中節點的表示
。我們使用最後一個迭代的節點表示作為關鍵字的表示,記為 u。
關鍵字粒度的比較來自於輸入句子的關鍵字
和一個偽裝(impostor)節點
。我們將輸入句子的輸出正樣本中提取的關鍵字記為
,它在上述關鍵字網路中的負鄰居節點記為
,則
,關鍵字粒度的比較學習loss 計算如下:
這裡
######用來指################## #########或##################,h(·) 用來表示距離測量,在關鍵字粒度的對比學習中我們選用了餘弦相似度來計算兩個點之間的距離。
#可以注意到上述句子粒度和關鍵字粒度的對比學習分別是在分佈和點上實現,這樣兩個粒度的獨立對比可能由於差異較小導致增強效果減弱。對此,我們基於點和分佈之間的馬氏距離(Mahalanobis distance)[8] 構建不同粒度之間對比關聯,使得目標輸出關鍵字到句子分佈的距離盡可能小於imposter 到該分佈的距離,從而彌補各粒度獨立對比可能帶來的對比消失的缺陷。具體來說,跨粒度的馬氏距離對比學習希望盡可能縮小句子的後驗語義分佈
和
之間的距離,同時盡可能拉大其與
之間的距離,損失函數如下:
這裡
#或
#,而h(·) 為馬氏距離。
###實驗& 分析################## 實驗結果################################# #########我們在三個公開資料集Douban(Dialogue)[9],QQP(Paraphrasing)[10][11] 和RocStories(Storytelling)[12] 上進行了實驗,都取得了SOTA 的效果。我們比較的基線包括傳統的生成模型(e.g. CVAE[13],Seq2Seq[14],Transformer[15]),基於預訓練模型的方法(e.g. Seq2Seq-DU[16],DialoGPT[17],BERT-GEN [7],T5[18])以及基於對比學習的方法(e.g. Group-wise[9],T5-CLAPS[19])。我們透過計算BLEU score[20] 和句對之間的BOW embedding 距離(extrema/average/greedy)[21] 來作為自動化評估指標,結果如下圖所示:########### ################我們在QQP 資料集上也採用了手動評估的方式,3 位標註人員分別對T5-CLAPS,DialoGPT,Seq2Seq-DU 以及我們的模型產生的結果進行了標註,結果如下圖所示:###################我們對是否採用關鍵字、是否採用關鍵字網路以及是否採用馬氏距離對比分佈進行了消融分析實驗,結果顯示這三種設計對最後的結果確實起到了重要的作用,實驗結果如下圖所示。
為了研究不同層級對比學習的作用,我們對隨機採樣的case 進行了可視化,透過t-sne[22] 進行降維處理後得到下圖。圖中可以看出,輸入句子的表示與抽取的關鍵字表示接近,這說明關鍵字作為句子中最重要的訊息,通常會決定語義分佈的位置。並且,在對比學習中我們可以看到經過訓練,輸入句子的分佈與正樣本更接近,與負樣本遠離,這說明對比學習可以起到幫助修正語意分佈的作用。
最後,我們探討採樣不同關鍵字的影響。如下表所示,對於一個輸入問題,我們透過 TextRank 抽取和隨機選擇的方法分別提供關鍵字作為控制語意分佈的條件,並檢查產生文字的品質。關鍵字作為句子中最重要的訊息單元,不同的關鍵字會導致不同的語意分佈,產生不同的測試,選擇的關鍵字越多,產生的句子越準確。同時,其他模型產生的結果也展示在下表中。
這篇文章中我們提出了一種跨粒度的層次化對比學習機制,在多個文本生成的資料集上均超過了具有競爭力的基線工作。基於該工作的 query 改寫模型在也在支付寶搜尋的實際業務場景成功落地,取得了顯著的效果。支付寶搜尋中的服務覆蓋領域寬廣且領域特色顯著,用戶的搜尋query 表達與服務的表達存在巨大的字面差異,導致直接基於關鍵字的匹配難以取得理想的效果(例如用戶輸入query「新上市汽車查詢”,無法召回服務“新車上市查詢”),query 改寫的目標是在保持query 意圖不變的情況下,將用戶輸入的query 改寫為更貼近服務表達的方式,從而更好的匹配到目標服務。如下是一些改寫範例:
以上是提升支付寶搜尋體驗,螞蟻、北大基於層次化對比學習文本生成框架的詳細內容。更多資訊請關注PHP中文網其他相關文章!