如何自動生成文字摘要
今天學習的是自動生成文字摘要。
當我們的身邊的資訊越來越多,資料越來越多,連結越來越多的時候,用一句簡單的話就能把最重要的資訊給表達出來,變得越來越重要。
有了這個技能,我們就可以讓機器為我們提取一篇文章的重要資訊,以後甚至是一本書的重要資訊。
這個技術最早是在氣象領域應用起來的,就是用一個固定的格式把預測出來的資料套入進去,後來在金融領域,醫療領域也得到廣泛的應用,這樣的工具可以很好的幫助從業人員節省一部分時間。
過去的方法是提取一個子集,而我們的大腦在對一篇文章進行總結的時候,利用的是抽象性思維,現在我們就可以用深度學習來模擬這個過程。
我們要用的資料是BBC新聞資料集。
pickle, 可以將python的物件轉化成character stream,我們可以很輕鬆的重建這個物件:
import cPickle as pickle FN0 = 'tokens' # this is the name of the data file which I assume you already havewith open('data/%s.pkl'%FN0, 'rb') as fp: heads, desc, keywords = pickle.load(fp) # keywords are not used in this project
返回的heads就是標題,desc就是相應的文章。
接著我們需要把整個文章變成一個一個的單詞,並且一個詞一個詞的生成總結。
from collections import Counterfrom itertools import chaindef get_vocab(lst): vocabcount = Counter(w for txt in lst for w in txt.split()) vocab = map(lambda x: x[0], sorted(vocabcount.items(), key=lambda x: -x[1])) return vocab, vocabcount
接著我們要用詞向量來表示每個單詞。
word2vec是一個用大量資料提前訓練好的模型,我們可以直接下載。
詞向量的每個維度可以表示一個性質,可以是性別或者是頭銜等,詞向量在每個維度的投影長度可以看作是這個單詞在這個性質上的相關度。
另一種演算法叫做GloVe,它屬於 count based的,
每一行代表一個單詞,每一列代表和這個單詞出現在同一語境中的頻數。
GloVe 比 word2vec 稍微快一點,
首先,將提前訓練好的 glove 詞向量下載到本地,然後用它們來初始化embedding matrix,我們先隨機初始化,然後把 training vocabulary 出現的所有單詞的 glove 權重複制一下。對於詞彙表以外的單詞,我們會找到離它最近的一個 glove 向量。
path = 'glove.6B.zip' path = get_file(path, origin="")
然後我們要用 seq2seq 模型,我們輸入一句話。
encoder,輸入就是 vocabulay 集,標籤就是相應的一句話標題,embeddings 會在訓練過程中不斷地最佳化,loss 是 cross entropy。
decoder,和encoder一樣的 lstm 結構,權重矩陣也是用同樣的提前訓練好的 glove embeddings,它用來生成 summary。
model = Sequential() model.add(Embedding(vocab_size, embedding_size, input_length=maxlen, W_regularizer=regularizer, dropout=p_emb, weights=[embedding], mask_zero=True, name='embedding_1'))for i in range(rnn_layers): lstm = LSTM(rnn_size, return_sequences=True, # batch_norm=batch_norm, W_regularizer=regularizer, U_regularizer=regularizer, b_regularizer=regularizer, dropout_W=p_W, dropout_U=p_U, name='lstm_%d'%(i+1) ) model.add(lstm) model.add(Dropout(p_dense,name='dropout_%d'%(i+1)))
這裡有一個很關鍵的點,就是我們需要記住這段文字中的哪些部分呢?關於記憶的話,我們會選擇用 ltm 模型來做,而在這個問題上另一個重要的理論就是 attention,它可以學到哪些資料是最相關的最需要記憶的。
decoder 會先生成一個單詞,然後把這個單詞投入到下一層中,就會生成下一個單詞,一直到生成一句標題。
我們在 decoder 這裡會應用 attention 機制,對於每一個輸出的單詞,會計算每個輸入單詞的權重,來決定應該在這個單詞上投入多少 attention。這些權重會被用來計算最後一個隱藏層的加權平均,然後投入到 softmax中。
可以看一下訓練效果:
X = "What have you been listening to this year ? If you want to find out using cold , hard evidence , then Spotify 's new Year in Music tool will tell you ."Y = "Spotify Will Make You Smarter for Your App" samples = gensamples(X, skips=2, batch_size=batch_size, k=10, temperature=1) HEADS: 12.9753409925 How To Make A ^
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2508/viewspace-2806006/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 文字自動摘要:基於TextRank的中文新聞摘要
- 當深度學習遇見自動文字摘要深度學習
- 無監督文字自動摘要野生技術
- 利用LSTM自動生成中文文字
- 文章太長不想看?ML 文字自動摘要了解一下
- 文字摘要簡述
- 實踐 | 如何使用深度學習為照片自動生成文字描述?深度學習
- 乾貨|當深度學習遇見自動文字摘要,seq2seq+attention深度學習
- 文字摘要論文列表
- 如何利用showdoc自動生成API文件API
- Python3自動生成MySQL資料字典的markdown文字PythonMySql
- 京東商城背後AI技術揭秘(一)——基於關鍵詞自動生成摘要AI
- 如何利用showdoc自動生成資料字典
- 利用 OpenAI 的文字生成模型,自動生成測試用例的幾個場景示例OpenAI模型
- 中文短文字摘要資料集
- 自動生成serialVersionUIDUI
- uuid自動生成UI
- Javascript 之《如何自動執行生成器》JavaScript
- 如何生成文字: 透過 Transformers 用不同的解碼方法生成文字ORM
- xorm自動生成modelORM
- 使用 Amazon SageMaker 構建文字摘要應用
- 自動生成介面文件coreapiAPI
- DRF 自動生成介面文件
- showdoc 自動生成 API 文件API
- 【譯】自動生成整型序列
- 訊飛有一個可以根據描述文字自動生成PPT的AI介面,有趣AI
- word怎麼自動生成目錄?Word自動生成目錄的方法教程
- 自動的自動化:EvoSuite 自動生成JUnit的測試用例UI
- 機器學習的文字摘要方法概述 - kdnuggets機器學習
- dotnet獨立打包 如何設定崩潰自動生成dump
- Nature 機器智慧綜述:AI如何自動生成遊戲AI遊戲
- 直播平臺開發,動態文字輸出,文字自動輸出
- CSS 如何根據背景色自動切換黑白文字?CSS
- 用 ai 自動生成 unit testAI
- 自動生成hashcode和equals方法
- chagpt自動生成PPT程式碼GPT
- springboot整合mybatis自動生成框架Spring BootMyBatis框架
- b站 自動生成的字幕