You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas对CSV中OpenAI Embedding按相似度排序报错,求解决方案

嵌入向量余弦相似度计算错误的解决方法

问题背景

构建基于ChatGPT的嵌入搜索模型时,将问题转为向量后,与CSV中维基百科文章的OpenAI Embedding向量计算余弦相似度时触发错误。代码如下:

input_datapath = "data/wiki_data_embeddings.csv"
df = pd.read_csv(input_datapath)

question = "What temperature is a high fever?"
question_vector = get_embedding(question, engine=embedding_model)

df["similarities"] = df['embedding'].apply(lambda x: cosine_similarity(x, question_vector))
df = df.sort_values("similarities", ascending=False).head(5)
print(df)

错误信息:

numpy.core._exceptions._UFuncNoLoopError: ufunc 'multiply' did not contain a loop with signature matching types (dtype('<U34386'), dtype('<U23')) -> None

错误原因

错误中的dtype('<U34386')和dtype('<U23')表明,CSV里的embedding列存储的是字符串类型,而非数值型的向量数组。cosine_similarity无法对字符串执行数值运算,因此触发报错。

解决步骤

  1. 解析字符串向量为数值数组
    读取CSV后,将字符串形式的向量转换为可计算的数值数组,使用ast.literal_eval解析字符串:

    import ast
    import numpy as np
    import pandas as pd
    from sklearn.metrics.pairwise import cosine_similarity
    
    input_datapath = "data/wiki_data_embeddings.csv"
    df = pd.read_csv(input_datapath)
    
    # 把字符串向量转为Python列表,再转为numpy数组
    df['embedding'] = df['embedding'].apply(lambda x: np.array(ast.literal_eval(x)))
    
  2. 调整余弦相似度计算逻辑
    cosine_similarity要求输入为二维数组,需将单个向量reshape为(1, n)的格式:

    question = "What temperature is a high fever?"
    question_vector = get_embedding(question, engine=embedding_model)
    # 将问题向量转为二维数组
    question_vector = np.array(question_vector).reshape(1, -1)
    
    # 计算每个向量与问题向量的相似度
    df["similarities"] = df['embedding'].apply(
        lambda x: cosine_similarity(x.reshape(1, -1), question_vector)[0][0]
    )
    df = df.sort_values("similarities", ascending=False).head(5)
    print(df)
    
  3. 验证数据格式
    处理后可检查embedding列的类型,确认已转为数值型:

    print(df['embedding'].iloc[0].dtype)
    

    正常输出应为float64类的数值类型。

额外优化建议

  • 保存嵌入向量时,优先使用numpy专用格式(如.npy)或序列化格式(如pickle),避免CSV存储字符串带来的解析问题。
  • 如果CSV中的向量字符串存在格式错误(如括号不匹配),ast.literal_eval会触发报错,需先清理数据格式。

内容的提问来源于stack exchange,提问作者Jared Watson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:45:41