现在是北京时间2023年11月18日。聊一聊搜索。
说到搜索,大家首先想到的肯定是谷歌,百度。我把这些定义成上一个时代的搜索引擎。ChatGPT已经火热了有一年的时间了,大家都认为Ai搜索是下一代的搜索。但是AI搜索,需要的是很大算力,需要很大存储空间。至今为止又有多少个公司能够真的去做AI搜索呢?普通的公司又能够做什么呢?
ChatGPT是大模型,它的数据总是停留在历史的某个时间点上,目前来看,它对新事物的了解还是很慢的,并不能时时刻刻把新的内容加入到知识库中。未来在更强大的算力进步下,或许会实现。但是我觉得下一代的搜索仍然需要和上一代的搜索结合。这会是一个漫长的过渡期。很显然,大家也都是这么玩的。它叫做搜索增强。
上一代传统搜索
上一代的搜索引擎的关键是关键词匹配。这里还是以elasticsearch为例,关键词匹配,BM25相关性算法,来决定数据的召回。这种基于关键词的匹配技术,是存在很多弊端的,它的召回能力,效果也有限。大家更喜欢AI搜索这种模式,通常AI搜索给的答案,更接近问题本身。而在传统的搜索模式下,通常就是问一个问题,然后返回你几条数据,然后再在这几条数据中,人工获取答案。悲伤的是,这几条数据里边未必有我们的结果。
传统搜索与大模型构造增强式搜索引擎
最简单的玩法就是,把召回的结果,给大模型,然后由大模型总结整理一个答案。其实这个过程就是省去了使用者思考的过程。为使用者带来很大的便利性。这正是被更多人追捧的原因。最典型的就是bing的搜索。它就是这么玩的,这样以来,弥补了大模型的知识停留在历史的某个阶段的问题。
传统搜索的未来
除了上述的搜索增强,我觉得下个时代的搜索,还是会有很大变化空间的。有的公司在说神经搜索,有的人在说语义检索,还有人在说跨模态检索。总之,大家都期望搜索能够有更强大的能力。推荐基于深度学习的神经语义搜索 – 智源社区看看这篇文章,详细了解神经搜索(NLP模型 )。
其实上述的搜索目标,实现起来都是一种形式。大模型 + 向量,通过大模型将各种模态的数据,图片,文本,声音等等各种形式的内容,映射成向量。但是下个时代的到来,还有几个问题等待解决。第一个是算力问题,把文本或者图片,使用大模型转成向量,需要算力,这个过程是非常慢的。第二个是存储和检索问题,这些转完的向量如何存储,如何高效快速检索。因为通常文本内容,例如一篇文章,通常需要先进行分割,按照行或者按照段落做切分,然后再对切分后的内容使用模型转成向量。每个向量通常是一个512维度甚至更高维度的浮点型数组。这让原本的存储空间变得更大。所以存储是一个问题。除了存储的问题,在向量中做检索,通常是计算完成的。在海量数据中做检索已经很难了,在限量中做计算,需要的算力资源又是一个难题。我在一台128G内存96核心的服务器上使用elasticsearch做存储和检索,亿级数据的检索性能已经是一个比较大的问题了。在千万级向量中检索是毫秒级别。
未来的搜索如何玩
想要做起来很容易。选取适合自己的模型,可以在huggingFace上看一看。https://huggingface.co/models
首先先拿文本来说,需要做文本嵌入,寻找text-vex的模型,这里推荐一个 可以看看。https://huggingface.co/moka-ai/m3e-base
假如想做多模态搜索,又需要特定的模型。效果较好的例如Clip,https://huggingface.co/openai/clip-vit-base-patch32
然后把转好的向量使用向量库存起来。这里我是用的elasticsearch 8.X版本。因为我本来就是做es搜索的,对elasticsearch非常熟悉。其实也调研了非常多的向量数据库,在大规模数据下,es的读写性能都是非常出色的。至少单个节点去解决千万级别的向量数据的存储和检索还是很轻松的,优化万了以后,性能在毫秒级别。
跑起来总是很容易。想要有更好的效果却是不容易的。对于选模型来说,是一个问题,而且要经过大量的测试对比各个模型的效果才行。并且非常可能面临着模型不符合自己的使用场景的问题,可能又要对模型进行微调。在huggingFace上,模型非常多,但是多数都是用英文语料训练的模型。往往不能够满足我们的需求。此外数据向量化的工程问题,又要去写挺多的代码,跑起来速度又不行,又需要进行调优。关于数据转向量工程化的内容,推荐一下Jina AI · GitHub。