【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] = i
    index_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] = i
    index_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] = i
    index_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] = i
    index_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(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.mfbz.cn/a/468791.html

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

相关文章

【LIMS】微服务

目录 一、服务解决方案-Spring Cloud Alibaba1.1选用原因(基于Spring Cloud Alibaba的试用场景)1.2 核心组件使用前期规划 部署 nacos部署 mino使用JavaFreemarker模板引擎,根据XML模板文件生成Word文档使用JavaFlowable 工作流引擎前端 -vue…

信息发布系统

特色功能 画布功能---可任意拖动各控件的播放位置及大小,可任意选择屏幕背景色或添加背景图 同步联屏---毫秒级同步功能 视频切换无黑屏 触摸查询系统 会议预定系统 终端显示-会议综合屏 终端显示-会议预定屏 终端显示-移动端 广告发布系统 硬件产品-智能终端 硬件…

Codeforces Round 933(Div.3) A~F

A.Rudolf and the Ticket(暴力) 题意: 鲁道夫要去拜访伯纳德,他决定乘坐地铁去找他。车票可以在接受两个硬币的机器上购买,这两个硬币的总和不超过 k k k。 鲁道夫有两个装硬币的口袋。左边口袋里有 n n n枚面值为 …

有问有答开源问答平台网站源码系统 带完整的安装代码包以及搭建教程

在当前的信息爆炸时代,用户对于高效、精准地获取信息的需求日益强烈。问答平台以其独特的互动形式,能够为用户提供更加直接、实用的信息解答。然而,市场上的问答平台大多存在功能单一、定制化程度低等问题,难以满足用户多样化的需…

抖音无水印视频关键词批量下载|视频下载工具

抖音无水印视频关键词批量下载操作说明 我们根据自己的需要开发了抖音视频批量下载工具,现在市面上的视频无水印工具只能通过单个视频链接进行提取,太不方便 所以我们延伸出了 不仅可以通过单个视频链接进行提取也可通过关键词进行视频搜索 进行批量和有…

tsn交换机应用场景

TSN交换机应用场景 随着工业互联网的快速发展,越来越多的工业设备需要进行互联互通,并实现实时通信和数据传输。而传统的以太网交换机在满足工业互联网需求方面存在一定的局限性,因此,TSN(时钟同步网络)交换…

【数字图像处理系列】显示图像

显示图像 在 MATLAB 桌面上图像一般使用函数imshow来显示,该函数的基本语法为imshow(f,[])imshow(f,[])将变量 1ow设置为数组f的最小值,将变量high设置为数组的最大值 imshow(f,[low high])imshow(f,[low high])会将所有小于或等于1ow的值都显示为黑色,所有大于或等于high…

【测试开发学习历程】MySQL条件查询与通配符 + MySQL函数运算(上)

前言: 18日08:56,总要先写完明天的博客,才能安心准备今天或者明天的学习。 半夜爬起来写博客真的好辛苦!!!!!!!!! 回归…

语音识别:whisper部署服务器,可远程访问,实时语音转文字(全部代码和详细部署步骤)

Whisper是OpenAI于2022年发布的一个开源深度学习模型,专门用于语音识别任务。它能够将音频转换成文字,支持多种语言的识别,包括但不限于英语、中文、西班牙语等。Whisper模型的特点是它在多种不同的音频条件下(如不同的背景噪声水…

html--蝴蝶

<!DOCTYPE html> <html lang"en" > <head> <meta charset"UTF-8"> <title>蝴蝶飞舞</title> <link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.cs…

基于GEC6818的QT开发之——通过不同按键控制DHT11模块的数据采集与动态显示

基于GEC6818的QT开发之——通过不同按键控制DHT11模块的数据采集与动态显示 使用环境: ubantu16 QT5.7 开发板GEC6818 实现要求&#xff1a; 利用A53按键1、按键2与温湿度传感器完成QT界面动态显示温湿度记录&#xff0c;并指定温湿度记录超过指定范围&#xff0c;进行报警&…

自主可控|工业机箱/控制器助力打造高性能、超稳定测试系统!

产品介绍 PXIeC-7318GN3L1-21DBM 是一款拥有出色性能和创新功能的18槽PXI Express机箱&#xff0c;具备1个system插槽和17个hybrid外设插槽&#xff0c;采用hybrid插槽设计&#xff0c;可以安装Compact PCI、PXI、Compact PCl Express和PXI Express模组到任何外设插槽内&…

PONAR电比例控制阀驱动器

控制PONAR WADOWICE比例方向阀&#xff0c;比例流量阀&#xff0c;比例压力阀&#xff0c;比例插装阀控制器放大器放大板&#xff0c;控制阀系列&#xff1a;WDUD10、WDUD6、WZCDE4、WZRS6、WZCR6、3WZCDE6、WZCPE10、WZPPE10、WZPSE20、WZPPE20、WZPSE10、WZPSE6、WZPPE10、WZ…

用Python直接获取Word文档页数、字数、段落数、节数等信息

计算 Word 文档的页数、字数等信息是出版、学术和内容管理等领域的一项基本任务。准确的页数和字数对于评估文档长度、估算印刷成本、分析文本复杂性以及确保符合格式化指南至关重要。逐个预览文档查看相关信息是非常麻烦的事情&#xff0c;我们可以在不预览文档的情况下&#…

产品说明书VS产品规格书:有什么区别

产品说明书和产品规格书是两个不同的文档&#xff0c;虽然它们都涉及到产品的描述和细节&#xff0c;但侧重点和用途有所不同。 | 内容侧重点不同 产品说明书更侧重于向用户解释产品的使用方法和操作细节。它就像是一本用户手册&#xff0c;告诉用户如何安装、操作、维护和保养…

记录收支明细,轻松导出表格,让家庭财务一目了然!

随着生活节奏的加快&#xff0c;家庭财务管理变得越来越重要。想要掌握家庭的收支情况&#xff0c;合理规划预算&#xff0c;却常常被琐碎的账目和复杂的表格困扰&#xff1f;别担心&#xff0c;我们为您带来一款全新的家庭财务管理工具&#xff0c;让您轻松记录收支明细&#…

【教程】APP加固的那些小事情

摘要 APP加固是保护APP代码逻辑的重要手段&#xff0c;通过隐藏、混淆、加密等操作提高软件的逆向成本&#xff0c;降低被破解的几率&#xff0c;保障开发者和用户利益。本文将介绍APP加固常见失败原因及解决方法&#xff0c;以及处理安装出现问题的情况和资源文件加固策略选择…

手把手教你搭建雾锁王国Enshrouded服务器

免费自建雾锁王国Enshrouded服务器&#xff0c;先领取阿里云300元无门槛代金券&#xff0c;然后在雾锁王国Enshrouded专题页一键部署&#xff0c;不需要基础&#xff0c;鼠标点选即可10秒钟创建一台雾锁王国游戏服务器&#xff0c;超简单&#xff0c;阿里云服务器网aliyunfuwuq…

Redis @type的一个坑

redis中type导致取数据解析报错 java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to 新建一个对象存入redis中&#xff0c;对象中会出现一个字段type LoginUser user new LoginUser () ...... redisTemplate.opsForValue().set(key, user)存…

k8s集群部署elk

一、前言 本次部署elk所有的服务都部署在k8s集群中&#xff0c;服务包含filebeat、logstash、elasticsearch、kibana&#xff0c;其中elasticsearch使用集群的方式部署&#xff0c;所有服务都是用7.17.10版本 二、部署 部署elasticsearch集群 部署elasticsearch集群需要先优化…