我正在尝试构建一个文档检索接口,它可以接受示例文档并从 postgres 数据库检索最接近的现有文档。这似乎是一个简单的用例,但是我看到的大多数示例都使用较长形式的文本文档,这些文档会被分块,并且嵌入是在较大文本的较短部分上完成的,而查找通常只是搜索特定信息。
在我的用例中,文档是客户评论,用于相似性搜索的嵌入是虚假的示例评论。当我使用 Open AI 的 text-embedding-ada-002 时,它基本上就可以工作。我确信我可以调整它以获得更好的结果,但如果我提供带有具体批评的虚假评论,它会找到具有相同或相似批评的真实评论,对于积极的评论也是如此。然而,当我尝试使用拥抱面部 Transformers-js 并使用 gte-small 或 all-miniLM-L6-v2 时,输出通常很糟糕。由于某种原因,无论输入评论是正面还是负面,它几乎只检索正面评论,并且对于绝大多数人来说,提到的任何具体事物似乎都与所提供的评论完全无关。当我查看 MTEB 排行榜时,在所有看似相关的任务中,gte-small 的排名似乎都高于 text-embedding-ada-002,那么为什么它在这里的表现明显较差呢?在使用 Huggingface 模型时,我绝对必须做一些不同的事情,或者 HF 上可能有一个更适合这种检索的特定模型?我将把嵌入代码和 sql 查询放在下面,以防出现明显错误,但我在这里不知所措,查找是通过 pgvector 顺便说一句。
const generateEmbedding = await pipeline('feature-extraction', 'Supabase/all-MiniLM-L6-v2')
let data = null
let error = null
try {
// Generate a vector using Transformers.js
const output = await generateEmbedding(text, {
pooling: 'mean',
normalize: true,
})
// Extract the embedding output
const embedding = JSON.stringify(Array.from(output.data))
data = {embedding: embedding}
} catch (e) {
error = e
}`
`-- CREATE HNSW index on reviews
CREATE INDEX ON public.reviews USING hnsw (embedding vector_cosine_ops);
-- CREATE function to retrieve review by embedding similarity
CREATE OR REPLACE FUNCTION get_reviews_by_embedding(
v vector(1536),
n INTEGER
)
RETURNS SETOF reviews
LANGUAGE plpgsql AS $$
BEGIN
SET LOCAL hnsw.ef_search = 150;
RETURN QUERY SELECT * FROM public.reviews ORDER BY reviews.embedding <#> v LIMIT n;
END
$$;
代码中一切正常
您观察到的 OpenAI 的 text-embedding-ada-002 和 Hugging Face 的 gte-small 或 all-miniLM-L6-v2 之间的性能差异可能归因于以下几个因素:
每个模型都在不同的架构和数据集上进行了训练。架构、训练数据和预训练目标的差异可能会导致特定下游任务的性能不同。 text-embedding-ada-002 使用的架构可能更适合您的特定用例。
客户评论可能包含特定领域的语言和细微差别。如果 gte-small 或 all-miniLM-L6-v2 的训练数据未涵盖与客户评论类似的领域或用例,则其性能可能会不佳。有些模型可能可以更好地跨领域推广,而另一些模型则在更专业的领域表现出色。看来 ada-002 更适合您的用例。
根据输入评论生成嵌入和计算相似度的过程可能因模型而异。嵌入的标记化、截断和聚合等参数可能会影响最终结果。据我所知,还没有发布 ada-002 如何计算句子嵌入(单词嵌入的求和、平均值、加权平均值等),它如何填充、截断句子、标记等......因此很难调试嵌入方法的差异
您的用例是信息检索。因此,我会检查 MTEB 基准中检索用例的模型排行榜 (https://huggingface.co/spaces/mteb/leaderboard)。
然后,按照以下准则在您的用例上测试模型:
此外,您可能想阅读论文以了解培训策略...如果模型在 QA 或评论中进行培训,它可能更适合旅游用例 [1]:https://arxiv.org/pdf/2210.07316.pdf