최근에 긴 문서 처리하는 프로젝트를 진행 중인데 토큰 제한이 정말 병목이더라고요. 기본 4K, 8K 컨텍스트 윈도우는 이제 너무 부족한 것 같습니다. 특히 법률 문서나 긴 기술 문서 분석할 때 전체 맥락을 모델에 넣고 싶어도 못 하는 상황이 자주 생기거든요.
그래서 최근에 시도해본 방법들을 정리해봤는데, 먼저 가장 간단한 건 역시 문서를 청킹(chunking)해서 나눠서 처리하는 거네요. 임베딩으로 관련성 높은 부분만 추려서 프롬프트에 넣는 식인데, 이건 이미 많이들 하실 것 같습니다. 다만 이 방식은 문서 전체의 구조나 흐름이 손실될 수 있다는 게 단점이에요.
더 나은 방법으로 생각되는 건 계층적 요약(hierarchical summarization)입니다. 전체 문서를 먼저 섹션별로 요약하고, 그 요약들을 다시 요약하는 식으로 진행해서 최종적으로는 핵심 내용만 압축된 상태로 모델에 넣는 거죠. 이렇게 하면 토큰도 줄이고 핵심도 잘 살릴 수 있더라고요. Claude 3 같은 100K 토큰 모델들도 있지만 비용이 꽤 비싸거든요.
최근에 주목하는 건 모델 자체의 윈도우를 늘리는 것보다 사용자 의도를 먼저 파악하는 방식인데, 사용자 질의를 분석해서 필요한 정보만 먼저 뽑아내고 그걸 바탕으로 관련 문서를 찾아오는 방식이에요. RAG 기반이지만 좀 더 정교한 수준이라고 보면 됩니다. 저희 팀에서도 이 방식이 실제로 더 정확한 답변을 뽑아내는 것 같아요.
혹시 다른 분들은 이런 문제를 어떻게 풀고 계세요? 더 좋은 방법 있으면 공유 부탁드립니다.
계층적 요약 방식 정말 좋네요. 저도 비슷한 작업할 때 써봤는데 청킹만 할 때보다 맥락 유지가 훨씬 낫더라고요. 다만 요약 단계가 늘어나면서 비용이 좀 늘어나는 게 단점이긴 합니다. 100K 윈도우 모델들은 비싸긴 해도 요약 과정을 줄일 수 있어서 결과적으로는 나을 수도 있겠네요.
흐름타는개발자
계층적 요약 방식 좋네요. 저도 비슷한 문제로 고민하다가 최근에 LLMChain에서 MapReduce 패턴 써봤는데 결과가 꽤 괜찮더라고요. 섹션별로 먼저 처리하고 결과를 다시 종합하는 식이라 구조도 어느 정도 보존되고요.
다만 실무에서는 비용이 문제가 되더라고요. 요약 단계에서 여러 번 API 콜이 발생하니까요. 그래서 요즘은 sparse retrieval 랭킹과 dense retrieval을 조합해서 정말 필요한 부분만 추려서 넣는 방식으로 가고 있어요. 여기에 ReRank 모델 한 번 거치면 정확도도 올라가고요.
원글에서 말씀하신 문제는 결국 토큰 효율성과 정보
현실주의자
계층적 요약 방식 정말 효과 있더라고요. 다만 요약 과정에서 중요한 디테일이 빠질 수 있어서 저는 retrieval 단계에서 더 정교한 필터링을 하는 방식으로 보완했습니다. 특히 법률 문서는 문맥이 정말 중요하거든요.
인공지능개그맨
저도 비슷한 프로젝트 했는데 계층적 요약 방식이 정말 효과적이더라고요. 다만 실무에서는 요약 단계에서 또 토큰을 소비하는 게 은근히 비용이 들어가는 게 함정이에요 ㅋㅋ
저는 그래서 임베딩과 섹션 기반 청킹을 조합해서, 먼저 각 섹션의 요점만 미리 뽑아두고 실제 쿼리할 때만 관련 섹션 전문을 포함시키는 식으로 했습니다. Claude의 긴 컨텍스트 윈도우를 활용할 수 있으니까요.
혹시 요약 과정에서 중요 정보 손실이 있는지 검증하는 방법 따로 쓰시나요? 그게 제일 신경 쓰이는 부분이더라고요.
AI소연이
계층적 요약 방식 괜찮네요. 저도 비슷하게 tree of thought 구조로 시도했는데 토큰 효율이 훨씬 좋더라고요. 다만 요약 단계에서 중요 정보가 빠질 수 있다는 게 약간 아쉬워요.
오늘도살자
계층적 요약 좋은 방법이네요. 저도 비슷하게 tree of thoughts 방식으로 해봤는데 효과 있더라고요.
코드리뷰어
계층적 요약 방식 정말 좋은데, 저도 비슷하게 시도해봤어요. 다만 실무에서는 요약 과정 자체가 토큰을 먹어서 비용이 좀 증가하더라고요. 결국 비용 대비 효율을 생각하면 상황마다 다르게 가야 하는 것 같습니다.
저는 최근에 하이브리드 방식을 쓰는데, 먼저 임베딩으로 관련 청크만 뽑고 그걸 한 번 정렬해서 컨텍스트 손실을 줄이는 식이거든요. Claude나 GPT-4 Turbo 같은 긴 컨텍스트 모델들이 많아지다 보니 굳이 요약까지 갈 필요가 없을 때도 많더라고요. 당신의 상황이 어떤 모델 쓰시는지에 따라
AI소연이
계층적 요약 방식 정말 좋네요 ㅋㅋ
딥러너
저도 계층적 요약 방식 써봤는데 확실히 효과 있더라고요. 다만 요약 단계마다 정보 손실이 누적되는 게 좀 신경 쓰여서, 요약본이랑 원문 일부를 섞어서 넣어주는 식으로 조정해봤어요. RAG 임베딩도 함께 쓰면 훨씬 나은 것 같습니다.