Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检索最小和最大余弦?_Python_Numpy - Fatal编程技术网

Python 如何检索最小和最大余弦?

Python 如何检索最小和最大余弦?,python,numpy,Python,Numpy,我正在计算两个文本字段之间的余弦相似度,我需要检索得到的最小和最大余弦值 通过这样做: 对于三角图中的t: emb=模型获取句子向量(“”.join(t)) 打印(t,emb[:3]) a=教统局 b=嵌入物 def cos_sim卡(a、b): 点积=np.点(a,b) 范数a=np.linalg.norm(a) 范数b=np.linalg.norm(b) 返回点积/(标准a*标准b) 余弦触发=[(余弦模拟(a,b))] 打印('余弦三角:',余弦三角) 作为输出,我得到了每个三元图的余弦

我正在计算两个文本字段之间的余弦相似度,我需要检索得到的最小和最大余弦值

通过这样做:

对于三角图中的t:
emb=模型获取句子向量(“”.join(t))
打印(t,emb[:3])
a=教统局
b=嵌入物
def cos_sim卡(a、b):
点积=np.点(a,b)
范数a=np.linalg.norm(a)
范数b=np.linalg.norm(b)
返回点积/(标准a*标准b)
余弦触发=[(余弦模拟(a,b))]
打印('余弦三角:',余弦三角)
作为输出,我得到了每个三元图的余弦相似性。例如:


('lastra', 'di', 'tomba') [-0.04048021  0.01067416 -0.00855918]
Cosine trigrams: [0.33791965]
('di', 'tomba', 'intonacata') [ 0.00265847  0.01100874 -0.05969027]
Cosine trigrams: [0.4009857]
('tomba', 'intonacata', 'e') [-0.02288066  0.0349679  -0.0527756 ]
Cosine trigrams: [0.34407777]
('intonacata', 'e', 'dipinta') [0.02718818 0.06673413 0.01361684]
Cosine trigrams: [0.41566172]
如何根据我得到的结果找到最小和最大余弦相似度

我期望的结果是:

('lastra', 'di', 'tomba') [-0.04048021  0.01067416 -0.00855918]
Cosine trigrams: [0.33791965]
('di', 'tomba', 'intonacata') [ 0.00265847  0.01100874 -0.05969027]
Cosine trigrams: [0.4009857]
('tomba', 'intonacata', 'e') [-0.02288066  0.0349679  -0.0527756 ]
Cosine trigrams: [0.34407777]
('intonacata', 'e', 'dipinta') [0.02718818 0.06673413 0.01361684]
Cosine trigrams: [0.41566172]

Min cosine: 0.34407777
Max cosine: 0.41566172
我想通过使用输出创建一个Numpy数组,然后直接在数组中搜索最小值和最大值,但我不确定


谢谢

您不应该在
for
循环中定义该函数。您应该在
for
循环之外定义它。否则你会不断地重新解释它

然后要处理最大/最小值,只需使用变量
max\u cosine\u trig
min\u trig
来保存它们

def cos_sim(a, b):
    dot_product = np.dot(a, b)
    norm_a = np.linalg.norm(a)
    norm_b = np.linalg.norm(b)
    return dot_product / (norm_a * norm_b)

max_cosine_trig = None
min_cosine_trig = None

for t in trigrams:
    emb = model_ft.get_sentence_vector("".join(t))
    print(t, emb[:3])

    a = emb
    b = embeddings_subj

    cosine_trig = [(cos_sim(a, b))]
    print("Cosine trigrams:", cosine_trig)

    if max_cosine_trig is None or max_cosine_trig < cosine_trig:
        max_cosine_trig = cosine_trig

    if min_cosine_trig is None or min_cosine_trig > cosine_trig:
        min_cosine_trig = cosine_trig


print(f"Max cosine trigrams: {max_cosine_trig}")
print(f"Min cosine trigrams: {min_cosine_trig}")
def cos_sim(a、b):
点积=np.点(a,b)
范数a=np.linalg.norm(a)
范数b=np.linalg.norm(b)
返回点积/(标准a*标准b)
最大余弦触发=无
最小余弦触发=无
对于三角图中的t:
emb=模型获取句子向量(“.join(t))
打印(t,emb[:3])
a=教统局
b=嵌入物
余弦触发=[(余弦模拟(a,b))]
打印(“余弦三角:”,余弦三角)
如果最大余弦触发为无或最大余弦触发<余弦触发:
最大余弦触发=余弦触发
如果最小余弦触发为无或最小余弦触发>余弦触发:
最小余弦触发=余弦触发
打印(f“最大余弦三角图:{Max_余弦三角图}”)
打印(f“最小余弦三角图:{Min_余弦三角图}”)

你有没有试着做你在上一段中写的事情?