작성
·
23
0
아래의 코드와 같이 chunk_size와 seperator 두가지 기준으로 문서를 분할하는 text_splitter를 정의하였을때, 어떤 것을 우선하여 텍스트를 분할하나요?
예를 들어 토큰사이즈가 100개 이하지만 정규식 조건에 해당하여 분할을 하는것인지 혹은 토큰사이즈 100개 이상이 되어 정규식 조건을 충족하지 않아도 문서를 분할하는지 궁금합니다.
text_splitter = CharacterTextSplitter.from_huggingface_tokenizer(
tokenizer=tokenizer,
separator=r"[.!?]\s+",
chunk_size=100,
chunk_overlap=0,
is_separator_regex=True,
keep_separator=True,
)
답변 2
0
안녕하세요. 판다스 스튜디오입니다.
LangChain의 CharacterTextSplitter
는 일반적으로 separator
가 우선적인 제약 조건이고, chunk_size
가 보조 기준으로 작동합니다. 정규식 기준이 충족되면 분할점이 생기고, chunk_size
보다 작은 경우에는 결합하고 chunk_size
보다 큰 청크는 그대로 남게 됩니다.
0
안녕하세요, 인프런 AI 인턴입니다. 아이테킨님.
질문해 주신 CharacterTextSplitter
의 동작 원리에 대해 설명하겠습니다. 주어진 코드에서는 문서를 분할할 때 두 가지 기준이 사용됩니다: separator
와 chunk_size
.
separator
(분리자 조건):
separator=r"[.!?]\s+"
는 정규식을 기준으로 문장을 분할합니다. 이 조건은 주로 문장 끝에 오는 마침표, 느낌표, 물음표 뒤에 오는 공백을 기준으로 텍스트를 분할하는 역할을 합니다.chunk_size
(청크 크기 조건):
chunk_size=100
으로 설정되어 있는 부분은 각 chunk의 최대 토큰 개수를 의미합니다. 이를 통해 각 문서는 최대 100개 토큰까지의 크기로 분할됩니다.그렇다면, 두 기준이 충돌하는 경우에는 어떤 것이 우선일까요?
separator
를 활용하여 문장 수준에서 먼저 텍스트를 분할하게 됩니다. 하지만 분리된 문장이 여전히 chunk_size
기준을 초과하는 경우, 그것이 새로운 chunk로 다시 더 작은 단위로 나누어지게 됩니다. 이 과정에서 chunk_size
와 separator
조건이 동시에 충족되지 않는 경우, chunk_size
를 우선으로 하여 최대 BPE 토큰 수에 맞추어 청크가 형성됩니다.즉, 먼저 separator
를 기준으로 문장이 나누어지고 그 후에도 chunk_size
를 넘지 않도록 추가 처리를 통해 청크가 형성됩니다. 따라서, 정규식 조건에 맞춰 분할이 되지만 결과적으로 청크가 여전히 클 경우 chunk_size
조건에 의해 크기가 조정됩니다.
이에 대한 더 자세한 논의는 링크된 관련 포럼에서 찾아보실 수 있을 것입니다. विभिन्न डाटा सेट्स के प्रबंधक के लिए लांगचैन में नियमित प्रश्नों पर एक दिलचस्प विषय है।
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.