我们使用 azure 认知搜索作为向量数据库,我们使用 azure open ai Ada02 模型为查询和文档(RAG 模式)生成嵌入。
我们观察到同一问题在使用和不使用 ? 的情况下会产生不同的结果。 (问号)
- 什么是 Jade 米?
- 什么是 Jade 米
- 什么是 Jade 米?
问题
- “?”的影响是什么?矢量搜索,尤其是 Azure 认知搜索。
- 处理它的标准方法是什么。
- Azure 认知矢量搜索是否区分大小写。
谢谢-Nen
最佳答案
嵌入不是输入的逐字符表示,它们是到连续向量空间的映射,因此预计不同的输入,无论差异有多小,都会产生不同的向量,因此可能会拉动搜索期间的不同结果。
它们应该很接近,因为它们在概念上是相同的,但它们不会是相同的向量。
这里有两种方法可以进一步深入研究这个问题,首先直接比较嵌入,其次查看标记化方面:
比较嵌入
使用嵌入 API,您可以直接查看向量之间的距离,将它们与搜索/检索详细信息分开:
a = get_embedding("What is Maize?", engine="embedding")
b = get_embedding("What is Maize ?", engine="embedding")
c = get_embedding("What is Maize", engine="embedding")
d = get_embedding("What is maize?", engine="embedding")
e = get_embedding("What is corn?", engine="embedding")
f = get_embedding("What is spinach?", engine="embedding")
print("'?' vs ' ?'", cosine_similarity(a, b))
print("'?' vs ''", cosine_similarity(a, c))
print("' ?' vs ''", cosine_similarity(b, c))
print("Maize vs maize", cosine_similarity(a, d))
print("maize vs corn", cosine_similarity(a, e))
print("maize vs spinach", cosine_similarity(a, f))
我得到:
'?' vs ' ?' 0.9789760561431554
'?' vs '' 0.9726684993796191
' ?' vs '' 0.9646235430443343
Maize vs maize 0.982432778637022
maize vs corn 0.9262367100603125
maize vs spinach 0.8305263015872602
OpenAI 标记器:
您可以在这里尝试分词器:https://platform.openai.com/tokenizer 您可以做出两个观察:a) “?”被认为是一个 token (例如,不被忽略或类似的东西),并且b)不同的情况产生不同的 token 。
关于azure - (?) 问号对矢量搜索的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76959516/