Gensim ,一個神奇的 Python 庫
作者:老朱2000
Gensim 是一個用于自然語言處理(NLP)和文本挖掘的 Python 庫,它以高效處理大規模文本數據而著稱,支持內存外的流式數據處理。
Gensim 是一個用于自然語言處理(NLP)和文本挖掘的 Python 庫,專注于 主題建模、文檔相似性分析 和 詞向量訓練(如 Word2Vec、Doc2Vec)。它以高效處理大規模文本數據而著稱,支持內存外的流式數據處理。
1. 核心功能
(1) 主題建模
- LDA:從文檔集合中自動發現隱藏主題。
- LSI:通過矩陣分解降低文本維度,發現潛在語義結構。
- HDP:非參數化的主題模型,自動確定主題數量。
(2) 詞向量訓練
(如 king - man + woman = queen)。
- FastText:支持子詞(subword)信息,處理罕見詞更有效。
- Doc2Vec:將整個文檔表示為向量,用于文檔相似性分析。
- Word2Vec:將詞語映射到低維向量空間,捕捉語義關系
(3) 相似性檢索
內置索引結構(如 MatrixSimilarity, Annoy)快速查找相似文檔或詞語。
(4) 文本預處理
提供分詞、去停用詞、詞干化等工具(但需配合其他庫如 nltk 或 spaCy 使用)。
2. 基本用法示例
(1) 安裝 Gensim
pip install gensim
(2) 訓練 Word2Vec 模型
from gensim.models import Word2Vec
# 輸入語料(已分詞的句子列表)
sentences = [
["cat", "say", "meow"],
["dog", "say", "woof"]
]
# 訓練模型
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)
# 獲取詞向量
vector_cat = model.wv["cat"]
# 查找相似詞
similar_words = model.wv.most_similar("dog", topn=3)
print(similar_words) # 輸出 [('cat', 0.8), ('woof', 0.7), ...]
(3) 使用 LDA 進行主題建模
from gensim import corpora
from gensim.models import LdaModel
# 假設已分詞的文檔集合
documents = [["apple", "banana", "fruit"], ["car", "bike", "vehicle"]]
# 創建詞典和語料庫
dictionary = corpora.Dictionary(documents)
corpus = [dictionary.doc2bow(doc) for doc in documents]
# 訓練 LDA 模型
lda_model = LdaModel(corpus, num_topics=2, id2word=dictionary)
# 打印主題
print(lda_model.print_topics())
# 輸出類似 [(0, "0.2*apple + 0.3*banana ..."), (1, "0.4*car + 0.5*bike ...")]
(4) 文檔相似性檢索
from gensim.similarities import MatrixSimilarity
# 建立相似性索引
index = MatrixSimilarity(lda_model[corpus])
# 查詢新文檔
new_doc = ["fruit", "apple"]
new_bow = dictionary.doc2bow(new_doc)
sims = index[lda_model[new_bow]]
# 輸出相似文檔的索引和分數
print(list(enumerate(sims)))
3. 優勢
- 高效性:流式數據處理,適合大規模文本。
- 易用性:簡潔的 API 設計,與 NumPy、scikit-learn 兼容。
- 可擴展性:支持自定義模型和算法。
4. 典型應用場景
- 新聞文章自動分類
- 推薦系統(基于內容相似性)
- 語義搜索增強
- 文本摘要生成
責任編輯:趙寧寧
來源:
程序員老朱