深度学习入门--PyTorch文字处理及Embedding

😁大家好,我是CuddleSabe,目前大四在读,深圳准入职算法工程师,研究主要方向为多模态(VQA、ImageCaptioning等),欢迎各位佬来讨论!
🍭我最近在有序地计划整理CV入门实战系列NLP入门实战系列。在这两个专栏中,我将会带领大家一步步进行经典网络算法的实现,欢迎各位读者(da lao)订阅🍀

PyTorch文字处理及Embedding

文字处理

在深度学习中我们需要在文本处理时创立两个 Dic字典 :
word2idx 以及idx2word
在这里插入图片描述
这是以所爱隔山海,山海皆可开为例

代码部分:

def Word_Proccess(sentence):
    symbols = ',.?。,()()/*-+!!@#$¥%……^&-_ '
    word2idx = {}
    idx2word = {}
    i = 0
    for word in sentence:
        if word2idx.get(word) == None\
                and word not in symbols:
            word2idx[word] = i
            idx2word[i] = word
            i += 1
    return word2idx, idx2word, i

word2idx, idx2word, vocab_num = Word_Proccess('所爱隔山海,山海皆可开。')
print(word2idx)
print(idx2word)
print(vocab_num)

在这里插入图片描述

Embedding

torch.nn.Embedding(单词数, Embedding维度)

Embedding相比于one-hot,更加节省空间,且更训练。
Embedding层本质是生成一张 单词数*Embedding维度 大小的表

以embedding = torch.nn.Embedding(3, 5)为例

单词/idx特征一特征二特征三特征四特征五
‘我’/0-0.3367-3.1418-1.23221.13051.1179
‘爱’/1-0.60502.69154.04441.32591.6389
‘你’/2-3.0094-2.00471.8739-2.0861-3.3471

完整代码如下:

import torch
import torch.nn as nn
import math

class Embeddings(nn.Module):
    def __init__(self, d_model, vocab):
        super(Embeddings, self).__init__()
        self.lut = nn.Embedding(vocab, d_model)
        self.d_model = d_model

    def forward(self, x):
        return self.lut(x) * math.sqrt(self.d_model)


def Word_Proccess(sentence):
    symbols = ',.?。,()()/*-+!!@#$¥%……^&-_ '
    word2idx = {}
    idx2word = {}
    i = 0
    for word in sentence:
        if word2idx.get(word) == None\
                and word not in symbols:
            word2idx[word] = i
            idx2word[i] = word
            i += 1
    return word2idx, idx2word, i



sentence = '所爱隔山海,山海皆可开。'   # 待编码的句子
word2idx, idx2word, vocab_num = Word_Proccess(sentence)  # 获得两张表和单词数量

embedding_dim = 5  # Embedding后每个单词的特征数,即Embedding维度
Embedding_Layer = Embeddings(embedding_dim, vocab_num)  # (Embedding维度, 单词数)
# 即创立一个 单词数*维度 大小的表

idx_s = []
for word in sentence:
    if word in word2idx:
        idx_s.append(word2idx[word])
print('word2idx之前的句子为:'+sentence)
print('word2idx之后的句子为:'+str(idx_s))
idx_s = torch.LongTensor(idx_s)
print(Embedding_Layer(idx_s))

在这里插入图片描述
Embedding的向量是会被Train的,所以在经过Train之后进行降维可视化,可以看出词义相近的单词,两个单词的Embedding维度的距离也比较近。

在这里插入图片描述

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CuddleSabe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值