Word Embedding

embedded/2024/11/24 21:48:39/

Word Embedding

哈喽,小伙伴们!今天聊一聊自然语言处理(NLP)中的一个小概念.语料的数值化转化.因为有一定了解的小伙伴应该都知道在NLP中,汉字是没办法直接送到模型训练的,因为计算机只能识别二进制的数据.所以我们需要把汉字转成张量的形式,这样变成二进制数据后就可以放入模型中训练.那有哪些常用方式呢?我们接着往下聊.

一 基本概述

自然语言中词向量的转化方式很多,比如one-hot编码,这中方式操作简单,易于理解.但是有一个很大不足就是如果遇到大语料集时会非常占用内存.由此我们常用的是word2vec和word embedding两种方式.今天主要介绍后者.

# 广义的word embedding包括所有密集词汇向量的表示方法,如word2vec, 即可认为是word embedding的一种.
# 狭义的word embedding是指在神经网络中加入的embedding层, 对整个网络进行训练的同时产生的embedding矩阵(embedding层的参数), 这个embedding矩阵就是训练过程中所有输入词汇的向量表示组成的矩阵.

二者又有区别,word2vec是先通过训练得到词向量矩阵让后放到项目下游使用;word embedding是先生成一个随机的词向量矩阵,随着项目一起更新这个矩阵.所以使用时需要注意这个点.

word_embedding_15">二 word embedding可视化

# 导包
word">import jieba
word">import torch
word">import torch.nn word">as nn
word">from tensorflow.keras.preprocessing.text word">import Tokenizer
word">from torch.utils.tensorboard word">import SummaryWriter
# 定义函数
word">def embedding_show():# 准备语料sent1 = '我爱北京天安门'sent2 = '我爱中国'# 合并语料sents = [sent1, sent2]# 创建空列表储存分词后的数据word_list = []# 遍历 语料库中的文本 分词 加到 word_list中word">for s word">in sents:word_list.append(jieba.lcut(s))# 打印分词后的数据word">print(f'分词后的数据{word_list}') # 分词后的数据[['我', '爱', '北京', '天安门'], ['我', '爱', '中国']]# 实例化my_tokenizer = Tokenizer()# 用实例化是Tokenizer训练数据 得到去重后带有编号的字典 注意:编号从1开始my_tokenizer.fit_on_texts(word_list)# 词-索引是{'我': 1, '爱': 2, '北京': 3, '天安门': 4, '中国': 5}word">print(f'词-索引是{my_tokenizer.word_index}') # 索引-词{1: '我', 2: '爱', 3: '北京', 4: '天安门', 5: '中国'}word">print(f'索引-词{my_tokenizer.index_word}') my_token_list = my_tokenizer.index_word.values() # 处理后的token列表为:dict_values(['我', '爱', '北京', '天安门', '中国'])word">print(f'处理后的token列表为:{my_token_list}')seq2id = my_tokenizer.texts_to_sequences(word_list)# 处理后的token连成句子(文本)的索引为[[1, 2, 3, 4], [1, 2, 5]]# 注意: 句子 对应分词后的 分词后的数据[['我', '爱', '北京', '天安门'], ['我', '爱', '中国']]word">print(f'处理后的token连成句子(文本)的索引为{seq2id}')# 6.获取embedding矩阵 词表矩阵(随机数 还不是词向量)my_embed = nn.Embedding(num_embeddings=len(my_token_list),embedding_dim=5)word">print(f'my_embed的维度是{my_embed.weight.shape}') # my_embed的维度是torch.Size([5, 5])word">print(f'权重列表(词表矩阵){my_embed.weight.data}')# 7.查询token的vec (词向量)word">for idx word">in range(len(my_tokenizer.word_index)):# inx转成tensor形式 放入模型中形成词向量vec = my_embed(torch.tensor(idx))# 注意:从0开始 所以索引+1 找到对应的词word = my_tokenizer.index_word[idx+1]word">print(f'{word}的词向量是{vec}')# 8.可视化词向量# 创建一个日志目录 保存词向量和词logder = r'E:\data\runs'my_summary = SummaryWriter(log_dir=logder)# 获取和词向量添加到my_summary并关联对应的token(词)my_summary.add_embedding(my_embed.weight.data,my_token_list)# 关闭my_summary.close()# 通过电脑终端或者Pycharmd内置的终端启动tensorboard 在浏览器查看词向量可视化结果(如下图)# tensorboard --logdir=runs --host 0.0.0.0 # 注意:logdir=runs 必须是我们创建的日志目录runs的上级目录 否则会报错
word">if __name__ == '__main__':embedding_show()

词向量空间关系图如下:
1

以上就是今天和大家聊的word embedding实现词向量转化和空间关系展示.在这个世界上,最美好的事情就是分享.点赞关注,让我们一起分享喜悦和成长.下期见…


http://www.ppmy.cn/embedded/140215.html

相关文章

电脑自动关机时间如何定?Wise Auto Shutdown 设置关机教程

在日常使用电脑的过程中,有时我们需要让电脑在特定的时间自动关机,比如在下载大文件完成后、执行长时间的任务结束时,或者只是单纯想在某个预定时间让电脑自动关闭以节省能源。这时候,Wise Auto Shutdown 这款软件就能派上大用场了…

播放器开发之ffmpeg 硬件解码方案

硬件编解码的概念 硬件编解码是⾮CPU通过烧写运⾏视频加速功能对⾼清视频流进⾏编解码,其中⾮CPU可包括GPU、FPGA或者 ASIC等独⽴硬件模块,把CPU⾼使⽤率的视频解码⼯作从CPU⾥分离出来,降低CPU的使⽤负荷,使得平台能 ⾼效且流畅…

[译]Elasticsearch Sequence ID实现思路及用途

原文地址:https://www.elastic.co/blog/elasticsearch-sequence-ids-6-0 如果 几年前,在Elastic,我们问自己一个"如果"问题,我们知道这将带来有趣的见解: "如果我们在Elasticsearch中对索引操作进行全面排序会怎样…

error Unexpected ‘debugger‘ statement no-debugger

[eslint] D:\System File\Desktop\后台\test\test\src\components\HelloWorld.vue 19:5 error Unexpected debugger statement no-debugger ✖ 1 problem (1 error, 0 warnings) You may use special comments to disable some warnings. Use // eslint-disable-next-li…

线性代数(第六章:二次型)

一、二次型的基础知识 1. 二次型 定义:含有 n 个变量 x1 , x2 ,…, xn 的二次齐次函数 f = a11x12 + a22x22 + … + annxn2 + 2a12x1x2 + 2a13x1x3 + … + 2a(n-1),nxn-1xnf = xTAx(AT = A),x = (x1 , x2 ,…, xn)Tf = Σi=1nΣj=1n aijxixj称 A 是二次型的矩阵,r(A) 是…

基于Java Springboot高校教务管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…

1.langchain中的prompt模板(Prompt Templates)

本教程将介绍如何使用 LangChain 库中的提示模板(PromptTemplate)来生成和处理文本。我们将通过具体的代码示例来解释程序的运行逻辑。 1. 导入必要的库 首先,从 langchain_core.prompts 模块中导入 PromptTemplate 类。 from langchain_c…

算法——有效的字母异位词(leetcode242)

有效的字母异位词即使用一组字母的每个字母排列组合成新的字母组合新的字母组合的字母种类及个数要与原字母组合相同(官方解释:字母异位词是通过重新排列不同单词或短语的字母而形成的单词或短语,并使用所有原字母一次。) 题目给定两个字符串…