微博關鍵詞抽取:借力評論信息

微博關鍵詞抽取:借力評論信息

來自專欄 RUC智能情報站19 人贊了文章

前言:今天分享的論文《Encoding Conversation Context for Neural Keyphrase Extraction from Microblog Posts》,來自騰訊AI Lab,發表在NAACL 2018上面。

原文鏈接:《Encoding Conversation Context for Neural Keyphrase Extraction from Microblog Posts》

本文作者:張恆,2017級研究生,目前研究方向為深度學習,推薦系統,自然語言處理。來自中國人民大學大數據管理與分析方法研究北京市重點實驗室。

備註:本文首發於知乎[RUC智能情報站],如需轉載請告知作者並註明本專欄文章地址

一、引言:傳統的關鍵詞抽取方法用於如微博博文這種短小,用語不夠正式的文本時效果不盡如人意。一般微博評論中會包含關鍵詞等和微博主題相關的線索,所以作者考慮如果可以更好地利用微博評論文本中的信息,就能提升微博關鍵詞抽取的效果。本文作者提出了一種神經網路編碼模型,將評論文本的信息編碼到關鍵詞抽取網路中,以sequence labeling的方式進行關鍵詞預測。文中使用了四種類型的網路來編碼評論信息:Embedding Average,RNN,Attention,Memory network。在微博和Twitter數據集中,均達到了state-of-art的效果。

二、問題背景:隨著微博數量爆炸式的增長,關鍵詞抽取技術越來越重要。截止到現在,許多關鍵詞抽取的方法都把微博看作句子或者文檔等元素的集合,然後利用排序學習(learning to rank)或者序列標註模型。直接將這類方法應用在微博上,會導致很嚴重的數據稀疏問題。下邊是一個評論中包含微博文本關鍵詞的例子,在評論中可能會出現微博中的關鍵詞和短語等,如「Duterte」「head of state」等。

舉個栗子

三、解決思路:本文的主要貢獻是使用了不同的神經網路架構編碼評論文本,作為一個上下文信息,融合到序列標註的關鍵詞抽取架構中去。模型的想法簡單明了,值得借鑒,關鍵在於找到什麼樣的上下文信息以及如何編碼上下文信息。

模型架構:本模型主要由兩部分構成,一個用於抽取關鍵詞的序列標註網路(Keyphrase Tagger)和一個用來編碼評論信息的編碼網路(conversation context encoder),整個的模型架構如下圖:

模型結構

關鍵詞抽取網路:文中的抽取網路是將關鍵詞抽取作為一個序列標註任務,給一個微博博文 x_{i} ,它被表示成一個詞序列 <x_{i,1},x_{i,2},...,x_{i,|x_{i}|}> ,我們要為每一個詞輸出一個標籤 y_{i,t} ,代表 x_{i} 是否是關鍵短語一部分。 y_{i} 總共有五個類別,如下表所示:

五種標籤

除了在輸出端輸出5種label,作者還提出一種多任務學習(multitask learning)的方法,輸出端另外預測一個binary的label,即當前詞是否是關鍵詞的一部分。將兩處輸出的loss累加起來計算最終的loss。

Context編碼網路:把所有的評論文本組合成一個文件輸入給編碼器,文中使用了四種編碼沒網路:直接對詞向量做加和,RNN,attention,Memory network。

Averaged Embedding:一種最簡單直接的辦法就是把輸入的上下文詞向量累加求平均 e^{c}_{i}=frac{1}{|x^c_{i}|}sum_{s=1}^{|x^c_{i}|}{v^{c}_{i,s}} ,其中, |x^{c}_{i}| 是評論文本的長度, v^{c}_{i,s}x_{i,s}對應的詞向量,e^{c}_{i} 就是我們想要得到的上下文向量

RNN:使用RNN,對於輸入的詞向量序列 <x_{i,1},x_{i,2},...,x_{i,|x_{i}|}> ,得到每一個時刻的隱藏狀態 h^{c}_{i,s} :

h^{c}_{i,s}=delta_{h}(W^{1}_{h}h^{c}_{i,s-1}+W^{2}_{h}v^{c}_{i,s})

Attention:注意力機制結合RNN網路的方法,可以看作一種對RNN的隱藏狀態 h^{c}_{i,s} 進行加權求和的過程,可以突出評論文本中關鍵詞的影響。如圖所實例:

注意力機制示意圖

注意力機制有很多種計算方式,本文使用的是前向注意力(feed-forward attention),其計算方式如下:

e^{c}_{i}=sum_{s=1}^{|x^{c}_{i}|}{alpha^{c}_{i,s}h^{c}_{i}}

alpha^{c}_{i}=softmax(atten(h^{c}_{i,s}))

atten(h^{c}_{i,s})=tanh(W_{a}h^{c}_{i,s})

記憶網路(Memory Network):使用一個記憶模塊來存儲和更新上下文的表示,如下圖所示:

記憶網路示意圖

具體做法是將輸入的上下文序列 V^{c}_{i}=<v^{c}_{i,1},v^{c}_{i,2},...,v^{c}_{i,|x^{c}_{i}|}> 存儲在一個記憶模塊 M_{i} 裡面。然後與微博正文的輸入 V_{i}=<v_{i,1},v_{i,2},...,v_{i,|x^{c}_{i}|}> 計算一個matching得分: P_{i}=softmax(V_{i} cdot M_{i}) 這個matching得分矩陣代表上下文的每一個詞與微博原文的每一個詞之間的相似度關係。此外,還引入了一個矩陣 C_{i}=<mu_{i,1},mu_{i,2},...,mu_{i,|x^c_{i}|}> ,最終的上下文向量是由C和P相加得到的: e^c_{i}=P_{i}+C_{i}

和注意力機制相似,記憶網路也可以編碼上下文中與微博正文內容相似的詞的信息,在預測每一個正文詞的label的時候有很大的幫助。

四、實驗與分析:

數據集:本文使用的微博與Twitter數據集的統計信息如下表所示:

數據集詳情

實驗結果:本文作者使用不同的編碼網路以及在輸出端輸出多種標記,做了詳盡的實驗,飾演的測試指標是F1-score

實驗結果分析:

  1. 評論文本對微博關鍵詞抽取任務是有效的,可以看出絕大部關鍵詞抽取模型在加上評論文本之後都有效果的提升
  2. 選擇合適的編碼網路是很有必要的。實驗結果顯示context 編碼器使用RNN和GRU的效果不佳。其中GRU結果比較差的原因是遺忘門在訓練集比較小的時候沒有很好被訓練(emmm原文作者就是這麼說的)
  3. 使用attention或者記憶網路使得有突出作用的詞凸顯出來,對關鍵詞抽取結果有幫助。
  4. Memory Network可是個好東西,可以使比較salient 的片語更好地被捕捉到。

細心的作者想到了一個問題,就是並不是每條微博底下都有一堆fans跟著評論,對於不是大V的本人,每次發一個微博回復者寥寥無幾,是否在訓練的時候使用了評論文本訓練得到的模型,在測試的時候即使沒有評論文本,效果也會有提升呢?於是作者又做了一組對比實驗,結果如下表

從實驗結果上看呢,儘管測試的時候輸入端沒有使用評論文本,但是使用評論文本訓練的結果仍然比不使用評論文本來訓練的結果好。(體會一下這組實驗的目的)

定性分析:除了以上的實驗結果,作者還是用熱力圖來展示了一下,為什麼Memory Network對於關鍵詞抽取任務是有效的。很顯然,記憶網路可以重點標識出「Obama」和「president」這兩個詞十分相關。

記憶網路熱力圖

記憶網路的熱力圖記憶

五、總結:本文行文流暢,實驗充實,模型十分簡單明了,idea也很直接,利用評論中與微博原文中詞的相關性,在評論中出現多次的詞很有可能和微博關鍵詞有很密切的關係。這種風格十分值得閱讀學習。其實任何與源文本相關的額外的信息都可以被當作context編碼進關鍵詞抽取的網路中來,其對於attention,memory network的運用也是亮點。

推薦閱讀:

one-hot編碼
2017 CCF ADL會議總結
Python學習筆記--1
【應用】運用Re-Encryption技術對你的IPFS網路數據進行多重保護
業界 | 數據科學大Battle,你站Python還是R

TAG:微博 | 數據挖掘 |