gensim是一个专注于无监督主题建模和自然语言处理的Python库,由Radim于2009年创建,专为处理大规模文本数据集而设计,具有内存效率高、可扩展性强的特点。
核心优势
应用场景
模块结构
模块 | 功能 |
|---|---|
gensim.corpora | 文本预处理、向量化和语料库管理 |
gensim.models | 各种主题模型和词向量模型(核心) |
gensim.similarities | 文档相似度索引和查询 |
gensim.summarization | 文本摘要生成 |
gensim.test | 测试数据集和单元测试 |
gensim.utils | 实用工具函数 |
gensim.sklearn_api | 与scikit-learn的兼容接口 |
Word2Vec是gensim中最著名和广泛使用的模型,由Google在2013年提出,用于生成高质量的词向量(word embeddings)。Word2Vec基于分布式假设(具有相似上下文的词具有相似含义),通过神经网络学习词的向量表示。
两种架构:
核心参数
参数 | 类型 | 默认值 | 说明 | 使用建议 |
|---|---|---|---|---|
vector_size | int | 100 | 词向量维度 | 通用任务:100-300;资源受限:50-100;专业领域:200-400 |
window | int | 5 | 上下文窗口大小 | 语法任务:2-5;语义任务:5-10;专业领域:8-15 |
min_count | int | 5 | 忽略频率低于此值的词 | 小语料:1-2;大语料:5-10;专业术语:1-3 |
workers | int | 3 | 用于训练的线程数 | CPU核心数-1(避免系统卡顿) |
sg | {0, 1} | 0 | 训练算法:1=skip-gram, 0=CBOW | skip-gram:低频词重要、小数据集;CBOW:高频词重要、大数据集 |
hs | {0, 1} | 0 | 是否使用层次softmax(1=是, 0=否) | 1:小词汇表;0:大词汇表 |
negative | int | 5 | 负采样数量(0=不使用负采样) | 5-20 |
alpha | float | 0.025 | 初始学习率 | 0.01-0.05(值太大会导致不收敛) |
min_alpha | float | 0.0001 | 最小学习率 | alpha的1/100到1/1000 |
epochs | int | 5 | 训练轮数 | 通用任务:5-15;高质量需求:15-30;资源有限:3-5 |
sample | float | 0.001 | 高频词的下采样阈值 | 0.0001-0.001(值越大,下采样越强) |
max_vocab_size | int | None | 词汇表最大大小 | 限制内存使用,10000000(1000万)通常足够 |
max_final_vocab | int | None | 最终词汇表大小 | 与min_count配合使用,精确控制词汇量 |
常用配置
任务类型 | 参数建议 |
|---|---|
通用任务 | vector_size=300, window=5, min_count=5, sg=1, epochs=10 |
小规模数据集 | vector_size=100, window=3, min_count=2, sg=0, epochs=20 |
低频词重要 | vector_size=300, window=10, min_count=1, sg=1, negative=15 |
快速原型开发 | vector_size=50, window=3, min_count=1, sg=0, epochs=5 |
gensim的兼容性要求(截至最新版本4.3.3):
组件 | Python版本 | 说明 |
|---|---|---|
gensim | 3.7-3.12 | 官方文档 |
numpy | 3.9-3.12 | gensim的核心依赖 |
scipy | 3.8-3.12 | gensim的另一个核心依赖 |
Python 3.13 | ❌ 不支持 | 仍在开发中,无预编译包 |
# 新建虚拟环境
conda create -n py10 python=3.10
conda activate py10
# 安装gensim库
pip install gensim
# 验证安装
pip show gensim
conda list gensim
python -c "import gensim;print(f'gensim {gensim.__version__} installed}')"
# 配置jupyter使用虚拟环境
conda install -c conda-forge ipykernel
python -m ipykernel install --user --name=py10 --display-name="Python10-gensim"
jupyter kernelspec list
# 通过jupyter页面 - kernel -> change kernel更新

import jieba
import gensim
from gensim.models import Word2Vec
text = ["自然语言处理是人工智能处理的一个重要领域。",
"自然语言处理和深度学习有着密切的关系。",
"自然语言处理有很多自然语言相关的应用。",
"深度学习是机器学习的一个分支。",
]
words_list = [jieba.lcut(t) for t in text]
# 构建模型对象
model = Word2Vec(vector_size=100, window=5, min_count=1, workers=4)
# 构建词汇表
model.build_vocab(words_list)
# 训练词向量模型
model.train(corpus_iterable=words_list, total_examples=len(words_list), epochs=5)
# 获取词向量
words_vec = model.wv
print("全部词语表:", list(words_vec.index_to_key)) # 输出全部词语
print("词向量维度:", words_vec.vector_size) # 输出词向
print("自然语言的词向量", words_vec['自然语言']) # 输出词向量
# 获取与“自然语言”最相似的词
most_similar_words = words_vec.most_similar('自然语言')
print("与自然语言最相似的词:", most_similar_words)
# 词向量计算
similar_more_words = words_vec.most_similar(positive=["自然语言","学习"], negative=["处理"])
print("自然语言 - 处理 + 学习 ≈", similar_more_words)
# 计算“自然语言”和“处理”的相似度
similar = words_vec.similarity('自然语言', '处理')
print("自然语言和处理的相似度:", similar)