LongLLMLingua: 중간 손실을 줄이고 프롬프트 압축을 통한 RAG 비용 절감 (LongLLMLingua: Bye-bye to Middle Loss and Save on Your RAG Costs via Prompt Compression

  • 이 글은 GPT 모델로 자동 요약한 설명으로, 잘못된 내용이 있을 수 있으니 원문을 참고해주세요! :smile:
  • 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다! :bowing_man:

소개

LongLLMLingua: 중간 손실을 줄이고 프롬프트 압축을 통한 RAG 비용 절감 (LongLLMLingua: Bye-bye to Middle Loss and Save on Your RAG Costs via Prompt Compression

Retrieval-Augmented Generation (RAG)의 효율성을 높이고, '중간 손실(Middle Loss)' 문제와 높은 비용 문제를 해결하기 위한 LongLLMLingua 기술에 대해 설명합니다. LongLLMLingua의 프롬프트 압축을 통해 RAG 시 정확도를 최대 21.4% 향상시키고, 토큰 사용을 1/4로 줄이며, 긴 컨텍스트 상황에서 1,000개의 예시당 $28을 절약할 수 있습니다.

주요 내용

Framework of LongLLMLingua

RAG와 LongLLMLingua

RAG는 특정 텍스트 컬렉션에 기반한 AI 에이전트를 생성하는 데 가장 신뢰할 수 있는 기술입니다. LlamaIndex와 같은 프레임워크는 사용자가 LLM에서 전문화된 데이터를 더 편리하게 활용할 수 있도록 지원합니다. 그러나 RAG 과정에서 가능한 한 많은 관련 문서를 검색하고 이를 긴 검색된 프롬프트로 결합하는 방식을 사용하면 프롬프트에 노이즈가 추가되거나 LLM이 핵심 정보를 인식하는 것이 어려워질 수 있습니다.

중간 손실(Middle Loss) 문제

또한, RAG 과정에서 중간 손실(Middle Loss)이라 불리는 문제도 발생합니다. RAG는 관련된 문서들을 검색하고 이를 결합하여 AI 에이전트에게 제공하는 방식을 사용합니다. 그러나 이 과정에서 중요한 정보를 중간에 '잊어버리는' 현상이 발생할 수 있습니다. 이는 검색된 문서가 너무 많거나 관련성이 낮은 경우, LLM이 핵심 정보를 인식하는 데 어려움을 겪기 때문입니다.

LongLLMLingua는 에이전트의 성능을 저하시키는 중간 손실 문제를 해결하기 위해 핵심 정보를 유지하면서 프롬프트 압축하기 위한 다음의 과정들을 제안하였습니다.

프롬프트 압축: 질문-인식 코스-그레인드 압축 (Question-Aware Coarse-Grained Compression)

이름 그대로 질문을 인식하고 대충 정제하는 것이 목표인 이 압축 단계은 질문과 컨텍스트 사이의 관련성을 평가하여 중요하지 않거나 관련 없는 정보를 압축합니다. 이는 LLM이 처리하는 프롬프트 내에서 질문과 관련된 컨텍스트를 식별하고 강조하는데 중점을 둡니다.

세부적으로는 먼저 질문을 분석하여 핵심 키워드와 개념을 식별한 뒤, 전체 컨텍스트를 검토하여 질문과 관련된 부분을 식별합니다. 이러한 과정을 거쳐 관련성이 높은 문장이나 단락을 추출하여 LLM이 중요한 정보에 집중하도록 하여 응답의 정확도와 관련성을 높일 수 있도록 합니다.

프롬프트 압축: 혼란도 평가 (Perplexity Evaluation)

혼란도 평가는 LLM이 특정 컨텍스트에서 질문을 이해하는데 얼마나 '혼란(preplexity)'을 겪는지를 측정합니다. 혼란도가 높은 경우, 질문과 관련성이 낮은 컨텍스트를 가져왔을 수 있습니다. 따라서, 압축 과정에서 질문에 대한 혼란도를 기반으로 컨텍스트와 질문 사이의 관련성을 평가합니다.

세부적으로는 먼저 LLM이 주어진 컨텍스트를 참고하여 질문에 대한 초기 답변을 생성합니다. 그런 다음, 생성된 답변의 혼란도를 측정합니다. 이 때 혼란도 지표는 질문과 컨텍스트 사이의 관련성을 측정할 수 있도록 설정합니다. 이를 통해 LLM은 더 높은 관련성을 갖는 컨텍스트를 식별할 수 있게 됩니다.

S_i = perplexity(x_i | x_{<i}) - perplexity(x_i | x^{que}, x_{<i})

프롬프트 압축: 환각 문제 완화 (Mitigating Hallucination Issues)

마지막으로, LLM이 실제 데이터에 기반하지 않고 잘못된 정보를 생성하는 환각(Hallucination) 문제를 완화합니다. 이를 위해 LongLLMLingua는 질문 뒤에 문장을 추가하는 방법을 사용하여 LLM의 응답 범위를 제한합니다.

세부적으로는, 이 질문에 대한 답을 주어진 문서들에서 얻을 수 있습니다.(We can get the answer to this question in the given documents) 라는 문장을 추가하여 LLM이 주어진 문서 내에서만 정보를 추출하도록 유도합니다. 이렇게 하면 잘못된 정보를 비롯한 환각 문제를 다소 완화할 수 있습니다.

실험 결과 및 결론

LongLLMLingua Experiments 1
LongLLMLingua Experiments 2

또한, LongLLMLingua는 RAG 프레임워크에서 NodePostprocessor로 사용할 수 있습니다. 구체적인 사용 방법은 제공된 아래 참고 링크에서 예시 코드를 참조할 수 있습니다.

더 읽어보기

[GN] Microsoft (Long)LLMLingua - 추론 가속 및 비용 절감을 위해 프롬프트 압축하기

LLMLingua 논문

LongLLMLingua 논문

HuggingFace 데모

GitHub 저장소

LongLLMLingua 소개 글

LLMLingua 및 LongLLMLingua 프로젝트 홈페이지

https://llmlingua.com/

LLMLingua 설계 관련 블로그 글

LLMLingua 예제 코드

  1. LongLLMLingua 설치 및 사용 예제 코드 (노트북)

  2. LlamaIndex를 사용한 RAG 예제 코드 (노트북)

  3. LLMLingua와 다른 Re-ranking 방법론들을 비교한 예제 코드 (노트북)