语义检索是指系统能够理解用户查询的深层含义(语义),而不仅仅是匹配字面关键词。它通过分析上下文、同义词、相关概念等,查找与查询意图最相关的信息,即使文档中没有完全相同的词语。
与关键词检索的区别:
- 关键词检索:基于字面匹配,查找包含用户输入的特定词语的文档。它不理解词语的含义,因此可能遗漏意思相关但用词不同的内容,或返回用词相同但意思不符的结果。
- 语义检索:基于意义匹配,理解查询和文档的“意思”。它能找到表达方式不同但含义相近的内容,返回更符合用户真实意图的结果。
简单来说:关键词检索是“找词”,语义检索是“懂意”。
例如:如果用关键词检索“苹果”,那么可能找到我们吃的苹果以及苹果公司的相关信息;而语义检索会考虑检索内容的上下文,它能断定这个苹果是“苹果公司”,所以只会检索“苹果公司”的相关内容出来。
计算机是如何理解语义的
计算机本身并不像人类一样真正“理解”语义,而是通过复杂的数学和统计模型来模拟对语言含义的理解。其核心方法是将文字转化为计算机可以处理的数值向量(Vector),并让这些向量能够捕捉词语、句子或文档的语义信息。这个过程称作嵌入(Embedding)。
主要实现方式包括:
-
词嵌入 (Word Embedding):
- 将词语表示为高维空间中的向量。
- 核心思想是“分布假设”:上下文相似的词,其含义也相似。
例如,
word2vec、GloVe等模型训练后,国王 - 男人 + 女人 ≈ 女王这样的向量运算成为可能,说明向量捕捉到了语义关系。 -
上下文化词嵌入 (Contextual Embedding):
- 早期词嵌入为每个词分配一个固定向量,无法处理一词多义。
- 现代模型(如
BERT、RoBERTa)使用深度神经网络(尤其是Transformer架构),根据词语在具体句子中的上下文来生成其向量表示。
例如,“苹果很好吃”和“苹果发布了新手机”中的“苹果”,会被编码成不同的向量,从而区分水果和公司。
-
句子/段落/文档编码:
- 模型不仅能编码单个词,还能将整个句子、段落或文档编码成一个向量。
- 这个向量旨在代表其整体含义。语义相似的句子,其向量在向量空间中的距离会很近。
-
向量相似度计算:
- 在语义检索中,用户的查询和数据库中的文档都被编码成向量。
- 计算机通过计算向量间的相似度(如余弦相似度)来判断语义的接近程度。
- 返回与查询向量最相似的文档向量所对应的文档。
总结:计算机通过机器学习模型,将语言转化为高维向量,并让这些向量的空间关系反映语言的语义关系。它不是“理解”,而是通过海量数据训练出的模式识别能力,来预测和匹配语言的含义。
关于维度
上面提到了高维一词,也就是高维度的意思,那么什么是维度呢?
在计算机(尤其是数据处理、机器学习和数学计算)中,维度(Dimension)指的是描述一个数据点所需独立特征或变量的数量。它定义了数据存在于一个多少维的“空间”中。
可以将维度想象成描述某件事物所需的“方面”或“属性”的个数。
核心概念
- 一维:像一条直线,只需要一个数值来定位一个点(如:数轴上的位置)。
- 二维:像一个平面,需要两个数值来定位一个点(如:地图上的经度和纬度)。
- 三维:像我们生活的空间,需要三个数值来定位一个点(如:长、宽、高)。
- 高维:超过三维的空间,在数学和计算机中很常见,用于表示包含多个特征的复杂数据。
例子说明
-
向量 (Vector):
[3]是一个一维向量,只包含一个数值。[2, 5]是一个二维向量,可以表示平面上的一个点 (x=2, y=5)。[1, 3, 8]是一个三维向量,可以表示空间中的一个点 (x=1, y=3, z=8)。[身高, 体重, 年龄, 收入]是一个四维向量,用来描述一个人的四个不同特征。
-
图像数据:
- 一张 28x28 像素的黑白图片,可以看作是一个 784 维的数据点(28 x 28 = 784 个像素值)。
- 一张 28x28 像素的彩色图片,通常有红、绿、蓝三个通道,因此是 2352 维(28 x 28 x 3 = 2352 个颜色值)。
-
机器学习中的特征:
- 在预测房价的模型中,如果使用“面积”、“房间数”、“地段评分”三个特征来描述一套房子,那么每套房子的数据就是一个三维向量。
- 如果增加“房龄”、“是否学区”等更多特征,维度就会相应增加。一个包含100个不同特征的用户画像数据,就是一个百维向量。
-
张量 (Tensor):
- 在深度学习中,数据常以张量形式存在。一个二维数组(矩阵)是二维张量,一个三维数组(如一批彩色图片)是三维张量,以此类推。这里的“维数”也指张量的轴数。
总结:维度是描述数据复杂性和特征数量的关键概念。维度越高,数据能包含的信息越丰富,但也可能带来“维度灾难”(计算复杂、数据稀疏等问题),需要特殊技术处理。
实现嵌入(Embedding,即:将文本转换成 向量/矢量)的方式
我们可以把文本矢量/向量化(Text Vectorization)方法分为 三大类:基于统计的方法、基于预测的方法、以及基于上下文的大模型嵌入方法。
下面是详细解释:
一、基于统计的方法(传统方法)
这些方法主要依靠词频统计和共现关系来表示文本,没有真正理解语义。
1. 独热编码(One-Hot Encoding)
原理:
- 给每个词分配一个唯一编号。
- 用一个全零的向量,只有该编号位置为1。
例如:
词表 = {猫, 狗, 鱼} , “狗” → [0, 1, 0]
特点:
- 简单直观,但向量维度高。
- 不同词之间没有语义关系(“猫”和“狗”的相似度=0)。
2. 词袋模型(BoW,Bag of Words)
原理:
- 统计每个词在文本中出现的次数。
- 忽略词序和上下文,只保留频率。
例如:“我 爱 自然语言处理”
→
[我:1, 爱:1, 自然:1, 语言:1, 处理:1]
特点:
- 易实现,但丢失语序信息。
- 不同长度文本可转化为同维度向量。
3. TF-IDF(词频–逆文档频率)
原理:
-
在BoW基础上增加权重:
- TF:词在当前文档的出现频率。
- IDF:词在整个语料中出现的稀有度。
公式: $$ \text{TF-IDF}(t, d) = \text{TF}(t, d) \times \log \frac{N}{n_t} $$ 其中 ($N$) 是文档总数,($n_t$) 是包含词 ($t$) 的文档数。
特点:
- 能弱化“的、是”等高频无意义词。
- 表示仍是稀疏高维向量。
二、基于预测的方法(词向量)
从统计走向“语义表示”,用神经网络训练词与词的语义关系。
4. Word2Vec(Mikolov等人,2013)
原理:
-
通过预测任务学习词向量。
-
两种模型:
- CBOW(连续词袋模型):根据上下文预测目标词。
- Skip-gram:根据目标词预测上下文。
-
相似语义的词,其向量在空间中接近。 (例如:
vector("国王") - vector("男人") + vector("女人") ≈ vector("王后"))
特点:
- 低维(100~300维)、稠密、可捕捉语义关系。
- 不同上下文中同一个词向量相同(无上下文感知)。
5. GloVe(Global Vectors for Word Representation)
原理:
- 综合全局共现统计和局部预测能力。
- 基于词共现矩阵的加权最小二乘优化。
特点:
- 与Word2Vec效果类似,但从统计角度出发。
- 同样为静态词向量。
三、基于上下文的大模型嵌入方法(动态表示)
这些方法利用深度语言模型(Transformer),能根据上下文动态生成词或句子向量。
6. ELMo(Embeddings from Language Models,2018)
原理:
- 双向LSTM模型。
- 同一个词在不同上下文中会得到不同向量。
- 例如“bank”在“river bank”和“central bank”中向量不同。
7. BERT(Bidirectional Encoder Representations from Transformers,2019)
原理:
-
基于Transformer的双向编码模型。
-
通过Masked Language Model(掩码预测)学习深层语义。
-
可输出:
- 词级向量
- 句级向量
特点:
- 语义理解强。
- 支持句子、段落、文档级向量化。
- 有衍生模型:RoBERTa、E5、SimCSE、ERNIE、MacBERT、BGE、Qwen-embedding等。
8. Sentence Embedding(句向量模型)
原理:
- 在BERT基础上,通过对比学习优化句向量相似度。
- 相似句子 → 向量距离小。
代表模型:
- Sentence-BERT(SBERT)
- SimCSE
- E5
- BGE、M3E、GTE等中文优化模型。
应用:
- 语义检索(Semantic Search)
- 问答匹配
- RAG知识检索
四、总结对比
| 方法类别 | 代表模型 | 是否理解语义 | 向量维度 | 稀疏/稠密 | 是否上下文相关 |
|---|---|---|---|---|---|
| One-hot | - | 否 | 高 | 稀疏 | 否 |
| BoW / TF-IDF | sklearn | 否 | 高 | 稀疏 | 否 |
| Word2Vec / GloVe | gensim | 是(静态) | 100~300 | 稠密 | 否 |
| ELMo | - | 是 | 1024 | 稠密 | 是 |
| BERT / RoBERTa / SimCSE / BGE | transformers | 是 | 768~1024 | 稠密 | 是 |
小结
- 传统统计法(BoW / TF-IDF):只看词频,不懂语义。
- 词向量(Word2Vec / GloVe):理解语义,但忽略上下文。
- 上下文嵌入(BERT / SimCSE / BGE):深度语义理解、动态语境感知,是当前主流。
基于上下文的大模型嵌入方法 既能深度理解语义,还能动态感知关联上下文,最强大!
如何训练用于嵌入的模型
显然,同一个词在不同的上下文中的含义可能不同,Transformer能够让同一个词在不同的上下文语境中得到不同向量。下面简单介绍一下基于Transformer的几种将文本转换为向量的几种模型:BERT / SimCSE / BGE的训练过程和基本原理。
一、核心目标
这些模型的共同目标是: 把语义相似的文本映射到相近的向量空间中。 也就是说,经过矢量化后:
- “公司法规定的责任” 和 “公司法的责任条款” → 向量距离接近
- “公司注册流程” 和 “股东权利义务” → 向量距离较远
二、BERT 的训练过程(基础模型)
BERT(Bidirectional Encoder Representations from Transformers)是上下文嵌入的基础。
训练目标:
1. Masked Language Modeling (MLM)
-
随机遮盖句子中15%的词。
-
让模型预测被遮盖的词。
输入: 我今天[MASK]很开心 输出: 吃 → 概率最高
2. Next Sentence Prediction (NSP)
-
给定两句话,让模型判断第二句是否是第一句的下文。
句子A: 我去商店买水果 句子B: 然后我买了一个苹果 ✅ 句子B': 今天阳光很好 ❌
训练方式:
- 大规模无监督语料(Wikipedia、书籍等)
- 优化目标是最小化 MLM + NSP 的交叉熵损失
结果:
获得词或句子的“上下文感知”表示(Contextual Embedding)
但原始BERT不直接适合句子相似度计算,因为句向量分布不稳定。
三、SimCSE 的训练过程(句向量模型)
SimCSE(Simple Contrastive Sentence Embedding)是在BERT的基础上,用**对比学习(Contrastive Learning)**优化句子向量。
思想:
- 让语义相近的句子向量靠近,不同句子向量远离。
训练方法:
(1) 无监督 SimCSE
-
用 BERT 对同一句子做两次 dropout,得到两个不同表示。
-
视作「正样本对」,其他句子是「负样本」。
句子: "公司法的最新修订" dropout1 → 向量 v1 dropout2 → 向量 v2 -
目标:最大化 v1 与 v2 的相似度,最小化与其他句子的相似度。
-
损失函数:InfoNCE 对比损失
(2) 有监督 SimCSE
- 使用自然语言推理(NLI)数据集(如 entailment / contradiction)。
- 相似句(entailment)→ 正样本
- 不相似句(contradiction)→ 负样本
四、BGE 的训练过程(现代中文向量模型)
BGE(BAAI General Embedding) 是面向中文和多语言优化的最新一代句向量模型,改进自 SimCSE 思路。
核心特征:
-
采用更大规模数据集(对话、问答、百科、网页)。
-
采用多任务学习:
- 语义相似度任务
- 检索任务(query–document)
- 对比学习任务(positive/negative pairs)
-
优化损失函数:
- InfoNCE + Margin Ranking Loss 混合
训练方式:
-
构建 (query, positive_doc, negative_doc) 三元组
-
通过 Transformer 编码每个文本为向量
-
优化目标: $$ \text{Loss} = -\log \frac{e^{\text{sim}(q, d^+) / \tau}}{e^{\text{sim}(q, d^+) / \tau} + \sum e^{\text{sim}(q, d^-) / \tau}} $$ 其中:
- ( $\text{sim}$ ):向量余弦相似度
- ( $\tau$ ):温度参数
效果:
- 句子相似度更稳定。
- 支持跨域检索(法律、问答、文档匹配)。
- 常用于 RAG、知识问答、语义搜索。
五、三者关系总结
| 模型 | 训练方式 | 语料类型 | 是否有监督 | 主要用途 |
|---|---|---|---|---|
| BERT | MLM + NSP | 大规模文本 | 无监督 | 通用语言理解 |
| SimCSE | 对比学习 (dropout 或 NLI) | 句对数据 | 无/有监督 | 句向量相似度 |
| BGE | 多任务对比学习 | QA / 检索数据 | 有监督 | 中文检索 / RAG嵌入 |
总结
通过训练好的模型,计算机可以把文本转换成高维向量,这些高维向量代表文本的语义,这个过程也称作嵌入(Embedding),语义检索让机器按意思找内容。
🪐感谢观看,祝好运🪐