当前位置: 首页 > news >正文

使用gensim的word2vec训练自己的词向量模型

使用gensim的word2vec训练自己的词向量模型

common_textsgensim 提供的一个用于测试的小型文本数据集。它包含一些示例句子,格式是一个嵌套的 Python 列表,其中每个子列表代表一个文档,文档由单词(字符串)组成。

示例用法

from gensim.test.utils import common_texts
from gensim.models import Word2Vec

# 打印示例数据
print(common_texts)

输出

[['human', 'interface', 'computer'], 
 ['survey', 'user', 'computer', 'system', 'response', 'time'],
 ['eps', 'user', 'interface', 'system'],
 ['system', 'human', 'system', 'eps'],
 ['user', 'response', 'time'],
 ['trees'],
 ['graph', 'trees'],
 ['graph', 'minors', 'trees'],
 ['graph', 'minors', 'survey']]

使用 common_texts 训练 Word2Vec

你可以直接用 common_texts 训练一个 Word2Vec 模型:

from gensim.models import Word2Vec

# 训练 Word2Vec 模型
model = Word2Vec(sentences=common_texts, vector_size=10, window=5, min_count=1, workers=4)

# 获取单词 "computer" 的词向量
vector = model.wv['computer']
print(vector)

应用场景

  1. 测试 gensim API,避免自己构造数据集。
  2. 验证 NLP 预处理逻辑,如分词、向量化等。
  3. 快速上手 Word2VecDoc2Vec 等模型

如果你想在自己的数据集上使用类似的处理方式,可以参考 common_texts 的格式来组织你的文本数据。

你保存的 Word2Vec 模型可以通过 Word2Vec.load 重新加载,并进行推理(如获取词向量、查找相似词等)。以下是完整的使用方法:


1. 加载已保存的模型

from gensim.models import Word2Vec

# 加载保存的 Word2Vec 模型
model = Word2Vec.load("word2vec_test.model")

2. 获取单词的词向量

vector = model.wv['computer']
print(vector)  # 输出 'computer' 的词向量

输出示例(100 维词向量)

[ 0.0023 -0.0154  0.0132 ...  0.0098 -0.0221  0.0145]

3. 查找最相似的词

similar_words = model.wv.most_similar('computer', topn=3)
print(similar_words)  # 输出与 'computer' 最相似的 3 个词

输出示例

[('interface', 0.87), ('user', 0.85), ('system', 0.82)]

0.87 代表余弦相似度,接近 1 说明两个词较为相似。


4. 计算两个单词的相似度

similarity = model.wv.similarity('computer', 'system')
print(similarity)

输出示例

0.79  # 表示 "computer" 和 "system" 在语义空间中的相似度

5. 词向量可视化(可选)

可以用 matplotlibsklearn.manifold.TSNE 降维并可视化词向量:

import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
import numpy as np

# 获取所有单词及其向量
words = list(model.wv.index_to_key)  # 获取词汇表
word_vectors = np.array([model.wv[word] for word in words])  # 词向量矩阵

# 用 t-SNE 将 100 维降到 2 维
tsne = TSNE(n_components=2, random_state=42)
word_vectors_2d = tsne.fit_transform(word_vectors)

# 绘制散点图
plt.figure(figsize=(8, 6))
plt.scatter(word_vectors_2d[:, 0], word_vectors_2d[:, 1])

# 标注单词
for i, word in enumerate(words):
    plt.annotate(word, xy=(word_vectors_2d[i, 0], word_vectors_2d[i, 1]))

plt.show()

总结

  • Word2Vec.load("word2vec_test.model") 加载模型
  • model.wv['word'] 获取单词的词向量
  • model.wv.most_similar('word') 查找相似词
  • model.wv.similarity('word1', 'word2') 计算相似度
  • 还可以使用 t-SNE 可视化词向量

相关文章:

  • 视频对讲系统中,强插和强拆;视频分发功能
  • k8s的存储
  • `docker-compose`是什么,怎么使用
  • 【AIGC知识】RAG概述
  • FOC——Butterworth (巴特沃斯)数字滤波器(2025.03.18)
  • 2025年智能系统、自动化与控制国际学术会议(ISAC 2025)
  • Linux命令进阶
  • Scikit-learn 学习思维导图
  • Linux中如果一个可执行程序位于系统的环境变量目录中(比如/bin、/usr/sbin/、/sbin),想找到它的位置可以用which命令来找到
  • AI 浪潮下,职场的变与不变
  • 【Python 的发展历史】
  • YOLO+OpenCV强强联手:高精度跌倒检测技术实战解析
  • SQLark中如何进行数据筛选与排序
  • VS工具:dumpbin的查看Lib,dll等,Dependencies查看dll、exe的依赖。
  • 计算机网络——总结
  • YOLOv8模型修改与CA注意力机制详解
  • 基于springboot+vue的调查问卷平台
  • Java Stream API 全面指南(完整版)
  • Debian 系统命令集合 |Debian 和 CentOS常见命令的异同
  • uni-app集成保利威直播、点播SDK经验FQ(二)|小程序直播/APP直播开发适用
  • 杨轶群任莆田市荔城区人民政府副区长
  • 耶路撒冷发生山火,以防长宣布紧急状态
  • 五部门:开展新就业形态劳动者劳动权益保障水平提升专项行动
  • 赵乐际主持十四届全国人大常委会第十五次会议闭幕会并作讲话
  • 专访 | 杜普兰蒂斯:爱上中国文化,下一步努力提升速度
  • 孕妇乘坐高铁突发临产,广西铁路部门协助送医平安产子