论文研读 一 A Joint Model of Intent Determination and Slot Filling for Spoken Language Understanding |...

由于个人习惯,系统设计、nlp任务,会从 `五个步骤、四个组件`来分析:

系统设计五个步骤:

1. 数据预处理

2. 模型

3. 策略

4. 优化(算法)

5. 正则化

NLP模型四个组件:

1. Embedding

2. Representation(encoder)

3. Decoder

4. Output

任何论文在以上五个步骤、四个组件中任何一环节有卓越设计之处,我都希望能有机会好好学习研读,同大家分享。侵权必删。

Paper: A Joint Model of Intent Determination and Slot Filling for Spoken Language Understanding;

Task: JointTextTask;

一、Paper综述

该文章为针对SLU(Spoken Language Understanding)的意图-槽填充联合模型,文章的出色之处在于提供了一个同时在文本分类和文本标记两个nlp基本任务中都取得卓越成绩的基于RNNs的联合模型。

对于SLU(即语义理解)来说,一般有两项主要任务:意图识别(Intent determination,即文本分类)和槽填充(slot filling,即文本标记)。循环神经网络(RNNs),在文本分类任务中被证明可取得较好的结果。由于意图识别和槽填充有相当的联系,所以论文作者提出一个适合于两种任务的联合模型。

GRU具有随着时序学习每个词(token)的表征的特性,通过这个特性可以预测每个插槽,同时,一个max-pooling层可以捕捉句子的全局特征从而实现意图识别。GRU捕捉到的每个token的特征和max-pooling层捕捉的句子全局特征是被两个任务所共享的,譬如,假如一句话的意图是找到一个航班,那么他更有可能有出发以及目的城市,反之亦然。实验证明了联合模型比分开的每个模型效果都要更好一些。文章选用了United loss function作为策略,实验结果证明了该篇论文在两个任务中都取得了state-of-the-art的结果。


二、模型解释

模型的整体框架如下图所示,现在具体解释每一层的作用。


1. `Embeddings`

文章使用了预训练的词向量模型,并且加入了Mesnil et al.[2015]提出的context word window的想法,后者可以有效提高SF任务的表现,即除了使用词向量e(w_{t} )表征每个单词,使用d-context word window x_{t}^d 来作为RNNs网络的时序输入,x_{t}^d 由单词w_t的前d个、后d个和其本身一共2d+1个词向量表示而成,如下:

                                       x_t^{d} = [ e(w_{t-d}), ... e(w_t), ... e(w_{t+d})]                       (1)                                 

命名实体NER对SLU来说是一个非常重要的特征,为了使用这个特征,原文赋予每个命名实体一个置于[0, 1]的一个embedding,维度和词向量一样,并使之能在反向传播时进行训练,context named window如同上面定义context word window一样。所以,最后每个时序t的输入表示为:

                                      x_t^d = [e(w_{t-d}), ... e(w_t), ... e(w_{t+d}),

                                                   e^{\prime}(w_{t-c}), ... e^{\prime}(w_t), ... e^{\prime}(w_{t+c})]                    (2)

注意,word和ner的窗口并不一定一样。

观察Pytext的model参数可以发现WordEmbedding的参数,其中,Embedding(820, 100)中的820代表输入文本单词总种类数vocabulary_size,100代表词向量的维数dimenstion_word2vec。

2. `Recurrent Hidden Layers`

即`Representation`,表示层,这里不再赘述Lstm和Gru的推导证明过程了,原文使用Gru的原因是,Gru使用了比Lstm更少的参数,但是得到了相当的结果。

这里使用了一个双向GRU的网络,用以捕捉一个d-gram的前向和反向序列的特征编码,前向\vec{h} 和反向\overleftarrow{h}分别定义如下:

                                                    \vec{h}_t = \vec{GRU}(x_t, \vec{h}_{t-1})                                          (3)

                                                   \overleftarrow{h}_t  = \overleftarrow{GRU}(x_t, \overleftarrow{h}_{t+1})                                       (4)

而t时刻的双向隐层状态\overleftrightarrow{h}是前向和反向隐层状态的拼接:

                                                            \overleftrightarrow{h} = [\overrightarrow{h}, \overleftarrow{h}]                                                  (5)

观察Pytext的model参数可以发现Representation的参数,可以发现双向LSTM的uniLSTM的输入和输出维数分别是100和366,通过将两个uniLSTM拼接起来,即可得到每个时序t的隐藏层\overleftrightarrow{h},维数为732,假设一共有n个word,那么则有n个732维的向量来作为word级的表征。这里使用了SelfAttention而不是MaxPooling来作为网络的Pooling层(本人感觉Pooling层的定义在nlp领域现在逐渐发展为一种为数据降维或者连接各个部分得到语句统一表示的一种方法)以捕获句子级表征。

3. `Task Specific Layers`

双向隐层状态被两个任务所共用。一方面,\overleftrightarrow{h}在每个时序捕捉到的特征可以直接用来预测插槽的标签Label,另一方面,我们用max-pooling层来得到整个句子的表示:

                                                            h^u = \max^{T}_{t = 1} \overleftrightarrow{h}_t                                               (6)

这样我们即可得到整句话的特征信息表示。

最后,即是`Output` layer:

                                               y_t^s = softmax(W^s\overleftrightarrow{h}_t + b^s)                                (7)

                                               y^u = softmax(W^uh^u + b^u)                                (8)

其中,W^sW^u分别是SF和ID任务的转移矩阵,b_t^sb^u分别是偏置向量。像序列标注和文本分类的任务不需要单独一个`Decoder` layers,或者说,解码和输出是同时进行的,如Pytext调用该模型时:


4. 策略

即目标函数的定义。事实上,目标函数的定义,作者希望能够考虑到从一个标签到另一个标签的转移分数(A_{i,j},in [Chen et al., 2015]),即从B-City到I-City的概率应该远比B-City到B-City的概率要大,所以,对于一个标签序列l_{1:T},一句话的分数由下面式子给出:

                                               s(l_{1:T}, \theta ) = \Sigma_{t=1}^{T}(A_{l_{t-1}}l_t+y_t^s(l_t))                      (9)

其中,y_t^s(l_t)是在t时刻预测正确的概率,即式(7)。特别注意的是,在t_0时刻,标签为"BOS"。最后要输出的序列是得分最高的那组序列,即:

                                                        \hat{l^s} = argmax_{l^s \in L} s(l^s, \theta )                              (10)

所以要训练的网络中参数\theta 包括:

                                \theta = \left\{ E, E^{\prime}, \overrightarrow{GRU_{\theta}}, \overleftarrow{GRU_{\theta}}, W^s, b^s, W^u, b^u, A\right\}         (11)

其中,E和E'分别是单词token和命名实体ner的词嵌入,\overrightarrow{GRU_\theta }\overleftarrow{GRU_\theta }分别是正向神经网络和反向神经网络的参数群。

接来下定义网络的损失函数,使用S来表示输入语句,l^sl^u分别表示插槽slot和意图intent的ground truth。意图的损失函数是:

                                                          L^u(\theta) = -logy^u(l^u)                                   (12)

插槽slot的损失函数是max-margin(hinge loss):

                                                  \Delta (l^s,\hat{l^s} ) =\Sigma _{t=1}^{T}1\{l_t^s\neq \hat{l_t^s}\}                               (13)

对整个标签序列来说,损失函数定义如下:

                                    L^s(\theta )=max(0, s(\hat{l^s}, \theta )+\Delta (l^s, \hat{l^s}) - s(l^s, \theta ))       (14)

最后的训练目标是最小化一个统一的损失函数:

                                               L(\theta)=\Sigma _{l^s, l^u, S\in D}(\alpha L^s(\theta) + L^u(\theta))                 (15)

\alpha 是平衡两个任务的一个权重,D是整个数据集。通过这个损失函数,由GRU学到的表征可以同时考虑两个任务,并且,两个任务的联系使得表征可以同时被学习并且彼此提升。


三、实验分析

3.1. 数据集

ATIS dataset

ATIS是SLU领域中使用最广的数据集。

CQUD dataset

CQUD是百度知道搜集到的问题,是中文社区最受欢迎的Question Understanding Dataset.


3.2. 与之前的方法进行对比

实验结果展示如下,第二列是每个方法使用的特征,其中,W,N和S分别代表单词、命名实体和语义特征,在CQUD数据集中,W代表每一个中文字特征表示。

可以看到CRF的结果比SVM好,表明CRF更加适合序列标注任务。另外,RNN打败了CRF,因为RNN可以捕捉长依赖关系。而R-CRF模型结合了RNN和CRF模型的优点,可以模拟标签转移(本人以为这是指RNN加了CRF模型是可以避免一些大概率不存在的序列情况)和得到整个序列的全局的优点。对于填槽任务来说,sentence simplification是最好的办法,它使用了依存分析来提取句中关键词。RecNN使用dl提取的语义信息,但是他的效果比sentence simplification更差,作者认为可能的原因是语料的规模不够大。总的来说,论文在ID和SF领域分别提升了1.59%和1.24%的准确率。


3.3. 联合模型和分开的模型的对比

Joint Model根据\alpha 不同有相应不同的表现,如下图所示:

论文地址https://www.ijcai.org/Proceedings/16/Papers/425.pdf

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容