關鍵詞提取演算法
『壹』 怎麼在一堆圖片中抓取關鍵詞
可以用抽取方法。
有監督無監督抽取方法:無監督關鍵詞提取方法主要有三類:基於統計特徵的關鍵詞提取(TF,TF-IDF);基於詞圖模型的關鍵詞提取(PageRank,TextRank);基於主題模型的關鍵詞提取(LDA)基於統計特徵的關鍵詞提取演算法的思想是利用文檔中詞語的統計信息抽取文檔的關鍵詞;基於詞圖模型的關鍵詞提取首先要構建文檔的語言網路圖,然後對語言進行網路圖分析,在這個圖上尋找具有重要作用的詞或者短語,這些短語就是文檔的關鍵詞;基於主題關鍵詞提取演算法主要利用的是主題模型中關於主題分布的性質進行關鍵詞提取;
將關鍵詞抽取過程視為二分類問題,先提取出候選詞,然後對於每個候選詞劃定標簽,要麼是關鍵詞,要麼不是關鍵詞,然後訓練關鍵詞抽取分類器。當新來一篇文檔時,提取出所有的候選詞,然後利用訓練好的關鍵詞提取分類器,對各個候選詞進行分類,最終將標簽為關鍵詞的候選詞作為關鍵詞。
『貳』 textrank演算法實現工具有哪些
extRank演算法基於PageRank,用於為文本生成關鍵字和摘要。其論文是:
Mihalcea R, Tarau P. TextRank: Bringing order into texts[C]. Association for Computational Linguistics, 2004.
先從PageRank講起。
PageRank
PageRank最開始用來計算網頁的重要性。整個www可以看作一張有向圖圖,節點是網頁。如果網頁A存在到網頁B的鏈接,那麼有一條從網頁A指向網頁B的有向邊。
構造完圖後,使用下面的公式:
S(Vi)是網頁i的中重要性(PR值)。d是阻尼系數,一般設置為0.85。In(Vi)是存在指向網頁i的鏈接的網頁集合。Out(Vj)是網頁j中的鏈接存在的鏈接指向的網頁的集合。|Out(Vj)|是集合中元素的個數。
PageRank需要使用上面的公式多次迭代才能得到結果。初始時,可以設置每個網頁的重要性為1。上面公式等號左邊計算的結果是迭代後網頁i的PR值,等號右邊用到的PR值全是迭代前的。
舉個例子:
上圖表示了三張網頁之間的鏈接關系,直覺上網頁A最重要。可以得到下面的表:
結束\起始
A
B
C
A
0
1
1
B
0
0
0
C
0
0
0
橫欄代表其實的節點,縱欄代表結束的節點。若兩個節點間有鏈接關系,對應的值為1。
根據公式,需要將每一豎欄歸一化(每個元素/元素之和),歸一化的結果是:
結束\起始
A
B
C
A
0
1
1
B
0
0
0
C
0
0
0
上面的結果構成矩陣M。我們用matlab迭代100次看看最後每個網頁的重要性:
?
1
2
3
4
5
6
7
8
9
10
11
M = [0 1 1
0 0 0
0 0 0];
PR = [1; 1 ; 1];
for iter = 1:100
PR = 0.15 + 0.85*M*PR;
disp(iter);
disp(PR);
end
運行結果(省略部分):
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
......
95
0.4050
0.1500
0.1500
96
0.4050
0.1500
0.1500
97
0.4050
0.1500
0.1500
98
0.4050
0.1500
0.1500
99
0.4050
0.1500
0.1500
100
0.4050
0.1500
0.1500
最終A的PR值為0.4050,B和C的PR值為0.1500。
如果把上面的有向邊看作無向的(其實就是雙向的),那麼:
?
1
2
3
4
5
6
7
8
9
10
11
M = [0 1 1
0.5 0 0
0.5 0 0];
PR = [1; 1 ; 1];
for iter = 1:100
PR = 0.15 + 0.85*M*PR;
disp(iter);
disp(PR);
end
運行結果(省略部分):
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.....
98
1.4595
0.7703
0.7703
99
1.4595
0.7703
0.7703
100
1.4595
0.7703
0.7703
依然能判斷出A、B、C的重要性。
使用TextRank提取關鍵字
將原文本拆分為句子,在每個句子中過濾掉停用詞(可選),並只保留指定詞性的單詞(可選)。由此可以得到句子的集合和單詞的集合。
每個單詞作為pagerank中的一個節點。設定窗口大小為k,假設一個句子依次由下面的單片語成:
w1, w2, w3, w4, w5, ..., wn
w1, w2, ..., wk、w2, w3, ...,wk+1、w3, w4, ...,wk+2等都是一個窗口。在一個窗口中的任兩個單詞對應的節點之間存在一個無向無權的邊。
基於上面構成圖,可以計算出每個單詞節點的重要性。最重要的若干單詞可以作為關鍵詞。
使用TextRank提取關鍵短語
參照「使用TextRank提取關鍵詞」提取出若干關鍵詞。若原文本中存在若干個關鍵詞相鄰的情況,那麼這些關鍵詞可以構成一個關鍵短語。
例如,在一篇介紹「支持向量機」的文章中,可以找到三個關鍵詞支持、向量、機,通過關鍵短語提取,可以得到支持向量機。
使用TextRank提取摘要
將每個句子看成圖中的一個節點,若兩個句子之間有相似性,認為對應的兩個節點之間有一個無向有權邊,權值是相似度。
通過pagerank演算法計算得到的重要性最高的若干句子可以當作摘要。
論文中使用下面的公式計算兩個句子Si和Sj的相似度:
分子是在兩個句子中都出現的單詞的數量。|Si|是句子i的單詞數。
『叄』 jieba分詞詳解
「結巴」分詞是一個Python 中文分片語件,參見 https://github.com/fxsjy/jieba
可以對中文文本進行 分詞、詞性標注、關鍵詞抽取 等功能,並且支持自定義詞典。
本文包括以下內容:
1、jieba分詞包的 安裝
2、jieba分詞的 使用教程
3、jieba分詞的 工作原理與工作流程
4、jieba分詞所涉及到的 HMM、TextRank、TF-IDF等演算法介紹
可以直接使用pip來進行安裝:
sudo pip install jieba
或者
sudo pip3 install jieba
關鍵詞抽取有兩種演算法,基於TF-IDF和基於TextRank:
jieba分詞有三種不同的分詞模式: 精確模式、全模式和搜索引擎模式 :
對應的,函數前加l即是對應得到list結果的函數:
精確模式是最常用的分詞方法,全模式會將句子中所有可能的詞都列舉出來,搜索引擎模式則適用於搜索引擎使用。具體的差別可在下一節工作流程的分析中詳述。
在上述每個函數中,都有名為HMM的參數。這一項表示是否在分詞過程中利用HMM進行新詞發現。關於HMM,本文附錄中將簡述相關知識。
另外分詞支持自定義字典,詞典格式和 dict.txt 一樣,一個詞佔一行;每一行分三部分:詞語、詞頻(可省略)、詞性(可省略),用空格隔開,順序不可顛倒。
具體使用方法為:
關鍵詞抽取的兩個函數的完整參數為:
可以通過
來打開或關閉並行分詞功能。
個人感覺一般用不到,大文件分詞需要手動實現多進程並行,句子分詞也不至於用這個。
jieba分詞主要通過詞典來進行分詞及詞性標注,兩者使用了一個相同的詞典。正因如此,分詞的結果優劣將很大程度上取決於詞典,雖然使用了HMM來進行新詞發現。
jieba分詞包整體的工作流程如下圖所示:
下面將根據源碼詳細地分析各個模塊的工作流程。
在之後幾節中,我們在 藍色的方框 中示範了關鍵步驟的輸出樣例或詞典文件的格式樣例。在本節中都採用類似的表示方式。
jieba分詞中,首先通過對照典生成句子的 有向無環圖 ,再根據選擇的模式不同,根據詞典 尋找最短路徑 後對句子進行截取或直接對句子進行截取。對於未登陸詞(不在詞典中的詞)使用 HMM 進行新詞發現。
詞典的格式應為
word1 freq1 word_type1
word2 freq2 word_type2
…
其中自定義用戶詞典中詞性word_type可以省略。
詞典在其他模塊的流程中可能也會用到,為方便敘述,後續的流程圖中將會省略詞典的初始化部分。
圖b演示了搜索引擎模式的工作流程,它會在精確模式分詞的基礎上,將長詞再次進行切分。
在這里我們假定讀者已經了解HMM相關知識,如果沒有可先行閱讀下一章內容中的HMM相關部分或者跳過本節。
在jieba分詞中,將字在詞中的位置B、M、E、S作為隱藏狀態,字是觀測狀態,使用了詞典文件分別存儲字之間的表現概率矩陣(finalseg/prob_emit.py)、初始概率向量(finalseg/prob_start.py)和轉移概率矩陣(finalseg/prob_trans.py)。這就是一個標準的 解碼問題 ,根據概率再利用 viterbi演算法 對最大可能的隱藏狀態進行求解。
詞性分析部分與分詞模塊用了同一個基礎的分詞器,對於詞典詞的詞性,將直接從詞典中提取,但是對於新詞,詞性分析部分有一個 專屬的新詞及其詞性的發現模塊 。
用於詞性標注的HMM模型與用於分詞的HMM模型相似,同樣將文字序列視為可見狀態,但是隱藏狀態不再是單單的詞的位置(B/E/M/S),而變成了詞的位置與詞性的組合,如(B,v)(B,n)(S,n)等等。因此其初始概率向量、轉移概率矩陣和表現概率矩陣和上一節中所用的相比都要龐大的多,但是其本質以及運算步驟都沒有變化。
具體的工作流程如下圖所示。
jieba分詞中有兩種不同的用於關鍵詞抽取的演算法,分別為TextRank和TF-IDF。實現流程比較簡單,其核心在於演算法本身。下面簡單地畫出實現流程,具體的演算法可以參閱下一章內容。
TextRank方法默認篩選詞性,而TF-IDF方法模型不進行詞性篩選。
在本章中,將會簡單介紹相關的演算法知識,主要包括用於新詞發現的 隱馬爾科夫模型 和 維特比演算法 、用於關鍵詞提取的 TextRank 和 TF-IDF 演算法。
HMM即隱馬爾科夫模型,是一種基於馬爾科夫假設的統計模型。之所以為「隱」,是因為相較於馬爾科夫過程HMM有著未知的參數。在世界上,能看到的往往都是表象,而事物的真正狀態往往都隱含在表象之下,並且與表象有一定的關聯關系。
其中,S、O分別表示狀態序列與觀測序列。
如果讀者還對這部分內容心存疑問,不妨先往下閱讀,下面我們將以一個比較簡單的例子對HMM及解碼演算法進行實際說明與演示,在讀完下一小節之後再回來看這些式子,或許能夠恍然大悟。
下面以一個簡單的例子來進行闡述:
假設小明有一個網友小紅,小紅每天都會在朋友圈說明自己今天做了什麼,並且假設其僅受當天天氣的影響,而當天的天氣也只受前一天天氣的影響。
於小明而言,小紅每天做了什麼是可見狀態,而小紅那裡的天氣如何就是隱藏狀態,這就構成了一個HMM模型。一個HMM模型需要有五個要素:隱藏狀態集、觀測集、轉移概率、觀測概率和初始狀態概率。
即在第j個隱藏狀態時,表現為i表現狀態的概率。式中的n和m表示隱藏狀態集和觀測集中的數量。
本例中在不同的天氣下,小紅要做不同事情的概率也不同, 觀測概率 以表格的形式呈現如下:
其中
除此之外,還需要一個初始狀態概率向量π,它表示了觀測開始時,即t=0時,隱藏狀態的概率值。本例中我們指定 π={0,0,1} 。
至此,一個完整的 隱馬爾科夫模型 已經定義完畢了。
HMM一般由三類問題:
概率計算問題 ,即給定 A,B,π 和隱藏狀態序列,計算觀測序列的概率;
預測問題 ,也成解碼問題,已知 A,B,π 和觀測序列,求最優可能對應的狀態序列;
學習問題 ,已知觀測序列,估計模型的 A,B,π 參數,使得在該模型下觀測序列的概率最大,即用極大似然估計的方法估計參數。
在jieba分詞中所用的是解碼問題,所以此處對預測問題和學習問題不做深入探討,在下一小節中我們將繼續以本節中的例子為例,對解碼問題進行求解。
在jieba分詞中,採用了HMM進行新詞發現,它將每一個字表示為B/M/E/S分別代表出現在詞頭、詞中、詞尾以及單字成詞。將B/M/E/S作為HMM的隱藏狀態,而連續的各個單字作為觀測狀態,其任務即為利用觀測狀態預測隱藏狀態,並且其模型的 A,B,π 概率已經給出在文件中,所以這是一個標準的解碼問題。在jieba分詞中採用了 Viterbi演算法 來進行求解。
Viterbi演算法的基本思想是: 如果最佳路徑經過一個點,那麼起始點到這個點的路徑一定是最短路徑,否則用起始點到這點更短的一條路徑代替這段,就會得到更短的路徑,這顯然是矛盾的;從起始點到結束點的路徑,必然要經過第n個時刻,假如第n個時刻有k個狀態,那麼最終路徑一定經過起始點到時刻n中k個狀態里最短路徑的點 。
將時刻t隱藏狀態為i所有可能的狀態轉移路徑i1到i2的狀態最大值記為
下面我們繼續以上一節中的例子來對viterbi演算法進行闡述:
小明不知道小紅是哪裡人,他只能通過小紅每天的活動來推斷那裡的天氣。
假設連續三天,小紅的活動依次為:「睡覺-打游戲-逛街」,我們將據此計算最有可能的天氣情況。
表示第一天為雨天能夠使得第二天為晴天的概率最大(也就是說如果第二天是晴天在最短路徑上的話,第一天是雨天也一定在最短路徑上,參見上文中Viterbi演算法的基本思想)
此時已經到了最後的時刻,我們開始回溯。
其計算過程示意圖如下圖所示。
)的路徑。
TF-IDF(詞頻-逆文本頻率)是一種用以評估字詞在文檔中重要程度的統計方法。它的核心思想是,如果某個詞在一篇文章中出現的頻率即TF高,並且在其他文檔中出現的很少,則認為這個詞有很好的類別區分能力。
其中:
TextRank是一種用以關鍵詞提取的演算法,因為是基於PageRank的,所以先介紹PageRank。
PageRank通過互聯網中的超鏈接關系確定一個網頁的排名,其公式是通過一種投票的思想來設計的:如果我們計算網頁A的PageRank值,那麼我們需要知道哪些網頁鏈接到A,即首先得到A的入鏈,然後通過入鏈給網頁A進行投票來計算A的PR值。其公式為:
其中:
d為阻尼系數,取值范圍為0-1,代表從一定點指向其他任意點的概率,一般取值0.85。
將上式多次迭代即可直到收斂即可得到結果。
TextRank演算法基於PageRank的思想,利用投票機制對文本中重要成分進行排序。如果兩個詞在一個固定大小的窗口內共同出現過,則認為兩個詞之間存在連線。
公式與PageRank的基本相同。多次迭代直至收斂,即可得到結果。
在jieba分詞中,TextRank設定的詞窗口大小為5,將公式1迭代10次的結果作為最終權重的結果,而不一定迭代至收斂。