【论文阅读】Slot-Gated Modeling for Joint Slot Filling and Intent Prediction
文章目录
-
-
论文部分
-
- Abstract
- Introduction
- Proposed Approach
-
实验部分
-
论文部分
Abstract
根据slot和intent之间的关系,提出了一种slot gate来学习intent和slot向量之间的关系,通过全局优化来获得更好地语义信息。
Introduction
由于slot通常高度依赖于intent,因此本工作重点介绍如何通过引入slot gate来建模slot和intent向量之间的显式关系:
- slot gated模型效果比基于注意力的模型具有更好的性能;
- 对两个SLU数据集的实验表明了所提出的slot gate的推广和有效性;
- gating表示有助于我们学习 slot-intent 之间的关系。
Proposed Approach
模型架构图。

可以看出,该模型主要是将单词序列输入一个双向的LSTM中
state_outputs, final_state = tf.nn.bidirectional_dynamic_rnn(cell_fw,
cell_bw,
inputs,
sequence_length=sequence_length,
dtype=tf.float32)
AI写代码python
运行
对于输出部分,将其通过两种方式进行拼接,分别作为slot和intent attention层的输入:
# final_state size : [batch_size, 4 * layer_size],作为intent_attention的输入
final_state = tf.concat([final_state[0][0], final_state[0][1],
final_state[1][0], final_state[1][1]], 1)
# state_outputs size : [batch_size, sequence_length, 2 * layer_size],作为slot_attention的输入
state_outputs = tf.concat([state_outputs[0], state_outputs[1]], 2)
AI写代码python
运行
然后是attention的部分,这里使用了一层卷积来实现注意力机制.
hidden_features = tf.nn.conv2d(hidden_conv, k, [1, 1, 1, 1], "SAME")
hidden_features = tf.reshape(hidden_features, origin_shape)
AI写代码python
运行
接下来是slot-gated的概念
intent_gate = _linear(intent_output, attn_size, True)
intent_gate = tf.reshape(intent_gate, [-1, 1, intent_gate.get_shape()[1].value])
实验部分
代码下载:SlotGated-SLU
环境要求:
python3.5 + tensorflow1.4
环境配置:
* **安装虚拟环境** :
安装虚拟环境
pip install virtualenv
在当前目录下,创建虚拟环境目录,并指定python解释器。
virtualenv -p /usr/bin/python3.5 tensorflow-py3.5
激活虚拟环境
source tensorflow-py3.5/bin/activate
激活之后可以看到:
tensorflow下载安装 :可以使用清华大学提供的镜像,选择相应的计算单元、操作系统、python版本、tensorflow版本进行下载安装,会自动生成安装命令。
(已弃用的方法)
清华大学tensorflow镜像
我使用的安装命令:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ https://mirrors.tuna.tsinghua.edu.cn/tensorflow/linux/cpu/tensorflow-1.4.0-cp35-cp35m-linux_x86_64.whl
- 安装完毕之后就可以根据readme里的Usage来运行程序了。
- 使用tensorflow1.14
注意1.4版本的一些函数与1.14版本不兼容,修改后再跑代码,具体如下:
# 源代码
from tensorflow.python.ops import rnn_cell_impl
y = rnn_cell_impl._linear(slot_inputs, attn_size, True)
AI写代码python
运行
替换为:
from tensorflow.contrib.rnn.python.ops.core_rnn_cell import _linear
y = _linear(slot_inputs, attn_size, True)
AI写代码python
运行
