使用gensim的word2vec训练自己的词向量模型
common_texts
是 gensim
提供的一个用于测试的小型文本数据集。它包含一些示例句子,格式是一个嵌套的 Python 列表,其中每个子列表代表一个文档,文档由单词(字符串)组成。
示例用法
python
from gensim.test.utils import common_texts
from gensim.models import Word2Vec
# 打印示例数据
print(common_texts)
输出
python
[['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
模型:
python
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)
应用场景
- 测试
gensim
API,避免自己构造数据集。 - 验证 NLP 预处理逻辑,如分词、向量化等。
- 快速上手
Word2Vec
或Doc2Vec
等模型。
如果你想在自己的数据集上使用类似的处理方式,可以参考 common_texts
的格式来组织你的文本数据。
你保存的 Word2Vec
模型可以通过 Word2Vec.load
重新加载,并进行推理(如获取词向量、查找相似词等)。以下是完整的使用方法:
1. 加载已保存的模型
python
from gensim.models import Word2Vec
# 加载保存的 Word2Vec 模型
model = Word2Vec.load("word2vec_test.model")
2. 获取单词的词向量
python
vector = model.wv['computer']
print(vector) # 输出 'computer' 的词向量
输出示例(100 维词向量)
[ 0.0023 -0.0154 0.0132 ... 0.0098 -0.0221 0.0145]
3. 查找最相似的词
python
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. 计算两个单词的相似度
python
similarity = model.wv.similarity('computer', 'system')
print(similarity)
输出示例
0.79 # 表示 "computer" 和 "system" 在语义空间中的相似度
5. 词向量可视化(可选)
可以用 matplotlib
和 sklearn.manifold.TSNE
降维并可视化词向量:
python
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
可视化词向量