Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Chunks com significado - como garantir

No video, é dito que chunks não são pedaços aleatórios de texto, mas, sim, pedaços com significado. Como garantir a questão do significado? No código, ao construir chunks, usa-se como argumento apenas o tamanho do chunk e a sobreposição entre chunks. Parte-se do pressuposto que que um certo tamanho de chunk vai garantir que ele tenha significado?

2 respostas
solução!

Oi, Monica. Tudo bem?

Você tem razão ao notar que, quando usamos apenas chunk_size e chunk_overlap, estamos aplicando uma técnica chamada Character-based Splitting (ou Recursive Character), que é puramente matemática e não "entende" o conteúdo.

Garantir que um pedaço de texto mantenha seu significado envolve ir além da contagem de caracteres. As principais formas de buscar essa preservação de contexto:

Estratégia de sobreposição (Overlap):

O parâmetro chunk_overlap que você viu no código serve justamente para mitigar a perda de significado. Se cortarmos uma frase exatamente no meio, a ideia principal pode ser dividida entre dois blocos.

A sobreposição mantém o final de um bloco no início do próximo, ajudando o modelo de embedding a manter o fio da meada semântica.

Divisão por estrutura (Recursive character text splitter):

O LangChain utiliza, por padrão, separadores inteligentes. Ele não corta o texto em qualquer lugar; ele tenta primeiro cortar em parágrafos (\n\n), depois em quebras de linha (\n), depois em espaços entre palavras e, por último, em letras.

  • Como isso ajuda: Isso garante que, sempre que possível, o seu pedaço de texto termine no fim de um parágrafo ou frase, o que naturalmente preserva mais significado do que um corte seco no meio de uma palavra.

Semantic chunking:

Pra casos onde o significado é crítico, existe uma técnica mais avançada chamada Semantic Chunking. Em vez de definir um tamanho fixo, o código analisa a semântica entre as frases.

Ele só "corta" o texto quando percebe que o assunto mudou drasticamente (baseado na distância vetorial entre as frases).

Chunking por documentos específicos:

Se você estiver trabalhando com arquivos Markdown, HTML ou Python, pode usar splitters que entendem a hierarquia do documento. Por exemplo:

  • Em um código Python, o separador entende onde começa e termina uma função.
  • Em um documento jurídico, ele pode ser configurado para respeitar os Artigos e Incisos.

Então pra resumir: o tamanho do chunk (chunk_size) é uma aposta estatística: acredita-se que, dentro de 500 ou 1000 caracteres, exista informação suficiente para responder a uma pergunta. Mas, o verdadeiro "segredo" está em escolher separadores que respeitem a estrutura lógica do seu texto.

Se você perceber que as respostas do seu chatbot estão ficando "cortadas" ou confusas, o primeiro passo costuma ser aumentar o chunk_overlap ou testar um chunk_size maior para capturar mais contexto em cada bloco.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Oi, Lorena! Tudo bom?

Muito obrigada pela resposta! De fato, continuando o curso, vi que a aula seguinte tratava justamente desse tópico :)