从RNN到UniLM:NLP & DeepLearning技术发展历程。
最近在研究NLG,看了很多资料顺便整理一下收获。
使用DeepLearning技术在NLP领域,最初是从词向量和RNN开始的。
词向量(Embedding/Word2Vec)
词向量早在2003年就被提出了,当时机器学习都不火,所以没引起注意。但是随着深度学习大行其道,词向量重新火了起来。
词向量的原理也很简单,通过比对两个字或词的上下文来判断两个字或词的相似程度,比如 “我” 和 “咱” 这两个词经常出现在类似的上下文中,所以它们计算得到的向量距离接近。
RNN
RNN的R是recurrent,中文全称循环神经网络。
这种神经网络比传统的神经网络的优势是有记忆力。
在计算的过程中,除了有输入外,还会把上一次的计算产生的隐藏层也一并输入进来。
“一并输入进来”这个过程叫concat,具体做法其实很简单,就是把输入的向量和隐藏层的向量接起来。
比如输入向量长度是5, 隐藏层长度是128, 那么RNN的输入层长度就是128+5=133.
LSTM
LSTM 即 long short term memory。它其实本质也是一种RNN,但是内部模型结构不是简单的向量乘算。而是好几个矩阵,向量和计算,有点模仿电路设计,有各种门(遗忘门、输出门。。)
LSTM还有一种简化计算复杂度的变种叫GRU。
Seq2Seq(Encoder2Decoder)
单纯使用RNN或者LSTM模型存在的一个问题是,输入一个字,输出一个字。输入输出的数量是一致的。但在实际的应用过程,比如翻译,输入语句的字数和翻译结果的字数可能不一样。
面对这中情况,就出现了Seq2Seq结构。
先对输入逐字进行编码(编码RNN),最后把整句输入语句变成一个向量(Context Vector)。再把整个向量作为解码RNN的输入,进行预测,逐字得到输出。当解码器预测到EOS(end of sentence)状态的时候,即解码完成。
而且这种结构能让解码器从整个语句的角度去做判断,为后续更多的改进提供了空间。
Transform
Seq2Seq中的Context Vector,一旦编码以后就是固定的,整个decoder循环解码期间,隐藏层可能一致在变,但是Context Vector不变。
Transform,以及背后的attention机制,主要的改变就在于随着一次次的解码,context vector会变。以翻译为例,翻译每个词语的时候,通过改变context vector,把注意力集中在这个词上,然后翻译。有效缓解了歧义的发生。
具体参考链接:
https://www.zhihu.com/question/427629601/answer/1558216827
https://www.zhihu.com/question/298810062
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2020-08-04 CDH 添加 新节点 拾遗