LangChain의 문서 처리 전략: 스터핑, 맵리듀스, 리파인, 맵 리랭크

LangChain Documents

LangChain Summarization Use case

LLM 어플리케이션을 위한 Chunking Strategies

문서를 여러 부분으로 나누는 과정을 청킹이라고 합니다, 이렇게 하면 원하는 LLM의 토큰 한도 내에 맞출 수 있습니다. LangChain에서는 세 가지 주요 청킹 전략이 있습니다: 스타핑(Stuffing), 맵리듀스(MapReduce), 그리고 리파인(Refine). 각 전략의 요약과 세부 정보는 다음과 같습니다:

1.스터핑 전략(Stuffing Strategy):

스터핑은 문서나 프롬프트와 같은 입력 내용을 모델의 입력 프롬프트에 어떠한 변경도 없이 직접 추가하는 것을 포함합니다. 이 방법은 더 짧은 입력에 대해서는 작동할 수 있지만, 상당한 양의 토큰을 처리할 때 문제가 될 수 있습니다, 왜냐하면 이는 빠르게 토큰 한도에 도달할 수 있기 때문입니다. 이 방법의 단순함에도 불구하고, 이는 확장 가능한 해결책이 아닙니다.

스터프 문서 체인(“스터프”는 “채우다” 또는 “채우다”의 의미로 사용됨)은 문서 체인 중 가장 간단명료합니다. 이 체인은 문서 목록을 가져와서 모두 프롬프트에 삽입하고 그 프롬프트를 LLM에 전달합니다. 이 체인은 문서가 작고 대부분의 호출에 대해 몇 개만 전달되는 애플리케이션에 잘 맞습니다.

2. MapReduce 전략:

MapReduce 전략은 더 긴 입력을 처리하기 위해 이를 작은 청크(이 경우에는 문서)로 분할하고, 이를 병렬로 처리한 다음 출력을 결합하여 최종 요약을 생성하는 것을 목표로 합니다. 이 접근 방식은 다음 단계를 포함합니다:

  • 맵 단계(Map Step): 각 문서는 모델의 프롬프트와 컨텍스트로 변환됩니다. 이 프롬프트들은 병렬로 LLM에 전송되며, 모델의 여러 요청을 동시에 처리할 수 있는 능력을 활용합니다.
  • 리듀스 단계(Reduce Step): 맵 단계에서 생성된 개별 요약들이 결합되어 모든 입력 문서를 요약하는 종합적인 요약을 생성합니다. 이 과정은 리덕션 함수를 사용하여 요약을 병합합니다.

MapReduce는 성능과 병렬 처리를 최적화하지만, API 호출 비용이 높아질 수 있고 요약 과정 중에 컨텍스트 손실이 발생할 수 있습니다.

맵 리듀스 문서 체인은 먼저 각 문서에 개별적으로 LLM 체인을 적용합니다(맵 단계), 체인 출력을 새 문서로 취급합니다. 그런 다음 모든 새 문서를 별도의 문서 결합 체인으로 전달하여 단일 출력을 얻습니다(리듀스 단계). 필요한 경우 맵된 문서를 압축하거나 축소하여 결합 문서 체인에 맞도록 할 수 있으며(이 체인은 종종 문서를 LLM에 전달합니다), 이 압축 단계는 필요에 따라 재귀적으로 수행됩니다.

3. Refine 전략:

Refine 전략은 함수형 프로그래밍 개념인 “foldl”에서 영감을 받습니다. 이 전략은 각 연속적인 요약을 다음 문서와 결합함으로써 입력을 반복적으로 요약하고 정제하는 과정을 포함하며, 점진적으로 정제된 출력을 생성합니다. 이 과정은 다음을 포함합니다:

foldl은 함수형 프로그래밍에서 리스트의 요소를 왼쪽에서 오른쪽으로 누적하여 처리하는 고차 함수입니다. 이 함수는 이진 함수, 초기 값, 그리고 처리할 리스트 세 가지 인자를 받아, 리스트의 각 요소에 이진 함수를 적용하면서 초기 값에서 시작하여 누적된 값을 계산합니다. foldl은 리스트의 모든 요소를 처리한 후 최종 누적된 결과를 반환합니다.

  • Foldl 유사점: 수치 곱셈 대신 이진 함수가 사용되어 문서와 그 요약을 결합합니다. 초기 값은 빈 문서 또는 초기 요약이며, 함수는 내용을 누적합니다.
  • Refine 체인: Lang Chain 프레임워크는 이 과정을 자동화하여 반복적인 정제를 단순화합니다. 이는 요약의 누적 및 정제를 관리하며, 수동 제어의 필요성을 줄입니다.

Refine 전략은 우아하고 효율적이며, 연속적인 반복을 통해 정제된 요약을 생성합니다. 이는 Lang Chain이 복잡한 작업을 관리하는 능력을 보여줍니다.

Refine 문서 체인은 입력 문서를 순환하며 반복적으로 답변을 업데이트하여 응답을 구성합니다. 각 문서에 대해, 이 체인은 모든 비문서 입력, 현재 문서, 그리고 최신 중간 답변을 LLM 체인에 전달하여 새로운 답변을 얻습니다.

Refine 체인은 한 번에 하나의 문서만 LLM에 전달하기 때문에, 모델의 컨텍스트에 들어갈 수 있는 문서보다 더 많은 문서를 분석해야 하는 작업에 적합합니다. 명백한 타협점은 이 체인이 예를 들어, Stuff 문서 체인보다 훨씬 더 많은 LLM 호출을 할 것이라는 것입니다. 또한 반복적으로 수행하기 어려운 특정 작업들도 있습니다. 예를 들어, 문서들이 서로를 자주 참조하거나 작업이 많은 문서로부터 자세한 정보를 요구할 때 Refine 체인의 성능이 떨어질 수 있습니다.

4. 맵 리랭크(Map Re-rank)

맵 리랭크 문서 체인은 각 문서에 대해 초기 프롬프트를 실행하여, 작업을 완료하려고 시도할 뿐만 아니라 답변에 대한 확신도를 나타내는 점수도 제공합니다. 가장 높은 점수를 받은 응답이 반환됩니다.

이 방식은 문서들 중 어떤 것이 가장 관련성이 높은지 또는 가장 정확한 정보를 제공하는지 판단하는 데 도움이 될 수 있습니다. 초기 프롬프트를 통해 각 문서를 개별적으로 평가하고, 가장 높은 점수를 받은 문서의 응답을 선택함으로써, 작업의 정확성과 효율성을 높일 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다