向量技术与语义相似搜索,你真的理解了吗?

AI时代,我们听到很多新名词,技术领域,应该不陌生:向量技术,语义搜索。我们稍稍了解深入一点,就知道语义相似搜索,是基于向量技术的。

但是,普通的文本,是怎么转成向量的呢?为什么转成向量,就能进行相似计算呢?这些问题,就算是有相当经验的IT从业人员,也会存疑,知其然不知其所以然。

最近深入研究,把这个问题科普了,在此总结一下。

1、词汇搜索与语义搜索

词汇搜索:就是根据关键字匹配,无论是sql的“=”、like,还是Elasticsearch的倒排索引,都离不开匹配,也就是搜索结果与条件必须有完全相同的关键字。

语义搜索:搜索结果的相关性是由系统内的语义接近度决定的,而不仅仅是关键字匹配。

举例,我们要搜索“会抓老鼠的动物”,如果用词汇搜索,是无论如何都不会得出“猫”这样的结果的,但是,用语义搜索,就可以。

2、文本转换成向量,此向量就是在一个空间中的位置(坐标)

该坐标单独并不具有任何意义,必须与其他文本同时存在于此空间才有意义,因为不同的坐标体现了不同文本的距离。这里的距离就是相关度。

3、文本的坐标如何算出来?

一个机器学习模型,就是各种文本+文本坐标的集合,那么,文本坐标是怎么算出来的?是不是AI的黑科技?其实,归根结底,都是“训练”两个字,说到训练,到底还是离不开人。

怎么去训练呢?核心就是数据集。数据集是要人工去整理的,数据集介乎结构化数据和非结构化数据之间,他看起来是这样的:

简单来说,就是人工把大量的文本进行了整理归类,让其有固定格式,并体现一定的内在关系。

这些数据集通过机器学习,大模型就获得了很多文本的意义关系,也即他们的坐标距离。

坐标的绝对值,其实无所谓,只要这个值能体现各个坐标的距离即可。

可以说,一个语言模型的能力,除了技术因素之外,还在很大程度上取决于训练数据集的质量和数量(规模)。

一个比较直观的向量坐标示意图,可以帮助理解:

在这里插入图片描述

上图是一个大语言模型里面的几个词的坐标(二维化之后)示意图,从图中,可以看到,dog和cat在坐标上的距离是比较近的,而chair和table比较近。

这就体现了语义相似度。

<think>好的,用户的问题是关于如何在语义搜索中使用向量数据库进行文本分割的方法和实现。首先,我需要明确用户的需求,他们可能想了解整个流程中的文本处理步骤,特别是如何分割文本以便后续的向量化和存储。 根据提供的引用内容,特别是引用[2]中提到使用LangChain将语料转为语义向量嵌入,并提到需要限制上下文文本长度,这应该文本分割有关。因此,文本分割可能是为了处理长文本,使其适合向量数据库的存储和检索。 接下来,我需要考虑文本分割的常用方法。常见的包括固定长度分块、滑动窗口和基于语义的分割。固定长度分块简单但可能切断语义,滑动窗口能保留部分上下文,而基于语义的分割利用NLP模型识别段落或句子边界,保持语义完整性。引用[3]提到的HNSW和IVF是索引算法,可能分割后的向量处理有关,但用户的问题更关注分割方法本身。 然后,结合引用[2]中的流程,文本分割后需要转换为嵌入向量并存储到向量数据库,如FAISS。在查询时,用户的问题会被向量化,数据库检索相似向量,返回对应的文本块。因此,分割的质量直接影响检索效果,需要平衡块的大小和语义连贯性。 可能还需要考虑分块大小的选择,比如128-512 tokens,以及重叠窗口的应用,如引用[2]提到的限制上下文长度。此外,基于模型的分割方法可能需要用到NLP工具,如spaCy或NLTK,或者深度学习模型来识别语义边界。 用户可能还关心具体的实现步骤,比如预处理、分割、向量化、存储和检索。需要详细说明每个步骤,并举例说明代码实现,如使用LangChain的TextSplitter类。同时,要提到优化方向,如分块大小调整、重叠窗口和模型选择,以及如何评估分割效果,如检索准确率和语义连贯性。 最后,确保回答结构清晰,分步骤解释,并生成相关问题,帮助用户深入理解。需要检查是否符合格式要求,如行内公式用$...$,独立公式用$$...$$,正确引用文献,使用中文,并附上相关问题。</think>### 语义搜索向量数据库的文本分割方法实现 #### 一、文本分割的核心作用 在语义搜索系统中,文本分割是将原始长文本切分为语义连贯的短片段的过程,其核心目标是: 1. **适配向量编码**:大多数预训练模型(如BERT、RoBERTa)对输入长度有限制(通常为512 tokens) 2. **提升检索精度**:合理分割后的文本块能更精准地表征局部语义 3. **控制计算成本**:减少冗余信息处理,$$ \text{计算复杂度} \propto \frac{\text{总文本长度}}{\text{分块长度}} $$ #### 二、文本分割方法对比 | 方法 | 原理 | 优点 | 缺点 | |------|------|------|------| | 固定长度分块 | 按固定token数切割 | 实现简单 | 可能切断语义连贯性 | | 滑动窗口 | 重叠式分块(如窗口256,步长128) | 保留上下文关联 | 信息冗余 | | 语义分割 | 利用NLP模型识别段落/句子边界 | 保持语义完整性 | 计算成本较高 | #### 三、实现流程(以中文文本为例) 1. **预处理阶段** - 清洗HTML标签、特殊字符 - 统一编码格式(推荐UTF-8) - 标准化处理:$$ \text{全角转半角} \rightarrow \text{繁简转换} \rightarrow \text{停用词过滤} $$ 2. **分割实现** ```python from langchain.text_splitter import RecursiveCharacterTextSplitter text_splitter = RecursiveCharacterTextSplitter( chunk_size=256, # 目标块长度 chunk_overlap=64, # 重叠窗口 separators=["\n\n", "。", ";", "!"] # 分割符优先级 ) documents = text_splitter.create_documents([raw_text]) ``` 3. **向量化存储** - 使用Sentence-BERT生成嵌入向量:$$ \mathbf{v} = \text{SBERT}(text\_chunk) \in \mathbb{R}^{768} $$ - 通过FAISS构建索引(推荐IVF+HNSW组合)[^3] 4. **检索优化** - 动态调整分块策略:$$ chunk\_size = \begin{cases} 128 & \text{技术文档} \\ 256 & \text{新闻资讯} \\ 512 & \text{法律条文} \end{cases} $$ - 混合检索模式:结合语义向量关键词倒排索引 #### 四、效果评估指标 1. **检索准确率**:$$ P@K = \frac{\text{相关结果数}}{K} $$ 2. **语义连贯性**:人工评估分块边界合理性 3. **响应延迟**:端到端处理时间应满足$ \tau < 500ms $ #### 五、典型应用场景 1. 法律文书条款检索(需精确匹配) 2. 客服知识库问答(需上下文关联) 3. 学术论文查重(需细粒度比对) [^1]: 通过FAISS实现高效向量检索 [^2]: LangChain处理流程中的文本分割环节 : IVF+HNSW索引组合提升检索效率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值