使用TensorFlow实现余弦距离/欧氏距离(Euclidean distance)以及Attention矩阵的计算

最近在使用tensorflow完成句子相似度建模等任务时常常会用到各种距离的计算,而且有很多论文提出了Attention机制,所以这里就介绍一下如何使用tensorflow实现上述各种功能。 这里首先假定我们的输入是两个四维的Tensor,然后我们需要计算的是其中某个维度的距离。比如说我们的输入是batch个句子,句长是sent_len, 每个词被表示成embed_size的词向量。所以我们的输入
摘要由CSDN通过智能技术生成

最近在使用tensorflow完成句子相似度建模等任务时常常会用到各种距离的计算,而且有很多论文提出了Attention机制,所以这里就介绍一下如何使用tensorflow实现上述各种功能。
这里首先假定我们的输入是两个四维的Tensor,然后我们需要计算的是其中某个维度的距离。比如说我们的输入是batch个句子,句长是sent_len, 每个词被表示成embed_size的词向量。所以我们的输入就是一个[batch_size, sent_len, embed_size, 1]的Tensor,需要计算的就是两个句子的Attention矩阵。Aij表示句子1中第i个单词和句子2中第j个单词的距离(余弦距离,欧氏距离,L1距离等),也就是计算两个长度为embed_size的向量之间的距离。
为了方便表示和调试,我们这里使用shape为[2,3,4,1]的Tensor来表示上述句子。

1,Euclidean distance

欧氏距离很简单,以向量为例(x1, x2, x3,….,xn),(y1, y2, y3,….,yn),那么其欧氏距离的计算公式如下图所示:
这里写图片描述
在tensorflow中如何实现呢,代码如下:

import tensorflow as tf

x3 = tf.constant([[[[1], [2], [3], [4]],
                   [[5], [6], [7], [8]],
                   [[9], [10], [11], [12]]],

                  [[[1], [2], [3], [4]],
                   [[5], [6], [7], [8]],
                   [[9], [10], [11], [12]]]], tf.float32)

x4 = tf.constant([[[[3], [4], [1], [2]],
                   [[5], [7], [8], [6]],
                   [[9], [12], [11], [10]]],

                  [[[1], [2], [3], [4]],
                   [[5], [6], [7], [8]],
                   [[9], [10], [11], [12]]]], tf.float32)

with tf.Session() as sess:
    dis = sess.run(tf.square(x3-x4))
    dis1 = sess.run(tf.reduce_sum(tf.square(x3-x4), 2
  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值