강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

아이테킨님의 프로필 이미지
아이테킨

작성한 질문수

RAG 마스터: 기초부터 고급기법까지 (feat. LangChain)

RAG 검색기 1 - Semantic Search (VectorStore Retriever)

Text_splitter관련 질문입니다.

작성

·

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의 동작 원리에 대해 설명하겠습니다. 주어진 코드에서는 문서를 분할할 때 두 가지 기준이 사용됩니다: separatorchunk_size.

  1. separator (분리자 조건):

    • 코드에서 설정한 separator=r"[.!?]\s+"는 정규식을 기준으로 문장을 분할합니다. 이 조건은 주로 문장 끝에 오는 마침표, 느낌표, 물음표 뒤에 오는 공백을 기준으로 텍스트를 분할하는 역할을 합니다.
  2. chunk_size (청크 크기 조건):

    • chunk_size=100으로 설정되어 있는 부분은 각 chunk의 최대 토큰 개수를 의미합니다. 이를 통해 각 문서는 최대 100개 토큰까지의 크기로 분할됩니다.

그렇다면, 두 기준이 충돌하는 경우에는 어떤 것이 우선일까요?

  • 보통은 separator를 활용하여 문장 수준에서 먼저 텍스트를 분할하게 됩니다. 하지만 분리된 문장이 여전히 chunk_size 기준을 초과하는 경우, 그것이 새로운 chunk로 다시 더 작은 단위로 나누어지게 됩니다. 이 과정에서 chunk_sizeseparator 조건이 동시에 충족되지 않는 경우, chunk_size를 우선으로 하여 최대 BPE 토큰 수에 맞추어 청크가 형성됩니다.

즉, 먼저 separator를 기준으로 문장이 나누어지고 그 후에도 chunk_size를 넘지 않도록 추가 처리를 통해 청크가 형성됩니다. 따라서, 정규식 조건에 맞춰 분할이 되지만 결과적으로 청크가 여전히 클 경우 chunk_size 조건에 의해 크기가 조정됩니다.

이에 대한 더 자세한 논의는 링크된 관련 포럼에서 찾아보실 수 있을 것입니다. विभिन्न डाटा सेट्स के प्रबंधक के लिए लांगचैन में नियमित प्रश्नों पर एक दिलचस्प विषय है।

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

아이테킨님의 프로필 이미지
아이테킨

작성한 질문수

질문하기