당신.. Chunking이 뭔지 정확히 알아..?
2024.12.03.
Last updated
2024.12.03.
Last updated
이전 포스트에 이어서 더 많은 이야기를 해보자. 직전 포스트를 봤으면 알겠지만 우리는 "Chunking"이라는 작업을 단순하게 바라보지 말아야 한다. 이 행위 자체가 결국 데이터의 품질을 결정하기 때문에 한단계 추상화된 목표까지 고려해서 Chunking을 수행해야하고, 가장 베스트한 성능을 위해 Chunk가 가져야할 속성에 대해 이야기했었다. 본 포스트에서는 앞서말한 Chunk의 속성을 최대한으로 유지할 수 있게 Chunking하기 위한 일련의 기준에 대해 말하고자 한다.
잠깐 돌아가서 정리해보자. 필자는 RAG라는 분야에서의 Chunk에 대해 알아보았고, RAG의 본 목적은 LLM이 답변하는데 있어 관련된 정보(=context)를 넣어주어 다양한 방면에서 이득을 취하는것에 있다. 실질적으로 RAG는 LLM을 활용한 Conversation System, 즉 Chatbot에 많이 기용된다. 이것 또한 일련의 대화 형태를 취하고 있기 때문에 사람과 사람사이의 원활한 대화에 있어 한 번의 발화에 어떠한 정보가 담겨야 가장 이상적인지 생각해봐야 했고, 그 결과 아래와 같은 3가지 속성을 생각하게 된 것이다.
하나의 완결된 의미론적 구성을 지녀야 한다.
밀집된 정보포화도를 가져야 한다.
정보계층도를 반영하여 구성될 수록 완성도가 높다.
완결된 의미론적 구성은 Chunk의 내용이 끊기거나 부가정보가 필요없는 완전한 구성으로 이루어져야 한다는 것을 의미한다. 밀집된 정보포화도는 하나의 Chunk가 가질 수 있는 양이 한계가 있으니 그 안에 최대한 불필요한 정보없이 집약해서 구성되어야 한다는 점이고, 정보계층도를 반영해야한다는 것은 다수의 Chunk가 모여서 새로운 정보로 통합되는 경우 해당 Chunk에 그 내용이 포함되어야 한다는 것을 말한다.
자, 위의 내용을 바탕으로 우리한번 현실세계에 입각해서 생각해보자. 대부분 Chunking이 수행되기 전 원본 데이터(=raw data)는 매우 거대한 Corpus에 불과할 것이다. 문제는 그 형식이 환경과 상황에 맞추어 분류된다는 점이다. 내용과 구조가 각기다른 이 Corpus 내용을 일련의 기준에 맞추어 유형화해보는 것이 필요하다고 생각했고 수행하였다. 아래는 필자의 정성적 기준을 토대로 분류해놓은 것이다.
Common Structure
Simple Text
Quote Text
Demonstrative Text
Target in the Text
Target on the Content
Specific Structure
Structure-Aware Content
Plain Text
Markdown
SQL
Multi-Modal Content
Table
Figure
Image
Graph
Chart
하나하나 간단한 설명을 덧붙여보겠다.
먼저 대부분의 Corpus는 크게 2가지로 분류해볼 수 있을것 같다. 그것이 Common Structure와 Specific Structure인데 쉽게말하면 Common Structure은 '내용/구성 중심의 유형분류', Specific Structure는 '구조/구성 중심의 유형분류'라고 보면 된다. 조금 더 디테일하게 살펴보자. 앞서말했듯 Common Structure는 '내용/구성 중심의 유형분류'라고 했다. 이것에는 3가지 유형이 해당한다. Simple Text는 단순한 정보전달(Information Transfer)을 목적으로 하는 글의 내용을 의미한다. Quote Text는 Simple Text와 같으나 화자가 특정하게 설정되는 경우에 해당한다. 이 경우 절대 문맥을 해치지않고 보존하여 Chunking시 화자의 언급에 해당하는 쪽으로 같이 분류해야 한다. Demonstrative Text는 어떠한 대상을 지칭하는 글 내용을 의미하는데 더 세부적으로 나눠진다. Target in the text는 누군가를 지시하거나 지칭하는 내용인 경우에 해당하고 Target in the Content는 해당 글이 text를 포함한 구조적인 무언가를 지칭하는 Text인 경우에 해당한다.
한편, Specific Structure는 '구조/구성 중심의 유형분류'라고 하였다. 크게 Structured-Aware Content와 Multi-Modal Content로 구분하는데, Structured-Aware Content의 경우 해당 Corpus의 content적 구성에 따라 나눈다. Plain Text, Markdown, SQL등이 이에 해당하고 Plain Text는 일반적인 텍스트, Markdown은 markdown syntax를 가진 텍스트, SQL은 sql 문법이 반영된 텍스트를 의미한다. 이들의 공통점은 서로다른 형태의 표현(Representation)을 가지고 있을 뿐 그 표현방식의 차이(Syntax)를 잘 반영한다면 Common Structure에 해당하는 유형이 온전히 반영될 것이라 생각했다. 마찬가지로 Multi-Modal Content는 Table과 Figure로 나뉘고 Table은 tabular 형태로 존재하는 표 데이터를 의미하며 Figure는 일종의 삽화와 같은 텍스트의 표현방식을 벗어난 컨텐츠를 의미한다.
생각해보라. 만일 Common Structure와 Specific Structure에 대한 Chunking 기준이 각기 존재하고 주어진 Corpus가 문맥적인 면에서 Common Structure의 기준을, 구조적인 측면에서 Specific Structure를 따라간다면 Chunking시 정말 Awesome한 결과물을 만들수 있지 않을까?!