隨著人工智能的快速興起,Google發布的深度學習框架TensorFlow在短短兩年內,就成為了當前最流行的深度學習項目。
在圖像處理、音頻處理、自然語言處理和保舉系統等場景中,TensorFlow都有著豐富的應用。雖然開源沒多久,但是TensorFlow正在悄然滲透到我們的工作生活傍邊。
研究配景:
某新聞企業通過接入極光智能保舉系統,在其APP端增加智能保舉模塊,為其用戶私人訂制感興趣的新聞。極光機器學習云能夠快速、精準的提取每條新聞的主題,并對新聞進行主題分類,借助極光自有的用戶標簽,向用戶實時的保舉個性化新聞。
通過TensorFlow深度學習框架,,在自然語言處理標的目的,極光已經通過機器學習算法實現了文章標題、摘要和關鍵詞的自動生成功能。
研究方案:
文本自動總結的模型一直都是深度學習中的研究熱點。有一些諸如 TFIDF和TextRank之類常規算法,其基來源根基理是直接抽取文本中重要的句子。也有一些較為復雜的算法如重新生成新的句子,但效果欠安。目前常用的模型是seq2seq,它是基于Encoder-Decoder的一個結構,首先將原始文本中的句子encode成一個固定大小的向量,然后通過decoder部分一個字符一個字符生成目標句子。
TensorFlow,也就是Tensor和Flow,這就意味著Tensor和Flow是TensorFlow的基礎要素。Tensor意味著數據,Flow意味著流動、計算和映射,這也表現出數據是有向的流動、計算和映射。TensorFlow的結構由會話(session),圖(graph),節點(operation)和邊(tensor)組成,它使用圖(graph)來體現計算任務,圖在被稱之為會話(Session)的上下文(context)中執行,其狀態是通過變量(Variable)來維護的,使用feed和fetch可以為任意的操作(arbitrary operation)賦值或者從其中獲取數據。
這篇文章中我們將采用基于Tensorflow的Seq2seq+Attention模型,訓練一個新聞標題自動生成模型。 加入Attention注意力分配機制,是為了使Decoder在生成新的目標句子時,可以得到前面Encoder編碼階段每個字符隱藏層的信息向量,提高生成目標序列的準確度。
數據處理:
樣本數據為該企業新聞客戶端 2016 年 11 月份的新聞,超過10M的語料數據,包羅新聞標題和新聞正文信息。由于在Encoder編碼階段處理的信息會直接影響到整個模型的效果,所以對新聞數據的預處理工作需要非常細致。對新聞中的特殊字符、日期、英文、數字以及鏈接都要進行替換處理。
文本預處理后,就是訓練樣本的準備工作。這里的Source序列,就是新聞的正文內容,待預測的Target目標序列是新聞標題。為了保證效果,正文部分不能過長,這里設定分詞后的正文不超過 100 個詞,不足用PAD字符補齊,設定標題不超過 20 個詞。在生成訓練樣本的時候,定義了create_vocabulary()方法來創建詞典,data_to_id()方法把訓練樣本(train_data.txt)轉化為對應的詞ID。
訓練樣本的數據格式如下:

算法解析:
Seq2Seq是一個基于輸入的sequence,預測一個未知sequence的模型。模型由Encoder編碼階段和Decoder解碼階段兩部分構成。模型編碼階段Encoder的RNN每次會輸入一個字符代表的向量,將輸入序列編碼成一個固定長度的向量;解碼階段的RNN會一個一個字符地解碼,如預測為X。在訓練階段時會強制將上一步解碼的輸出作為下一步解碼的輸入,即X會作為下一步預測Y時的輸入。
當編碼階段輸入的序列過長時,解碼階段LSTM模型將無法針對最早的輸入序列解碼。Attention注意力分配機制,在解碼階段每一步解碼時,都會有一個輸入,對輸入序列所有隱含層的信息進行加權求和,能夠很好的解決這個問題。
將分詞后的新聞文本數據拆分為訓練樣本和測試樣本,共四個文件:train_data.txt,train_title.txt,test_data.txt,test_title.txt 。新聞正文內容和其對應的新聞標題需要分開存放在兩個文件內,一行為一條新聞樣本。
實證效果:
運行腳本,訓練好的模型將被生存下來,部分預測好的Text Summarizaion如下:

總結:
隨著互聯網的迅速發展,網絡中的新聞資源呈指數級增長,通過深度學習自動生成的標題往往能很直不雅觀的表現新聞的主題內容,便于讀者快速的瀏覽新聞,準確選擇本身感興趣的內容,節約時間成本,能夠給讀者帶來很好的體驗感。