如果從一開(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)
【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,...........】
但是有許多零件是常常出現(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ù)。
IDF叫做逆文檔頻率俐镐,有些詞可能在文本中頻繁出現(xiàn)矫限,但并不重要,也即信息量小佩抹,如is,of,that這些單詞叼风,或是中文中的是、這棍苹、那无宿,這些單詞在語(yǔ)料庫(kù)中出現(xiàn)的頻率也非常大,我們就可以利用這點(diǎn)枢里,降低其權(quán)重孽鸡。
TF-IDF則是將上面的TF-IDF相乘就得到了的綜合參數(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):CountVectorizer和TfidfTransformer巷疼。
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é)果如下:
請(qǐng)注意在sklearn中計(jì)算tfidf可能與教科書(shū)中給的公式有所不同嚼沿,我們輸入一個(gè)擁有三個(gè)特征,3*6的矩陣瓷患,手動(dòng)計(jì)算一遍他的權(quán)重骡尽,然后對(duì)比計(jì)算機(jī)給出的結(jié)果
他的默認(rèn)公式如下:
tf表示特征出現(xiàn)的次數(shù)
nd表示文檔的總數(shù)
df是包含特征 t 的文檔數(shù)
對(duì)于第一個(gè)[3,0,1]有:
最后要正則化,使其適應(yīng)歐幾里得標(biāo)準(zhǔn):
下面是計(jì)算機(jī)計(jì)算的權(quán)重:
如果要提取中文關(guān)鍵詞則需要引用jieba庫(kù)擅编,對(duì)語(yǔ)料庫(kù)進(jìn)行分詞攀细。
運(yùn)行結(jié)果如下:
jieba庫(kù)中內(nèi)置了TF-IDF算法,可以直接計(jì)算權(quán)重并輸出topkeywords,比較推薦使用辨图!
四班套、我們?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