开坑NLP,此乃学习笔记。
发展历史篇章重在理解思想和应用,而非公式,因为我数学不好。

第一章. 发展历史

1. 起源

在word2vec(word embedding是里程碑)出现之前,有这么一些原始但便于理解的方法:

  • one-hot:是一种用二进制数来表示物体特征的方法。数据库中假设只有sample1,2,3,4,且通过3种特征就可以分辨(e.g.特征1是性别,1代表男2代表女)

    二进制之后:

    那么sample1就可以用 01 1000 100 来表示。
    one-hot的缺点是丢失顺序,尤其在语言模型中(见参考)。

参考:https://www.cnblogs.com/lianyingteng/p/7755545.html

  • tf-idf:用频率代表某个词的重要性。TF是某个词出现的频率,IDF为其权值参数(e.g.中文语境中的“是,的,为”这些没有意义的高频词汇需要被忽略)。
    tf-idf的缺点是没有考虑上下文关系(context)。

参考:https://www.cnblogs.com/lianyingteng/p/7755545.html

  • bag-of-words:词袋模型。一个文本或文档可以看作一袋子的单词,而不考虑其语法和词序关系,每个词都是独立的。

    it出现了2次,they出现了0次…最后这句话就用 2 0 0 0 0 1 1 0 0 1 1 …来表示。

参考:https://www.pianshen.com/article/6043682148/#:~:text=Bag%20of%20Words%E5%8D%B3%E8%AF%8D%E8%A2%8B%E6%A8%A1%E5%9E%8B%EF%BC%8C%E6%98%AF%E5%AF%B9%E6%A0%B7%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%9A%84%E4%B8%80%E7%A7%8D%E8%A1%A8%E7%A4%BA%E6%96%B9%E6%B3%95%EF%BC%8C%E4%B8%BB%E8%A6%81%E5%BA%94%E7%94%A8%E5%9C%A8%20NLP,%28%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86%29%E5%92%8C%20IR%20%28%E4%BF%A1%E6%81%AF%E6%A3%80%E7%B4%A2%29%E9%A2%86%E5%9F%9F%EF%BC%8C%E8%BF%91%E5%B9%B4%E4%B9%9F%E5%BC%80%E5%A7%8B%E5%9C%A8%20CV%EF%BC%88%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89%EF%BC%89%E5%8F%91%E6%8C%A5%E4%BD%9C%E7%94%A8%E3%80%82

  • n-gram模型:gram就是用一个滑动窗口把一句话里的几个词框在一起,这几个词就叫gram。n是这个框里的单词数,刚开始的时候只能是2或者3(2-gram叫bigram模型)。然后这个框是只框前面,不考虑后文的影响。

    通过语库的训练,可以计算出某一个词跟在另一个词之后出现的概率。这里的计算不是tf-idf。如下图这个bigram模型,第一行当前词为i的时候,后面跟want的概率是0.33;第二行当前词为want的时候,后i面跟to的概率是0.66。

    最常见的应用就是搜索引擎里,当输入某一个词的时候,下拉栏里会有很多“猜你想问”。

参考: https://zhuanlan.zhihu.com/p/32829048

  • LSA:latent semantic analysis,潜在语义分析。或者叫LSI,latent semantic indexing,可用于提取文章中心思想。
    需要掌握基础:VSM(vector space model)向量空间模型,简单说就是用tf-idf把每个句子投射成vector,然后一篇文章就是一个矩阵。
    但是VSM的缺点是大稀疏矩阵,无法识别近义词,计算慢,忽略前后文。

    所以就有了LSA,同样是矩阵表示文章,但是不考虑单词和文章的关系,而是语义(话题)和文章的关系,把单词转换成语义(识别近义词)。具体操作是有一个截断奇异值分解(TSVD,truncated singular value decomposition,属于矩阵计算)。
    单词-文本矩阵和单词-话题矩阵都已知,目标是:文本-话题矩阵。
    这个算法思想接近于对初始的单词-文本矩阵进行降噪,新的语义(话题)-文本矩阵更加简洁高效。

参考:https://zhuanlan.zhihu.com/p/144367432

  • pLSA:probalilty latent semantic analysis,或者叫pLSI,就是analysisi换成indexing。其之后发展出了LDA。LSA,pLSA,LDA,都叫做主题模型,或者话题模型(给文章分析出主题,并给出主题占比)。
    它基于LSA,但是从概率的角度重新定义了LSA,更加符合贝叶斯统计的核心思想(概率导致结果),我认为作者的出发点是换了个更加符合那个年代人能够接受的说法。作者认为,一篇文章只会有特定的几个话题,而且由这些话题来产生了文字,彼此两两之间存在关联性。前者确定之后,生成的后者都是可以由概率解释的。
    w是文字,d是文章,z是话题。话题就是一种隐层,用来连接文字和文章,是一个中间节点,形象地理解就是语义。


问题是,当语库变大,参数会变得复杂且过拟合。

关键词:混合模型,词袋方法。

参考:https://www.jiqizhixin.com/articles/2019-06-12-8
https://blog.csdn.net/puqutogether/article/details/41720073

  • LDA:潜在狄利克雷分配模型,狄利克雷分布常作为贝叶斯统计的先验概率。所以这个模型就是在pLSA的基础上引入了人类的经验。具体地来说,一个文章只会有几个相关的话题,不会天马行空,通过先验知识来减少pLSA的参数和过拟合。
    人类的先验知识相当于多加了一项权重,等同于当一个人在用pLSA模型写一篇文章的时候,他手中那个文章-主题的骰子不再是均匀分布的,同样主题-文字的骰子也不是。

参考:https://www.jiqizhixin.com/articles/2019-06-12-8
https://blog.csdn.net/puqutogether/article/details/41720073

总结:

这个阶段往往忽略了单词的语义,和前后文的关系。仅仅是计算特定的某个词出现的概率,或者通过某个词出现的次数来决定文章的主题。

2. 发展过程

这个阶段出现了word2vec。word2vec并不是一个模型或者算法,它是一个工具包的名字,背后是Skip-Gram和CBOW模型,以及Hierarchical Softmax和 Negative Sampling优化算法。不过大家都喜欢这么叫就无所谓了。

  • NNLM:nerual net language model,了解就好。为之后的word2vec提供了创意。
  • Skip-Gram和CBOW(Continuous Bag-of-Words:连续词袋模型)出现于2013年,两者原理类似。是重要的word2vec论文。这两者都通过设立假目标来进行训练,目标是获得语义(词向量)。
    假目标训练,形象地说就是醉翁之意不在酒。
    比如说给定一句话:i like apple juice. 我们要得到apple的语义,那就把前后文([i, like, juice])当作输入,apple当作输出。不同于上个阶段,这个映射的过程运用神经网络而不是概率计算。假如这个时候又有另一句话:i like orange juice,那么这句话的训练结果就是([i, like, juice])当作输入,orange当作输出。我们发现输入一样,输出有两个,orange和apple。就说明了orange的语义和apple的语义类似。

参考:https://zhuanlan.zhihu.com/p/58281204

  • Hierarchical Softmax:层次softmax。使用哈夫曼树结构的softmax,即权重高的在前,权重低的往后排。毕竟数据太多了计算起来很难。

参考:https://zhuanlan.zhihu.com/p/56139075

  • Skipgram with Negative Sampling (SGNS):重点在negative上,就是说更新参数的时候不全部更新,比如语库过大,语义较少(e.g.the,a这类)。
    具体的一个例子是:计算某一个单词的tf,其值越大,则赋予这个单词的权重越小,即越容易放弃这个词的权重更新。

参考:https://zhuanlan.zhihu.com/p/56106590

  • softmax:所有输出的概率和为1,常被用于多分类的问题中。我理解为一个分类模型。为了优化这个模型,需要配合损失函数对结果进行评价,并且使用优化函数把损失函数的差降到最小。这三者绑定。
  • logistic regression:区别于机器学习中的线性回归(一条直线分类所有),逻辑回归的思想是使用映射函数进行分类,就可以解决非线性分类问题。跟softmax同为分类模型。

参考:https://blog.csdn.net/u011734144/article/details/79717470

  • sigmod函数:这个函数的x从-∞到+∞,但是y值只在[0,1]。常用作于神经网络中的激活或者压缩函数。神经网络通过一个隐层和一个sigmoid激活函数,从而可以解决非线性分类问题。
    由于其函数特征,常跟softmax放在一起。

  • 正则化:避免损失函数过拟合,在损失函数后头加上的一个“尾巴”。

参考:https://blog.csdn.net/u011734144/article/details/79717470

  • 极大似然估计:一种损失函数,和交叉熵一样。而训练过程为损失函数最小化,常使用梯度下降法。

参考:https://blog.csdn.net/u011734144/article/details/79717470

  • word2vec,word embedding到底有什么关系?
    word embedding是把单词变成向量,word2vec是最火的一种word embedding方法,利用词库进行训练。
    word2vec已经介绍过,目的是通过向量的形式表现单词的语义,这样就可以用于深度学习。word embedding(词嵌入)像一种思想,目的是通过高密度的低维向量来表示单词,除了word2vec之外还有别的算法可以实现word embedding。
    这俩对于one-hot,LSA这种传统模型的优点是,用一种高效稠密的方式表现语义。顺便一提同为早期模型的:pLSA和LDA,本意也是希望能改进LSA/VSM单词矩阵过于稀疏的缺点。
    和计算机视觉中,一张图片可以由多个通道的矩阵表示一样。通过word embedding之后,一个单词最后会表示成V_word * V_context的2个向量乘积。 这两个向量的长度是人为界定的,都代表某个单词所有的属性(一般为300,属性的例子有大小,颜色,重量,属性的顺序没有意义,是随机训练出来的结果)。
    在word2vec的训练中,由于语库中的单词不止一个,所以V_word从向量拼接成了一个矩阵,V_context同理。初始值随机。两个矩阵相乘得到某两个词连在一起的概率,并通过损失函数评估,最后通过优化函数最小化损失函数。并重复多个epoch。

    图示为V_word(图中为embedding)和V_context点乘之后,可能就代表着not后面接aaron、taco、thou的概率。

参考(写的很好):https://zhuanlan.zhihu.com/p/269312855

3. 现代技术

这个阶段的模型发生了变化,基于word2vec,但面目全非。其中一个特征是不再是词袋了,前后文的关系被进一步强化。而且使用了语言模型,说人话就是这个阶段的模型更像是人在说话,而不是单单计算几个单词拼在一起的概率。

  • ELMo:Embeddings from Language Models,时代的开篇。可以看见使用了语言模型,如LSTM,而LSTM就是RNN的改良版。LSTM在这里的作用是为了提取语义,替代了word2vec。
  • RNN:RNN和CNN算是老朋友了。R就代表循环Recurrent,当前输入输出所带来的影响会带到下一个输入输出中,简化示意图来看的话就是在循环。比如为了得到Ot,我们需要t-1时刻的隐态St-1,还有t时刻的输入Xt。这个模型天生为了语言而生。

参考:https://blog.csdn.net/Tink1995/article/details/104868903?spm=1001.2014.3001.5502

  • LSTM和GRU:这俩都是RNN无法处理长句子而想出的法子,试想每次输出都要带着前面的所有信息,句子一长就会导致数据量爆炸,所以需要忘记一部分内容。
    LSTM在RNN的基础上使用了忘记门、输入门和输出门。
    GRU则使用了重置门跟更新门。本质是一样的。

参考:https://blog.csdn.net/Tink1995/article/details/104881633

  • bert:Bidirectional Encoder Representation from Transformers,谷歌的王牌。
    关键词:transformer,attention,mask。

参考:https://zhuanlan.zhihu.com/p/98855346
(详解看这个:illustrated-transformer)https://jalammar.github.io/illustrated-transformer/

  • gpt:微软的王牌,是真的好玩。github上找一堆prompt来和她说半夜悄悄话~嘿嘿。
    关键词同样为:transformer,attention,mask。
  • transformer:五个部分,input(source)-encoder-c(隐态)-decoder-output(target),就这么简单。比如机器翻译任务中译英,input输入中文,encoder进行word embedding,隐态就是这段中文的含义的低维表示,decoder再用英文把这个含义表述出来,得到最后的英文output。encoder和decoder的训练非常类似,且常使用attention算法。

参考:https://blog.csdn.net/Tink1995/article/details/105080033

  • attention:就是权重,对于重要的东西集中注意力,权重就高。思想类似于tf-idf。
    有self-attention和context-attention。前者是自己和自己计算,输入等于输出等于当前句子,比如训练its代表的含义,就只需要在当前句子中寻找就可以了(不明白就回想RNN不断带着现在的信息去接受下一个新句子的原理,当新句子就是原句子的时候,it的含义就能被找到)。后者类似于skip-gram,预测下一个可能的单词,但是是双向的。

参考:https://blog.csdn.net/Tink1995/article/details/105012972?spm=1001.2014.3001.5502

  • self-attention详解:看完只觉得太抽象了,能想出这个办法的作者脑子也是好使。

参考:https://jalammar.github.io/illustrated-transformer/

【NLP学习】1. 发展历史相关推荐

  1. 【深度学习与图神经网络核心技术实践应用高级研修班-Day1】深度学习的发展历史(完整版)

    深度学习的常用模型及方法-深度学习发展历史 1. 深度学习发展历史 2. 深度学习的发展趋势 3. 人工神经网络 4. 模型与算法 4.1 前馈神经网络 4.2 前馈神经网络特点 4.3 前馈神经网络 ...

  2. 深度学习的发展历史是什么?

    深度学习的历史可以追溯到1943年,当时Walter Pitts和Warren McCulloch建立了基于人脑神经网络的计算机模型.他们将算法和数学方法结合在一起,称之为"阈值逻辑&quo ...

  3. 深度学习的发展历史及应用现状

    深度学习是人工神经网络的一个分支,具有深度网络结构的人工神经网络是深度学习最早的网络模型.1943年,美国数学家沃尔特·皮茨(W.Pitts)和心理学家沃伦·麦克洛克(W.McCulloch)首次提出 ...

  4. 推荐收藏!图深度学习发展历史、最新进展与应用

    本文经机器之心授权转载. [导读]本文将分图神经网络历史.图神经网络的最新研究进展和图神经网络的应用进展三大部分归纳总结该课程 Theme II: Advances and Applications ...

  5. 一文看懂NLP神经网络发展历史中最重要的8个里程碑!

    一文看懂NLP神经网络发展历史中最重要的8个里程碑! https://mp.weixin.qq.com/s/gNZiiEfsQjlF9tArNDIt5Q 作者|Sebastian Ruder 译者|小 ...

  6. 微信高级研究员解析深度学习在NLP中的发展和应用 | 公开课笔记

    作者 | 张金超(微信模式识别中心的高级研究员) 整理 | Just 出品 | 人工智能头条(公众号ID:AI_Thinker) 近年来,深度学习方法极大的推动了自然语言处理领域的发展.几乎在所有的 ...

  7. 今晚8点开播 | 微信高级研究员解析深度学习在NLP中的发展和应用

    近年来,深度学习方法极大的推动了自然语言处理领域的发展.几乎在所有的 NLP 任务上我们都能看到深度学习技术的应用,并且在很多的任务上,深度学习方法的表现大大的超过了传统方法.可以说,深度学习方法给 ...

  8. 公开课 | 微信高级研究员解析深度学习在NLP中的发展和应用

    近年来,深度学习方法极大的推动了自然语言处理领域的发展.几乎在所有的 NLP 任务上我们都能看到深度学习技术的应用,并且在很多的任务上,深度学习方法的表现大大的超过了传统方法.可以说,深度学习方法给 ...

  9. 微信研究员解析深度学习在NLP中的发展和应用

    微信研究员解析深度学习在NLP中的发展和应用 深度学习在自然语言(NLP)中的发展和应用视频教程,深度学习方法的表现大大的超过了传统方法.可以说,深度学习方法给NLP带来了一场重要的变革.在本课程中, ...

最新文章

  1. 辅助模块加速收敛,精度大幅提升 移动端实时的NanoDet-Plus来了
  2. oracle 附加日志 挂起,Oracle 附加日志(supplemental log)
  3. 参数到不进oracle,Oracle对于启动参数检查不严格
  4. 使用 Vue.js 和 Chart.js 制作绚丽多彩的图表
  5. 产品需求文档(PRD)的撰写方法
  6. princomp 与pca的区别与联系
  7. linux ps指令查看进程,linux下查看进程指令-ps
  8. docker_4 数据卷技术
  9. 懒人精灵节点工具使用
  10. 数据库设计员工管理系统
  11. Matlab基于蚁群算法求解多旅行商MTSP问题
  12. Android集成bugly实现异常上报
  13. 关于iphone设置显示模式为标准模式和放大模式时的区别
  14. 微信小程序开发入门需要学什么?
  15. spyder设置显示编码_OBS编码器选择“硬件(NVENC)”导致无法录屏解决办法
  16. 论文笔记|A Block-sorting Lossless Data Compression Algorithm
  17. 【BIOS】主板BIOS的两种启动模式,传统模式(Legacy)和UEFI模式
  18. springcloud alibaba nacos 下载地址
  19. 第一篇【Python】基础-关东升-专题视频课程
  20. 网络安全-黑帽白帽红客与网络安全法

热门文章

  1. 最强元宇宙项目MetaMobile即将在OpenSea推出纪念版NFT
  2. PyQt pyinstaller去掉黑框的办法
  3. Yarn 和 NPM 国内镜像(淘宝镜像)
  4. Hulu俱乐部分享之运动篇
  5. glide scaletype 无效_[Android] Glide加载图片与ImageView的scaleType的关系
  6. 【毕业寄语】逆境中的成长更需要态度和方法(无鸡汤)
  7. java文件夹路径的表达_小师妹学JavaIO之:文件File和路径Path
  8. 一文带你捋清 Linux根目录下常见文件目录(etc/ dev/ var/ bin/ sbin/ lib/ proc/ tmp/等)建议收藏
  9. 计算机清览云题库,【汇总】计算机等级考试题库,二级Web试题
  10. 20200516 hz 幻化成风【相等集合容斥,状态压缩】