LangChain 텍스트 스플리터에 대한 설명

이 비디오에서는 LangChain의 핵심 모듈인 텍스트 스플리터에 대해 설명합니다. 텍스트 스플리터는 텍스트를 더 작은 단위로 분할하여 LLM(대규모 언어 모델)이 여러 문맥을 참조하여 답변할 수 있도록 합니다. 이러한 분할은 주로 임베딩 과정에서 이루어지며, 각 청크는 임베딩 벡터로 변환되어 벡터 스토어에 저장됩니다.

텍스트 스플리터의 필요성

LLM은 토큰 제한이 있기 때문에 프롬프트에 포함할 수 있는 텍스트 양에 제한이 있습니다. 텍스트를 적절한 크기의 청크로 나누어 토큰 제한을 넘지 않도록 하는 것이 중요합니다. 청크 크기와 분할 방식은 답변의 질에 큰 영향을 미치므로 주의 깊게 설정해야 합니다.

텍스트 스플리터 종류

1. 캐릭터 텍스트 스플리터 (Character Text Splitter)

  • 특정 구분자(예: 줄바꿈)를 기준으로 문장을 나눕니다.
  • 최대 청크 크기를 설정할 수 있지만, 구분자가 없으면 설정된 크기를 초과할 수 있습니다.
  • 단순한 분할 방식이지만, 청크 크기 제한을 항상 지키지 못할 수 있습니다.

2. 리커시브 캐릭터 텍스트 스플리터 (Recursive Character Text Splitter)

  • 여러 구분자를 순차적으로 사용하여 재귀적으로 분할합니다.
  • 줄바꿈, 마침표, 쉼표 등 우선순위가 있는 구분자 목록을 사용합니다.
  • 최대 토큰 크기를 최대한 지키도록 청크를 분할하며, 토큰 제한을 초과하는 청크 발생을 줄입니다.
  • 대부분의 경우 이 스플리터가 권장됩니다.

청크 오버랩 (Chunk Overlap)

  • 문맥 정보를 유지하기 위해 인접한 청크 사이에 일부 텍스트를 겹치게 하는 기능입니다.
  • 청크가 분리되면서 문맥 정보가 누락되는 것을 방지합니다.
  • 특히 문장 간의 관계가 중요한 경우 유용합니다.

기타 스플리터

  • 코드 스플리터: 파이썬, LaTeX, HTML 등 코드 형식의 텍스트를 분할하는 데 사용됩니다. 언어별 구분자를 사용해 코드 구조를 유지하며 분할합니다.
  • 토큰 단위 스플리터: 텍스트를 토큰 단위로 분할하며, LLM의 토큰 제한을 정확하게 관리하는 데 유용합니다.
  • 토큰 기반 스플릿을 위해 tiktoken 모듈을 설치하고, LLM 모델의 토크나이저를 사용해야합니다.

실습 및 예시

  • 비디오에서는 영어 및 한국어 문서를 사용하여 텍스트 스플리터를 적용하는 방법을 보여줍니다.
  • split_text 함수와 create_documents 함수를 사용하여 텍스트를 청크로 분할하고 문서 객체를 생성하는 과정을 보여줍니다.

결론

텍스트 스플리터는 LLM 기반 애플리케이션에서 매우 중요한 역할을 합니다. 다양한 스플리터 종류를 이해하고 적절한 방법을 선택하여 토큰 제한 문제를 해결하고 문맥 정보를 유지할 수 있습니다. 특히, 리커시브 캐릭터 텍스트 스플리터와 토큰 단위 스플리터는 LLM의 성능을 최적화하는 데 효과적입니다.