知识库中相同文本块的不同相似度分数

我有一个关于 Dify 知识库向量搜索行为的问题。

问题

  • 在搜索测试中,我使用查询 “mac”
  • 搜索结果包含多个文本完全相同的块(chunk)
  • 然而,这些块的**相似度分数(SCORE)**却不同

示例:

  • 相同文本:

    “Macの場合はマウスの支給をしません。各自で調達してください。”
    (“For Mac, a mouse is not provided. Please prepare one yourself.”)
    (“对于 Mac,不提供鼠标。请自行准备。”)

  • 但分数不同,例如:

    • SCORE: 0.26
    • SCORE: 0.19

(请参阅附带的截图)

问题

我想了解为什么会发生这种情况。

  • 相同文本块是否预期会因以下原因而具有不同的相似度分数:

    • 存储在不同的文档中
    • 不同的块 ID 或摄取顺序
    • 元数据(文档标题、文件夹、描述等)的差异
    • 文本分块时不同的周围上下文
  • 或者这可能与以下因素有关:

    • 嵌入时间 / 重新嵌入行为
    • 向量数据库实现细节

假设 / 环境

  • 块文本本身是完全相同的字符串
  • 搜索类型是向量搜索(而非关键词搜索)
  • 未明确配置相似度阈值

目的

我想澄清以下问题:

  • “相同文本通常应导致相同的相似度分数”,还是
  • “Dify 中相同文本存在一定程度的分数差异是预期行为”

如果有人遇到过类似的行为或了解底层设计/规范,我将非常感谢您的见解。


您好,如果块内的文本相同,那么可以合理地预期它们将具有相同的向量。

我想了解一下您的环境。您使用的是 Dify Cloud,还是自托管 Dify?您使用的是哪个嵌入模型(embedding model)?如果您是自托管,您使用的是哪个 Dify 版本和哪个向量数据库?

此外,似乎另一个帖子表现出反直觉的行为。

由于我无法在我的环境中重现这个问题,您的向量数据库中的数据可能存在某种不一致。
您能否尝试从头开始创建一个新的知识库,上传相同文档,然后看看问题是否仍然存在?

1 个赞

嗨,感谢您的详细回复。

我同意,如果分块(chunks)中的文本完全相同,那么生成的向量(vectors)也应该相同。

以下是关于我的环境的更多背景信息:

  • 我正在自托管 Dify。

  • Dify 版本:1.11.4

  • 嵌入模型(Embedding model):amazon.titan-embed-text-v2:0

  • 向量数据库(Vector database):Weaviate(默认配置)

正如您所建议的,我将尝试以下方法来验证该行为:

  • 从头开始创建一个新的知识库(knowledge base)

  • 上传相同的文件

  • 检查问题是否仍然存在

如果在新知识库中问题没有出现,这可能表明原始环境中存在一些不一致。

再次感谢您的建议——我测试完后会向您汇报。