根据slot和intent之间的关系,提出了一种slot gate来学习intent和slot向量之间的关系,通过全局优化来获得更好地语义信息。
由于slot通常高度依赖于intent,因此本工作重点介绍如何通过引入slot gate来建模slot和intent向量之间的显式关系:
模型架构图。
可以看出,该模型主要是将单词序列输入一个双向的LSTM中
state_outputs, final_state = tf.nn.bidirectional_dynamic_rnn(cell_fw,
cell_bw,
inputs,
sequence_length=sequence_length,
dtype=tf.float32)
对于输出部分,将其通过两种方式进行拼接,分别作为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)
然后是attention的部分,这里使用了一层卷积来实现注意力机制.
hidden_features = tf.nn.conv2d(hidden_conv, k, [1, 1, 1, 1], "SAME")
hidden_features = tf.reshape(hidden_features, origin_shape)
接下来是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
virtualenv -p /usr/bin/python3.5 tensorflow-py3.5
source tensorflow-py3.5/bin/activate
参考博客:python虚拟环境–virtualenv
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来运行程序了。
注意1.4版本的一些函数与1.14版本不兼容,修改后再跑代码,具体如下:
# 源代码
from tensorflow.python.ops import rnn_cell_impl
y = rnn_cell_impl._linear(slot_inputs, attn_size, True)
替换为:
from tensorflow.contrib.rnn.python.ops.core_rnn_cell import _linear
y = _linear(slot_inputs, attn_size, True)