深度学习-循环神经网络RNN

一. 自然语言处理概述

自然语言处理(Nature language Processing, NLP)研究的主要是通过计算机算法来理解自然语言。对于自然语言来说,处理的数据主要就是人类的语言,例如:汉语、英语、法语等,该类型的数据不像我们前面接触的过的结构化数据、或者图像数据可以很方便的进行数值化。

二. 词嵌入层

词嵌入层的作用就是将文本转换为向量。

  1. 语料分词, 构建词与索引的映射词表

  2. nn.Embedding构建词嵌入矩阵

原理

词嵌入层首先会根据输入的词的数量构建一个词向量矩阵[词个数, 词向量(多少列表示一个词)] => [word_count, 词向量维度],例如: 我们有 100 个词,每个词希望转换成 128 维度的向量,那么构建的矩阵形状即为: 100*128,输入的每个词都对应了一个该矩阵中的一个向量。

API及代码

API

在 PyTorch 中,使用 nn.Embedding 词嵌入层来实现输入词的向量化

nn.Embedding(num_embeddings=10, embedding_dim=4)
"""
nn.Embedding 对象构建时,最主要有两个参数:
num_embeddings 表示词的数量
embedding_dim 表示用多少维的向量来表示每个词
"""

词转词向量步骤

  1. 先将语料进行分词,构建词与索引的映射,我们可以把这个映射叫做词表Vocab,词表中每个词都对应了一个唯一的索引

  2. 然后使用 nn.Embedding 构建词嵌入矩阵,词索引对应的向量即为该词对应的数值化后的向量表示。

例如,文本数据为: "北京冬奥的进度条已经过半,不少外国运动员在完成自己的比赛后踏上归途。",

代码

import jieba
import torch.nn as nn
import torch
​
​
if __name__ == '__main__':
    # 读取文本
    txt = '北京冬奥的进度条已经过半,不少外国运动员在完成自己的比赛后踏上归途。'
    # jieba分词
    words = jieba.lcut(txt)
    print('文本分词: \n', words)
    # 去重
    unique_words = list(set(words))
    print('去重后分词: \n', unique_words)
    # 构建词嵌入层
    embedding = nn.Embedding(num_embeddings=len(unique_words), embedding_dim=4)
    print('词嵌入层: \n', embedding)
    # 词语的词向量表示
    # enumerate: 获取索引和元素
    for i, word in enumerate(unique_words):
        # print(torch.tensor(i), word)
        # 将第i个词转为tensor, 并通过词嵌入层进行转换
        print(word, embedding(torch.tensor(i)))

三. 循环网络RNN

原理

基本介绍

文本数据是具有序列特性的

例如: "我爱你", 这串文本就是具有序列关系的,"爱" 需要在 "我" 之后,"你" 需要在 "爱" 之后, 如果颠倒了顺序,那么可能就会表达不同的意思。

为了表示出数据的序列关系,需要使用循环神经网络(Recurrent Nearal Networks, RNN) 来对数据进行建模,RNN 是一个作用于处理带有序列特点的样本数据。

计算过程

h 表示隐藏状态,

每一次的输入都会包含两个值: 上一个时间步的隐藏状态、当前状态的输入值,输出当前时间步的隐藏状态和当前时间步的预测结果。

上述内容画了 3 个神经元, 但是实际上只有一个神经元,"我爱你" 三个字是重复输入到同一个神经元中。

首先初始化出第一个隐藏状态h0,一般都是全0的一个

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值