생성 데이터 인텔리전스

엔터프라이즈 데이터에서 가치 창출: Text2SQL 및 생성 AI 모범 사례 | 아마존 웹 서비스

시간

생성적 AI(Generative AI)는 AI 분야에서 많은 잠재력을 열었습니다. 우리는 텍스트 생성, 코드 생성, 요약, 번역, 챗봇 등을 포함한 다양한 용도를 확인하고 있습니다. 진화하고 있는 분야 중 하나는 자연어 처리(NLP)를 사용하여 직관적인 SQL 쿼리를 통해 데이터에 액세스할 수 있는 새로운 기회를 여는 것입니다. 비즈니스 사용자와 데이터 분석가는 복잡한 기술 코드를 다루는 대신 일반 언어로 데이터 및 통찰력과 관련된 질문을 할 수 있습니다. 기본 목표는 자연어 텍스트에서 SQL 쿼리를 자동으로 생성하는 것입니다. 이를 위해 텍스트 입력은 구조화된 표현으로 변환되고, 이 표현에서 데이터베이스에 액세스하는 데 사용할 수 있는 SQL 쿼리가 생성됩니다.

이 게시물에서는 Text to SQL(Text2SQL)에 대한 소개를 제공하고 사용 사례, 과제, 디자인 패턴 및 모범 사례를 살펴봅니다. 구체적으로 다음 사항을 논의합니다.

  • Text2SQL이 필요한 이유
  • Text to SQL의 주요 구성 요소
  • 자연어 또는 Text to SQL에 대한 신속한 엔지니어링 고려 사항
  • 최적화 및 모범 사례
  • 아키텍처 패턴

Text2SQL이 필요한 이유는 무엇입니까?

오늘날 기존의 데이터 분석, 데이터 웨어하우징, 데이터베이스에서는 대량의 데이터를 사용할 수 있으므로 대다수 조직 구성원이 이를 쿼리하거나 이해하기 어려울 수 있습니다. Text2SQL의 주요 목표는 자연어로 쿼리를 제공할 수 있는 비기술적인 사용자가 쿼리 데이터베이스에 더 쉽게 액세스할 수 있도록 하는 것입니다.

NLP SQL을 사용하면 비즈니스 사용자는 다음과 같은 자연어로 질문을 입력하거나 말하여 데이터를 분석하고 답변을 얻을 수 있습니다.

  • “지난 달 각 제품의 총 판매량을 보여주세요”
  • “어떤 제품이 더 많은 수익을 창출했나요?”
  • “지역별 고객 비율은 얼마나 되나요?”

아마존 기반암 Gen AI 애플리케이션을 쉽게 구축하고 확장할 수 있도록 단일 API를 통해 고성능 FM(기반 모델)을 선택할 수 있는 완전 관리형 서비스입니다. 위에 나열된 질문과 유사한 질문을 기반으로 SQL 쿼리를 생성하고 조직의 구조화된 데이터를 쿼리하고 쿼리 응답 데이터에서 자연어 응답을 생성하는 데 활용할 수 있습니다.

SQL에 대한 텍스트의 주요 구성 요소

Text-to-SQL 시스템에는 자연어 쿼리를 실행 가능한 SQL로 변환하는 여러 단계가 포함됩니다.

  • 자연어 처리:
    • 사용자가 입력한 쿼리를 분석합니다.
    • 핵심 요소와 의도 추출
    • 구조화된 형식으로 변환
  • SQL 생성:
    • 추출된 세부정보를 SQL 구문에 매핑
    • 유효한 SQL 쿼리 생성
  • 데이터베이스 쿼리:
    • 데이터베이스에서 AI 생성 SQL 쿼리 실행
    • 결과 검색
    • 사용자에게 결과를 반환합니다.

LLM(대형 언어 모델)의 주목할만한 기능 중 하나는 데이터베이스용 SQL(구조적 쿼리 언어)을 포함한 코드 생성입니다. 이러한 LLM을 활용하여 자연어 질문을 이해하고 해당 SQL 쿼리를 출력으로 생성할 수 있습니다. LLM은 더 많은 데이터가 제공됨에 따라 상황별 학습 및 미세 조정 설정을 채택함으로써 이점을 얻을 수 있습니다.

다음 다이어그램은 기본 Text2SQL 흐름을 보여줍니다.

텍스트 2 SQL 상위 수준 프로세스 흐름

SQL에 대한 자연어에 대한 신속한 엔지니어링 고려 사항

프롬프트는 LLM을 사용하여 자연어를 SQL 쿼리로 변환할 때 매우 중요하며 프롬프트 엔지니어링에 대한 몇 가지 중요한 고려 사항이 있습니다.

유효한 신속한 엔지니어링 SQL 시스템에 자연어를 개발하는 데 핵심입니다. 명확하고 간단한 프롬프트는 언어 모델에 대한 더 나은 지침을 제공합니다. 사용자가 관련 데이터베이스 스키마 세부 정보와 함께 SQL 쿼리를 요청하는 컨텍스트를 제공하면 모델이 의도를 정확하게 번역할 수 있습니다. 자연어 프롬프트와 해당 SQL 쿼리의 몇 가지 주석이 달린 예를 포함하면 모델이 구문 호환 출력을 생성하도록 안내하는 데 도움이 됩니다. 또한 모델이 처리 중에 유사한 사례를 검색하는 RAG(검색 증강 생성)를 통합하면 매핑 정확도가 더욱 향상됩니다. 모델에 충분한 지침, 컨텍스트, 예제 및 검색 기능 보강을 제공하는 잘 설계된 프롬프트는 자연어를 SQL 쿼리로 안정적으로 변환하는 데 중요합니다.

다음은 백서에 있는 데이터베이스의 코드 표현이 포함된 기준 프롬프트의 예입니다. 대규모 언어 모델의 Few-shot Text-to-SQL 기능 향상: 프롬프트 설계 전략에 관한 연구.

/* Given the following database schema : */
CREATE TABLE IF NOT EXISTS " gymnast " ( " Gymnast_ID " int , " Floor_Exercise_Points " real , " Pommel_Horse_Points " real , " Rings_Points " real , " Vault_Points " real , " Parallel_Bars_Points " real , " Horizontal_Bar_Points " real , " Total_Points " real , PRIMARY KEY ( " Gymnast_ID " ) , FOREIGN KEY ( " Gymnast_ID " ) REFERENCES " people " ( " People_ID " ) ) ; CREATE TABLE IF NOT EXISTS " people " ( " People_ID " int , " Name " text , " Age " real , " Height " real , " Hometown " text , PRIMARY KEY ( " People_ID " ) ) ; /* Answer the following : Return the total points of the gymnast with the lowest age .
*/ select t1 . total_points from gymnast as t1 join people as t2 on t1 . gymnast_id = t2 .
people_id order by t2 . age asc limit 1

이 예에서 설명된 것처럼 프롬프트 기반 소수 학습은 프롬프트 자체에 주석이 달린 몇 가지 예를 모델에 제공합니다. 이는 모델에 대한 자연어와 SQL 간의 대상 매핑을 보여줍니다. 일반적으로 프롬프트에는 자연어 쿼리와 이에 상응하는 SQL 문을 표시하는 약 2~3개의 쌍이 포함됩니다. 이러한 몇 가지 예는 모델이 광범위한 훈련 데이터 없이도 자연어에서 구문 호환 SQL 쿼리를 생성하도록 안내합니다.

미세 조정과 신속한 엔지니어링

SQL 시스템에 자연어를 구축할 때 모델을 미세 조정하는 것이 올바른 기술인지 아니면 효과적인 프롬프트 엔지니어링이 올바른 방법인지에 대해 종종 논의하게 됩니다. 올바른 요구 사항에 따라 두 가지 접근 방식을 모두 고려하고 선택할 수 있습니다.

    • 미세 조정 – 기준 모델은 대규모 일반 텍스트 코퍼스에 대해 사전 훈련된 후 다음을 사용할 수 있습니다. 명령어 기반 미세 조정이는 레이블이 지정된 예제를 사용하여 text-SQL에서 사전 훈련된 기초 모델의 성능을 향상시킵니다. 이는 모델을 대상 작업에 맞게 조정합니다. 미세 조정은 최종 작업에서 모델을 직접 교육하지만 많은 텍스트-SQL 예제가 필요합니다. LLM을 기반으로 감독된 미세 조정을 사용하여 text-to-SQL의 효율성을 향상시킬 수 있습니다. 이를 위해 다음과 같은 여러 데이터 세트를 사용할 수 있습니다. 거미, 위키SQL, 추적, BIRD-SQLCoSQL.
    • 신속한 엔지니어링 – 모델은 대상 SQL 구문을 프롬프트하도록 설계된 프롬프트를 완료하도록 훈련되었습니다. LLM을 사용하여 자연어에서 SQL을 생성할 때 프롬프트에 명확한 지침을 제공하는 것은 모델의 출력을 제어하는 ​​데 중요합니다. 열, 스키마를 가리키는 등 다양한 구성 요소에 주석을 추가한 다음 생성할 SQL 유형을 지시하는 프롬프트에서. 이는 모델에 SQL 출력 형식을 지정하는 방법을 알려주는 지침과 같은 역할을 합니다. 다음 프롬프트는 테이블 열을 지정하고 MySQL 쿼리를 생성하도록 지시하는 예를 보여줍니다.
Table offices, columns = [OfficeId, OfficeName]
Table employees, columns = [OfficeId, EmployeeId,EmployeeName]
Create a MySQL query for all employees in the Machine Learning Department

Text-to-SQL 모델에 대한 효과적인 접근 방식은 먼저 작업별 세부 조정 없이 기본 LLM으로 시작하는 것입니다. 그러면 잘 만들어진 프롬프트를 사용하여 기본 모델을 조정하고 구동하여 텍스트-SQL 매핑을 처리할 수 있습니다. 이러한 신속한 엔지니어링을 통해 미세 조정을 수행할 필요 없이 기능을 개발할 수 있습니다. 기본 모델에 대한 프롬프트 엔지니어링이 충분한 정확성을 달성하지 못하는 경우 추가 프롬프트 엔지니어링과 함께 소규모 텍스트-SQL 예제 세트에 대한 미세 조정을 탐색할 수 있습니다.

미리 훈련된 원시 모델에 대한 신속한 엔지니어링만으로는 요구 사항을 충족하지 못하는 경우 미세 조정과 신속한 엔지니어링의 조합이 필요할 수 있습니다. 하지만 처음에는 미세 조정 없이 신속한 엔지니어링을 시도하는 것이 가장 좋습니다. 이렇게 하면 데이터 수집 없이 빠른 반복이 가능하기 때문입니다. 이것이 적절한 성능을 제공하지 못하는 경우 신속한 엔지니어링과 함께 미세 조정이 실행 가능한 다음 단계입니다. 이러한 전반적인 접근 방식은 순전히 프롬프트 기반 방법만으로는 충분하지 않은 경우에도 사용자 정의를 허용하면서 효율성을 극대화합니다.

최적화 및 모범 사례

최적화와 모범 사례는 효율성을 향상하고 리소스를 최적으로 사용하며 가능한 최선의 방법으로 올바른 결과를 달성하는 데 필수적입니다. 이 기술은 성능을 개선하고 비용을 제어하며 더 나은 품질의 결과를 달성하는 데 도움이 됩니다.

LLM을 사용하여 텍스트-SQL 시스템을 개발할 때 최적화 기술을 사용하면 성능과 효율성을 향상시킬 수 있습니다. 고려해야 할 몇 가지 주요 영역은 다음과 같습니다.

  • 캐싱 – 대기 시간, 비용 제어 및 표준화를 개선하기 위해 텍스트-SQL LLM에서 구문 분석된 SQL 및 인식된 쿼리 프롬프트를 캐시할 수 있습니다. 이렇게 하면 반복되는 쿼리를 다시 처리하는 것을 방지할 수 있습니다.
  • 모니터링 – 쿼리 구문 분석, 프롬프트 인식, SQL 생성 및 SQL 결과에 대한 로그 및 메트릭을 수집하여 text-to-SQL LLM 시스템을 모니터링해야 합니다. 이를 통해 프롬프트를 업데이트하거나 업데이트된 데이터 세트로 미세 조정을 다시 방문하는 최적화 예시에 대한 가시성을 제공합니다.
  • 구체화된 뷰와 테이블 – 구체화된 뷰는 SQL 생성을 단순화하고 일반적인 텍스트-SQL 쿼리 성능을 향상시킬 수 있습니다. 테이블을 직접 쿼리하면 SQL이 복잡해지고 인덱스와 같은 성능 기술이 지속적으로 생성되는 등 성능 문제가 발생할 수도 있습니다. 또한 동일한 테이블을 다른 애플리케이션 영역에 동시에 사용할 때 성능 문제를 방지할 수 있습니다.
  • 데이터 새로 고침 – 텍스트-SQL 쿼리에 대한 데이터를 최신 상태로 유지하려면 구체화된 뷰를 일정에 따라 새로 고쳐야 합니다. 일괄 또는 증분 새로 고침 접근 방식을 사용하여 오버헤드 균형을 맞출 수 있습니다.
  • 중앙 데이터 카탈로그 – 중앙 집중식 데이터 카탈로그를 생성하면 조직의 데이터 소스에 대한 단일 창 보기가 제공되며 LLM이 보다 정확한 응답을 제공하기 위해 적절한 테이블과 스키마를 선택하는 데 도움이 됩니다. 벡터 임베딩 중앙 데이터 카탈로그에서 생성된 데이터는 관련성 있고 정확한 SQL 응답을 생성하기 위해 요청된 정보와 함께 LLM에 제공될 수 있습니다.

캐싱, 모니터링, 구체화된 뷰, 예약된 새로 고침 및 중앙 카탈로그와 같은 최적화 모범 사례를 적용하면 LLM을 사용하여 텍스트-SQL 시스템의 성능과 효율성을 크게 향상시킬 수 있습니다.

아키텍처 패턴

텍스트를 SQL로 변환하는 워크플로에 대해 구현할 수 있는 몇 가지 아키텍처 패턴을 살펴보겠습니다.

신속한 엔지니어링

다음 다이어그램은 프롬프트 엔지니어링을 사용하여 LLM으로 쿼리를 생성하는 아키텍처를 보여줍니다.

프롬프트 엔지니어링을 사용하여 LLM으로 쿼리를 생성하는 아키텍처를 보여줍니다.

이 패턴에서 사용자는 테이블 및 스키마 세부 정보와 결과가 포함된 일부 샘플 쿼리를 포함하는 프롬프트 자체에 주석이 달린 예제를 모델에 제공하는 프롬프트 기반 소수 학습을 생성합니다. LLM은 제공된 프롬프트를 사용하여 AI 생성 SQL을 반환합니다. 이 SQL은 검증된 후 데이터베이스에 대해 실행되어 결과를 얻습니다. 이는 프롬프트 엔지니어링을 사용하여 시작하는 가장 간단한 패턴입니다. 이를 위해 다음을 사용할 수 있습니다. 아마존 기반암 or 기초 모델 in Amazon SageMaker 점프스타트.

이 패턴에서 사용자는 테이블 및 스키마 세부 정보와 결과가 포함된 일부 샘플 쿼리를 포함하는 프롬프트 자체에 주석이 달린 예제를 모델에 제공하는 프롬프트 기반 소수 학습을 생성합니다. LLM은 제공된 프롬프트를 사용하여 검증된 AI 생성 SQL을 반환하고 데이터베이스에 대해 실행하여 결과를 얻습니다. 이는 프롬프트 엔지니어링을 사용하여 시작하는 가장 간단한 패턴입니다. 이를 위해 다음을 사용할 수 있습니다. 아마존 기반암 보안, 개인 정보 보호 및 책임 있는 AI를 갖춘 생성적 AI 애플리케이션을 구축하는 데 필요한 광범위한 기능 세트와 함께 단일 API를 통해 선도적인 AI 회사의 고성능 기초 모델(FM)을 선택할 수 있는 완전 관리형 서비스입니다. 또는 JumpStart 기초 모델 콘텐츠 작성, 코드 생성, 질문 답변, 카피라이팅, 요약, 분류, 정보 검색 등과 같은 사용 사례에 대한 최첨단 기반 모델을 제공합니다.

신속한 엔지니어링 및 미세 조정

다음 다이어그램은 프롬프트 엔지니어링 및 미세 조정을 사용하여 LLM으로 쿼리를 생성하는 아키텍처를 보여줍니다.

신속한 엔지니어링 및 미세 조정을 사용하여 LLM으로 쿼리를 생성하는 아키텍처를 보여줍니다.

이 흐름은 주로 프롬프트 엔지니어링에 의존하지만 도메인별 데이터 세트에 대한 추가 미세 조정 흐름이 있는 이전 패턴과 유사합니다. 미세 조정된 LLM은 프롬프트에 대해 최소한의 컨텍스트 내 값으로 SQL 쿼리를 생성하는 데 사용됩니다. 이를 위해 SageMaker JumpStart를 사용하여 모델을 교육하고 배포하는 것과 동일한 방식으로 도메인별 데이터 세트에서 LLM을 미세 조정할 수 있습니다. 아마존 세이지 메이커.

신속한 엔지니어링 및 RAG

다음 다이어그램은 프롬프트 엔지니어링 및 RAG를 사용하여 LLM으로 쿼리를 생성하는 아키텍처를 보여줍니다.

프롬프트 엔지니어링 및 RAG를 사용하여 LLM으로 쿼리를 생성하는 아키텍처를 보여줍니다.

이 패턴에서 우리는 검색 증강 생성 다음과 같은 벡터 임베딩 저장소를 사용하여 Amazon Titan 임베딩 or 코히어 임베드일, 아마존 기반암 다음과 같은 중앙 데이터 카탈로그에서 AWS 접착제 데이터 카탈로그, 조직 내의 데이터베이스. 벡터 임베딩은 다음과 같은 벡터 데이터베이스에 저장됩니다. Amazon OpenSearch 서버리스용 벡터 엔진, PostgreSQL용 Amazon Relational Database Service(Amazon RDS) 와 더불어 pg벡터 확장 또는 아마존 켄드라. LLM은 벡터 임베딩을 사용하여 SQL 쿼리를 생성할 때 테이블에서 올바른 데이터베이스, 테이블 및 열을 더 빠르게 선택합니다. RAG를 사용하면 LLM에서 검색해야 하는 데이터 및 관련 정보가 여러 별도의 데이터베이스 시스템에 저장되어 있고 LLM이 이러한 모든 다른 시스템에서 데이터를 검색하거나 쿼리할 수 있어야 하는 경우 유용합니다. 중앙 집중식 또는 통합 데이터 카탈로그의 벡터 임베딩을 LLM에 제공하면 LLM에서 반환되는 보다 정확하고 포괄적인 정보가 생성됩니다.

결론

이 게시물에서는 자연어를 사용하여 SQL 생성에 이르기까지 엔터프라이즈 데이터에서 가치를 생성할 수 있는 방법에 대해 논의했습니다. 우리는 핵심 구성 요소, 최적화 및 모범 사례를 조사했습니다. 또한 기본 프롬프트 엔지니어링부터 미세 조정 및 RAG까지 아키텍처 패턴을 배웠습니다. 자세한 내용은 다음을 참조하세요. 아마존 기반암 기초 모델을 사용하여 생성적 AI 애플리케이션을 쉽게 구축하고 확장할 수 있습니다.


저자에 관하여

랜디 드포 AWS의 선임 수석 솔루션 아키텍트입니다. 그는 University of Michigan에서 MSEE를 취득하고 자율 차량용 컴퓨터 비전을 연구했습니다. 그는 또한 콜로라도 주립 대학에서 MBA를 취득했습니다. Randy는 소프트웨어 엔지니어링에서 제품 관리에 이르기까지 기술 분야에서 다양한 직책을 맡았습니다. In은 2013년에 Big Data 영역에 진출했으며 계속해서 해당 영역을 탐색합니다. 그는 ML 공간에서 프로젝트에 적극적으로 참여하고 있으며 Strata 및 GlueCon을 포함한 수많은 컨퍼런스에서 발표했습니다.

니틴 유세비우스 소프트웨어 엔지니어링, 엔터프라이즈 아키텍처 및 AI/ML 분야의 경험이 있는 AWS의 수석 엔터프라이즈 솔루션 아키텍트입니다. 그는 생성 AI의 가능성을 탐구하는 데 깊은 열정을 갖고 있습니다. 그는 고객과 협력하여 고객이 AWS 플랫폼에서 잘 설계된 애플리케이션을 구축할 수 있도록 지원하고 기술 문제를 해결하고 클라우드 여정을 지원하는 데 전념하고 있습니다.

아르기야 바네르지 고객이 AWS 클라우드를 채택하고 사용할 수 있도록 돕는 데 주력하는 샌프란시스코 베이 지역의 AWS 수석 솔루션 아키텍트입니다. Arghya는 빅 데이터, 데이터 레이크, 스트리밍, 배치 분석, AI/ML 서비스 및 기술에 중점을 두고 있습니다.

spot_img

최신 인텔리전스

spot_img