先把論文放出來:Enhanced LSTM for Natural Language Inference,說實(shí)話這篇論文不算新了,但是在語義相似度方至今仍流傳著他的傳說,因此我還是把這篇論文拿著讀了起來。近期也是看了很多文章,但是終究不如讀論文來的過癮,大部分博客對這篇論文的模型核心做了很多介紹,但各個(gè)操作的出發(fā)點(diǎn)和一些獨(dú)到的見解卻寫的不多,這次我會在介紹ESIM的過程中討論一下。
當(dāng)然,還是建議大家好好品讀原論文,更有味道。
另外給點(diǎn)代碼,看論文不清楚的看看論文也挺好:
https://blog.csdn.net/wcy23580/article/details/84990923。
https://github.com/weekcup/ESIM。
有關(guān)語義匹配和推理
一般地,向量召回主要用的表征模型,但是表征模型沒有用到交互特征,因此匹配的準(zhǔn)確率上肯定比不過交互模型,所以一般工程上用表征模型召回,然后用交互模型來做精排,這樣能保證整個(gè)搜索系統(tǒng)的效果更加穩(wěn)定可靠(看到?jīng)],準(zhǔn)召分離的思路又來了),而交互模型這塊,比較可靠的基線,應(yīng)該就要數(shù)ESIM了。
ESIM里,我比較欣賞的是這幾點(diǎn):
LSTM抽取上下文信息。Tree-LSTM的嘗試也為信息抽取帶來啟發(fā)。
把Decomposable attention作為交互特征的思路有機(jī)組合起來了。
多種交互形式的特征concat起來。
當(dāng)然具體閱讀后,我還提煉了一些新的idea,在文末。有了這些思路,先讓我們來看看具體的模型,其實(shí)論文的行文里討論了很多思路,我們先來看整體論文思路,然后再來提煉里面的獨(dú)到之處。
模型整體
論文的模型其實(shí)沒有想象中的困難,在很早就把整篇論文給到了:
輸入層是embedding+LSTM的組合。
Local Inference Modeling層,用的Decomposable Attention來體現(xiàn)兩者的交互型。
Inference composition層則把上面一層的結(jié)果進(jìn)行多種組合計(jì)算,得到多種特征,說白了就是比較。
輸出層就不多說了,大家都懂的。
輸入層
一般的輸入層只會是簡單的word2vector,但這里其實(shí)加了一個(gè)LSTM,還是雙向的,就是用來獲取各路信息。來看看代碼,這個(gè)還是比較清晰的:
i1=Input(shape=(SentenceLen,),dtype='float32') i2=Input(shape=(SentenceLen,),dtype='float32') x1=Embedding([CONFIG])(i1) x2=Embedding([CONFIG])(i2) x1=Bidirectional(LSTM(300,return_sequences=True))(x1) x2=Bidirectional(LSTM(300,return_sequences=True))(x2)
Local Inference Modeling
中文翻譯應(yīng)該是局部推理層,我的理解這一層是用于抽取局部信息的,作者用的方法應(yīng)該來源于這篇論文:A Decomposable Attention Model for Natural Language Inference,這里其實(shí)是一個(gè)計(jì)算交互特征的過程,即一一分析兩個(gè)句子之間每個(gè)位置的相似度,最簡單的方式就是點(diǎn)乘,而這篇論文就是使用的這個(gè)最簡單的方式:
然后再把權(quán)重分散到各個(gè)位置,其實(shí)形態(tài)就很像softmax了:
這個(gè)其實(shí)就是做了一個(gè)交叉,計(jì)算整個(gè)句子的權(quán)重,然后用類似softmax的形式整上,非常討巧,相信ESIM的成功很大程度上就和這個(gè)有關(guān)。
而這并沒結(jié)束,作者進(jìn)行了進(jìn)一步的強(qiáng)化,對比Decomposable Attention前后的變化,進(jìn)行了組合。
Inference Composition
推理層應(yīng)該是進(jìn)入最終預(yù)測之前的最后一層了。這一層的操作同樣沒那么簡單,大部分人可能flatten、maxpool、avgpool之類的就直接全連接了,但是這里并不是,而是做了一系列的再提取和再處理,最終才完成預(yù)測向量的:
作者是真的把信息抽取和特征的組合做到了極致,對上面構(gòu)造的兩個(gè)組合特征再進(jìn)行了一次特征提取,用的依舊是熟悉的Bilstm,值得注意的是他操作的維度,來看一個(gè)ESIM的開源代碼吧:
classInferenceCompositionLayer(object): """ Layertocomposethelocalinferenceinformation. """ def__init__(self,hidden_units,max_length=100,dropout=0.5, activation='tanh',sequences=True): self.hidden_units=hidden_units self.max_length=max_length self.dropout=dropout self.activation=activation self.sequences=sequences def__call__(self,input): composition=Bidirectional(LSTM(self.hidden_units, activation=self.activation, return_sequences=self.sequences, recurrent_dropout=self.dropout, dropout=self.dropout))(input) reduction=TimeDistributed(Dense(self.hidden_units, kernel_initializer='he_normal', activation='relu'))(composition) returnDropout(self.dropout)(reduction)
這里用到另一個(gè)我沒見過的keras層,即TimeDistributed,有興趣可以了解下。
此后,非常精髓的使用avg-pool和max-pool的組合,有關(guān)池化,max和avg一直打得火熱,沒有人能給出非常穩(wěn)定的結(jié)論,因此作者就用了兩者的組合:
啟示
整篇文章其實(shí)沒有構(gòu)造出非常高端的結(jié)構(gòu),只是一些非常樸素的操作,但是綜合起來成了現(xiàn)在也非常推薦用的基線,是有很多有借鑒意義的東西的,我這里一一列舉,大家可以直接在里面選擇需要的來用。
BiLSTM似乎還挺好用的。當(dāng)然私以為CNN其實(shí)也可以嘗試的。
花式concat,多種信息抽取方式進(jìn)行組合,小孩子才做選擇,大人全都要。
attention的使用,其實(shí)有出處A Decomposable Attention Model for Natural Language Inference,思想其實(shí)是兩者一一對比得到交互矩陣,利用該交互矩陣構(gòu)造類似softmax的權(quán)重,為各自的關(guān)鍵信息進(jìn)行加權(quán),重點(diǎn)提取。
信息的對比來自于可以來自減和乘,減直接計(jì)算兩者的差距,類似歐氏距離,乘的使用則來源于余弦距離,既然要對比特征,那就把這兩個(gè)用到極致。
avg和max哪個(gè)好,別爭了,都用,哪個(gè)比較重要交給后面的全連接層來決定吧。
我的這篇文章里面沒有講tree-lstm,主要是因?yàn)槲覀兤綍r(shí)比較難用到,原因是這個(gè)樹不好構(gòu)建,需要依賴依存句法,但是的確是一個(gè)挺有意思的思想,只有真的去讀論文的人才能知道。
論文原文:Enhanced LSTM for Natural Language Inference
論文解讀:https://blog.csdn.net/wcy23580/article/details/84990923
keras版本代碼:https://github.com/weekcup/ESIM/blob/master/src/model.py
依舊推薦大家直接去讀論文,文章對他為什么做這些操作有很明確的思想,其實(shí)在我看來這些思想比操作本身還要重要,畢竟思想是需要啟發(fā)的,在這些思想的指導(dǎo)下,我在思考解決方案的時(shí)候就能有參考,方案可以借鑒,但是這個(gè)思想的實(shí)現(xiàn)并不局限在一個(gè)方法上。
責(zé)任編輯:lq
-
模型
+關(guān)注
關(guān)注
1文章
3073瀏覽量
48582 -
代碼
+關(guān)注
關(guān)注
30文章
4700瀏覽量
68105 -
eSIM
+關(guān)注
關(guān)注
3文章
240瀏覽量
26572
原文標(biāo)題:【語義相似度】ESIM:語義相似度領(lǐng)域小模型的尊嚴(yán)
文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論