技術(shù)文章鏈接:https://mp.weixin.qq.com/s/aW5NaF6-SqJXpkO687XdAw
發(fā)表于微信公眾號(hào):360搜索實(shí)驗(yàn)室
以下是對(duì)360搜索實(shí)驗(yàn)室發(fā)表的這篇技術(shù)文章的閱讀筆記。
背景
搜索引擎對(duì)關(guān)鍵詞形式的query返回結(jié)果好漾根,而對(duì)一般自然語(yǔ)言形式的query返回結(jié)果差到踏。需要將一般自然語(yǔ)言形式的query轉(zhuǎn)化成關(guān)鍵詞形式的query,其實(shí)是從一句話中提取關(guān)鍵詞昵济。
關(guān)鍵詞提取
抽取方式
- 分詞
- 計(jì)算詞語(yǔ)的重要程度智绸,計(jì)算方式有基于tf-idf和基于TextRank的
- 按照詞語(yǔ)的重要程度排序,挑選top n個(gè)詞語(yǔ)作為關(guān)鍵詞
基于tf-idf
tf:詞頻
idf:詞的區(qū)分能力
tfidf:詞的重要性访忿,tfidf高瞧栗,則選為關(guān)鍵詞。按照tf*idf排序海铆,挑選top n個(gè)詞語(yǔ)作為關(guān)鍵詞迹恐。
基于TextRank
借鑒PageRank
在k長(zhǎng)度窗口中詞的相鄰關(guān)系來(lái)得到PageRank的鏈接指向關(guān)系。所以如果一個(gè)詞V_i在這個(gè)k長(zhǎng)度窗口中只出現(xiàn)一次游添,則只有一個(gè)詞(w的前一個(gè)詞)指向V_i系草,它也只指向一個(gè)詞(V_i的后一個(gè)詞)。但是如果V_i在這個(gè)k長(zhǎng)度窗口出現(xiàn)多次唆涝,或者V_i在其他的k長(zhǎng)度窗口也出現(xiàn)了找都,則會(huì)有多個(gè)詞指向V_i,V_i也會(huì)指向多個(gè)詞廊酣。
迭代公式如下:
WS(V_j)表示詞V_j的重要性能耻;d是阻尼系數(shù),決定TextRank算法一次能影響多少亡驰;In(V_i)是指向該詞V_i的集合晓猛;Out(V_j)該詞V_j指向的詞的集合;w_ji表示詞V_j指向詞V_i的鏈接的權(quán)重凡辱。公式的計(jì)算結(jié)果得到WS(V_i)詞V_i的重要性戒职。
TextRank不斷迭代下去,每個(gè)詞V_i的重要性WS(V_i)會(huì)收斂透乾,趨于一個(gè)穩(wěn)定值洪燥,即得到詞V_i最終的重要性。
WS(V_i)高乳乌,則選為關(guān)鍵詞捧韵。按照WS(V_i)排序,挑選top n個(gè)詞語(yǔ)作為關(guān)鍵詞汉操。
生成方式
- 理解用戶原始query
- 生成與用戶原始query意思一致的關(guān)鍵詞
利用深度學(xué)習(xí)文本生成技術(shù)來(lái)進(jìn)行關(guān)鍵詞抽取
seq2seq結(jié)構(gòu)
seq2seq結(jié)構(gòu)包括:
(1)encoder:將可變長(zhǎng)度的序列的信息(以<EOL>作為輸入序列的結(jié)束標(biāo)志)存放在一個(gè)固定長(zhǎng)度的向量里
(2)decoder:將encoder得到的固定長(zhǎng)度向量的信息解碼成可變長(zhǎng)度的序列(以<EOL>作為輸出序列的結(jié)束標(biāo)志)
nmt機(jī)器翻譯模型就是采用了這種seq2seq結(jié)構(gòu)再来。
seq2seq結(jié)構(gòu)的局限性
編碼和解碼之間的聯(lián)系只有一個(gè)固定長(zhǎng)度的向量。encoder要將整個(gè)序列的信息都?jí)嚎s到一個(gè)固定長(zhǎng)度的向量磷瘤,很有可能整個(gè)序列的信息無(wú)法都?jí)嚎s到這個(gè)向量里芒篷,而且即使是LSTM做為encoder搜变,仍然無(wú)法記住很久之前的信息,這個(gè)固定長(zhǎng)度的向量只能保留少部分先輸入的信息梭伐。
seq2seq結(jié)構(gòu)的改進(jìn):attention based seq2seq
attention其實(shí)是個(gè)矩陣痹雅,表示輸出時(shí)需要重點(diǎn)關(guān)注輸入的哪些部分。
attention based seq2seq結(jié)構(gòu)如下:
attention矩陣計(jì)算公式為:
e_ij評(píng)估了第j個(gè)輸入h_j與第i個(gè)輸出s_{i-1}的match程度糊识;a_ij相關(guān)于是e_ij的歸一化結(jié)果绩社,其實(shí)就是e_ij的softmax值,得到0-1的值a_ij赂苗,a_ij仍然是衡量第j個(gè)輸入h_j與第i個(gè)輸出s_{i-1}的match程度愉耙。
attention based seq2seq運(yùn)用到機(jī)器翻譯任務(wù)時(shí),attention也被稱為對(duì)齊模型拌滋,比如“今天天氣真好”翻譯完“今天”之后朴沿, 注意力就會(huì)在“天氣”上,考慮應(yīng)該將“天氣”翻譯成什么詞败砂。相當(dāng)于將當(dāng)前翻譯的詞與新生成的詞進(jìn)行對(duì)齊赌渣。
attention based seq2seq廣泛應(yīng)用于機(jī)器翻譯,文本摘要和智能問(wèn)答等任務(wù)昌犹,但對(duì)于文本摘要坚芜,關(guān)鍵詞提取等任務(wù),其decoder部分仍然有很大的提升空間斜姥。
attention based seq2seq問(wèn)題
問(wèn)題一:
OOV(Out of Vocabulary)問(wèn)題
decoder產(chǎn)生的詞只能是來(lái)自 訓(xùn)練數(shù)據(jù)分詞得到的詞匯表鸿竖。測(cè)試時(shí)铸敏,測(cè)試集target句子中的詞有可能沒(méi)有在訓(xùn)練數(shù)據(jù)中出現(xiàn)缚忧,則decoder無(wú)法生成這些詞;測(cè)試集source句子中的詞有可能沒(méi)有在訓(xùn)練數(shù)據(jù)中出現(xiàn)杈笔,則encoder不認(rèn)識(shí)這些詞,無(wú)法對(duì)這些詞進(jìn)行編碼融师,會(huì)直接將其認(rèn)為是unknown “<unk>”,而直接輸出到target預(yù)測(cè)結(jié)果中,并保持在source中的位置房待。
問(wèn)題一的解決方法:pointer network
利用attention矩陣的softmax分布作為pointer指針敏簿,指針指向的輸入中的詞作為輸出绣硝,實(shí)際上是平衡了“抽取”(指針直接指向重要的詞)和“生成”兩種方式的優(yōu)點(diǎn)败许。
問(wèn)題二:
decoder過(guò)度依賴其輸入醋寝,也就是先前的總結(jié)詞嗅绰,會(huì)導(dǎo)致一個(gè)詞的出現(xiàn)觸發(fā)無(wú)盡的重復(fù)财边。
問(wèn)題二的解決方法:采用coverage機(jī)制
對(duì)前期注意力覆蓋的詞進(jìn)行懲罰慧库,防止用過(guò)的詞再被使用莺债。
綜合兩種解決方法:Pointer-Generator Network
將輸入中詞的概率和詞表中詞的概率做一個(gè)加權(quán)和
當(dāng)詞語(yǔ)不在詞表中,則利用輸入中的attention分值進(jìn)行選取术健。能有效解決OOV問(wèn)題比被。
對(duì)于重復(fù)問(wèn)題,維護(hù)一個(gè)coverage向量泼舱,記錄之前所有attention和
在loss里加入這一項(xiàng),這樣可以對(duì)之前考慮過(guò)的詞進(jìn)行懲罰枷莉,防止重復(fù)娇昙。
結(jié)果對(duì)比
生成方式的訓(xùn)練數(shù)據(jù):qt對(duì),query和點(diǎn)擊的URL的title笤妙。將title作為輸入冒掌,query作為輸出。
結(jié)論
生成方式要好于抽取方式