TF-IDF演算法簡介
http://cnn237111.blog.51cto.com/2359144/1423795
TF-IDF演算法全稱為term frequency–inverse document frequency。TF就是term frequency的縮寫,意為詞頻。IDF則是inverse document frequency的縮寫,意為逆文件頻率。
該演算法在資訊處理中通常用來抽取關鍵詞。比如,對一個文章提取關鍵詞作為搜尋詞,就可以採用TF-IDF演算法。
要找出一篇文章中的關鍵詞,通常的思路就是,就是找到出現次數最多的詞。如果某個詞很重要,它應該在這篇文章中多次出現。於是,我們進行"詞頻"(Term Frequency,縮寫為TF)統計。
但是通常,一篇中文的文章中,都會有很多沒有實際意義的詞,比如“的”,“是”,“了”,這類詞是最常用的詞,稱為停用詞,稱它們為停用詞是因為在文字處理過程中如果遇到它們,則立即停止處理,將其扔掉。將這些詞扔掉減少了索引量,增加了檢索效率,並且通常都會提高檢索的效果。停用詞主要包括英文字元、數字、數學字元、標點符號及使用頻率特高的單漢字等。
當過濾掉所有的停用詞後,剩下的都是實際意義的詞,但也不能簡單的認為那個詞出現的次數多就是關鍵詞。比如在一篇如何組裝電腦的文章中,出現“CPU”,“主機板”等關鍵詞和出現“說明書”的次數一樣多,但很顯然,CPU,主機板等關鍵詞,更能確定這個文章的特性。也就是說,“CPU”,“主機板”等關鍵詞比“說明書”這個關鍵詞更重要,需要排在前面。所以我們就需要一個權重係數,用來調整各個關鍵詞的重要性。如果一個詞很少見,但是它在某個文章中反覆出現多次,那麼可以認為這個詞反應了這個文章的特性,可以把它作為關鍵詞。在資訊檢索中,這個權重非常重要,它決定了關鍵詞的重要度,這個權重叫做"逆文件頻率"(Inverse Document Frequency,縮寫為IDF),它的大小與一個詞的常見程度成反比。
在知道了詞頻和權重之後,兩者相乘,就得到一個詞的TF-IDF值,某個詞對文章的重要性越高,它的TF-IDF值就越大。所以,排在最前面的幾個詞,就是這篇文章的關鍵詞。
因此TF-IDF演算法的主要工作就是計算出TF*IDF值最大的那幾個詞,作為文章的關鍵詞。
計算TF*IDF值需要分成以下幾步:
首先需要切詞,也就是說把一個文章切成一個個可以作為關鍵字的詞語。由於中文不像英文那樣,可以通過空格切詞,因此到目前為止,中文分詞包括三種方法:
1)基於字串匹配的分詞;
2)基於理解的分詞;
3)基於統計的分詞。
目前還無法證明哪一種方法更準確,第一種方法是最早出現也是最成熟的演算法,演算法複雜度也是最低的。切詞首先需要一個語料庫,然後根據這個庫,匹配其中的詞語。目前較流行很多,但是支援.NET平臺的不多見,主要有中科院計算所ICTCLAS系統和盤古分詞,功能強大自帶詞典,同時支援使用者詞典,並且支援.NET開發者呼叫。
分詞完成後,就可以計算詞頻。詞頻就是某歌詞在文章中出現的次數,由於文章有長短,為了規格化詞頻的,取詞頻為一個相對值,而不是絕對值。這個相對值可以有2種計算方法。
一種
詞頻(TF)=某關鍵詞出現次數/文章中關鍵詞總數
或者
詞頻(TF)=某關鍵詞出現次數/文章中出現最多次數關鍵詞的出現次數
接著,計算逆文件頻率(IDF)。計算IDF需要一個語料庫,它的計算公式很簡單
逆文件頻率(IDF)=log(語料庫文件總數/(包含該詞的文件數+1)),之所以要+1是為了防止分母為0。由此可見,當一個詞被越多的文件包含,則IDF值就越小,也就是所這個詞很常見,不是最重要的能區分文章特性的關鍵詞。
最後將TF和IDF相乘就得到TF-IDF值。
前面提到的盤古分詞的詞庫中,已經包含了IDF的值,因此使用這個分詞工具,也可以計算出各個關鍵詞的TF-IDF值,實現排序。
舉個例子,如下一個文章。
標題為清華科研團隊重大突破 人類有望“餓死”癌細胞
京華時報訊(記者張曉鴿)昨天,清華大學宣佈:該校醫學院顏寧教授研究組在世界上首次解析了人源葡萄糖轉運蛋白GLUT1的晶體結構,初步揭示了它的工作機制以及相關疾病的致病機理,在人類攻克癌症、糖尿病等重大疾病的探索道路上邁出了極為重要的一步。未來,人類有望“餓死”癌細胞。
昨天的英國《自然》雜誌以長文的形式正式刊發了這一成果。據介紹,葡萄糖是地球上各種生物最重要、最基本的能量來源,也是人腦和神經系統最主要的供能物質。據估算,大腦平均每天消耗約120克葡萄糖,占人體葡萄糖總消耗量的一半以上。葡萄糖代謝的第一步就是進入細胞,但親水的葡萄糖溶於水,而疏水的細胞膜就像一層油,因此,葡萄糖自身無法穿過細胞膜進入到細胞內發揮作用,必須依靠轉運蛋白這個“運輸機器”來完成。葡萄糖轉運蛋白鑲嵌於細胞膜上,如同在疏水的細胞膜上開了一扇一扇的門,能夠將葡萄糖從細胞外轉運到細胞內。
顏寧教授介紹稱,葡萄糖轉運蛋白GLUT1幾乎存在於人體的每一個細胞,是大腦、神經系統、肌肉等組織器官中最重要的葡萄糖轉運蛋白,對維持人體正常生理功能極為重要。這種轉運蛋白的功能完全缺失將致人死亡,功能部分缺失會導致大腦萎縮、智力低下、發育遲緩等疾病。
同時,這種轉運蛋白在癌細胞的新陳代謝中也發揮著重要功能。癌細胞需要消耗超量葡萄糖才能維持其生長擴增,轉運蛋白GLUT1在細胞中顯著過量往往意味著有癌變發生。
“因此,如能研究清楚GLUT1的組成、結果和工作機理,就有可能通過調控它實現葡萄糖轉運的人工干預。”顏寧教授說,這樣既可以增加正常細胞的葡萄糖供應,達到治療相關疾病的目的,又可以通過阻斷葡萄糖供應“餓死”癌細胞。
使用C#程式碼呼叫盤古分詞的dll,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
static void Main( string [] args)
{
string text = ReadFile( @"D:\系統桌面\ar1.txt" );
PanGu.Segment.Init();
Segment segment = new Segment();
//呼叫分詞方法
ICollection<WordInfo> words = segment.DoSegment(text);
Dictionary< string , double > d = new Dictionary< string , double >();
foreach ( var word in words)
{
//統計頻率
float tf = ( float )System.Text.RegularExpressions.Regex.Matches(text, word.Word).Count / ( float )words.Count;
if (!d.ContainsKey(word.Word))
d[word.Word] = tf * word.Frequency;
}
//排序
var lst = d.Select(x => x.Key).OrderByDescending(x => d[x]).ToList();
//打印出前5個關鍵詞
lst.Take(5).ToList().ForEach(x => Console.WriteLine(x));
}
|
結果為:
用這幾個關鍵詞去百度裡面查詢,得到的查詢結果為:
TF-IDF演算法的優點是簡單快速,結果比較符合實際情況。缺點是,單純以"詞頻"衡量一個詞的重要性,不夠全面,有時重要的詞可能出現次數並不多。而且,這種演算法無法體現詞的位置資訊,出現位置靠前的詞與出現位置靠後的詞,都被視為重要性相同,這是不正確的。(一種解決方法是,對全文的第一段和每一段的第一句話,給予較大的權重。)
當通過TF-IDF演算法找出文章的關鍵字後,可以運用到一些具體的場景。比如:根據關鍵字找出相似的文章。
參考文件:
http://zh.wikipedia.org/wiki/TF-IDF
相關推薦
elasticsearch 筆記十五:相關度評分TF&IDF演算法簡介
演算法介紹 relevance score ,就是計算出一個索引中的文字,與搜尋文字,他們之間的關係,它們之間的關聯匹配度是由Elasticsearch使用的 term frequency/inverse document frequency 演算法,簡稱TF/IDF演算法
TF-IDF演算法簡介
http://cnn237111.blog.51cto.com/2359144/1423795 TF-IDF演算法全稱為term frequency–inverse document frequency。TF就是term frequency的縮寫,意為詞頻。IDF則是i
elasticsearch 筆記十五:相關度評分TF&IDF演算法簡介
演算法介紹 relevance score ,就是計算出一個索引中的文字,與搜尋文字,他們之間的關係,它們之間的關聯匹配度是由Elasticsearch使用的 term frequency/inverse document frequency 演算法,簡稱TF/IDF演算法 Term f
python 基於TF-IDF演算法的關鍵詞提取
import jiaba.analyse jieba.analyse.extract_tags(content, topK=20, withWeight=False, allowPOS=()) content:為輸入的文字 topK:為返回tf-itf權重最大的關鍵詞,預設值為20個詞 wit
關鍵詞提取演算法—TF/IDF演算法
關鍵詞提取演算法一般可分為有監督學習和無監督學習兩類。 有監督的關鍵詞提取方法可以通過分類的方式進行,通過構建一個較為完善的詞表,然後判斷每個文件與詞表中的每個詞的匹配程度,以類似打標籤的方式,達到關鍵詞提取的效果。優點是可以獲得較高的精度,缺點是需要大批量的標註資料,並且要對詞表進行人
《數學之美》第11章—如何確定網頁和查詢的相關性(TF-IDF演算法)
文章目錄 如何查詢關於“原子能的應用”的網頁? 大致思路 問題描述 解決過程 一、使用“總詞頻” 二、加入IDF權重 三、IDF概念的理論支
關鍵詞提取/關鍵字提取之TF-IDF演算法
TF-IDF(term frequency–inverse document frequency)是一種用於資訊檢索與資訊探勘的常用加權技術。TF的意思是詞頻(Term - frequency), IDF的意思是逆向檔案頻率(inverse Document frequency)。TF-IDF是一
ElasticSearch教程——lucene的相關度評分TF&IDF演算法以及向量空間模型演算法
1、boolean model 類似and這種邏輯操作符,先過濾出包含指定term的doc query "hello world" --> 過濾 --> hello / world / hello & world bool --> must/mu
TF-IDF演算法詳解
最近在做一些NLP的研究,由於也是第一次做這個東西,其實還是發現很多有意思的東西。 相信很多做過NLP的人都應該接觸過提取關鍵詞的這個功能。現在有很多可以使用的第三方工具包可以很容易的來實現這個功能,比如snowNLP,jieba等,但是我們還是要做到知其然,知其所以然
elasticsearch核心知識---52.倒排索引組成結構以及實現TF-IDF演算法
首先實現了採用java 簡易的實現TF-IDF演算法package matrixOnto.Ja_9_10_va; import com.google.common.base.Preconditions; import org.nutz.lang.Strings; impo
情感分析之詞袋模型TF-IDF演算法(三)
在這篇文章中,主要介紹的內容有:1、將單詞轉換為特徵向量2、TF-IDF計算單詞關聯度在之前的文章中,我們已經介紹過一些文字的預處理和分詞。這篇文章中,主要介紹如何將單詞等分類資料轉成為數值格式,以方便我們後面使用機器學習來訓練模型。一、將單詞轉換為特徵向量詞袋模型(bag-
TF-IDF演算法抽取中文內容的主題關鍵詞
db.ini # db [db] db_port = 3306 db_user = user db_host = localhost db_pass = pwd db_database = db main.py # -*-coding:utf-8-
第六章(1.3)自然語言處理實戰——使用tf-idf演算法實現簡單的文字聚類
一、原理 使用jieba切詞 用td-idf計算文字的詞頻和逆文件詞頻 排序選出最重要的2個或3個詞作為這段文字的id 具有相同id的文字被歸為一類 二、使用python實現簡單的文字聚類,其中使用了tf-idf演算法,jieba分詞,把相似的文字聚合在
解析TF-IDF演算法原理:關鍵詞提取,自動摘要,文字相似度計算
Abstract:TF-IDF演算法是一種常用的詞頻統計方法,常被用於關鍵詞提取、文字摘要、文章相似度計算等。 TF-IDF的演算法思路 TF詞頻(Text Frequency):統計出現次數最多的詞 IDF逆文件頻率(Inverse Document Frequ
TF-IDF演算法自動提取關鍵詞
前言 關鍵詞提取可以是說是NLP中比較常見研究方向,這個涉及到資料探勘、文字處理、資訊檢索等很多計算機前沿領域。但今天我們就瞭解一個簡單的演算法來提取關鍵詞。 那麼我們該如何實現計算機自動提取關鍵詞呢? 讓我們從一個例項開始講起。假定現在有一篇長文《中國的
基於TF-IDF演算法的短標題關鍵詞提取
 
自然語言處理系列之TF-IDF演算法
TF-IDF演算法 TF-IDF(詞頻-逆文件頻率)演算法是一種統計方法,用以評估一字詞對於一個檔案集或一個語料庫中的其中一份檔案的重要程度。字詞的重要性隨著它在檔案中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。該演算法在資料探勘、文字
TF-IDF演算法實現關鍵詞抽取
TF-IDF演算法是關鍵詞提取演算法中基礎,並且有效的一種演算法,實現簡單效果比較明顯,在使用中非常廣泛。假設現在有一批“短文字“,比如很多條一句話的新聞。現在需要提取這些一句話新聞的關鍵詞。我們可以採取tf-idf演算法來實現。TF-IDF(term frequen
ES 解決字串的排序問題以及相關度評分TF&IDF演算法
如何將一個field索引倆次來解決字串的排序問題 如果對一個stringfield進行排序,結果往往不準確,因為分詞後是多個單詞,再排序就不是我們想要的結果了 通常的解決方案是,將一個string fi
自然語言處理之TF-IDF演算法
假定現在有一篇長文《中國的蜜蜂養殖》,我們準備用計算機提取它的關鍵詞。 一個容易想到的思路,就是找到出現次數最多的詞。如果某個詞很重要,它應該在這篇文章中多次出現。於是,我們進行"詞頻"(Term Frequency,縮寫為TF)統計。 結果你肯定猜到了,出現次數最多的詞是----"的"、"是"、"在"--