两周深度学习计划(二)
今天是Task02,包含文本预处理;语言模型和循环神经网络基础课程。
这里讲述了一些文本预处理到普通RNN模型的解决方案,课程中讲的分词,建立字典的方案是较初步的处理,相较于比较复杂的非结构化的数据,特别是文本来说, 预处理的步骤是及其繁琐的,具体可参考针对于非结构化的数据(文本类)所述。
思维导图如下:
列出一些问题,如下:
为何要建立词典?
词典的主要作用是将每一个词映射到一个唯一的索引号,主要构建了一个idx_to_token列表来存储所有的词,一个token_to_idx来存储所有词的索引。在实现的的流程上是:
- 对语料进行分词,生成一个token列表,里面包含了语料的分词结果
- 对分好的词统计词频,然后根据词频来构建词典(统计好的词频完成了去重的操作,同时也保留了词的频率,方便后续的操作)
其中有一些名词:
pad的作用是在采用批量样本训练时,对于长度不同的样本(句子),对于短的样本采用pad进行填充,使得每个样本的长度是一致的
bos( begin of sentence)和eos(end of sentence)是用来表示一句话的开始和结尾
unk(unknow)的作用是,处理遇到从未出现在预料库的词时都统一认为是unknow ,在代码中还可以将一些频率特别低的词也归为这一类。
循环神经网络使用相邻采样的时候为什么要detach参数?
我们知道相邻采样的前后两个批量的数据在在时间步上是连续的,所以模型会使用上一个批量的隐藏状态初始化当前的隐藏状态,表现形式就是不需要在一个epoch的每次迭代时随机初始化隐藏状态,那么,假如没有detach的操作,每次迭代之后的输出是一个叶子节点,并且该叶子节点的requires_grad = True,也就意味着两次或者说多次的迭代,计算图一直都是连着的,因为没有遇到梯度计算的结束位置,这样将会一直持续到下一次隐藏状态的初始化。所以这将会导致计算图非常的大,进而导致计算开销非常大。而每次将参数detach出来,其实就是相当于每次迭代之后虽然是使用上一次迭代的隐藏状态,只不过我们希望重新开始,具体的操作就是把上一次的输出节点的参数requires_grad设置为False的叶子节点。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)