全新Gensim4.0程式碼實戰(02)-主題模型和文件表示
阿新 • • 發佈:2021-01-28
介紹轉換並在一個demo語料庫上演示它們的使用。
import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
在本教程中,將展示如何將文件從一種矢量表示轉換為另一種矢量表示。 此過程有兩個目標:
要找出語料庫中的隱藏結構,請發現單詞之間的關係,並使用它們以一種新穎的(希望)更具語義的方式描述文件。
使文件表示更加緊湊。 這既提高了效率(新的表示消耗了更少的資源)又提高了效率(忽略了邊際資料趨勢,降低了噪聲)。
建立語料庫
首先,我們需要建立一個語料庫。此步驟與上一教程中的步驟相同。如果完成了,請隨時跳到下一部分。
from collections import defaultdict from gensim import corpora documents = [ "Human machine interface for lab abc computer applications", "A survey of user opinion of computer system response time", "The EPS user interface management system", "System and human system engineering testing of EPS", "Relation of user perceived response time to error measurement", "The generation of random binary unordered trees", "The intersection graph of paths in trees", "Graph minors IV Widths of trees and well quasi ordering", "Graph minors A survey", ] # remove common words and tokenize stoplist = set('for a of the and to in'.split()) texts = [ [word for word in document.lower().split() if word not in stoplist] for document in documents ] # remove words that appear only once frequency = defaultdict(int) 33for text in texts: for token in text: frequency[token] += 1 texts = [ [token for token in text if frequency[token] > 1] for text in texts ] dictionary = corpora.Dictionary(texts) corpus = [dictionary.doc2bow(text) for text in texts]
建立轉換模型
轉換是標準的Python物件,通常通過訓練語料庫進行初始化:
from gensim import models
tfidf = models.TfidfModel(corpus) # step 1 -- initialize a model
我們使用了教程1中的舊語料庫來初始化(訓練)轉換模型。 不同的轉換可能需要不同的初始化引數。 在TfIdf模型的情況下,“訓練”僅包括一次遍歷提供的語料庫並計算其所有特徵的文件頻率。 訓練其他模型(例如潛在語義分析或潛在狄利克雷分配)的工作量更大,因此需要花費更多時間。
轉換向量
從現在開始,tfidf被視為只讀物件,可用於將任何向量從舊錶示形式(單詞袋整數計數)轉換為新表示形式(TfIdf實值權重):
doc_bow = [(0, 1), (1, 1)]
print(tfidf[doc_bow]) # step 2 -- use the model to transform vectors
輸出
[(0, 0.7071067811865476), (1, 0.7071067811865476)]
或者:
corpus_tfidf = tfidf[corpus]
for doc in corpus_tfidf:
print(doc)
[(0, 0.5773502691896257), (1, 0.5773502691896257), (2, 0.5773502691896257)]
[(0, 0.44424552527467476), (3, 0.44424552527467476), (4, 0.44424552527467476), (5, 0.3244870206138555), (6, 0.44424552527467476), (7, 0.3244870206138555)]
[(2, 0.5710059809418182), (5, 0.4170757362022777), (7, 0.4170757362022777), (8, 0.5710059809418182)]
[(1, 0.49182558987264147), (5, 0.7184811607083769), (8, 0.49182558987264147)]
[(3, 0.6282580468670046), (6, 0.6282580468670046), (7, 0.45889394536615247)]
[(9, 1.0)]
[(9, 0.7071067811865475), (10, 0.7071067811865475)]
[(9, 0.5080429008916749), (10, 0.5080429008916749), (11, 0.695546419520037)]
[(4, 0.6282580468670046), (10, 0.45889394536615247), (11, 0.6282580468670046)]
https://radimrehurek.com/gensim/auto_examples/core/run_topics_and_transformations.html