다음을 통해 공유


검색-보강된 생성 및 미세 조정을 사용하여 큰 언어 모델 보강

이 시리즈의 문서에서는 LLM이 응답을 생성하는 데 사용하는 지식 검색 모델에 대해 설명합니다. 기본적으로 LLM(큰 언어 모델)은 학습 데이터에만 액세스할 수 있습니다. 그러나 실시간 데이터 또는 개인 데이터를 포함하도록 모델을 보강할 수 있습니다. 이 문서에서는 모델을 보강하기 위한 두 가지 메커니즘 중 하나에 대해 설명합니다.

첫 번째 메커니즘은 의미 체계 검색과 상황별 초기화(다른 문서에서 설명)를 결합하는 사전 처리의 한 형태인 RAG(검색 보강 생성)입니다.

두 번째 메커니즘은 작업을 더 잘 수행하거나 해당 데이터 세트와 관련된 개념을 이해하도록 조정하는 것을 목표로 초기의 광범위한 학습 후에 특정 데이터 세트에 대한 모델을 추가로 학습하는 프로세스를 의미하는 미세 조정입니다. 이 프로세스는 모델이 특정 유형의 입력 또는 도메인을 처리하는 데 있어 정확도와 효율성을 특수화하거나 개선하는 데 도움이 됩니다.

다음 섹션에서는 이러한 두 메커니즘에 대해 자세히 설명합니다.

RAG 이해

RAG는 텍스트 콘텐츠(내부 문서, 설명서 등)의 모음이 크고 사용자 프롬프트에 대한 답변의 기준으로 이 모음을 사용하려는 회사에서 "내 데이터를 통해 채팅" 시나리오를 사용하도록 설정하는 데 자주 사용됩니다.

개략적으로 각 문서(또는 "청크"라고 하는 문서의 일부)에 대한 데이터베이스 항목을 만듭니다. 청크는 문서의 패싯을 나타내는 숫자의 벡터(배열)인 포함에 인덱싱됩니다. 사용자가 쿼리를 제출하면 데이터베이스에서 유사한 문서를 검색한 다음 쿼리와 문서를 LLM에 제출하여 답변을 작성합니다.

참고 항목

RAG(Retrieval-Augmented Generation)라는 용어는 수용적으로 사용됩니다. 이 문서에 설명된 RAG 기반 채팅 시스템을 구현하는 프로세스는 외부 데이터를 RAG(지원 용량)에 사용하거나 응답의 중심(RCG)으로 사용하려는 경우 적용할 수 있습니다. 이 미묘한 차이는 RAG와 관련된 대부분의 읽기에서 다루지 않습니다.

벡터화된 문서의 인덱스 만들기

RAG 기반 채팅 시스템을 만드는 첫 번째 단계는 문서의 벡터 포함(또는 문서의 일부)이 포함된 벡터 데이터 저장소를 만드는 것입니다. 문서의 벡터화된 인덱스를 만드는 기본 단계를 간략하게 설명하는 다음 다이어그램을 고려합니다.

청크 분할, 후 청크 처리 단계, 포함 API 호출, 문서 청크를 벡터화된 포함으로 벡터화된 포함으로 저장하는 문서 수집의 다양한 단계를 보여 주는 다이어그램.

이 다이어그램은 시스템에서 사용하는 데이터의 수집, 처리 및 관리를 담당하는 데이터 파이프라인을 나타냅니다. 여기에는 벡터 데이터베이스에 저장할 데이터를 전처리하고 LLM에 공급되는 데이터가 올바른 형식인지 확인하는 작업이 포함됩니다.

전체 프로세스는 기계 학습 모델에서 처리할 수 있는 방식으로 입력의 의미 체계 속성을 캡처하는 데이터(일반적으로 단어, 구, 문장 또는 전체 문서)의 숫자 표현인 포함 개념에 의해 구동됩니다.

포함을 만들려면 콘텐츠 청크(문장, 단락 또는 전체 문서)를 Azure OpenAI Embedding API로 보냅니다. 포함 API에서 반환되는 것은 벡터입니다. 벡터의 각 값은 콘텐츠의 일부 특징(차원)을 나타냅니다. 차원에는 주제, 의미 체계 의미, 구문 및 문법, 단어 및 구 사용, 컨텍스트 관계, 스타일 및 톤 등이 포함될 수 있습니다. 벡터의 모든 값은 콘텐츠의 차원 공간을 나타냅니다. 즉, 3개의 값이 있는 벡터의 3D 표현을 생각할 수 있는 경우 지정된 벡터는 x, y, z 평면의 특정 영역에 있습니다. 값이 1000개 이상이면 어떻게 될까요? 인간이 종이에 1,000차원 그래프를 그리는 것은 불가능하지만 컴퓨터는 차원 공간의 정도를 이해하는 데 아무런 문제가 없습니다.

다이어그램의 다음 단계에서는 콘텐츠 자체(또는 콘텐츠 위치에 대한 포인터) 및 기타 메타데이터와 함께 벡터를 벡터 데이터베이스에 저장하는 방법을 보여 줍니다. 벡터 데이터베이스는 두 가지 차이점이 있는 모든 유형의 데이터베이스와 같습니다.

  • 벡터 데이터베이스는 벡터를 인덱스로 사용하여 데이터를 검색합니다.
  • 벡터 데이터베이스는 가장 가까운 인접 항목이라고도 하는 코사인 유사 검색이라는 알고리즘을 구현합니다. 이 알고리즘은 검색 조건과 가장 일치하는 벡터를 사용합니다.

개발자는 벡터 데이터베이스에 저장된 문서 모음을 사용하여 사용자의 쿼리에 응답하는 데 필요한 항목을 LLM에 공급하기 위해 데이터베이스에서 사용자의 쿼리와 일치하는 문서를 검색하는 검색기 구성 요소를 빌드할 수 있습니다.

문서로 쿼리 응답

RAG 시스템은 먼저 의미 체계 검색을 사용하여 답변을 작성할 때 LLM에 도움이 될 수 있는 문서를 찾습니다. 다음 단계는 사용자의 원래 프롬프트와 함께 일치하는 문서를 LLM에 보내 답변을 작성하는 것입니다.

다음 다이어그램을 간단한 RAG 구현("순진한 RAG"이라고도 함)으로 간주합니다.

단계 또는 프로세스를 나타내는 상자와 각 상자를 연결하는 화살표가 있는 간단한 RAG 흐름을 보여 주는 다이어그램. 흐름은 Embedding API로 전송되는 사용자의 쿼리로 시작됩니다. Embedding API는 벡터화된 쿼리의 결과를 반환하며, 이 쿼리는 벡터 데이터베이스에서 가장 가까운 일치 항목(아티클 청크)을 찾는 데 사용됩니다. 쿼리 및 아티클 청크가 완료 API로 전송되고 결과가 사용자에게 전송됩니다.

다이어그램에서 사용자는 쿼리를 제출합니다. 첫 번째 단계는 벡터를 다시 가져오는 사용자의 프롬프트에 대한 포함을 만드는 것입니다. 다음 단계는 벡터 데이터베이스에서 "가장 가까운 인접" 일치 문서(또는 문서의 일부)를 검색하는 것입니다.

코사인 유사성 은 두 벡터가 얼마나 유사한지 결정하는 데 사용되는 측정값으로, 기본적으로 두 벡터 사이의 각도의 코사인을 평가합니다. 1에 가까운 코사인 유사성은 높은 수준의 유사성(작은 각도)을 나타내고 , -1에 가까운 유사성은 유사도(각도가 180도에 근접함)를 나타냅니다. 이 메트릭은 유사한 콘텐츠 또는 의미가 있는 문서를 찾는 것이 목표인 문서 유사성과 같은 작업에 매우 중요합니다.

"가장 인접한 항목" 알고리즘은 벡터 공간의 지정된 지점에 가장 가까운 벡터(인접)를 찾아 작동합니다. K-가장 가까운 인접 항목(KNN) 알고리즘에서 'k'는 고려할 가장 가까운 인접 항목의 수를 나타냅니다. 이 방법은 분류 및 회귀에 널리 사용되며, 알고리즘은 학습 집합에서 가장 가까운 'k' 인접 항목의 대다수 레이블을 기반으로 새 데이터 요소의 레이블을 예측합니다. KNN 및 코사인 유사성은 권장 엔진과 같은 시스템에서 함께 사용되는 경우가 많으며, 여기서 목표는 포함 공간에서 벡터로 표현되는 사용자의 기본 설정과 가장 유사한 항목을 찾는 것입니다.

해당 검색에서 최상의 결과를 가져오고 일치하는 콘텐츠를 사용자의 프롬프트와 함께 보내 일치 콘텐츠에 의해 (희망적으로) 통보되는 응답을 생성합니다.

과제 및 고려 사항

RAG 시스템을 구현하는 것은 일련의 과제와 함께 제공됩니다. 특히 외부 원본에서 정보를 검색하고 처리하는 경우 시스템에서 사용자 데이터를 책임감 있게 처리해야 하므로 데이터 개인 정보 보호가 가장 중요합니다. 검색 및 생성 프로세스 모두 리소스를 많이 사용하므로 계산 요구 사항도 중요할 수 있습니다. 데이터 또는 모델에 있는 바이어스를 관리하면서 응답의 정확도와 관련성을 보장하는 것도 또 다른 중요한 고려 사항입니다. 개발자는 이러한 과제를 신중하게 탐색하여 효율적이고 윤리적이며 가치 있는 RAG 시스템을 만들어야 합니다.

이 시리즈의 다음 문서에서는 고급 검색-증강 세대 시스템 빌드에서 프로덕션 준비 RAG 시스템을 사용하도록 데이터 및 유추 파이프라인을 빌드하는 방법에 대해 자세히 설명합니다.

생성 AI 솔루션을 즉시 빌드하는 실험을 시작하려면 Python용 사용자 고유의 데이터 샘플을 사용하여 채팅을 시작하는 것이 좋습니다. .NET, JavaJavaScript에서도 사용할 수 있는 자습서 버전이 있습니다.

모델 미세 조정

LLM의 컨텍스트에서 미세 조정은 크고 다양한 데이터 세트에서 처음 학습된 후 도메인별 데이터 세트에서 모델의 매개 변수를 조정하는 프로세스를 나타냅니다.

LLM은 광범위한 데이터 세트에서 학습(사전 학습)되며 언어 구조, 컨텍스트 및 다양한 지식을 파악합니다. 이 단계에서는 일반 언어 패턴을 학습합니다. 미세 조정은 더 작은 특정 데이터 세트를 기반으로 미리 학습된 모델에 더 많은 학습을 추가합니다. 이 보조 교육 단계는 특정 작업에서 더 나은 성능을 발휘하거나 특정 도메인을 이해하도록 모델을 조정하여 해당 특수 애플리케이션에 대한 정확도와 관련성을 향상시키는 것을 목표로 합니다. 미세 조정하는 동안 모델의 가중치는 이 작은 데이터 세트의 뉘앙스를 더 잘 예측하거나 이해하도록 조정됩니다.

몇 가지 고려 사항:

  • 전문화: 미세 조정은 법적 문서 분석, 의료 텍스트 해석 또는 고객 서비스 상호 작용과 같은 특정 작업에 모델을 조정합니다. 이렇게 하면 해당 영역에서 모델이 더 효과적입니다.
  • 효율성: 미세 조정을 위해서는 데이터 및 계산 리소스가 적기 때문에 모델을 처음부터 학습시키는 것보다 특정 작업에 대해 미리 학습된 모델을 미세 조정하는 것이 더 효율적입니다.
  • 적응성: 미세 조정을 사용하면 원래 학습 데이터의 일부가 아닌 새 작업 또는 도메인에 적응할 수 있으므로 다양한 애플리케이션에 대한 LLM의 다양한 도구가 제공됩니다.
  • 성능 향상: 모델이 원래 학습된 데이터와 크게 다른 작업의 경우 새 도메인에서 사용되는 특정 언어, 스타일 또는 용어를 이해하도록 모델을 조정하므로 미세 조정으로 성능이 향상될 수 있습니다.
  • 개인 설정: 일부 애플리케이션에서 미세 조정은 사용자 또는 조직의 특정 요구 사항 또는 기본 설정에 맞게 모델의 응답 또는 예측을 개인화하는 데 도움이 될 수 있습니다. 그러나 미세 조정은 특정 단점과 제한 사항도 제공합니다. 이를 이해하면 RAG(검색 보강 세대)와 같은 대안과 미세 조정을 선택할 시기를 결정하는 데 도움이 될 수 있습니다.
  • 데이터 요구 사항: 미세 조정을 수행하려면 대상 작업 또는 도메인과 관련된 충분히 크고 고품질의 데이터 세트가 필요합니다. 이 데이터 세트를 수집하고 큐레이팅하는 것은 어려울 수 있으며 리소스 집약적일 수 있습니다.
  • 과잉 맞춤 위험: 특히 작은 데이터 세트에서 과잉 맞춤의 위험이 있습니다. 과잉 맞춤을 사용하면 모델이 학습 데이터에서 잘 수행되지만 보이지 않는 새 데이터에서는 성능이 저하되어 일반화 가능성이 줄어듭니다.
  • 비용 및 리소스: 처음부터 학습하는 것보다 리소스 집약적이 적지만 미세 조정에는 계산 리소스가 필요하며, 특히 일부 사용자 또는 프로젝트에는 금지될 수 있는 대형 모델 및 데이터 세트의 경우 여전히 계산 리소스가 필요합니다.
  • 유지 관리 및 업데이트: 시간이 지남에 따라 도메인별 정보가 변경됨에 따라 정기적인 업데이트가 필요할 수 있습니다. 이 지속적인 유지 관리에는 추가 리소스 및 데이터가 필요합니다.
  • 모델 드리프트: 모델이 특정 작업에 대해 미세 조정되므로 일반적인 언어 이해와 다양성이 손실되어 모델 드리프트라는 현상이 발생할 수 있습니다.

미세 조정을 사용하여 모델을 사용자 지정하면 모델을 미세 조정하는 방법을 설명합니다. 높은 수준에서 잠재적인 질문과 기본 답변의 JSON 데이터 집합을 제공합니다. 설명서에서는 50~100개의 질문/답변 쌍을 제공하여 눈에 띄는 개선 사항이 있음을 시사하지만, 사용 사례에 따라 적절한 숫자가 크게 달라집니다.

미세 조정 및 검색 보강된 생성

표면적으로는 미세 조정과 검색 보강 세대 사이에 상당한 겹침이 있는 것처럼 보일 수 있습니다. 미세 조정 및 검색 보강 생성 중에서 선택하는 것은 성능 기대치, 리소스 가용성 및 도메인 특이성 및 일반화성에 대한 필요성을 포함하여 작업의 특정 요구 사항에 따라 달라집니다.

검색-보강된 생성보다 미세 조정을 선호하는 경우:

  • 작업별 성능 - 특정 작업에 대한 고성능이 중요하고 상당한 과잉 맞춤 위험 없이 모델을 효과적으로 학습시킬 수 있는 충분한 도메인별 데이터가 있는 경우 미세 조정이 바람직합니다.
  • 데이터 제어 - 기본 모델이 학습된 데이터와 크게 다른 독점 또는 고도로 특수화된 데이터가 있는 경우 미세 조정을 통해 이 고유한 지식을 모델에 통합할 수 있습니다.
  • 실시간 업데이트 에 대한 제한된 요구 - 작업에서 최신 정보로 모델을 지속적으로 업데이트할 필요가 없는 경우 RAG 모델은 일반적으로 최신 외부 데이터베이스 또는 인터넷에 액세스하여 최근 데이터를 끌어오기 때문에 미세 조정이 더 효율적일 수 있습니다.

미세 조정보다 검색-보강 생성을 선호하는 경우:

  • 동적 또는 진화하는 콘텐츠 - RAG는 최신 정보를 보유하는 것이 중요한 작업에 더 적합합니다. RAG 모델은 외부 원본의 데이터를 실시간으로 가져올 수 있으므로 뉴스 생성 또는 최근 이벤트에 대한 질문에 답변하는 등의 애플리케이션에 더 적합합니다.
  • 전문화에 대한 일반화 - 좁은 도메인에서 뛰어난 성능을 발휘하지 않고 광범위한 토픽에서 강력한 성능을 유지하는 것이 목표인 경우 RAG가 더 좋을 수 있습니다. 외부 기술 자료 사용하여 특정 데이터 세트에 과잉 맞춤될 위험 없이 다양한 도메인에서 응답을 생성할 수 있습니다.
  • 리소스 제약 조건 - 데이터 수집 및 모델 학습에 대한 리소스가 제한된 조직의 경우 RAG 접근 방식을 사용하면 특히 기본 모델이 이미 원하는 작업에 대해 합리적으로 잘 수행되는 경우 미세 조정에 대한 비용 효율적인 대안을 제공할 수 있습니다.

애플리케이션 디자인 결정에 영향을 줄 수 있는 최종 고려 사항

다음은 애플리케이션 디자인 결정에 영향을 주는 이 문서에서 고려해야 할 사항 및 기타 내용의 짧은 목록입니다.

  • 애플리케이션의 특정 요구 사항에 따라 미세 조정 및 검색 보강 생성 중에서 결정합니다. 미세 조정은 특수한 작업에 더 나은 성능을 제공할 수 있지만 RAG는 동적 애플리케이션에 유연성과 최신 콘텐츠를 제공할 수 있습니다.