> 백엔드 개발 > 파이썬 튜토리얼 > RAG, 벡터 검색에 대한 확장된 설명 및 IRIS RAG 앱의 IRIS에서 구현되는 방법

RAG, 벡터 검색에 대한 확장된 설명 및 IRIS RAG 앱의 IRIS에서 구현되는 방법

Susan Sarandon
풀어 주다: 2024-12-04 13:16:15
원래의
771명이 탐색했습니다.

An Expanded Explanation of RAG, Vector Search, and how it is implemented on IRIS in the IRIS RAG App

Python 2024 콘테스트에 제출한 것에 대해 커뮤니티 회원으로부터 정말 훌륭한 피드백을 받았습니다. 여기에 다시 게시하면 괜찮기를 바랍니다:

순수 IRIS 크기의 5배가 넘는 컨테이너를 제작합니다

시간이 걸립니다

컨테이너 시작도 느리지만 완료됩니다

설명대로 백엔드에 액세스할 수 있습니다

제작이 한창입니다

프런트엔드 반응

무엇을 보여주려고 한건지 이해가 안가네요

저 이외의 전문가를 위한 설명입니다

제출 위치: https://openexchange.intersystems.com/package/IRIS-RAG-App

이 피드백에 정말 감사드립니다. 특히 프로젝트에 대한 기사를 작성하는 데 도움이 되기 때문입니다. 이 프로젝트에는 상당히 포괄적인 문서가 포함되어 있지만 벡터 임베딩, RAG 파이프라인, LLM 텍스트 생성은 물론 Python 및 LLamaIndex와 같은 특정 인기 Python 라이브러리에 익숙하다고 가정합니다.

완전히 AI 없이 작성된 이 기사는 이러한 것들에 대한 설명과 RAG를 보여주기 위한 이 프로젝트에서 이러한 것들이 어떻게 결합되는지에 대한 시도를 의미합니다. IRIS의 워크플로.

벡터 임베딩 생성과 관련된 Python 패키지에 필요한 라이브러리 종속성이 매우 크기 때문에 컨테이너가 큽니다. 보다 선별적인 수입을 통해 규모를 상당히 줄일 수 있을 것이다. 

처음에 컨테이너를 구축하는 데 시간이 걸리지만 일단 구축하고 나면 시작하는 데 시간이 덜 걸립니다. 시작 시간은 여전히 ​​확실히 향상될 수 있습니다. 시작하는 데 시간이 너무 많이 걸리는 주된 이유는 데이터베이스 마이그레이션, CSS 구성, 자바스크립트 구성 및 Python을 포함하여 마지막 시작 이후 애플리케이션의 일부가 변경되었을 수 있다는 가정 하에 Entrypoint.sh가 업데이트되었기 때문입니다. 백엔드 코드를 작성하고 시작될 때마다 전체 프로젝트를 다시 컴파일합니다. 이는 이 프로젝트 개발을 더 쉽게 시작할 수 있도록 하기 위한 것입니다. 그렇지 않으면 변경 사항이 있을 때마다 프런트엔드 및 백엔드 빌드를 올바르게 실행하는 것이 까다로울 수 있기 때문입니다. 이렇게 하면 프로젝트의 코드를 변경하는 경우 컨테이너를 다시 시작하고 백엔드에서 프로덕션을 복구하기만 하면 변경 사항이 애플리케이션의 인터페이스와 작동에 반영됩니다.

백엔드의 프로덕션이 http 요청을 Django 애플리케이션에 전달하는 것이며 이 패키지의 상호 운용성에 매우 중요하다고 확신합니다. 하지만 저는 IRIS 플랫폼을 처음 접했고 제작에 대해 더 많은 것을 배울 수 있었습니다.

다음으로 벡터 임베딩, LLM, RAG에 대해 포괄적으로 설명하겠습니다. 이들 중 가장 먼저 발명된 것은 벡터 임베딩(Vector Embedding)이었습니다. 먼저 벡터를 설명할 수 있습니다. 대부분의 상황에서 벡터는 방향입니다. 우주 어딘가를 가리키는 화살표입니다. 보다 공식적으로 벡터는 "크기뿐 아니라 방향도 갖는 양"입니다. 이는 특정 방향으로 이동하고 공간의 특정 지점에서 폭발하는 불꽃으로 예시될 수 있습니다. 모든 불꽃이 동일한 중심점, 즉 원점([0,0,0])에서 발사되지만 모두 날아가서 원점 주변의 구름 속에서 폭발한다고 가정해 보겠습니다. 수학적으로 3개의 좌표계 [x,y,z]를 사용하여 각 폭죽 폭발 위치를 설명할 수 있으며 이는 폭죽 폭발에 대한 "벡터 임베딩"이 됩니다. 불꽃놀이 동영상을 많이 촬영하고 모든 불꽃 폭발을 데이터 세트로 기록했다면 불꽃놀이에 대한 일종의 벡터 임베딩 데이터베이스, 즉 벡터 저장소를 생성하게 됩니다.

불꽃놀이에 관한 정보로 무엇을 할 수 있나요? 특정 불꽃을 지적하고 전시 전체에서 같은 지점에 가장 가깝게 터진 불꽃을 달라고 하면 우주의 가까운 지점에서 터진 다른 불꽃을 찾을 수 있었다. 가장 가까운 것을 찾으면 수학적으로 계산할 수 있습니다.

각 불꽃놀이에는 3개의 숫자만 기록했다는 점을 기억하세요. x, y, z 좌표는 3차원 공간에서 [0,0,0]으로 기록되었습니다. 지상의 폭죽 발사기입니다. 

거리에서 가장 가까운 불꽃과 다른 특정 불꽃에 시간적으로 가장 가까운 불꽃도 알고 싶다면 어떻게 해야 할까요? 이를 알기 위해서는 불꽃놀이 장면을 담은 영상을 다시 살펴보고 각 폭발 시간도 기록해야 합니다. 이제 우리는 불꽃 폭발의 3차원 위치와 폭발 시간이라는 4개의 숫자를 가진 4차원 벡터를 갖게 되었습니다. 이제 벡터 임베딩에 또 다른 차원을 추가하여 불꽃놀이를 위한 더 설명적인 유형의 임베딩을 갖게 되었습니다.

이것을 머신러닝으로 어떻게 변환하나요? 간단히 말해서, 컴퓨터 과학자들은 엄청난 양의 텍스트 데이터를 처리하여 문구, 문장, 단락 또는 페이지와 같은 텍스트 조각을 변환하고 이를 매우 긴 시리즈로 변환할 수 있는 임베딩 모델을 만들 수 있었습니다. 이론적 고차원 공간의 한 점을 나타내는 숫자입니다.

4개의 숫자 대신 300, 700, 심지어 1500이 있습니다. 이는 하나의 텍스트가 "닫기" 또는 "닫기" 또는 "닫기"가 될 수 있는 1500가지 방법을 나타냅니다. 다른 것, 즉 1500차원의 의미로부터 "멀리" 떨어져 있습니다. 어떤 방식으로든 텍스트의 의미론적 의미를 나타내는 숫자를 생성할 수 있다는 사실은 많은 사람들에게 매력적인 개념입니다.

수학을 사용하여 이러한 고차원 텍스트 벡터 임베딩 중 두 개를 비교하여 서로 얼마나 유사하거나 "가까운"지 확인할 수 있습니다. 같은 모델로 만들어졌습니다. 

이것이 이 앱에서 가장 먼저 일어나는 일입니다. 사용자는 문서를 넣고 이름을 지정한 다음 삽입 유형을 선택해야 합니다. 서버는 해당 문서를 가져와 텍스트 청크로 나눈 다음 각 청크를 벡터 임베딩으로 변환하고 해당 청크는 해당 문서의 전용 테이블에 행으로 저장됩니다. 각 문서는 다양한 텍스트 임베딩 모델로 생성된 벡터 임베딩의 가변 길이를 허용하기 위해 자체 전용 테이블에 저장됩니다.

문서가 데이터베이스에 벡터 임베딩으로 저장되면 사용자는 쿼리를 입력하여 문서에 "질문"할 수 있습니다. 쿼리는 두 가지 방법으로 사용됩니다. 첫 번째 방법은 문서를 검색하는 것입니다. 우리는 전통적인 텍스트 검색을 수행하지 않고 대신 "벡터 검색"을 수행합니다. 앱은 쿼리를 가져와 이를 벡터 임베딩으로 변환한 다음 쿼리 벡터 임베딩과 가장 유사한 임베딩이 포함된 문서 섹션을 찾습니다. 그런 다음 모든 문서 섹션에 대해 0과 1 사이의 유사성 점수가 생성되고 top_k_similarity 및 유사성_임계값을 기반으로 벡터 데이터베이스에서 여러 섹션이 검색됩니다. 기본적으로 검색할 문서 섹션 수와 검색 자격을 얻으려면 쿼리와 얼마나 유사해야 하는지 물어볼 수 있습니다.

그것이 검색증강세대에서의 검색이다. 다음 단계는 세대입니다.

컴퓨터 과학자들이 텍스트를 의미상 중요한 숫자 벡터 임베딩으로 변환하는 방법을 알아낸 후, 다음 단계는 텍스트를 생성할 수 있는 모델을 만드는 것이었습니다. 그들은 큰 성공을 거두었고 이제 GPT-4, LLama3 및 Claude 3.5와 같은 대규모 언어 모델이 있습니다. 이러한 LLM은 프롬프트 또는 쿼리를 받아 제시된 텍스트인 프롬프트에서 계속될 가능성이 가장 높은 텍스트인 완성 또는 답변을 제공할 수 있습니다.

LLM은 대량의 텍스트 데이터에 대해 교육을 받아야 하며 응답 또는 완료는 해당 교육 데이터로 제한됩니다. LLM이 훈련 세트에 없는 데이터를 포함할 수 있는 완성을 제공하거나 특정 지식 세트에 기초를 두는 경우 이를 수행하는 한 가지 방법은 프롬프트에 추가 상황별 데이터를 포함하는 것입니다. 기본적으로 교육을 받지 않은 내용에 대해 LLM으로부터 답변을 받으려면 프롬프트에 정보를 제공해야 합니다.

많은 사람들이 chatGPT나 로컬 LLama 설치가 자신의 개인 문서를 기반으로 답변을 제공할 수 있기를 바라는 상황에 처했습니다. 문서에서 해당 정보를 검색하여 프롬프트에 붙여넣고 질문을 입력하는 것은 매우 간단하며 사람들은 이를 수동으로 수행합니다. 그것은 검색 증강 생성(Retrieval Augmented Generation)의 고유한 형태입니다. RAG는 ​​보다 정확하고 유용한 응답을 위해 사용자 쿼리와 관련된 정보를 찾아 LLM에 쿼리와 함께 제공하는 자동화입니다.

이 앱에서 벡터 검색으로 검색한 문서 섹션은 쿼리와 함께 선택한 LLM으로 전송되며 인터페이스에서 모델로 라벨이 지정됩니다. 답변의 맥락을 제공하세요.

이번 프로젝트를 위해 만든 예시 영상에서 "이 극의 악역은 누구인가요?"라는 질문을 던집니다. 두 편의 셰익스피어 희곡의 전체 텍스트가 포함된 문서 "햄릿"과 "리어왕"이 있습니다. IRIS 데이터베이스에는 이미 두 개의 테이블이 있습니다. 하나는 Hamlet용이고 다른 하나는 King Lear용입니다. 각 테이블은 각 극의 텍스트를 섹션으로 분할하여 생성된 벡터 임베딩 행으로 채워집니다. 이러한 임베딩은 각 문서 섹션의 다양한 의미 차원을 ​​나타내는 긴 일련의 숫자입니다. 

서버는 벡터 임베딩을 생성한 동일한 텍스트-벡터 모델을 사용하여 "이 극에서 악당은 누구입니까?"라는 질문을 숫자 벡터로 변환합니다. King Lear에 대해 알아보고, King Lear 테이블에서 그것과 가장 유사한 섹션을 찾습니다. 이것은 아마도 악당이라는 단어를 언급하는 섹션일 것입니다. 그러나 악당이 명시적으로 언급되지 않더라도 배반, 배신, 사기와 같은 다른 악당일 수도 있습니다. 이러한 문서 섹션은 쿼리에 추가되고 LLM에 프롬프트로 함께 전송된 후 제공된 문서 섹션을 기반으로 질문에 답변합니다.

이는 문서마다 별도로 이루어지므로 쿼리하는 문서에 따라 쿼리에 대한 답변이 다릅니다. 벡터 검색 기능을 사용하여 관련 컨텍스트 정보를 검색하여 LLM에서 답변 생성을 강화하므로 약어가 완성됩니다.

시간을 내어 이 글을 읽어주신 모든 분들께 진심으로 감사드리며, 향후 기사에서 이러한 주제에 대해 자세히 설명하겠습니다. 피드백은 언제나 환영입니다.

위 내용은 RAG, 벡터 검색에 대한 확장된 설명 및 IRIS RAG 앱의 IRIS에서 구현되는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿