벡터 데이터 형식 및 벡터 검색 구현

완료됨

SQL Server 2025 에는 벡터 데이터 형식 및 벡터 검색에 대한 기본 지원이 포함되어 있습니다. 이 기능을 사용하면 관계형 데이터와 함께 고차원 벡터 포함을 저장하고 유사성 검색을 수행하여 데이터 내에서 의미 체계 관계를 이해하는 애플리케이션을 빌드할 수 있습니다.

벡터 검색은 기존 데이터베이스 쿼리의 제한 사항을 해결합니다. 기존 데이터베이스는 정확히 일치하는 쿼리와 구조화된 쿼리에서 탁월하지만 컨텍스트와 의미를 이해하는 데 어려움을 겪습니다. 벡터 검색은 정확한 키워드를 공유하지 않는 경우에도 개념적으로 유사한 항목을 찾을 수 있는 의미 체계 이해를 사용하도록 설정하여 이를 변경합니다. 예를 들어 벡터 포함이 비슷한 의미론적 의미를 포착하기 때문에 "편안한 운동화"를 검색하면 "쿠션 운동화"로 묘사된 제품을 찾을 수 있습니다.

개발자의 경우 별도의 벡터 데이터베이스 또는 복잡한 데이터 동기화 프로세스를 관리하지 않고도 지능형 애플리케이션을 빌드할 수 있습니다. SQL Server에서 관계형 데이터와 함께 벡터를 유지하면 ACID 규정 준수를 유지하고, 기존 보안 정책을 사용하고, 친숙한 T-SQL 구문을 사용하고, 아키텍처를 간소화할 수 있습니다. 이 통합은 다음과 같은 시나리오에 적용됩니다.

  • 의미 체계 검색 및 권장 사항: 키워드가 아닌 의미에 따라 관련 제품, 문서 또는 콘텐츠 찾기
  • 질문 답변 시스템: 엔터프라이즈 데이터에 대한 자연어 쿼리를 이해하는 파워 챗봇 및 가상 도우미
  • 변칙 검색: 일반적인 동작과 의미상 거리가 먼 데이터 요소를 찾아 비정상적인 패턴을 식별합니다.
  • 콘텐츠 중복 제거: 유사 항목 또는 중복 항목이 다르게 표현된 경우에도 검색
  • 개인 설정 엔진: 미묘한 유사성에 따라 제품 또는 콘텐츠에 사용자 기본 설정 일치

벡터 데이터 형식 탐색

SQL Server 2025의 벡터 데이터 형식 은 부동 소수점 숫자 배열을 효율적으로 저장하도록 설계되었습니다. 벡터는 일반적으로 각 차원이 데이터의 특정 기능 또는 의미 체계 특성을 캡처하는 AI 모델에서 생성된 포함을 나타내는 데 사용됩니다.

주요 특성 살펴보기

  • 최적화된 스토리지 형식: 벡터는 내부적으로 최적화된 이진 형식으로 저장되지만 사용 편의성과 호환성을 위해 JSON 배열로 노출됩니다.
  • 유연한 정밀도: 벡터의 각 요소는 단정밀도(4 바이트) 또는 반정밀도(2 바이트) 부동 소수점 값을 사용하여 저장할 수 있으므로 정확도와 스토리지 효율성의 균형을 맞출 수 있습니다.
  • 차원 지원: SQL Server 2025는 단정밀도의 경우 최대 1998개 차원, 반정밀도의 경우 3,996차원의 벡터를 지원하여 광범위한 포함 모델을 수용합니다.

벡터 만들기 및 저장

JSON 배열을 데이터 형식으로 캐스팅하여 벡터를 만들 수 있습니다 vector . 예제는 다음과 같습니다.

-- Create a vector from a JSON array
DECLARE @v1 VECTOR(3) = '[1.0, -0.2, 30]';
DECLARE @v2 VECTOR(3) = JSON_ARRAY(1.0, -0.2, 30);

SELECT @v1 AS v1, @v2 AS v2;

이 코드는 JSON 문자열 리터럴을 직접 캐스팅하거나 함수를 사용하여 JSON_ARRAY 3차원 벡터를 만드는 두 가지 방법을 보여 줍니다. 두 메서드 모두 벡터 데이터 형식에 값 [1.0, -0.2, 30]을 저장하여 동일한 결과를 생성합니다.

테이블에 벡터를 저장하려면 다음을 수행합니다.

CREATE TABLE products (
    product_id INT PRIMARY KEY,
    product_name NVARCHAR(100),
    description NVARCHAR(MAX),
    embedding VECTOR(1536)  -- Common dimension for OpenAI embeddings
);

이 코드는 1536차원 벡터 포함과 함께 제품 정보를 저장하는 테이블을 만듭니다. 1536의 차원 크기는 일반적으로 OpenAI의 텍스트 포함 모델에서 사용되므로 이 테이블은 제품 설명에서 생성된 embeddings를 저장할 준비가 되어 있습니다.

벡터를 JSON으로 변환

표시 또는 처리를 위해 벡터를 JSON 배열로 쉽게 변환할 수 있습니다.

DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT 
    CAST(@v AS NVARCHAR(MAX)) AS string_representation,
    CAST(@v AS JSON) AS json_representation;

이 코드는 벡터를 다시 읽을 수 있는 형식으로 변환합니다. CAST NVARCHAR(MAX) 벡터를 문자열로 반환하는 동시에 CAST JSON 배열로 반환합니다JSON. 이 배열은 애플리케이션 및 API와의 상호 운용성에 유용합니다.

정확한 최근접 이웃 검색 수행(k-NN)

정확히 가장 가까운 인접 항목(k-NN) 검색에는 쿼리 벡터와 데이터 세트의 모든 벡터 사이의 거리를 계산한 다음 가장 가까운 k 일치 항목을 반환하는 작업이 포함됩니다. 이 메서드는 정확한 결과를 보장하지만 큰 데이터 세트에 대해 계산 집약적일 수 있습니다.

VECTOR_DISTANCE 함수 사용

이 함수는 VECTOR_DISTANCE 지정된 거리 메트릭을 사용하여 두 벡터 간의 유사성을 측정합니다.

DECLARE @query_vector VECTOR(1536) = AI_GENERATE_EMBEDDINGS(
    N'Pink Floyd music style' 
    USE MODEL Ada2Embeddings
);

SELECT TOP (10) 
    product_id, 
    product_name,
    VECTOR_DISTANCE('cosine', @query_vector, embedding) AS distance
FROM products
ORDER BY distance;

이 쿼리는 Ada2Embeddings 모델을 사용하여 텍스트 "Pink Floyd 음악 스타일"에 대한 포함을 생성한 다음, 쿼리와 가장 유사한 포함이 있는 10개의 제품을 찾습니다. 이 함수는 VECTOR_DISTANCE 쿼리 벡터와 각 제품의 포함 사이의 코사인 거리를 계산하며, 더 작은 거리는 더 큰 유사성을 나타냅니다.

거리 메트릭 선택

SQL Server 2025는 다음과 같은 몇 가지 거리 메트릭을 지원합니다.

  • 코사인 유사성: 벡터 사이의 각도를 측정하여 텍스트 포함에 적합합니다.
  • 유클리드 거리: 벡터 공간에서 직선 거리 측정
  • 점 제품: 정규화된 벡터에 유용합니다.

정확한 검색은 다음과 같은 경우에 권장됩니다.

  • 검색할 벡터가 50,000개 미만입니다.
  • 쿼리 조건자는 데이터 세트를 관리 가능한 크기로 필터링합니다.
  • 완벽한 회수(100% 정확도)가 필요합니다.
  • 추가 계산 비용은 허용됩니다.

ANN(근사 가장 인접한 항목) 검색 구현

더 큰 데이터 세트의 경우 가장 가까운 인접 항목(ANN) 검색은 속도와 정확도 사이의 균형을 제공합니다. SQL Server 2025는 효율적인 벡터 탐색을 위해 그래프 기반 인덱스를 만드는 DiskANN 알고리즘을 사용하여 ANN을 구현합니다.

리콜 이해하기

리콜은 ANN 알고리즘이 정확한 탐색과 비교하여 식별하는 실제 인접 항목의 비율을 측정합니다. 1.0(100%)의 회수는 대략적인 검색이 정확한 검색과 동일한 결과를 반환한다는 것을 의미합니다. 실제로 0.95를 초과하는 회수 값은 AI 애플리케이션에 뛰어난 결과를 제공하는 동시에 상당한 성능 향상을 제공하는 경우가 많습니다.

벡터 인덱스 만들기

ANN 검색을 사용하도록 설정하려면 벡터 열에 벡터 인덱스를 생성합니다.

CREATE VECTOR INDEX idx_product_embedding 
ON products(embedding);

이 코드는 DiskANN 알고리즘을 사용하여 포함 열에 벡터 인덱스 만들기 인덱스는 효율적인 벡터 탐색을 위한 그래프 구조를 만들어 큰 데이터 세트에 대한 근사한 인접 검색의 성능을 향상시킵니다.

SQL Server 2025의 벡터 인덱스:

  • 효율적인 그래프 기반 검색을 위해 DiskANN 알고리즘 사용
  • 제한된 메모리 및 CPU 리소스 지원
  • 디스크 I/O, 메모리 사용량 및 쿼리 성능 균형 조정
  • 데이터가 변경됨에 따라 자동으로 업데이트

VECTOR_SEARCH 함수 사용

VECTOR_SEARCH 함수는 근사 가장 인접한 항목 검색을 수행합니다.

DECLARE @query_vector VECTOR(1536) = AI_GENERATE_EMBEDDINGS(
    N'Pink Floyd music style' 
    USE MODEL Ada2Embeddings
);

SELECT 
    t.product_id,
    t.product_name,
    s.distance
FROM
    VECTOR_SEARCH(
        TABLE = products AS t, 
        COLUMN = embedding, 
        SIMILAR_TO = @query_vector, 
        METRIC = 'cosine', 
        TOP_N = 10
    ) AS s
ORDER BY s.distance;

이 쿼리는 이전에 만든 벡터 인덱스를 사용하여 근사한 인접 검색을 수행합니다. 이 함수는 VECTOR_SEARCH DiskANN 알고리즘을 사용하여 모든 벡터를 검사하지 않고 가장 유사한 10개의 제품을 찾아 높은 정확도를 유지하면서 큰 데이터 세트에 대한 성능 향상을 제공합니다.

성능 이점 고려

ANN 검색 제공:

  • 빠른 쿼리 실행: 특히 수백만 개의 벡터가 있는 데이터 세트의 경우
  • 리소스 사용 감소: 정확한 검색에 비해 CPU 및 메모리 사용량 감소
  • 확장성: 대규모 벡터 데이터 세트를 효율적으로 처리합니다.
  • 높은 재현율: 일반적으로 95% 이상의 재현율을 달성하여 품질을 보장합니다.

하이브리드 검색 시나리오 빌드

SQL Server 2025는 하이브리드 검색 시나리오에 대한 기존 SQL 작업과 벡터 검색을 결합하는 것을 지원합니다.

기존 필터를 적용하는 동안 벡터를 사용하여 의미 체계 검색을 수행할 수 있습니다.

DECLARE @query_vector VECTOR(1536) = AI_GENERATE_EMBEDDINGS(
    N'comfortable running shoes' 
    USE MODEL Ada2Embeddings
);

SELECT 
    t.product_id,
    t.product_name,
    t.category,
    t.price,
    s.distance
FROM
    VECTOR_SEARCH(
        TABLE = products AS t, 
        COLUMN = embedding, 
        SIMILAR_TO = @query_vector, 
        METRIC = 'cosine', 
        TOP_N = 20
    ) AS s
WHERE 
    t.category = 'Footwear'
    AND t.price BETWEEN 50 AND 150
ORDER BY s.distance;

이 하이브리드 검색은 의미 체계 유사성 검색과 기존 SQL 필터링을 결합합니다. 첫째, "편안한 운동화"와 의미상 가장 유사한 20개의 제품을 찾은 다음, 50 USD에서 150 USD 사이의 신발 품목만 포함하도록 해당 결과를 필터링합니다. 이 방법을 사용하면 의미 체계 이해를 사용하는 동안 정확한 대상 지정을 수행할 수 있습니다.

전체 텍스트 검색을 벡터 검색과 결합하여 포괄적인 결과를 확인합니다.

DECLARE @query_vector VECTOR(1536) = AI_GENERATE_EMBEDDINGS(
    N'sustainable materials' 
    USE MODEL Ada2Embeddings
);

SELECT 
    t.product_id,
    t.product_name,
    s.distance,
    fts.RANK AS text_rank
FROM
    VECTOR_SEARCH(
        TABLE = products AS t, 
        COLUMN = embedding, 
        SIMILAR_TO = @query_vector, 
        METRIC = 'cosine', 
        TOP_N = 50
    ) AS s
INNER JOIN CONTAINSTABLE(products, description, 'sustainable OR eco-friendly') AS fts
    ON t.product_id = fts.[KEY]
ORDER BY (s.distance * 0.6) + ((1.0 - fts.RANK/1000.0) * 0.4);

이 쿼리는 벡터 검색과 전체 텍스트 검색을 결합합니다. 벡터 포함을 사용하여 "지속 가능한 재료"와 의미상 유사한 제품을 찾은 다음 설명에서 "지속 가능한" 또는 "환경 친화적"이라는 키워드에 대한 전체 텍스트 검색 결과와 조인합니다. 최종 순위는 두 점수를 가중 수식(의미 체계 유사성 60%% 키워드 일치)과 결합합니다.

모범 사례 적용

SQL Server 2025에서 벡터 검색을 구현하는 경우:

  • 올바른 정밀도를 선택합니다. 스토리지가 중요한 경우 더 큰 차원에 반정밀도 사용
  • 전략적으로 인덱스: 자주 검색되는 열에 벡터 인덱스 만들기
  • 재현율 모니터링: 사용 사례에 알맞은 재현율을 보장하기 위해 ANN 쿼리를 테스트합니다.
  • 쿼리 최적화: 적절한 필터를 사용하여 벡터 작업 전에 검색 공간 줄이기
  • 일괄 처리 작업: 성능을 향상시키기 위해 임베딩을 일괄적으로 생성하고 삽입합니다.

이러한 벡터 기능을 사용하면 의미 체계 관계를 이해하고, 지능형 권장 사항을 제공하고, 신뢰할 수 있는 SQL Server 플랫폼 내에서 자연어 검색 환경을 제공하는 AI 기반 애플리케이션을 빌드할 수 있습니다.