从模糊搜索到语义搜索的进化之路——探索 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.mzph.cn/pingmian/59051.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS灵动岛动画小组件怎么播放动画

这个灵动岛相关的展示位置分几个地方: 紧凑型,最小化,扩展型,还有锁屏位置 我们先来看一下我这边实现的动画效果 demo下载: iOS灵动岛GIF动画 灵动岛样式 灵动岛有三种渲染模式: 第一种是 紧凑型&…

网络信息系统的整个生命周期

网络信息系统规划 此阶段主要是根据企业的业务需求、技术发展趋势以及市场环境等因素,对网络信息系统进行初步的规划和设计。规划的内容可能包括系统的目标、功能、性能、安全性等方面的要求。 规划阶段还需要进行可行性研究,评估项目在技术、经济、社…

力扣排序268题 数字丢失

题目: 丢失的数字 给定一个包含[0,n]中n各数的数组nums,找出[0,n]这个范围 内没有出现在数组中的那个数。 示例1: 输出:n 3,因为有3个数字,所以所有的数字都在范围 [0,3]内。2是丢失的数字,因为它没有出现…

原生鸿蒙应用市场:开发者的新机遇与深度探索

文章目录 自动化检测前移:提升开发效率与质量的新利器数据服务:数据驱动的精细化运营助手测试服务:保障应用质量的关键环节应用加密:保护应用安全与权益的利器从开发到运营的全方位支持写在最后 2024年10月22日,华为在…

【建造&机械】垃圾车检测系统源码&数据集全套:改进yolo11-SPPF-LSKA

改进yolo11-swintransformer等200全套创新点大全:垃圾车检测系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.30 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片…

全差分运放电路分析

可以看到,该运放有正负两个反馈。首先需要申明的是:全差动运算放大器仍然满足虚短虚断的特性。 从上图中可以看到,运放的正输入端有一个Vin信号,负输入端没有接输入信号;这是一种典型的将单端输入型号转化成差分信号的…

Win/Linux/Kylin 系统安装指定版本 jdk(8u171为例)

现在安装一个jdk环境, 应该也不是什么麻烦事,教程满天飞,但如果你需要安装指定版本的jdk,那文章还是有点乱,给的下载地址也不太对,不太好找,有的版本还要花钱买积分.......比较靠谱还是官网&…

Java 正则基础

本文里简单的记录了一下Java正则的内容,因为之前学了python版的,所以零基础的可以去看一下视频:正则专题。而且没有列出正则里的其他方法,需要的可以百度一下 快速入门 class RegExp {public static void main(String[] args) {…

std::bind绑定普通函数、模板、类成员函数、类模板函数测试和简单策略

绑定普通函数 绑定具体值 代码 #include <iostream> #include <vector> #include <cassert> #include <functional> using namespace std;int add_func(int a, int b) {return a b; }int main() {auto func std::bind(add_func, 5, 10);cout <…

CentOS 7 软件/程序安装示例

安装软件/程序 wget&#xff0c;前提需要用 root 用户 1、搜索软件/程序 yum search wget 搜索到软件/程序。 2、安装软件/程序 yum -y install wget 安装完成。

USB协议学习

文章目录 USB发展背景发展变化速度等级通讯接口 四种传输主设备 & 从设备主设备从设备 连接与检测高速设备与主机连接USB总线常见的几种状态 枚举过程特点 控制传输学习资料 USB发展背景 发展变化 USB1.1&#xff1a;规范了USB低全速传输&#xff1b; USB2.0&#xff1a;…

qt QRadioButton详解

QRadioButton 是一个可以切换选中&#xff08;checked&#xff09;或未选中&#xff08;unchecked&#xff09;状态的选项按钮。单选按钮通常呈现给用户一个“多选一”的选择&#xff0c;即在一组单选按钮中&#xff0c;一次只能选中一个按钮。 重要方法 QRadioButton(QWidget…

内核——全局句柄表

实验环境&#xff1a;win7 x32 首先引入一段基础概念&#xff1b; 1.在windows下所有的资源都是用对象的方式进行管理的(文件、进程、设备等都是对象)&#xff0c;当要访问一个对象时&#xff0c;如打开一个文件&#xff0c;系统就会创建一个对象句柄&#xff0c;通过这个句柄…

windows系统类似于linux的nohup命令后台启动jar服务

一、首先新建一个后缀名为.bat文件 二、将jar包放在与jar包同一个路径下 三、编写.bat文件 echo off start javaw -Xms512m -Xmx1024m -XX:PermSize256m -XX:MaxPermSize512m -XX:MaxNewSize512m -jar xxxxx-22900.jar >> StartupLog.log 2>&1 & exit 四…

LiveQing视频点播流媒体RTMP推流服务功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大

LiveQing视频点播流媒体RTMP推流服务功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大 1、鉴权直播2、视频点播3、RTMP推流视频直播和点播流媒体服务 1、鉴权直播 云直播服务-》鉴权直播 -》播放 &#xff0c;左键单击可以拉取矩形框&#xff0c;放大选中…

Android笔记(三十一):Deeplink失效问题

背景 通过deeplink启动应用之后&#xff0c;没关闭应用的情况下&#xff0c;再次使用deeplink会失效的问题&#xff0c;是系统bug导致的。此bug仅在某些设备&#xff08;Nexus 5X&#xff09;上重现&#xff0c;launchMode并且仅当应用程序最初通过深层链接启动并再次通过深层…

【java】以<内存图>的形式理解数组的增删

数组 数组在内存里地址连续 定义一个数组&#xff0c;数组中的数据类型一样(二进制串位数相同)&#xff0c;故可以直接通过下标获取数组中的内容。 基本类型存的是值&#xff0c;引用类型存的是地址 数组的下标从0开始。 初始值&#xff1a; Int &#xff1a;0 char &am…

时代变了!Megabit兆比特英伟达纳入道琼斯指数,英特尔被取代

△英特尔VS英伟达市值对比(截至今年2月) 最新消息,英伟达将在2024年11月8日替代英特尔成为道琼斯工业平均指数的组成成员。 Megabit兆比特自成立以来,Megabit凭借用户友好的界面和对透明度的承诺,迅速在加密货币市场中崭露头角,成为广大用户信赖的平台。 这是历史最悠久的美…

算法竞赛(Python)-大事化小,小事化了(分治)

文章目录 前言一、数乘型分治1 疯狂的细胞分裂 二 矩阵乘法的分治1 神秘数字 三 、线性结构问题的分治1 自助餐厅&#xff08;1&#xff09;2 自助餐厅&#xff08;2&#xff09; 四 、树形结构的分治1 二叉树的最大深度 前言 分治思想&#xff1a;将一个大问题分词几个小问题&…

使用Jupyter Notebook进行数据科学项目

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Jupyter Notebook进行数据科学项目 Jupyter Notebook 简介 安装 Jupyter Notebook 创建和管理 Notebook 编写和运行代码 示例…