文獻(xiàn)閱讀 — TextRank: Bringing Order into Texts



作者主要做了什么们豌?


在這篇paper中募壕,作者將PageRank算法整合到了TextRank模型中逃片,并應(yīng)用到兩類跟排序相關(guān)的自然語(yǔ)言處理任務(wù)中指蚜,分別是:

1)關(guān)鍵詞(keyword extraction)提取,即選擇出能夠表達(dá)輸入文本含義的幾個(gè)關(guān)鍵短語(yǔ);

2)句子提取(sentence extraction)镶骗,即確定輸入文本中最“重要”的幾個(gè)可以用來建立摘要(summary)的句子。

值得注意一點(diǎn)是躲雅,其他基于圖的排序算法鼎姊,如HITS、Positional Function等吏夯,也可以輕松的整合到TextRank模型中此蜈。


TextRank是什么即横?


TextRank是一個(gè)基于圖排序的噪生、用于文本處理的算法。使用TextRank算法东囚,不需要有深入的語(yǔ)言學(xué)和專業(yè)領(lǐng)域知識(shí)跺嗽,它是一個(gè)無(wú)監(jiān)督的算法,這個(gè)特性使得它可以很方便的應(yīng)用到其他領(lǐng)域和語(yǔ)言中页藻。

在文本中使用基于圖的排序算法需要構(gòu)建一張關(guān)系圖來表達(dá)文本桨嫁、詞語(yǔ)以及其他實(shí)體。從實(shí)踐的角度出發(fā)份帐,詞語(yǔ)璃吧、詞語(yǔ)集合、整個(gè)句子等都可以作為圖中的頂點(diǎn)废境,在這些頂點(diǎn)之間建立聯(lián)系畜挨,如:詞序關(guān)系、語(yǔ)義關(guān)系噩凹、內(nèi)容相似度等巴元,就能夠構(gòu)建一張合適的關(guān)系圖。

由于基于圖的排序算法通過迭代計(jì)算整張圖的信息來確定頂點(diǎn)(vertex)重要性驮宴,而不是僅僅依賴頂點(diǎn)的局部信息逮刨,因此,基于圖的排序算法堵泽,如:HITS修己、PageRank,在引用分析(citation analysis)迎罗、社交網(wǎng)絡(luò)(social network)以及網(wǎng)頁(yè)排序等方面取得成功的應(yīng)用睬愤。


TextRank的優(yōu)點(diǎn)有哪些?


  • 無(wú)監(jiān)督學(xué)習(xí)佳谦,使用者不需要有深入的語(yǔ)言學(xué)或者專業(yè)領(lǐng)域知識(shí)戴涝;
  • 使用基于圖的排序算法,綜合考慮文本整體的信息來確定哪些words或者sentences可以更好的表達(dá)文本

不考慮加入圖中的元素的類型和特征,如何在文本處理中應(yīng)用基于圖的排序算法啥刻?


step 1. 確定最適合當(dāng)前任務(wù)的文本單元集(text units)奸鸯,把它們作為頂點(diǎn)集(vertices)加入到圖中;

step 2. 確定text units之間的關(guān)系可帽,基于這些關(guān)系把邊集(edges)畫出來娄涩,edge可以是有向(directed)/無(wú)向(undirected)的,當(dāng)然映跟,也可以是加權(quán)(weighted)/不加權(quán)(unweighted)的蓄拣;

step 3. 使用基于圖的排序算法迭代計(jì)算,直到收斂努隙,得到各頂點(diǎn)的重要性得分球恤;

step 4. 根據(jù)各頂點(diǎn)得分對(duì)頂點(diǎn)集進(jìn)行排序,將排序之后的結(jié)果作為輸出荸镊。


使用TextRank對(duì)中文進(jìn)行分析


基于這篇paper咽斧,letiantian實(shí)現(xiàn)了針對(duì)中文進(jìn)行處理的TextRank算法,即TextRank4ZH躬存。

由于英文中张惹,詞和短語(yǔ)的區(qū)別不是很明顯,這篇paper的作者將英文的keyword extraction和keyphrase extraction統(tǒng)一在keyword extraction這節(jié)中岭洲,樣例中也沒有將keyword和keyphrase進(jìn)行區(qū)分宛逗。

但是中文里面的詞和短語(yǔ)區(qū)分非常明顯,關(guān)鍵詞提取和關(guān)鍵短語(yǔ)提取可以認(rèn)為是兩個(gè)不一樣的任務(wù)盾剩,letiantian在實(shí)現(xiàn)這個(gè)算法的時(shí)候?qū)㈥P(guān)鍵詞提取雷激、關(guān)鍵短語(yǔ)提取進(jìn)行了區(qū)分,分別封裝了兩個(gè)函數(shù):get_keywords和get_keyphrases彪腔。


關(guān)鍵詞提冉慕酢(keyword extraction)


關(guān)鍵詞提取是指從文本中確定一些能夠描述文檔含義的術(shù)語(yǔ)的過程。

對(duì)關(guān)鍵詞提取而言德挣,用于構(gòu)建頂點(diǎn)集(vertices)的文本單元(text unit)可以是句子中的一個(gè)或多個(gè)字恭垦;根據(jù)這些字之間的關(guān)系(比如:在一個(gè)框中同時(shí)出現(xiàn))構(gòu)建邊。根據(jù)任務(wù)的需要格嗅,可以使用語(yǔ)法過濾器(syntactic filters)對(duì)頂點(diǎn)集進(jìn)行優(yōu)化番挺。語(yǔ)法過濾器的主要作用是將某一類或者某幾類詞性的字過濾出來作為頂點(diǎn)集。

step 1. 對(duì)文本進(jìn)行詞性標(biāo)記屯掖,這是為了應(yīng)用語(yǔ)法過濾器而進(jìn)行的預(yù)處理

step 2. 構(gòu)建圖

step 3. 使用PageRank進(jìn)行迭代計(jì)算玄柏,得到各頂點(diǎn)的重要性得分,按得分對(duì)頂點(diǎn)進(jìn)行排序

step 4. 將top-N結(jié)果輸出


下面是基于textrank4zh進(jìn)行中文關(guān)鍵詞提取的演示:
點(diǎn)擊下載樣本數(shù)據(jù)

from textrank4zh import TextRank4Keyword

lines = open('./keyword_extraction.data', 'r').readlines()
lines = [line.strip('\n') for line in lines]
text = ' '.join(lines)
tr4w = TextRank4Keyword(allow_speech_tags=['n', 'nr', 'nrfg', 'ns', 'nt', 'nz'])
#   將動(dòng)詞過濾掉
tr4w.analyze(text=text, window=2)
#   text       --  文本內(nèi)容贴铜,字符串粪摘。
#   window     --  窗口大小瀑晒,int,用來構(gòu)造單詞之間的邊徘意。默認(rèn)值為2苔悦。
kws = tr4w.get_keywords(num=6, word_min_len=2)
#   num           --  返回關(guān)鍵詞數(shù)量
#   word_min_len  --  詞的最小長(zhǎng)度,默認(rèn)值為1
kws

輸出結(jié)果如下:

[{'weight': 0.028586717054060257, 'word': '人工智能'},
 {'weight': 0.026946002730704365, 'word': '人類'},
 {'weight': 0.02410264096249914, 'word': '機(jī)器人'},
 {'weight': 0.014908545336161625, 'word': '機(jī)器'},
 {'weight': 0.01362202506014923, 'word': '電影'},
 {'weight': 0.011395769681302775, 'word': '科幻'}]

關(guān)鍵短語(yǔ)提茸颠帧(keyphrase extration)


關(guān)鍵詞提取結(jié)束后玖详,我們可以得到的N個(gè)關(guān)鍵詞,在原始文本中相鄰的關(guān)鍵詞構(gòu)成關(guān)鍵短語(yǔ)勤讽。因此蟋座,從get_keyphrases函數(shù)的源碼中我們可以看到,它先調(diào)用get_keywords提取關(guān)鍵詞脚牍,然后分析關(guān)鍵詞是否存在相鄰的情況向臀,最后確定哪些是關(guān)鍵短語(yǔ)。

get_keyphrases源碼如下:

def get_keyphrases(self, keywords_num = 12, min_occur_num = 2): 
    #  調(diào)用get_keywords提取關(guān)鍵詞
    #  word_min_len默認(rèn)值為1莫矗,get_keyphrases函數(shù)不支持修改該參數(shù)飒硅,實(shí)際使用時(shí)如果不希望出現(xiàn)一個(gè)字的關(guān)鍵詞,
    #  可根據(jù)需要直接修改源碼中的參數(shù)
    keywords_set = set([ item.word for item in self.get_keywords(num=keywords_num, word_min_len = 1)])
    keyphrases = set()
    for sentence in self.words_no_filter:
        one = []
        # 在句子中檢查是否存在若干個(gè)相鄰的關(guān)鍵詞
        for word in sentence:
            if word in keywords_set:
                one.append(word)
            else:
                # 如果存在若干個(gè)關(guān)鍵詞相鄰作谚,就將他們組合成關(guān)鍵短語(yǔ)
                if len(one) >  1:
                    keyphrases.add(''.join(one))
                if len(one) == 0:
                    continue
                else:
                    one = []
        if len(one) >  1:
            keyphrases.add(''.join(one))
    # 判斷phrase在文中出現(xiàn)的次數(shù)是否大于min_occur_num,輸出結(jié)果
    return [phrase for phrase in keyphrases 
            if self.text.count(phrase) >= min_occur_num]

下面是提取中文關(guān)鍵短語(yǔ)的演示:

kws = tr4w.get_keyphrases(keywords_num=20, min_occur_num= 1)
#   keywords_num    --  抽取的關(guān)鍵詞數(shù)量
#   min_occur_num   --  關(guān)鍵短語(yǔ)在文中的最少出現(xiàn)次數(shù)
kws

輸出結(jié)果如下:

['人類思維', '人類沙文主義', '機(jī)器人定律', '科幻作家', '人類社會(huì)', '人類智慧']

句子提肉职拧(sentence extraction)


這篇paper中的句子提取任務(wù)主要針對(duì)的是自動(dòng)摘要這個(gè)場(chǎng)景妹懒。由于工作中不涉及這個(gè)場(chǎng)景,對(duì)這個(gè)任務(wù)的理解很淺双吆。下面簡(jiǎn)單介紹一下paper中進(jìn)行sentence extraction的主要思想中與keyword extration的不同之處:

  1. 將每一個(gè)sentence作為一個(gè)頂點(diǎn)眨唬;

  2. 不能再使用“同時(shí)出現(xiàn)”作為頂點(diǎn)之間的聯(lián)系,“同時(shí)出現(xiàn)”在這個(gè)應(yīng)用場(chǎng)景沒有意義好乐,作為替代匾竿,文中根據(jù)兩個(gè)句子之間的內(nèi)容重復(fù)程度來計(jì)算他們之間的“相似度”,以這個(gè)相似度作為聯(lián)系蔚万;

  3. 由于不同句子之間相似度大小不一致岭妖,在這個(gè)場(chǎng)景下構(gòu)建的是以相似度大小作為edge權(quán)重的有權(quán)圖。

下面是提取句子的演示:

from textrank4zh import TextRank4Sentence
tr4s = TextRank4Sentence()
tr4s.analyze(text=text, lower=True, source = 'all_filters')
tr4s.get_key_sentences(num=6)

輸出結(jié)果如下:

[{'index': 19,
  'sentence': '直到《機(jī)械姬》(2015年)中反璃,具有獨(dú)立思考能力的智能機(jī)器人“夏娃”才以一個(gè)能通過“圖靈測(cè)試”昵慌,讓男人分辨不出是機(jī)器還是人類的形象,而且是以一個(gè)女性“她”的形象淮蜈,開始呈現(xiàn)出人工智能未必都是男性斋攀,她也渴望成為人的訴求',
  'weight': 0.01843663608214886},
 {'index': 25,
  'sentence': '人類沙文主義:機(jī)器人三定律只存在于貴圈  想要便成人,一個(gè)最主要的緣由是在文藝作品中有了獨(dú)立思考能力的人工智能們渴望擺脫人類的奴役',
  'weight': 0.016295422313582313},
 {'index': 71,
  'sentence': '而無(wú)論是機(jī)器人梧田、人造人還是人工智能淳蔼,處處透著一個(gè)“人”字烙印侧蘸,標(biāo)志著“非人”和“人造”的雙重含義,亦在同時(shí)鹉梨,讓人類有了上帝造人之感',
  'weight': 0.016030835354765443},
 {'index': 38,
  'sentence': '這一思維的集大成者闺魏,無(wú)疑是被科幻迷們奉為圭臬的機(jī)器人三定律,或者說是在科幻小說中理所當(dāng)然的人工智能設(shè)定:  第一定律:機(jī)器人不得傷害人類俯画,或因不作為使人類受到傷害',
  'weight': 0.015822579189346337},
 {'index': 47,
  'sentence': '而另一位人工智能理論研究者本·格策爾給出的答案更加讓人有顛覆之感:阿西莫夫的未來社會(huì)是光天化日的基質(zhì)沙文主義析桥,人類擁有的權(quán)利比人形機(jī)器人的權(quán)利更多',
  'weight': 0.015683710871720248},
 {'index': 100,
  'sentence': '或者說,類似機(jī)器或西蒙妮這樣的人工智能形象艰垂,更符合人類給予人工智能的設(shè)定泡仗,即他和她之外的第三人,配合猜憎、輔助娩怎、參與、完善和實(shí)現(xiàn)人類的最終幻想胰柑,或許也是覺醒后的人工智能的最終幻想截亦,而非簡(jiǎn)單的以暴易暴式對(duì)抗',
  'weight': 0.015327223889169753}]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市柬讨,隨后出現(xiàn)的幾起案子崩瓤,更是在濱河造成了極大的恐慌,老刑警劉巖踩官,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件却桶,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蔗牡,警方通過查閱死者的電腦和手機(jī)颖系,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辩越,“玉大人嘁扼,你說我怎么就攤上這事∏埽” “怎么了趁啸?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)亏钩。 經(jīng)常有香客問我莲绰,道長(zhǎng),這世上最難降的妖魔是什么姑丑? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任蛤签,我火速辦了婚禮,結(jié)果婚禮上栅哀,老公的妹妹穿的比我還像新娘震肮。我一直安慰自己称龙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布戳晌。 她就那樣靜靜地躺著鲫尊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沦偎。 梳的紋絲不亂的頭發(fā)上疫向,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天,我揣著相機(jī)與錄音豪嚎,去河邊找鬼搔驼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛侈询,可吹牛的內(nèi)容都是我干的舌涨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼扔字,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼囊嘉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起革为,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤扭粱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后篷角,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體焊刹,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年恳蹲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俩滥。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嘉蕾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出霜旧,到底是詐尸還是另有隱情错忱,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布挂据,位于F島的核電站以清,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏崎逃。R本人自食惡果不足惜掷倔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望个绍。 院中可真熱鬧勒葱,春花似錦浪汪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至凯旋,卻和暖如春呀潭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背至非。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工钠署, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人睡蟋。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓踏幻,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親戳杀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子该面,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

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

  • 轉(zhuǎn)載請(qǐng)聲明出處。到這里才發(fā)現(xiàn)簡(jiǎn)書不支持Mathjax信卡,真蛋疼隔缀,要看公式的話還是到我的博客上看,留言就在這里留吧傍菇,我...
    TonLP閱讀 2,707評(píng)論 0 6
  • 最近人工智能隨著AlphaGo戰(zhàn)勝李世乭這一事件的高關(guān)注度猾瘸,重新掀起了一波新的關(guān)注高潮,有的說人工智能將會(huì)如何超越...
    MiracleJQ閱讀 2,829評(píng)論 2 1
  • 怎樣上網(wǎng)丢习、看書牵触、交談......如何能更高效地把別人的經(jīng)驗(yàn)內(nèi)化為自己的行動(dòng)? 以看書舉例咐低,上網(wǎng)和交談內(nèi)化知識(shí)的原理...
    王丁一閱讀 623評(píng)論 2 3
  • 瓜 一片土地 一條水溝 兩種瓜 一個(gè)努力爬著 一個(gè)開心躺著 一個(gè)甜 一個(gè)苦 它有個(gè)好聽的名字 叫青門綠玉房 它有個(gè)...
    木駒閱讀 337評(píng)論 1 1
  • 可以說揽思,電影《老炮兒》是一部讓人看完之后心情沉重的電影,我相信大多數(shù)人跟我的感受應(yīng)該是一樣的见擦。電影里充斥著太多底層...
    重慶森林cqsenlin閱讀 1,054評(píng)論 6 13