【NLP学习记录】One-Hot编码

1. One-Hot编码概念

one-hot编码的基本思想是将每个类别映射到一个向量,其中只有一个元素的值为1,其余元素的值为0。这样,每个类别之间相互独立,不存在顺序或距离关系。

举例:对于三个类别的情况,可以使用如下的one-hot编码:

  • 类别1:[1,0,0]
  • 类别2:[0,1,0]
  • 类别3:[0,0,1]

在深度学习中,神经网络的输入层通常使用one-hot编码来表示分类变量。这种编码方式可避免不必要的关系假设,还能清晰的输入表示,有助于模型的学习和泛化。

2. 英文文本案例

import torch
import torch.nn.functional as F#示例文本
texts = ['Hello, how are you? ','I am doing well, thank you! ','Goodbye.']#构建词汇表
word_index = {}
index_word = {}
for i, word in enumerate(set("".join(texts).split())):word_index[word] = iindex_word[i] = word#将文本转化为整数序列
sequences = [[word_index[word]for word in text.split()] for text in texts]#获取词汇表大小
vocab_size = len(word_index)#将整数序列转化为one-hot编码
one_hot_results = torch.zeros(len(texts), vocab_size)
for i, seq in enumerate (sequences):one_hot_results[i,seq] = 1#打印结果
print("词汇表:")
print(word_index)
print("\n文本:")
print(texts)
print("\n文本序列:")
print(sequences)
print("\nOne-Hot编码:")
print(one_hot_results)

运行结果:
在这里插入图片描述

3. 中文文本案例

import torch
import torch.nn.functional as F#示例中文文本
texts = ['你好,最近怎么样? ', '我过得很好,谢谢!', 'K同学啊']#构建词汇表
word_index = {}
index_word = {}
for i, word in enumerate(set("".join(texts))):word_index[word] = iindex_word[i] = word#将文本转化为整数序列
sequences = [[word_index[word] for word in text] for text in texts]#获取词汇表大小
vocab_size = len(word_index)#将整数序列转化为one-hot编码
one_hot_results = torch.zeros(len(texts), vocab_size)
for i,seq in enumerate(sequences):one_hot_results[i,seq] = 1#打印结果
print("词汇表:")
print(word_index)
print("\n文本:")
print(texts)
print("\n文本序列:")
print(sequences)
print("\nOne-Hot编码:")
print(one_hot_results)   

运行结果
在这里插入图片描述

注意: 以上案例以字为基本单位,但词语被拆分后,显然失去原有的意思。在下面的案例中,我们将使用jieba分词工具对句子进行划分。

使用结巴分词(jieba)进行中文文本的分词处理,然后将分词后的结果转化为one-hot编码。首先,确保你已经安装了结巴分词库:pip install jieba

import torch
import torch.nn.functional as F
import jieba#示例中文文本
texts = ['你好,最近怎么样? ', '我过得很好,谢谢!', '再见。']# 使用结巴分词进行分词
tokenized_texts = [list(jieba.cut(text)) for text in texts]#构建词汇表
word_index = {}
index_word = {}
for i, word in enumerate(set([word for text in tokenized_texts for word in text])):word_index[word] = iindex_word[i] = word#将文本转化为整数序列
sequences = [[word_index[word] for word in text] for text in tokenized_texts]#获取词汇表大小
vocab_size = len(word_index)#将整数序列转化为one-hot编码
one_hot_results = torch.zeros(len(texts), vocab_size)
for i,seq in enumerate(sequences):one_hot_results[i,seq] = 1#打印结果
print("词汇表:")
print(word_index)
print("\n文本:")
print(texts)
print("\n文本序列:")
print(sequences)
print("\nOne-Hot编码:")
print(one_hot_results)    

运行结果:
在这里插入图片描述

4. 任务

  • 任务要求:加载one-hot task.txt文件,并使用one-hot编码进行处理
import torch
import jieba
#获取文件路径
file_name = "D:\\Personal Data\\Learning Data\\DL Learning Data\\one-hot task.txt"
# 从文本中读取文本行
with open(file_name,"r",encoding = "utf-8") as file:context = file.read()sentences = context.split()
# 使用jieba逐句分词
tokenized_texts = [list(jieba.lcut(sentence)) for sentence in sentences]
#构建词汇表
word_index = {}
index_word = {}
for i, word in enumerate(set([word for text in tokenized_texts for word in text])):word_index[word] = iindex_word[i] = wordsequences = [[word_index[word] for word in text] for text in tokenized_texts]#获取词汇表大小
vocab_size = len(word_index)#将整数序列转化为one-hot编码
one_hot_results = torch.zeros(len(sentences), vocab_size)
for i,seq in enumerate(sequences):one_hot_results[i,seq] = 1#打印核对结果
print("====词汇表:====\n", word_index)
print("====文本:====\n", sentences)
print("====分词结果:====\n", tokenized_texts)
print("====文本序列:====\n",sequences)
print("====One-Hot编码:====\n", one_hot_results)

运行结果:

====词汇表:===={'到': 0, '是': 1, 'hot': 2, '三个': 3, '情况': 4, '为': 5, '这些': 6, '不': 7, '值': 8, ':': 9, '可能': 10, '对于': 11, ')': 12, '独立': 13, '具有': 14, '独热': 15, '将': 16, '称': 17, '距离': 18, '和': 19, '编码方式': 20, '可以': 21, '-': 22, '一个': 23, '错误': 24, '思想': 25, '只有': 26, '3': 27, '地': 28, '例如': 29, '使用': 30, '提到': 31, '这': 32, '用': 33, '1': 34, '分别': 35, '为了': 36, '其余': 37, '一些': 38, '避免': 39, '基本': 40, '有': 41, '这种': 42, '关系': 43, '问题': 44, '也': 45, '之间': 46, ',': 47, '每个': 48, '序列': 49, '元素': 50, '(': 51, '采用': 52, '。': 53, '或': 54, '2': 55, '上面': 56, '模型': 57, '的': 58, 'one': 59, '相互': 60, '字典': 61, '顺序': 62, '而': 63, '实际上': 64, '了': 65, '表示': 66, '存在': 67, '、': 68, '或者': 69, '会': 70, '但是': 71, '引入': 72, '比较': 73, '其中': 74, '实际意义': 75, '就是': 76, '认为': 77, '不同': 78, '向量': 79, '编码': 80, '直观': 81, '类别': 82, '这样': 83, '如下': 84, '映射': 85, '0': 86}
====文本:====['比较直观的编码方式是采用上面提到的字典序列。例如,对于一个有三个类别的问题,可以用1、2和3分别表示这三个类别。但是,这种编码方式存在一个问题,就是模型可能会错误地认为不同类别之间存在一些顺序或距离关系,而实际上这些关系可能是不存在的或者不具有实际意义的。', '为了避免这种问题,引入了one-hot编码(也称独热编码)。one-hot编码的基本思想是将每个类别映射到一个向量,其中只有一个元素的值为1,其余元素的值为0。这样,每个类别之间就是相互独立的,不存在顺序或距离关系。例如,对于三个类别的情况,可以使用如下的one-hot编码:']
====分词结果:====[['比较', '直观', '的', '编码方式', '是', '采用', '上面', '提到', '的', '字典', '序列', '。', '例如', ',', '对于', '一个', '有', '三个', '类别', '的', '问题', ',', '可以', '用', '1', '、', '2', '和', '3', '分别', '表示', '这', '三个', '类别', '。', '但是', ',', '这种', '编码方式', '存在', '一个', '问题', ',', '就是', '模型', '可能', '会', '错误', '地', '认为', '不同', '类别', '之间', '存在', '一些', '顺序', '或', '距离', '关系', ',', '而', '实际上', '这些', '关系', '可能', '是', '不', '存在', '的', '或者', '不', '具有', '实际意义', '的', '。'], ['为了', '避免', '这种', '问题', ',', '引入', '了', 'one', '-', 'hot', '编码', '(', '也', '称', '独热', '编码', ')', '。', 'one', '-', 'hot', '编码', '的', '基本', '思想', '是', '将', '每个', '类别', '映射', '到', '一个', '向量', ',', '其中', '只有', '一个', '元素', '的', '值', '为', '1', ',', '其余', '元素', '的', '值', '为', '0', '。', '这样', ',', '每个', '类别', '之间', '就是', '相互', '独立', '的', ',', '不', '存在', '顺序', '或', '距离', '关系', '。', '例如', ',', '对于', '三个', '类别', '的', '情况', ',', '可以', '使用', '如下', '的', 'one', '-', 'hot', '编码', ':']]
====文本序列:====[[73, 81, 58, 20, 1, 52, 56, 31, 58, 61, 49, 53, 29, 47, 11, 23, 41, 3, 82, 58, 44, 47, 21, 33, 34, 68, 55, 19, 27, 35, 66, 32, 3, 82, 53, 71, 47, 42, 20, 67, 23, 44, 47, 76, 57, 10, 70, 24, 28, 77, 78, 82, 46, 67, 38, 62, 54, 18, 43, 47, 63, 64, 6, 43, 10, 1, 7, 67, 58, 69, 7, 14, 75, 58, 53], [36, 39, 42, 44, 47, 72, 65, 59, 22, 2, 80, 51, 45, 17, 15, 80, 12, 53, 59, 22, 2, 80, 58, 40, 25, 1, 16, 48, 82, 85, 0, 23, 79, 47, 74, 26, 23, 50, 58, 8, 5, 34, 47, 37, 50, 58, 8, 5, 86, 53, 83, 47, 48, 82, 46, 76, 60, 13, 58, 47, 7, 67, 62, 54, 18, 43, 53, 29, 47, 11, 3, 82, 58, 4, 47, 21, 30, 84, 58, 59, 22, 2, 80, 9]]
====One-Hot编码:====tensor([[0., 1., 0., 1., 0., 0., 1., 1., 0., 0., 1., 1., 0., 0., 1., 0., 0., 0.,1., 1., 1., 1., 0., 1., 1., 0., 0., 1., 1., 1., 0., 1., 1., 1., 1., 1.,0., 0., 1., 0., 0., 1., 1., 1., 1., 0., 1., 1., 0., 1., 0., 0., 1., 1.,1., 1., 1., 1., 1., 0., 0., 1., 1., 1., 1., 0., 1., 1., 1., 1., 1., 1.,0., 1., 0., 1., 1., 1., 1., 0., 0., 1., 1., 0., 0., 0., 0.],[1., 1., 1., 1., 1., 1., 0., 1., 1., 1., 0., 1., 1., 1., 0., 1., 1., 1.,1., 0., 0., 1., 1., 1., 0., 1., 1., 0., 0., 1., 1., 0., 0., 0., 1., 0.,1., 1., 0., 1., 1., 0., 1., 1., 1., 1., 1., 1., 1., 0., 1., 1., 0., 1.,1., 0., 0., 0., 1., 1., 1., 0., 1., 0., 0., 1., 0., 1., 0., 0., 0., 0.,1., 0., 1., 0., 1., 0., 0., 1., 1., 0., 1., 1., 1., 1., 1.]])

5. 总结

  • 文本的基本处理流程:1. 将文本分割为句子 2. 将句子分割为词 3. 对词进行编码
  • one-hot编码的适用场景:特征之间相互独立,且特征数量较少

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni-app微信小程序上拉加载,下拉刷新

pages.json配置官网链接 onPullDownRefresh、onReachBottom函数跟生命周期同级 data() {return {orderList:[],total: null, //总共多少条数据page: 1,pageSize: 10,} }, onLoad() {}, mounted(){this.getInfo() }, methods:{getInfo(){API.getListxxx().then(res > {const…

JVM的工作流程

目录 1.JVM 简介 2.JVM 执行流程 3. JVM 运行时数据区 3.1 堆(线程共享) 3.3 本地方法栈(线程私有) 3.4 程序计数器(线程私有) 3.5 方法区(线程共享) 4.JVM 类加载 ① 类…

MM1: Methods, Analysis Insights from Multimodal LLM Pre-training

MM1: Methods, Analysis & Insights from Multimodal LLM Pre-training 相关链接:arxiv 关键字:多模态学习、大型语言模型、预训练、视觉语言连接、混合专家模型 摘要 本文讨论了构建高性能的多模态大型语言模型(MLLMs)。特别…

uploads-labs靶场(1-10关)

一、搭建环境: 下载upload-labs源代码 下载链接:https://codeload.github.com/c0ny1/upload-labs/zip/refs/heads/master 将压缩包解压后的文件名改为upload-labs,然后放入phpstudy\www目录下 二、关卡通关: 1、pass-01(前端绕过&#xf…

(三)丶RabbitMQ的四种类型交换机

前言:四大交换机工作原理及实战应用 1.交换机的概念 交换机可以理解成具有路由表的路由程序,仅此而已。每个消息都有一个称为路由键(routing key)的属性,就是一个简单的字符串。最新版本的RabbitMQ有四种交换机类型&a…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Grid)

网格容器,由“行”和“列”分割的单元格所组成,通过指定“项目”所在的单元格做出各种各样的布局。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 仅支持GridItem…

【算法专题--双指针算法】leetcode--283. 移动零、leetcode--1089. 复写零

🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 前言1. 移动零&#xff0…

使用opencv进行图片分析

opencv学习 一、配置环境并打开编译器 配置opencv在你的任意一个盘里创建一个专属于opencv的文件夹便于学习与整理 打开控制台winr输入cmd,进入后输入conda activate opencv,进入环境以后进入你所设置的opencv文件的盘,我的是D盘&#xff0…

C++_学习String

1.标准库中的string类 1. 字符串是表示字符序列的类 2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性 3. string 类是使用 char( 即作为它的字符类型,使用它的默…

MATLAB编译器配置:MinGW

使用 MATLAB 2022b版本,查询编译器时如上,想安装个MinGW编译器,自带的附加资源管理不好使,只能换个别的法子,经过一些参考,总结如下。 步骤1.在这里下载一个MinGW.最新版本是10.3.0.然后默认安装&#xff…

音频占用磁盘空间太多 需要把mp3音频转aac音频缩小占用空间 应该怎么操作?

一:什么是aac格式? aac是一种音频压缩格式,它是MPEG-2标准下的一种音频压缩方式,也可以作为HE-AAC,AAC或AAC-LC格式使用,是音频压缩领域中的一种重要格式。与MP3的比较,aac在保证音质的同时可以…

【NR 定位】3GPP NR Positioning 5G定位标准解读(十五)-UL-TDOA 定位

前言 3GPP NR Positioning 5G定位标准:3GPP TS 38.305 V18 3GPP 标准网址:Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读(一)-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读(…

jenkin部署spring boot项目【从0到1】

写在前面,遇到的很多错误 本来想用docker启动Jenkins的,也这样做了,但是遇到了一个非常严重的问题,就是mvn命令在docker里面不生效,然后就修改文件,但是发现vi不存在,好的。接着用yum安装vi工具…

Windows蓝牙驱动开发之模拟HID设备(一)(把Windows电脑模拟成蓝牙鼠标和蓝牙键盘等设备)

by fanxiushu 2024-03-14 转载或引用请注明原作者 把Windows电脑模拟成蓝牙鼠标和蓝牙键盘,简单的说,就是把笨重的PC电脑当成鼠标键盘来使用。 这应该是一个挺小众的应用,但有时感觉也应该算比较好玩吧, 毕竟实现一种一般人都感觉…

Selenium 自动化 —— 使用WebDriverManager自动下载驱动

上一篇文章 入门和 Hello World 实例 中,我们提供了一个最简单的 Selenium 上手的例子。 但是某一天,突然发现相同的代码居然运行报错了。这是怎么回事呢? 日志排查 日志中其实提示的很明显了:Chrome浏览器和Chrome WebDriver的…

国产Copilot--通义灵码安装教程

文章目录 在 Visual Studio Code 中安装通义灵码步骤1步骤2步骤3步骤4 参考 在 Visual Studio Code 中安装通义灵码 通义灵码,是一款基于通义大模型的智能编码辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解…

Unity开发一个FPS游戏之二

在之前的文章中,我介绍了如何开发一个FPS游戏,添加一个第一人称的主角,并设置武器。现在我将继续完善这个游戏,打算添加敌人,实现其智能寻找玩家并进行对抗。完成的效果如下: fps_enemy_demo 下载资源 首先是设计敌人,我们可以在网上找到一些好的免费素材,例如在Unity…

NCV7356D1R2G接口集成芯片中文资料PDF数据手册参数引脚图规格书价格图片

产品概述: NCV7356 是一款用于单线数据链路的物理层器件,能够使用多种具碰撞分解的载波感测多重存取 (CSMA/CR) 协议运行,如博世控制器区域网络 (CAN) 2.0 版。此串行数据链路网络适用于不需要高速数据的应用,低速数据可在物理介…

nginx gzip性能优化 —— 筑梦之路

对比使用和不使用gzip static处理 1. 不使用 gzip static 时的 gzip 处理 如果你不使用 gzip_static 而只是 "gzip on",它每次都会被压缩并发送。 虽然它实际上可能缓存在内存中,但传统观点是 "每次都会执行压缩处理,因此 CP…

Hello,Spider!入门第一个爬虫程序

在各大编程语言中,初学者要学会编写的第一个简单程序一般就是“Hello, World!”,即通过程序来在屏幕上输出一行“Hello, World!”这样的文字,在Python中,只需一行代码就可以做到。我们把这第一个爬虫就称之为“HelloSpider”&…