首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python从零基于词向量实现词语相似度计算

Python从零基于词向量实现词语相似度计算

作者头像
用户2423478
发布2025-10-31 18:48:17
发布2025-10-31 18:48:17
1400
举报
文章被收录于专栏:具身小站具身小站

1. gensim概述

gensim是一个专注于无监督主题建模和自然语言处理的Python库,由Radim于2009年创建,专为处理大规模文本数据集而设计,具有内存效率高、可扩展性强的特点。

核心优势

  • 内存友好:能够处理超出RAM大小的语料库
  • 并行处理:支持多核CPU加速
  • 工业级:在生产环境中广泛应用
  • 算法丰富:包含多种主题模型和词向量算法
  • API简洁:易于使用的接口设计

应用场景

  • 文本相似度计算
  • 语义搜索
  • 文档聚类
  • 主题建模
  • 词向量训练与应用
  • 文本摘要生成
  • 推荐系统

模块结构

模块

功能

gensim.corpora

文本预处理、向量化和语料库管理

gensim.models

各种主题模型和词向量模型(核心)

gensim.similarities

文档相似度索引和查询

gensim.summarization

文本摘要生成

gensim.test

测试数据集和单元测试

gensim.utils

实用工具函数

gensim.sklearn_api

与scikit-learn的兼容接口

2. Word2Vec模型

Word2Vec是gensim中最著名和广泛使用的模型,由Google在2013年提出,用于生成高质量的词向量(word embeddings)。Word2Vec基于分布式假设(具有相似上下文的词具有相似含义),通过神经网络学习词的向量表示。

两种架构:

  1. CBOW (Continuous Bag of Words):通过上下文词预测目标词,计算效率更高,适合小型数据集,对高频词表现更好
  2. Skip-gram:通过目标词预测上下文词,训练速度较慢,但对低频词效果更好,适合大型数据集

核心参数

参数

类型

默认值

说明

使用建议

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

3. 安装

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

❌ 不支持

仍在开发中,无预编译包

代码语言:javascript
复制
# 新建虚拟环境
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更新
在这里插入图片描述
在这里插入图片描述

4. 程序使用

代码语言:javascript
复制
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)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 具身小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. gensim概述
  • 2. Word2Vec模型
  • 3. 安装
  • 4. 程序使用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档