文本挖掘從小白到精通(一):語料、向量空間和模型的概念

2020-12-13 人人都是產品經理

本文給大家介紹幾個在使用gensim進行文本挖掘所需了解的基本概念和術語,並提供一些簡單的用法示例。enjoy~

筆者最近在梳理自己的文本挖掘知識結構,藉助gensim、sklearn、keras等庫的文檔做了些擴充,希望在梳理自身知識體系的同時也能對想學習文本挖掘的朋友有一點幫助,這是筆者寫該系列的初衷。

本文會介紹幾個在使用gensim進行文本挖掘所需了解的基本概念和術語,並提供一些簡單的用法示例。

在更高層次上,gensim是一種通過檢查詞彙模式(或更高級別的結構,如語句或文檔)來發現文檔語義結構(Semantic Structure)的工具。

gensim通過語料庫——一組文本文檔,並在語料庫中生成文本的向量表示(Vector Representation of the Text)來實現這一點。 然後,文本的向量表示可用於訓練模型——它是用於創建不同的文本數據(蘊含語義)表示的算法。

這三個概念是理解gensim如何工作的關鍵,所以讓我們花一點時間來解釋它們的含義。與此同時,我們將通過一個簡單的例子來說明每個概念。

一 、語料(Corpus)

一個語料庫是數字文檔的集合(A Collection of Digital Documents)。 這個集合是gensim的輸入,它將從中推斷文檔的結構或主題。從語料庫中推斷出的潛在結構(Latent Structure)可用於將主題分配給先前不存在於僅用於訓練的語料庫中的新文檔。 出於這個原因,我們也將此集合稱為訓練語料庫(Training Corpus)。

這個過程不需要人工幹預(比如手動給文檔打標籤)——因為主題分類是無監督的(Unsupervised)(https://en.wikipedia.org/wiki/Unsupervised_learning)。

對於筆者用於示例的語料庫,有12個文檔,每個文檔只有一個語句:

這只是一個很小的語料庫,其實你可以用其他的語料庫進行替代,比如:微信上的文章、微博博文,或者新聞標題等。

收集語料庫之後,通常會進行一系列的文本預處理。 作為示例,為了簡潔起見,筆者僅刪除語料庫中的停用詞和在語料庫中只出現一次的詞彙。 在此過程中,筆者將進行分詞操作,將文檔分解為由詞彙組成的列表(在本例中使用空格作為分隔符)。

在繼續之前,筆者希望將語料庫中的每個詞彙與唯一的整數ID相關聯。 我們可以使用gensim.corpora.Dictionary這個類來完成,這個詞典定義了筆者之前預處理後的語料中的詞彙。

from gensim import corpora

dictionary = corpora.Dictionary(processed_corpus)

print(dictionary)

Dictionary(14 unique tokens: [『創新』, 『商業』, 『知識圖譜』, 『技術』, 『數據』]…)

因為筆者給定的語料較小, 只有14個不同的詞彙在這個 Dictionary中。 對於較大的語料庫,詞典中會包含成千上萬的詞彙,數量龐大。

二 、 向量空間(Vector Space)

為了推斷語料庫中的潛在結構(Latent Structure),我們需要一種可用於數學操作(比如,加減乘除等運算)的文檔表示方法。一種方法是將每個文檔表示為向量,有各種用於創建文檔的向量表示的方法,其中一個簡單的方法是詞袋模型(Bag-of-Words Model)。

在詞袋模型下,每個文檔由包含字典中每個單詞的頻率計數的向量表示。例如:給定一個包含詞彙[『咖啡』,』牛奶』,』糖果』,』勺子』]的字典,那麼,一個由字符串』咖啡 牛奶 糖果 勺子』組成的文檔可以用向量表示為[2 ,1,0,0],其中向量的元素(按順序)對應文檔中出現的「咖啡」,「牛奶」,「糖」和「勺子」。向量的長度是字典中的詞彙數。詞袋模型的一個主要特性是它完全忽略了編碼文檔(the Encoded Document )中的詞彙順序,這就是詞袋模型的由來。

我們處理過的語料庫中有14個不同的詞彙,這意味著語料庫中的每個文檔將由這個14維向量的詞袋模型來表示,我們可以使用字典將分詞後的文檔轉換為14維向量。由此,我們可以看到這些ID對應的詞彙:print(dictionary.token2id)

{『創新』: 0, 『商業』: 1, 『知識圖譜』: 2, 『技術』: 3, 『數據』: 4, 『金融』: 5, 『分析』: 6, 『知識』: 7, 『管理』: 8, 『一文』: 9, 『關鍵』: 10, 『企業』: 11, 『智能』: 12, 『轉型』: 13}

例如,假設我們想要對「知識圖譜為企業轉型助力」這個語句進行向量化(請注意,該語句不在我們原來的語料庫中)。 我們可以使用dictionary的doc2bow方法為該語句創建詞袋錶示,該方法返回詞彙計數的稀疏表示:

每個元組中的第一個元素對應字典中的詞彙ID,第二個條目對應於該詞彙的計數。

請注意,原始語料庫中沒有出現「為」、「助力」,因此它們將不包含於新生成的向量表示中。 另請注意,此向量僅包含實際出現在文檔中的詞彙。 因為任何給定文檔只包含字典中許多單詞中的幾個單詞,所以未參與向量化的詞彙會直接被剔除,以節省空間。

我們可以將整個原始語料庫轉換為向量列表:

請注意,雖然此列表完全保存在內存中,但在大多數的應用場景,你需要更具伸縮性的解決方案(A More Scalable Solution)。幸運的是,gensim允許流式迭代器。 後面筆者會談及。

三 、 模型(Model)

現在,我們已經對測試語料庫進行了向量化,我們可以開始使用models對其進行轉換了。 我們使用模型作為抽象術語,指的是從一個文檔表示到另一個文檔表示的轉換。 在gensim中,文檔表示為向量,因而模型可以被認為是兩個向量空間之間的轉換。 從訓練語料庫中學習這種轉換的細節。

一個簡單的模型示例是TF-IDF。 TF-IDF模型將向量從詞袋錶示(Bag-of-Words Representation)轉換為向量空間,其中頻率計數根據語料庫中每個單詞的相對稀有度(the relative rarity of each word in the corpus)進行加權。

這是一個簡單的例子。 讓我們初始化tf-idf模型,在測試語料庫上進行訓練,然後對字符串「知識圖譜這種技術是企業轉型的利器」進行轉換:

TF-IDF模型再次返回元組列表,每個元組的第一個元素是詞彙ID,第二個條目是TF-IDF加權值。 注意,對應於「知識圖譜」的ID(在訓練語料庫中出現10次)的加權值低於對應於「轉型」的ID(在訓練語料庫中出現2次)權重值。

gensim提供了許多不同的模型/轉換。 有關詳細信息,請看筆者後續的文章。

#專欄作家

蘇格蘭折耳喵(微信公眾號:Social Listening與文本挖掘),人人都是產品經理專欄作家,數據PM一隻,擅長數據分析和可視化表達,熱衷於用數據發現洞察,指導實踐。

本文原創發布於人人都是產品經理。未經許可,禁止轉載。

題圖來自Unsplash,基於CC0協議

相關焦點

  • 文本挖掘從小白到精通(二):料庫和詞向量空間
    寫筆者最近在梳理自己的文本挖掘知識結構,藉助gensim、sklearn、keras等庫的文檔做了些擴充,會陸陸續續介紹文本向量化、tfidf、主題模型、word2vec,既會涉及理論,也會有詳細的代碼和案例進行講解,希望在梳理自身知識體系的同時也能對想學習文本挖掘的朋友有一點幫助,這是筆者寫該系列的初衷
  • 文本挖掘從小白到精通(二)---語料庫和詞向量空間
    ,藉助gensim、sklearn、keras等庫的文檔做了些擴充,會陸陸續續介紹文本向量化、tfidf、主題模型、word2vec,既會涉及理論,也會有詳細的代碼和案例進行講解,希望在梳理自身知識體系的同時也能對想學習文本挖掘的朋友有一點幫助,這是筆者寫該系列的初衷。
  • 文本挖掘從小白到精通(十二)--- 7種簡單易行的文本特徵提取方法
    |【文本挖掘系列教程】:文本特徵提取是文本挖掘中非常重要的一個環節,無論是聚類、分類還是相似度任務,都需要提取出較好的文本特徵,如此才能取得較好的結果。因為這裡的HashingVectorizer是把word通過hash對應到一個下標上,一開始的n_features如果你自己不指定,它自己也是指定好的,而且它是個Count,只依賴每一行自己的特徵的情況,和別人無關;而且它的輸出的列的數量又是一定的,也就是每個輸出格式一定。這樣完全可以文件不在內存中,我就一點點讀到內存再處理就好了。但我沒有使用過,無法說常調參的參數是哪些。
  • 文本挖掘從小白到精通(六)---word2vec的訓練、使用和可視化
    、tfidf、主題模型、word2vec,既會涉及理論,也會有詳細的代碼和案例進行講解,希望在梳理自身知識體系的同時也能對想學習文本挖掘的朋友有一點幫助,這是筆者寫該系列的初衷。同時,word2vec訓練向量空間模型的速度也比以往的方法都快。Word2vec作為基於神經網絡的機器學習算法的「新浪潮」中的成員得以廣泛使用,通常被稱為「深度學習」(儘管word2vec本身的層數相當淺)。
  • 文本挖掘從小白到精通(十一)--- 不需設定聚類數的DBSCAN
    ,藉助gensim、sklearn、keras等庫的文檔做了些擴充,會陸陸續續介紹文本向量化、tfidf、主題模型、word2vec,既會涉及理論,也會有詳細的代碼和案例進行講解,希望在梳理自身知識體系的同時也能對想學習文本挖掘的朋友有一點幫助,這是筆者寫該系列的初衷。
  • 詞向量模型解讀
    在採用One-Hot特徵時,可以對特徵向量進行刪減,詞向量則不能。生成詞向量的方法有很多,這些方法都依照一個思想:任一詞的含義可以用它的周邊詞來表示。生成詞向量的方法即詞嵌入技術可分為:基於共現矩陣的方法和基於語言模型的方法,如下圖所示。本文將對其中SVD、NNLM與Word2vec方法進行詳細介紹。
  • 乾貨丨文本挖掘二三式
    第二式:文本挖掘怎麼挖使用機器學習的方法進行文本挖掘,需要將文本分為訓練集和測試集兩部分,使用訓練集數據進行訓練和評估,如果模型評估效果較好,那麼使用測試集數據進行測試。主要的處理過程有:文本預處理、特徵選擇、特徵加權、模型算法(模式發現)、性能評估等。
  • ​文本挖掘從小白到精通(二十一)如何使用造好的輪子快速實現各項文本挖掘任務
    text = '''文本挖掘主要有哪些功能達觀數據擁有多年的自然語言處理技術經驗,掌握從詞語短串到篇章分析各層面的分析技術,在此基礎之上提供以下文本挖掘功能:* 涉黃涉政檢測:對文本內容做涉黃涉政檢測,滿足相應政策要求;* 垃圾評論過濾:在論壇發言或用戶評論中,過濾文本中的垃圾廣告,提升文本總體質量;* 情感分析:對用戶評論等文本內容做情感分析
  • 英文文本挖掘預處理流程總結
    比如「countries」和"country","wolf"和"wolves",我們期望是有一個詞。後面的預處理中,我們會重點講述第三點和第四點的處理。2. 英文文本挖掘預處理一:數據收集這部分英文和中文類似。
  • fastText,智慧與美貌並重的文本分類及向量化工具
    fastText開源、免費、輕量級,適用於文本分類和文本向量化表示場景,運行於標準硬體環境。裁剪壓縮過的模型甚至可以輕鬆跑在行動裝置上。 fastText最驚豔的地方在於,和最前沿深度神經網絡模型相比,它在分類精度等指標毫不遜色的情況下,把訓練和推斷速度降低了幾個數量級!
  • 文本深度表示模型—word2vec&doc2vec詞向量模型
    可能理想情況下「麥克」和「話筒」的表示應該是完全一樣的,但是由於有些人會把英文名「邁克」也寫成「麥克」,導致「麥克」一詞帶上了一些人名的語義,因此不會和「話筒」完全一致。將 word映射到一個新的空間中,並以多維的連續實數向量進行表示叫做「Word Represention」 或 「Word Embedding」。
  • 文本挖掘入門課:主題模型讓文本數據處理更幸福
    本文介紹了一個叫做主題模型的文本挖掘方法。這是提取主題時一項極其有用的技術,在應對自然語言處理問題的時候也非常常見。提示:強烈建議你閱讀這篇文章以對奇異值分解(SVD)和UMAP等概念進行了解(https://www.analyticsvidhya.com/blog/2018/08/dimensionality-reduction-techniques-python/)。
  • 從詞嵌入到含義嵌入:概覽含義向量表示方法
    由於在詞嵌入方法中,每個單詞表示為語義空間中的一個向量,因此它將多義詞的不同義項合併為單一表示,這就導致了意義合併缺陷(meaning conflation deficiency):詞嵌入無法有效捕捉同一單詞的不同義項,即使這些義項都在訓練語料中出現過。語義上無關的單詞,被多義詞拉扯到一起(見下圖)。
  • 不用專業詞典,電力領域文本挖掘有多難?
    在電力領域,文本挖掘技術應用也在逐步落地推進,尤其在輔助業務優化、助力精益管理和推動服務轉型等方面展示出有著越來越重要的作用,是新環境下電力企業智能化發展所需。目前,在文本挖掘技術類別中,各行業應用較為普遍的是文本分類、自動文摘以及文本聚類等。當下,電網公司對業務數據也主要是集中在結構化數據的統計和分析,而這些方法無法直接應用在非結構化文本數據中,更無法對其中隱含的價值規律進行深度挖掘。
  • 文本深度表示模型——word2vec&doc2vec詞向量模型
    向量的距離可以用最傳統的歐氏距離來衡量,也可以用 cos 夾角來衡量。用這種方式表示的向量,「麥克」和「話筒」的距離會遠遠小於「麥克」和「天氣」。可能理想情況下「麥克」和「話筒」的表示應該是完全一樣的,但是由於有些人會把英文名「邁克」也寫成「麥克」,導致「麥克」一詞帶上了一些人名的語義,因此不會和「話筒」完全一致。
  • 數據挖掘之文本分類技術,最詳細的原理解讀
    在理解文本信息的問題上,由於信息量的龐大,如果僅憑人工方式來收集和挖掘文本數據,不僅需要消耗大量的人力和時間,而且也是很難實現的。於是,實現自動文本分類就顯得尤其重要,它是文本信息挖掘的基本功能,也成為了處理和組織文本數據的核心技術。
  • 【學術論文】基於Transformer模型的中文文本自動校對研究
    本文首次將其應用於中文文本自動校對任務,實驗結果表明該模型可以較好地解決中文文本自動校對中的遠距離信息丟失問題,進一步提升校對性能。1.1 中文文本自動校對的國內外研究現狀國外最早於20世紀60年代開始展開英文文本自動校對研究,發展至今,已取得突破性進展,擁有高準確率和高召回率的校對方法也已經應用到實際產品當中[4]。
  • 文本挖掘從小白到精通(十六)--- 像使用scikit-learn一樣玩轉BERT
    為此,我們要不厭其煩的嘗試各種文本特徵抽取方法:TF-IDF、n-gram、word2vec、將其連結到外部知識庫、詞幹化、歸一化乃至分詞。。。自從有了BERT,文本特徵抽取的手工活就少多了!但是,總覺得少了些啥~本教程的目的是用BERT和Sci-kit Learn建立一個最簡單的句子級分類的例子。
  • 大數據分析中的向量表示方法
    在當今大數據積累和應用推動下,機器學習方法有了質的變化,圍繞最基礎的、最重要的大數據的表示和模型方法理解掌握大數據技術是非常重要的策略。       去年,我在編寫《網際網路大數據處理技術與應用》一書時也意識到向量在大數據分析挖掘中的重要性,書中也特意圍繞著向量的相關處理方法展開。
  • 專欄|用 Word2vec 輕鬆處理新金融風控場景中的文本類數據
    通過這種方式,把單詞映射到一個高維向量空間,藉此可以計算單詞之間的距離,即計算語義相似性。在 word2vec 中使用最重要的兩個模型分別是 CBOW 和 Skip-gram 模型,前者是利用詞的上下文預測當前的單詞,後者則是利用當前詞來預測上下文。