NLP-D28-深度&Bi循环神经网络| 翻译模型与预测模型之预处理|data.DataLoader(*arrays)|encoder-decoder|*args&**kwargs

40 篇文章 0 订阅
29 篇文章 0 订阅

----0530虽然昨天1点才睡,但是早上5点就行醒了,除了眼睛有点不适之外,没什么别的感觉。今天打算先把毕业设计的视频录一下,然后就可以把沐沐 的课和代码看完了,然后!!!终于!!!写了28天的NLP之后,终于可以去看宝可梦了!哭哭!

好想跑步啊!!先贴个膏药。。。。。

—0653吃完饭啦~咋感觉一个多小时啥都没做呢hhhh就写了个计划和日记,好像真的没干别的,奇奇怪怪,哭。

—看完木木的62-seq2seq趴了一会,现在清醒多了!!!咱就是说,nap的性价比真的贼高~现在来敲一敲代码子!争取上午可以看完自注意力机制哦!

一、 RNN的输入是什么

刚刚突然发现,对于输入的预处理又模糊了。是如何处理输入的句子的呢?我们看下代码。
1、Vocab()类实现token和id之间的索引工作
在这里插入图片描述
2、corpus中装的是load进来所有文本对应的index
在这里插入图片描述
3、生成小批量(这里截图中是random方法),是直接用corpus生成的。
在这里插入图片描述
综上,是将一个待处理的文本中的所有句子放入编号号,放入一个corpus里;根据time_step划分小num_seqs;根据batch_size决定一个epoch(扫一次全文本)能做几个batch【num_seqs//batch_size】

二、深度循环神经网络

1、解决问题:网络不够深,h的表达能力有限呀,加深网络可以加强model表达能力。
2、如何实现:其实过于H之间额关系,看这个式子就ok了。
l层第t个h:=l-1层第t个h和l层第t-1个h
其实可以把上一层同一时间步的H看做是之前单层网络的X。
在这里插入图片描述

—0826看完了深层rnn和birnn,这里没有手rua,沐沐大大之间调的api,就很简单——定义rnn层的时候设定num_layers和bidirectionl=True。休息一下下~开心心

不间断空格

用来防止行尾单词间断。
在这里插入图片描述

翻译模型与预测模型之预处理

翻译模型是seq2seq的,和预测的text不同。
输入不确定,在预处理时,针对每个pair需要进行单独处理;而不是像在预测模型中直接划分就可以。
在单独处理时,我们可以用truncation和padding实现和原来time_steps的统一。

小感慨

吃早饭的时候看了半个视频,说到做ML,最好掌握python、c和java。
python使用最广泛;c可以提升速度;java是面向对象的工程化思想。
在刚刚写代码的时候,那个Vocab类真的太方便了。
在这里插入图片描述
我之前一直有点惧怕这个东西,最近跟着沐沐大大敲代码,也逐渐熟悉了class。

被送了self-portrait!!!

wow,刚刚有师妹拍拍我,说给我画了一个漫画像,好感动哇~希望自己可以努力,变得优秀,然后带给她们一些光热叭!
继续写啦!!!

关于load

from torch.utils import data
data.DataLoader()

load_array()其实就是把dataset转换为tensor,然后返回迭代器的。其中data_arrays支持多个输入对象,到时候对应接收输出就可以了。
is_train决定了要不要打乱samples顺序——训练时候打乱顺序;测试保持顺序一定,方便分析???
在这里插入图片描述
这里data_arrays中的每个data_array是被规范过长度的数据。
相当于里面放置了一个个样本,【样本数,特征数(time_steps)】
直接放入load_array(data_arrays, batch_size)根据batch_size生成iter即可。这个iter返回的batch中的每个sample都是4个值,就是传入的那个四个。

在这里插入图片描述
----0941休息一下,回来把这个load_data_mnt()写了——包裹数据预处理,最后生成iter和vocab,相当于一个大的数据预处理阶段。

当token为单词时

词表比char大很多,所以将低频词当做unkonwn来处理,减少词表大小。

encoder-decoder

1、输入长度可变
其实每次输入的是一个token,所以无论最终的seq有多长,都是被分解为一个个token输入进去的,没关系的。
2、
在这里插入图片描述
3、通过encoder将不定长序列映射为固定长度的state;
再通过decoder将固定长度的state映射为不定长度的序列。
最终实现不定长序列–》不定长序列的转换,完成seq2seq任务(序列转换问题【输入不定长+输出不定长】),比如翻译。

关于*args 和**kwargs

感觉逃是逃不过去,还是整明白点叭
1、函数定义时:接受不定长度变量
arg用于接受非键值对,可变长度的列表;
kwargs用于接受可变长度键值对。
2、调用函数时:传入参数
如果一个函数的形参为3个,
那么传入时可用
(1,2,3),把tuple解开;
更神奇的是,如果用
*kwargs,把kwargs解开的话,字典中的key会和形参匹配,并将对应的value传给对应的形参,见下图。
尽管kwargs字典的key的顺序与test__args_kwargs函数定义形参的顺序不一致,也不妨碍形参中key = arg1对应的value=5分配给形参arg1.
而使用
arg则是按tuple顺序传参啦,见下图。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

—1050去干饭啦!!!正好把看过的视频中需要敲的代码都敲了hhhh

—1816下午去开会、做ppt、开会、吃饭、做核酸去了。呜呜呜,没有学习。现在补补昨天的算法题,然后去跑步了。呜呜,今天可能看不完了呜呜呜。

—1822刚刚去看评审意见了,居然还没出鹅鹅鹅,后天就要答辩了呐。已经准备好疯狂道歉啦!好了!刷题!

—1902感觉今天状态不佳,打算去跑步了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值