当前位置: 首页 > article >正文

从模糊搜索到语义搜索的进化之路——探索 Chroma 在大模型中的应用价值

目录

从模糊搜索到语义搜索的进化之路——探索 Chroma 在大模型中的应用价值

一、引言

二、实现语义搜索的数据库 Chroma

1、语义搜索是什么

2、Chroma 语义搜索的原理

三、如何在项目中应用 Chroma

1、Chroma 的实际应用场景

2、安装Chroma(python环境) 

3、创建嵌入索引

4、查询数据

四、语义搜索与传统模糊搜索之间的优劣

1、模糊搜索

2、语义搜索

3、Chroma 语义搜索与传统搜索的对比

五、总结


作者:watermelo37

涉及领域:Vue、SpingBoot、Docker、LLM、python等

---------------------------------------------------------------------

温柔地对待温柔的人,包容的三观就是最大的温柔。

---------------------------------------------------------------------

从模糊搜索到语义搜索的进化之路——探索 Chroma 在大模型中的应用价值

一、引言

        在信息检索领域,搜索技术的不断演变从根本上改变了我们获取信息的方式。传统的模糊搜索(Fuzzy Search)在应对拼写错误、不精确匹配时已经表现出色,但面对大规模的非结构化数据和用户意图理解时,语义搜索展示出了更高的效率。

        有一个非常适用于初学者使用的向量数据库 Chroma ,它专门用于存储、索引和搜索高维向量数据,基于大模型的语义搜索框架,能够以更精确、更智能的方式理解查询背后的含义。这篇文章将深入探讨 Chroma 的原理、应用场景及其与传统搜索的区别,帮助大家更全面地认识语义搜索的前景。

二、实现语义搜索的数据库 Chroma

1、语义搜索是什么

        语义搜索利用自然语言处理(Natural Language Processing , NLP)技术,不仅仅匹配关键词,而是通过理解句子结构和上下文来检索与用户查询相关的内容。这种方式尤其适合处理大模型生成的知识库、对话系统等复杂数据源,让机器能够更自然地与人类互动。

        Chroma 正是这样一种语义搜索框架,它利用了大模型生成的嵌入(embedding)向量来表示词语或短语的语义,使得搜索不再依赖关键词匹配,而是基于内容相似性和语义关联来完成。

2、Chroma 语义搜索的原理

        Chroma 语义搜索基于向量嵌入技术,将文本或查询映射到多维向量空间,以下是其基本实现原理:

  1. 文本嵌入生成:Chroma 使用大模型将文本转化为嵌入向量,将语义上相似的词语映射到更接近的位置。
  2. 向量相似度搜索:利用余弦相似度或欧几里得距离在向量空间中查找相似的嵌入,从而实现语义相关的内容推荐。
  3. 语义优化与索引:Chroma 在存储和索引上进行了优化,可以快速处理大规模数据,支持动态扩展和高并发访问。
  4. 实时更新:Chroma 可以实时更新语义索引,使系统可以持续接纳新信息、适应动态的业务需求。

        这里用大白话给初学者简单解释一下原理:向量嵌入的本质就是将文本内容映射成一个向量,这个向量往往高达上千维(所以才能处理海量数据),而两个向量之间的距离越近(常用余弦相似度或欧氏距离来定量计算向量距离),就代表这两个向量所代表的文本语义越接近。

        余弦相似度:余弦相似性通过测量两个向量的夹角的余弦值来度量它们之间的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。两个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90°时,余弦相似度的值为0;两个向量指向完全相反的方向时,余弦相似度的值为-1。

        欧几里得距离:也叫欧氏距离,在‌n维空间​中两个点之间的真实距离。这个概念是由古希腊数学家欧几里得提出的,用于计算在欧几里得空间中两点间的直线距离。高中的小同学应该还记得计算两点间的距离公式就是用的欧氏距离。拓展到n维就是:

(xi,yi代表空间两个点分别在 i 轴上的两个坐标)

三、如何在项目中应用 Chroma

        Chroma官方文档:Chroma Docs

1、Chroma 的实际应用场景

  • 知识库查询:在大型知识库中,Chroma 可以通过理解语义来回答用户的问题,不局限于匹配关键词,而是综合上下文和内容理解。

  • 智能客服和对话系统:Chroma 支持多轮对话上下文的保持,使对话系统能够理解用户的真实意图,从而给出更精准的回答。

  • 内容推荐:Chroma 可基于用户兴趣和行为记录生成语义嵌入,并通过相似度计算为用户提供个性化推荐内容。

        也就是说需要理解搜索的语义而并非简单的获取文本高匹配度的词条,就可以使用Chroma。

2、安装Chroma(python环境) 

        首先安装 Chroma 及其依赖的 NLP 模型,确保环境中可以运行预训练的大模型:

pip install chroma
pip install transformers

3、创建嵌入索引

        将文本数据转化为向量并创建索引,这些向量将用于语义相似度的计算:

from chroma import Chroma
from transformers import AutoTokenizer, AutoModel

# 加载模型
tokenizer = AutoTokenizer.from_pretrained("模型名称")
model = AutoModel.from_pretrained("模型名称")

chroma = Chroma()

# 创建嵌入
texts = ["文本1", "文本2", "文本3"]
embeddings = [model.encode(text) for text in texts]
chroma.index(embeddings)

4、查询数据

        使用查询文本生成嵌入,并根据相似度查找最相关的内容:

query = "查询文本"
query_embedding = model.encode(query)
results = chroma.search(query_embedding)
for result in results:
    print(result)

        查询数据改成前后端通信获取查询文本,再将查询结果通过响应体返回到前端,就能实现web页面的语义查询了

四、语义搜索与传统模糊搜索之间的优劣

1、模糊搜索

        模糊搜索通过编辑距离或相似性算法来识别拼写错误和相似词语,允许用户在搜索时输入不完全准确或拼写错误的关键词,系统会返回与这些关键词相似或相关的结果。

        优势:

  • 高效处理拼写错误和不完整的词。
  • 在小数据集或特定字段(如名称、产品编号)查询中表现良好。

        局限性:

  • 语义欠缺:模糊搜索无法识别词语背后的语义。例如,“气候变化”和“全球变暖”在模糊搜索中并不会被认为是相关的。
  • 扩展性差:面对长文本或复杂的自然语言表达时,模糊搜索难以理解查询意图。
  • 性能瓶颈:随着数据量增加,模糊搜索的处理能力会逐渐下降。

2、语义搜索

        优点:

  • 语义理解:能够更准确地理解用户查询的语义,提高用户体验。
  • 适应性强:可以在大规模非结构化数据中进行高效检索。
  • 动态扩展:可以随数据变化动态更新嵌入。

        缺点:

  • 计算资源需求大:嵌入生成和索引需要较高的计算资源。
  • 模型训练依赖:Chroma 效果取决于大模型的训练质量,较少适用于小型项目或低计算资源场景。

3、Chroma 语义搜索与传统搜索的对比

比较维度传统模糊搜索Chroma 语义搜索
原理关键词匹配,编辑距离算法向量嵌入,语义相似性
理解能力无法理解上下文深度语义理解
性能数据量大时性能下降适合大规模数据处理
应用场景精准匹配的场景复杂意图和内容查询
拓展性适合结构化数据更适合非结构化数据

五、总结

        Chroma 提供了一种新型的搜索方式,通过语义搜索替代传统的关键词匹配,大大提高了信息检索的精度和用户体验。在信息爆炸的时代,语义搜索的出现满足了人们对高效信息获取的需求。随着大模型的发展,Chroma 等技术将会进一步提升信息检索的智能化水平,为各类应用场景带来更多可能性。

        只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

        其他热门文章,请关注:

        你真的会使用Vue3的onMounted钩子函数吗?Vue3中onMounted的用法详解

        通过array.filter()实现数组的数据筛选、数据清洗和链式调用

        极致的灵活度满足工程美学:用Vue Flow绘制一个完美流程图

        el-table实现动态数据的实时排序,一篇文章讲清楚elementui的表格排序功能

        TreeSize:免费的磁盘清理与管理神器,解决C盘爆满的燃眉之急

        在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境

        Dockerfile全面指南:从基础到进阶,掌握容器化构建的核心工具

        MutationObserver详解+案例——深入理解 JavaScript 中的 MutationObserver

        JavaScript中闭包详解+举例,闭包的各种实践场景:高级技巧与实用指南

        干货含源码!如何用Java后端操作Docker(命令行篇)

        Idea启动SpringBoot程序报错:Port 8082 was already in use;端口冲突的原理与解决方案

        PDF预览:利用vue3-pdf-app实现前端PDF在线展示


http://www.kler.cn/a/379907.html

相关文章:

  • Ubuntu Linux
  • SSH详解
  • windows XP,ReactOS系统3.4 共享映射区(Section)---2
  • 【jvm】如何设置新生代和老年代的比例
  • 规范:项目、目录、文件、样式、事件、变量、方法、url参数、注释、git提交 命名规范及考证
  • Rust 力扣 - 1493. 删掉一个元素以后全为 1 的最长子数组
  • 层次与网络的视觉对话:树图与力引导布局的双剑合璧
  • pt-archive
  • Fx-LMS 单片机
  • Chrome离线安装包下载
  • 基于SpringBoot+Gpt个人健康管家管理系统【提供源码+答辩PPT+参考文档+项目部署】
  • C#-类:声明类、声明类对象
  • 抓住问题的关键解决LeetCode第3337题字符串转换后的长度II
  • Go语言与数据库操作:从连接到CRUD
  • 有哪些编辑器,怎样选择编辑器
  • 嵌入式硬件电子电路设计(三)电源电路之负电源
  • Oracle SQL Loader概念及用法
  • IOS 防截屏实现
  • 与IP网络规划相关的知识点
  • Linux之信号量
  • Mate70还没发布,就有经销商因提前拆封被罚款50万起?
  • linux驱动-认识输入子系统源码以及裁剪
  • 【c++篇】:深入剖析vector--模拟实现属于自己的c++动态数组
  • Python+Requests+PyTest+Excel+Allure 接口自动化测试实战!
  • 2024年科技特长生招生新趋势:多领域扩展与创新人才培养
  • 连续可穿戴式基于微型机器学习跌倒检测