我一直在遵循一个教程,该教程显示了如何制作word2vec模型。
本教程使用以下代码:
similarity = merge([target, context], mode='cos', dot_axes=0)
(未提供其他信息,但我想这来自keras.layers
)
现在,我已经对该merge
方法进行了一些研究,但对此却知之甚少。据我了解,它已被许多功能取代layers.Add(), layers.Concat()...
。
我应该使用什么?有.Dot()
,它有一个axis
参数(似乎正确),但没有mode
参数。
在这种情况下我可以使用什么?
Keras文档中有一些尚不清楚的事情,我认为了解这些至关重要:
对于keras文档中的每个函数Merge
,都有一个小写和一个大写的定义,即add()
和Add()
。
在Github上,farizrahman4u
概述了不同之处:
Merge is a layer.
Merge takes layers as input
Merge is usually used with Sequential models
merge is a function.
merge takes tensors as input.
merge is a wrapper around Merge.
merge is used in Functional API
Using Merge:
left = Sequential()
left.add(...)
left.add(...)
right = Sequential()
right.add(...)
right.add(...)
model = Sequential()
model.add(Merge([left, right]))
model.add(...)
using merge:
a = Input((10,))
b = Dense(10)(a)
c = Dense(10)(a)
d = merge([b, c])
model = Model(a, d)
要回答您的问题,由于Merge
已弃用,因此我们必须为自己定义和构建一个层cosine similarity
。通常,这将涉及使用小写的函数,将它们包装在a中Lambda
以创建可在模型中使用的层。
我在这里找到了解决方案:
from keras import backend as K
def cosine_distance(vests):
x, y = vests
x = K.l2_normalize(x, axis=-1)
y = K.l2_normalize(y, axis=-1)
return -K.mean(x * y, axis=-1, keepdims=True)
def cos_dist_output_shape(shapes):
shape1, shape2 = shapes
return (shape1[0],1)
distance = Lambda(cosine_distance, output_shape=cos_dist_output_shape)([processed_a, processed_b]
根据您的数据,您可能需要删除L2规范化。关于该解决方案要注意的重要一点是,它是使用Keras函数api构建的,例如K.mean()
-我认为在定义自定义层甚至损失函数时这是必需的。
希望我清楚,这是我的第一个SO答案!
问题内容: 我有两个标准化张量,我需要计算这些张量之间的余弦相似度。如何使用TensorFlow做到这一点? 问题答案: 这将完成工作: 此打印
问题内容: 如何找到向量之间的余弦相似度? 我需要找到相似性来衡量两行文本之间的相关性。 例如,我有两个句子: 用户界面系统 用户界面机 …及其在tF-idf之后的向量,然后使用LSI进行标准化,例如 和。 如何测量这些向量之间的相似性? 问题答案: 我最近在大学的信息检索部门做了一些tf-idf的工作。我使用了这种余弦相似度方法,该方法使用Jama:Java Matrix Package 。 有
问题内容: 假设您在数据库中按以下方式构造了一个表: 为了清楚起见,应输出: 请注意,由于向量存储在数据库中,因此我们仅需要存储非零条目。在此示例中,我们只有两个向量$ v_ {99} =(4,3,4,0)$和$ v_ {1234} =(0,5,2,3)$都在$ \ mathbb {R}中^ 4 $。 这些向量的余弦相似度应为$ \ displaystyle \ frac {23} {\ sqrt
问题内容: 我有一个数据集,其中包含工人及其年龄,性别,地址等人口统计信息及其工作地点。我从数据集创建了一个RDD,并将其转换为DataFrame。 每个ID有多个条目。因此,我创建了一个DataFrame,其中仅包含工人的ID和他/她工作过的各个办公室位置。 我想根据他们的办公地点来计算每个工人与其他每个工人之间的余弦相似度。 因此,我遍历了DataFrame的各行,从DataFrame检索了一
问题内容: 我计算了两个文档的tf / idf值。以下是tf / idf值: 这些文件就像: 如何使用这些值来计算余弦相似度? 我知道我应该计算点积,然后找到距离并除以点积。如何使用我的值来计算? 还有一个问题: 两个文档的字数相同是否重要? 问题答案: a * b是点积 一些细节: 是。在某种程度上,a和b必须具有相同的长度。但是a和b通常具有稀疏表示,您只需要存储非零条目,就可以更快地计算范数
我有一个PySpark数据帧,df1,看起来像: 我有第二个PySpark数据帧,df2 我想得到两个数据帧的余弦相似性。并有类似的东西