- 文獻(xiàn):TextRank: Bringing Order into Texts (2004)
- 作者:Rada Mihalcea and Paul Tarau
- 地址: https://web.eecs.umich.edu/~mihalcea/papers/mihalcea.emnlp04.pdf
作者主要做了什么们豌?
在這篇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的不同之處:
將每一個(gè)sentence作為一個(gè)頂點(diǎn)眨唬;
不能再使用“同時(shí)出現(xiàn)”作為頂點(diǎn)之間的聯(lián)系,“同時(shí)出現(xiàn)”在這個(gè)應(yīng)用場(chǎng)景沒有意義好乐,作為替代匾竿,文中根據(jù)兩個(gè)句子之間的內(nèi)容重復(fù)程度來計(jì)算他們之間的“相似度”,以這個(gè)相似度作為聯(lián)系蔚万;
由于不同句子之間相似度大小不一致岭妖,在這個(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}]