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

GloVe(全局词向量嵌入)

目录

GloVe简介

 1.使用预训练的GloVe的词向量(英文文本的用的最多)¶

2.自己训练Glove词向量

3. 知识点


 GloVe简介

GloVe的全称叫Global Vectors for Word Representation,它是一个基于全局词频统计(count-based & overall statistics)的词表征(word representation)工具, 是斯坦福大学在2014年提出的模型. 论文地址: https://aclanthology.org/D14-1162.pdf

 1.使用预训练的GloVe的词向量(英文文本的用的最多)¶

#导包
from gensim.test.utils import datapath, get_tmpfile
from gensim.models import KeyedVectors
from gensim.scripts.glove2word2vec import glove2word2vec
#构建glove预训练词向量文件
#必须是绝对路径
#  r 表示对表示其他含义的\进行处理,不用\\
glove_file = datapath(r'E:/ALOT/10_deep_learning/data/glove.6B.100d.txt')
#创建一个空的临时文件
# word2vec_glove_file = get_tmpfile('glove.6B.100d.txt')
worde2vec_glove_file = get_tmpfile('glove.6B.100d.word2vec.txt')
#将glove文件转化为临时文件
glove2word2vec(glove_file, worde2vec_glove_file)
#输出一个词向量的大小  (400000, 100)   400000个词向量,每个词向量是100维度的
[('microsoft', 0.7449405193328857),('ibm', 0.6821643114089966),('intel', 0.6778088212013245),('software', 0.6775422692298889),('dell', 0.6741442680358887),('pc', 0.6678153276443481),('macintosh', 0.6617538332939148),('iphone', 0.6595612168312073),('ipod', 0.6534676551818848),('hewlett', 0.6516579389572144)]
model = KeyedVectors.load_word2vec_format(worde2vec_glove_file)  #加载转化成word2vec的glove文件model.most_similar('apple'相似度较高的词)  #查找与'apple'相似度较高的词model.most_similar(positive=['woman', 'king'], negative=['man'])  
#表示 'king'与['man']是相对应的,按照此对应方式找'woman'最相似的词
[('queen', 0.7698540687561035),('monarch', 0.6843381524085999),('throne', 0.6755736470222473),('daughter', 0.6594556570053101),('princess', 0.6520534157752991),('prince', 0.6517034769058228),('elizabeth', 0.6464517712593079),('mother', 0.631171703338623),('emperor', 0.6106470823287964),('wife', 0.6098655462265015)]

2.自己训练Glove词向量

#在环境中安装glove包
!pip install glove-python-binary -i https://pypi.tuna.tsinghua.edu.cn/simple!pip install pkuseg -i https://pypi.tuna.tsinghua.edu.cn/simple    #百度研发的分词库
#导包
import gensim
from glove import Glove
from glove import Corpus
import pkuseg
#分词
#传的是相对路径
#nthread=5 同时开多少个进程去分词
pkuseg.test(r'../data/不要等到毕业以后.txt', r'../data/不要等到毕业以后_分词.txt', nthread=5)#准备数据集
with open(r'../data/不要等到毕业以后_分词.txt', 'r', encoding='utf-8') as f:#line.strip()是去掉每一行首尾的空格sentences = [line.replace('\n', '').split(' ') for line in f.readlines() if line.strip() != '']  #sentences是二维列表sentences

#输出太长,部分展示:

[['迄今', '最', '实用', '的', '大学生', '人生', '规划', '工具书', '。'],['这是', '一', '本', '用心', '打磨', '的', '书', '。'],['完全', '不同于', '那些', '东拼西凑', '的', '大学生', '人生', '指南', ';'],['没有', '理论', '的', '说教', ',', '只有', '苦口婆心', '地', '规劝', '。'],['57','条','人生','成长','建议','、','57','个',]
#创建语料库模型
corpus_model = Corpus()   #创建语料库的示例对象
#构建共现矩阵
corpus_model.fit(sentences, window=10)
corpus_model.save('../data/corpus_model')  #保存训练好的语料库模型,以后可以读取加载corpus_model.dictionary  #查看词与索引的对应关系

输出部分展示:

{'迄今': 0,'最': 1,'实用': 2,'的': 3,'大学生': 4,'人生': 5,'规划': 6,'工具书': 7,'。': 8,'这是': 9,}
corpus_model.matrix.nnz  #查看共现矩阵中一共有多少个词

 16184

#训练
#no_components:构建的词向量的维度是多少,经验值300维度以下
glove = Glove(no_components=100, learning_rate=0.05)
#no_threads=1 同时开的进程
#verbose=True显示训练过程中的日志
glove.fit(corpus_model.matrix, epochs=10, no_threads=1, verbose=True)

 

Performing 10 training epochs with 1 threads
Epoch 0
Epoch 1
Epoch 2
Epoch 3
Epoch 4
Epoch 5
Epoch 6
Epoch 7
Epoch 8
Epoch 9 
glove.add_dictionary(corpus_model.dictionary)glove.dictionary

输出部分展示:

{'迄今': 0,'最': 1,'实用': 2,'的': 3,'大学生': 4,'人生': 5,'规划': 6,'工具书': 7,'。': 8,'这是': 9,'一': 10,}
#查看某个词的词向量
glove.word_vectors[glove.dictionary['我']]

 

array([-3.85271677e-03,  6.03527930e-03, -6.46135204e-03,  7.04933438e-04,-3.00269815e-04, -6.35298652e-03, -5.04293920e-03, -2.87305933e-03,9.96562326e-06, -1.28239511e-03,  2.32297241e-03,  1.67665561e-03,-4.88860444e-03,  2.11428079e-03,  4.59453142e-04, -9.32589063e-03,-4.38411281e-03, -2.58539354e-03, -1.21059775e-02, -3.58457042e-03,4.42692637e-04,  4.25907889e-03,  8.23455533e-04, -7.69576469e-03,4.53250350e-04,  1.43330507e-03, -1.93765326e-03, -5.62252827e-03,-6.46001688e-04,  1.00060915e-03, -6.56430222e-03, -9.70502832e-03,4.73688765e-03, -8.92992657e-04,  3.56808700e-03,  9.79184843e-03,9.15090144e-03,  4.93799065e-04, -5.08780746e-03, -2.17941323e-04,2.21646527e-04,  3.65010548e-03,  4.65875282e-03, -3.11105523e-03,3.47489254e-03,  1.28445053e-03, -7.86476014e-03, -3.82036168e-03,-4.68850099e-03, -2.73481768e-03,  6.43765283e-03,  3.74767271e-04,-3.61486712e-03, -2.67486806e-03,  2.20565042e-03, -7.80749700e-04,-6.51855200e-03, -1.89578758e-03,  1.97327613e-03, -5.57302319e-03,-2.51269656e-03,  1.28111552e-03,  3.78035822e-06, -7.56995098e-03,3.88149824e-03, -2.34932018e-03, -5.40425079e-03, -1.80393452e-03,5.03049188e-03, -5.58385635e-03,  3.37829026e-03, -2.29710432e-03,9.08578290e-03, -4.35930405e-03,  9.61504496e-03,  1.15320991e-02,3.32939316e-03,  9.24636042e-03, -9.36855207e-03,  1.15861179e-02,-5.50878460e-03,  8.79297798e-03, -3.17951379e-04,  4.44059952e-03,-2.52683441e-03, -3.06109383e-03,  7.93721916e-04, -2.56597966e-03,-5.98975245e-05, -2.69277017e-03,  8.00875023e-03, -8.21644481e-03,1.72800689e-03,  1.52961102e-03, -1.60708166e-04,  4.23559648e-03,-1.08741576e-03, -5.77238705e-03,  8.43079576e-03,  3.88278545e-03])
#查找相似词
glove.most_similar('专业',number=10)

 

[('的', 0.8430016342292636),(',', 0.8206669513798159),('是', 0.6985497214327246),('。', 0.6971518842587385),('我', 0.6554453225214771),('你', 0.6365204850038154),('不', 0.5187983190436662),('自己', 0.49869570695139864),('一', 0.47569447514853663)]
#查看全局词向量的形状
glove.word_vectors.shape

 (939, 100)

glove.word_vectors

 

array([[ 2.22664080e-03, -4.40492727e-04,  1.56658813e-03, ...,-3.70435501e-03,  2.13948809e-03, -3.67479285e-03],[-2.59109652e-03,  4.25853419e-03, -2.38113383e-03, ...,2.06839387e-03, -4.34270506e-03,  2.74836134e-03],[-5.90079017e-04,  4.30749793e-03,  3.15428115e-03, ...,1.83901467e-03, -2.14947886e-03,  6.05205719e-05],...,[ 3.74231450e-04,  2.05554199e-03,  1.57123457e-03, ...,-2.67770537e-05,  2.63345084e-03,  1.49179696e-03],[-8.56595044e-04, -4.88608984e-03, -1.88634857e-03, ...,6.74149560e-04,  3.00811616e-03, -4.58626075e-03],[-3.12888567e-03,  8.80138770e-05, -4.06701493e-03, ...,1.17048113e-03, -2.72183947e-04,  2.05452380e-03]])
#查看共线矩阵(若语料库很大,共现矩阵也会比较大)
corpus_model.matrix.todense().shape

 (939, 939)

3. 知识点

  GloVe的全称叫Global Vectors for Word Representation,它是一个基于全局词频统计(count-based & overall statistics)的词表征(word representation)工具, 是斯坦福大学在2014年提出的模型. 论文地址: https://aclanthology.org/D14-1162.pdf

 

 

相关文章:

  • 【Linux】环境变量(初步认识环境变量)
  • openpnp - 散料飞达不要想着做万能版本,能够贴合现有的物料就好
  • 如何在Mac上查看剪贴板历史记录
  • C/C++—有关日期类的OJ题
  • 基于YOLOv8目标检测与chef-transformer(T5)从图像创建食谱
  • C++结尾
  • 随记——机器学习
  • 如何一个月速通——2024年网络工程师,软考老鸟备考经验分享!
  • Android 通过自定义注解实现Activity间跳转时登录路由的自动拦截
  • Qt_文件操作
  • 了解独享IP的概念及其独特优势
  • 微信小程序如何使用自定义的字体
  • 解决macOS MySQL安装后不能远程访问的问题
  • golang雪花算法实现64位的ID
  • 无人机侦测:频谱无线电侦测设备技术详解
  • Github访问慢解决办法
  • Linux CTF 逆向入门
  • Odoo domain写法及运用
  • Terraform入门 - 1. 安装Terraform
  • vue-cli3搭建项目
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 多线程 start 和 run 方法到底有什么区别?
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 基于HAProxy的高性能缓存服务器nuster
  • 三分钟教你同步 Visual Studio Code 设置
  • 我感觉这是史上最牛的防sql注入方法类
  • 用element的upload组件实现多图片上传和压缩
  • 自制字幕遮挡器
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​如何使用QGIS制作三维建筑
  • "无招胜有招"nbsp;史上最全的互…
  • $().each和$.each的区别
  • (07)Hive——窗口函数详解
  • (2020)Java后端开发----(面试题和笔试题)
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (二)pulsar安装在独立的docker中,python测试
  • (三)c52学习之旅-点亮LED灯
  • (三)模仿学习-Action数据的模仿
  • (十六)Flask之蓝图
  • (算法)N皇后问题
  • (一)appium-desktop定位元素原理
  • .bashrc在哪里,alias妙用
  • .chm格式文件如何阅读
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net 获取url的方法
  • .NET 某和OA办公系统全局绕过漏洞分析
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET8使用VS2022打包Docker镜像
  • .NET处理HTTP请求
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET运行机制