当前位置: 首页 > 编程日记 > 正文

吴恩达老师深度学习视频课笔记:自然语言处理与词嵌入

Word representation:词嵌入(word embedding),是语言表示的一种方式,可以让算法自动理解一些类似的词比如男人、女人,国王、王后等。通过词嵌入的概念,即使你的模型标记的训练集相对较小,也可以构建NLP(自然语言处理)应用。词表示(word representation)的一个缺点是它把每个词孤立起来,如下图,这样使得算法对相关词的泛化能力不强,任何两个one-hot向量的内积都是0。

如果我们不用one-hot表示而是用特征化表示(featurized representation)来表示每个词,如下图,比如可以用gender, royal, age, food, size, cost等有300个不同的特征,这样对于不同的单词算法会泛化的更好。这种高维特征的表示能够比one-hot更好的表示不同的单词。

我们最终学习的特征或者300维的词嵌入通常可以把这300维的数据嵌入到一个二维空间里可视化,如下图。常用的可视化算法是t-SNE算法。词嵌入算法对于相近的概念学到的特征也比较类似。在对这些概念可视化的时候这些概念就比较相似,最终把它们映射为相似的特征向量。

Using word embeddings:如下图,命名实体识别例子(named entity recognition example),用词嵌入作为输入训练好的模型,比如要找出人名,假如有个句子,Sally Johnson是一个种橙子的农民,如果有一个新的输入,Robert Lin是一个种苹果的农民,因为橙子和苹果很相近,那么算法很容易知道Robert Lin也是一个人的名字。如果有一个新的输入Robert Lin是一个榴莲培育家,假如你标记的很小的训练集可能没有榴莲或培育家两个词。但是如果你有一个已经学好的词嵌入,它会告诉你榴莲是水果就像橙子一样,并且培育家跟农民差不多,那么你就有可能从你的训练集里种橙子的农民归纳出榴莲培育家也是一个人。词嵌入能够达到这种效果其中一个原因就是学习词嵌入的算法会考察非常大的文本集,可以是一亿个单词甚至达到100亿也是合理的。通过读取大量的互联网文本,接下来你可以把这个词嵌入应用到命名实体识别任务中,尽管你只有一个很小的训练集,可以使用迁移学习把你从互联网上免费获得的大量的无标签文本中学习到的知识能够分辨橙子、苹果、榴莲都是水果的知识,然后把这些知识迁移到一个任务中。

用词嵌入做迁移学习的步骤:如下图,第一步,先从大量的文本集中学习词嵌入或者可以下载网上预训练好的词嵌入模型。然后你可以用这些词嵌入模型把它迁移到你的新的只有少量标注训练集的任务中,比如说用300维的词嵌入来表示你的单词。这样做的一个好处就是你可以用更低维度的特征向量代替原来的10000维的one-hot向量。最后,当你在你的新的任务上训练模型时,在你的命名实体识别任务上只有少量的标记数据集上你可以自己选择用新的数据要不要微调。当你的任务的训练集相对较小时,词嵌入的作用最明显,所以它广泛用于NLP领域。比如它已经用在命名实体识别、文本摘要、文本解析等。词嵌入在语言模型、机器翻译领域用的少一些,这些任务你有大量的数据。

词嵌入的特性:词嵌入还有一个特性它能帮助实现类比推理。类比推理可能不是自然语言处理应用中最重要的存在,不过它能帮助人们理解词嵌入作了什么以及词嵌入能够干什么。如下图,假设用4维的嵌入向量,假如man对于woman,是否可以推论出king对应什么?从eman-ewoman和eking-equeen中根据向量的表示,它们都是gender上的差异,所以得出这种类比推理的结论的方法。eman-ewoman≈eking-e?,可以得出是Queen。

如何将类比推理用算法实现:如下图,比如词嵌入向量在一个300维的空间里,于是man代表的就是空间中的一个点,另外一个单词woman代表空间另一个点,等等。向量man和woman的差非常接近于向量king和queen之间的差值,在gender这一维的差。通过方程找到一个使得相似度最大的单词,如果结果理想的话,会找到单词queen。最常用的相似度函数叫做余弦相似度。也可以用平方距离或者欧式距离来表示。词嵌入的一个显著成果就是可学习的类比关系的一般性。

嵌入矩阵:当你应用算法来学习词嵌入时实际上是学习一个嵌入矩阵(embedding matrix)。如下图,假设我们的字典含有10000个单词,我们要做的就是学习一个嵌入矩阵E,它将是一个300*10000的矩阵,这个矩阵的各列代表的是字典中10000个不同的单词所代表的不同向量。E乘以one-hot向量会得到嵌入向量。

学习词嵌入:建立一个语言模型是学习词嵌入的好方法,如下图,如何建立神经网络来预测序列中的下一个单词。建立一个one-hot向量表示这个词,然后生成一个参数矩阵E,然后用E乘以o得到嵌入向量e4343,这一步意味着e4343是由矩阵E乘以one-hot向量得到的。然后对其它的词也做相同的操作。现在你有许多300维的嵌入向量。我们能做的是把它们全部放进神经网络中,即输入一些上下文然后预测出目标词。如果用一个固定的历史窗口就意味着你可以处理任意长度的句子。

Word2Vec:它是一个简单而且计算时更加高效的方式来学习这种类型的词嵌入。Word2Vec的skip-gram模型即用softmax作为分类,如下图,它把一个像orange这样的词作为输入并预测这个输入词从左数或者从右数的某个词,预测上下文词的前面一些或者后面一些是什么词,实际上使用这个算法会遇到一些问题,首要的问题就是计算速度。这里有一些解决方案,比如使用一个分级的softmax分类器。

负采样:skip-gram模型可以构造一个监督学习任务,把上下文映射到目标词上。但它的缺点就在于softmax计算起来很慢。这里介绍一个改善过的学习问题叫做负采样(negative smapling),它可以做到与skip-gram模型相似的事情,但是有了一个更加有效的学习算法。如下图,在这个算法中要做的是构造一个新的监督学习问题,问题就是给定一对单词,比如orange, juice,我们要去预测这是否是一对上下文词----目标词。orange和juice是一对正样本,orange和king是一对负样本。生成这些数据的方式是选择一个上下文词再选一个目标词,作为正样本;然后给定几次用相同的上下文再从字典中选取随机的词,作为负样本(negative example)。接下来构造一个监督学习问题,其中学习算法输入x,要去预测目标的标签即预测输出y,因此问题就是给定一对词,像orange和juice, 这个算法就是要分辨两种不同的采样方式。这就是如何生成训练集的方法。关于k的选取,小数据集的话,k从5到20比较好,如果数据集很大,k就选的小一点,对于更大的数据集,k就选择2到5。数据集越小,k就越大。在这个例子中用的是k等于4。

从x映射到y的监督学习模型,如下图,定义一个logistic回归模型,给定输入c,t对的条件下,y=1的概率。如果输入词是orange,你要做的就是输入one-hot向量再传递给E,通过两者相乘,获得嵌入向量e6257,你就得到了10000个可能的logistic回归分类问题,其中一个将会是用来判断目标词是否是juice的分类器,还有其它的词。但并不是每次迭代都训练全部1000个,我们只训练其中的5个,我们要训练对应真正目标词的那一个分类器,再训练4个随机选取的负样本,这就是k=4的情况。所以不使用巨大的10000维度的softmax,因为计算成本很高,而是把它转变为10000个二分类问题,每个都很容易计算。每次迭代我们要做的只是训练它们其中的5个,一般而言,就是k+1个,其中k个负样本和1个正样本,这也就是为什么这个算法计算成本更低的原因。这个技巧叫做负采样。

GloVe word vectors:GloVe算法不如Word2Vec或skip-gram模型用的多。如下图,GloVe表示的是用词表示的全局向量。GloVe所要做的就是使其关系开始明确化,假定Xij是单词i在单词j上下文中出现的次数,这里的i和j就和t和c的功能一样,可以认为Xij等同于Xtc,你也可以遍历你的训练集然后数出单词i和单词j在不同的上下文中出现的个数。Xij就是单词i和单词j出现位置相近时或是彼此接近的频率的计数器。

Sentiment classification(情绪分类):情绪分类任务就是看一段文本然后分辨这个人是否喜欢他们在讨论的这个东西。情绪分类的一个最大挑战就是可能标记的训练集没有那么多,但是有了词嵌入,即使只有中等大小的标记的训练集,你也能构建一个不错的情绪分类器。如下图,输入x是一段文本,而输出y是你要预测的相应情绪,比如说是一个餐馆评价的星级。基于这样标记的数据集,如果你能训练一个从x到y的映射,那么你就可以用来搜集大家对你运营的餐馆的评价。

Debiasing(去除偏差) word embeddings:词嵌入中一些有关减少或是消除偏见的办法,如种族、性取向方面的偏见,如下图,根据训练模型所使用的文本,词嵌入能够反映出性别、种族、年龄、性取向等其它方面的偏见,这些偏见都和社会经济状态相关。词嵌入能够轻易学会用来训练模型的文本中的偏见内容,所以算法获取到的偏见内容就可以反映出人们写作中的偏见。以性别为例,首先我们要做的事就是辨别出我们想要减少或想要消除的特定偏见的趋势(direction),接着是中和步(neutralization step),最后一步是均衡步(equalization step)。

GitHub: https://github.com/fengbingchun/NN_Test

相关文章:

高文院士:为什么中国的AI发展必须要有开源开放平台?

出品 | AI科技大本营(ID:rgznai100)10 月 31 日,由北京智源人工智能研究院主办的 2019 北京智源大会在国家会议中心开幕,本次大会围绕人工智能基础研究现状及面临的机遇和挑战、人工智能技术未来发展的核心方向等话题,…

libcurl断点下载遇到的问题

最近游戏把资源(图片、配置、lua)的加载、更新全部改了 ,加载其实还好,就是不走之前的zip解压方式。 以前的大体流程: 下载 –> 启动 –> 解压 –> 更新 –> 进入游戏 现在的大体流程: 下载 –…

sqlite3数据的使用(xcode 7,ios9)

由于考虑将来还要开发Android版本app,为了移植方便,所以使用了sqlite3来做数据持久化,到时候把sql语句拷过去还能用。 1、 首先用xcode载入sqlite3类库 选择工程的TARGETS-build phases-link binary with libraries,点击“”按钮&…

吴恩达老师深度学习视频课笔记:序列模型和注意力机制

基础模型&#xff1a;比如你想通过输入一个法语句子来将它翻译成一个英语句子&#xff0c;如下图&#xff0c;seq2seq模型&#xff0c;用x<1>一直到x<5>来表示输入句子的单词&#xff0c;然后我们用y<1>到y<6>来表示输出的句子的单词&#xff0c;如何训…

七个开发者成就百亿市值公司?这个技术思路如今让阿里发扬光大

2015年&#xff0c;马云带领阿里巴巴集团的高管拜访了位于芬兰游戏公司supercell 这家公司开发出了《部落战争》、《皇室战争》、《海岛奇兵》等App端知名游戏图片来自多玩BBS社区但是&#xff0c;这么知名的游戏公司开发团队当时却不足7人&#xff01;整个团队好像cell一样&am…

Linux学习笔记之文件管理和目录管理类命令

在开始理解Linux文件管理和目录类命令之前&#xff0c;有必要先说一下&#xff0c;关于操作系统在计算机中都做了哪些工作。0、操作系统的工作1、文件管理&#xff0c;增删改查2、目录管理3、进程管理4、软件安装5、运行程序6、网络管理7、设备管理本次笔记介绍的是文件管理和目…

张钹、朱松纯、黄铁军等同台激辩:人工智能的“能”与“不能”

整理 | AI科技大本营编辑部出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;10 月 31 日&#xff0c;由北京智源人工智能研究院主办的 2019 北京智源大会在国家会议中心开幕&#xff0c;本次大会吸引了国际人工智能领域的顶级专家学者参加&#xff0c;围绕人工智能基础…

ssqlit3.0数据库使用方法

由于考虑将来还要开发Android版本app&#xff0c;为了移植方便&#xff0c;所以使用了sqlite3来做数据持久化&#xff0c;到时候把sql语句拷过去还能用。 1、 首先用xcode载入sqlite3类库 选择工程的TARGETS-build phases-link binary with libraries&#xff0c;点击“”按钮&…

GCC中通过--wrap选项使用包装函数

在使用GCC编译器时&#xff0c;如果不想工程使用系统的库函数&#xff0c;例如在自己的工程中可以根据选项来控制是否使用系统中提供的malloc/free, new/delete函数&#xff0c;可以有两种方法&#xff1a; (1). 使用LD_PRELOAD环境变量&#xff1a;可以设置共享库的路径&…

[原]对Linux环境下任务调度一点认识

我一直以来有一个误解&#xff0c;那就是在终端运行某个程序时&#xff0c;按下Ctrl D时我误以为就是杀死了这个进程&#xff0c;今天才知道原来不是。比如我利用libevent在Linux环境下写了一个网络监听程序&#xff0c;当启动程序之后&#xff0c;就会一直监听本地的6789端口…

决策树的C++实现(CART)

关于决策树的介绍可以参考&#xff1a; https://blog.csdn.net/fengbingchun/article/details/78880934 CART算法的决策树的Python实现可以参考&#xff1a; https://blog.csdn.net/fengbingchun/article/details/78881143 这里参考 https://machinelearningmastery.com/impl…

iOS开发-由浅至深学习block

作者&#xff1a;Sindri的小巢&#xff08;简书&#xff09; 关于block 在iOS 4.0之后&#xff0c;block横空出世&#xff0c;它本身封装了一段代码并将这段代码当做变量&#xff0c;通过block()的方式进行回调。这不免让我们想到在C函数中&#xff0c;我们可以定义一个指向函数…

Google和微软分别提出分布式深度学习训练新框架:GPipe PipeDream

【进群了解最新免费公开课、技术沙龙信息】作者 | Jesus Rodriguez译者 | 陆离编辑 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导读】微软和谷歌一直在致力于开发新的用于训练深度神经网络的模型&#xff0c;最近&#xff0c;谷歌和微软分别…

fragment 横竖屏 不重建

2019独角兽企业重金招聘Python工程师标准>>> android:configChanges"screenSize|orientation" 这样设置 切屏时都不会重新调用fragment里面的onCreateView了 转载于:https://my.oschina.net/u/1777508/blog/317811

二叉树简介及C++实现

二叉树是每个结点最多有两个子树的树结构&#xff0c;即结点的度最大为2。通常子树被称作”左子树”和”右子树”。二叉树是一个连通的无环图。 二叉树是递归定义的&#xff0c;其结点有左右子树之分&#xff0c;逻辑上二叉树有五种基本形态&#xff1a;(1)、空二叉树&#xf…

swift实现ios类似微信输入框跟随键盘弹出的效果

为什么要做这个效果 在聊天app&#xff0c;例如微信中&#xff0c;你会注意到一个效果&#xff0c;就是在你点击输入框时输入框会跟随键盘一起向上弹出&#xff0c;当你点击其他地方时&#xff0c;输入框又会跟随键盘一起向下收回&#xff0c;二者完全无缝连接&#xff0c;那么…

行人被遮挡问题怎么破?百度提出PGFA新方法,发布Occluded-DukeMTMC大型数据集 | ICCV 2019...

作者 | Jiaxu Miao、Yu Wu、Ping Liu、Yuhang Ding、Yi Yang译者 | 刘畅编辑 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导语】在以人搜人的场景中&#xff0c;行人会经常被各种物体遮挡。之前的行人再识别&#xff08;re-id&#xff09;方法…

WinAPI: Arc - 绘制弧线

为什么80%的码农都做不了架构师&#xff1f;>>> //声明: Arc(DC: HDC; {设备环境句柄}X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer {四个坐标点} ): BOOL;//举例: procedure TForm1.FormPaint(Sender: TObject); constx1 10;y1 10;…

提高C++性能的编程技术笔记:跟踪实例+测试代码

当提高性能时,我们必须记住以下几点&#xff1a; (1). 内存不是无限大的。虚拟内存系统使得内存看起来是无限的&#xff0c;而事实上并非如此。 (2). 内存访问开销不是均衡的。对缓存、主内存和磁盘的访问开销不在同一个数量级之上。 (3). 我们的程序没有专用的CPU&#xff…

2019年不可错过的45个AI开源工具,你想要的都在这里

整理 | Jane 出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100)一个好工具&#xff0c;能提高开发效率&#xff0c;优化项目研发过程&#xff0c;无论是企业还是开发者个人都在寻求适合自己的开发工具。但是&#xff0c;选择正确的工具并不容易&#xff0c;有时这甚至是…

swift中delegate与block的反向传值

swift.jpg入门级 此处只简单举例并不深究&#xff0c;深究我也深究不来。对于初学者来说delegate或block都不是一下子能理解的&#xff0c;所以我的建议和体会就是&#xff0c;理不理解咱先不说&#xff0c;我先把这个格式记住&#xff0c;对就是格式&#xff0c;delegate或blo…

Direct2D (15) : 剪辑

为什么80%的码农都做不了架构师&#xff1f;>>> 绘制在 RenderTarget.PushAxisAlignedClip() 与 RenderTarget.PopAxisAlignedClip() 之间的内容将被指定的矩形剪辑。 uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject); varcvs: TDirect2DCanvas;…

女朋友啥时候怒了?Keras识别面部表情挽救你的膝盖

作者 | 叶圣出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;【导读】随着计算机和AI新技术及其涉及自然科学的飞速发展&#xff0c;整个社会上的管理系统高度大大提升&#xff0c;人们对类似人与人之间的交流日渐疲劳而希望有机器的理解。计算机系统和机械人如果需要…

提高C++性能的编程技术笔记:构造函数和析构函数+测试代码

对象的创建和销毁往往会造成性能的损失。在继承层次中&#xff0c;对象的创建将引起其先辈的创建。对象的销毁也是如此。其次&#xff0c;对象相关的开销与对象本身的派生链的长度和复杂性相关。所创建的对象(以及其后销毁的对象)的数量与派生的复杂度成正比。 并不是说继承根…

swim 中一行代码解决收回键盘

//点击空白收回键盘 override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { view.endEditing(true) }

WinAPI: SetRect 及初始化矩形的几种办法

为什么80%的码农都做不了架构师&#xff1f;>>> 本例分别用五种办法初始化了同样的一个矩形, 运行效果图: unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 class(TForm)Butto…

Windows10上使用VS2017编译OpenCV3.4.2+OpenCV_Contrib3.4.2+Python3.6.2操作步骤

1. 从https://github.com/opencv/opencv/releases 下载opencv-3.4.2.zip并解压缩到D:\soft\OpenCV3.4.2\opencv-3.4.2目录下&#xff1b; 2. 从https://github.com/opencv/opencv_contrib/releases 下载opencv_contrib-3.4.zip并解压缩到D:\soft\OpenCV3.4.2\opencv_contrib-3…

swift 跳转网页写法

var alert : UIAlertView UIAlertView.init(title: "公安出入境网上办事平台", message: "目前您可以使用网页版进行出入境业务预约与查询&#xff0c;是否进入公安出入境办事平台&#xff1f;", delegate: nil, cancelButtonTitle: "取消", o…

智能边缘计算:计算模式的再次轮回

作者 | 刘云新来源 | 微软研究院AI头条&#xff08;ID:MSRAsia&#xff09;【导读】人工智能的蓬勃发展离不开云计算所带来的强大算力&#xff0c;然而随着物联网以及硬件的快速发展&#xff0c;边缘计算正受到越来越多的关注。未来&#xff0c;智能边缘计算将与智能云计算互为…

WinAPI: 钩子回调函数之 SysMsgFilterProc

为什么80%的码农都做不了架构师&#xff1f;>>> SysMsgFilterProc(nCode: Integer; {}wParam: WPARAM; {}lParam: LPARAM {} ): LRESULT; {}//待续...转载于:https://my.oschina.net/hermer/blog/319736