标签: cosine-similarity

有人可以用一种非常简单的图形方式给出余弦相似性的例子吗?

维基百科上的Cosine Similarity文章

你能在这里(列表或其他东西)显示向量然后进行数学运算,让我们看看它是如何工作的?

我是初学者.

text data-mining cosine-similarity

190
推荐指数
7
解决办法
14万
查看次数

2个数字列表之间的余弦相似度

我需要计算两个列表之间的余弦相似度,比如列表1,列表2是.我不能使用numpy或统计模块等任何东西.我必须使用通用模块(数学等)(尽可能使用最少的模块,以减少花费的时间).dataSetIdataSetII

比方说,dataSetI[3, 45, 7, 2]dataSetII[2, 54, 13, 15].列表的长度始终相等.

当然,余弦相似度在0和1之间,并且为了它,它将四舍五入到第三或第四个十进制数format(round(cosine, 3)).

非常感谢您提前帮助.

python python-3.x cosine-similarity

101
推荐指数
9
解决办法
21万
查看次数

给出2个句子字符串计算余弦相似度

Python:tf-idf-cosine:为了找到文档相似性,可以使用tf-idf余弦计算文档相似度.没有导入外部库,是否有任何方法可以计算2个字符串之间的余弦相似度?

s1 = "This is a foo bar sentence ."
s2 = "This sentence is similar to a foo bar sentence ."
s3 = "What is this string ? Totally not related to the other two lines ."

cosine_sim(s1, s2) # Should give high cosine similarity
cosine_sim(s1, s3) # Shouldn't give high cosine similarity value
cosine_sim(s2, s3) # Shouldn't give high cosine similarity value
Run Code Online (Sandbox Code Playgroud)

python string nlp similarity cosine-similarity

69
推荐指数
3
解决办法
9万
查看次数

在稀疏矩阵数据的情况下,Python中最快的计算余弦相似度的方法是什么?

给定稀疏矩阵列表,计算矩阵中每列(或行)之间的余弦相似度的最佳方法是什么?我宁愿不迭代n次选择两次.

说输入矩阵是:

A= 
[0 1 0 0 1
 0 0 1 1 1
 1 1 0 1 0]
Run Code Online (Sandbox Code Playgroud)

稀疏表示是:

A = 
0, 1
0, 4
1, 2
1, 3
1, 4
2, 0
2, 1
2, 3
Run Code Online (Sandbox Code Playgroud)

在Python中,使用矩阵输入格式很简单:

import numpy as np
from sklearn.metrics import pairwise_distances
from scipy.spatial.distance import cosine

A = np.array(
[[0, 1, 0, 0, 1],
[0, 0, 1, 1, 1],
[1, 1, 0, 1, 0]])

dist_out = 1-pairwise_distances(A, metric="cosine")
dist_out
Run Code Online (Sandbox Code Playgroud)

得到:

array([[ 1.        ,  0.40824829,  0.40824829],
       [ …
Run Code Online (Sandbox Code Playgroud)

python numpy similarity pandas cosine-similarity

52
推荐指数
4
解决办法
8万
查看次数

余弦相似度和tf-idf

我对以下关于TF-IDFCosine Similarity的评论感到困惑.

我正在读取两个,然后在维基相似性下的维基上我发现这句话"在信息检索的情况下,两个文档的余弦相似度将在0到1的范围内,因为术语频率(tf-idf权重)不能两个术语频率向量之间的角度不能大于90."

现在我想知道......他们不是两件不同的东西吗?

tf-idf已经在余弦相似之内吗?如果是,那么到底是什么 - 我只能看到内点产品和欧几里德长度.

我认为tf-idf是你在文本上运行余弦相似之前可以做的事情.我错过了什么?

information-retrieval tf-idf vsm cosine-similarity

31
推荐指数
3
解决办法
4万
查看次数

如何使用来自 BERT 的嵌入来比较句子的相似性

我正在使用 HuggingFace Transformers 包来访问预训练模型。由于我的用例需要英语和阿拉伯语的功能,因此我使用了bert-base-multilingual- cased 预训练模型。我需要能够使用诸如余弦相似度之类的东西来比较句子的相似度。要使用它,我首先需要为每个句子获取一个嵌入向量,然后可以计算余弦相似度。

首先,从 BERT 模型中提取语义嵌入的最佳方法是什么?在输入句子后获取模型的最后一个隐藏状态就足够了吗?

import torch
from transformers import BertModel, BertTokenizer

model_class = BertModel
tokenizer_class = BertTokenizer
pretrained_weights = 'bert-base-multilingual-cased'

tokenizer = tokenizer_class.from_pretrained(pretrained_weights)
model = model_class.from_pretrained(pretrained_weights)

sentence = 'this is a test sentence'

input_ids = torch.tensor([tokenizer.encode(sentence, add_special_tokens=True)])
with torch.no_grad():
    output_tuple = model(input_ids)
    last_hidden_states = output_tuple[0]

print(last_hidden_states.size(), last_hidden_states)
Run Code Online (Sandbox Code Playgroud)

其次,如果这是从我的句子中获得嵌入的充分方法,我现在还有另一个问题,即嵌入向量的长度取决于原始句子的长度。形状输出是[1, n, vocab_size],其中n可以有任何值。

为了计算两个向量的余弦相似度,它们需要具有相同的长度。我怎么能在这里做到这一点?像第一次求和这样幼稚的事情axis=1还能奏效吗?我还有什么其他选择?

python nlp vector cosine-similarity huggingface-transformers

20
推荐指数
3
解决办法
9332
查看次数

余弦距离作为k均值的向量距离函数

我有一个N个顶点的图形,其中每个顶点代表一个地方.此外,我有一个向量,每个用户一个,N个系数中的每一个,其中系数的值是在相应位置花费的持续时间(秒),如果没有访问该位置,则为0.

例如图表:

示例图

向量:

v1 = {100, 50, 0 30, 0}
Run Code Online (Sandbox Code Playgroud)

意味着我们花了:

100secs at vertex 1
50secs at vertex 2 and 
30secs at vertex 4 
Run Code Online (Sandbox Code Playgroud)

(未访问的顶点3和5,因此为0).

我想运行k-means聚类,我选择cosine_distance = 1 - cosine_similarity了距离的度量,其公式为cosine_similarity:

余弦模拟公式

作为描述在这里.

但我注意到以下情况.假设k=2其中一个向量是:

v1 = {90,0,0,0,0}
Run Code Online (Sandbox Code Playgroud)

在解决最小化候选质心总距离的优化问题的过程中,假设在某一点上,2个候选质心是:

c1 = {90,90,90,90,90}
c2 = {1000, 1000, 1000, 1000, 1000}
Run Code Online (Sandbox Code Playgroud)

运行cosine_distance(v1,c1)和(v1,c2)的公式,我们得到0.5527864045两者的距离完全相同.

我认为v1比c2更接近c1更接近(更接近).显然事实并非如此.

Q1.为什么这个假设错了?

Q2.在这种情况下,余弦距离是否是正确的距离函数?

Q3.考虑到问题的本质,什么会更好?

cluster-analysis distance data-mining k-means cosine-similarity

13
推荐指数
1
解决办法
7168
查看次数

余弦相似度和余弦距离的区别

它看起来像 scipy.spatial.distance.cdist 余弦相似距离:

链接到 cos 距离 1

1 - u*v/(||u||||v||)
Run Code Online (Sandbox Code Playgroud)

与 sklearn.metrics.pairwise.cosine_similarity 不同,后者是

cos相似度2的链接

 u*v/||u||||v||
Run Code Online (Sandbox Code Playgroud)

有人知道不同定义的原因吗?

python scipy cosine-similarity scikit-learn

12
推荐指数
1
解决办法
9263
查看次数

Apache Spark Python Cosine与DataFrames的相似性

对于推荐系统,我需要计算整个Spark DataFrame的所有列之间的余弦相似度.

在熊猫我曾经这样做过:

import sklearn.metrics as metrics
import pandas as pd

df= pd.DataFrame(...some dataframe over here :D ...)
metrics.pairwise.cosine_similarity(df.T,df.T)
Run Code Online (Sandbox Code Playgroud)

这会在列之间生成相似矩阵(因为我使用了转置)

有没有办法在Spark(Python)中做同样的事情?

(我需要将它应用于由数千万行和数千列组成的矩阵,这就是我需要在Spark中执行此操作的原因)

python cosine-similarity apache-spark apache-spark-sql pyspark

11
推荐指数
1
解决办法
5702
查看次数

具有余弦相似性的聚类

我有一个大型数据集,我想集群.我的试运行集大小是2,500个对象; 当我在'真正的交易'上运行时,我将需要处理至少20k的对象.

这些对象之间具有余弦相似性.该余弦相似性不满足作为数学距离度量的要求; 它不满足三角不等式.

我想以一种"自然"的方式将它们聚类在一起,将类似的对象放在一起,而不需要事先指定我期望的簇数.

有谁知道会这样做的算法?真的,我只是在寻找不需要a)距离度量和b)预先指定数量的簇的任何算法.

非常感谢!

这里之前已经提出过这个问题: 从余弦相似度值聚类 (但这个解决方案只提供K均值聚类),这里: 相似度矩阵的有效聚类 (但这个解决方案相当含糊)

cluster-analysis machine-learning distance cosine-similarity

10
推荐指数
1
解决办法
1万
查看次数