one-hot和Embedding

本文介绍了文本向量化的方法,包括字粒度、词粒度和句粒度,并重点讲解了Embedding的概念及其如何将离散的one_hot表示转换为稠密向量,通过实例演示了使用TensorFlow和PyTorch实现Embedding的过程。
摘要由CSDN通过智能技术生成
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())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值