생물.컴퓨터.통계

텍스트 분할 전략의 마스터플랜: RAG-LLM의 진정한 잠재력을 깨우다

프로페서 H 2024. 1. 31. 08:38

 

 

왜 내가 업로드한 pdf 문서에서 원하는 답이 잘 추출되지 않을까?
정확하게 추출하려면 어떻게 해야할까? 

 

RAG-LLM (Retrieval-Augmented Generation for Language Models) 모델을 사용하여 데이터에서 원하는 답을 얻는 과정의 아키텍쳐에는 지식에 해당하는 문서를 사전에 vector database에 임베딩을 해두어야한다. 하지만 효율적인 retrieval을 위해서는 임베딩전 문서를 여러 조각 (chunk) 으로 나누는 텍스트 splitting을 시행하게된다.

정확한 지식기반 LLM을 위해서는 텍스트 splitting 전략 또한 매우 중요하다. 텍스트를  얼마만한 조각으로 나눌지 (chunk size), 조각끼리 얼마나 겹치게 할지 (chunk overlap), 문서의 스타일에 따라 나누는 것을 기계적으로 자를지, 맥락에 따라 자를지등 여러 사항을 고려하게 된다.  오늘은 text splitting에 대해 좀더 알아보고자 한다. 

1. RAG-LLM의 동작 원리

RAG-LLM은 정보 검색과 답변 생성의 두 단계를 결합하여 동작하는 원리이다. 이 모델의 핵심은 사용자의 질문에 가장 관련성 높은 정보를 찾아내고, 이를 바탕으로 정확하고 자연스러운 답변을 생성하는 것이다.

검색 단계 (Retrieval)

  • 사용자로부터 입력된 질문이나 프롬프트를 받아, 이와 관련된 정보를 찾기 위해 텍스트를 벡터 임베딩한 데이터베이스를 검색한다.
  • 이 단계에서는 텍스트 스플리팅 전략이 중요한 역할을 합니다. 긴 문서를 적절히 분할하여, 모델이 처리할 수 있는 길이 내에서 가장 관련성 높은 정보를 추출할 수 있도록 한다.
  • 검색된 결과는 모델이 차후 답변을 생성할 때 사용될 기초 자료로 활용된다.

생성 단계 (Generation)

  • 검색 단계에서 얻은 정보와 사용자의 질문을 결합하여, 모델이 적절한 답변을 생성한다.
  • 이 과정에서 모델은 검색된 정보를 분석하고 이해하여, 질문의 맥락에 맞는 답변을 생성한다.
  • 답변은 사용자의 질문에 대해 정보적으로 충실하고, 문맥상 적합해야 한다.

RAG-LLM의 주요 적용 사례

  • 고객 서비스: RAG-LLM은 고객 질문에 대한 빠르고 정확한 답변을 제공하는 데 사용될 수 있다. 고객 서비스 데이터베이스에서 관련 정보를 검색하고, 이를 토대로 사용자의 질문에 답을 한다. 각종 챗봇이 그 대표적이 예이다.
  • 연구 및 데이터 분석: 학술적 연구나 데이터 분석에서 RAG-LLM은 방대한 양의 데이터에서 필요한 정보를 검색하고, 복잡한 질문에 대한 답변을 생성하는 데 도움을 줄 수 있다.
  • 콘텐츠 제작: 블로그 글이나 기사 작성 시 RAG-LLM은 주제에 관련된 정보를 모으고, 이를 바탕으로 창의적인 콘텐츠를 생성하는 데 활용될 수 있다.

RAG-LLM은 이러한 다양한 분야에서 중요한 정보를 효율적으로 검색하고, 사용자의 요구에 맞는 답변을 생성함으로써 가치를 제공한다. 검색과 생성 단계의 효과적인 결합은 모델의 성능을 극대화하며, 이를 위해 적절한 텍스트 스플리팅 전략이 필수적이다.

 

 

2. 텍스트 스플리팅 전략의 중요성

텍스트 스플리팅 전략은 RAG-LLM (Retrieval-Augmented Generation for Language Models) 모델의 성능에 있어 다음 두 가지 주요 측면에서 매우 중요한 역할을 한다:

 

1. 입력 길이 제한 극복: token limit

  • 대부분의 현대 언어 모델들은 입력 데이터의 길이에 제한이 있다 (token limit). 예를 들어, 모델이 처리할 수 있는 최대 토큰 수는 일반적으로 수백에서 수천 사이로 제한된다.
  • RAG-LLM과 같은 모델은 검색 단계에서 긴 문서나 데이터 소스를 사용하여 질문에 대한 정보를 검색하게 되는데  이러한 긴 문서들은 모델의 입력 길이 제한을 초과할 수 있다.
  • 따라서, 텍스트 스플리팅 전략을 사용하여 긴 문서를 더 작은 청크(chunk)로 나누면 모델이 각 청크를 개별적으로 처리할 수 있어, 전체 문서의 중요한 정보를 포착하고 활용할 수 있게 되는 것이다.

2. 정보의 효율적 추출 및 활용

  • RAG-LLM은 chunk단위로 벡터 임베딩된 데이터베이스를 검색하는 검색 단계에서 얻은 정보를 바탕으로 답변을 생성하는데, 이 과정에서 문서의 특정 부분에 포함된 중요한 정보를 정확하게 식별하고 추출하는 것이 중요하다.
  • 벡터 데이터베이스에 적절한 텍스트 스플리팅 전략을 적용하여 chunk들을 임베딩하면, 모델이 더 관련성 높은 정보를 포함하는 문서 부분에 집중할 수 있다. 이는 답변의 정확도와 관련성을 높이는 데 도움이 된다. 특히 의학과 같은 전문분야에서 답변의 정확도는 매우 중요하다.
  • 예를 들어, 특정 주제나 질문과 관련된 문서의 섹션만을 선택적으로 추출하거나, 문서 내의 중요한 정보가 포함된 부분을 강조하는 전략을 사용할 수 있다. 법률, 의학 등 특수 분야 지식에 적용하는데 적합하다고 볼 수 있다.

해결 가능한 문제들

  • 긴 문서 처리: 모델이 긴 문서를 효율적으로 처리하고, 중요한 정보를 놓치지 않도록 한다.
  • 정보의 정확도 향상: 더 관련성 높은 정보를 추출하여 답변의 정확도와 질을 향상시킨다.
  • 자원 사용 최적화: 더 작은 텍스트 청크를 처리함으로써 계산 자원을 효율적으로 사용하고, 처리 시간을 단축할 수 있다.
  • 특정 질문에 대한 맞춤형 답변: 질문의 맥락과 밀접하게 연관된 문서 부분을 효과적으로 식별하고 활용함으로써, 더 정확하고 맞춤화된 답변을 생성할 수 있다.

이처럼 텍스트 스플리팅 전략은 RAG-LLM의 성능을 극대화하고, 다양한 문제를 해결하는 데 필수적인 역할을 하게 되는 것이다.

 

3. 텍스트 스플리팅 전략

텍스트 스플리팅 전략은 크게 기본적인 방법과 보다 고급화된 방법으로 나눌 수 있다.

기본 전략: 고정 길이 스플리팅

  • 가장 간단한 형태의 텍스트 스플리팅 전략은 고정 길이 스플리팅이다. 이 방법은 문서를 일정한 길이의 청크로 나누는 것을 말한다.
  • 예를 들어, 모든 청크를 500 단어 또는 1000 토큰으로 고정하여 분할하는 방식이다.
  • 이 방법의 장점은 구현이 쉽고, 처리 속도가 빠르다는 것이다. 하지만, 문맥이나 내용의 연속성이 끊어질 수 있다는 단점이 있다.

고급 전략: 문맥 기반 및 주제별 스플리팅

  • 보다 정교한 스플리팅 방법에는 문맥 기반 스플리팅이나 주제별 스플리팅이 포함된다.
  • 문맥 기반 스플리팅은 문단이나 문장의 경계를 고려하여 텍스트를 나눈다. 이 방식은 문맥의 연속성을 유지하면서도 모델이 처리할 수 있는 길이를 고려하는 것이다.
  • 주제별 스플리팅은 문서 내의 다른 주제나 섹션을 기반으로 텍스트를 분할한다. 이는 모델이 특정 주제에 더 집중할 수 있게 하며, 검색과 답변 생성의 정확도를 높일 수 있다.

사례 연구: RAG-LLM 모델에의 적용

  • 실제 chunk size, overlab, text splittier function들을 테스트를 하면서 이러한 스플리팅 전략의 효과를 살펴보면, RAG-LLM 모델의 성능 향상을 명확하게 확인할 수 있다. 특별한 왕도가 있는 것이 아니다. 
  • 학술 연구에서 문맥 기반 스플리팅을 사용할 경우, 복잡한 연구 질문에 대한 답변이 더 일관되고 정교해지는 것을 볼 수 있다고 한다.

 

4.  전략 구현 및 테스트: ChunkViz v0.1을 사용해 보자

  • 본인의 문서들이 어떻게 chunk되는지를 테스트 해볼 수 있다. 다음과 같이 ChunkViz를 활용해 보자.
  • 여기에는 단순 문자 splitter를 비롯하여 mark down, python등 특별한 문서형식에 대해서 적합한 splitter들의 효과를 확인해볼 수 있다.

6. 결론

  • RAG-LLM의 성능을 최적화하기 위해 적절한 텍스트 스플리팅 전략을 세우는 것이 필요하다. 

7. 참고 문헌

- https://youtu.be/n0uPzvGTFI0?si=DoKhS79CeaI56j7_

 

https://medium.com/@ayhamboucher/llm-based-context-splitter-for-large-documents-445d3f02b01b

 

LLM based context splitter for large documents

Background

medium.com