VECTOR_NORMALIZE (Transact-SQL) (预览版)

适用于:Azure SQL 数据库

注意

该数据类型为预览版,可能会发生变化。 请务必阅读联机服务的服务级别协议 (SLA) 文档中的预览版使用条款。

VECTOR_NORMALIZE 采用向量作为输入并返回规范化向量,该向量缩放为给定 规范类型中的长度为 1。

这种标准化对于各种人工智能应用程序至关重要,其中矢量表示不同形式的数据,例如视觉内容、文本信息或音频信号。 通过规范化向量,我们确保其比例的统一性,这对于依赖于测量矢量距离或分组和区分数据点的操作特别有用。

虽然 Azure OpenAI 的模型提供规范化向量,但还有其他模型和框架,其中矢量不会自动规范化。 例如,在通常用于自然语言处理任务的 Gensim 库中,默认情况下,矢量并不总是规范化。

用户通常需要手动规范化向量或使用库提供的特定函数,以确保向量具有单位长度。

一般情况下,使用机器学习模型或矢量嵌入时,请务必检查模型的文档或输出以确定矢量是否规范化。 如果应用程序需要规范化,则默认情况下模型不提供规范化向量时,可能需要将其实现为单独的步骤。

例如,如果想要使用 Euclidean 规范(这是最常见的规范类型)的规范化向量,可以使用:

SELECT VECTOR_NORMALIZE ( vector_column, 'norm2' )
FROM ...

语法

Transact-SQL 语法约定

VECTOR_NORMALIZE ( vector_column, norm_type )

参数

vector_column

计算结果为向量的表达式。 此列必须是 矢量 数据类型。

norm_type

一个字符串,其名称为用于计算给定向量的规范类型。 支持以下规范类型:

  • norm1 - 1-norm,它是矢量组件的绝对值之和。
  • norm2 - 2-norm,也称为 Euclidean Norm,它是矢量分量平方和的平方根。
  • norminf - 无穷大规范,它是矢量组件的绝对值的最大。

返回值

结果是一个矢量,其方向与输入向量相同,但长度为 1。

如果输入为 NULL,则返回的结果也是 NULL

如果norm_type不是有效的规范类型并且vector_column不是矢量数据类型,则返回错误。

示例

示例 1

规范化向量:

CREATE TABLE dbo.vectors
(
  id INT PRIMARY KEY,
  v VECTOR(3) NOT NULL
);

INSERT INTO dbo.vectors (ID, v) VALUES 
(1, '[0.1, -2, 42]'),
(2, '[2, 0.1, -42]');

SELECT id, VECTOR_NORMALIZE(v, 'norm2') AS nv FROM dbo.vectors; 

示例 2

DECLARE @v VECTOR(3) = '[1, 2, 3]';

SELECT VECTOR_NORMALIZE(@v, 'norm1'), VECTOR_NORMALIZE(@v, 'norminf');