Gensim庫簡介
機器學習算法需要使用向量化后的數據進行預測,對於文本數據來說,因為算法執行的是關於矩形的數學運算,這意味着我們必須將字符串轉換為向量。從數學的角度看,向量是具有大小和方向的幾何對象,不需過多地關注概念,只需將向量化看作一種將單詞映射到數學空間的方法,同時保留其本身蘊含的信息。
Gensim是世界上最大的NLP/信息檢索Python庫之一,兼具內存高效性和可擴展性。Gensim的可擴展性體現為它采用了Python內置的生成器和迭代器進行流式數據處理,所以數據集事實上並未完全加載到內存中。Gensim的主要特性有內存無關、潛在語義分析的多核實現、潛在Dirichlet分布、隨即投影、分層Dirichlet過程,Word2Vec深度學習,以及在計算集群上運行LSA和LDA的能力。
1、數據預處理
本文通過處理部分新聞文本數據的test.txt,使用spacy和Gensim模塊包對該文件進行去除停用詞等預處理如下:
import spacy
from spacy.lang.zh.stop_words import STOP_WORDS
import pandas as pd
from gensim import corpora
from gensim import models
import gensim
#去除停用詞
def stopwords(article):
nlp = spacy.load("zh_core_web_sm")
texts = []
doc = nlp(article)
for w in doc:
if w.is_stop == False:
texts.append(w.text)
return texts
在對文本進行預處理后,分別使用詞袋、TF-IDF和n-gram三種方法向量化,並分別輸出成三份txt。下面討論向量的幾種表示方法:
2、詞袋
詞袋是將句子轉換成向量的直接手段,這種方法在信息檢索領域非常常用。詞袋模型的一個重要的特征是,他是一種無序的文檔表示,唯一的信息是詞頻,所以我們在使用這種方法的時候無法判斷哪個單詞會先出現,這樣可能導致空間信息以及語義信息的丟失,當然這在一些對詞順序並不重要的應用場景中並不重要。
代碼:
#詞袋
def cidai(txts):
dictionary = corpora.Dictionary(txts)
corpus = [dictionary.doc2bow(word) for word in txts]
corpus = str(corpus)
##將分好的語料庫存儲在本地
with open (r"E:\1\Study\大三下\自然語言處理\作業4\bag.txt",'w') as f:
f.write(corpus)
結果:
3、TF-IDF
詞袋向量化的方法僅僅有詞語出現的詞頻的信息,但是有些詞頻很高的詞語卻並不一定是關鍵詞,因此我們可以用反向文檔詞頻的方法來減少無效詞的干擾,因此TF-IDF的向量表示方法便被提出。TF-IDF是一種將句子轉換成向量的直觀方法,它被廣泛用於搜索引擎的算法。其中,TF表示一個詞在文檔中出現的詞頻,IDF表示單詞在文檔中的重要性。
代碼:
#TF-IDF
def TfIdf(txts):
doc = []
tfidf = models.TfidfModel(txts)
for document in tfidf[txts]:
doc.append(document)
doc = str(doc)
with open (r"E:\1\Study\大三下\自然語言處理\作業4\TF_IDF.txt",'w') as f:
f.write(doc)
結果:
4、n-gram
前面兩種表示方法假設字與字之間是相互獨立的,沒有考慮它們之間的順序。於是引入n-gram( n元語法)的概念。n-gram指文本中n個相鄰單詞的連續序列,它是從一個句子中提取n個連續的字的集合,可以獲取到字的前后信息。然而,詞表的維度隨着語料庫的增長而膨脹,n-gram詞序列隨語料庫增長呈指數型膨脹,更加快。
代碼:
#n-grams
def N_g(txts):
bigram = gensim.models.Phrases(txts)
txts = [bigram[line] for line in txts]
dictionary = corpora.Dictionary(txts)
#print("token:",dictionary.token2id)
corpus = [dictionary.doc2bow(text) for text in txts]
corpus = str(corpus)
with open (r"E:\1\Study\大三下\自然語言處理\作業4\n_gram.txt",'w') as f:
f.write(corpus)
結果:
5、總結
本文介紹了Gensim庫以及使用不同向量的幾種表示方法(詞袋、TF-IDF和n-grams)。計算機支持多種表示方式來變換單詞,TF-IDF和詞袋便是其中的兩種向量表示方法。Gensim是一個Python包,它為我們提供了生成各種向量表示的方法,這些向量將會作為各種機器學習和信息檢索算法的輸入。
更高級的預處理技術還包括創建n-grams、固定搭配和刪除低頻詞,能幫助我們獲得更好的效果。同時,向量的概念也是構成自然語言處理基礎的很大因素之一。