1. 程式人生 > >Word2vec加TextRank演算法生成文章摘要

Word2vec加TextRank演算法生成文章摘要

依賴包:https://download.csdn.net/download/dreamzuora/10853874
程式碼:

	String document = "演算法可大致分為基本演算法、資料結構的演算法、數論演算法、計算幾何的演算法、圖的演算法、動態規劃以及數值分析、加密演算法、排序演算法、檢索演算法、隨機化演算法、並行演算法、厄米變形模型、隨機森林演算法。\n" +
	        "演算法可以寬泛的分為三類,\n" +
	        "一,有限的確定性演算法,這類演算法在有限的一段時間內終止。他們可能要花很長時間來執行指定的任務,但仍將在一定的時間內終止。這類演算法得出的結果常取決於輸入值。\n" +
	        "二,有限的非確定演算法,這類演算法在有限的時間內終止。然而,對於一個(或一些)給定的數值,演算法的結果並不是唯一的或確定的。\n" +
	        "三,無限的演算法,是那些由於沒有定義終止定義條件,或定義的條件無法由輸入的資料滿足而不終止執行的演算法。通常,無限演算法的產生是由於未能確定的定義終止條件。";
	List<String> sentenceList = HanLP.extractSummary(document, 3);
	System.out.println(sentenceList);

演算法背景:
自動文字摘要是自然語言處理中一個比較難的任務。新聞的摘要要求編輯能夠從新聞事件中提取出最關鍵的資訊點,然後重新組織語言進行描述;一般論文的摘要要求作者先表述清楚問題,對前人工作中不完善的地方進行總結,然後用更凝練的語言描述自己的工作;綜述性質的論文要求作者通讀大量相關領域的工作,用最概括性的語言將每份工作的貢獻、創新點寫出來,並對每份工作的優缺點進行比較。本質上,文字摘要是一種資訊過濾,輸出的文字比輸入的文字少很多,但卻包含了主要的資訊,有點類似主成分分析(PCA)。從某種意義上,文字摘要與推薦系統的功能類似,都是為了提取出使用者感興趣的內容,只是使用的方法有很大不同。

自動摘要技術應用最廣的領域在新聞,由於新聞資訊的過載,也由於很多新聞媒體為了譁眾取寵,故意將標題起的特別吸引人眼球,但卻名不副實,人們迫切地希望有一個工具可以幫助自己用最短的時間瞭解最多的最有用的新聞。搜尋引擎也是應用之一,基於查詢(Query)的自動文字摘要技術會幫助使用者儘快找到感興趣的內容。另外,隨著智慧裝置的普及,自動摘要技術的使用也會為新的資訊瀏覽與人機互動方式帶來變革。

按照文件數量,文字摘要可以分為單文件摘要與多文件摘要,前者是後者的基礎,但後者不只是前者結果的簡單疊加。前者經常應用於新聞資訊的過濾,而後者,在搜尋引擎中有很大的潛力,難度也隨之加大。

按照實現方式,可以分為兩大類,提取式(Extractive)和摘要式(Abstractive)。

提取式的方法基於一個假設:一篇文件的核心思想可以用文件中的某一句或者幾句話來概括。因此,文字摘要的任務就變成了找到文字中最重要的幾句話,這通常是一個排序問題。在文件摘要問題中,基於圖的排序演算法,是以文件的每句話作為節點,句子之間的相似度作為邊的權值構構建圖模型,用PageRank演算法進行求解,得到每個句子的得分,代表演算法有TextRank和LexRank【。基於特徵工程的排序演算法實用性更強,然而需要人為進行調整的部分也變得更多。文字摘要問題中經常使用到的特徵包括句子長度、句子位置、句子是否包含標題詞和句子關鍵詞打分等,代表演算法是TextTeaser,由於只考慮了相關性而沒有考慮新穎性,以上的排序演算法很可能出現排名靠前的幾句話表達的都是相似的意思,所以需要引入一個懲罰因子,在對排在後面的句子進行評分時,對它與在它之前的句子的相似度進行懲罰,也就是MMR(Maximum Margin Relevance)以上是提取式的自動摘要演算法,其輸出結果是不同段落中選擇出來的Top K的句子,因此摘要的連貫性、一致性很難保證。

摘要式的方法是一種生成式的方法,它要求系統理解文字所表達的意思,然後用可讀性強的人類語言將其簡練地總結出來。這裡包含幾個難點:

理解文字。與人類閱讀文字類似,需要明白文字表達的意思,涉及到的話題等。
可讀性強。可讀性是指生成的摘要能夠連貫與銜接。
簡練總結。即在理解文字的基礎上,用盡可能簡潔的文字表達最核心的部分。
上述難點即使對於人類也不是一件容易的事情,對於計算機更是。雖然在一些領域中,由於計算機強大的計算能力,人工智慧能夠領先於人類,但在更多的領域,例如機器翻譯、文字摘要,AI離人類的水平還很遙遠。

近幾年隨著深度學習(Deep Learning)的發展,研究者們開始嘗試將一些最新的研究成果應用於自動文字摘要,尤其是機器翻譯(Machine Translation)中的Encoder-Decoder框架和Attention機制。從這個思路可以將文字摘要問題轉化為一個Sequence-2-Sequence問題,由此產生了基於RNN的Attention Model,基於CNN的ABS(Attention-Based Summarization)等。在一定程度上,它們實現了摘要式的自動文字摘要,但還是處於研究初期,效果不算太好。

目前使用到的語料資料分為兩種,一種是用於訓練深度網路的大型語料,一種是用來參加測評的小型語料。前者經常使用CNN、Daily Mail等提供的新聞資料集。後者通常使用TAC(Text Analysis Conference)提供的小型資料集。關於中文語料資料集,常用的是哈爾濱工業大學(深圳)智慧計算研究中心開放的LCSTS(Large Scale Chinese Short Text Summarization Dataset),資料主要採自新浪微博,是一個短文字摘要資料集。

關於評價方法,人工評價自不用提,自動評價目前公認的只有Lin在2003年提出的ROUGE(Recall-Oriented Understudy for Gisting Evaluation)指標【6】,基本思想是將待審的摘要和參考摘要的n元組共現統計量作為評價作為評價依據,然後通過一系列標準進行打分,包括:ROUGH-N、ROUGH-L、ROUGH-W、ROUGH-S和ROUGH-SU幾個型別。通俗來說是通過一些定量化的指標來描述待審摘要和參考文摘之間的相似性,例如共同出現次數、最長相同文字長度、帶權最長相同文字長度等。

背景:https://blog.csdn.net/Silience_Probe/article/details/80699282
word2vec使用過程(Java版):
https://blog.csdn.net/acwa123/article/details/72626580
詳解(python):https://blog.csdn.net/qq_22636145/article/details/75099792
hanlp介紹:http://hanlp.linrunsoft.com/
hanlp下載:https://github.com/hankcs/HanLP
hanlp(分詞)使用:https://blog.csdn.net/nima1994/article/details/72819973
hanlp1.7:https://github.com/hankcs/HanLP/tree/v1.7.0