![语义搜索](https://assets.zilliz.com/Semantic_Cache_1a593f9348.png)
语义搜索
Semantic Search.png
什么是语义搜索?
语义搜索是一种搜索技术,使用自然语言处理(NLP)和机器学习(ML)来理解用户搜索查询背后的上下文和含义。以下为语义搜索相关的一些关键术语:
自然语言处理(****NLP****)
NLP 是人工智能(AI)的一个分支,帮助计算机理解和处理人类语言。在语义搜索中会使用到 NLP 使得计算机能够理解用户搜索查询背后的含义。
机器学习(****ML****)
ML 是人工智能(AI)的一个分支。 ML 是指计算机学习数据,并通过训练提高性能。在语义搜索中使用 ML 能够帮助计算机理解用户搜索查询的上下文和意图。
语义理解
语义理解是计算机理解用户搜索查询的含义和上下文的能力。语义理解是语义搜索的关键组成部分。
什么是语义搜索引擎?
语义搜索引擎也称为向量数据库,专为语义搜索场景设计。语义搜索引擎使用特定的索引算法为一组 Embedding 向量构建索引。大多数语义搜索引擎只支持 1 种索引类型(通常是 HNSW),但 Milvus 支持 11 种不同的索引类型。使用索引和相似度类型,用户可以用语义搜索引擎查询相似的内容。
如何搭建语义搜索引擎?
以下是几种搭建语义搜索引擎的方式:
- Python 语义搜索引擎。您可以使用 Python、机器学习模型和向量索引算法(如 FAISS、HNSW 或甚至 ANNOY)在自己的数据语料上构建自定义语义搜索。点击[此处](https://zilliz.com.cn/blog/faiss-milvus-setting up)查看教程,了解如何使用 Facebook AI 相似性搜索(FAISS)实现语义搜索。
- 基于关键词的传统搜索引擎。例如 ElasticSearch 也增加了向量搜索功能。其好处是您可以轻松地将向量搜索技术添加到已经正在使用的 ElasticSearch 解决方案中。
- 像 PostgreSQL 这样的数据库解决方案已经添加了像 Pgvector 这样的扩展来支持向量搜索。
- 向量数据库。 您还可以选择使用向量数据库来实现语义搜索。借助向量数据库,您可以存储和索引机器学习算法生成的 Embedding 向量。大多数向量数据库只支持使用 HSNW 来生成索引,但是 Milvus 支持 11 种不同的索引类型,您可以根据自己的应用选择最适合的索引类型。进行向量搜索时,您需要将查询内容转换为 Embedding 向量,然后对您的数据集进行查询从而找到最相似的内容。
使用语义搜索引擎的好处
执行语义搜索有几个优点。一个好处通过语义搜索,您能够根据概念或想法进行搜索,而不是根据特定的单词或短语搜素。这样一来,您无需在搜索时思考推测合适的关键词。此外,语义搜索可以更好地理解查询意图,从而生成与用户更需要的搜索结果。
关键词搜索 vs 语义搜索
通常,关键词搜索使用像 Elasticsearch 这样的工具来搜索和排序。在 Elasticsearch 中的每个单词都存储为表示一系列数字,由每个字母的 ASCII(或 UTF)代码组成。Elasticsearch 构建了倒排索引,从而快速确定哪些文档包含用户查询的单词。然后,它使用各种评分算法在这些文档中找到最佳匹配的内容,并考虑单词频率和邻近性因素。然而,这些评分算法不考虑单词的意义,而是专注于它们的出现频率和邻近性。虽然 ASCII 表示法可以传达语义,但目前尚无高效的算法让计算机比较 ASCII 编码单词的意义与搜索结果。
另一方面,语义搜索使用机器学习模型将非结构化数据(电子邮件、图片、视频、音频文件等)转换为 Embedding 向量,将数据点表示为高维空间中的向量。接着,从众多算法中选择一种(HNSW、[FAISS](https://zilliz.com.cn/blog/faiss-milvus-setting up)、ANNOY 等)对这些向量构建索引。然后,就可以进行最近邻搜索,找到与给定查询向量相似或密切相关的项目或数据。与关键词搜索不同,语义搜索旨在高效搜索和检索与查询向量最相似或最接近的相关向量。
词汇搜索 vs 语义搜索
语义是指语言的含义或逻辑,而词汇是指一种语言中的单词或词汇。
Zilliz 是否提供语义搜索工具?
Zilliz Cloud 是基于开源向量数据库 Milvus 的全托管向量数据库。向量数据库的核心能力就是语义搜索能力,Zilliz Cloud 向量数据库专为语义搜索设计,提供以下高级功能:
- 支持数据 CRUD(创建、读取、更新、删除)操作、调节数据一致性和过滤搜索。
- 系统高可用,支持数据持久化,提供容灾恢复能力。
- 系统高度可扩展,支持负载均衡,计算和存储分离的分布式架构提供更高的可用性。
- 角色权限访问控制(RBAC),提供多语言 SDK (Python, Javascript, C, Ruby, Go) ,内置监控告警功能。