【论文泛读】Learning Text Similarity with Siamese Recurrent Networks(孪生网络计算文本相似度)

论文链接:https://aclanthology.org/W16-1617.pdf
模型结构:
在这里插入图片描述

输入层

输入特征:对于英文以字母的维度作为输入特征,中文则以字的维度作为输入特征;
截断长度:依据数据集样本长度的分布选取合适的截断长度
输入向量初始化:可以采用xavier_uniform_initializer来初始化embedding向量, 然后加入网络中训练,xavier_uniform_initializer可以使得每一层的方差都尽可能相等, 使网络中的信息更好地流动;也可以使用word2vec、elmo、bert等预训练模型来初始化embedding矩阵,这样可以加快收敛并大大提高模型泛化能力。

siamese-BiLSTM层

采用孪生神经网络,左右两边的每一层网络权重共享。tensorflow中创建网络时使得resue=True即可实现网络权重共享。
将embedding矩阵输入到,四层Bi-LSTM网络,每一层的每个step前向后向拼接作为该step的输出,送入下一层,最终输出每一个step的向量。
tensorflow:

    def model(x, dropout, hidden_units):
        n_layers = 3
        stacked_rnn_fw = []
        stacked_rnn_bw = []
        for _i in range(n_layers):
            fw_cell = tf.nn.rnn_cell.BasicLSTMCell(hidden_units)
            fw_cell = tf.nn.rnn_cell.DropoutWrapper(fw_cell, output_keep_prob=dropout)
            stacked_rnn_fw.append(fw_cell)
        lstm_fw_cell_m = tf.nn.rnn_cell.MultiRNNCell(cells=stacked_rnn_fw, state_is_tuple=True)

        for _i in range(n_layers):
            bw_cell = tf.nn.rnn_cell.BasicLSTMCell(hidden_units)
            bw_cell = tf.nn.rnn_cell.DropoutWrapper(bw_cell, output_keep_prob=dropout)
            stacked_rnn_bw.append(bw_cell)
        lstm_bw_cell_m = tf.nn.rnn_cell.MultiRNNCell(cells=stacked_rnn_bw, state_is_tuple=True)
        outputs, _ = tf.nn.bidirectional_dynamic_rnn(lstm_fw_cell_m, lstm_bw_cell_m, x, dtype=tf.float32)
        return tf.concat(outputs, 2)

然后对每一个步长的输出平均,获得最终的输出向量,送入全连接层,最终输出维度为128的向量。

输出层

输出层采用energy function,也就是余弦函数,计算两向量之间的相似度值,代码如下:

    def cosine(p, h):
        p_norm = tf.norm(p, axis=1, keepdims=True)
        h_norm = tf.norm(h, axis=1, keepdims=True)

        cosine = tf.reduce_sum(tf.multiply(p, h), axis=1, keepdims=True) / (p_norm * h_norm)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值