재귀적 분할 - 텍스트 스플리터 통합 가이드

재귀적 분할 - 텍스트 스플리터 통합 가이드

텍스트 스플리터는 일반 텍스트에 권장되는 것입니다. 문자 목록으로 파라미터화됩니다. 청크가 충분히 작아질 때까지 그 문자들로 순서대로 분할하려고 시도합니다. 기본 목록은 ["\n\n", "\n", " ", ""]입니다. 이는 가능한 한 오래 모든 단락(그리고 문장, 단어)을 함께 유지하려고 하는 효과가 있는데, 그것들이 일반적으로 가장 강하게 의미적으로 관련된 텍스트 조각이기 때문입니다.

  1. 텍스트 분할 방법: 문자 목록으로 분할.
  2. 청크 크기 측정 방법: 문자 수로 측정.

아래는 사용 예시를 보여줍니다.

npm install @langchain/textsplitters
pnpm install @langchain/textsplitters
yarn add @langchain/textsplitters
bun add @langchain/textsplitters

문자열 콘텐츠를 직접 얻으려면 .splitText를 사용하세요. LangChain Document 객체를 만들려면(예: 다운스트림 작업에서 사용하기 위해) .createDocuments를 사용하세요.

import { RecursiveCharacterTextSplitter } from "@langchain/textsplitters";

const splitter = new RecursiveCharacterTextSplitter({ chunkSize: 100, chunkOverlap: 0 })
const texts = splitter.createDocuments([{ pageContent: "..." }])
[
  { pageContent: "...", metadata: {} },
]

RecursiveCharacterTextSplitter에 대해 위에서 설정한 파라미터를 살펴보겠습니다:

  • chunkSize: 청크의 최대 크기, 크기는 lengthFunction에 의해 결정됨.
  • chunkOverlap: 청크 간 목표 중첩. 중첩 청크는 컨텍스트가 청크 사이에 분할될 때 정보 손실을 완화하는 데 도움을 줍니다.

단어 경계가 없는 언어의 텍스트 분할

일부 문자 체계에는 단어 경계가 없습니다(예: 중국어, 일본어, 태국어). 기본 구분자 목록 ["\n\n", "\n", " ", ""]로 텍스트를 분할하면 단어가 청크 사이에서 분할될 수 있습니다. 단어를 함께 유지하려면 추가 구두점을 포함하도록 구분자 목록을 재정의할 수 있습니다:

  • ASCII 마침표 ".", Unicode 전각 마침표 ""(중국어 텍스트에서 사용), 표의 문자 마침표 ""(일본어와 중국어에서 사용) 추가
  • 태국어, 미얀마어, 크메르어, 일본어에서 사용되는 Zero-width space 추가
  • ASCII 쉼표 ",", Unicode 전각 쉼표 "", Unicode 표의 문자 쉼표 "" 추가
const splitter = new RecursiveCharacterTextSplitter({
  separators: [
    "\n\n",
    "\n",
    " ",
    ".",
    ",",
    "\u200b",  // Zero-width space
    "\uff0c",  // Fullwidth comma
    "\u3001",  // Ideographic comma
    "\uff0e",  // Fullwidth full stop
    "\u3002",  // Ideographic stop
    "",
  ],
});

출처: 문서

더 알아보기 (Learn more)