《Learning Text Similarity with Siamese Recurrent Networks》

論文地址與項目源碼:

aclweb.org/anthology/W1

dhwajraj/deep-siamese-text-similarity

一、表示學習、normalization

1、主要任務:Job title taxonomy

本文提出了一個深度模型,只採用句子對之間的相似度信息,將變長的文本構造入固定維度的embedding 空間。可以用來作為分類器,也可以尋找相近的job title,以及表示學習。

It learns to project variable length strings into a fixed-dimensional embedding space by using only information about the similarity between pairs of strings

The model learns a representation that is selective to differences in the input that reflect semantic differences (e.g., 「Java developer」 vs. 「HR manager」) but also invariant to nonsemantic string differences (e.g., 「Java developer」 vs. 「Java programmer」).

這種表達形式對於有語義區別的輸入有選擇性,對於沒有語義區別的string有不變性

「Java developer」 vs. 「HR manager」的representation區別很大

「Java developer」 vs. 「Java programmer」則是一樣的(存疑)

文本的Normalization非常依賴於欲以相似度semantic similarity

2、related work:

將該類問題作為分類問題的缺陷:

1數據採集難,標註代價昂貴

2模型沒有修正能力,一個新樣本的加入就意味著模型要重新訓練

3 分類器無法進行遷移學習,不能將當前模型的表示用於一個不同的task

人工構建相似度衡量標準:(有點像聚類方法)

優點:不用訓練模型,只需要向數據中添加job strings即可

缺點:需要人工進行數據採集和分類,問題轉化為如何構建一個好的語義相似性度量

3、normalization:

1) 時間、日期都會歸一化以同一種形式表示

2) 一個人名在不同的語言中的表達,1要明確這幾種表達指向同一個人,2能夠揭示這幾種表達的語義相似度

4、Siamese Network:

不同於autoencoder,Siamese network從成對的objects的相似信息中學習到不變性(invariance)與選擇性(selectivity)的必要條件

an autoencoder learns invariance through added noise and dimensionality reduction in the bottleneck layer and selectivity solely through the condition that the input should be reproduced by the decoding part of the network

二、Siamese Recurrent Neural Network

Loss function:Contrastive loss function對比損失函數

餘弦相似度:

數據為三元組的形式:

損失函數(改進版):

在label為positive時,Ew越接近1,loss越小

在label為negative時,Ew越接近於1,loss越大

網路結構:

雙分支網路dual-branch networks,輸入為character-level,解決未登錄詞的問題

input:{x1,x2,y} x1 x2 為兩個詞的字元序列,y=1 for similar, y=0 for dissimilar

目標:最小化相似的詞pairs在embedding space中的距離,反之maximize

結構:四層雙向LSTM,隱層維度64,左右分支的權重完全共享

BiLSTM的最後一個layer,正反的output先concat,然後求均值得到兩個dense layer,然後這兩個128維的向量計算餘弦相似度,再根據label=0或1來決定loss的值

Optimizer:Adam

Dropout:on the recurrent units (with probability 0.2) and

between layers (with probability 0.4) to prevent overfitting

三、實驗

Dataset:

Data augmentation:

Group內包含job title數量與group數量之間的分布:含有上百條title的group是很少的,通常一個group只含幾個title

數據集採樣:4:1的採樣方式

4為between-class (negative) pairs

1為within-class (positive) pairs

分類數據集的建設:分為四個stage,每個stage又分為兩步:1使用特殊屬性來進行數據擴充2對模型進行與該特殊屬性相關的行為測試(存疑)四個stage環環相扣,每次augmentation都是基於之前augmentation的基礎上

Stage 1:Typo and spelling invariance

擴充方法:新增正樣本對(positive sample pairs),包含兩個一樣的string,然後對其中一個string的字母隨機替換20%,隨機刪除5%來模擬錯別字、同一個詞多種spelling等現象

同時構建了N=19928的Typos測試集,5%的字母被隨機替換或者刪除

Stage 2:Synonyms 同義詞

擴充方法為:1、人工構建的同義詞詞庫 2、歸納:在同一個group內,如果兩個job title都有某一個或兩個詞,如「C++ developer」和「C++ programmer」都有「C++」,那麼就推斷developer和programmer就被認為是同義詞(candidate),只要滿足:1 兩者不出現在isolation(可能是指其他group或者人為設置的排除域),2 不包含特殊字元如「&」,3 包含最多兩個詞,那麼兩者就會被認為是同義詞(組)

同時構建了N=7909的Composition測試集,構建方法為同義詞替換

Stage 3:Extra words其他詞

擴充方法為從real world data中釋放額外的詞(到指定的group內,如果只是多了extra word,可以認為是同類job title),有點像加雜訊,往純凈的job title里加extra word(語氣詞修飾詞等各種)形成新的同類(group)的job title,加入後不影響語義

同時構建了一個set,如果某個group中的job title嚴格是當前string的substring,那麼當前string就被選入set,這個set的一部分,N = 1949,作為Extra Words測試集

Stage 4:Feedback

可以通過人工手段對模型進行調優,方法就是用認為標註的相似度score數據集參與訓練(認為人工打分為最准,從而幫助模型調優),為此,人工給11929個predictions進行了打分建立了一個數據集,同時將其中的N=1000作為Annotations測試集,不參與訓練

實驗結果:

四、總結

成果:

the models showed themselves invariant to spelling variation, synonym replacements and superfluous words.

  • 網路也沒有對數據的分布有任何先驗假設
  • 通過對同類job titles的各種變體(多種spell、錯別字、同義詞、額外辭彙)的學習獲得了invariant,對不同類別的學習獲得了selectivity
  • 加入這些有先驗知識的變體(3種數據擴充手段)對於這個system的效果十分重要

改進:

  • 可以考慮對網路output的位置使用attention而不是直接對每個時刻的輸出求均值
  • 可以考慮採用triplet loss function替換餘弦相似度
  • 可以考慮CNN與RNN結合
  • 僅僅在job titles這個task上效果出眾,但是其他標準的文本similarity尚未驗證
  • 用於對比的baseline較弱
  • 負樣本的採樣方法需要改進,原本是直接在其他類中隨機採樣,例如負樣本可以是在距離較小的group之間採集,加大難度從而進行明確區分

推薦閱讀:

深度學習在自然語言處理中的應用(論文梳理)
Python3 環境下的 NLTK學習(第一章)
CRF 小結
016【NLP】word2vec新手項目
數據集大全:25個深度學習的開放數據集

TAG:自然語言處理 |