自动摘要算法
from: http://www.isnowfy.com/automatic-summarization/
當時yahoo以3000萬美元的價格收購了summly的消息傳出來之后,貌似大家都比變的對自動摘要產(chǎn)生了極大的興趣,關(guān)于自導(dǎo)摘要wiki這里有很詳細的介紹,一般自動摘要比較常用的一個是摘取文章中的關(guān)鍵詞,另一個則是摘取文章中的關(guān)鍵的句子,在這里我主要是介紹用textrank算法來搞句子的摘取。
相對于textrank,摘取關(guān)鍵句子還有一些比較簡單的算法,比如這篇,我們可以把句子分別和整篇文章做比較,相似性最大的就是關(guān)鍵的句子。而textrank其實就是pagerank算法擴展到句子上,來的到一些全局的信息。textrank的論文在這里。
首先我們看pagerank算法,就是google用的那個網(wǎng)頁排序的pagerank算法,首先網(wǎng)頁之間都是有超鏈接鏈接的,如果某個網(wǎng)站A有指向B的超鏈接,說明A網(wǎng)站認為B網(wǎng)站是有價值的,于是相應(yīng)的我們可以給B來提升權(quán)重,但是就像現(xiàn)實中,一般人的意見和專家的意見的權(quán)重是不一樣的,所以如果網(wǎng)站A的權(quán)重比較高,那么就可以貢獻更多的權(quán)重給B,反之則貢獻更少的權(quán)重,然后算法經(jīng)過一輪輪的迭代,所有結(jié)點的權(quán)重會收斂,就得到了最終的權(quán)重了。然后我們有pagerank的計算公式,其中d是阻尼系數(shù)。
score(Vi)=(1?d)+d?∑1∣∣out(Vj)∣∣?score(Vj)
換到textrank,對于pagerank而言,邊是沒有權(quán)值的,而textrank的邊是有權(quán)值的,表示兩個句子的相似性,這個權(quán)值可以用Jaccard similarity coefficient就是交集數(shù)目除以并集數(shù)目,或者cosine的余弦夾角,或者是bm25一類的算法。在邊有了權(quán)值之后,textrank的公式變?yōu)檫@個樣子。
score(Vi)=(1?d)+d?∑weight(j,i)∑weight(j,k)?score(Vj)
論文里顯示帶了權(quán)重之后收斂會慢一些,在經(jīng)過若干輪的迭代之后,我們就可以得到每個句子的權(quán)重了,然后我們?nèi)〕鰴?quán)重最大的幾個就認為是文章的關(guān)鍵句子了。
自己實現(xiàn)了一份以bm25為相似性的textrank算法,代碼在github上,具體可以看代碼,test.py展示了摘要的提取。同時這個項目實現(xiàn)了一些常用的操作,比如繁體轉(zhuǎn)簡體,中文的分詞和詞性標注等,歡迎試用提pull requests啊!
總結(jié)
- 上一篇: ROC曲线 1
- 下一篇: 基于用户的协同过滤和皮尔逊相关系数