专业的编程技术博客社区

网站首页 > 博客文章 正文

那些基于向量匹配的 AI 应用,同样的技术,为何效果千差万别呢?

baijin 2024-10-20 04:15:20 博客文章 243 ℃ 0 评论

最近很多AI技术交流群里面,都在热火朝天的沟通一个话题,就是一些向量化+ GPT 的文档摘要工具,为什么具体的使用效果差异却比较大呢?


其实这类把语料向量化然后结合GPT进行总结的产品,它的原理,基本上都是相似的,就是文档的语料进行一定的预处理,然后使用嵌入模型把文档向量化后存入向量数据库,然后用户提问时,把用户的提示词同样向量化,然后使用一些向量相似度的算法从向量数据库寻找出最匹配的结果,然后交给 ChatGPT 进行语义化输出。

虽然大体原理基本都是差不多的!但在实践中两个环节的做法,会导致最终的效果差异比较大:


第一个环节:嵌入

嵌入是将文本转化为向量的过程,嵌入的模型有很多种,但使用不同的模型,最终得到的向量表示也是不同的。


比如使用词袋模型,最终的向量维度就主要看你的词汇表的大小。用词袋模型时,对语料的预处理要求很高,处理的好与不好,效果可能会相差千里。


如果使用 openai 的 text-embedding-ada-002 模型,它跟传统的嵌入模型就不太一样,它用的是 1536 维的高维向量,这是一种称为上下文词向量表示法的方法,比其它的嵌入模型要强很多!


另外就是对语料的分片也是很关键的,不同的语料类型,应该使用不同的分片方式。例如,对于对话类型的语料,按句子进行分片可能就不错,因为每个句子通常表达一个完整的观点或信息。然而,对于更长和复杂的语料,比如一本书,简单的分片或者分句就不是好的分片方式,为什么呢?因为一本书可能会花费几页来讨论一个概念,如果只是简单地按句子分片,可能会断裂上下文,影响理解。


那如何分才是最好的方式呢?其实是挺有难度的一件事情,比较好的一种方式是先进行语义分析,然后根据语义分析再进行分片。但通常可能很多产品都不会这么做,因为语义分析这过程比较消耗计算资源,成本会比较高。



第二个环节:匹配

向量的相似度匹配同样有很多方式,使用的不同的算法效果也不同,像常用的有余弦相似度、欧几里得距离等。


向量的匹配结果,通常是根据检索结果的相关性排序的一个列表,我们通常会取最前边的几条或者几十条,然后再让 GPT 进行语义化表述。


那匹配结果取多少条呢?比如你可以取 10 条,也可以取 100 条, 最终包含的信息量就差别也挺大了。


了解了以上两个环节,我们就明白了,虽然看起来大体流程都非常相似,但在每个步骤中做出的选择都会显著影响最终的结果。这就是为什么这类的产品,目前用起来效果差别那么大了。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表