Meraldo Antonio作家吴金笛、林亦霖校正王菁编辑张玲翻译

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

本文要点讲解板滞问答义务中常睹机器进修模子BiDAF是怎样应用单词、字符和上下文3种嵌入机制将单词转化为向量方式,同时包罗单词的句法、语义和上下文新闻的。

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数据派
THU数据派

THU数据派"基于清华,放眼天下",以结实的理工功底闯荡“数据江湖”。发布举世大数据资讯,按期构造线下运动,分享前沿财产动态。了解清华大数据,敬请体恤姐妹号“数据派THU”。

表面板滞问答义务单词嵌入BiDAF
相关数据
权重技能

线性模子中特征的系数,或深度收集中的边。教练线性模子的目标是确定每个特征的抱负权重。假如权重为 0,则相应的特征对模子来说没有任何奉献。

板滞进修技能

板滞进修是人工智能的一个分支,是一门众范畴交叉学科,涉及概率论、统计学、迫近论、凸剖析、盘算繁杂性表面等众门学科。板滞进修表面重假如计划和剖析少许让盘算机可以主动“进修”的算法。因为进修算法中涉及了大宗的统计学表面,板滞进修与推测统计学联络尤为亲密,也被称为统计进修表面。算法计划方面,板滞进修表面体恤可以完成的,卓有用果的进修算法。

GloVe技能

Stanford开辟的用于词向量外示的一个库/东西

词嵌入技能

词嵌入是自然言语处理(NLP)中言语模子与外征进修技能的统称。看法上而言,它是指把一个维数为所有词的数目标高维空间嵌入到一个维数低得众的延续向量空间中,每个单词或词组被映照为实数域上的向量。

最大池化技能

最大池化(max-pooling)即取部分承受域中值最大的点。

神经收集技能

(人工)神经收集是一种根源于 20 世纪 50 年代的监视式板滞进修模子,那时分研讨者念象了「感知器(perceptron)」的念法。这一范畴的研讨者一般被称为「勾结主义者(Connectionist)」,因为这种模子模拟了人脑的功用。神经收集模子一般是通过反向传达算法运用梯度下降教练的。目前神经收集有两大主要类型,它们都是前馈神经收集:卷积神经收集(CNN)和轮回神经收集(RNN),此中 RNN 又包罗好坏期记忆(LSTM)、门控轮回单位(GRU)等等。深度进修是一种主要运用于神经收集帮帮其取得更好结果的技能。尽管神经收集主要用于监视进修,但也有少许为无监视进修计划的变体,比如主动编码器和生成对立收集(GAN)。

卷积神经收集技能

卷积神经网道(Convolutional Neural Network, CNN)是一种前馈神经收集,它的人工神经元可以呼应一部分掩盖范围内的四周单位,关于大型图像处理有精美外现。卷积神经网道由一个或众个卷积层和顶端的全连通层(对应经典的神经网道)构成,同时也包罗联系权重和池化层(pooling layer)。这一构造使得卷积神经网道可以应用输入数据的二维构造。与其他深度进修构造比较,卷积神经网道图像和语音识别方面可以给出更好的结果。这一模子也可以运用反向传达算法举行教练。比较拟其他深度、前馈神经网道,卷积神经网道需求考量的参数更少,使之成为一种颇具吸引力的深度进修构造。 卷积收集是一种特别用于处理具有已知的、网格状拓扑的数据的神经收集。比如时间序列数据,它可以被认为是以必定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

语料库技能

语料库一词言语学上意指大宗的文本,一般颠末拾掇,具有既定样式与标记;终究上,语料库英文 "text corpus" 的涵意即为"body of text"。

逻辑技能

人工智能范畴用逻辑来了解智能推理题目;它可以供应用于剖析编扯蒿言的技能,也可用作剖析、外征常识或编程的东西。目昔人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

盘诘技能

一般来说,盘诘是讯问的一种方式。它差别的学科里涵义有所差别。新闻检索范畴,盘诘指的是数据库和新闻系统对新闻检索的准确请求

前馈神经收集技能

前馈神经收集(FNN)是人工智能范畴中最早发明的简单人工神经收集类型。它内部,参数从输入层颠末隐含层向输出层单向传达。与递归神经收集差别,它内部不会构成有向环。FNN由一个输入层、一个(浅层收集)或众个(深层收集,于是叫作深度进修)躲藏层,和一个输出层构成。每个层(除输出层以外)与下一层连接。这种连接是 FNN 架构的要害,具有两个主要特征:加权平均值和激活函数。

暂无评论
暂无评论~