- 关键词是怎么来的?
○ 在全文检索里,关键词是如何“自动提取”而非手动指定。 - 关键词检索和词向量/句向量是否相同?
○ “这是词向量和句向量匹配吗?”实际上,它们是两种截然不同的策略:传统全文检索用倒排索引,语义检索才会用向量。 - 倒排索引如何构建?
○ “倒排索引怎么做的?”关键词检索背后的原理。
围绕全文检索(基于倒排索引)和向量检索(基于语义匹配)这两者的区别,以及它们分别是如何实现的。
下面是一份综合整理的笔记,帮助你快速区分和了解关键词检索(全文检索)与向量检索(语义检索)的核心原理和流程。此外,还包含倒排索引如何构建的要点。
-
关键词检索(全文检索)
1.1 核心概念
● 倒排索引:将“每个词”映射到“出现该词的文档集合”中,以便快速定位包含这些关键词的文档。
● 关键词匹配:检索依赖用户查询中的词和文档中出现的词是否吻合。
1.2 工作原理 -
分词:系统会对文档和用户查询文本进行分词或token化(如中文分词、英文去停用词)。
-
建立倒排索引:
○ 记录“词→文档ID”的映射,并存储相关信息(词频、位置等)。 -
查询阶段:
○ 将用户输入同样分词后,到倒排索引中快速定位可能的文档集合。
○ 使用算法(如TF-IDF、BM25)对文档和查询的匹配度打分并排序。 -
返回结果:
○ 分值最高的文档排在前面,供用户查看。
1.3 优缺点
● 优点:检索速度快、实现成熟,对“关键词”非常敏感(精确匹配效果好)。
● 缺点:无法理解同义词、近义词,词形变化也可能导致检索失败,例如“风电场”与“风力发电厂”不一定被当作相同概念。 -
向量检索(语义检索)
2.1 核心概念
● 向量表示(Embedding):将文本(或句子、词)转化为一串数字向量,体现其语义信息。
● 相似度计算:常用余弦相似度或点积相似度来度量两向量间的“语义距离”。
2.2 工作原理 -
向量化:
○ 使用语言模型(BERT、GPT等)将文本转换成向量。
○ 对文档和用户问题都进行同样的向量转换。 -
存储向量:
○ 利用向量数据库(Milvus、Faiss等)或把向量作为索引结构存储。 -
查询阶段:
○ 将用户输入转化为向量,与文档向量计算相似度,寻找最接近的若干个文档。 -
返回结果:
○ 将相似度最高的文档作为最有可能匹配语义的结果。
2.3 优缺点
● 优点:能理解语义,即使关键词不同也能匹配到含义相近的文本。适合同义词、上下文理解等场景。
● 缺点:需要更多计算和较大算力;在大规模数据下,查询速度可能不如倒排索引快,还需特殊数据库(如向量数据库)。 -
关键词检索 vs. 向量检索
对比项 关键词检索(全文检索) 向量检索(语义检索)
数据结构 倒排索引:记录“词→文档ID” 向量索引:存储文档的向量表示
匹配方式 关键词匹配、词频、BM25等 向量相似度(余弦/点积)
检索速度 快,成熟度高 视向量库优化程度而定,大规模时需更多算力
同义词处理 无法理解语义,需人工设置同义词库等 可自动匹配语义相近的表达
实现难度 工具(Solr、Elasticsearch)非常成熟 需要语言模型、向量数据库或定制检索方案
典型应用 快速关键词搜索,精确匹配专业名词 聊天机器人、语义问答、文档推荐等场景 -
倒排索引如何构建?
-
收集文档:获取所有需要检索的文本。
-
分词处理:将文本拆解成一个个词(Token),去除无关信息(如停用词、标点)。
-
记录词出现位置:在“词→文档”映射里标注此词出现在哪些文档、位置或频率。
-
整理形成“倒排索引”:
词A: [文档1, 文档3, 文档10…]
词B: [文档2, 文档4, 文档10…]
…
结合频次、位置等信息进行后续匹配打分。
检索时,只需根据查询词找到其映射的文档列表,大大加速搜索步骤。
小结
- 关键词检索依赖倒排索引,速度快、对关键词敏感,但不理解词义。
- 向量检索用向量相似度衡量语义相似,能匹配含义相近的表达,但需要更多计算资源。
- 倒排索引的构建主要是分词和“词→文档”映射,帮助系统在大规模文本中快速找到相关文档。
在实际应用中,两种方式常结合使用(即混合检索):先用关键词缩小范围,再用向量检索做更深层的语义筛选,让系统兼顾速度与语义理解。