前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >图解BiDAF中的单词嵌入、字符嵌入和上下文嵌入(附链接)

图解BiDAF中的单词嵌入、字符嵌入和上下文嵌入(附链接)

作者头像
昱良
发布于 2019-10-21 07:03:31
发布于 2019-10-21 07:03:31
1.9K0
举报

BiDAF(Bi-Directional Attention Flow,双向注意力流)是一种常用的问答任务机器学习模型,本文演示了BiDAF是如何使用三种嵌入机制将单词转化为向量形式的。

本文是图解双向注意力流(BiDAF)工作原理系列文章(共4篇)中的第二篇,BiDAF是一种常用的问答任务机器学习模型。

系列文章

https://arxiv.org/abs/1611.01603

概括的说,BiDAF是一个封闭域的抽取式问答模型。这意味着为了能够回答一个Query,BiDAF需要查阅包含回答查询所需信息的随附文本,这个随附的文本被称为Context。BiDAF的工作原理是从上下文中提取一个能够最好Answer查询的子串,这就是我们所说的“对查询的回答”。我有意将单词Query、Context和Answer大写,表示我在本文中使用他们时特指他们的专业技术能力。

本系列的第一篇文章介绍了BiDAF的框架。在本文中,我们将关注BiDAF体系结构中的第一部分-当模型接收到一个传入的Query及其附带文本时,第一件要做的事。为了便于学习,文末提供了这些步骤中包含的数学符号词汇表。让我们了解下相关步骤吧!

步骤1 符号化

在BiDAF中,首先对传入的Query和Context进行标记,即符号化,将这两个长字符串分解为他们的构成词。在BiDAF论文中,符号T和J分别表示Context和Query中单词的数量。下面是符号化的描述:

步骤2 单词嵌入

对步骤1得到的单词进行嵌入处理,并将其转化为数字向量。这些向量捕捉单词的语法功能(语法)和含义(语义),便于我们能够对它们进行各种数学计算。在BiDAF中,可以完成3个粒度级别上的嵌入:字符、单词和上下文。现在让我们关注第1个嵌入层-单词嵌入。

在最开始的BiDAF中单词嵌入算法使用的是GloVe,本文中,我只简要介绍它,因为已经有一些优秀的资源对它的工作过程进行了解释。如果你缺少时间深入理解详情,这里有一个非常简单的、关于GloVe的总结:

GloVe

https://nlp.stanford.edu/projects/glove/

优秀的资源

http://mlexplained.com/2018/04/29/paper-dissected-glove-global-vectors-for-word-representation-explained/

GloVe是一种无监督学习算法,利用单词在语料库中的共现频率来生成单词的向量表示,这些向量以数字的形式表示了单词不同方面的含义。

GloVe向量中的数字封装了单词的语义和语法信息,因此,我们可以使用这些向量执行一些很酷的操作!例如,如下图所示,我们可以使用减法来查询单词的同义词。

BiDAF使用Glove预先训练好的嵌入来获得Query和Context中单词的向量表示。“预训练”指的是在BiDAF模型训练过程中GloVe提前训练好的向量值不会更新,处于冻结状态。因此,你可以把BiDAF的单词嵌入步骤看作是一个简单的查找字典步骤,我们用向量(“字典”的“值”)替换单词(Glove“字典”的“键”)。

单词嵌入步骤输出2个矩阵,一个用于Context,一个用于Query。矩阵的长度等于Context和Query中的单词数量(用T和J表示,分别表示前后者的单词数量)。矩阵的高度采用d1预设值,等于GloVe的向量维度,可以是50、100、200或300.下图描述了Context的单词嵌入步骤:

步骤3 字符嵌入

我们使用GloVe得到大多数单词的向量表示,然而,这仍不足以达到我们的目的。

GloVe提前训练好的“字典”很大,包含了数百万个单词,但当训练BiDAF时仍会遇到在GloVe字典中不存在的单词,我们将这样的单词称为OVV词(Out-Of-Vocabulary,词表外)。GloVe会通过简单地分配一些随机向量值来处理它们,如果不进行补救,这种随机分配最终会混淆我们的BiDAF模型。

因此,我们需要一个能够处理OOV单词的嵌入机制,这就是字符嵌入的地方。字符嵌入使用一维卷积神经网络(One-Dimensional Convolutional Neural Network,1D-CNN)研究单词中的字符构成来寻找单词的数字表示。

你可以将1D-CNN看作是一个按字符滑动扫描单词的过程,这个扫描器可以有多个。这些扫描器可以同时关注多个字符,当扫描时,从所关注的字符中提取信息,最后,整合不同扫描器的信息形成单词的向量表示。

和单词嵌入输出一样,字符嵌入输出2个矩阵,分别用于Context和Query。矩阵的长度等于Context和Query中的单词数量T和J,而它们的高度则是1D-CNN中使用的卷积滤波器的数量(要知道什么是“卷积滤波器”,请阅读下节),用d2表示。这2个矩阵将和单词嵌入步骤输出的2个矩阵一起用。

1D-CNN其他细节信息

以上章节仅对1D-CNN的工作原理进行了简单的概念性介绍。在本节中,我将详细解释1D-CNN的工作原理。严格来说,这些细节对理解BiDAF的工作原理是不必要的,因此,如果您没有足够的时间,请随时向前跳着看。然而,如果是你那种无法理解你正在学习算法中的每一个运作部分就无法睡好的人,这一部分就是为你准备的。

使用1D-CNN的动机是,单个单词具有语义,单词构成也有语义。

例如,如果你知道“underestimate”这个单词的含义,你就会理解“misunderestimate”的意思,尽管后者并不是一个真正的单词。

为什么呢?根据你对英语的了解,前缀“mis”通常表示“错误”的意思,这会使你推断“misunderestimate”是指“mistakenly underestimate”,错误低谷某事的意思。

1D-CNN是一种模拟人理解单词构成语义能力的算法,更广泛地说,它是一个能够从长输入序列的较短片段中提取信息的算法,这个输入序列可以是音乐、DNA、语音记录、博客等。在BiDAF中,这个“长输入序列”是单词,而“短片段”是构成单词的字母组合和词素。

为了了解1D-CNN的工作原理,让我们看看下面的一系列插图,这些插图取自哈佛大学Yoon Kim等人的幻灯片。

幻灯片

https://nlp.seas.harvard.edu/slides/aaai16.pdf

1.假设我们想把1D-CNN应用到“absurdity”这个单词上,我们要做的第一件事是将单词中的每个字符表示为一个维度为d的向量。这些向量是随机初始化的,总的来说,这些向量构成一个矩阵C,d是这个矩阵的高度,而它的长度l只是单词中的字符数。在我们的例子中,d和l分别是4和9。

2.接下来,我们将创建一个卷积滤波器H。这个卷积滤波器(也称为“核”)是一个矩阵,我们将用它来扫描这个单词。它的高度d和矩阵C的高度相同,但它的宽度w是一个小于l的数字。H内的值是随机初始化的,将在模型训练期间进行调整。

3.我们将H覆盖在C的最左角,取H的元素积及其在C在投影(描述这个过程的专业术语是取H的Hadamard积及其在C上的投影)。这个过程输出一个和H维度相同的矩阵(d x l),将其中的所有数字相加得到一个标量。在我们的例子中,标量是0.1,这个数值作为一个新向量f的第1个元素值。

4.然后我们将H向右滑动一个字符并执行相同的操作(得到Hadamard积并求出结果矩阵中的数字之和)得到另一个标量0.7,作为f的第2个元素值。

5.我们一个字符一个字符地重复这些操作,直到达到单词的结尾。在每一步中,我们都会向f中添加一个元素值,并延长向量,直到它达到最大长度(l-w+1)。当我们一次性看到这个单词“absurdity”的3个字符时,向量f是它的一个数字表示。需要注意的是,卷积滤波器H中的值不会随着H在单词中的滑动而改变,更夸张地说,我们称H为“位置不变量”。卷积滤波器的位置不变特性是我们能够捕捉某个字母组合的含义,无论这种组合出现在单词的哪个位置。

6.我们记下f中的最大值,最大值可以视为是f的“摘要”。在我们的例子中,这个数是0.7,这个数字被称为是f的“摘要标量”。取向量f的最大值过程叫做“最大池化”。

7.然后,我们用另一个卷积滤波器(又一个H),宽度可能不同。在下面的自立中,我们第二个H表示为H ,宽度为2。和第一个滤波器一样,我们沿着H 在单词上滑动,得到向量f,然后进行最大池化操作(即得到它的摘要标量)。

8.我们使用不同的卷积滤波器多次重复扫描过程,每个扫描过程产生一个摘要标量。最后,收集这些不同扫描过程中的摘要 标量,形成单词的字符嵌入。

就这样,我们现在得到一个基于字符的表示,作为单词表示的补充。这是1D-CNN这段离题段落的结尾,现在让我们回归到讨论BiDAF的话题上。

步骤4 高速神经网络

在这一点上,我们得到单词的两组向量表示,一组来自GloVe的单词嵌入,另一组来自1D-CNN的字符嵌入,下一步是垂直联结这些表示。

这种联结产生2个矩阵,分别用于Context和Query,高度是d,d1和d2之和。同时,他们的长度仍然和前一个矩阵相同(T表示Context矩阵的单词数量,J表示Query的单词数量)。

然后这些矩阵通过所谓的高速神经网络,高速神经网络和前馈神经网络非常相似。你们可能已经非常熟悉前馈神经网络了。回顾一下,我们将向量y输进一个单层前馈神经网络中,在结果z输出之前会发生3件事:

  • 1.将这一层的权重矩阵W与y相乘。
  • 2.在W*y中添加偏差b。
  • 3.对W*y应用非线性函数g,如Relu或Tanh

在高速神经网络中,只有一小部分的输入将受到上述步骤的影响,剩下的一小部分允许通过未转换的网络。这些部分输入的大小由转换率t和携带率1-t来控制,通过sigmoid函数计算t值,在0-1之间。现在,我们的方程如下:

在退出高速神经网络时,将输入的转化部分和未转化部分加起来。

高速神经网络的作用是调整单词嵌入和字符嵌入步骤的相对贡献配比,逻辑是,如果我们处理的是一个像“misunderestimate”这样的OOV词,会希望增加该词1D-CNN表示的相对重要性,因为我们知道它的GloVe表示可能是一些随机的胡言乱语。另一方面,当我们处理一个常见而且含义明确的单词时,如“table”时,我们可能希望GloVe和1D-CNN之间的贡献配比更为平等。

高速神经网络的输出同样是2个矩阵,分别用于Context(d-by-T矩阵)和Query(d-by-J矩阵),表示Context、Query中结合单词嵌入、字符嵌入调整的单词向量表示。

步骤5 上下文嵌入

事实证明,这些向量表示依旧无法达到我们的目的。问题是,这些单词表示并没有考虑到单词的上下文含义,也就是单词周围语境的含义。当我们仅依赖于单词和字符嵌入时,一对同音词,例如“tear”(眼睛中的水状排泄物)和“tear”(裂缝)将被赋予完全相同的向量表示,尽管实际上它们是不同的单词,这可能会混淆我们的模型并降低其准确性。

因此,我们需要一个嵌入机制,可以在上下文中理解一个单词,这就是上下文嵌入的地方。上下文嵌入层由长短期记忆序列(Long-Short-Term-Memory ,LSTM)组成,下面是LSTM的简介:

  • LSTM是一种能够记忆长期相关性的神经网络体系结构。当我们将一个输入序列(例如一个文本字符串)输入到一个常规的前向LSTM层时,每个时间步的输出序列都将对来自该时间步和过去时间步的信息进行编码。换句话说,每个单词的输出嵌入都将包含来自其前面单词的上下文信息。
  • BiDAF采用双向LSTM(Bi-LSTM),由前向和后向LSTM组成。前向和后向LSTM的组合输出嵌入会同时编码来自过去(向后)和未来(向前)的状态信息。换言之,现在这一层出来的每个单词表示都包含这个单词周围语境的上下文信息。

上下文嵌入步骤的输出是2个矩阵,依旧分别是Context和Query。BiDAF论文将这些矩阵称为H和U(术语警告-此处H不同于前面提到的卷积矩阵H,对不同概念使用相同的符号是不幸的巧合)。Context矩阵H是d-by-T矩阵,Query矩阵是d-by-J矩阵。

这就是BiDAF嵌入层的全部内容,多亏3个嵌入层的贡献,嵌入输出的H和U包含了Context、Query中所有单词的句法、语义和上下文信息。我们将在下一步中使用H和U,请注意,这一步我们会将这些信息综合起来使用,这是BiDAF中核心的技术创新,也是本系列下一篇文章的重点,请一定要看!

下一篇文章:

https://towardsdatascience.com/the-definitive-guide-to-bidaf-part-3-attention-92352bbdcb07

术语

  • Context:Query的附带文本,里面包含Query的答案。
  • Query:模型应该给出回答的问题。
  • Answer:Context的子字符串,包含可以回答Query的信息。这个子串是由模型提取出来的。
  • T:Context中的单词/标记数量。
  • J:Query中的单词/标记数量。
  • d1:单词嵌入步骤的维度(GloVe)。
  • d2:字符嵌入步骤的维度。
  • d:通过垂直联结单词和字符嵌入而获得的矩阵维度,d=d1+d2。
  • H:上下文嵌入步骤输出的Context矩阵,尺寸为2d-by-T。
  • U:上下文嵌入步骤输出的Query矩阵,尺寸为2d-by-J。

参考:

[1] Bi-Directional Attention Flow for Machine Comprehension (Minjoon Seo et. al, 2017)

https://arxiv.org/abs/1611.01603

[2] Character-Aware Neural Language Models (Yoon Kim et. al, 2015)

https://arxiv.org/abs/1508.06615

如果你对这篇文章有任何疑问/评论或者想联系我,请通过LinkedIn或gmail邮箱meraldo.antonio@gmail.com联系。

原文标题:

Word Embedding, Character Embedding and Contextual Embedding in BiDAF — an Illustrated Guide

原文链接:

https://towardsdatascience.com/the-definitive-guide-to-bidaf-part-2-word-embedding-character-embedding-and-contextual-c151fc4f05bb

译者简介

张玲,在岗数据分析师,计算机硕士毕业。从事数据工作,需要重塑自我的勇气,也需要终生学习的毅力。但我依旧热爱它的严谨,痴迷它的艺术。数据海洋一望无境,数据工作充满挑战。感谢数据派THU提供如此专业的平台,希望在这里能和最专业的你们共同进步!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习算法与Python学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
利用双向注意流进行机器理解
本文基于Bi-Directional Attention Flow For Machine Comprehension一文
Mezereon
2018/09/13
9190
利用双向注意流进行机器理解
问答系统调研
在完成毕业论文(设计)期间的调研工作,主要研究了几个经典的问答系统和机器阅读理解模型。
luxuantao
2021/02/24
1.1K0
卷积神经网络处理自然语言
当我们听到卷积神经网络(Convolutional Neural Network, CNNs)时,往往会联想到计算机视觉。CNNs在图像分类领域做出了巨大贡献,也是当今绝大多数计算机视觉系统的核心技术,从Facebook的图像自动标签到自动驾驶汽车都在使用。 最近我们开始在自然语言处理(Natural Language Processing)领域应用CNNs,并取得了一些引人注目的成果。我将在本文中归纳什么是CNNs,怎样将它们应用于NLP。CNNs背后的直觉知识在计算机视觉的用例里更容易被理解,因此我就先
CSDN技术头条
2018/02/11
9290
卷积神经网络处理自然语言
万字长文概述NLP中的深度学习技术
自然语言处理(NLP)是指对人类语言进行自动分析和表示的计算技术,这种计算技术由一系列理论驱动。NLP 研究从打孔纸带和批处理的时代就开始发展,那时分析一个句子需要多达 7 分钟的时间。到了现在谷歌等的时代,数百万网页可以在不到一秒钟内处理完成。NLP 使计算机能够执行大量自然语言相关的任务,如句子结构解析、词性标注、机器翻译和对话系统等。
机器之心
2019/03/12
1.2K0
万字长文概述NLP中的深度学习技术
[深度学习概念]·理解NLP的卷积神经网络
当我们听说卷积神经网络(CNN)时,我们通常会想到计算机视觉。CNN负责图像分类方面的重大突破,是目前大多数计算机视觉系统的核心,从Facebook的自动照片标签到自动驾驶汽车。
小宋是呢
2019/06/27
1.3K0
[深度学习概念]·理解NLP的卷积神经网络
斯坦福NLP课程 | 第13讲 - 基于上下文的表征与NLP预训练模型(ELMo, transformer)
教程地址:http://www.showmeai.tech/tutorials/36
ShowMeAI
2022/05/16
9210
斯坦福NLP课程 | 第13讲 - 基于上下文的表征与NLP预训练模型(ELMo, transformer)
CNN、GRNN、CLSTM、TD-LSTM/TC-LSTM…你都掌握了吗?一文总结情感分析必备经典模型(一)
本专栏将逐一盘点自然语言处理、计算机视觉等领域下的常见任务,并对在这些任务上取得过 SOTA 的经典模型逐一详解。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。
机器之心
2023/08/07
8970
CNN、GRNN、CLSTM、TD-LSTM/TC-LSTM…你都掌握了吗?一文总结情感分析必备经典模型(一)
NLP教程(8) - NLP中的卷积神经网络
教程地址:http://www.showmeai.tech/tutorials/36
ShowMeAI
2022/05/16
7880
NLP教程(8) - NLP中的卷积神经网络
入门 | CNN也能用于NLP任务,一文简述文本分类任务的7个模型
本文是我之前写过的一篇基于推特数据进行情感分析的文章(https://ahmedbesbes.com/sentiment-analysis-on-twitter-using-word2vec-and-keras.html)的延伸内容。那时我建立了一个简单的模型:基于 keras 训练的两层前馈神经网络。用组成推文的词嵌入的加权平均值作为文档向量来表示输入推文。
机器之心
2018/07/26
1.8K0
入门 | CNN也能用于NLP任务,一文简述文本分类任务的7个模型
python代码实战 | 用 TensorFlow 实现序列标注:基于bi-LSTM+CRF和字符嵌入实现NER和POS
我记得我第一次听说深度学习在自然语言处理(NLP)领域的魔力。 我刚刚与一家年轻的法国创业公司Riminder开始了一个项目,这是我第一次听说字嵌入。 生活中有一些时刻,与新理论的接触似乎使其他一切无关紧要。 听到单词向量编码了单词之间相似性和意义就是这些时刻之一。 当我开始使用这些新概念时,我对模型的简单性感到困惑,构建了我的第一个用于情感分析的递归神经网络。 几个月后,作为法国大学高等理工学院硕士论文的一部分,我正在 Proxem 研究更高级的序列标签模型。
磐创AI
2019/05/05
3.6K0
python代码实战 | 用 TensorFlow 实现序列标注:基于bi-LSTM+CRF和字符嵌入实现NER和POS
序列模型——吴恩达深度学习课程笔记(五)
输入或者输出中包含有序列数据的模型叫做序列模型。以循环神经网络RNN为基础建立的序列模型在自然语言处理,语音识别等领域中引起了巨大的变革。以下是一些序列模型的典型应用:
lyhue1991
2020/07/20
3.1K0
词向量算法「建议收藏」
https://www.cnblogs.com/the-wolf-sky/articles/10192363.html
全栈程序员站长
2022/06/30
9310
词向量算法「建议收藏」
斯坦福NLP课程 | 第10讲 - NLP中的问答系统
教程地址:http://www.showmeai.tech/tutorials/36
ShowMeAI
2022/05/12
7290
斯坦福NLP课程 | 第10讲 - NLP中的问答系统
NLP笔记——NLP概述
在字符上使用 CNN 或 LSTM 以获得基于字符的词表示的做法现在相当普遍,特别是对于形态信息重要或有许多未知单词的丰富的语言和任务,效果更加明显。据我所知,序列标签使用基于字符的表示(Lample 等人,2016;普兰克等人,2016),可以减轻在计算成本增加的情况下必须处理固定词汇表的需要,并支持完全基于字符的 NMT (Ling 等人, 2016;Lee 等人,2017)。
UM_CC
2022/09/22
7270
【数据挖掘】文本挖掘:语义分析的一些方法
语义分析,本文指运用各种机器学习方法,挖掘与学习文本、图片等的深层次概念。 1 文本基本处理 在讲文本语义分析之前,我们先说下文本基本处理,因为它构成了语义分析的基础。而文本处理有很多方面,考虑到本文主题,这里只介绍中文分词以及Term Weighting。 1.1 中文分词 拿到一段文本后,通常情况下,首先要做分词。分词的方法一般有如下几种: 基于字符串匹配的分词方法。此方法按照不同的扫描方式,逐个查找词库进行分词。根据扫描方式可细分为:正向最大匹配,反向最大匹配,双向最大匹配,最小切分(即最短路径);总
陆勤_数据人网
2018/02/27
9.3K0
【数据挖掘】文本挖掘:语义分析的一些方法
【技术白皮书】第三章:文字表格信息抽取模型介绍——实体抽取方法:NER模型(上)
深度学习是一个由多个处理层组成的机器学习领域,用于学习具有多个抽象层次的数据表示。典型的层次是人工神经网络,由前向传递和后向传递组成。正向传递计算来自前一层的输入的加权和,并通过非线性函数传递结果。向后传递是通过导数链规则计算目标函数相对于多层模块堆栈权重的梯度。深度学习的关键优势在于表示学习的能力以及向量表示和神经处理赋予的语义合成能力。这允许机器输入原始数据,并自动发现分类或检测所需的潜在表示和处理。
合合技术团队
2022/08/17
1.3K0
【技术白皮书】第三章:文字表格信息抽取模型介绍——实体抽取方法:NER模型(上)
深度学习教程 | 自然语言处理与词嵌入
本系列为吴恩达老师《深度学习专项课程(Deep Learning Specialization)》学习与总结整理所得,对应的课程视频可以在这里查看。
ShowMeAI
2022/04/15
8010
深度学习教程 | 自然语言处理与词嵌入
使用CNN和Deep Learning Studio进行自然语言处理
当我们听说卷积神经网络(CNN)时,我们通常会想到计算机视觉。从Facebook的自动标记照片到自驾车,CNN使图像分类领域发生重大突破,它是当今大多数计算机视觉系统的核心。
AiTechYun
2018/07/27
7740
使用CNN和Deep Learning Studio进行自然语言处理
【推荐系统论文笔记】DKN: 基于深度知识感知的新闻推荐网络(WWW2018 )
【导读】传统的新闻推荐算法仅仅从语义层对新闻进行表示学习,而忽略了新闻本身包含的知识层面的信息。本文将知识图谱实体嵌入与神经网络相结合,将新闻的语义表示和知识表示融合形成新的embedding表示,以此来进行用户新闻推荐。这种方法考虑了不同层面上的信息,实验证明比传统的方法效果好。 专知成员Xiaowen关于推荐系统相关论文笔记如下: 【AAAI2018】基于注意力机制的交易上下文感知推荐,悉尼科技大学和电子科技大学最新工作 【RecSys2017】基于“翻译”的推荐系统方案,加州大学圣地亚哥分校最新工作(
WZEARW
2018/04/13
5.1K1
【推荐系统论文笔记】DKN: 基于深度知识感知的新闻推荐网络(WWW2018 )
独家 | NAACL19笔记:自然语言处理应用的实用理解(多图解&链接)
继续这个系列文章的第一部分(https://medium.com/orb-engineering/naacl-19-notes-practical-insights-for-natural-language-processing-applications-part-i-5f981c92af80),我们调查了NLP任务中最近的一些重要成果,比如文本相似性、文本分类、序列标注、语言生成。
数据派THU
2019/12/03
6240
独家 | NAACL19笔记:自然语言处理应用的实用理解(多图解&链接)
推荐阅读
相关推荐
利用双向注意流进行机器理解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档