Word2Vec 是一种流行的词嵌入技术,可以将词或短语从词汇表映射到向量空间中。这种技术可以捕获上下文信息,从而产生语义丰富的词向量。

在本文中,我们将使用 Gensim 的 Word2Vec 模型对《斗罗大陆》进行词嵌入训练,并探索一些有趣的语义关系。

可以下载语料库 斗罗大陆.7z

完整代码

import jieba
from gensim.models import Word2Vec

# 读取斗罗大陆.txt 放到 texts中
with open("斗罗大陆.txt", "r", encoding="utf-8") as f:
    texts = f.readlines()


# 使用jieba进行分词
sentences = [list(jieba.cut(text)) for text in texts]
print(sentences)
# 训练模型
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)
model.save("word2vec_chinese.model")

# 加载模型,如果已经训练好了,可以直接加载模型,不需要再训练
model = Word2Vec.load("word2vec_chinese.model")

# 查找与“奥斯卡”最相似的词
similar_words = model.wv.most_similar("奥斯卡", topn=5)
print(similar_words)

# 查找与“唐三 小舞”最相似的词,但是和奥斯卡最不相似的词

result = model.wv.most_similar(positive=['唐三', '小舞'], negative=['奥斯卡'], topn=5)
print(result)

# 唐三和小舞的相似度
similarity = model.wv.similarity("唐三", "小舞")
print(similarity)

1. 读取文本数据

首先,我们从文本文件中读取《斗罗大陆》的内容。

with open("斗罗大陆.txt", "r", encoding="utf-8") as f:
    texts = f.readlines()

2. 使用 Jieba 进行中文分词

Jieba 是一个流行的中文分词工具。为了训练 Word2Vec 模型,我们需要将文本分解为单词或短语。因此,我们使用 Jieba 对文本进行分词。

import jieba

sentences = [list(jieba.cut(text)) for text in texts]

3. 训练 Word2Vec 模型

我们使用 Gensim 的 Word2Vec 对分词后的文本进行训练。

from gensim.models import Word2Vec

model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)
model.save("word2vec_chinese.model")

4. 加载模型和查询

一旦模型被训练,我们可以加载它来进行各种查询。

model = Word2Vec.load("word2vec_chinese.model")

例如,我们可以找到与“奥斯卡”最相似的词:

similar_words = model.wv.most_similar("奥斯卡", topn=5)
print(similar_words)

或者,我们可以查找与“唐三”和“小舞”最相似的词,但是与“奥斯卡”最不相似的词:

result = model.wv.most_similar(positive=['唐三', '小舞'], negative=['奥斯卡'], topn=5)
print(result)

最后,我们可以计算“唐三”和“小舞”之间的相似度:

similarity = model.wv.similarity("唐三", "小舞")
print(similarity)

结论

Word2Vec 提供了一种强大的方法来捕获文本中的语义关系。通过这种方法,我们可以探索《斗罗大陆》中的角色之间的相似性和差异性。这只是 Word2Vec 能力的冰山一角。它还可以用于更复杂的任务,如文本分类、情感分析和推荐系统。