Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Chunk ideal, existe um método ou uma ferramenta para auxiliar

Boa tarde. Sobre o Chunk ideal, o que sugerem para medir se o chunk que estou usando é bom ou ruim?Me ajudem a entender!

No vídeo foi recomendado verificar se o "Chunk" utilizado não resultou alguma informação quebrada, entretanto se o texto for longo e não houver uma divisão bem definida como ocorre no documento de exemplo onde as difisões são definidas por pergunta e resposta então poderia ser utilizado o parâmetro "overlap".

No exemplo no vídeo foi utilizado um chunk de 1200 que resultou em 10 nós, fiz os seguintes testes:

chunk = 500, total de 25 nós nodes[0].text : 'Serenatto – Loja online de cafés especiais Informações gerais P: Quais produtos são vendidos no site da Serenatto? R: A Serenatto é uma loja online especializada na venda de grãos de cafés especiais, \noferecendo\n \ngrãos\n \ntorrados,\n \nprovenientes\n \nde\n \nfazendas\n \nselecionadas\n \nde\n \nMinas\n \nGerais.\n \nTodos\n \nos\n \nnossos\n \ncafés\n \npossuem\n \nnota\n \nSCA\n \nacima\n \nde\n \n80,\n \ngarantindo\n \nalta\n \nqualidade\n \ne\n \nperfis\n \nsensoriais\n \nexcepcionais.\n P: De onde vêm os grãos de café da Serenatto? R: Nossos grãos são cuidadosamente selecionados de fazendas localizadas em Minas \nGerais,\n \nconhecidas\n \npela\n \nalta\n \nqualidade\n \nde\n \nseus\n \ncafés\n \nespeciais.\n \nCada\n \nfazenda\n \né\n \nescolhida\n \npor\n \nsuas\n \npráticas\n \nsustentáveis\n \ne\n \npelo\n \ncuidado\n \nexcepcional\n \ncom\n \na\n \nprodução.\n P: Qual é a quantidade vendida? R: Os grãos já torrados são vendidos em pacotes de 250g P: Quais são as variedades de café disponíveis?'

RESULTADO: 4 perguntas e 3 respostas

chunk = 1100, total de 11 nós nodes[0].text :

'Serenatto – Loja online de cafés especiais Informações gerais P: Quais produtos são vendidos no site da Serenatto? R: A Serenatto é uma loja online especializada na venda de grãos de cafés especiais, \noferecendo\n \ngrãos\n \ntorrados,\n \nprovenientes\n \nde\n \nfazendas\n \nselecionadas\n \nde\n \nMinas\n \nGerais.\n \nTodos\n \nos\n \nnossos\n \ncafés\n \npossuem\n \nnota\n \nSCA\n \nacima\n \nde\n \n80,\n \ngarantindo\n \nalta\n \nqualidade\n \ne\n \nperfis\n \nsensoriais\n \nexcepcionais.\n P: De onde vêm os grãos de café da Serenatto? R: Nossos grãos são cuidadosamente selecionados de fazendas localizadas em Minas \nGerais,\n \nconhecidas\n \npela\n \nalta\n \nqualidade\n \nde\n \nseus\n \ncafés\n \nespeciais.\n \nCada\n \nfazenda\n \né\n \nescolhida\n \npor\n \nsuas\n \npráticas\n \nsustentáveis\n \ne\n \npelo\n \ncuidado\n \nexcepcional\n \ncom\n \na\n \nprodução.\n P: Qual é a quantidade vendida? R: Os grãos já torrados são vendidos em pacotes de 250g P: Quais são as variedades de café disponíveis? R: Trabalhamos com as seguintes variedades de café em grãos: ● Bourbon vermelho ● Bourbon amarelo ● Blend especial (Mistura de Bourbon amarelo e vermelho) ● Catuaí amarelo ● Geisha ● Yirgacheffe P: Quais são os preços de cada variedade de café? R: Os preços sãos os seguintes: ● Bourbon vermelho: R$ 41,00 ● Bourbon amarelo: R$ 43,00 ● Blend especial: R$ 37,50 ● Catuaí amarelo: R$ 55,00 ● Geisha: R$ 105,00 ● Yirgacheffe: R$ 110,00'

RESULTADO: 5 perguntas e 5 respostas

chunk = 1180, total de 10 nós

  • o mesmo resultado que chunk = 1200 RESULTADO: 5 perguntas e 5 respostas

chunk = 9000, total de 10 nós

  • o mesmo resultado que chunk = 1200 RESULTADO: 5 perguntas e 5 respostas

RESULTADO APÓS OS TESTES

  • Verifiquei o conteúdo de cada node[0]... e o conteúdo correspondente, notei que dependendo do valor do "Chunk" poderá ocorrer de um node armazenar o conteúdo de uma pergunta e a resposta corresponde estar no próximo "nodes".
  • Diante disto, parece que o ajuste do "Chunk" está relacionado a garantir que o valor armazenado em cada "Chunk" seja o conteúdo exato de cada página, mas isso não parece fazer muito sentido pois com quanto mais seguimentado mais rápido será a busca pela informação que faça sentido à pergunta!?
1 resposta
solução!

Oi, Eduardo! Como vai?

Agradeço por compartilhar sua dúvida com a comunidade Alura.

Você trouxe um ponto muito relevante! De fato, não existe um tamanho de chunk universal que funcione para todos os casos. A escolha depende de dois fatores principais:

  1. Coerência da informação: O chunk precisa manter as informações contextualizadas, ou seja, pergunta e resposta devem estar no mesmo nó, se possível.

  2. Performance da busca: Chunks menores tendem a gerar buscas mais rápidas, porém podem perder contexto. Já chunks maiores preservam mais contexto, mas podem impactar levemente a performance.

Uma boa prática é observar se os chunks estão gerando quebras que dificultam o entendimento da IA. Sempre que isso acontecer, é válido usar o parâmetro overlap, justamente para evitar essas divisões ruins.

Veja um exemplo de como testar na prática:


from llama_index.text_splitter import SentenceSplitter

splitter = SentenceSplitter(chunk_size=1000, chunk_overlap=200)

nodes = splitter.get_nodes_from_documents(documentos)

print(nodes[0].text)

Esse código cria chunks de até 1000 caracteres com um overlap de 200, garantindo que uma parte do texto anterior continue no próximo chunk. Assim, você evita perder pedaços importantes.

Se após isso você perceber que ainda há separações indesejadas, vale pensar em criar uma lógica de chunk baseada em estruturas específicas, como separação por perguntas ("P:") e respostas ("R:"), em vez de simplesmente contar caracteres.

Resumindo: o chunk ideal é aquele que mantém o contexto necessário para responder corretamente e, ao mesmo tempo, não gera chunks tão grandes a ponto de prejudicar a performance.

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado