메인 콘텐츠로 건너뛰기

개요

텍스트 분할기는 대규모 언어 모델(LLM) 애플리케이션 구축에 있어 중요한 구성 요소입니다. 그들의 주요 역할은 긴 텍스트를 여러 개의 짧은 구간으로 분할하는 것으로, 이는 텍스트 임베딩, 검색 보강 생성(RAG) 및 질의응답 시스템과 같은 후속 작업을 용이하게 합니다.

LLM에서 텍스트 분할은 여러 주요 이유로 수행됩니다:

  • 효율성과 정확성 최적화: 긴 텍스트 블록을 더 작은 구간으로 분해함으로써 LLM이 생성하는 임베딩의 관련성과 정확성을 최적화할 수 있습니다. 청킹은 임베딩된 내용이 의미적 관련성을 유지하면서 최소한의 잡음을 포함하도록 보장하는 데 도움이 됩니다. 예를 들어, 의미 검색에서 문서 코퍼스를 인덱싱할 때, 각 문서는 특정 주제에 대한 귀중한 정보를 포함하고 있습니다. 효과적인 청킹 전략을 적용하면 검색 결과가 사용자의 질의 본질을 정확하게 포착하도록 보장합니다.
  • 컨텍스트 윈도우 크기 제한: GPT-4와 같은 모델을 사용할 때 처리할 수 있는 토큰 수에 제한이 있습니다. 예를 들어, GPT-4는 32K 토큰의 컨텍스트 윈도우 크기 제한을 가지고 있습니다. 이 제한은 일반적으로 문제되지 않지만, 처음부터 청크 크기를 고려하는 것이 중요합니다. 텍스트 청크가 너무 크면 정보가 손실되거나 모든 내용이 컨텍스트에 임베딩되지 않아 모델의 성능과 출력에 영향을 줄 수 있습니다.
  • 긴 문서 처리: 긴 문서에 대한 임베딩 벡터가 전체 컨텍스트를 포착할 수 있지만, 특정 주제에 대한 중요한 세부 사항을 간과하여 출력이 부정확하거나 불완전할 수 있습니다. 청킹은 정보 추출 및 임베딩을 보다 잘 제어할 수 있게 하여 정보 손실의 위험을 줄입니다.

Casibase 팀은 현재 여러 분할 방법을 제공하여 사용자가 다양한 텍스트 상황에 대해 서로 다른 처리 전략을 적용할 수 있도록 합니다.

기본 텍스트 분할기

기본 텍스트 분할기는 토큰 수와 텍스트 구조를 기반으로 효율적으로 텍스트를 분할하도록 설계되었습니다. 그 분할 전략에는 다음이 포함됩니다:

  • 행 읽기와 단락 인식: 텍스트는 한 줄씩 읽히며, 연속되는 빈 줄을 사용하여 단락 구분을 정확하게 결정합니다. 또한 마커를 통해 자연스러운 구분점을 민감하게 식별하여 논리적이고 정확한 텍스트 분할을 보장합니다.
  • 코드 블록에 대한 특수 처리: ``` 기호로 둘러싸인 코드 블록은 별도로 처리됩니다. 코드 블록 내의 줄 수가 해당 블록이 독립된 구간으로 간주될 수 있는지를 결정합니다. 이 메커니즘은 코드 블록의 무결성을 유지하면서 단일 텍스트 구간이 토큰 제한을 초과하지 않도록 효과적으로 방지합니다.
  • 문장 무결성 유지: 분할 과정 내내 문장 무결성을 철저히 준수하여 문장이 절대로 분할되지 않도록 합니다. 이 기능은 각 텍스트 구간이 완전한 정보 단위를 포함하도록 보장합니다. 텍스트의 복잡성에 관계없이, 문장 경계에서 정확하게 분할되어, 문장이 깨져 발생하는 모호성과 정보 손실을 효과적으로 방지합니다.

질의응답 분할기

질의응답 분할기는 질문과 답변 형식의 텍스트를 정밀하게 분할하는 데 중점을 두며, 다음과 같은 핵심 장점을 제공합니다:

  • 질의응답 단위의 정확한 분할: 각 줄을 스캔하는 메커니즘을 통해 질의응답 텍스트의 구조를 지능적으로 식별합니다. 각 줄이 "Q:" 또는 "A:"로 시작하는지 판단하여, 질문과 답변 사이의 경계를 정밀하게 찾아내어 각 질의응답 쌍이 완전하게 분할되도록 합니다. 이것은 각 질의응답 단위의 독립성과 완전성을 보장하여, 이후의 질의응답 처리 및 분석을 위한 깨끗한 데이터를 제공합니다.
  • 명확하고 논리적인 구현: 코드는 간단하고 직관적이어서 이해와 유지보수가 용이합니다. 현재 질의응답 쌍의 상태와 답변 수집 여부를 나타내는 플래그를 관리함으로써 텍스트 분할 과정을 명확하게 제어하여, 각 질의응답 단위의 올바른 쌍을 보장합니다.