首页 > 其他分享 >Word2vec的应用

Word2vec的应用

时间:2024-09-26 17:22:37浏览次数:8  
标签:Word2vec words wordvec wv 应用 import model 向量

目录

1.分词

2.模型训练 

3.可视化

 4.知识点个人理解


pip install gensim -i https://pypi.tuna.tsinghua.edu.cn/simple

#若在jupyter notebook中安装:

! pip install gensim -i https://pypi.tuna.tsinghua.edu.cn/simple

#导包
import jieba
import re
import numpy as np
from sklearn.decomposition import PCA
import gensim
from gensim.models import Word2Vec  #导入预训练好的Word2Vec模型
import matplotlib.pyplot as plt
import matplotlib    #中文字体用matplotlib加载,显示中文

1.分词

f = open('../data/sanguo.txt', 'r', encoding='utf-8')
lines = []
for line in f:   #将f当做是一个数据集迭代器,一行行遍历比较好,不会一下占用很大内存
    #jieba分词    lcut是精确分词模式
    temp = jieba.lcut(line)  
    words = []  #接收token
    for i in temp:  #temp是一个字符串列表,每一个元素都是一个字符串
        #过滤标点符号 re.sub(需要替换掉的内容, 用什么替换, 操作对象)
        i = re.sub("[\s+\.\!\/_,$%^*(+\"\'“”《》]+|[+--!,。?、~@……#¥&*():;‘]+", "", i)
        if len(i) > 0:
            words.append(i)  #i 是一个句子
    if len(words) > 0:
        lines.append(words)
print(lines[0:5])
#在输出结果中,一个列表就是一个句子
[['三国演义', '上卷'], ['罗贯中'], ['滚滚', '长江', '东', '逝水', '浪花', '淘尽', '英雄', '是非成败', '转头', '空', '青山', '依旧', '在', '几度', '夕阳红'], ['白发', '渔樵', '江渚上', '惯看', '秋月春风', '一壶', '浊酒', '喜相逢', '古今', '多少', '事', '都', '付笑谈', '中'], ['调寄', '临江仙']]

2.模型训练 

#创建模型的时候就会进行训练
#vector_size=embedding_dim,把原始数据压缩成多少维度,不能太高或者太低,太低就会丢失太多信息
#window 滑动窗口大小
#min_count=5 词频低于5就被删除
#sg=1 表示使用Word2Vec的skip_gram模型
#negative=10 负采样的噪声词的数量 
#epochs=30 训练次数不是越多效果越好
model = Word2Vec(sentences=lines, vector_size=20, window=3, min_count=3, epochs=10, sg=1, negative=10)
print('刘备的词向量:\n', model.wv['刘备'])  #等同于上一句代码
#获取某个词的词向量: 按照索引在词汇表中查找
#model.wv 是中心词的词向量
print('刘备的词向量:\n', model.wv.get_vector('刘备'))
刘备的词向量:
 [-0.2890919  -0.64534736  0.35023224  0.5738358   0.615334   -0.20633562
  0.39474598  0.5770406  -0.6374094   0.6299717   0.53927785 -0.3620445
 -0.58977085 -0.18836461 -0.17590947  0.6360351   0.5856611  -0.99581605
 -0.51967734 -1.1827276 ]
#找与“刘备”最相似的前n个词
model.wv.most_similar('孔明', topn=10)
[('玄德', 0.9126482009887695),
 ('二嫂', 0.8797737956047058),
 ('鲁肃入', 0.8780523538589478),
 ('庞统', 0.8647811412811279),
 ('孔明入', 0.8644561171531677),
 ('甘夫人', 0.8625627756118774),
 ('回书', 0.8624818921089172),
 ('孙夫人', 0.8620772361755371),
 ('一遍', 0.8579021096229553),
 ('孔明遂', 0.8574188947677612)]

3.可视化

model.wv.index_to_key

 输出结果部分展示:

['曰',
 '之',
 '也',
 '吾',
 '与',
 '而',
 '将',
 '了',
 '有',
 '在',]
raw_wordvec = []  #存放原始分词的词向量
word2ind = {}  #存放词与索引
#i, w表示 索引, 原始分的词
for i, w in enumerate(model.wv.index_to_key):  #enumerate()遍历元素及元素对应的索引
    raw_wordvec.append(model.wv[w])  #根据分的词w,获取到w的词向量,再添加到列表raw_wordvec中
    word2ind[w] = i  #将词w与索引i一一对应存放到字典word2ind中
    
#降维只能用ndarray进行, 将数据转化为ndarray
raw_wordvec = np.array(raw_wordvec)
#数据降维,将数据降成二维
X_reduced = PCA(n_components=2).fit_transform(raw_wordvec)
X_reduced
array([[-0.9565789 ,  0.43193746],
       [-0.62351465,  0.20734401],
       [-0.9055981 ,  0.18587902],
       ...,
       [-0.47270492, -0.0872296 ],
       [ 0.24143706, -0.00525565],
       [ 0.44416195, -0.20065238]], dtype=float32)

word2vec中获取每个词的词向量直接在预训练好的模型中查找得到 

#创建视图大小
fig = plt.figure(figsize=(15,10))
#获取当前视图
ax = fig.gca()
#设置背景色
ax.set_facecolor('white')
#绘制
ax.plot(X_reduced[:, 0], X_reduced[:, 1], '.', markersize=1, alpha=0.3, color='black')

#绘制几个文章中常见的词
words = ['孙权','刘备','曹操','周瑜','诸葛亮','司马懿','张飞','关羽','吕布','大乔','小乔']
#设置中文字体的显示
font = matplotlib.font_manager.FontProperties(fname='../data/华文仿宋.ttf', size=16)
for w in words:
    if w in word2ind:
        ind = word2ind[w]
        xy = X_reduced[ind]
        plt.plot(xy[0], xy[1], '.', alpha=1, color='red', markersize=10)
        plt.text(xy[0], xy[1], w, fontproperties=font, alpha=1, color='green')

 4.知识点个人理解

词向量的用途

  • 主题聚类
  • 情感分析
  • 信息检索

word2vec的缺点:

  • 没有考虑同义词
  • 窗口长度有限
  • 没有考虑全局的文本信息
  • 不是严格意义上的语序

标签:Word2vec,words,wordvec,wv,应用,import,model,向量
From: https://blog.csdn.net/Hiweir/article/details/142566707

相关文章

  • 动态代理IP有哪些应用场景?要怎么挑选适合自己的?
    刷到一个问题:我们先来了解一下动态IP,动态IP=动态代理=短效IP=动态代理IP,顾名思义,是那些有效期较短的代理服务器,它们在特定的时间内提供服务,然后更换IP地址。在现如今互联网上到处都是算法的时代,是一种很常见的工具了。那么,到底哪些业务场景会用到动态代理IP呢?又该如何挑选好用的动......
  • 机床数据采集网关在智能制造领域的应用价值-天拓四方
    随着工业4.0时代的到来,智能制造已成为制造业转型升级的重要方向。数控机床作为现代制造业的核心设备,其运行状态和加工参数的数据实时采集与分析对于提升生产效率、优化生产流程具有关键意义。本文将详细介绍机床数据采集网关在某机械制造企业的实际应用案例,展示其在提高生产效率、......
  • Token: 数据库、存储系统和API安全的应用
    一.TokenToken是一种常见的计算机术语,它在不同的上下文中有不同的含义。在身份验证和授权的上下文中,Token通常指的是服务端生成的一串字符串,作为客户端进行请求的一个令牌。当用户登录后,服务器会生成一个Token并返回给客户端,客户端在后续的请求中携带这个Token,以此来验证用户......
  • JAVA 数据结构与算法 队列的介绍与应用
    一、队列队列是一个有序列表,可以用数组或者链表来实现遵循先入先出的原则。当我们将数据存入队列时称为”addQueue”,addQueue的处理需要有两个步骤:思路分析:将尾指针往后移:rear+1,当front==rear【空】若尾指针rear小于队列的最大下标maxSize-1,则将数据存入rear所......
  • 为什么说AI产业落地,下一代超级应用是“智能体”?
    “未来超级应用方向就是AIAgent,ChatGPT很了不起、很强大,但与Agent不一样。AIAgent时代的到来,不会是一个神奇而强大的模型突然代替了所有的工作流,涉及到技术、工程与市场的不断磨合,最终以超预期的服务呈现给人类。”——香港科技大学校董会主席、美国国家工程院外籍院士沈向洋在AI......
  • 美畅物联丨解析视频监控分辨率:720P、960P、1080P 和 4K 的应用与选择
    大家在日常使用畅联AIoT开放云平台时,经常要接触到分辨率这个概念,分辨率在视频监控领域,是衡量图像清晰度的重要指标之一。随着技术的不断进步,从早期的低分辨率到现在的超高清,视频监控的分辨率也在不断提升。今天我们就来简单介绍一下日常经常接触到的720P、960P、1080P以及4K......
  • 4G工业网关的功能特点有哪些?选型与应用-天拓四方
    随着工业4.0时代的到来,数字化转型已成为企业提升竞争力、优化生产效率的必经之路。在这一过程中,4G工业网关凭借其卓越的性能和广泛的适用性,成为了连接工业现场与互联网的重要桥梁,为企业实现远程监控、数据采集、设备控制等功能提供了强有力的支持。一、4G工业网关的基本概念4......
  • RabbitMq 入门应用 提升性能 : 算法多阶段并行 (Python)
    大问题:我们有一个算法,它可以被分为多个阶段进行(顺序不可颠倒),每个阶段的性能和资源要求不同(且不均衡程度比较高);假设我们现在可以堆资源(较多的CPU和内存),如何将算法各个步骤拆分并进行性能均衡和实现,使得算法性能最大化以满足生产要求?多进程:由于算法有严格的顺序要求,如果是......
  • 微服务监控实战(三):指标数据的采集及应用
    如果你觉得这篇文章对你有帮助,请不要吝惜你的“关注”、“点赞”、“评价”、“收藏”,你的支持永远是我前进的动力~~~上一篇我们介绍了云原生架构下日志数据的采集和应用,本文介绍指标数据的采集及应用指标(Metrics)云原生下的指标监控系统云原生下的Prometheus和Grafana基......
  • 深度解读:TDOA(到达时间差)在声源定位中的应用
    目录引言1.声源定位的基本原理2.GCC-PHAT算法简介3.代码实现详解4.声源定位中的挑战结语引言声源定位(SoundSourceLocalization)是通过分析声音到达多个麦克风阵列的时间差异来推断声音来源的方向或位置的技术。它被广泛应用于声学领域,包括智能语音系统、机器人......