开始的这部分主要是对DL4NLP的一个简介。

个人理解,DL4NLP中,所有层级都是以向量的形式进行处理,用向量表示单词、用向量表示句子等。向量是最灵活的形式,维度自由,可组成矩阵,可组成高维的tensor等。进行NLP等后续任务,首先需要输入。输入来源主要有两个,一个是来自语音speech,一个是来自文本text。对于NLP中,

有一个概念需要理解:morphology(形态学)。这个所谓的形态学是一个语言学中的概念,涉及到语音特征、句法特征、语义特征等,处于音位学、句法学和语义学的结合部位。

整个的一个NLP的通用处理流程是: 拿到输入(来自语音/文本) -> 形态学分析(morphological analysis) -> 句法分析(syntactic analysis) -> 语义分析(semantic interpretation) -> 对话分析(discourse processing)

最后的那个阶段需要利用上下文语境进行理解。

NLP 的工业界应用:

一般来讲,结合自己的工作经验,有拼写检查、关键词生成、NER、文本分类、情感分析等初中级任务,稍高级的任务有MT、QA、客服系统、chatbot等这些直接利用NLP的产出,还有利用NLP的输出作用于广告投放、推荐等业务的情形。

p.s.对于情感分析,传统方法是用一个情感词袋,在词袋上做分类器;基于DL的方法用RNN等解决,可识别”反话“的情感极性。对于QA,传统方法是手工写大量正则表达式,超蠢,效果也不好;基于DL的方法把事实存储在向量里。对于客服系统,如google的inbox,是基于RNN等DL方法实现的。对于MT,有传统的SMT,也有现在的NMT,NMT是将原文中的各个词映射成向量,由向量来构建译文。

NLP的难点:

1.人类的语言有歧义,需要明确某一代词具体指代的是什么。就是Reference analysis

2.人类的语言较简练,省略了大量的背景知识。省略的原因是由于人类已经储备了大量基于现实世界、常识和上下文的一些知识。

随后进入正题,介绍w2v。词是进行NLP任务的最小单词,需要把词表示明白。

据说过去一直都是用的分类词典,常见是就是像WordNet那样的词库查询上位词和同义词等。这种方法并不能区分同义词之间的细微差别,如expert != good,这专业的程度完全不一样好嘛!!此外,这种方法不需要大量人力去整理,而且不能实时加入新词,由于是人工整理的,就会出现主观化的问题,还无法计算词和词之间的相似度。总而言之,就是不好。

用稍现代化的模式去进行处理的时候,最早是采用one-hot编码的形式进行词语表示。这种就是列一个词典,初始化词典里的各个单词对应的计数都是0,然后一个一个撸单词,句子里出现哪个单词了就把词典相应的位值+1,直到撸完为止。这种方法是有问题的,如果词典特别大,比如达到百万级别的话,那这向量也太长了!而且任意两个向量之间的点积都为0,说人话就是这两个词没有关联,这是不对的,比如说motel和hotel...这两个怎么说是没关联呢?说motel和cat没关联还差不多!

在对词语的理解时,很大程度上需要依赖其对应的上下文,如果能把单词放到正确的上下文中,才说明正确掌握了他的意义。个人认为这就是w2v的语言学基础。通过调整一个单词及其上下文单词的向量,可根据这两个向量推测两个词语的相似度,或者可根据一个单词的向量预测词语的上下文。w2v被称作是分布式表示,称为分布式主要是因为,不像one-hot这种编码形式,把鸡蛋都放在一个篮子里,而是把该单词的含义分散到不同维度,因此称作是分布的表示。

w2v是由两个模型构成的:CBOW和SG,两个模型的作用完全相反,其中CBOW是给定一个中心词,预测其context词,而SG则是给定context词来预测中心词。通过单词和上下文彼此预测。

对于w2v的原始softmax,提出了两种较为高效的训练方法:负采样和层次softmax。

学习神经网络word embedding的基本思路如下:

首先定义一个预测某单词的上下文的模型:

p(context|wt)=
其损失函数定义如下:
J=1p(wt|wt)

这里的wt表示wt的上下文(负号通常表示除了某词之外),如果完美预测,损失函数为零。然后在大语料库上不同位置得到训练实例,调整词向量,最小化损失函数

Lecture里主要是针对SG模型进行了详细讲解。计算P(wt-2 | wt)、P(wt-1 | wt)、P(wt+1 | wt )、P(wt+2 | wt)等概率。这里只是拿窗口为2举例,实际上学习出的是一个概率分布。目标函数是对所有中心词其context词的预测结果的乘积,需要最大化这个乘积(理想情况是这个乘积的结果为1,表示对于所有中心词,对其context词的预测都是准的)。

在实际操作时,要对这个最原始的目标函数进行一下改造。乘法显然是不太好处理的,一个通用的trick是将乘法转成求和,利用log操作。而且接触过ML的都知道,处理最小化要比处理最大化更受欢迎,原始目标函数是进行最大化,取个负数就转成了最小化。因此,将原始目标函数进行对数似然的相反数操作即可得到较易处理的损失函数形式。对于目标函数里的p,用softmax函数得到。

softmax函数本质上是将一个向量转换成另一个向量,向量的shape不变,只是将向量中的各个值进行"规范化"处理,将一个任意值转成(0,1)之间的一个浮点数,在NN里这个值可近似认为是概率。softmax的计算函数如下:

hankcs.com 2017-06-07 下午3.07.22.png

这里涉及到的u和v分别对应词o(context词)的向量和词c(中心词)的向量,来自于两个矩阵U和V,二者均为这个模型的参数,是我们要通过损失函数反复迭代更新的。之所以叫做softmax函数是因为,该函数中用的指数函数会将较大的数变得更大,而较小的数变得很小很小,类似于max函数

p.s. 在对应的assignment1里第一部分就是针对softmax做的一些练习。softmax有一个特性,那就是平移不变性(我也不知道专业的说法是这个,勿喷),数学表示就是softmax(x) = softmax(x + c),其中c为一个常数或常向量,x是一个向量。这个很好证。实际利用这个特性时,c普遍取-max x(i),就是x向量中的最大值。为啥要费劲减去这么个值呢?还要从softmax函数本身定义着手。softmax函数用指数来进行”规范化“操作,指数操作会把大数继续放大,如exp(1000)时,直接算是会上溢出的,得到inf,对于exp(-1000),还是不行,会下溢出,得到0,下溢出这个事情是因为,浮点数只有64位,太小的数字也是表示不出来的。减去x(i)的最大值,可以保证指数最大不会超过0,不会发生上溢出,即使下溢出了,也能得到一个相对合理的值。这个softmax函数很重要很重要很重要!!!!!

对于整个SG模型的执行过程,用如下scratch表示很清楚:

2017-06-07_15-24-56.png

最左边wt的是用one-hot编码表示的中心词,是一个V维向量,V表示的是词典的大小(输入其实是一个pair,每一个pair为(中心词,context词1)),乘以W矩阵,该矩阵为d行V列矩阵,每列表示一个词向量,这个词向量用d维列向量表示,这个操作其实就是一个映射table,揪出对应的词向量。再将该向量与W'矩阵相乘,对得到的结果再进行softmax转换得到概率,经过softmax转换过得列向量中的值加和为1,值最大的那个对应的就是预测出来的该中心词在窗口中该位应该出现的词,与真实情况进行对比来计算损失,然后反过来更新W和W'矩阵。?????最终的词向量就是W矩阵,这个不清楚。
对于模型的训练,用梯度下降法。模型的参数就是W和W'矩阵。求导即可得到梯度,使用SGD而非BGD来减少训练时间,这些都是老生常谈了。比较特别的一点是提到了一句,NN喜欢嘈杂的算法。?????这个是为什么,需要仔细思考一下
至此得到SG模型训练的整体流程,针对softmax函数,还有优化的空间,后边会提到一些trick,这个不是lecture1 中主要提到的问题了,后边再继续总结。

CS224n学习笔记:Lecture1 2相关推荐

  1. cs224n学习笔记

    *. Tips: loga(x)log_a(x)loga​(x)在机器学习中默认为ln(x)ln(x)ln(x) 0. 主要参考: CS224n专栏 AILearners/blog/nlp/cs224 ...

  2. nlp cs224n 学习笔记1 Introduction and Word Vectors

    注:个人笔记,价值有限,不建议逗留. word embedding 的意义和目的? 通过一种映射,将自然语言中的单词,嵌入到n维欧式空间中,得到可以用数学语言表达并用计算机计算的"词向量&q ...

  3. CS224n学习笔记-1

    NLP第一课:寻找合适的途径/方式表示词的意义 问题一:如何去代表一个词的"意义"? 表示方法一:one-hot,词向量的长度是不同词的总数,每个向量只有一个地方是1,其余为零,感 ...

  4. CS224n学习笔记1-nlp介绍和词向量

    文章目录 参考 one-hot:维度太大,单词太多 使用相似度:–>相似度也很多. 分布式语义:含义与上下文有关 –>由相似的上下文得到一个小的密集的向量–>word embeddi ...

  5. cs224n学习笔记 03:Subword Models(fasttext附代码)

    课程内容 语言学的一点小知识 词级字符级模型 n-gram思想 FastText模型 1 .人类语言声音:语音学和音系学 语音学是音流,这是属于物理层面的东西 词法学:一个n-grams的代替方案 在 ...

  6. cs224n学习笔记9-问答系统

    目录 Question Answering 问答系统 Question Answering 问答 Reading  Comprehension 阅读理解 Stanford question answe ...

  7. 斯坦福CS224N学习笔记-6 依存分析

    课程内容概述 句法结构:一致性与依赖性 依存文法和Treebank 基于转移的依存分析 使用神经网络的依存分析 描述语言结构的两种方法 上下文无关文法 上下文无关文法=短语结构文法=句子成分 依存文法 ...

  8. 【cs224n学习作业】Assignment 1 - Exploring Word Vectors【附代码】

    前言 这篇文章是CS224N课程的第一个大作业, 主要是对词向量做了一个探索, 并直观的感受了一下词嵌入或者词向量的效果.这里简单的记录一下我探索的一个过程. 这一下几篇文章基于这次作业的笔记理论: ...

  9. CS230(DeepLearning)Leture1的学习笔记

    CS230深度学习课程Leture1的学习笔记 Lecture1 Lecture1 CS230第一讲的讲义请点击此处.做笔记以做备忘.        整个CS230课程上分为5个单元, 分别是: 课程 ...

最新文章

  1. HTTP协议是无状态协议,怎么理解?
  2. CF293B Distinct Paths题解
  3. 计算机术语new一个,微机原理第一章计算机基础知识(new)
  4. 密码强弱提示(27)
  5. 为什么有些人看起来年纪轻轻,但思想深度和高度却远高于常人?
  6. python 报价_python基础教程_查询价格
  7. 简述Git(Linux、Android~~开源)
  8. windbg学习23(!peb和PEB结构)
  9. 中国电信物联网开放平台对接历程
  10. 同步异步+阻塞非阻塞-二述
  11. 程序猿麒麟臂打造之路(健身二)
  12. MATLAB摄像头实时图像处理
  13. pic16f1829 c语言,PIC16F1829 串口初始化程序及应用
  14. MATLAB scatter 画二维/三维散点图时 用颜色表示数值大小 colorbar
  15. ChatGPT聊天app(基于autojs)
  16. 论文笔记Long_Term_Feature_Bank
  17. 关于eNSP使用时出现错误代码40和41的问题解决方法
  18. SpringCloud分布式微服务搭建(一)
  19. 京信通信【驱动软件工程师】面经
  20. HttpURLConnection获取百度搜狗360搜索链接重定向真实目标链接地址url

热门文章

  1. PhotoShop 之盖印图层
  2. SVG_19_太阳_地球_月亮_三球仪_自转_公转
  3. mysql RBA,Oracle RBA 浅谈
  4. 关于ArcGis投影相关问题
  5. 分布式技术原理(九):分布式体系结构之集中式结构
  6. Elasticsearch 设置用户名密码认证(亲测)
  7. im即时通讯开发:进程被杀底层原理、APP应对被杀技巧
  8. Rocksdb 数据库--MANIFEST文件
  9. 3DS Max、Maya、SoftImage、houdini对比
  10. Raspberry Pi智能设备开发-人脸识别门禁系统设计与实现