2018年11月版本

Week 15

自然语言处理 Natural Language Processing

单词表示 Word Representation

  • 前述表示:使用词汇表中的对应索引表示单词,并将每个单词转化成one-hot向量
  • 这种表示的问题:很难在同类东西之间泛化与其他词汇的联系——任两个向量之间内积为0,无法找出任两词之间的关系或者区别
  • 特征化表示:词嵌入向量(word embedding),对于每一个单词,都学习一组特征和值
  • 选取一组特征,对每一个单词,针对每一个特征用一个值表示这个词包含这个特征程度的相对值
  • 对于每一个单词,针对每一个特征取一个值,这些值就构成可一个表示该词的一个特征向量
  • 假设这个词在词汇表中的编号为mmm,取特征数量为nnn,则索引表示记为OmO_mOm,嵌入表示记为eme_mem,后者的维度为nnn
  • 有了特征表示,相似的词汇的特征相似性就会呈现出来
  • 学习算法中使用的特征往往并不能很好地之处每一个分量的含义,但是能很好地表示两个词之间的联系和区别
  • 对于一个特征向量,我们可以使用t-SNE等算法将其映射为二维图像,从而展现出这些特征所能表示的一些词的联系和区别

词嵌入向量 Word Embedding

  • 通过大量地读览预料,学习算法能够推测和学习词汇之间的相似性,进而能够常识推理出一些词组的含义与一些既有词组含义的相似性
  • 如果只拥有一个较小的数据集,可以在词嵌入的基础上使用迁移学习
    • 从大语料集中学习词嵌入向量(或者直接下载)
    • 将词嵌入迁移到具有小训练集的新任务中(相对来讲,嵌入向量是一个维数相对更小,但是更加稠密的向量表示)
    • 可选项:使用新数据继续微调嵌入向量(第二步数据量足够大的前提下)
  • 当具有一个比较小的数据集时,词嵌入的作用比较明显
  • 与人脸识别中使用的嵌入向量不同,前者时基于一个固定的词汇表产生的固定的嵌入向量,而后者是对于任意的输入图像产生一个嵌入向量

词嵌入的属性 Properties of Word Embeddings

  • 类比推理(Analogy Reasoning):我们知道了两个词的联系,那么类比两外两个词(或者给出一个),尝试明确他们是否具有相同的关系(找到另外一个词)
  • 对于已知的两个词,首先计算两个词的向量差,再根据这个差取尝试寻找与测试词具有同样对应关系的词(如果隐含的对应关系一样,那么其特征差异也应当基本一致)
  • 算法实现(以man和women的对应猜测与king对应词(在课程情境下为queen)):
    • 尝试求解eman−ewomen≈eking−e?e_{man} - e_{women} \approx e_{king} - e?emanewomenekinge?
    • 尝试寻找单词www,使得w:arg⁡max⁡wsim(ew,eking−eman+ewomen)w: \arg \max\limits_{w} sim(e_w, e_{king}-e_{man}+e_{women})w:argwmaxsim(ew,ekingeman+ewomen)
    • 比较常用的相似度比较函数:余弦相似度sim(u,v)=uTv∥u∥2∥v∥2sim(u,v)=\frac{u^Tv}{\|u\|_2\|v\|_2}sim(u,v)=u2v2uTv
    • 同样可以使用欧几里得距离∥u−v∥2\|u-v\|^2uv2,但注意其值为非相似度

嵌入矩阵 Embedding Matrix

  • 对于一个词汇表,我们有mmm个单词,同时取nnn个特征
  • 使用嵌入向量学习算法得到的嵌入矩阵是一个n×mn \times mn×m的矩阵,每一列都是对词汇表中各个单词的嵌入向量
  • 嵌入矩阵简记为EEE,会有一个有趣的关系EOp=epEO_p=e_pEOp=ep,将嵌入矩阵乘指定词的one-hot向量,我们将得到对应词的嵌入向量
  • 实践中,由于单样本向量过长,相乘效率过低,通常会采用一些特殊函数从嵌入矩阵中拿出指定的列

单词嵌入向量的学习 Learning Word Embeddings

###单词嵌入向量的学习 Learning Word Embeddings

  • 构建一个神经网络语言模型以学习一个嵌入向量集合

    • 针对一句话,预测其中的一个词
    • 首先,获取每一个词在词汇表中的索引,然后根据这些索引构造one-hot向量并从EEE中获取对应的嵌入向量
    • 将所有这些向量接入神经网络层并链接softmax,输出针对整个词汇表的结果,以预测对应的单词。注意,神经网络层和softmax层都有自己的参数
    • 我们可以固定一个历史窗口,即根据指定个单词的历史(个数是一个超参数)来预测单词,窗口维数固定。我们可以处理任意长的句子,因此用于预测的历史长度是相同的
    • 语言模型的参数就是EEE
    • 早期算法中,这种方式可以很快地实现拟合
  • 目标词:需要模型预测的词
  • 上下文:上面提到的历史窗口,就是依赖预测的“前几个词”,还可以根据需要选择不同的上下文(比如先后的若干词,前面一个词,附近的一个词)
  • Skip Gram模型

单词转向量模型 Word2Vec

  • skip-gram模型采用上下文-目标词对建立一个监督学习问题
  • 不同于传统的前几个词或者后几个词作为上下文,随机选择一个词作为上下文,并在其一个窗口内选择一个词作为目标词(±5或者±10)
  • 建立起另外一个监督学习算法:给定一个上下文单词,预测一个在窗口内随机选择的一个词
  • 首先得到上下文词的单样本向量,然后从嵌入矩阵中得到这个词的嵌入向量,然后将向量送入softmax层以得到预测y^\hat yy^
    • 对于softmax层,给出基于c的t的概率,有p(t∣c)=eθttec∑j=1vocal_sizeeθjTecp(t|c)=\frac{e^{\theta_t^te_c}}{\sum\limits_{j=1}^{vocal\_size}e^{\theta_j^Te_c}}p(tc)=j=1vocal_sizeeθjTeceθttec,此处省略了偏执量,θt\theta_tθt为和输出t相关的参数
    • 极大似然损失L(y^,y)=∑i=1vocal_sizeyilog⁡y^iL(\hat y, y)=\sum\limits_{i=1}^{vocal\_size}y_i\log \hat y_iL(y^,y)=i=1vocal_sizeyilogy^i,注意标签是单样本向量
  • 问题:
    • 计算速度,softmax层的分母计算将会耗费大量时间,解决方案是使用分层softmax,即给定一个分类器,使用二叉树的形式,一次产生分叉到一个更小的单词集合,这样就不会一次分类计算所有单词,只需要计算一部分(有点像二分查找,将时间复杂度降到对数)。在实践中,往往这棵树并不是平衡的,常用词更容易在顶部找到,不常用此往往会在深处才能找到
    • 如何采样上下文单词c,启发式(heuristic)搜索,因为均匀随机采样往往会降低一些不常见词的被采样频率

负采样 Negative Sampling

  • 创建一个新的监督学习问题:给定一个单词对,预测其是否为一组“上下文-目标”词对(正负样本)
  • 使用和上一个方法一样的方式采样一组正样本,在使用该采样中的上下文词和字典中的随机一个词组成负样本(取指定数量kkk个,就算可能从字典中取到的词出现在了上下文的窗口中,仍标记为负样本)
  • 针对上面的取样,建立一个监督学习算法,输入词对,输出样本正负结果
  • 对小数据集,kkk取5到20;对大数据集,kkk取2到5
  • 逻辑回归模型p(y=1∣c,t)=σ(θtTec)p(y=1|c,t)=\sigma(\theta_t^Te_c)p(y=1c,t)=σ(θtTec)进行训练,实际上从整个词汇表来讲,我们得到了词汇表大小的数量的二元逻辑分类器,但由于我们选定了kkk个负样本,因此我们实际操作的只有k+1k+1k+1个分类器
  • 相比于上一个模型,将基于10000个项目的softmax分类模型转化为10000个二元分类问题,并且每一次都只计算k+1k+1k+1个,使得计算成本大大降低
  • 如何选择负样本:启发式方法p(wi)=f(wi)34∑j=110000f(wi)34p(w_i)=\frac{f(w_i)^{\frac34}}{\sum\limits_{j=1}^{10000}f(w_i)^{\frac34}}p(wi)=j=110000f(wi)43f(wi)43,将采样分布介于均匀采样(不能很好表现词频分布)和经验采样(词频采样,出现大量的the等词汇)

GloVe 词向量 GloVe Word Vectors

  • 用于词汇表示的全局向量(Global Vectors for Word Representation)
  • 显式表现出上下文和目标词之间“很近”的关系
  • XijX_{ij}Xijiii出现在jjj的上下文中的次数
  • min⁡∑i=110000∑j=110000f(Xij)(θiTej+bi+bj′−log⁡Xij)2\min \; \sum\limits_{i=1}^{10000}\sum\limits_{j=1}^{10000}f(X_{ij})(\theta_i^Te_j+b_i+b_j^\prime-\log X_{ij})^2mini=110000j=110000f(Xij)(θiTej+bi+bjlogXij)2
    • f(Xij)f(X_{ij})f(Xij)是一个权重函数,约定在Xij=0X_{ij}=0Xij=0是为0,以满足0log⁡0=00\log 0=00log0=0的约定;同时确保常用词和不常用词之间的权重平衡,前者相对大但不过分大,后者相对小但不为0;函数的确定是启发式的
    • 实际使用中,θi\theta_iθieje_jej的作用是完全对称的,均匀随机初始化二者并进行训练最小化之后,对给定的单词www,其最终的ew=θw+ew2e_w=\frac{\theta_w + e_w}2ew=2θw+ew

词向量的应用 Applications using Word Embeddings

情感分类 Sentiment Classification

  • 分析一段文本,得出发布这段文本的人喜欢还是不喜欢其正在谈论的东西
  • 挑战:可能缺乏一个特别大的标签训练集
  • 一种简单的模型:得到词嵌入向量,将所有的向量加和或者取平均,然后使用softmax产生评分的预测
  • 问题:忽视了单词之间的顺序,产生错误的理解
  • 改进:使用RNN进行分类
    • 将各个单词产生的嵌入向量按顺序输入RNN,并最终产生一个输出(多对一)
  • 如果使用的嵌入矩阵是基于非常大的语料集训练的,那么这个嵌入矩阵能够使得对于在情感分类数据集中没有出现的词汇也能得到很好的泛化效果(因为嵌入矩阵已经有了这个词的特征信息)

给词嵌入向量去偏差 Debiasing Word Embeddings

  • 我们希望训练算法中不会出现性别偏见、种族偏见等偏差

  • 这里的偏差不是模型中使用的技术性偏差,而是在生成内容中存在的偏差

  • 词嵌入向量会反映出用于训练的文本中的性别、种族、年龄、性取向以及其他的偏差

  • 去偏差方法:

    1. 明确偏差的方向(以性别为例,可以计算eman−ewomene_{man}-e_{women}emanewomen等结果取均值等操作确定),正交(完全不相关)的方向为非偏差方向(偏差反向往往超过1维,因此常常使用SVU方法)
    2. 中立化,对于每一个没有定义的词(如doctor这样性别上应中立的词),通过投影(到非偏差方向)摆脱误差
    3. 平均化词对,对于那些只具有偏差方向差异(如祖父和祖母只在性别上有差异)的词,移动其嵌入位置使得两个词到非偏差轴上对应词的距离(相似度)相同
  • 参考文献:Bolukbasi et. al., 2016. Man is to computer programmer as woman is to homemaker? Debiasing word embeddings

  • 在上面的文章中,作者尝试使用一个分类算法明确哪些词是不定义性的,结果发现大部分单词都是不定义性的

Cousera - Deep Learning - 课程笔记 - Week 15相关推荐

  1. 笔记 | 吴恩达Coursera Deep Learning学习笔记

    向AI转型的程序员都关注了这个号☝☝☝ 作者:Lisa Song 微软总部云智能高级数据科学家,现居西雅图.具有多年机器学习和深度学习的应用经验,熟悉各种业务场景下机器学习和人工智能产品的需求分析.架 ...

  2. Deep Learning论文笔记之(八)Deep Learning最新综述

    Deep Learning论文笔记之(八)Deep Learning最新综述 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文,但老感觉看完 ...

  3. Deep Learning论文笔记之(七)深度网络高层特征可视化

    Deep Learning论文笔记之(七)深度网络高层特征可视化 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文,但老感 ...

  4. Deep Learning论文笔记之(六)Multi-Stage多级架构分析

    Deep Learning论文笔记之(六)Multi-Stage多级架构分析 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些 ...

  5. Deep Learning论文笔记之(五)CNN卷积神经网络代码理解

    Deep Learning论文笔记之(五)CNN卷积神经网络代码理解 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文,但 ...

  6. Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现

    Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文, ...

  7. Deep Learning论文笔记之(三)单层非监督学习网络分析

    Deep Learning论文笔记之(三)单层非监督学习网络分析 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文,但老感 ...

  8. Deep Learning论文笔记之(二)Sparse Filtering稀疏滤波

    Deep Learning论文笔记之(二)Sparse Filtering稀疏滤波 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看 ...

  9. Deep Learning论文笔记之(一)K-means特征学习

    Deep Learning论文笔记之(一)K-means特征学习 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文,但老感 ...

  10. Bayesian Compression for Deep Learning 阅读笔记

    Bayesian Compression for Deep Learning 阅读笔记 一.论文摘要 二.模型介绍 2.1 概述 2.2 变分贝叶斯和最小描述长度 2.2.1 变分推断 2.2.2 最 ...

最新文章

  1. Video4Linux
  2. Java+MyEclipse+Tomcat (五)DAO和Java Bean实现数据库和界面分开操作
  3. 【Mysql优化】索引覆盖
  4. hdu 3177贪心
  5. LruCache在美团DSP系统中的应用演进
  6. 第六篇:Spring Boot 访问静态资源
  7. 如何辨别二逼互联网公司!?
  8. Matlab--绘图及坐标轴命令使用示例
  9. Java发送GET/POST请求
  10. windows验证方式
  11. JavaScript创建对象:深入理解编程原理
  12. 相关不是因果,哪又是啥?
  13. 社区OpenJDK代码构建平台投入使用
  14. XMLHTTP Get HTML页面时的中文乱码之完全客户端Script解决方案
  15. Visual C# 2005 - 如何制作多变化字体之浮雕字
  16. 深入浅出4G标准 LTE FDD和LTE TDD
  17. 地图上导出坐标html文件格式,【教程】奥维地图如何导出含坐标的高清tiff影像图,实现ArcGIS加载使用...
  18. java 服务器程序部署环境搭建
  19. shuffleNet实现
  20. 台式计算机显示器发蓝,电脑显示器发蓝怎么办

热门文章

  1. 对立与统一(期货反向跟单-交易员培训法则)
  2. 作业调度算法--高响应比优先
  3. 芭蕉树上第十七根芭蕉-- 隐式转换
  4. oracle lpad nvl,Oracle的Lpad函数
  5. QQ邮箱如何快速批量删除所有的垃圾邮件
  6. 求1000以内的水仙花数
  7. debian linux上usb摄像头,[Debian] 安装USB摄像头(芯片ZC0301)驱动
  8. 随身WIFI刷入debian
  9. opencv 场景文字识别
  10. code review流程规范