**
本報告是本人在自學自然語言處理文本摘要方向初期研讀綜述性論文、博客、網站等后總結的綜述報告。
**
主要內容:
1)文本摘要簡介(是什么?)
2)文本摘要現狀(怎么樣?)
3)文本摘要分類(有哪些?)
4)文本摘要主要技術
5)附頁
一、 文本摘要簡介(是什么?)
文本摘要是指通過各種技術,對文本或者是文本的集合,抽取、總結或是精煉其中的要點信息,用以概括和展示原始文本的主要內容或大意。隨着互聯網產生的文本數據越來越多,文本信息過載問題日益嚴重,對各類文本進行一個“降維”處理顯得非常必要,文本摘要便是其中一個重要的手段。作為文本生成任務的主要方向之一,從本質上而言,這是一種信息壓縮技術。文本摘要的目的就是為了讓用戶在當今世界海量的互聯網數據中找到有效的信息。
二、 文本摘要現狀(怎么樣?)
1、研究熱點
隨着互聯網上的信息呈爆炸式增長,如何從海量信息中提取有用信息成了一個關鍵的技術問題。文本摘要技術能夠從大數據中壓縮提煉出精煉簡潔的文檔信息,有效降低用戶的信息過載問題,成為研究熱點。
2、研究難點
因為文本摘要技術,尤其是生成式文本摘要,涉及到很深層次的自然語言處理(自然語言理解、自然語言生成等)的能力,所以一直以來它都是自然語言技術的一個研究難點。
3、國際現狀
國際上對文本摘要技術已經進行了多年的研究,相關研究成果主要發表在自然語言處理相關學術會議與期刊上,例如ACL、EMNLP、NAACL、COLING、AAAI、IJCAI、SIGIR、INLG等,有很多關於文本摘要技術的研究成果都發表在上面。我已將上面各個學術會議與期刊的簡介與網址放在附頁一中。
國際上幾個主要的研究單位包括密歇根大學、南加州大學、哥倫比亞大學、北德克薩斯大學、愛丁堡大學等。有很多優秀的算法,理論都產自這幾所大學。
4、國內現狀
相比機器翻譯、自動問答、知識圖譜、情感分析等熱門領域,文本摘要在國內並沒有受到足夠的重視,主要也是由於有着很多難以突破的難點(很深層次的自然語言處理、自然語言理解、自然語言生成等的能力),在文本摘要方面從事過研究的國內單位包括北京大學計算機科學技術研究所、北京大學計算語言所、哈工大信息檢索實驗室、清華大學智能技術與系統國家重點實驗室等。
其中,北京大學計算機科學技術研究所在文本摘要方面進行了長期深入的研究,提出了多種基於圖排序的自動摘要方法與壓縮式摘要方法,並且探索了跨語言摘要、比較式摘要、演化式摘要等多種新穎的摘要任務。在學術文獻摘要方面,則分別提出基於有監督學習和整數線性規划模型的演示幻燈片的自動生成方法與學術論文相關工作章節的自動生成方法。
國內早期的基礎資源與評測舉辦過單文檔摘要的評測任務,但測試集規模比較小,而且沒有提供自動化評價工具。2015年CCF中文信息技術專委會組織了NLPCC評測,其中包括了面向微博的新聞摘要任務,提供了規模相對較大的樣例數據和測試數據,並采用自動評價方法,吸引了多支隊伍參加評測,目前這些數據可以公開獲得。但上述中文摘要評測任務均針對單文檔摘要任務,目前還沒有業界認可的中文多文檔摘要數據,這在事實上阻礙了中文自動摘要技術的發展。
5、現狀總結
總的來說,國際上對自然語言處理的文本摘要方向已有多年的研究,研究成果也較為豐厚,但是國內由於中文涉及到很多難以突破的難點(很深層次的自然語言處理、自然語言理解、自然語言生成等的能力)得原因,研究成果相比英語的文本摘要相對較少,而且國內相比機器翻譯、自動問答、知識圖譜、情感分析等熱門領域,文本摘要在國內並沒有受到足夠的重視。
三、 文本摘要分類(有哪些?)
1、按摘要方法分
文本摘要按照摘要方法可以分為抽取式文本摘要、生成式文本摘要和生成-抽取式文本摘要三種。
(1)抽取式文本摘要
抽取式文本摘要,顧名思義,就是從文檔或者文檔集中抽取其中的一句或者幾句話,構成摘要。通過對文檔中句子的得分進行計算,得分代表重要性程度,得分越高代表句子越重要,然后通過依次選取得分高的若干個句子組成摘要,摘要的長度取決於壓縮率。這種方案的好處在於簡單實用,不會完全脫離於文檔本身。換言之,域值比較好判斷,不容易產生完全偏離文章主旨的點。
(2)生成式文本摘要
抽取式文本摘要盡管有其優點,但也可能有着生成摘要不連貫、字數不好控制、目標句主旨不明確等缺點,甚至可以說,其摘要好壞決定於原文。而生成式文本摘要就沒有這樣的問題,生成式摘要方法不是單純地利用原文檔中的單詞或短語組成摘要,而是從原文檔中獲取主要思想后以不同的表達方式將其表達出來。生成式摘要方法為了傳達原文檔的主要觀點,可以重復使用原文檔中的短語和語句,但總體上來說,摘要需要用作者自己的話來概括表達。生成式摘要方法需要利用自然語言理解技術對原文檔進行語法語義的分析,然后對信息進行融合,通過自然語言生成的技術生成新的文本摘要。這也是前面所說的文本摘要技術現階段的研究難點,因為生成式文本摘要是一個端到端的過程,這種技術方案,趨同於翻譯任務和對話任務,從而可以吸收、借鑒翻譯任務和對話任務的成功經驗。
(3)生成-抽取式文本摘要
凡事都還還想着兩全齊美呢,集合抽取式文本摘要和生成式文本摘要的理想技術。
2、按文檔數量分
文本摘要按照文檔數量可以分為單文檔摘要和多文檔摘要兩種。
(1)單文檔摘要
單文檔摘要是指針對單個文檔,對其內容進行抽取總結生成摘要。
(2)多文檔摘要
多文檔摘要是指從包含多份文檔的文檔集合中生成一份能夠概括這些文檔中心內容的摘要。
3、按學習方法分
文本摘要按照學習方法可以分為有監督摘要和無監督摘要兩種。
(1) 有監督摘要
有監督摘要即需要從文件中選取主要內容作為訓練數據,大量的注釋和標簽數據是學習所需要的。這些文本摘要的系統在句子層面被理解為一個二分類問題,其中,屬於摘要的句子稱為正樣本,不屬於摘要的句子稱為負樣本。機器學習中的支持向量機和神經網絡也會用到這樣分類的方法。
(2) 無監督摘要
無監督的文本摘要系統不需要任何訓練數據,它們僅通過對文檔進行檢索即可生成摘要。
四、 文本摘要主要技術
1、 基於統計學的文本摘要方法
早期的文本摘要方式主要是抽取式文本摘要,基於統計學的文本摘要方法就主要用於抽取式文本摘要。基於統計學的文本摘要方法是基於統計特征,如詞頻、句子位置、句子與標題的相似性、句子的相對長度等統計特征來生成摘要的。
(1)基於“詞頻”的文本摘要方法
基於“詞頻”的文本摘要是指使用“詞頻” 這一簡單的文本特征對文檔的重要句子和詞組進行抽取生成摘要。
方法介紹:
在基於“詞頻”的文本摘要方法中,除去停用詞以外,文中出現頻率越高的單詞,其重要性也就越高。根據單詞的詞頻高低分別設置相應的詞權重,詞頻越高,對應的權重也就越高;句子的權重是組成句子單詞的權重之和。然后從文檔中抽取權重高的單詞和句子組成摘要,這就是簡單的基於詞頻的文本摘要方法。
實例演示:
文本:
《乘風破浪的姐姐》現在已經播出到了第2期節目,在初舞台之后,現在大家都對姐姐們的實力是有所了解的了。在看完初舞台之后,很多觀眾就都清楚了哪些姐姐的實力是不錯的,哪些姐姐是比較弱的了。不過呢只看了初舞台就認定姐姐們的實力是片面的了,因為小編發現在這么多“姐姐”中其實有一些姐姐是黑馬選手呀。
像是在最新一期節目中,小編就發現了一位“黑馬”姐姐,而這個人是誰呢?就是王智了,在最新播出的這一期節目中,王智可是成功逆襲了,她這回成功讓觀眾們看到了她,讓導師認可了自己的實力。《浪姐》出現“黑馬”姐姐,初舞台最后一名,這一期卻連連被誇!說到王智,在初舞台的時候小編對她的印象是不深的。
而在這一期節目中呢當小組在排練的時候,王智會反復跟老師強調自己是“最后一名”,這下小編采知道她原來在初舞台的時候是最后一名。王智在初舞台得到了最后一名,這打擊對她來說還是挺大的,在排練的時候大家也可以看出了她的不自信。然而這回她很幸運地遇到了伊能靜,在伊能靜的教學下,最后她可是受到了老師的連連誇贊。
《浪姐》出現“黑馬”姐姐,初舞台最后一名,這一期卻連連被誇!此次節目中姐姐們進行了一段時間的練習,就去進行評測了,而在王智這一組表演完后,最終導師們也給出了評價,在她們三個人這一組中,王智就是被誇得最多的那一個。當在看了王智這次的表演后,最后趙兆老師竟然跟她道歉了。
趙兆老師說昨天很抱歉給她打了最低分,但是今天呢她真的讓他覺得“傻”了,因為他將這首歌演唱得太好了,他覺得王智非常適合這首歌呢!一向比較嚴格的趙兆老師這回對王智很是贊揚,看來是被她的表演給驚喜到了。能夠得到了專業的趙兆老師的贊揚,可見王智的實力那是很棒的呀。
而在趙兆說完后,黃曉明也補充說道“真的是,你一張嘴我們都驚了,真的。”這次可以從導師們的話中了解到王智的進步真的是很大了,她這次選擇了一首合適自己的歌曲,並且有認真努力地去唱好它,就將它很好地詮釋了出來了!這個姐姐其實並不是沒有實力,只是實力沒有一開始就表現出來。她真的是一匹“黑馬”了,當看了這一期節目后,現在觀眾們都在期待着她后面帶來的驚喜了!
思路:
1)將文本分詞,統計一段文本的詞頻(去除停用詞之后的詞頻),得到{詞:詞頻};
2)對文本進行分句;
3)對句子進行打分,統計這個句子中出現的每個詞的詞頻,句子得分=句子中每個詞的詞頻之和;
4)找到得分最高的幾個句子作為摘要。
代碼:
#讀取文件
f=open('乘風破浪的姐姐.txt',encoding='utf-8')
data = f.readlines() # 直接將文件中按行讀到list里,讀取后的文件格式為數組
f.close() # 關
#將文件轉換成字符串
text=""
for line in data:
text += line
print(text)
#清洗數據
import re #導入庫
import jieba
text = re.sub(r'[[0-9]*]',' ',text)#去除類似[1],[2]
text = re.sub(r'\s+',' ',text)#用單個空格替換了所有額外的空格
sentences = re.split('(。|!|\!|\.|?|\?)',text)#分句:re.split(’(。|!|!|.|?|?)’,text) 加括號則保留分句符號如。!,不加則不保留分句符號
print(sentences)
#加載停用詞
def stopwordslist(filepath):
stopwords = [line.strip() for line in open(filepath, 'r', encoding='UTF-8').readlines()]
return stopwords
stopwords = stopwordslist("停用詞1.txt")
#統計文本詞頻
word2count = {} #創建一個空字典
for word in jieba.cut(text): #對整個文本分詞,對每個單詞循環
if word not in stopwords: #檢查單詞是否在stopwords停用詞中,然后再次檢查單詞是否在word2count詞頻key中,不在則把word2count [word]置為1,否則word2count [word] 加1。
if word not in word2count.keys():
word2count[word] = 1
else:
word2count[word] += 1
for key in word2count.keys(): #最后對詞頻歸一化
word2count[key] = word2count[key] / max(word2count.values())
print(word2count)
#計算句子得分
sent2score = {} #創建一個空字典
for sentence in sentences: #對sentences中每個sentence進行循環
for word in jieba.cut(sentence): #將sentence分詞,對每個word循環
if word in word2count.keys(): #使用if檢查word2count.keys()中是否存在該單詞
if len(sentence)<200: #這里我指定計算句子長度小於200的那部分,可以根據需要更改
if sentence not in sent2score.keys(): #再次使用if-else條件,判斷如果句子不存在於sentence2keys()中,則執行 sent2score [sentence] = word2count [word],否則執行 sent2score [sentence] + = word2count [word]
sent2score[sentence] = word2count[word]
else:
sent2score[sentence] += word2count[word]
print(sent2score)
#字典排序
def dic_order_value_and_get_key(dicts, count): #定義函數
# by hellojesson
# 字典根據value排序,並且獲取value排名前幾的key
final_result = []
# 先對字典排序
sorted_dic = sorted([(k, v) for k, v in dicts.items()], reverse=True)
tmp_set = set() # 定義集合 會去重元素
for item in sorted_dic:
tmp_set.add(item[1])
for list_item in sorted(tmp_set, reverse=True)[:count]:
for dic_item in sorted_dic:
if dic_item[1] == list_item:
final_result.append(dic_item[0])
return final_result
#選取句子得分最高的5句話作為摘要選取句子得分最高的5句話作為摘要
final_resul=dic_order_value_and_get_key(sent2score,5)
print(final_resul)
代碼解析即運行結果:
1)讀取文件
2)清洗數據
3)加載停用詞(停用詞是一些不包含什么信息的詞語,以及一些特別高頻的詞)
4)統計文本詞頻
5)計算句子得分
6)字典排序
7)選取句子得分最高的5句話作為摘要
(2)TF-IDF(詞頻−逆向文件頻率)方法
TF-IDF也是一種著名的基於統計學的文本摘要方法,這種方法通過詞頻和逆向文件頻率共同評估一個詞在一個文件集或語料庫中的重要程度,字詞的重要性隨着它在文件中出現的次數成正比增加,但同時會隨着它在語料庫中出現的頻率成反比下降。然后將句子按照重要性得分排序,依據文本摘要的大小依次選取重要性得分從高到低的若干個句子組成摘要。
TF-IDF是Term Frequency -
Inverse Document Frequency的縮寫,即“詞頻-逆文本頻率”。它由TF和IDF兩部分組成,TF就是前面說到的詞頻,關鍵是后面的這個IDF,即“逆文本頻率”如何理解?IDF就是來反映這個詞的重要性的,進而修正僅僅用詞頻表示的詞特征值。概括來講, IDF反映一個詞在所有文本中出現的頻率,如果一個詞在很多的文本中出現,那么它的IDF值應該低;而反過來如果一個詞在比較少的文本中出現,那么它的IDF值應該高;極端情況是一個詞在所有的文本中都出現,那么它的IDF值應該為0。
上面從定性上說明了IDF的作用,那么如何對一個詞的IDF進行定量分析計算呢?這里直接給出一個詞x的IDF的基本公式如下:
其中,N代表語料庫中文本的總數,N(x)代表語料庫中包含詞x的文本總數。
但是在一些特殊情況下上面的公式會有一些小問題,比如某一個生僻詞在語料庫中沒有,則分母為0,那么IDF就沒有意義了。所以我們經常需要對IDF做一些平滑,使語料庫中沒有出現的詞也可以得到一個合適的IDF值。平滑的方法有很多種,最常見的IDF平滑后的公式之一如下:
進而可以計算某一個詞的TF-IDF值:
其中TF(x)指詞x在當前文本中的詞頻。
文本:
文本1: Mydog ate my homework.
文本2: My cat ate my sandwich.
文本3: Adolphin ate the homework.
計算方法:
TF=(該詞在文件中的出現次數)/(在文件中所有字詞的出現次數之和)
IDF=(語料庫中的文件總數)/(包含該詞語的文件數目)
最后計算TF*IDF
步驟:
1)由這3個文本生成的詞典共有9個詞,為:[a, ate, cat, dolphin, dog, homework, my,sandwich, the]
(注意:詞典里面是無序且不能重復的)
2)這9個詞一次表示成One-hot向量的形式如下:
“a"------------>[1 0 0 0 0 0 0 0 0]
“ate”----------->[0 1 0 0 0 0 0 0 0]
…
“the”-------------->[0 0 0 0 0 0 0 0 1]
3)計算各詞的TF
a(1/3);ate(3/3);cat(1/3);dolphin(1/3);dog(1/3);homework(2/3);my(2/3);sandwich(1/3);the(2/3)
注意:這里的"my"最特殊,因為第一文本里有兩個"my",第二個文本里有一個“my",但是第三個文本里沒有"my",所以說”my"的詞條文檔頻率是2/3。
4)計算各詞的IDF
a------>log(3/1)
ate------->log(3/3)
cat--------->log(3/1)
…
my-------->log(3/2)
…
注意:這里的log是以2為底的!!!不要記成以10為底的,以10為底的應該是lg。
代碼:
# -*-coding:utf-8 -*-
# 在詞袋模型中,文檔的特征就是其包含的word,corpus的每一個元素對應一篇文檔
texts = [['human', 'interface', 'computer'],
['survey', 'user', 'computer', 'system', 'response', 'time'],
['eps', 'use', 'interface', 'system'],
['system', 'human', 'system', 'eps'],
['user', 'response', 'time'],
['trees'],
['graph', 'trees'],
['graph', 'minors', 'trees'],
['graph', 'minors', 'survey']]
# 訓練語料的預處理,將原始文本特征表達轉換成詞袋模型對應的系數向量
from gensim import corpora
# from gensim.models.word2vec import Word2Vec
dictionary = corpora.Dictionary(texts) # texts就是若干個被拆成單詞集合的文檔的集合,而dictionary就是把所有單詞取一個set(),並對set中每個單詞分配一個Id號的map
print(dictionary)
# 是把文檔 doc變成一個稀疏向量,[(0, 1), (1, 1)],表明id為0,1的詞匯出現了1次,至於其他詞匯,沒有出現,在這里可以看出set()中computer的id是0,human的id是1...
corpus = [dictionary.doc2bow(text) for text in texts]
print(corpus) # 輸出為[(0, 1), (1, 1), (2, 1)],就表示id為0,1,2,即單詞computer,human,interface,在第一個維度中都出現了一次
# tf-idf的計算
from gensim import models
tfidf = models.TfidfModel(corpus)
print(tfidf)
doc_bow = [(0, 1), (1, 1)]
print(tfidf[doc_bow])
print(tfidf.idfs)
代碼解析即運行結果:
基於統計學的文本摘要方法主要適用於格式相對比較規范的文檔摘要。此類方法比較經典,首次在自動文本摘要方面取得了重大突破,但由於此類方法只是基於句子和單詞本身的表層特征進行統計,未能充分利用詞義關系、詞間關系等特征,所以還有很大的局限性,因此針對這些問題,一些改進的方法隨后被接連提出。
2、基於圖排序的方法
互聯網網頁上的文檔具有較松散且涉及主題較多的結構特點,在此基礎上,研究出了一些專門針對生成網頁文檔摘要的自動摘要技術,就是基於圖排序的文本摘要的方法。
基於圖排序的文本摘要的主要方法是通過把文章分成若干個段落或句子的集合,每個集合對應一個圖的頂點,集合之間的關系對應邊,后通過圖排序的算法(如 PageRank、HITS等)計算各個頂點后的得分,然后依據得分高低生成文本摘要。
(1) PageRank算法
算法來源:
這個要從搜索引擎的發展講起。最早的搜索引擎采用的是分類目錄的方法,即通過人工進行網頁分類並整理出高質量的網站。那時Yahoo 和國內的hao123 就是使用的這種方法。
后來網頁越來越多,人工分類已經不現實了。搜索引擎進入了文本檢索的時代,即計算用戶查詢關鍵詞與網頁內容的相關程度來返回搜索結果。這種方法突破了數量的限制,但是搜索結果不是很好。因為總有某些網頁來回地倒騰某些關鍵詞使自己的搜索排名靠前。
后來,谷歌的兩位創始人,當時還是美國斯坦福大學
(Stanford University) 研究生的佩奇 (Larry Page) 和布林 (Sergey Brin) 開始了對網頁排序問題的研究。他們借鑒了學術界評判學術論文重要性的通用方法,那就是看論文的引用次數。由此想到網頁的重要性也可以根據這種方法來評價。於是就誕生了PageRank的核心思想:
1、如果一個網頁被很多其他網頁鏈接到的話說明這個網頁比較重要,也就是PageRank值會相對較高
2、如果一個PageRank值很高的網頁鏈接到一個其他的網頁,那么被鏈接到的網頁的PageRank值會相應地因此而提高
算法原理:
PageRank算法簡單來說分為兩步:
1、給每個網頁一個PR值(下面用PR值指代PageRank值)
2、通過(投票)算法不斷迭代,直至達到平穩分布為止。
互聯網中的眾多網頁可以看作一個有向圖,下圖是一個簡單的例子:
由於PR值物理意義上為一個網頁被訪問概率,所以初始值可以假設為1/N,其中N為網頁總數。一般情況下,所有網頁的PR值的總和為1。(如果不為1的話也不是不行,最后算出來的不同網頁之間PR值的大小關系仍然是正確的,只是不能直接地反映概率了,而且計算的公式也會有所變化。)
A、B、C三個頁面都鏈入D頁面,則D的PR值將是A、B、C三個頁面PR值的總和:
由於PR值物理意義上為一個網頁被訪問概率,所以初始值可以假設為1/N,其中N為網頁總數。一般情況下,所有網頁的PR值的總和為1。(如果不為1的話也不是不行,最后算出來的不同網頁之間PR值的大小關系仍然是正確的,只是不能直接地反映概率了,而且計算的公式也會有所變化。)
A、B、C三個頁面都鏈入D頁面,則D的PR值將是A、B、C三個頁面PR值的總和:
繼續上面的假設,A除了鏈接到D以外,A還鏈接了C和B,那么當用戶訪問 A 的時候,就有跳轉到 B、C 或者 D 的可能性,跳轉概率均為 1/3。在計算D的PR值時,A的PR值只能投出1/3的票,B的PR值只能投出1/2的票,而C只鏈接到C,所以能投出全票1,所以D的PR值總和應為:
所以可以得出一個網頁的PR值計算公式應為:
其中,Bu是所有鏈接到網頁u的網頁集合,網頁v是屬於集合Bu的一個網頁,L(v)則是網頁v的對外鏈接數(即出度)。
計算出的PR值:
經過幾次迭代后,PR值逐漸收斂穩定。
代碼:
# -*- coding: utf-8 -*-
from pygraph.classes.digraph import digraph
class PRIterator:
__doc__ = '''計算一張圖中的PR值'''
def __init__(self, dg):
self.damping_factor = 0.85 # 阻尼系數,即α
self.max_iterations = 100 # 最大迭代次數
self.min_delta = 0.00001 # 確定迭代是否結束的參數,即ϵ
self.graph = dg
def page_rank(self):
# 先將圖中沒有出鏈的節點改為對所有節點都有出鏈
for node in self.graph.nodes():
if len(self.graph.neighbors(node)) == 0:
for node2 in self.graph.nodes():
digraph.add_edge(self.graph, (node, node2))
nodes = self.graph.nodes()
graph_size = len(nodes)
if graph_size == 0:
return {}
page_rank = dict.fromkeys(nodes, 1.0 / graph_size) # 給每個節點賦予初始的PR值
damping_value = (1.0 - self.damping_factor) / graph_size # 公式中的(1−α)/N部分
flag = False
for i in range(self.max_iterations):
change = 0
for node in nodes:
rank = 0
for incident_page in self.graph.incidents(node): # 遍歷所有“入射”的頁面
rank += self.damping_factor * (page_rank[incident_page] / len(self.graph.neighbors(incident_page)))
rank += damping_value
change += abs(page_rank[node] - rank) # 絕對值
page_rank[node] = rank
print("This is NO.%s iteration" % (i + 1))
print(page_rank)
if change < self.min_delta:
flag = True
break
if flag:
print("finished in %s iterations!" % node)
else:
print("finished out of 100 iterations!")
return page_rank
if __name__ == '__main__':
dg = digraph()
dg.add_nodes(["A", "B", "C", "D", "E"])
dg.add_edge(("A", "B"))
dg.add_edge(("A", "C"))
dg.add_edge(("A", "D"))
dg.add_edge(("B", "D"))
dg.add_edge(("C", "E"))
dg.add_edge(("D", "E"))
dg.add_edge(("B", "E"))
dg.add_edge(("E", "A"))
pr = PRIterator(dg)
page_ranks = pr.page_rank()
print("The final page rank is\n", page_ranks)
代碼解析即運行結果:
PageRank算法的缺點:
1、沒有區分站內導航鏈接。很多網站的首頁都有很多對站內其他頁面的鏈接,稱為站內導航鏈接。這些鏈接與不同網站之間的鏈接相比,肯定是后者更能體現PageRank值的傳遞關系。
2、沒有過濾廣告鏈接和功能鏈接(例如常見的“分享到微博”)。這些鏈接通常沒有什么實際價值,前者鏈接到廣告頁面,后者常常鏈接到某個社交網站首頁。
3、對新網頁不友好。一個新網頁的一般入鏈相對較少,即使它的內容的質量很高,要成為一個高PR值的頁面仍需要很長時間的推廣。
(2)HITS算法
算法來源:
1999年,Jon Kleinberg 提出了HITS算法。作為幾乎是與PageRank同一時期被提出的算法,HITS同樣以更精確的搜索為目的,到今天仍然是一個優秀的算法。
HITS算法的全稱是Hyperlink-Induced Topic Search。在HITS算法中,每個頁面被賦予兩個屬性:hub屬性和authority屬性。同時,網頁被分為兩種:hub頁面和authority頁面。hub,中心的意思,所以hub頁面指那些包含了很多指向authority頁面的鏈接的網頁,比如國內的一些門戶網站;authority頁面則指那些包含有實質性內容的網頁。HITS算法的目的是:當用戶查詢時,返回給用戶高質量的authority頁面。
算法原理:
HITS算法基於下面兩個假設:
1、一個高質量的authority頁面會被很多高質量的hub頁面所指向。
2、一個高質量的hub頁面會指向很多高質量的authority頁面。
什么叫“高質量”,這由每個頁面的hub值和authority值確定。其確定方法為:
1、頁面hub值等於所有它指向的頁面的authority值之和。
2、頁面authority值等於所有指向它的頁面的hub值之和。
HITS衡量1個頁面用A[i]和H[i]值表示,A代表Authority權威值,H代表Hub樞紐值。
大意可理解為網頁的權威值越高,
Hub值就越大。指向網頁的Hub值越大,權威值越高。二者的變量相互權衡。下面一張圖直接明了:
最后結果的輸出是根據頁面的Authority權威值從高到低。
實例分析:
如下有三個網頁A,B,C及其鏈接關系:
1) 構造鄰接矩陣(Adjacent Matrix):
每個節點都有一個Hub分數和Authority分數,所以有一個Hub向量h和Authority向量a,向量的每個元素都初始化為1n√,其中n為節點數:
按如下方式交替更新h和a的值:
過程如下,直到任一向量不再變化(收斂):
需要注意的是每一步都需要對得到的向量進行歸一化:~
HITS算法優缺點:
該算法對於國內搜索引擎而言,具有一定的缺陷,也正是一些缺陷影響了搜索引擎結果排序。從而可以利用HITS算法的缺陷進行網站優化。比如由於HITS的主題漂移,即使你發布的外鏈是不相關的,也會提升網頁主題的推薦度,從而提升網頁關鍵詞排名。其次,HITS算法由於是歸屬於鏈接分析算法,該算法不僅僅是強調外部鏈接的重要性,同樣也強調內部鏈接的重要性,如站內網頁A信任度高,站內網頁B包含內頁A的鏈接,也會間接性提升網頁B的權重,這也是為何很多時候做排名優化的頁面沒有排名,反倒引起了沒有優化的頁面參與了排名。
基於 PageRank、HITS 以及TextRank改進的圖排序算法都是無監督的,它具有簡單、語言弱相關及同時適合單文本和多文本等眾多優點,無需手動標注數據集,相比有監督或半監督的深度學習的文本摘要方法,節省了一定的時間和人力。雖然它具有語言獨立、不需要大量語料訓練、節約時間等優點,但是由於無監督學習方法還沒有充分挖掘和利用數據之間的關系,所以雖然文本摘要的效果和質量有所提升,但是對數據利用不夠充分,存在局限性,之后的基於有監督、半監督學習的文本摘要方法對數據進行了合理利用,相比無監督方法有顯著的性能提升。
3、 基於機器學習的方法
有監督的機器學習方法今年來在自然語言處理領域也得到了極其廣泛的利用。全監督、半監督的機器學習方法通過對數據集的語料進行人工標注,人為地判定划分得到句子的文本特征以及句子重要性的關系模型,在此模型的基礎上,對未被標注的語料進行訓練,預測未被標注語料中句子的重要性排序,然后依據句子重要性排序,依次選取若干句子生成后所需要的文本摘要。
要將自然語言處理的問題轉化成為一個機器學習的問題,首先需要讓機器能夠理解自然語言,所以第一步就是將自然語言轉化為機器可以理解的語言,於是想到將它進行符號數學化,為了能表示多維特征,增強其泛化能力,想到用向量對其進行表示,因此也就引出了對詞向量、句向量的研究。但是詞向量和句向量的生成仍然具有一定的難度,將文本中不同單詞、句子用詞向量或句向量進行唯一的表示,這樣可以方便其在自然語言處理過程中進行各種操作變換和計算。
雖然現在看來將文本中的詞、句轉化成唯一對應的詞、句向量還具有相當大的難度,但由於其在自然語言理解中是關鍵的一步,因此這將是今后研究中仍待解決的問題和重點研究的方向之一。
4、 基於深度學習的方法
深度學習是利用多層感知器結構對非線性信息進行處理的一種學習方法。
目前深度學習方法在對自然語言處理方面的基本方向是通過對文檔上下文進行學習訓練,對於中文文檔,還需要先進行中文分詞處理,然后將文檔中的詞語、句子分別用連續實值向量進行表示,形成的向量稱為嵌入向量,這樣做是為了方便處理文本語義特征,將詞語、句子用向量表示,在處理文本語義特征時,對詞向量、句向量直接進行向量上的計算即可表征它們之間的文本語義關系。
將文本中的詞、句轉化成唯一對應的詞、句向量還具有相當大的難度,但由於其在自然語言理解中是關鍵的一步,因此這將是今后研究中仍待解決的問題和重點研究的方向之一。
Sequence-to-Sequence模型廣泛應用於機器翻譯、語音識別、視頻圖片處理、文本摘要等多個領域。現在新的一些基於深度學習研究文本摘要生成方法的也都是基於這個模型進行的。
基於Seqence-to-Sequence模型的文本摘要需要解決的問題是從原文本到摘要文本的映射問題。先是基於遞歸神經網絡(RNN )的 Seqence-to-Sequence 模型用於文本摘要起到了一定的效果,之后考慮到RNN具有長程依賴性,為了減小長程依賴性,提出了基於長短時記憶網絡(LSTM)的Seqence-to-Sequence模型用於文本摘要的生成。考慮到句子中的某些特定詞或特定詞性的詞更具有影響句子中心意思的作用,引入了廣泛應用於機器翻譯中的注意力機制(attentionmechanism)對句子的不同部分賦予不同的偏重,即權重。
Sequence-to-Sequence Models:
在NLP領域,sequence to sequence模型有很多應用,比如機器翻譯、自動應答機器人等。在看了一些相關的論文后,很多都感覺非常晦澀難懂,
在NLP中最為常見的模型是language model,它的研究對象是單一序列,而sequence to sequence模型同時研究兩個序列。經典的sequence-to-sequence模型由兩個RNN網絡構成,一個被稱為“encoder”,另一個則稱為“decoder”,前者負責把variable-length序列編碼成fixed-length向量表示,后者負責把fixed_length向量表示解碼成variable-length序列輸出,它的基本網絡結構如下:
其中每一個小圓圈代表一個cell,比如GRUcell、LSTMcell、multi-layer-GRUcell、multi-layer-GRUcell等。這里比較直觀的解釋就是,encoder的最終隱狀態c包含了輸入序列的所有信息,因此可以使用c進行解碼輸出。盡管“encoder”或者“decoder”內部存在權值共享,但encoder和decoder之間一般具有不同的一套參數。在訓練sequence-to-sequence模型時,類似於有監督學習模型,最大化目標函數。
Github源代碼解析
整個工程主要使用了四個源文件,seq2seq.py文件是一個用於創建sequence-to-sequence模型的庫,data_utils.py中包含了對原始數據進行預處理的一些操作,seq2seq_model.py用於定義machine
translation模型,translate.py用於訓練和測試所定義的翻譯模型。
由於找到的論文和博客對我來說難度過大,晦澀難懂,時間原因,暫時沒有理解透徹具體的源代碼實現,就不在這里說明。
5、 各方法優缺點分 析
附頁
1、自然語言處理(NLP)方向的部分知名會議:
ACL、EMNLP、NAACL(北美分會)、COLING是NLP領域的四大頂會。前三個會由ACL (Association of Computational Linguistics)主辦,COLING由ICCL (InternationalCommittee
on Computational Linguistics)主辦。
ACL會議:
(Annual Meeting of the Association for Computational Linguistics)是自然語言處理與計算語言學領域最高級別的學術會議,由計算語言學協會主辦,每年一屆。
EMNLP會議:
網址:EMNLP會議
NAACL會議:
網址:NAACL會議
COLING會議;
網址:COLING會議
AAAI會議:
網址:AAAI會議
IJCAI會議:
網址:IJCAI會議
SIGIR會議:
網址:SIGIR會議
INLG會議:
網址:INLG會議
自然語言處理(NLP)方向的部分知名期刊:
1、 ACL
2、 CL
3、 Tacl
4、 Taslp
5、 Tist
參考文獻:
[1]明拓思宇,陳鴻昶.文本摘要研究進展與趨勢[J].網絡與信息安全學報,2018,4(06):1-10.
[2]胡俠,林曄,王燦,林立.自動文本摘要技術綜述[J].情報 志,2010,29(08):144-147.
[3]Pradeepika Verma,Anshul Verma . A Review on Text Summarization Techniques[J]
[4] D.V.SHYPIK,P.I.BIDYUK. A LITERATURE REVIEW OF ABSTRACTIVE SUMMARIZATION METHODS[J]
[5] Abirami Rajasekaran, Dr.R.Varalakshmi. Review on automatic text summarization[J]
[6]連曉瑞.中文文本摘要自動生成方法研究[D].山西大學,2020.
[7]馬駿. 自動文本摘要技術的關鍵問題研究[D].電子科技大學,2020.
[8]龍劍飛.基於無監督集成學習的抽取式文本摘要方法研究[D].大連海事大學,2020.
[9]劉敏哲.面向心理危機問題的兩階段微博短文本摘要方法[D].江西財經大學,2020.
[10]馬雪雯.英文文本標題自動生成方法研究[D].山西大學,2020.
[11]常煜. 基於深度學習文本摘要模型技術的研究與應用[D].電子科技大學,2020.
[12]秦展展.基於深度學習的文本摘要相關技術研究及應用[D].電子科技大學,2020.
[13]大量博客,這里不一一指明
————————————————
版權聲明:本文為CSDN博主「caroline_richboom」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_45154565/article/details/109173981