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、固定搭配和洗掉低頻詞,能幫助我們獲得更好的效果,同時,向量的概念也是構成自然語言處理基礎的很大因素之一,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/274351.html
標籤:其他
上一篇:國家統計局資料采集
