阶段 / 时间 | 核心事件 |
|---|---|
2009年 (诞生) | 创始人 Radim Řehůřek 在撰写博士论文时,为了处理大规模维基百科语料的主题模型,开始编写 Gensim 的初始代码。 |
2010年 (v0.x) | 首个公开版本发布。确立了“流式处理”的设计哲学,引入了 LSI(潜在语义索引)和 LDA(主题模型)算法。 |
2013年 (转折点) | 引入 Word2Vec。Gensim 将 Google 的 C 语言 Word2Vec 完美移植并优化,使其成为 Python 界训练词向量的绝对标准,用户量呈指数级爆发。 |
2016年 (v3.0.0) | 全面支持 Python 3。引入 Doc2Vec(段落向量)和 FastText(支持子词信息,解决罕见词和拼写错误问题),功能版图大幅扩张。 |
2019年 (v4.0.0) | 史诗级重构。API 变得更加 Pythonic;将词向量部分独立为 |
2024-2026年 | 进入成熟维护期。在 LLM 时代,Gensim 转型为“高效 Embedding 管理工具”和“轻量级 RAG 检索基线”,持续修复 Bug 并优化底层 C 扩展。 |
| 内存友好(流式处理) | 不需要将整个语料库一次性加载到内存中,而是通过迭代器流式读取数据,能够轻松处理数十GB的文本。 |
| 高效的相似度查询 | 内置了针对高维向量空间的优化算法(如 Annoy、Hnswlib 的早期集成),能实现毫秒级的海量文档检索。 |
| 经典 NLP 模型的标杆 | Python 中最著名的 Word2Vec、FastText、Doc2Vec 以及 LDA(隐含狄利克雷分布) 的实现库。 |
Gensim 最经典的使用场景了,将文本转化为稠密向量,然后小伙伴们可以直接利用预训练向量验证“国王 - 男人 + 女人 = 女王”的逻辑
from gensim.models import Word2Vec# 1. 准备语料(Gensim 要求输入为嵌套列表的迭代器)sentences = [["我", "喜欢", "吃", "苹果"],["他", "喜欢", "吃", "香蕉"],["苹果", 和, "香蕉", "都是", "水果"],["我", "今天", "去", "超市", "买", "苹果"]]# 2. 训练 Word2Vec 模型# vector_size: 向量维度; window: 上下文窗口大小; min_count: 忽略词频低于此值的词model = Word2Vec(sentences, vector_size=50, window=5, min_count=1, workers=4)# 3. 查看“苹果”最相似的词print("与'苹果'最相似的词:", model.wv.most_similar("苹果", topn=3))# 4. 获取词向量print("苹果的向量维度:", model.wv["苹果"].shape)
可以用它构建一个简单的“关键词搜索引擎”。
from gensim import corpora, models, similarities# 1. 构建语料库texts = [["机器学习", "深度学习", "神经网络"],["自然语言处理", "机器学习", "文本分类"],["苹果", "香蕉", "水果", "好吃"]]# 2. 创建字典和语料dictionary = corpora.Dictionary(texts)corpus = [dictionary.doc2bow(text) for text in texts] # 转换为词袋模型 (Bow)# 3. 训练 TF-IDF 模型tfidf = models.TfidfModel(corpus)corpus_tfidf = tfidf[corpus]# 4. 构建相似度索引index = similarities.MatrixSimilarity(corpus_tfidf, num_features=len(dictionary))# 5. 查询新文档的相似度query = "深度学习 和 自然语言处理"query_bow = dictionary.doc2bow(query.split())query_tfidf = tfidf[query_bow]sims = index[query_tfidf]# 打印相似度(按降序排列)print(list(enumerate(sims)))