闭源与开源嵌入模型比较以及提升语义搜索效果的技术探讨
闭源与开源嵌入模型比较以及提升语义搜索效果的技术探讨
本文深入探讨了开源和闭源嵌入模型在语义搜索中的应用和比较,通过具体的实验数据和分析结果,为读者提供了关于模型选择和性能优化的实用建议。
嵌入技术是自然语言处理的核心组成部分,广泛应用于语义搜索、知识图谱等领域。本文将比较不同规模的开源和闭源嵌入模型,并探讨如何提升语义搜索效果。
引言
在本文中,我们将使用聚类和重新排序等技术来过滤无关内容。同时,我们将比较MTEB排行榜上排名靠前的9种不同嵌入模型,帮助读者了解大型模型与小型模型的性能差异。
嵌入技术基础
嵌入是文本的数值表示,它捕捉了文本的语义含义,使计算机能够处理和理解自然语言。对于更现代的transformer模型,它们能够理解整个上下文,从而理解词语和句子的多重含义。
在语义搜索中,我们比较不同文本的嵌入,以确定它们之间的语义相似度。这使我们能够使用查询进行一种模糊搜索——即搜索关系——而不是精确的关键词匹配。
嵌入模型比较
如何选择合适的模型呢?这就需要参考MTEB排行榜,它根据模型在各种任务中的表现对嵌入模型进行排名。我为本文选择了一些模型,包括OpenAI的模型、经过微调的Mistral-7B,以及较小的新模型,如Mixedbread AI的Mxbai。
开源模型的经济性分析
使用开源模型无疑有其优势,尤其是在隐私保护方面。许多开源模型在性能排行榜上表现出色,但在选择模型时,我们需要权衡托管模型与使用API的经济性。
从图表中可以看出,一旦开始处理数百万个文本,使用像text-embed-3-large或ada-002这样的模型的成本会急剧增加。然而,使用小型模型(参数少于500M)通常是最合理的选择。
量化技术
量化是通过使用较少的位来表示数据来压缩模型,从而减小模型的大小。这种技术的目的是使用4位和8位量化等方法,使得较大的模型能够在通常无法处理如此大规模模型的硬件上运行。
数据导入
第一步就是数据导入
# 带有嵌入的合成LinkedIn档案
dataset=load_dataset("ilsilfverskiold/linkedin_profiles_synthetic")
profiles=dataset['train']
# 带有嵌入的匿名职位描述
dataset=load_dataset("ilsilfverskiold/linkedin_recruitment_questions_embedded")
applications=dataset['train']
语义搜索实现
为了计算档案和我们的查询(职位申请)之间的语义相似度,可以执行以下代码:
# 首先尝试计算余弦相似度(不使用聚类)
def cosine_similarity(a, b):
a=np.array(a)
b=np.array(b)
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
similarities= []
for idx, emb in enumerate(embeddings_list):
sim=cosine_similarity(query_embedding_vector, emb)
similarities.append(sim)
聚类实现
对档案嵌入进行聚类就需要决定聚类的数量。本例中,我选择了10个聚类:
embeddings_array=np.array(embeddings_list)
num_clusters=10# 你可以选择其他数量
kmeans=KMeans(n_clusters=num_clusters, random_state=42)
kmeans.fit(embeddings_array)
cluster_labels=kmeans.labels_
pca=PCA(n_components=2)
reduced_embeddings=pca.fit_transform(embeddings_array)
结合聚类和语义搜索
既然我们已经确认模型能够将查询正确地分配到相应的聚类中,我们可以结合这两种方法来优化搜索结果。
模型性能分析
为了评估模型性能,我选择了一个具体的指标:模型在区分产品经理和产品营销经理方面的能力。研究发现,较大的模型在聚类之前通常能提供更准确的结果,但它们最初都存在将这两个角色分开的困难。
重新排序技术
在检索增强生成(RAG)管道中,有多种策略可以用来纠正不相关的结果;重新排序是其中之一。具体操作是,将一对结果提供给模型(可能是大语言模型),并要求它根据职位描述对两个档案的相关性进行排序。
总结
对于嵌入技术的新手,希望本文能为你提供有价值的见解。对于已经熟悉这一领域的读者,希望本文关于使用较小与较大嵌入模型的经济性分析能够带来新的思考。值得注意的是,在大型语言模型(LLM)领域,许多闭源模型正在领先;但在嵌入模型方面,情况并非如此。
本文的一个重要结论是:不要忽视较小的、计算效率更高的模型。它们可能在特定任务中表现出色,同时提供更高的成本效益。
本文的Colab笔记本可以在以下链接找到:
https://avoid.overfit.cn/post/38350e175fa0424b8c988ad98930ff94
