摘要抽取算法——最大邊界相關(guān)算法MMR(Maximal Marginal Relevance) 實踐

NLP(自然語言處理)領(lǐng)域一個特別重要的任務(wù)叫做——文本摘要自動生成莉御。此任務(wù)的主要目的是快速的抽取出一篇文章的主要內(nèi)容,這樣讀者就能夠通過最少的文字匠童,了解到文章最要想表達(dá)的內(nèi)容。由于抽取出來的摘要表達(dá)出了文章最主要的含義,所以在做長文本分類任務(wù)時撰茎,我們可以采用文本摘要算法將長文本的摘要抽取出來,在采用短文本分類模型去做文本分類打洼,有時會起到出奇的好效果龄糊。

文本摘要自動生成算法

文本摘要抽取算法主要分為兩大類:

  • 一種是生成式:生成式一般采用的是監(jiān)督式學(xué)習(xí)算法,最常見的就是sequence2sequence模型募疮,需要大量的訓(xùn)練數(shù)據(jù)炫惩。生成式的優(yōu)點(diǎn)是模型可以學(xué)會自己總結(jié)文章的內(nèi)容,而它的缺點(diǎn)是生成的摘要可能會出現(xiàn)語句不通順的情況阿浓。
  • 另一種是抽取式:常見的算法是 textrank他嚷,MMR(Maximal Marginal Relevance),當(dāng)然也可以采用深度學(xué)習(xí)算法。抽取式指的摘要是從文章中抽出一些重要的句子筋蓖,代表整篇文章的內(nèi)容卸耘。抽取式的優(yōu)點(diǎn)是生成的摘要不會出現(xiàn)語句不通順的情況,而它的缺點(diǎn)是缺乏文本總結(jié)能力粘咖,生成的摘要可能出現(xiàn)信息丟失的情況鹊奖。

最大邊界相關(guān)算法MMR(Maximal Marginal Relevance)

MMR算法又叫最大邊界相關(guān)算法,此算法在設(shè)計之初是用來計算Query文本與被搜索文檔之間的相似度涂炎,然后對文檔進(jìn)行rank排序的算法忠聚。算法公式如下:
\mathrm{MMR}(\mathrm{Q}, \mathrm{C}, \mathrm{R})=A r g \max _{\mathrm20awt5r_{\mathrm{i}} \mathrm{in ,C}}^{k}\left[\lambda \operatorname{sim}\left(\mathrm{Q}, \mathrmbrzo0yt_{\mathrm{i}}\right)-(1-\lambda) \max _{\mathrmvpxq0wc_{\mathrm{j}} \mathrm{i} \mathrm{k}}\left(\operatorname{sim}\left(\mathrmghlxqln_{\mathrm{i}}, \mathrmuogtiwy_{\mathrm{j}}\right)\right)\right]
其中 Q 是 Query文本,C 是被搜索文檔集合唱捣,R是一個已經(jīng)求得的以相關(guān)度為基礎(chǔ)的初始集合,A r g \max _{\mathrmfqntmoy_{\mathrm{i}} \mathrm{in ,C}}^{k}[*]指的是搜索返回的K個的句子的索引两蟀。

當(dāng)我們做摘要抽取時,我們需要換個角度去看公式中的字符表示震缭,在摘要抽取時:

  • 公式中的 Q和C 都代表整篇文檔赂毯。
  • d_{i}則代表文檔中的某個句子。
  • 公式中的\lambda \operatorname{sim}\left(\mathrm{Q},\mathrmcyz0c9e_{\mathrm{i}}\right)指的是文檔中的某個句子和整篇文檔的相似度拣宰。
  • (1-\lambda) \max _{\mathrm59gdhkq_{\mathrm{j}} \mathrm{i} \mathrm{k}}\left(\operatorname{sim}\left(\mathrmqk7de2r_{\mathrm{i}}, \mathrmyvk2p4d_{\mathrm{j}}\right)\right)指的是 文檔中的某個句子和已經(jīng)抽取的摘要句子的相似度党涕。

仔細(xì)觀察下公式方括號中的兩項,其中前一項的物理意義指的是待抽取句子和整篇文檔的相似程度巡社,后一項指的是待抽取句子和已得摘要的相似程度膛堤,通過減號相連,其含義是希望:抽取的摘要既能表達(dá)整個文檔的含義晌该,有具備多樣性 肥荔。而\lambda 則是控制摘要多樣性程度的一個超參數(shù),你可以根據(jù)自己的需求去調(diào)節(jié)朝群。

MMR摘要抽取算法python實現(xiàn)

使用sklearn 的 CountVectorizer 接口計算句子的詞袋向量燕耿,然后定義余弦相識度函數(shù)計算句子和文檔直接相似度,最后實現(xiàn)MMR算法姜胖。

from sklearn.feature_extraction.text import CountVectorizer
from pprint import pprint
import operator



def encode_sen(sen,corpus):
    """
    input: sentence and corpus 
    output :  bag of words vector of sentence 
    """
    cv = CountVectorizer()
    cv = cv.fit(corpus)
    vec = cv.transform([sen]).toarray()
    return vec[0]

def cosin_distance(vector1, vector2):
    """
    input: two bag of words vectors of sentence  
    output :  the similarity between the sentence
   
    """
    dot_product = 0.0
    normA = 0.0
    normB = 0.0
    for a, b in zip(vector1, vector2):
        dot_product += a * b
        normA += a ** 2
        normB += b ** 2
    if normA == 0.0 or normB == 0.0:
        return None
    else:
        return dot_product / ((normA * normB) ** 0.5)


def doc_list2str(doc_list):
    """
    transform the doc_list to str 
    """
    docu_str = ""
    for wordlist in doc_list:
        docu_str += " ".join(wordlist)
    return docu_str


def MMR(doc_list,corpus):
    """
    input :corpus and the docment you want to extract 
    output :the abstract of the docment 
    """
    Corpus = corpus
    docu = doc_list2str(doc_list)
    doc_vec = encode_sen(docu,Corpus)
    QDScore = {}
    ###calculate the  similarity of every sentence with the whole corpus
    for sen in doc_list:
        sen = " ".join(sen)

        sen_vec = encode_sen(sen,corpus)
        score = cosin_distance(sen_vec,doc_vec)
        QDScore[sen] = score

  
    n = 2
    alpha = 0.7
    Summary_set = []
    while n > 0:
        MMRScore = {}
        ### select the first sentence of abstract
        if Summary_set == []:
            selected = max(QDScore.items(), key=operator.itemgetter(1))[0]
            Summary_set.append(selected)

        Summary_set_str = " ".join(Summary_set)

        for sentence in QDScore.keys():
             #calculate MMR  
            if sentence not in Summary_set:
                sum_vec = encode_sen(Summary_set_str, corpus)
                sentence_vec = encode_sen(sentence,corpus)
                MMRScore[sentence] = alpha * QDScore[sentence] - (1 - alpha) * cosin_distance(sentence_vec,sum_vec)
        selected = max(MMRScore.items(), key=operator.itemgetter(1))[0]
        Summary_set.append(selected)
        n -= 1
    # print(len(Summary_set))
    return  Summary_set

測試MMR算法

在網(wǎng)上找了一個關(guān)于2018年世界杯后姆巴佩轉(zhuǎn)會巴黎的新聞誉帅,進(jìn)行摘要抽取。

import jieba
docment = "伴隨著世界杯的落幕右莱,俱樂部聯(lián)賽籌備工作又成為主流蚜锨,轉(zhuǎn)會市場必然也會在世界杯的帶動下風(fēng)起云涌,不過對于在本屆賽事上大放異彩的姆巴佩而言隧出,大巴黎可以吃一顆定心丸踏志,世界杯最佳新秀已經(jīng)親自表態(tài):留在巴黎哪里也不去。在接受外媒采訪時胀瞪,姆巴佩表達(dá)了繼續(xù)為巴黎效忠的決心针余∷潜桑“我會留在巴黎,和他們一起繼續(xù)我的路途圆雁,我的職業(yè)生涯不過剛剛開始”忍级,姆巴佩說道。事實上伪朽,在巴黎這座俱樂部轴咱,充滿了內(nèi)部的你爭我奪。上賽季烈涮,卡瓦尼和內(nèi)馬爾因為點(diǎn)球事件引發(fā)軒然大波朴肺,而內(nèi)馬爾聯(lián)合阿爾維斯給姆巴佩起“忍者神龜”的綽號也讓法國金童十分不爽,為此坚洽,姆巴佩的母親還站出來替兒子解圍戈稿。而早在二月份,一場與圖盧茲的比賽讶舰,內(nèi)馬爾也因為傳球問題賽后和姆巴佩產(chǎn)生口角鞍盗。由此可見,巴黎內(nèi)部雖然大牌云集跳昼,但是氣氛并不和睦般甲。內(nèi)馬爾離開球隊的心思早就由來已久,而姆巴佩也常常與其它俱樂部聯(lián)系在一起鹅颊,在躲避過歐足聯(lián)財政公平法案之后敷存,巴黎正在為全力留下二人而不遺余力。好在姆巴佩已經(jīng)下定決心挪略,這對巴黎高層而言历帚,也算是任務(wù)完成了一半滔岳。本屆世界杯上杠娱,姆巴佩星光熠熠,長江后浪推前浪谱煤,大有將C羅摊求、梅西壓在腳下的趨勢,他兩次追趕貝利刘离,一次是在1/8決賽完成梅開二度室叉,另一次是在世界杯決賽中完成鎖定勝局的一球,成為不滿20歲球員的第二人硫惕。另外他在本屆賽事中打進(jìn)了4粒入球茧痕,和格列茲曼并列全隊第一。而對巴黎而言恼除,他們成功的標(biāo)準(zhǔn)只有一條:歐冠踪旷。而留下姆巴佩曼氛,可以說在爭奪冠軍的路上有了仰仗,卡瓦尼在本屆世界杯同樣表現(xiàn)不錯令野,內(nèi)馬爾雖然內(nèi)心波瀾舀患,但是之前皇馬官方已經(jīng)辟謠沒有追求巴西天王,三人留守再度重來气破,剩下的就是圖赫爾的技術(shù)戰(zhàn)術(shù)與更衣室的威望聊浅,對圖赫爾而言,戰(zhàn)術(shù)板固然重要现使,但是德尚已經(jīng)為他提供了更加成功的范本低匙,像團(tuán)結(jié)法國隊一樣去團(tuán)結(jié)巴黎圣日耳曼,或許這才是巴黎取勝的鑰匙碳锈。"
sen_list = docment.strip().split("努咐。")
sen_list.remove("")
doc_list = [jieba.lcut(i) for i in sen_list]
corpus = [" ".join(i) for i in doc_list]
corpus

結(jié)果如下:從抽取的摘要基本可以得知本篇報道主要是想說明世界杯后姆巴佩將轉(zhuǎn)化巴黎,而且可能性很大殴胧。和全文主要想表達(dá)的含義基本吻合渗稍。證明MMR算法確實厲害。

MMR(doc_list,corpus)
abstract

結(jié)語

這里筆者只是簡單的介紹了MMR摘要算法的原理团滥,以及簡單實現(xiàn)竿屹。代碼部分也不是此算法的最優(yōu)實現(xiàn)。真正能夠落地的摘要算法灸姊,一定是融合了更多的其他思想拱燃,如textrank,文本句子和標(biāo)題的相似度力惯,或者引入詞向量或者句子向量來更好的表達(dá)句子語義等等碗誉。本文只是想讓大家初步了解摘要算法的一些知識,以及感受一下摘要算法的神奇之處父晶。

參考:

https://blog.csdn.net/ZJRN1027/article/details/81136761

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末哮缺,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子甲喝,更是在濱河造成了極大的恐慌尝苇,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件埠胖,死亡現(xiàn)場離奇詭異糠溜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)直撤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門非竿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谋竖,你說我怎么就攤上這事红柱∥甓” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵豹芯,是天一觀的道長悄雅。 經(jīng)常有香客問我,道長铁蹈,這世上最難降的妖魔是什么宽闲? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮握牧,結(jié)果婚禮上容诬,老公的妹妹穿的比我還像新娘。我一直安慰自己沿腰,他們只是感情好览徒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著颂龙,像睡著了一般习蓬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上措嵌,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天躲叼,我揣著相機(jī)與錄音,去河邊找鬼企巢。 笑死枫慷,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的浪规。 我是一名探鬼主播或听,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼笋婿!你這毒婦竟也來了誉裆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤萌抵,失蹤者是張志新(化名)和其女友劉穎找御,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绍填,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年栖疑,在試婚紗的時候發(fā)現(xiàn)自己被綠了讨永。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡遇革,死狀恐怖卿闹,靈堂內(nèi)的尸體忽然破棺而出揭糕,到底是詐尸還是另有隱情,我是刑警寧澤锻霎,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布著角,位于F島的核電站,受9級特大地震影響旋恼,放射性物質(zhì)發(fā)生泄漏吏口。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一冰更、第九天 我趴在偏房一處隱蔽的房頂上張望产徊。 院中可真熱鬧,春花似錦蜀细、人聲如沸舟铜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谆刨。三九已至,卻和暖如春归斤,著一層夾襖步出監(jiān)牢的瞬間痴荐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工官册, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留生兆,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓膝宁,卻偏偏與公主長得像鸦难,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子员淫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 利用計算機(jī)將大量的文本進(jìn)行處理合蔽,產(chǎn)生簡潔、精煉內(nèi)容的過程就是文本摘要介返,人們可通過閱讀摘要來把握文本主要內(nèi)容拴事,這不僅...
    甘尼克斯_閱讀 11,002評論 1 8
  • 最近人工智能隨著AlphaGo戰(zhàn)勝李世乭這一事件的高關(guān)注度,重新掀起了一波新的關(guān)注高潮圣蝎,有的說人工智能將會如何超越...
    MiracleJQ閱讀 2,832評論 2 1
  • 前面的文章主要從理論的角度介紹了自然語言人機(jī)對話系統(tǒng)所可能涉及到的多個領(lǐng)域的經(jīng)典模型和基礎(chǔ)知識刃宵。這篇文章,甚至之后...
    我偏笑_NSNirvana閱讀 13,917評論 2 64
  • 轉(zhuǎn)載自http://www.cnblogs.com/Determined22/ 兩周以前讀了些文檔自動摘要的論文徘公,...
    nightwish夜愿閱讀 10,600評論 0 6
  • 關(guān)注和概要用神經(jīng)注意的共同學(xué)習(xí) 摘要 詢問相關(guān)排序和句子顯著排序是兩個主要的任務(wù)在提取詢問專注概要牲证。 之前的監(jiān)督概...
    __子不語__閱讀 970評論 0 0