【Pytorch神经网络理论篇】 19 循环神经网络训练语言模型:语言模型概述+NLP多项式概述

同学你好!本文章于2021年末编写,获得广泛的好评!

故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现,

Pytorch深度学习·理论篇(2023版)目录地址为:

CSDN独家 | 全网首发 | Pytorch深度学习·理论篇(2023版)目录本专栏将通过系统的深度学习实例,从可解释性的角度对深度学习的原理进行讲解与分析,通过将深度学习知识与Pytorch的高效结合,帮助各位新入门的读者理解深度学习各个模板之间的关系,这些均是在Pytorch上实现的,可以有效的结合当前各位研究生的研究方向,设计人工智能的各个领域,是经过一年时间打磨的精品专栏!https://v9999.blog.csdn.net/article/details/127587345欢迎大家订阅(2023版)理论篇

以下为2021版原文~~~~

 

1 语言模型

循环神经网络模型可以对序列片段进行学习,找到样本间的顺序特征。这个特性非常适合运用在语言处理方向。

1.1 语言模型简介

语言模型包括文法语言模型和统计语言模型,一般指统计语言模型。

1.1.1 统计语言模型

统计语言模型是指:把语言(词的序列)看成一个随机事件,并赋予相应的概率来描述其属于某种语言集合的可能性,衡量一个句子的合理性,概率越高,说明这个句子越像是自然句子。

统计语言模型的作用是,为一个长度为m的字符串确定一个概率分布P(w1,w2,...,wm),表示其存在的可能性。其中,”w1~wm”依次表示这段文本中的各个词,用这种模型通过这些方法可以保留一定的词序信息,获得一个词的上下文信息。

2 词表与词向量

2.1 词表与词向量

    词表是指给每个单词(或字)编码,即用数字来表示单词(或字),这样才能将句子输入到神经网络中进行处理。
    比较简单的词表是为每个单词(或字)按顺序进行编号,或将这种编号用one_hot编码来表示。但是,这种简单的编号方式只能描述不同的单词(或字),无法将单词(或字)的内部含义表达出来。

于是人们开始用向量来映射单词(或字),可以表达更多信息,这种用来表示每个词的向量就称为词向量(也称词嵌入)。词向量可以理解为one-hot编码的升级版,它使用多维向量更好地描述词与词之间的关系。

2.2 词向量的原理与实现

词向量的最大优势在于可以更好地表示上下文语义。

2.2.1 词向量的含义

词向量表示词与词之间的远近关系映射为向量间的距离,从而最大限度地保留了单词(或字)原有的特征,建立在分布假说(distributional hypothesis)基础上的,即假设词的语义由其上下文决定,上下文相似的词,其语义也相似。

2.2.2 词向量的组成

(1)选择一种方式描述上下文;

(2)选择一种模型刻画某个目标词与其上下文之间的关系。

2.3 词向量的原理与实现

  one_hot编码的映射方法本质上也属于词向量,即把每个字表示为一个很长的向量,这个向量的维度是词表大小,并且只有一个维度的值为1,其余的维度都为0。这个为1的度就代表了当前的字。
    one_hot编码与词向量的唯一区别就是仅仅将字符号化,不考虑任何语义信息。如one_hot编码每一个元素由整型改为浮点型,同时再将原来稀疏的巨大维度压缩嵌入到人更小维度的空间,那么它就等同于词向量。

 2.4 词向量的实现

在神经网络的实现中,词向量更多地被称为词嵌入(word embedding),具体做法是将二维的张量映射到多维空间,即embedding中的元素将不再是、个字,而变成了字所转化的多维向量,所有向量之间是有距离远近关系的。

3 NLP中多项式的分布

在自然语言中,一句话中的某个词并不是唯一的。例如,“代码医生工作室真棒”这句话中的最后一个字“棒”,也可以换成“好”,不会影响整句话的语义。

3.1 RNN模型中存在的问题

在RNN模型中,将一个使用语言样本训练好的模型用于生成文本时,会发现模型总会将在下一时刻出现概率最大的那个词取出,即仅仅实现一种语言的设计,这种生成文本的方式失去了语言本身的多样性。

3.2 解决方案

为了解决这个问题,将RNN模型的最终结果当成一个多项式分布(multinomialdistribution),以分布取样的方式预测出下一序列的词向量。用这种方法所生成的句子更符合语言的特性。

3.2.1 多项式分布

多项式分布多项式分布是二项式分布的拓展。

二项式分布的典型例子是“扔硬币”:硬币正面朝上的概率为P,重复扔n次硬币,所得到k次正面朝上的概率即为一个二项式分布概率。把二项式分布公式拓展至多种状态,就得到了多项式分布。

3.2.2 多项式分布在RNN模型中的应用

多项式分布在RNN模型中的应用在RNN模型中,预测的结果不再是下一个序列中出现的具体某一个词,而是这个词的分布情况,这便是在RNN模型中使用多项式分布的核心思想。在获得该词的多项式分布之后,便可以在该分布中进行采样操作,获得具体的词,这种方式更符合NLP任务中语言本身的多样性,即一个句子中的某个词并不是唯一的。

3.2.3 RNN模型中的实现步骤

    (1)将RNN模型预测的结果通过全连接或卷积,变成与字典维度相同的数组。
    (2)用该数组代表模型所预测结果的多项式分布。
    (3)用torch.multinomial()函数从预测结果中采样,得到真正的预测结果。

3.3 torch.multinomial()

torch.multinomial(input, num_samples,replacement=False, out=None) → LongTensor
  • 函数作用:对input的每一行做n_samples次取值,输出的张量是每一次取值时input张量对应行的下标。输入是一个input张量,一个取样数量,和一个布尔值replacement。
  • input:张量可以看成一个权重张量,每一个元素代表其在该行中的权重。如果有元素为0,那么在其他不为0的元素,被取干净之前,这个元素是不会被取到的。
  • n_samples:是每一行的取值次数,该值不能大于每一样的元素数,否则会报错。
  • replacement:指的是取样时是否是有放回的取样,True是有放回,False无放回。

3.3.1 代码实现(每次多想次分布采样的结果均不同)

import torch
# 生成一串0-1的随机数
data = torch.rand(2,4)
print("生成的数据列表",data)
#生成的数据列表 tensor([[0.8998, 0.6512, 0.9156, 0.8575],[0.8455, 0.4838, 0.6859, 0.2629]])
a = torch.multinomial(data,1)
print("第一次采样结果:",a)
# 第一次采样结果: tensor([[0],[0]])
b = torch.multinomial(data,1)
print("第二次采样结果:",b)
# 第二次采样结果: tensor([[0],[1]])

4 循环神经网络的实现

 4.1 RNN的底层类

torch.nn.LSTM类与torch..nn.GRU类并不属于单层的网络结构,它本质上是对RNNCell的二次封装,将基本的RNN Cell按照指定的参数连接起来,形成一个完整的RNN。

在torch.nn.LSTM类与torch.nn.GRU类的内部还会分别调用torch.nn.LSTMCel类与torch.nn.GRUCell类进行具体实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常见排序算法的C#实现

排序算法常见的有直接排序、冒泡排序、快速排序、基数排序、归并排序等&#xff0c;下面是实现的代码&#xff0c;仅供参考。 #region DirectSort/// <summary>/// 直接排序./// 第一次从R[0]~R[n-1]中选取最小值&#xff0c;与R[0]交换&#xff0c;/// 第二次从R[1]~R[n…

【Pytorch神经网络实战案例】11 循环神经网络结构训练语言模型并进行简单预测

1 语言模型步骤 简单概述&#xff1a;根据输入内容&#xff0c;继续输出后面的句子。 1.1 根据需求拆分任务 (1)先对模型输入一段文字&#xff0c;令模型输出之后的一个文字。(2)将模型预测出来的文字当成输入&#xff0c;再放到模型里&#xff0c;使模型预测出下一个文字&…

【Pytorch神经网络理论篇】 20 神经网络中的注意力机制

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

【Pytorch神经网络实战案例】12 利用注意力机制的神经网络实现对FashionMNIST数据集图片的分类

1、掩码模式&#xff1a;是相对于变长的循环序列而言的&#xff0c;如果输入的样本序列长度不同&#xff0c;那么会先对其进行对齐处理&#xff08;对短序列补0&#xff0c;对长序列截断&#xff09;&#xff0c;再输入模型。这样&#xff0c;模型中的部分样本中就会有大量的零…

爬虫实战学习笔记_4 网络请求urllib3模块:发送GET/POST请求实例+上传文件+IP代理+json+二进制+超时

1 urllib3模块简介 urllib3是一个第三方的网络请求模块&#xff08;单独安装该模块&#xff09;&#xff0c;在功能上比Python自带的urllib强大。 1.1了解urllib3 urllib3库功能强大&#xff0c;条理清晰的用于HTTP客户端的python库&#xff0c;提供了很多Python标准库里所没…

C. Jon Snow and his Favourite Number DP + 注意数值大小

http://codeforces.com/contest/768/problem/C 这题的数值大小只有1000&#xff0c;那么可以联想到&#xff0c;用数值做数组的下标&#xff0c;就是类似于计数排序那样子。。 这样就可以枚举k次操作&#xff0c;然后for (int i 0; i < 1025; i)&#xff0c;也就是O(1000 *…

【Pytorch神经网络理论篇】 21 信息熵与互信息:联合熵+条件熵+交叉熵+相对熵/KL散度/信息散度+JS散度

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

【Pytorch神经网络理论篇】 22 自编码神经网络:概述+变分+条件变分自编码神经网络

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

【Pytorch神经网络实战案例】13 构建变分自编码神经网络模型生成Fashon-MNST模拟数据

1 变分自编码神经网络生成模拟数据案例说明 变分自编码里面真正的公式只有一个KL散度。 1.1 变分自编码神经网络模型介绍 主要由以下三个部分构成&#xff1a; 1.1.1 编码器 由两层全连接神经网络组成&#xff0c;第一层有784个维度的输入和256个维度的输出&#xff1b;第…

【Pytorch神经网络实战案例】14 构建条件变分自编码神经网络模型生成可控Fashon-MNST模拟数据

1 条件变分自编码神经网络生成模拟数据案例说明 在实际应用中&#xff0c;条件变分自编码神经网络的应用会更为广泛一些&#xff0c;因为它使得模型输出的模拟数据可控&#xff0c;即可以指定模型输出鞋子或者上衣。 1.1 案例描述 在变分自编码神经网络模型的技术上构建条件…

hibernate持久化对象

转载于:https://www.cnblogs.com/jianxin-lilang/p/6440101.html

【Pytorch神经网络理论篇】 23 对抗神经网络:概述流程 + WGAN模型 + WGAN-gp模型 + 条件GAN + WGAN-div + W散度

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

【Pytorch神经网络实战案例】15 WGAN-gp模型生成Fashon-MNST模拟数据

1 WGAN-gp模型生成模拟数据案例说明 使用WGAN-gp模型模拟Fashion-MNIST数据的生成&#xff0c;会使用到WGAN-gp模型、深度卷积GAN(DeepConvolutional GAN&#xff0c;DCGAN)模型、实例归一化技术。 1.1 DCGAN中的全卷积 WGAN-gp模型侧重于GAN模型的训练部分&#xff0c;而DCG…

Android启动过程深入解析

转载自&#xff1a;http://blog.jobbole.com/67931/ 当按下Android设备电源键时究竟发生了什么&#xff1f;Android的启动过程是怎么样的&#xff1f;什么是Linux内核&#xff1f;桌面系统linux内核与Android系统linux内核有什么区别&#xff1f;什么是引导装载程序&#xff1…

【Pytorch神经网络实战案例】16 条件WGAN模型生成可控Fashon-MNST模拟数据

1 条件GAN前置知识 条件GAN也可以使GAN所生成的数据可控&#xff0c;使模型变得实用&#xff0c; 1.1 实验描述 搭建条件GAN模型&#xff0c;实现向模型中输入标签&#xff0c;并使其生成与标签类别对应的模拟数据的功能&#xff0c;基于WGAN-gp模型改造实现带有条件的wGAN-…

Android bootchart(二)

这篇文章讲一下MTK8127开机启动的时间 MTK8127发布版本开机时间大约在&#xff12;&#xff10;秒左右&#xff0c;如果发现开机时间变长&#xff0c;大部分是因为加上了客户订制的东西&#xff0c;代码累赘太多了。 &#xff11;、下面看一下&#xff2d;&#xff34;&#…

Android Camera框架

总体介绍 Android Camera 框架从整体上看是一个 client/service 的架构, 有两个进程: client 进程,可以看成是 AP 端,主要包括 JAVA 代码与一些 native c/c++代码; service 进 程,属于服务端,是 native c/c++代码,主要负责和 linux kernel 中的 camera driver 交互,搜集 li…

【Pytorch神经网络实战案例】17 带W散度的WGAN-div模型生成Fashon-MNST模拟数据

1 WGAN-div 简介 W散度的损失函数GAN-dv模型使用了W散度来替换W距离的计算方式&#xff0c;将原有的真假样本采样操作换为基于分布层面的计算。 2 代码实现 在WGAN-gp的基础上稍加改动来实现&#xff0c;重写损失函数的实现。 2.1 代码实战&#xff1a;引入模块并载入样本-…

【Pytorch神经网络理论篇】 24 神经网络中散度的应用:F散度+f-GAN的实现+互信息神经估计+GAN模型训练技巧

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

【Pytorch神经网络实战案例】18 最大化深度互信信息模型DIM实现搜索最相关与最不相关的图片

图片搜索器分为图片的特征提取和匹配两部分&#xff0c;其中图片的特征提取是关键。将使用一种基于无监督模型的提取特征的方法实现特征提取&#xff0c;即最大化深度互信息&#xff08;DeepInfoMax&#xff0c;DIM&#xff09;方法。 1 最大深度互信信息模型DIM简介 在DIM模型…