首页 > 其他分享 >从模糊搜索到语义搜索的进化之路——探索 Chroma 在大模型中的应用价值

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

时间:2024-11-05 22:51:24浏览次数:5  
标签:嵌入 语义 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在线展示

标签:嵌入,语义,Chroma,查询,搜索,向量
From: https://blog.csdn.net/RenGJ010617/article/details/143450897

相关文章

  • 一款功能强大的开源文档管理系统,将物理文档转换为可搜索的在线档案,实现无纸化办公工具
    大家好,今天给大家分享一个开源的文档管理系统Paperless-ngx,旨在将物理文档转换为可搜索的在线档案,以实现无纸化办公和高效的文档管理。项目介绍Paperless-ngx是一个开源的文档管理系统,旨在帮助用户实现无纸化办公。它允许用户扫描、上传和存储文档,并且通过强大的索引和搜索......
  • 与zoomeye类似的搜索引擎有哪些?
    ZOOMEYE,学安全的人应该都不会太陌生,一个专注于网络空间的搜索引擎,能够扫描和索引全球范围内的设备、服务以及网络信息,提供有关互联网设备的详细信息。那么还有没有和ZOOMEYE类似的搜索引擎呢?当然是有的啦!我找到了几个和ZOOMEYE功能类似的搜索引擎:1.Shodan。2.360网络空间资产......
  • SEO探索:深入揭秘搜索引擎优化的奥秘
    在数字化时代,SEO(搜索引擎优化)已成为企业在线成功的关键要素之一。它不仅仅是关于提高网站在搜索引擎结果页面(SERP)上的排名,更是关于理解用户行为、优化用户体验、以及构建品牌权威性的艺术。本文将带您深入探索SEO的奥秘,揭示其背后的原理、策略及未来趋势,助您在竞争激烈的数字......
  • 蓝桥杯每日一练--搜索旋转排序数组
    目录一、题目二、分析三、代码一、题目整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0<=k<nums.length)上进行了 旋转,使数组变为 [nums[k],nums[k+1],...,nums[n-1],nums[0],nums[1],...,nums[k-1]](......
  • 基于 EventBridge + DashVector 打造 RAG 全链路动态语义检索能力
    作者:肯梦本文将演示如何使用事件总线(EventBridge),向量检索服务(DashVector),函数计算(FunctionCompute)结合灵积模型服务[1]上的EmbeddingAPI[2],来从0到1构建基于文本索引的构建+向量检索基础上的语义搜索能力。具体来说,我们将基于OSS文本文档动态插入数据,进行实时的文本......
  • 移动优先索引的时代:如何提升网站的搜索表现
    内容概要在数字时代,搜索引擎技术不断进步,移动优先索引应运而生。该概念的核心在于,搜索引擎更侧重于网站在移动设备上的表现,从而影响其在搜索结果中的排名。这一转变使得网站的移动端优化显得尤为重要,因为越来越多的用户通过手机或平板访问互联网。为了迎合这一趋势,网站所有者......
  • Python编程风格:使用语义更加明确的方法
    在软件开发中,编程风格是一个至关重要的方面,它不仅影响代码的可读性和可维护性,还直接关系到软件的质量和开发效率。在Python中,编程风格尤其重要,因为Python的设计哲学强调代码的可读性和简洁性。本文将探讨如何使用语义更加明确的方法来提升Python代码的可读性和可维护性,并提供具......
  • 【笔记/模板】二叉搜索树-平衡树
    二叉搜索树www.luogu.com.cn定义二叉搜索树(\(\text{BinarySearchTree}\))是一种形状如二叉树的数据结构,用于快速查找和增加删除操作,它有如下几个特殊性质:空树是二叉搜索树。若二叉搜索树的左子树不为空,则其左子树上所有点的附加权值均小于其根节点的值。若二叉搜索树的右......
  • pbootcms模板英文站搜索效果页面包屑显示优化
    打开 \apps\home\controller\SearchController.php 文件,根据版本替换代码:2.1.1版本:if(cookie('lg')=='cn'){//中文处理}else{//英文处理$content=str_replace('{pboot:pagetitle}',$this->config('search_title')?:......
  • 二叉树进阶-二叉搜索树
    目录1.二叉树的概念2.二叉搜索树的操作2.1二叉搜索树的结构2.2实现节点的查找(find)2.3实现增加节点(insert)2.4实现删除节点(erase)2.5析构函数2.6二叉搜索树的完整实现3.二叉搜索树的应用3.1K模型3.2KV模型4.二叉搜索树的性能分析1.二叉树的概念二叉搜索树也叫二......