自動摘要生成(一):最大邊界相關算法(MMR)

分享一下前一段時間公司需要做的文章自動摘要。

一.摘要方法

目前來說,文章摘要自動生成主要分爲兩種方法:生成式和抽取式。

生成式採用sequence2sequence+Attention的模型,採用Encoder-Decoder的結構,具體方法可以閱讀這篇論文:https://arxiv.org/pdf/1509.00685.pdf

抽取式則是通過關鍵詞篩選等方法,從原文中截取句子組成摘要,目前的方法有MMR,TextRank,LDA等。

 

起初嘗試了生成式摘要,使用文章的標題作爲樣本標籤,對模型進行訓練,但是效果不是很好,生成的摘要中包含了標題中的關鍵字,但是無法組成正確的語序。所以最終決定採用抽取式來生成新聞摘要。

後續兩種方法在這裏:

自動摘要生成(二):由PageRank轉變而來的TextRank算法

自動摘要生成(三):詞向量相似度與有效詞含量

二.具體算法

經過測試後,決定採用MMR,TextRank,文章標題相似度,TextRank+Embedding,全文詞向量疊加Embedding相似度,這幾種方法的加權組合,篩選出新聞的摘要。

本篇重點講解MMR算法的理論和實現。

MMR

1.MMR原理

MMR是Maximal Marginal Releuance的縮寫,中文爲最大邊界相關算法或最大邊緣相關算法。

設計之初是用來計算Query語句與被搜索文檔之間的相似度,從而對文檔進行rank排序的算法。

公式在這:

當我們將MMR用於新聞摘要提取時,可以將Query看做是整篇文檔,對公式稍作修改,變成下面這個樣子:

Sim(Q,di)變爲了score(i),表示文章第i句的得分,得分即本句話與整個文章的相似度。中括號內第二項爲當前句子i與已經成爲候選摘要的句子j的相似度。lambda爲需要調整的參數。

此處就很好的體現出了MMR算法的特點,就是注重抽取摘要內容的多樣性,通過減去中括號內第二項,最小化選取摘要句子之間的相似性,使得生成的摘要多樣化。

當然我們可以通過調節lambda參數來控制文章摘要的多樣性:

----high lambda:Higher accuracy

---low lambda:Higher diversity

 

2.MMR實現

下面截取部分代碼來說說MMR是怎麼實現的。

首先是第一項score的計算

def calculateSimilarity(sentence, doc):  # 根據句子和句子,句子和文檔的餘弦相似度
    if doc == []:
        return 0
    vocab = {}
    for word in sentence.split():
        vocab[word] = 0  # 生成所在句子的單詞字典,值爲0

    docInOneSentence = ''
    for t in doc:
        docInOneSentence += (t + ' ')  # 所有剩餘句子合併
        for word in t.split():
            vocab[word] = 0  # 所有剩餘句子的單詞字典,值爲0

    cv = CountVectorizer(vocabulary=vocab.keys())

    docVector = cv.fit_transform([docInOneSentence])
    sentenceVector = cv.fit_transform([sentence])
    return cosine_similarity(docVector, sentenceVector)[0][0]

score是表示當前句子和文檔的相似度,這裏使用了sklearn的詞頻統計模塊,首先建立詞表,然後根據詞表,將句子和文章轉換成one-hot形式的稀疏向量,再用sklearn自帶的cosine_similarity模塊計算他們的語義似度。

關於語義相似度計算可以看我之前寫過的這篇文章https://blog.csdn.net/zjrn1027/article/details/80170966

同時Tips一下,使用gensim也可以完成如上的任務,具體可以參照gensim的官方文檔看看。

 

下面是摘要生成的過程

n = 3
alpha = 0.9
summarySet = []
while n > 0:
    mmr = {}
    # kurangkan dengan set summary
    for sentence in scores.keys():
        if not sentence in summarySet:
            mmr[sentence] = alpha * scores[sentence] - (1 - alpha) * calculateSimilarity(sentence, summarySet)  # 公式
    selected = max(mmr.items(), key=operator.itemgetter(1))[0]
    summarySet.append(selected)
    #	print (summarySet)
    n -= 1

這裏需要設置兩個參數,n是抽取生成摘要的句子數量,alpha及公式中的lambda值,用於控制生成摘要的多樣性。

依次計算所有句子的MMR值,最後選取MMR最大的三個值作爲摘要輸出。

這裏有一點需要注意,第一次while時,由於還沒有選取句子作爲摘要,summarySet爲空,所以第一句摘要的生成是從文章中選一條與整篇文章相似度最高的詞作爲摘要存入summarySet。

 

效果

我們輸入兩篇不同類型的文章來看看效果。

NEW1:

title:

20年來首次!四千噸級重載貨車壓橋抵禦洪峯,寶成鐵路大橋已平安。

context:

7月11日,連續強降雨,讓四川登上了中央氣象臺“頭條”,涪江綿陽段水位迅速上漲,洪水一度漫過了寶成鐵路涪江大橋橋墩基座,超過封鎖水位。洪水在即,中國鐵路成都局集團公司緊急調集兩列重載貨物列車,一前一後開上涪江大橋,每一列貨車重量約四千噸,用“重車壓梁”的方式,增強橋樑自重,抵禦洶湧的洪水。從11日凌晨開始,四川境內成都、綿陽、廣元等地連續強降雨,而四川北向出川大動脈—寶成鐵路,便主要途徑成綿廣這一區域。連續的強降雨天氣下,綿陽市境內的涪江水位迅速上漲,一度危及到了寶成鐵路涪江大橋的安全,上午10時,水位已經超過了涪江大橋上、下行大橋的封鎖水位。記者從中國鐵路成都局集團公司綿陽工務段瞭解到,上行線涪江大橋,全長393米,建成於1953年;下行線涪江大橋,全長438米,建成於1995年。“涪江大橋上游有一個水電站,由於洪水太大,水電站已無法發揮調節水位的作用。”情況緊急,鐵路部門決定採用“重車壓梁”的方式,增強橋樑自重,提高洪峯對橋墩沖刷時的梁體穩定性。簡單來說,就是將重量大的貨物列車開上涪江大橋,用貨車的自重,幫助橋樑抵禦洶湧的洪水。恰好,綿陽工務段近期正在進行線路大修,鐵路專用的卸砟車,正好停放在綿陽附近。迎着洶湧的洪水,兩列重載貨車駛向寶成鐵路涪江大橋。上午10時30分,第一列46052次貨車,從綿陽北站開出進入上行涪江橋。上午11時15分,第二列22001次貨車,從皁角鋪站進入下行涪江橋。這是兩列超過45節編組的重載貨物列車,業內稱鐵路專用卸砟車,俗稱“老K車”,車廂裏裝載的均爲鐵路道砟,每輛車的砟石的重量在70噸左右。記者從綿陽工務段瞭解到,貨車裏滿載的砟石、加上一列貨車的自重,兩列“壓橋”的貨運列車,每一列的重量超過四千噸。“採用重車壓梁的方式來應對水害,在平時的搶險中很少用到。”據瞭解,在綿陽工務段,上一次採用重車壓梁,至少已經是二十年前的事。下午4時許,經鐵路部門觀測,洪峯過後,涪江水位開始下降,目前已經低於橋樑封鎖水位。從下午4點37分開始,兩列火車開始撤離涪江大橋。在橋上停留約6個小時後,兩列重載貨物列車成功完成了“保橋任務”,寶成鐵路涪江大橋平安了!

abstract:

7月11日,連續強降雨,讓四川登上了中央氣象臺“頭條”,涪江綿陽段水位迅速上漲,洪水一度漫過了寶成鐵路涪江大橋橋墩基座,超過封鎖水位

連續的強降雨天氣下,綿陽市境內的涪江水位迅速上漲,一度危及到了寶成鐵路涪江大橋的安全,上午10時,水位已經超過了涪江大橋上、下行大橋的封鎖水位

洪水在即,中國鐵路成都局集團公司緊急調集兩列重載貨物列車,一前一後開上涪江大橋,每一列貨車重量約四千噸,用“重車壓梁”的方式,增強橋樑自重,抵禦洶湧的洪水

 

NEW2:

title:

姆巴佩奪冠後表忠心:留在巴黎 哪兒也不去!

context:

伴隨着世界盃的落幕,俱樂部聯賽籌備工作又成爲主流,轉會市場必然也會在世界盃的帶動下風起雲湧,不過對於在本屆賽事上大放異彩的姆巴佩而言,大巴黎可以喫一顆定心丸,世界盃最佳新秀已經親自表態:留在巴黎哪裏也不去。在接受外媒採訪時,姆巴佩表達了繼續爲巴黎效忠的決心。“我會留在巴黎,和他們一起繼續我的路途,我的職業生涯不過剛剛開始”,姆巴佩說道。事實上,在巴黎這座俱樂部,充滿了內部的你爭我奪。上賽季,卡瓦尼和內馬爾因爲點球事件引發軒然大波,而內馬爾聯合阿爾維斯給姆巴佩起“忍者神龜”的綽號也讓法國金童十分不爽,爲此,姆巴佩的母親還站出來替兒子解圍。而早在二月份,一場與圖盧茲的比賽,內馬爾也因爲傳球問題賽後和姆巴佩產生口角。由此可見,巴黎內部雖然大牌雲集,但是氣氛並不和睦。內馬爾離開球隊的心思早就由來已久,而姆巴佩也常常與其它俱樂部聯繫在一起,在躲避過歐足聯財政公平法案之後,巴黎正在爲全力留下二人而不遺餘力。好在姆巴佩已經下定決心,這對巴黎高層而言,也算是任務完成了一半。本屆世界盃上,姆巴佩星光熠熠,長江後浪推前浪,大有將C羅、梅西壓在腳下的趨勢,他兩次追趕貝利,一次是在1/8決賽完成梅開二度,另一次是在世界盃決賽中完成鎖定勝局的一球,成爲不滿20歲球員的第二人。另外他在本屆賽事中打進了4粒入球,和格列茲曼並列全隊第一。而對巴黎而言,他們成功的標準只有一條:歐冠。而留下姆巴佩,可以說在爭奪冠軍的路上有了仰仗,卡瓦尼在本屆世界盃同樣表現不錯,內馬爾雖然內心波瀾,但是之前皇馬官方已經闢謠沒有追求巴西天王,三人留守再度重來,剩下的就是圖赫爾的技術戰術與更衣室的威望,對圖赫爾而言,戰術板固然重要,但是德尚已經爲他提供了更加成功的範本,像團結法國隊一樣去團結巴黎聖日耳曼,或許這纔是巴黎取勝的鑰匙。

abstract:

伴隨着世界盃的落幕,俱樂部聯賽籌備工作又成爲主流,轉會市場必然也會在世界盃的帶動下風起雲湧,不過對於在本屆賽事上大放異彩的姆巴佩而言,大巴黎可以喫一顆定心丸,世界盃最佳新秀已經親自表態:留在巴黎哪裏也不去

“我會留在巴黎,和他們一起繼續我的路途,我的職業生涯不過剛剛開始”,姆巴佩說道

好在姆巴佩已經下定決心,這對巴黎高層而言,也算是任務完成了一半

 

 

可以看出生成的摘要質量還是可以的,同時根據文章的長度以及不同的文章類型,對參數n和alpha進行調整,得到的文章摘要效果應該會更好。

在此種方法之上,可以根據Word2Vec訓練的詞向量進行累加生成句子向量和文章向量,或者使用Doc2Vec直接生成句子向量,對現有的one-hot形式的句子向量進行替代。後續也會對這種方法進行測試~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章