one-hot和Embedding

1.文本表示按照力度划分:字级别、词级别、句子级别
  文本表示按照量级划分:
    字粒度:把每个字变成向量;
    词粒度:把每个词变成向量;
    句粒度:把每个句子变成向量。
  文本表示按照另一个量级去分:
    离散型的表示:
    分布式表示:embedding
1.embedding:概念:在one_hot基础上随机一张表,然后one_hot矩阵与随机表相乘。(词汇表有多大,随 机的表就有多少行,想把一个字变成多少维的向量,那么随机的表就有多少列)
              例如:ihello,词汇表有5个,因此one_hot可以表示为6行5列,此时随机的表行数为5,列数设置:想把一个字变成多少维的向量,那么随机的表就有多少列
              作用:通过embedding把一个one_hot稀疏的向量,变成一个稠密的向量。
小知识:1.用one_hot编码出来的变量是离散的,embedding从离散变成了分布;
                    2.embedding表是随机的,所以随机出来的表不好,但是它可以跟随模型一起训练,因此它最终一定是比one_hot好的。
#tensorflow代码
import numpy as np
import torch
import torch.nn as nn
from collections import Counter

mstr = '我们是一家人啊啊'

word_counter = Counter()
for i in mstr:
    word_counter.update(i)

word_list = [i[0] for i in word_counter.most_common()]
word_dict = {}
for i,j in enumerate(word_list):
    word_dict[j] = i

word_ids = []
for i in mstr:
    word_ids.append(word_dict[i])

word_ids = np.array([word_ids])

class Model(nn.Module):
    def __init__(self):
        super(Model, self).__init__()
        self.C = nn.Embedding(5,10)

    def forward(self,X):
        out = self.C(X)
        return out

word_ids_tensor = torch.tensor(word_ids)
model = Model()
out = model(word_ids_tensor)
print(out.data.numpy())

#torch代码

import numpy as np
import torch
import torch.nn as nn
from collections import Counter

mstr = '我们是一家人啊啊'

word_counter = Counter()
for i in mstr:
    word_counter.update(i)

word_list = [i[0] for i in word_counter.most_common()]
word_dict = {}
for i,j in enumerate(word_list):
    word_dict[j] = i

word_ids = []
for i in mstr:
    word_ids.append(word_dict[i])

word_ids = np.array([word_ids])

class Model(nn.Module):
    def __init__(self):
        super(Model, self).__init__()
        self.C = nn.Embedding(5,10)

    def forward(self,X):
        out = self.C(X)
        return out

word_ids_tensor = torch.tensor(word_ids)
model = Model()
out = model(word_ids_tensor)
print(out.data.numpy())

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在自然语言处理(NLP)中,One-Hot编码是一种常用的表示方式,用于将单词或字符转换为计算机可以理解的向量形。它是一种简单而直观的编码方法,适用于许多NLP任务。 想象一下,我们有一个单词表,里面包含了语料库中所有可能出现的单词。对于每个单词,我们创建一个与单词表大小相等的向量。这个向量中,只有与该单词对应的位置上的值为1,其他位置上的值都为0。这样的向量被称为One-Hot向量。 One-Hot编码的作用是将离散的符号数据转化为连续的向量表示,便于计算机进行处理。通过这种编码方式,我们可以将单词转换为计算机可以进行数学运算和处理的形式。 在NLP任务中,我们常常将文本中的每个单词都进行One-Hot编码。这样,我们可以将文本表示为一个矩阵,其中每一行都是一个One-Hot向量,代表了对应位置上的单词。这种表示方法可以被输入到深度学习模型中进行训练和预测。 尽管One-Hot编码非常简单和直观,但它也存在一些问题。首先,One-Hot向量非常稀疏,因为大多数位置上的值都是0。这会导致存储空间的浪费。其次,One-Hot编码无法捕捉到单词之间的语义关系和相似性。 为了解决这些问题,研究者们提出了其他更高效和语义感知的表示方法,如词嵌入(Word Embedding)。词嵌入可以将单词映射到一个低维的连续向量空间中,使得相似的单词在向量空间中更加接近。这种表示方法在许多NLP任务中取得了显著的成果。 要掌握One-Hot编码及其在NLP中的应用,你可以通过阅读相关的教材和资料来学习。同时,实践项目也是非常重要的,你可以尝试使用One-Hot编码将文本数据表示为矩阵,并将其用于NLP任务中,如文本分类或情感分析。通过理论学习和实际操作,你可以逐渐掌握这项技术,并逐步提升自己的NLP水平,从新手逐渐达到高级开发工程师的水平。加油!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值