向量数据库的出现
信息分为结构化和非结构化,结构化数据可以通过传统数据库形式进行存储管理,非结构化数据例如文本文档、图片和音频则通常需要进行降维映射,再进行相似匹配。近年来,随着机器学习的发展,开始涌向出大量优秀的机器学习模型,可以将数据转化成 embedding 向量来匹配相邻的非结构化数据,向量数据库可以存储此类 embedding 数据,并可以对此执行索引、检索等操作。例如,最近大火的 LangChain 应用中,通过将文本进行向量化,然后存储到向量数据库中,往后的问答会从向量数据库中提取最相近的文本内容,作为参考,再通过 LLM 大语言模型组织回答内容。
开源向量数据库 chroma
那么,向量数据库是如何实现的呢?向量数据库的实现
- 数据存储:向量数据库需要高效地存储大量高维向量。这通常通过使用专门的存储格式和索引结构来实现,如LSH(局部敏感哈希)、树状结构和量化方法等。
- 索引:为了快速检索和搜索向量,向量数据库使用索引结构来组织数据。这些索引结构可以基于哈希、树状结构或其他空间分区技术,以减少搜索空间和提高查询效率。
- 相似性搜索:向量数据库支持相似性搜索,即查找与给定向量相似的其他向量。这可以通过计算向量之间的距离(如欧氏距离、余弦相似性等)来实现。向量数据库使用优化算法和索引结构来加速这一过程。
- 近似最近邻搜索:向量数据库通常支持近似最近邻搜索,即找到与给定向量最相似的向量,但不一定是最精确的。这种搜索可以在合理的时间内处理大规模数据集,并提供良好的性能和准确性权衡。
- 可扩展性和并行处理:向量数据库通常设计为可扩展的,能够处理大量数据和并发查询。它们可以使用分布式系统和并行处理技术来实现高性能和可扩展性