【MindSpore易点通】深度学习系列-词嵌入
1 特征表示
在自然语言处理中,有一个很关键的概念是词嵌入,这是语言表示的一种方式,可以让算法自动的理解一些同类别的词,比如苹果、橘子,比如袜子、手套。

one-hot向量
之前小编给大家提到的词典库里一共有15000个元素,用one-hot向量来表示词。比如苹果apple在词典里是第1142个,那么对应向量只在第1142行为1,其余均为0,表示为
;同理,其他的元素比如橘子orange、袜子socks、手套gloves都可以这样表示,但是同时这种方法也将把每个词孤立了起来,使得算法对相关词的泛化能力不够强。
比如我们通常会说:“I want a glass of orange juice.”但如果算法并不知道apple和orange的类似性(这两个one-hot向量的内积是0),那么当其遇到“I want a glass of apple __”时,并不知道这里也应该填写 juice。
如果用特征化的表示来表示库里的每个词,学习它们的特征或者数值。

比如我们想知道apple和arange与性别的特征关系,实际它们并没有太大的关系,所以特征值接近于0;第二、三个特征是与高贵和年龄的关系,特征值也没有太大的参考价值,接近于0;但是第四个特征是和食物有关,由于apple和arange都是水果食物,所以它们的特征值接近于1;......最终我们罗列了300个不同的特征,所以每个单词都是由一个300维的向量来表示的,符号表示为
。虽然apple和orange可能有些特征不太一样,但总的来说大部分特征都有相似的值,那么上述我们提到的问题,算法就可以明白orange juice和apple juice也是类似的,算法的泛化性因此得到了提高。

这样我们就可以选用t-SNE算法来对特征向量可视化,通过观察这种词嵌入的表示方法,最终同类别的单词会聚集在一块,词嵌入算法对于相近的概念,学到的特征也比较类似。
2 词嵌入的使用
参考案例——句中找人名:Jack Li is a teacher.

使用词嵌入作为输入训练好的模型,如果看到一个新的输入:“Jack Li is a farmer.”因为知道teacher和farmer很相近,那么算法很容易就知道Jack Li是一个人的名字。同时,如果遇到不太常见的单词,比如:Jack Li is a cultivator.(假设训练集里没有cultivator这个单词),但是词嵌入的算法通过考察大量的无标签文本,会发现farmer、teacher、cultivator相近,把它们都聚集在一块。这样一来即使只有一个很小的训练集,但是使用迁移学习,把从大量的无标签文本中学习到的知识迁移到一个任务中——比如少量标记的训练数据集的命名实体识别任务。
如何用词嵌入做迁移学习的步骤:
1.先从大量的文本集中学习词嵌入。
2.用这些词嵌入模型把它迁移到新的只有少量标注训练集的任务中,比如说用300维的词嵌入来表示单词,这样就可以用更低维度的特征向量代替原来的10000维的one-hot向量。
3.当在新的任务上训练模型时,只有少量的标记数据集,可以选择不进行微调,而是用新的数据调整词嵌入。
当你的任务的训练集相对较小时,词嵌入的作用最明显,所以它广泛用于NLP领域,但是其对于一些语言模型和机器翻译并不适用。
3 类比推理
词嵌入有一个非常强大的特性就是可以帮助实现类比推理。比如从性别这个特征上来说,如果man应该对应woman,那么算法可以推导出king对应queen。

假设用一个四维向量来表示man,表示为
,同理
,最终对应向量进行减法运算时我们会发现一个神奇的现象:

其实也很好理解:当算法被问及man对woman相当于king对什么时,算法所做的就是计算
,然后找出一个向量
,也就是说需要的就是找到单词w来最大化
与
的相似度,然后通过该方程以及相似度函数可以找到一个使得相似度最大的单词queen。
最常用的相似度函数是余弦相似度,假如在向量u和v之间定义相似度:

如果u和v非常相似,那么它们的内积将会很大,那么该式就是u和v的夹角Φ的余弦值,实际就是计算两向量夹角Φ角的余弦。夹角为0度时,余弦相似度就是1,当夹角是90度角时余弦相似度就是0,当夹角是180度时相似度等于-1,因此角度越小,两个向量越相似。

好啦,今天关于词嵌入的介绍就先到这里啦,下期小编将会带领大家如何学习一个神经语言模型来得到更好的词嵌入以及使用词嵌入。
相关推荐
基于MindSpore的MNIST手写体识别实验
基于华为自研MindSpore深度学习框架构建网络模型,实现MNIST手写体识别实验。 包含可运行源码、运行结果演示视频,本地MindSpore详细配置教程(私信可远程配置) 本例子会使用MindSpore深度学习框架实现一个简单的图片分类实验,整体流程如下: 1、 处理需要的数据集,这里使用了MNIST数据集。 2、 定义一个网络,这里我们使用LeNet网络。 3、 定义损失函数和优化器。 4、 加载数据集并进行训练,训练完成后,查看结果及保存模型文件。 5、 加载保存的模型,进行推理。 6、 验证模型,加载测试数据集和训练后的模型,验证结果精度。
华为深度学习框架MindSpore正式开源:自动微分不止计算图.md
今年的华为开发者大会 HDC 2020 上,除了**昇腾、鲲鹏等自研芯片硬件平台**之外,最令人期待的就是**深度学习框架 MindSpore 的开源**了。今天上午,华为 MindSpore **首席科学家陈雷**在活动中宣布这款产品正式开源,我们终于可以在开放平台上一睹它的真面目。 本文是根据机器之心报道的MindSpore 的开源介绍而整理的.md笔记 作为一款支持**端、边、云独立/协同的统一训练和推理框架,华为希望通过这款完整的软件堆栈,实现**一次性算子开发、一致的开发和调试体验**,以此帮助开发者实现**一次开发,应用在所有设备上平滑迁移**的能力。 三大创新能力:新编程范式,执行模式和协作方式 由**自动微分、自动并行、数据处理**等功能构成 开发算法即代码、运行高效、部署态灵活**的**特点**, 三层核心:从下往上分别是**后端运行时、计算图引擎及前端表示层**。 最大特点:采用了业界最新的 **Source-to-Source 自动微分**,它能**利用编译器及编程语言的底层技术**,进一步**优化以支持更好的微分表达**。主流深度学习框架中主要有**三种自动微分技术,才用的不是静态计算图、动态计算图,而是基于**源码**转换:该技术源以**函数式编程框架**为基础,以**即时编译(JIT)**的方式**在中间表达(编译过程中程序的表达形式)上做自动微分变换**,支持**复杂控制流场景、高阶函数和闭包**。 MindSpore 主要概念就是张量、算子、单元和模型 其代码有两个比较突出的亮点:计算图的调整,动态图与静态图可以一行代码切换;自动并行特性,我们写的串行代码,只需要多加一行就能完成自动并行。
MindSpore实现简单狼狗图片分类
MindSpore实现简单狼狗图片分类
MindSpore EfficientNet
MindSpore EfficientNet
Jupyter_动手学深度学习的MindSpore实现供MindSpore学习者配合李沐老师课程使用.zip
Jupyter-Notebook


