Word2Vec模型 Demo

avatar 2024年04月17日18:26:31 0 185 views
博主分享免费Java教学视频,B站账号:Java刘哥

代码

import jieba  # 引入结巴分词, pip install jieba 或 conda install jieba
import re  # 引入正则表达式
from gensim.models import Word2Vec  # 引入Word2Vec, pip install gensim

# 读取数据,分词处理
f = open("sanguo.txt", 'r', encoding='utf-8')  # 读入文本
lines = []
for line in f:  # 逐行遍历
    temp = jieba.lcut(line)  # 对每行进行分词,返回一个数组
    words = []
    for i in temp:
        # 删除标点符号
        i = re.sub("[\s+\.\!\/_,$%^*(+\"\'””《》]+|[+——!,。?、~@#¥%……&*():;‘]+", "", i)
        if len(i) > 0:
            words.append(i)
    if len(words) > 0:
        lines.append(words)
# print(lines[0:5])  # 预览前5行分词结果
f.close()

# 调用Word2Vec训练
# 参数:size: 词向量维度;window: 上下文的宽度,min_count为考虑计算的单词的最低词频阈值
# vector_size: 词向量维度;window: 上下文的宽度;min_count: 考虑计算的单词的最低词频阈值;
# epochs: 迭代次数;negative: 负采样;sg: 1为skip-gram,0为cbow
model = Word2Vec(lines, vector_size=20, window=2, min_count=3, epochs=7, negative=10, sg=1)
print("孔明的词向量:\n", model.wv.get_vector('孔明'))  # 获取词向量,词向量即为词的特征向量,可以用于计算词与词之间的相似度
print("\n和孔明相关性最高的前20个词语:", model.wv.most_similar('孔明', topn=20))  # 获取和孔明相关性最高的前20个词语

# ## 类比关系实验
print('\n类别关系实验')
# 曹操-魏=?-蜀
# positive表示正相关的词,negative表示负相关的词。
# 这里即找与曹操和蜀相似的词,但是不与魏相似的词。
words = model.wv.most_similar(positive=['曹操', '蜀'], negative=['魏'])  # 通过类比关系找到与曹操和蜀相似的词
print(words)

运行结果

孔明的词向量:
 [-0.2190024  -0.05664985  0.11195563 -0.19027355  0.07659388 -0.39191592
 -0.01084622  1.2319072   0.39345586  0.198595   -0.37765422 -0.31499797
  0.20020036 -0.78427845  1.0684338   1.0753947   0.32175803  0.14074786
 -1.1028086  -0.614546  ]

和孔明相关性最高的前20个词语: [('玄德', 0.9219791889190674), ('先主', 0.9047455191612244), ('周瑜', 0.9041911363601685), ('关公', 0.8818580508232117), ('使人', 0.8791554570198059), ('成都', 0.8787489533424377), ('陆逊', 0.876988410949707), ('维', 0.8749616742134094), ('孙权', 0.8731309771537781), ('魏主', 0.8648725748062134), ('后主', 0.864404022693634), ('懿', 0.8634287118911743), ('孔明入', 0.860363781452179), ('袁术', 0.8577635884284973), ('门吏', 0.8577001094818115), ('司马昭', 0.8573384881019592), ('土人', 0.853476881980896), ('使命', 0.8490279316902161), ('使者', 0.8473643064498901), ('刘璋', 0.8450944423675537)]

类别关系实验
[('袁绍', 0.7159259915351868), ('东吴', 0.65583735704422), ('吕布', 0.641105055809021), ('五路', 0.6314082741737366), ('城中', 0.6300197243690491), ('刘表', 0.629277765750885), ('司马懿', 0.6256495714187622), ('马超', 0.6225470304489136), ('刘玄德', 0.6152568459510803), ('司马懿引', 0.6148400902748108)]

 

参考:https://www.bilibili.com/video/BV1vS4y1N7mo?vd_source=54b56620958b21f9701740cacea1216b

sanguo.txt 文件:链接:https://pan.baidu.com/s/1OH0qak2dleZJt5G44Sy9hg  密码:8p4d

 

  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0