關(guān)于向量化、TF-IDF的一些事情

如果從一開(kāi)始就給大家說(shuō)什么是向量化再拋出類(lèi)似稀疏矩陣愉择、文本特征等一系列專(zhuān)業(yè)名詞大家必然聽(tīng)的云里霧里不知所云劫乱,那不如就由淺入深從頭開(kāi)始講起我們的到底在干什么(what)我們又是如何實(shí)現(xiàn)的(how)、我們?yōu)槭裁匆@樣實(shí)現(xiàn)(why)這三個(gè)方面開(kāi)始講吧锥涕!

一衷戈、首先我們到底在干什么

身處于互聯(lián)網(wǎng)大數(shù)據(jù)時(shí)代,每個(gè)人层坠、每個(gè)企業(yè)既是數(shù)據(jù)的生產(chǎn)者又是信息的消費(fèi)者殖妇,數(shù)據(jù)的價(jià)值也備受著關(guān)注越來(lái)越多的企業(yè)開(kāi)始去嘗試挖掘數(shù)據(jù)的價(jià)值,越來(lái)越多的用戶也正享受著大數(shù)據(jù)時(shí)代為他們提供的便利破花,大數(shù)據(jù)的獲取谦趣、處理與分析疲吸,已成為提高未來(lái)競(jìng)爭(zhēng)力的關(guān)鍵因素,所以我們要做的就是————數(shù)據(jù)分析

對(duì)于文本的分析有一個(gè)專(zhuān)有名詞叫做 nlp(Natural Language Processing)前鹅,翻譯為自然語(yǔ)言處理磅氨,它是計(jì)算機(jī)科學(xué)、人工智能和語(yǔ)言學(xué)的交叉領(lǐng)域嫡纠,目的是讓計(jì)算機(jī)處理或“理解”自然語(yǔ)言烦租,以執(zhí)行諸如語(yǔ)言翻譯和問(wèn)題回答等任務(wù)。他主要用到三種技術(shù):

▌技術(shù)1:文本嵌入(Text Embeddings)

在傳統(tǒng)的NLP中, 我們把單詞看成是離散符號(hào), 然后用一個(gè)one-hot向量來(lái)表示除盏。向量的維數(shù)是整個(gè)詞庫(kù)中單詞的數(shù)量叉橱。單詞作為離散符號(hào)的問(wèn)題在于, 對(duì)于一個(gè)one-hot向量來(lái)說(shuō),沒(méi)有自然的相似性概念者蠕。因此, 另一種方法是學(xué)習(xí)在向量本身中的編碼相似性窃祝。核心思想是一個(gè)詞的意思是由經(jīng)常出現(xiàn)在其附近的詞給出的。

文本嵌入是字符串的實(shí)值向量表示形式踱侣。我們?yōu)槊總€(gè)單詞構(gòu)建一個(gè)稠密的向量, 這樣做是以便它與出現(xiàn)在相似上下文中的單詞向量相似粪小。對(duì)于大多數(shù)深度NLP任務(wù)而言,詞嵌入被認(rèn)為是一個(gè)很好的起點(diǎn)抡句。它們?cè)试S深度學(xué)習(xí)在較小的數(shù)據(jù)集上有效探膊,因?yàn)樗鼈兺ǔJ巧疃葘W(xué)習(xí)體系結(jié)構(gòu)的第一批輸入,也是NLP中最流行的遷移學(xué)習(xí)方式待榔。

▌技術(shù)2:機(jī)器翻譯

機(jī)器翻譯是語(yǔ)言理解的經(jīng)典測(cè)試逞壁。它由語(yǔ)言分析和語(yǔ)言生成兩部分組成。大型機(jī)器翻譯系統(tǒng)有巨大的商業(yè)用途锐锣,因?yàn)槿蛘Z(yǔ)言是一個(gè)每年400億美元的產(chǎn)業(yè)

▌技術(shù)3:Dialogue 和 Conversations

關(guān)于會(huì)話AI的文章很多腌闯,其中大部分集中在垂直聊天機(jī)器人、messenger平臺(tái)雕憔、商業(yè)趨勢(shì)和創(chuàng)業(yè)機(jī)會(huì)(比如亞馬遜Alexa姿骏、蘋(píng)果Siri、Facebook M斤彼、谷歌助理分瘦、微軟Cortana)。人工智能理解自然語(yǔ)言的能力仍然有限畅卓。因此狸棍,創(chuàng)建完全自動(dòng)化的開(kāi)放域會(huì)話助理仍然是一個(gè)開(kāi)放的挑戰(zhàn)

我們要用到的技術(shù)就是文本嵌入(Text Embeddings)核蘸!

數(shù)據(jù)分析師Seth Grimes曾指出“80%的商業(yè)信息來(lái)自非結(jié)構(gòu)化數(shù)據(jù),主要是文本數(shù)據(jù)”,這一表述可能夸大了文本數(shù)據(jù)在商業(yè)數(shù)據(jù)中的占比硅则,但是文本數(shù)據(jù)的蘊(yùn)含的信息價(jià)值毋庸置疑

如果原始文本是數(shù)據(jù),那么文本挖掘就是信息,NLP就是知識(shí),也就是語(yǔ)法和語(yǔ)義的關(guān)系沐绒。下面的金字塔表示了這種關(guān)系:

金字塔

二、1旺坠、我們又是如何實(shí)現(xiàn)的呢

我們要分析的原始數(shù)據(jù)乔遮、符號(hào)文字序列不能直接傳遞給算法,因?yàn)樗鼈兇蠖鄶?shù)要求具有固定長(zhǎng)度的數(shù)字矩陣特征向量取刃,而不是具有可變長(zhǎng)度的原始文本文檔蹋肮。為解決這個(gè)問(wèn)題,scikit-learn提供了從文本內(nèi)容中提取數(shù)字特征的最常見(jiàn)方法璧疗,即:

令牌化(tokenizing) 對(duì)每個(gè)可能的詞令牌分成字符串并賦予整數(shù)形的id坯辩,例如通過(guò)使用空格和標(biāo)點(diǎn)符號(hào)作為令牌分隔符。

統(tǒng)計(jì)(counting) 每個(gè)詞令牌在文檔中的出現(xiàn)次數(shù)崩侠。

標(biāo)準(zhǔn)化漆魔、歸一化(normalizing) 在大多數(shù)的文檔 / 樣本中,可以減少重要的次令牌的出現(xiàn)次數(shù)的權(quán)重却音。

在該方案中改抡,特征和樣本定義如下:

每個(gè)單獨(dú)的令牌發(fā)生頻率(歸一化或不歸零)被視為一個(gè)特征

給定文檔中所有的令牌頻率向量被看做一個(gè)多元sample樣本系瓢。

因此阿纤,文本的集合可被表示為矩陣形式,每行對(duì)應(yīng)一條文本八拱,每列對(duì)應(yīng)每個(gè)文本中出現(xiàn)的詞令牌(如單個(gè)詞)阵赠。

矩陣

我們稱向量化是將文本文檔集合轉(zhuǎn)換為數(shù)字集合特征向量的普通方法。 這種特殊思想(令牌化肌稻,計(jì)數(shù)和歸一化)被稱為 Bag of Words 或 “Bag of n-grams” 模型,也就是詞袋模型匕荸。 文檔由單詞出現(xiàn)來(lái)描述爹谭,同時(shí)完全忽略文檔中單詞的相對(duì)位置信息。

詞袋模型

可能大家還是聽(tīng)得有些迷糊榛搔,那我舉個(gè)稍微平易的例子為大家鞏固一下理解吧诺凡。我們可以把待分析的文本、原始數(shù)據(jù)想象成為一個(gè)拼裝完成的‘樂(lè)高積木’践惑,現(xiàn)在我們要分析這個(gè)樂(lè)高積木腹泌,然后我們把它一塊一塊拆下來(lái),拆除完成之后原本完整的積木變成了一塊塊單獨(dú)的零件尔觉,我們?yōu)椴鹣碌牧慵患患陌凑疹?lèi)型編上序號(hào)并且按照順序排列好凉袱,這就完成了第一步———分詞標(biāo)記(tokenizing

樂(lè)高(整)

【a零件0號(hào),b零件1號(hào),c零件2號(hào),d零件3號(hào),e零件4號(hào),f零件5號(hào),g零件6號(hào),...........】

積木零件

然后我們要統(tǒng)計(jì)拆除下來(lái)每個(gè)零件的個(gè)數(shù),這就是關(guān)鍵的第二部——統(tǒng)計(jì)(counting)

【a零件0號(hào):61,b 零件1號(hào):5 ,c 零件2號(hào):6 ,d 零件3號(hào):99 ,e 零件4號(hào):7 ,f 零件5號(hào):5 號(hào),g 零件6號(hào) :2,...........】

統(tǒng)計(jì)后的積木零件

但是有許多零件是常常出現(xiàn)但是并不是特別重要的或者太大太小總之我們想要的,我們就要去除對(duì)他們的統(tǒng)計(jì)专甩,這就是第三部分————歸一化(normalizing)钟鸵,我們即將要探討的TF-IDF模型就是實(shí)現(xiàn)歸一化的一種方法。

**【b 零件1號(hào):5 ,c 零件2號(hào):6 ,e 零件4號(hào):7 ,f 零件5號(hào):5 ,g 零件6號(hào) :2,...........】 **

現(xiàn)在大家是否對(duì)向量化的過(guò)程有了更為具象的認(rèn)識(shí)呢,好了重頭戲終于來(lái)了涤躲,到底什么是TF-IDF

TF-IDF(term frequency-inverse document frequency)詞頻-逆文件頻率棺耍。在處理文本時(shí),如何將文字轉(zhuǎn)化為模型可以處理的向量呢种樱?TF-IDF就是這個(gè)問(wèn)題的解決方案之一蒙袍。字詞的重要性與其在文本中出現(xiàn)的頻率成正比(TF),與其在語(yǔ)料庫(kù)中出現(xiàn)的頻率成反比(IDF)嫩挤。

TF就是詞頻左敌,詞語(yǔ)在文章中出現(xiàn)的次數(shù)。

TF

IDF叫做逆文檔頻率俐镐,有些詞可能在文本中頻繁出現(xiàn)矫限,但并不重要,也即信息量小佩抹,如is,of,that這些單詞叼风,或是中文中的是、這棍苹、那无宿,這些單詞在語(yǔ)料庫(kù)中出現(xiàn)的頻率也非常大,我們就可以利用這點(diǎn)枢里,降低其權(quán)重孽鸡。

IDF

TF-IDF則是將上面的TF-IDF相乘就得到了的綜合參數(shù)

TF-IDF
對(duì)數(shù)函數(shù)

二、2.具體又是怎么實(shí)現(xiàn)的呢

首先請(qǐng)安裝sklearn栏豺,Scikit-learn是一個(gè)用于數(shù)據(jù)挖掘和數(shù)據(jù)分析的簡(jiǎn)單且有效的工具彬碱,它是基于Python的機(jī)器學(xué)習(xí)模塊,基于BSD開(kāi)源許可證奥洼。

pip install scikit-learn

我們會(huì)用到Scikit-Learn中的兩個(gè)類(lèi):CountVectorizerTfidfTransformer巷疼。

CountVectorizer類(lèi) 實(shí)現(xiàn)了 tokenization (詞語(yǔ)切分)和 counting (統(tǒng)計(jì)詞頻)

TfidfTransformer類(lèi) 實(shí)現(xiàn)歸一化


from sklearn.feature_extraction.text import TfidfTransformer

from sklearn.feature_extraction.text import CountVectorizer

corpus = [

    'This is the first document.',

    'This is the second second document.',

    'And the third one.',

    'Is this the first document?',

]

# 該類(lèi)會(huì)將文本中的詞語(yǔ)轉(zhuǎn)換為詞頻矩陣,矩陣元素a[i][j] 表示j詞在i類(lèi)文本下的詞頻

vectorizer = CountVectorizer()

# 計(jì)算每個(gè)出現(xiàn)詞的詞頻

X = vectorizer.fit_transform(corpus)

# 打印詞袋中所有文本特征值

print(vectorizer.get_feature_names())

# 打印詞頻矩陣

print(X.toarray())

# 該類(lèi)會(huì)統(tǒng)計(jì)每個(gè)詞語(yǔ)的tf-idf權(quán)值

transformer = TfidfTransformer()

# 計(jì)算詞頻矩陣X的TF-IDF值

tfidf = transformer.fit_transform(X)

# 將tf-idf矩陣抽取出來(lái)灵奖,元素a[i][j]表示j詞在i類(lèi)文本中的tf-idf權(quán)重

print(tfidf.toarray())

運(yùn)行結(jié)果如下:

運(yùn)行結(jié)果

請(qǐng)注意在sklearn中計(jì)算tfidf可能與教科書(shū)中給的公式有所不同嚼沿,我們輸入一個(gè)擁有三個(gè)特征,3*6的矩陣瓷患,手動(dòng)計(jì)算一遍他的權(quán)重骡尽,然后對(duì)比計(jì)算機(jī)給出的結(jié)果

矩陣

他的默認(rèn)公式如下:

默認(rèn)公式

tf表示特征出現(xiàn)的次數(shù)

nd表示文檔的總數(shù)

df是包含特征 t 的文檔數(shù)

對(duì)于第一個(gè)[3,0,1]有:

計(jì)算過(guò)程

最后要正則化,使其適應(yīng)歐幾里得標(biāo)準(zhǔn):

歐幾里得
歸一化結(jié)果

下面是計(jì)算機(jī)計(jì)算的權(quán)重:

計(jì)算機(jī)計(jì)算結(jié)果

如果要提取中文關(guān)鍵詞則需要引用jieba庫(kù)擅编,對(duì)語(yǔ)料庫(kù)進(jìn)行分詞攀细。

中文

運(yùn)行結(jié)果如下:

運(yùn)行結(jié)果

jieba庫(kù)中內(nèi)置了TF-IDF算法,可以直接計(jì)算權(quán)重并輸出topkeywords,比較推薦使用辨图!

jieba內(nèi)置算法
jieba輸出關(guān)鍵詞

四班套、我們?yōu)槭裁匆@樣做

關(guān)鍵詞提取技術(shù)是自然語(yǔ)言處理的重要基礎(chǔ)。隨著信息科學(xué)技術(shù)的快速發(fā)展以及互聯(lián)網(wǎng)的普及故河,網(wǎng)絡(luò)文本資源呈幾何級(jí)數(shù)不斷增長(zhǎng)吱韭。面對(duì)更新日益頻繁和規(guī)模龐大的文本數(shù)據(jù),如何高效準(zhǔn)確地實(shí)現(xiàn)關(guān)鍵詞提取成為影響信息檢索系統(tǒng)性能的關(guān)鍵鱼的。

TF-IDF簡(jiǎn)單快速理盆,結(jié)果符合實(shí)際情況使它成為了經(jīng)典的權(quán)重算法但是他也有缺點(diǎn),單純以詞頻衡量詞的重要性凑阶,不夠全面猿规,有時(shí)重要的詞出現(xiàn)的次數(shù)不多,而且對(duì)詞的出現(xiàn)位置沒(méi)有設(shè)置宙橱,出現(xiàn)位置靠前的詞和出現(xiàn)位置靠后的詞的重要性一樣姨俩,可能對(duì)全文的第一段或者每一段的第一句給予較大的權(quán)重。

對(duì)經(jīng)典的 TFIDF 方法進(jìn)行改進(jìn) 通過(guò)了解中文自然語(yǔ)言的結(jié)構(gòu)和中文關(guān)鍵詞的特點(diǎn)师郑,結(jié)合關(guān)鍵詞的頻率环葵、位置關(guān)系以及詞性等特征,從而提高關(guān)鍵詞的提取性能宝冕。

目前國(guó)內(nèi)學(xué)者提出了以下幾種關(guān)鍵詞提取的改進(jìn)辦法:

提出一種綜合多因素的關(guān)鍵詞提取方法张遭。該方法綜合網(wǎng)頁(yè)中詞語(yǔ)的詞長(zhǎng)、詞性以及位置信息進(jìn)行綜合加權(quán)地梨。

利用詞語(yǔ)之間的語(yǔ)義的連貫性菊卷,結(jié)合詞頻、位置等特征宝剖,提出一種基于詞匯鏈的網(wǎng)頁(yè)關(guān)鍵詞提取方法洁闰。

通過(guò)自然語(yǔ)言表現(xiàn)出的復(fù)雜網(wǎng)絡(luò)特征,根據(jù)語(yǔ)言網(wǎng)絡(luò)的“小世界”特性诈闺,提出基于語(yǔ)言網(wǎng)絡(luò)的關(guān)鍵詞提取方法渴庆。該方法借用復(fù)雜網(wǎng)絡(luò)的特性,將詞語(yǔ)之間的鏈接關(guān)系和位置信息相融合雅镊,從而提高關(guān)鍵詞的抽取性能。

四刃滓、參考資料:

給出一些我學(xué)習(xí)過(guò)程中的參考資料仁烹,希望能與大家交流學(xué)習(xí)

英文文檔:https://scikit-learn.org/stable/modules/feature_extraction.html#common-vectorizer-usage

中文文檔:https://github.com/apachecn/sklearn-doc-zh/blob/master/docs/0.21.3/39.md

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市咧虎,隨后出現(xiàn)的幾起案子卓缰,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件征唬,死亡現(xiàn)場(chǎng)離奇詭異捌显,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)总寒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)扶歪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人摄闸,你說(shuō)我怎么就攤上這事善镰。” “怎么了年枕?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵炫欺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我熏兄,道長(zhǎng)品洛,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任摩桶,我火速辦了婚禮桥状,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘典格。我一直安慰自己岛宦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布耍缴。 她就那樣靜靜地躺著砾肺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪防嗡。 梳的紋絲不亂的頭發(fā)上变汪,一...
    開(kāi)封第一講書(shū)人閱讀 51,763評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音蚁趁,去河邊找鬼裙盾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛他嫡,可吹牛的內(nèi)容都是我干的番官。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼钢属,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼徘熔!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起淆党,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤酷师,失蹤者是張志新(化名)和其女友劉穎讶凉,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體山孔,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡懂讯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了台颠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片褐望。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蓉媳,靈堂內(nèi)的尸體忽然破棺而出譬挚,到底是詐尸還是另有隱情,我是刑警寧澤酪呻,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布减宣,位于F島的核電站,受9級(jí)特大地震影響玩荠,放射性物質(zhì)發(fā)生泄漏漆腌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一阶冈、第九天 我趴在偏房一處隱蔽的房頂上張望闷尿。 院中可真熱鬧,春花似錦女坑、人聲如沸填具。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)劳景。三九已至,卻和暖如春碉就,著一層夾襖步出監(jiān)牢的瞬間盟广,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工瓮钥, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留筋量,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓碉熄,卻偏偏與公主長(zhǎng)得像桨武,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子锈津,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容