本文为学习笔记,供自己复习回顾,分享,交流,如果专家们发现谬误之处欢迎批评与修正。

----------------------------------------------------------------------------------------------------------------------------

上节课我们自顶向下从宏观层面讨论了什么是NLP,什么是深度学习,如何将深度学习应用于NLP领域,这届课我们将从基本的语言的底层开始研究,我们将使用向量,做一些简单的数学。

----------------------------------------------------------------------------------------------------------------------------

1.词汇含义

1.我们如何表示一个词的含义?

1.韦伯斯特词典对meaning(含义)做了如下定义:

a.用单词或短语等表示的想法。

b.人们想要通过单词、符号等表达的想法

c.书面或艺术表达的想法

2.最常见的语言学角度对meaning (含义) 的看法是:

单词就像是一种语言学的符号,它指代了世界上的某些具体事物,如果我有一个单词,比如说眼镜,这就有了具体的指代,所以所有“眼镜”能指代的事物,就是眼镜一词的指代物。

但是这种解释在我们运用在计算机系统处理语言时并不是很容易可行,

2.我们怎样在计算机中拥有可用的含义?

目前,最常用的方法是,人们分类学来处理词义,英语方面我们有WordNet, 它可以提供很多词汇相关的分类信息,具有上义词(is-a)关系 和同义词集合

上义词(hypernyms):是对事物的概括性、抽象性说明。

下义词(hyponyms):是事物的具体表现形式或更为具体的说明。

同义词(synonyms):意义相同或相近的词。

e.g.   桌子和板凳是都是家具,所以他们都是家具的下义词,反过来,家具里面有桌子和板凳,所以家具是他们的上义词。

上义词关系也可以称为包含关系,从属关系,板凳是一种家具,桌子是一种家具。

根据这种关系,我们形成具有意思相近或相同的集合,也就是同义词集合。

如下图,使用python从nltk语料库中调用wordnet,寻找panda(不是pandas库)的上义词,可以发现,熊猫是浣熊类,之后食肉动物等等,之后越来越大。

再比如说,good(好)的一词不同含义的同义词,我们同样可以用python查找同义词集合。比如说good在形容好人时,可以有其他的同义词(令人尊敬的),在形容熟了的梨时,有熟了的同义词。

3.离散化表征的问题

实际生活中,本身就存在大量的同义词资源,但是我们很难从这些资源中尽可能多的获取价值。那么为啥呢?

1. 这类资源会忽略很多细微差别,e.g. good和专家还是有区别的。

2. 缺乏新词(不能保证语料库的实时更新),e.g.很多网络词汇并没有包含

3. 主观性很强,哪些词时同义的,哪些词是异义的,是非常模糊的判断

4. 需要大量人力去创造和更新

5. 很难对词汇的相似性给出准确定义,e.g. 精通比“好” 更接近于专家。

大多数基于规则和统计的NLP把词看作是原子符号,例如 hotel, conference,walk.

在向量空间表示中,就会出现一个1和很多的0,这样来表示一个单词。

这个向量的大小取决于你的语料库中词汇量的大小。

随着词汇量的增多,你需要存储的向量也就越多越大。

我们这种表示方法称作为“one-hot”表示,中文叫热编码。

它的主要问题在于,它没有给出任何词汇之间的内在关系概念,但是我们常常想得到的是一些有相近含义的词汇和短语,因为在网络搜索问题中我们并不能精确定位到每一个单词,而是“模糊”的去查找,例如:

如果用户搜索“Seattle motel“,我们其实更想去匹配包含”Seattle hotel“ 的文档,但是实际上如果我们采用热编码的方法,

我们的请求和文本向量是正交的, motel 和 hotel没有内在相似性。

这种符号编码问题不仅仅存在于传统基于规则的理性方法的自然语言处理中,也存在于所有基于概率统计传统的机器学习方法,尽管使用这些模型运用了真实的数字,计算了某些词在其他词存在背景下出现的可能性,但是因为它们是基于符号表示开发的,所以你就不能得出词汇和模型之间的关联,每个词汇都是独立存在而已。

解决方法:

1. 直接建立一套独立的相似度体系

2.重新建立一种直接体现相似度的向量编码 (我们用的)

4.基于分布相似性的表示(分布表示)

分布相似性是指,只需通过观察其出现的上下文,并对这些上下文做一些处理,你可以得到大量表示某个词汇含义的值。

e.g. 如下图所示,如果我想知道banking这个词的含义,我找到很多包含banking的例句进行观察,观察其出现的场合,你会看到:债务问题,政府法规,欧洲,统一的,然后我们开始统计所有出现过的内容,通过某种方式用这些上下文中的词来表示banking的含义

接下来我们为每个单词构造一个向量,我们会建立一个密集向量(不是稀疏的),以至于可以让它预测目标单词所在文本的其他词汇,这叫做分布表示,这个过程是迭代循环更新的。

2. 什么是word2vec?

1.学习神经网络词汇编码的基本思想

我们定义一个模型,来根据中心词汇预测它的上下文词汇,根据给定单词预测上下文单词出现的概率,

接下来我们可以用损失函数来判断,预测准确性。

这种模型是一个能够义词学习一个迭代,并最终能够对给定上下文单词的概率进行编码的模型,而不是计算和保留一个巨大的数据集的全局信息。

该模型的参数就是词向量,在每次模型的迭代,计算误差,并遵循一些更新规则,该模型具有惩罚造成错误的模型参数(损失函数)的作用,从而可以学习到词向量,这种方法称为误差反向传播,使得训练模型的速度更快。

我们将在大型语料库的各个地方重复这样的操作,我们的目标是调整词汇的表示,从而使损失最小化。

2. word2vec主要思想

word2vec模型核心是构建一个很简单的、可扩展的、快速的训练模型,让我们可以处理数十亿单词文本,并生成非常棒的单词表示。

word2vec尝试去做的最基本的事情就是利用语言的意义理论来预测每个单词和它的上下文词汇。

包含两个用于生成词汇向量的算法和两套效率中等的训练方法。

两个算法:continuouscontinuous bag-of-words(CBOW)和 skip-gram。CBOW 是根据中心词周围的上下文单词来预测该词的词向量。skip-gram 相反,是根据中心词预测周围上下文的词的概率分布。

两个训练方法: negative sampling 和 hierarchical softmax。Negative sampling 通过抽取负例来定义目标,hierarchical softmax使用一个有效的树结构来计算所有词的概率来定义目标。

2.1.Skip-grams(SG)

给定中心词”banking“, 模型可以预测或者生成中心词附近的词语,这样的模型叫做Skip-gram模型。

对于每一个单词t=1...T,在窗口半径m的范围内进行上下文词预测。

其目标函数是,最大化现有中心词的上下文次的概率。

也就是最小化负对数释然值。

对于每个在中心值Wt下Wt+j的条件概率最初是,

o:除中心词以外词的索引

c:中心词索引

Vc:中心词向量

Vo:索引为o的向量。

使用Softmax生成概率分布。

具体过程如下。

菜鸟的NLP学习记002 ---------斯坦福公开课CS224n--------词向量表示:Word2Vec相关推荐

  1. iOS菜鸟成长笔记(3)——斯坦福公开课学习(1)

    一.iOS四层结构 1.Core OS 是用FreeBSD和Mach所改写的Darwin, 是开源.符合POSIX标准的一个Unix核心.这一层包含或者说是提供了整个iPhone OS的一些基础功能, ...

  2. NLP学习__task3: : 特征提取:TF-IDF、词向量表示、互信息原理、特征筛选

    1 TF-IDF原理 TF-IDF原理在另一篇博客:关键词抽取模型  已经提及,这里不在重复. 2 文本矩阵化 笔者理解的文本矩阵化,即将文本进行"词向量化".这里简述常见的语言表 ...

  3. 【斯坦福公开课-机器学习】1.机器学习的动机和应用(吴恩达 Andrew Ng)

    文章目录 0三个目标 0先修课程要求 基本工具 1-网址 2-邮箱 3-本系列课程链接 1机器学习的定义 1-1非正式定义 1-2正式的定义 2监督学习(Supervised Learning) 2- ...

  4. 斯坦福大学NLP公开课CS224n上映啦!华人助教陪你追剧

    一只小狐狸带你解锁NLP/DL/ML秘籍 作者:小鹿鹿鹿,QvQ,夕小瑶 CS224n: Natural Language Processing with Deep Learning Stanford ...

  5. 【Mechine Learning】斯坦福公开课学习笔记1

    很早开始接触机器学习的概念,在一些比赛中调用过OpenCV的级联分类器函数做图像识别,但是一直以来都没有去了解其基本算法,因此在Coursera里参加斯坦福大学Professor Andrew Ng的 ...

  6. 计算机专业课学习清单(书籍+公开课)

    OS CSAPP MIT 6.828 UNIX 环境高级编程 Linux内核设计与实现 鸟哥的 LINUX 私房菜 深入理解Linux内核 程序员的自我修养 网络 计算机网络:自顶向下方法 UNIX ...

  7. 斯坦福公开课 密码学 cryptography 1 思维导图

    本文是根据Stanford Univ. 公开课密码学1的整理而成的思维导图,该课程由大名鼎鼎的Dan Boneh教授的. 本人特别推荐这门公开课.虽然他讲话很快,但是语言表述清晰,而且很大部分已经有中 ...

  8. 机器学习斯坦福公开课学习笔记

    第1课 机器学习的动机与应用 无监督学习适用于即使是人也不知道正确答案,但是要进行分类的数据,即对无标签数据进行分类 强化学习可用于机器人领域,实现一些很复杂的.人很难写出每个细节的控制程序,如机器人 ...

  9. 【编译器】斯坦福公开课学习2

    02-01 将会为教学用语言COOL编写编译器,把COOL编译成MIPS汇编语言.会分为五个部分讲解,首先是写一个COOL程序,程序本身会是一个解释器.之后是词法分析.语法分析.语义分析.代码生成.这 ...

最新文章

  1. JAVA数组编程教程_Java语言编程基础:数组
  2. linux中根目录下各个目录的作用
  3. gpu装linux系统显示黑屏,linux操作系统安装gpu版本的paddlepaddle出现问题
  4. Python3 strip()去除字符串首尾指定信息
  5. 即插即用的轻量注意力机制ECA--Net
  6. spark on yarn 完全分布式_Apache Spark探秘:三种分布式部署方式比较
  7. 记录更新(Java数据类)
  8. linux 部署php svn,Linux服务器搭建svn环境方法详解
  9. linux监听端口无响应,linux – tomcat运行,但是8080端口没有响应
  10. xcode 可以打开xmind_思维导图,原来Xmind这么强大
  11. 计算机基础常用英语,计算机常用基础英语
  12. ES新建模板时的错误 Client error: `PUT http://127.0.0.1:9200/_template/tmp` resulted in a `400 Bad Request`
  13. 邮件编码介绍及乱码的解决
  14. c语言出现了语法错误能编译吗,如何调试C程序的语法错误和逻辑错误
  15. zookeeper集群节点个数为什么最好是2n+1
  16. 一文告诉你数据安全平台(DSP)能做什么
  17. 5-3 凸多边形面积
  18. java argox_GitHub - margox/braft-extensions at dev_table
  19. Eruda 一个小而美的移动端调试神器
  20. 中国的高级软件工程师你们难道上网只看技术吗?悲哀啊。

热门文章

  1. [Android开发] Json解析工具类,一个类搞定Json的解析
  2. 山东大学软件学院操作系统课程设计Nachos-实验四-基本文件系统扩展
  3. 深度学习中适合长期租用的高性价比便宜的GPU云服务器有哪些?
  4. mysql复数记录,MySQL 数据库铁律(小结)
  5. 2011年Esri用户大会技术亮点总结之二:ArcGIS Runtime
  6. Nginx源码包安装详解
  7. anaconda下载pdfplumber包
  8. 说一说GJB438C系统/子系统规格说明
  9. 华为智能手环智能手表软件测试,华为智能手表和智能手环的差别 应该怎么选?...
  10. windows内存泄露定位方法