isPowerfulBlog
[LangChain] LLM으로 문서 요약하기 (summarization) 본문
문제 정의
- 퀴즈 생성 시 input으로 들어오는 pdf 파일들을 모두 영구적으로 s3에 저장하는 것은 저장비용 부담이 크다. 따라서 파일 내용 요약을 포함한 생성 날짜, 생성자 등등 메타정보를 저장하는 것이 낫다.
- 퀴즈를 생성한 사람을 제외하고는 어떤 내용의 파일로 퀴즈가 생성되었는지 알 수 없다.
- 생성자가 직접 설명을 적어줄 수 있긴 하지만 보통의 유저들은 귀찮으니 null값으로 두는 경우가 많을 것이다.
위와 같은 이유로 자동으로 생성된 파일 내용 요약이 필요해졌다.
문서 요약 방식
LLM으로 문서를 요약하는 방식은 크게 세 가지로 나뉘어질 수 있다.
- Stuff - 한 번에 요약하기
- Map Reduce - 작게 쪼갠 문서들을 각각 요약하고, 병합하여 다시 한 번 요약하기 (병렬)
- Refine - 작게 쪼갠 문서들을 순차적으로 요약, 이전의 요약에 다음 내용을 추가하여 요약 (직렬)
1. Stuff
문서를 한 번에 통째로 input으로 넣어주는 방식
문서의 양이 많지 않다면(토큰 수가 input limit보다 적다면) stuff 방식으로도 충분히 문서 요약을 할 수 있다. 가장 간단한 방법이다.
문서의 개수가 여러개라면 하나의 문서로 combine하는 역할을 하기도 한다.
2. Map Reduce
문서를 작은 chunk 단위로 쪼개어, 각각 요약하고, 요약본들을 병합하여 최종 요약을 생성하는 방식 (병렬)
- chunk_1, 2, 3을 각각 요약한다.
- 각각의 요약본을 합쳐 한 번 더 요약한다.
- 비동기처리를 하면 병렬로 처리할 수 있다. 속도가 굉장히 크게 향상된다. 다만 순서가 보장되지 않기 때문에 결과물 또한.. 읍읍..
- 비동기처리를 하지 않으면 순서가 보장된다.
- 이 전에 데이터엔지니어링 관련해서 깔짝깔짝 공부하던 맵리듀스 방식이 여기서도 이런식으로 적용될 수 있다는 점이 신기하고 재밌었다.
3. Refine
문서를 작은 chunk 단위로 쪼개어, 순차적으로 요약하는 방식. 이전의 요약에 다음 내용을 추가하여 요약하는 방식 (직렬)
- chunk_1을 요약한다.
- chunk_1의 요약본 + chunk_2 를 해서 다시 요약한다.
- 2의 결과물 + chunk_3을 해서 다시 요약한다.
- 순차적으로 요약을 하기 때문에 병렬처리가 불가능하다.
- 이전의 요약이 그다음의 요약과정에 참여하면서 점점 요약을 보완해 나가는 방식이다. 비동기처리 하지 않은 맵리듀스와 비슷해보이지만 이전의 요약본이 영향을 미친다는 점에서 차이가 있다.
Reference
'AI' 카테고리의 다른 글
[NLP] 다양한 문서에서 중요한 키워드 추출하기 (2) | 2024.05.06 |
---|---|
[LangChain] Text Splitter로 긴 문서를 작은 Chunk로 쪼개기 (0) | 2024.04.19 |
[LLM] LangChain 🦜🔗 (0) | 2023.11.07 |
[프로젝트] Anti-aginGAN for CAT based StyleGAN2 (0) | 2023.02.20 |
[Anaconda] 아나콘다 기본 명령어 (0) | 2023.01.24 |