SQL 데이터베이스 워크로드를 위한 임베딩 설계
팁 (조언)
자세한 내용은 텍스트 및 이미지 탭을 참조하세요.
포함은 텍스트 조각 간의 유사성을 비교할 수 있도록 데이터를 벡터로 나타냅니다. 포함을 디자인하는 방법은 나중에 벡터를 생성하고 쿼리할 때 관련성, 성능 및 비용에 영향을 줍니다.
SQL Server는 워크플로 포함을 지원하는 기본 제공 AI 함수를 제공합니다. 일반적인 벡터 검색 패턴은 포함이 생성되기 전에 텍스트를 준비하는 방법을 안내하는 데 도움이 됩니다.
벡터를 만드는 방법 이해
하지만 SQL 데이터베이스와의 AI 통합 컨텍스트에서 벡터 라는 용어는 무엇을 의미하나요?
AI 모델은 SQL 자체가 아닌 벡터를 만듭니다. 모델은 텍스트를 읽고 해당 텍스트의 의미를 나타내는 숫자 목록을 반환하도록 학습되었습니다.
SQL이 임베딩 모델에 텍스트를 보내면 모델은 나중에 다른 벡터와 비교할 수 있도록 SQL이 저장하는 벡터를 반환합니다.
예를 들어 "경량 하이킹 백팩" 이라는 텍스트가 포함 모델로 전송되면 모델은 다음을 반환할 수 있습니다.
[0.12, -0.87, 0.45, 0.31, …]
"당일 하이킹을 위한 컴팩트 백팩"과 같은 관련 문장은 다음과 유사한 숫자 목록을 생성합니다.
[0.10, -0.85, 0.47, 0.29, …]
벡터는 비슷해 보이기 때문에 SQL은 두 텍스트 부분을 관련 항목으로 처리할 수 있습니다.
임베딩에 포함할 데이터를 식별하십시오
임베딩은 설명, 제목 또는 기타 자유 형식 텍스트 필드와 같이 의미를 전달하는 텍스트를 대표할 때 가장 잘 작동합니다.
식별자, 숫자 값 또는 작업 메타데이터를 저장하는 열은 일반적으로 의미 체계 값을 추가하지 않으며 제외해야 합니다. 포함을 의미 있는 텍스트로 제한하면 토큰 사용량이 줄어들고 유사성 결과가 향상됩니다.
이 단계의 디자인 선택은 정보 임베딩이 캡처하는 내용과 기본 데이터를 얼마나 잘 표현하는지를 결정합니다.
입력 크기 및 구조 제어
포함 모델은 토큰화된 입력에서 작동하며 단일 요청에서 처리할 수 있는 텍스트의 양에 제한을 적용합니다. 토큰은 모델이 단위로 처리하는 단어 또는 단어의 일부와 같은 작은 텍스트 조각입니다. 텍스트 값이 긴 경우 더 작은 단위로 나누기가 필요한 경우가 많습니다.
SQL Server는 워크플로 포함을 위한 텍스트를 준비하는 데 도움이 되는 기본 제공 AI 함수를 통해 이 패턴을 지원합니다. 입력 크기를 제어하여 모델 제한 내에서 텍스트를 유지하고 각 포함이 명확하고 포커스가 있는 콘텐츠를 나타내는지 확인할 수 있습니다.
잘 구성된 입력은 관련 없는 아이디어를 함께 포함하는 것을 방지하여 유사성 결과의 품질을 줄일 수 있습니다.
청크 분할 전략 디자인
청크 분할은 더 큰 텍스트 값을 더 작은 세그먼트로 나누는 방법을 정의합니다. 청크 분할 전략은 컨텍스트 보존과 처리 정밀도 사이의 균형을 최적화합니다.
청크의 크기가 지나치게 클 경우, 토큰 제한을 넘어서거나 핵심적인 의미가 흐려질 위험이 있습니다. 너무 작은 청크는 중요한 컨텍스트를 잃을 수 있습니다. 목표는 단위를 효율적으로 처리하면서 의미를 유지하는 것입니다.
실제로 청크는 SQL에서 텍스트를 분할할 때 적용하는 규칙에 의해 정의됩니다. 이러한 규칙은 일반적으로 최대 문자 수와 같이 각 청크로 들어가는 텍스트의 양과 분할이 허용되는 위치를 제어합니다.
AI_GENERATE_CHUNKS(SOURCE = description, CHUNK_TYPE = FIXED, CHUNK_SIZE = 500)
원본 테이블 근처의 SQL에서 직접 청크 규칙을 정의하면 애플리케이션 코드를 수정하는 대신 쿼리를 조정하여 청크 크기 또는 분할 동작을 변경할 수 있습니다.
SQL을 사용하여 포함 디자인 적용
다음 예제에서는 더 작은 단위로 텍스트를 나누어 임베딩 생성을 준비하는 개념 패턴을 보여 줍니다.
SELECT
id,
c.chunk
FROM dbo.documents
CROSS APPLY
AI_GENERATE_CHUNKS(SOURCE = description, CHUNK_TYPE = FIXED, CHUNK_SIZE = 500) AS c;
이 예제에서 열의 description 텍스트는 최대 500자의 청크로 나뉩니다. 각 청크는 추후에 임베딩 함수에 전달되어, 임베딩이 원래 콘텐츠의 집중된 부분을 잘 나타내도록 할 수 있습니다.
예를 들어, description 열에 행에 다음 텍스트가 포함된 경우
"Lightweight backpack designed for long day hikes in warm weather."
청크 함수는 다음과 같은 여러 청크를 생성할 수 있습니다.
"Lightweight backpack designed for long day hikes""in warm weather."
각 청크는 쿼리에 의해 별도의 행으로 반환됩니다. 그런 다음 이러한 작은 부분을 포함 함수에 개별적으로 전달하여 각 포함이 원본 텍스트의 포커스가 있는 부분을 나타내도록 할 수 있습니다.
팁 (조언)
한 가지 디자인 패턴은 원본 텍스트 데이터와 별도의 테이블에 벡터를 저장하는 것입니다. 전용 embeddings 테이블을 사용하면 원본 데이터에 영향을 주지 않고 벡터에서 사용하는 공간의 양을 더 쉽게 추적하고 포함을 다시 작성할 수 있습니다.
주요 내용
임베딩 품질은 어떤 모델을 실행하기 전에 내리는 결정에 따라 달라집니다. 벡터 검색 결과의 유용성은 적절한 열을 선택하고 긴 텍스트를 집중된 세그먼트로 분할하는 방식에 따라 AI_GENERATE_CHUNKS 결정됩니다. 이러한 디자인 선택을 조기에 적용하면 생성 및 스토리지 포함으로 이동할 때 비용이 많이 드는 재작업을 방지할 수 있습니다.