使用 EmbeddingBag 和 Embedding 完成词嵌入

🍨 本文为[🔗365天深度学习训练营学习记录博客\n🍦 参考文章:365天深度学习训练营\n🍖 原作者:[K同学啊 | 接辅导、项目定制]\n🚀 文章来源:[K同学的学习圈子](https://www.yuque.com/mingtian-fkmxf/zxwb45)

使用 EmbeddingBagEmbedding 完成词嵌入,首先需要处理文档中的文本,将其转换为适合进行词嵌入的格式,涉及到以下步骤:

  1. 文本清洗:移除文档中的特殊字符和标点符号,将文本统一为小写(如果适用)。
  2. 分词:将文本分割成单词或标记(tokens)。
  3. 建立词汇表:从分词后的文本中创建一个词汇表,每个唯一的单词对应一个索引。
  4. 文本向量化:将文本转换为数字形式,以便进行嵌入处理。

第二步,使用 EmbeddingBagEmbedding 层进行词嵌入。EmbeddingBag 层适用于处理变长的文本,它会计算所有嵌入向量的平均值或和。而 Embedding 层适用于单个单词或固定长度的序列。

目标文件:

实现代码: 

from collections import Counter
import torch
import torch.nn as nn
import re

# 清洗文本并进行分词
def tokenize(text):
    # 移除特殊字符和标点,并转换为小写
    text = re.sub(r'[^\w\s]', '', text).lower()
    # 分词
    return text.split()

# 创建词汇表
def create_vocab(text_tokens):
    vocab = Counter(text_tokens)
    vocab = sorted(vocab, key=vocab.get, reverse=True)
    vocab_to_int = {word: ii for ii, word in enumerate(vocab, 1)} # 索引从1开始
    return vocab_to_int

# 将文本转换为数字形式
def text_to_int(tokens, vocab_to_int):
    return [vocab_to_int[word] for word in tokens if word in vocab_to_int]

# 定义Embedding和EmbeddingBag层
def define_embedding_layers(vocab_size, embedding_dim=100):
    embedding = nn.Embedding(num_embeddings=vocab_size, embedding_dim=embedding_dim)
    embedding_bag = nn.EmbeddingBag(num_embeddings=vocab_size, embedding_dim=embedding_dim, mode='mean')
    return embedding, embedding_bag

# 读取文件内容
file_path = 'D:/任务文件 (1).txt'
with open(file_path, 'r', encoding='utf-8') as file:
    file_content = file.read()

# 文本清洗和分词
tokens = tokenize(file_content)

# 创建词汇表
vocab_to_int = create_vocab(tokens)

# 将文本转换为数字形式
int_text = text_to_int(tokens, vocab_to_int)

# 定义嵌入层参数
embedding_dim = 100
vocab_size = len(vocab_to_int) + 1

# 定义Embedding和EmbeddingBag层
embedding, embedding_bag = define_embedding_layers(vocab_size, embedding_dim)

# 转换为tensor以供嵌入层使用
input_tensor = torch.tensor([int_text], dtype=torch.long)

# 使用Embedding和EmbeddingBag进行词嵌入
embedded = embedding(input_tensor)
embedded_bag = embedding_bag(input_tensor)

# 打印结果
print("Embedding shape:", embedded.shape)
print("EmbeddingBag shape:", embedded_bag.shape)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/316036.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【开源】基于JAVA语言的民宿预定管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色2.2.2 房主角色2.2.3 系统管理员角色 三、系统展示四、核心代码4.1 查询民宿4.2 新增民宿4.3 新增民宿评价4.4 查询留言4.5 新增民宿订单 五、免责说明 一、摘要 1.1 项目介绍 基于…

Sectigo有几种泛域名SSL证书买一年送一个月

Sectigo是一家知名的数字证书颁发机构,提供了很多种类型的SSL证书,可以满足不同用户的需求。其中,泛域名SSL证书是一种常见的证书类型,可以同时保护主域名以及主域名下所有子域名。今天就随SSL盾小编了解Sectigo旗下有几种泛域名S…

【深入挖掘Java技术】「源码原理体系」盲点问题解析之HashMap工作原理全揭秘(上)

HashMap工作原理全揭秘 — 核心源码解析 知识盲点概念介绍数据结构数组链表数组VS链表哈希表不同JVM版本HashMap的展现形式 HashMap VS HashTable特性区别对比 hashcodehashCode的作用equals方法和hashcode的关系key为null怎么办执行步骤 核心参数容量探讨负载因子探讨加载因子…

JVM基础(11)——G1垃圾回收器

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…

用vcpkg安装openssl

用vcpkg安装openssl 背景解决方案1 安装vcpkg1.1 下载代码组件1.1 生成vcpkg.exe1.2 安装openssl 2 配置环境变量3 重新编译运行,正常通过 背景 最近学习Rust的时候,有个依赖需要用到Openssl,但是cargo编译的时候提示如下信息: …

Unity 编辑器篇|(四)编辑器拓展GUI类 (全面总结 | 建议收藏)

目录 1. 前言2. 参数2.1 静态变量2.2 静态函数2.3 委托 3. 功能3.1 按钮:Button、RepeatButton3.2 文本:Label 、TextField 、TextArea 、PasswordField3.3 滑动条:HorizontalScrollbar 、VerticalScrollbar3.4 滑条:VerticalSlid…

【python】08.面向对象编程基础

面向对象编程基础 活在当下的程序员应该都听过"面向对象编程"一词,也经常有人问能不能用一句话解释下什么是"面向对象编程",我们先来看看比较正式的说法。 "把一组数据结构和处理它们的方法组成对象(object&#…

Spark Doris Connector 可以支持通过 Spark 读取 Doris 数据类型不兼容报错解决

1、版本介绍: doris版本: 1.2.8Spark Connector for Apache Doris 版本: spark-doris-connector-3.3_2.12-1.3.0.jar:1.3.0-SNAPSHOTspark版本:spark-3.3.1 2、Spark Doris Connector Spark Doris Connector - Apache Doris 目…

FLUKE 8588A数字多用表

181/2461/8938产品概述: 福禄克校准8588A参考万用表是世界上最稳定的数字化万用表。这款长量程高精度参考万用表专为校准实验室设计,具有出色的精度和长期稳定性,测量范围广泛,具有直观的用户界面和彩色显示屏。8588A具有超过12种…

使用Mixtral-offloading在消费级硬件上运行Mixtral-8x7B

Mixtral-8x7B是最好的开放大型语言模型(LLM)之一,但它是一个具有46.7B参数的庞大模型。即使量化为4位,该模型也无法在消费级GPU上完全加载(例如,24 GB VRAM是不够的)。 Mixtral-8x7B是混合专家(MoE)。它由8个专家子网组成,每个子…

阿尔泰科技——PXIe8912/8914/8916高速数据采集卡

阿尔泰科技PXIe8912/8914/8916高速数据采集卡是2通道同步采样数字化仪,专为输入信号高达 100M 的高频和高动态范围的信号而设计。 与Labview无缝连接,提供图形化API函数。模拟输入范围可以通过软件编程设置为1V 或者5V。配备了容量高达 2GB的板载内存。…

硬盘重新分区怎么恢复分区之前的文件?

分区是常见的故障,通常由多种原因引起。一方面,硬盘老化或者受到损坏可能会导致分区表出现问题;另一方面,用户误操作,如格式化或分区不当,也可能导致分区丢失。针对此问题,解决方法包括使用专业…

Python——猜猜心里的数字(2)

1、数字随机产生,范围1-10 2、有三次机会猜数字通过三层嵌套 3、每次猜不中,提示大小 import random numrandom.randint(1,10) guess_num int(input("请输入您猜测的值:")) if guess_numnum:print("恭喜你,第一次…

基于虚拟机安装centos且远程连接

基于虚拟机安装centos且远程连接 1、安装虚拟机 目前市面上的虚拟机种类有很多,我们可以选择自己熟悉的虚拟机进行安装,我在这里用的虚拟机是VMware。具体的安装过程很简单,一直点击下一步就可以了。因为VMware虚拟机需要激活,所…

【机器学习 西瓜书】期末复习笔记整理

一些杂点: 测试集如何归一化? —— 不是用测试集的均值和标准差,而是用训练集的! 机器学习: 对计算机一部分数据进行学习,然后对另外一些数据进行预测与判断。 参考计算例题: 机器学习【期末复习…

88.乐理基础-记号篇-反复记号(二)D.C.、D.S.、Fine、Coda

内容参考于:三分钟音乐社 上一个内容:87.乐理基础-记号篇-反复记号(一)反复、跳房子-CSDN博客 下图红色左括号框起来的东西,它们都相对比较抽象一点,这几个词都是意大利语 首先D.C.这个标记,然…

数据结构排序——详细讲解归并排序(c语言实现递归及非递归)

上次是快排和冒泡:数据结构排序——详解快排及其优化和冒泡排序(c语言实现、附有图片与动图示意) 今天为大家带来归并排序 文章目录 1.基本思想2.递归实现3.非递归实现 1.基本思想 归并排序是一种分治算法,它将序列分成两个子序列&#xff0…

Java多线程并发篇----第十篇

系列文章目录 文章目录 系列文章目录前言一、start 与 run 区别二、JAVA 后台线程三、什么是乐观锁前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、start 与 r…

【金猿人物展】DataPipelineCEO陈诚:赋能数据应用,发挥未来生产力

‍ 陈诚 本文由DataPipelineCEO陈诚撰写并投递参与“数据猿年度金猿策划活动——2023大数据产业年度趋势人物榜单及奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 我们处在一个“见证奇迹”的时代。在过去的20年间,我们见证了大数据技术快速发展所带…

Flask+ Dependency-injecter+pytest 写测试类

最近在使用这几个在做项目,因为第一次用这个,所以不免有些问题。总结下踩的坑 1.测试类位置 首先测试类约定会放在tests里面,不然有可能发生引入包的问题,会报错某些包找不到。 2. 测试类依赖注入 这里我就用的真实的数据库操作…