向量嵌入¶
嵌入 是指将高维数据(如非结构化文本)简化为维数较少的表示形式(如向量)。现代深度学习技术可以从文本和图像等非结构化数据创建向量嵌入(即结构化的数字表示形式),同时在这些数据产生的向量几何中保留相似性和相异性的语义概念。
下图是自然语言文本的向量嵌入和几何相似性的简化示例。在实践中,神经网络产生的嵌入向量具有数百甚至数千个维度,而不是这里所示的两个维度,但概念是相同的。语义相似的文本产生“指向”相同的大致方向的向量。
许多应用场景可以从查找与目标相似的文本或图像的功能中受益。例如,当新的支持工单记录到服务台时,支持团队可以从查找已解决的类似工单的功能中受益。在此应用场景中使用嵌入向量的好处是,它超越了关键字匹配而进化到语义相似性,因此,即使相关记录未确切包含相同的单词,也能找到这些记录。
Snowflake Cortex 提供 EMBED_TEXT_768 和 EMBED_TEXT_1024 函数,还有几种 向量函数 以便针对各种应用程序进行比较。
文本嵌入模型¶
Snowflake 提供以下文本嵌入模型。有关详细信息,请参见 下文。
模型名称 |
输出维度 |
上下文窗口 |
语言支持 |
|---|---|---|---|
snowflake-arctic-embed-m-v1.5 |
768 |
512 |
仅限英语 |
snowflake-arctic-embed-m |
768 |
512 |
仅限英语 |
snowflake-arctic-embed-l-v2.0 |
1024 |
512 |
多语言 |
受支持的模型可能会产生不同的 费用。
关于向量相似性函数¶
向量之间的相似性度量是语义比较中的基本操作。Snowflake Cortex 提供了四个向量相似性函数:VECTOR_INNER_PRODUCT、VECTOR_L1_distance、VECTOR_L2_DISTANCE 和 VECTOR_COSINE_SIMILARITY。要了解有关这些函数的更多信息,请参阅 向量函数。
有关语法和用法的详细信息,请参阅每个函数的参考页面:
示例¶
以下示例使用向量相似性函数。
此 SQL 示例使用 VECTOR_INNER_PRODUCT 函数来确定表中的哪些向量在列 a 和列 b 之间彼此最接近:
此 SQL 示例调用 VECTOR_COSINE_SIMILARITY 函数查找接近 [1,2,3] 的向量:
Snowflake Python Connector¶
这些示例展示了如何将 VECTOR 数据类型和向量相似性函数与 Python Connector 一起使用。
备注
Snowflake Python Connector 版本 3.6 中引入了对 VECTOR 类型的支持。
Snowpark Python¶
这些示例展示了如何将 VECTOR 数据类型和向量相似性函数与 Snowpark Python 库一起使用。
备注
Snowpark Python 版本 1.11 中引入了对 VECTOR 类型的支持。
Snowpark Python 库不支持 VECTOR_COSINE_SIMILARITY 函数。
从文本创建向量嵌入¶
要从一段文本创建向量嵌入,您可以使用 EMBED_TEXT_768 (SNOWFLAKE.CORTEX) 或 EMBED_TEXT_1024 (SNOWFLAKE.CORTEX) 函数,具体取决于模型的输出维度。此函数返回给定英语文本的向量嵌入。此向量可与 向量比较函数 一起使用,以确定两个文档的语义相似性。
小技巧
您可以通过 Snowpark Container Services 使用其他嵌入模型。有关更多信息,请参阅 嵌入文本容器服务 (https://github.com/Snowflake-Labs/sfguide-text-embedding-snowpark-container-service)。
重要
EMBED_TEXT_768 和 EMBED_TEXT_1024 是 Cortex LLM 函数,因此,使用此函数时要遵守与其他 Cortex LLM 函数相同的访问控制。有关访问这些函数的说明,请参阅 Cortex LLM 函数所需权限。
用例示例¶
本部分介绍如何使用嵌入、向量相似性函数和 VECTOR 数据类型来实现常见用例,如向量相似性搜索和检索增强生成 (RAG)。
向量相似性搜索¶
要实施对语义相似文档的搜索,首先存储要搜索的文档的嵌入。在添加或编辑文档时保持嵌入是最新的。
在此示例中,文档是支持代表记录的呼叫中心问题。问题存储在表 issues 中名为 issue_text 的列中。以下 SQL 将创建一个新的向量列,以保存问题的嵌入。
要执行搜索,请创建搜索词或目标文档的嵌入,然后使用向量相似性函数找到具有类似嵌入的文档。使用 ORDER BY 和 LIMIT 子句选择前 k 个匹配的文档,也可以选择使用 WHERE 条件指定最小相似性。
一般来说,对向量相似性函数的调用应出现在 SELECT 子句中,而不是 WHERE 子句中。这样一来,只会对 WHERE 子句指定的行调用该函数,从而可能基于其他一些准则限制查询,而不是对表中的所有行进行操作。要在 WHERE 子句中测试相似性值,请在 SELECT 子句中为 VECTOR_COSINE_SIMILARITY 调用定义列别名,并在 WHERE 子句的条件中使用该别名。
此示例查找过去 90 天内最多五个匹配搜索词的问题,并假设与搜索词的余弦相似度至少为 0.7。
成本注意事项¶
Snowflake Cortex LLM 函数(包括 EMBED_TEXT_768 和 EMBED_TEXT_1024)根据处理的词元数产生计算成本。
备注
词元是 Snowflake Cortex LLM 函数处理的最小文本单位,大约等于四个字符的文本。原始输入或输出文本与词元的等价性可能因模型而异。
对于 EMBED_TEXT_768 和 EMBED_TEXT_1024 函数,仅将输入词元计入可计费总额。
向量相似性函数不会产生基于词元的成本。
有关 Cortex LLM 函数计费的更多信息,请参阅 Cortex LLM 函数成本注意事项。有关计算成本的一般信息,请参阅 了解计算成本。