开发者社区> 致Great_VIP> 正文

CS224n 笔记1-自然语言处理与深度学习简介(一)

简介: CS224n 笔记1-自然语言处理与深度学习简介(一)
+关注继续查看

1 自然语言处理简介


我们从讨论“什么是NLP”开始本章的内容


1.1 NLP有什么特别之处


自然(人工)语言为什么如此特别?自然语言是一个专门用来表达语义的系统,并且它不是由任何形式的物质表现产生。正因为如此,人工语言与视觉或者其他任何机器学习任务非常不同。


大多数单词只是一个超语言实体的符号:单词是映射到一个表征(想法或事物)的记号。例如,“火箭”一词是指火箭的概念,并且进一步可以指定火箭的实例。有一些单词例外,当我们使用单词和字母代表信号时,想“Whooompaa”一样。除此之外,语言符号可以用多种方式进行编码:语音、手势、文章等。他们可以通过连续的信号传递给大脑,而大脑本身似乎以连续的方式对事物进行编码。(关于语言和语言学的哲学的很多工作已经做到了概念化人类语言,并且可以从语言引用和语义识别单词)。


1.2 应用实例


NLP中有不同级别的任务,从语音处理到语义解释和演讲处理。总而言之,NLP的目标就是为了能够设计算法,是计算机能够理解自然语言。下面是不同难度级别的应用实例:


简单


  • 拼写检查
  • 关键字搜索
  • 查找同义词


中等


  • 从网站、文档中分析系信息


困难


  • 机器翻译(例如将中文翻译成英文)
  • 语义分析 (查询语句的含义是什么)
  • 代词(在一个文档中,“它”或者“他”具体指代什么)
  • 问答系统(例如回答Jeopardy Questions)


1.3 怎么表示单词


贯穿于整个自然语言处理任务中的第一个也是最重要的共同点就是:如何表示单词并作为我们所具有的任意模型的输入。前期大量的NLP工作将单词作为原子符号,但是我们今后将不会重复这个工作,我们首选需要考虑和具备词之间的相似性和差异概念。和词向量一样,我们可以很容易地将这些特征加入到向量之间(采用一些距离措施,如Jaccard,余弦,欧几里得算法等等)。


2 词向量(Word Vectors)


据估计大约有1300万的英文字符,难道它们之间一点联系也没有吗?猫科动物到猫,酒店到汽车旅馆?我不认为它们之间一点关系也没有。因此,我们想将每个单词字符转化为向量,以代表某种单词空间的一个点。这里有很多使用词向量的原因但是最直观的原因就是也许真正存一些足以包含人工语言所有语义的N-维向量空间。每个维度都会编码我们语言传递的含义。例如,语义维度可能表示时态(过去vs现在vs将来),计数(单数vs复数),性别(男性vs女性)。


所以让我们看看第一个词向量并且也可以说是最简单的,one-hot向量。将每个单词表示成IR|V|x1向量,这个词向量就是有很多0和一个1组成(1的位置就是该单词在排序英文出现的索引位置)。在上面的标记中,|V|是词汇的大小。以这种形式编码的词向量看起来如下:

28.png


我们可以将每个单词表示成相互独立的实体。就如我们前面所讨论的,单词表示不会直观地给出单词之间的相似性。例如:

29.png


所以也许我们可以尝试将这个空间的大小从R|V|减小到更小的东西,从而找到一个编码词之间关系的子空间。


3 基于奇异值分解(SVD)的方法


对于这一类寻找词嵌入(也称作词向量)的方法,首先在一个大型数据集进行循环,并且从某种形式的矩阵X中积累单词共现的次数,然后对矩阵X执行奇异值分解来获得一个USVT.我们然后将U作为我们词典中所有单词的词嵌入(或词向量)。下面讨论下X的一些形式。


3.1 词-文档矩阵(Word-Document Matrix)


作为刚开始的尝试,我们大胆地推测:相关的单词经常出现在同一个文档中。例如,“银行”、“债券”、“股票”、“钱”等等,可能出现在一起。但是“银行”、“章鱼”、“香蕉”和“曲棍球”可能不会一起同时出现在一篇文章中。我们依据这个事实来创建一个词-文档矩阵X,其形成方式如下:遍历几十亿个文档,并且对于每一个单词i只要出现在文档j中,我们就将X自增1。很明显的是,X将会是一个巨大的矩阵(IR|V|xM)同时与文档数量(M)相关。因此我们或许还有改善的地方。


3.2 基于窗口的词共现矩阵(Window based Co-occurnece Matrix)


在这使用同样的逻辑,矩阵X存储了单词的共现次数,这样将会变成一个附属矩阵。在这个方法中,我们计算每个单词在一个特定大小的窗口内出现的次数,进而计算语料库中所有的单词的技术。下面将展示一个实例,我们语料中包含三个句子,窗口大小为1:

  1. I enjoy flying.
  2. I like NLP.
  3. I like deep learning.
    由此产生的计数矩阵将会是:

    30.png

    下面解释下结果:
    首先要记住窗口(window)大小1。对于矩阵中(I,I)的值为什么为0呢?对于单词I,我们扫描第一个句子,因为I enjoy flying中单词I出现了,I前面为空,后面紧跟单31.png


enjoy,所以(I,I)的值为0;然后扫描第二个句子同样前后没有出现I,这是(I,I)为0;同样扫描第三个句子之后,(I,I)值仍为0。对于(I,like)的值为什么为2呢?扫描第一个句子后,I的前后一个单位没有出现like。对于第2个和第3个句子,I的后面出现了like,所以最后(I,like)的值为2,其他同理。

3.3 对共现矩阵使用奇异值分解


我们在X上执行SVD,观察奇异值(结果矩阵S的对角线数据项),并根据所需要的百分比方差在索引k处进行切割:

32.png


然后我们把这个子矩阵变成我们的单词嵌入矩阵。这样,能够在词汇表中给出每个单词的k维表示方法。

对X应用SVD:

33.png


通过选择第一个k维奇异来减少维度

34.png


这两种方法能够提供给我们编码足够语义和语法信息的词向量,但是也伴随着很多其他问题:

  • 矩阵的维度变化非常频繁(新词添加和语料大小变化非常频繁)
  • 大多数单词没有共现,矩阵会非常稀疏
  • 通常矩阵维度非常高(约为106x106
  • 训练成本比较高
  • 为了形成词频的严重不平衡,需要进行对矩阵X进行“打乱”。
    目前已经存在了一些方法来解决上面提到的问题:
  • 忽略一些功能词汇,例如“the”,“he”,“has”,etc。
  • 使用一个不规则窗口-根据文档中单词之间的距离来计算共现次数
  • 使用Pearson相关系数和将原始计数设置为负数。
    正如我们下一节中提到的,基于迭代的方法以更加优雅的方式解决了许多问题。




版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
11998 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23580 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
16451 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
16653 0
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
37343 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
20699 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
22538 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
14900 0
+关注
400
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载