Novo no Elasticsearch? Participe do nosso webinar Introdução ao Elasticsearch. Você também pode iniciar um teste gratuito na nuvem do Elastic ou experimentar o Elastic em sua máquina agora.
Desde a versão 8.16, os usuários podem configurar a estratégia de fragmentação usada ao importar documentos longos para campos de texto semântico. A partir da versão 9.1 / 8.19, introduzimos uma nova estratégia de fragmentação recursiva configurável que utiliza uma lista de expressões regulares para dividir o documento em partes. O objetivo do chunking é dividir um documento longo em seções que englobem conteúdo relacionado. Nossas estratégias atuais dividem o texto em uma granularidade de palavras/frases, mas documentos escritos em formatos estruturados (ex.: O Markdown) geralmente contém conteúdo relacionado dentro de seções que são definidas por algumas strings separadoras (ex. cabeçalhos). Para esses tipos de documentos, estamos introduzindo a estratégia de fragmentação recursiva para aproveitar o formato de documentos estruturados e criar fragmentos melhores!
O que é fragmentação recursiva?
O particionamento recursivo percorrerá uma lista de seções fornecidas, separando padrões para dividir progressivamente um documento em segmentos menores até atingir o tamanho máximo desejado.
Como configuro o chunking recursivo?
A seguir, estão os valores configuráveis fornecidos pelo usuário para o particionamento recursivo:
- (obrigatório)
max_chunk_size: O número máximo de palavras em um bloco. - Qualquer uma das seguintes opções:
separatorsUma lista de padrões de strings de expressão regular que serão usados para dividir o documento em partes.separator_group: Uma string que será mapeada para uma lista padrão de separadores definida pela Elastic para uso em tipos específicos de documentos. Atualmente,markdowneplaintextestão disponíveis.
Como funciona o particionamento recursivo?
O processo de fragmentação recursiva, dado um documento de entrada, um max_chunk_size (medido em palavras) e uma lista de strings separadoras, é o seguinte:
- Se o documento de entrada já estiver dentro do tamanho máximo do bloco, retorne um único bloco que abranja toda a entrada.
- Divida o texto em partes potenciais com base nas ocorrências do separador. Para cada bloco potencial:
- Se o fragmento em potencial estiver dentro do tamanho máximo permitido, adicione-o à lista de fragmentos a serem retornados ao usuário.
- Caso contrário, repita a partir do passo 2, usando apenas o texto do possível bloco e dividindo-o usando o próximo separador da lista. Se não houver mais separadores para tentar, recorra à segmentação baseada em frases.
Exemplos de configuração de fragmentação recursiva
Além do tamanho do bloco, a principal configuração para o particionamento recursivo é selecionar quais separadores devem ser usados para dividir seus documentos. Se você não sabe por onde começar, o Elasticsearch oferece alguns grupos de separadores padrão que podem ser usados para casos de uso comuns.
Utilizando grupos separadores
Para utilizar um grupo separador, basta fornecer o nome do grupo que você deseja usar ao configurar as opções de fragmentação. Por exemplo:
Isso lhe dará uma estratégia de fragmentação recursiva que utiliza a lista de separadores ["(?<!\\n)\\n\\n(?!\\n)", "(?<!\\n)\\n(?!\\n)")]. Isso funciona bem para aplicações genéricas de texto simples, dividindo o texto em dois caracteres de nova linha, seguidos por um caractere de nova linha.
Também oferecemos um grupo separador markdown que utilizará a lista de separadores:
Esta lista de separadores funcionará bem para casos de uso gerais de Markdown, dividindo o texto em cada um dos 6 níveis de título e nos caracteres de quebra de seção.
Ao criar um recurso (ponto de extremidade de inferência/campo de texto semântico), a lista de separadores correspondentes ao grupo de separadores no momento será armazenada em suas configurações. Se o grupo separador for atualizado posteriormente, isso não alterará o comportamento dos seus recursos já criados.
Utilizando uma lista separadora personalizada
Se um dos grupos de separadores predefinidos não for adequado ao seu caso de uso, você pode definir uma lista personalizada de separadores que atenda às suas necessidades. Observe que expressões regulares podem ser fornecidas dentro da lista de separadores. Segue abaixo um exemplo de configurações de fragmentação configuradas com separadores personalizados:
A estratégia de fragmentação acima dividirá em 2 caracteres de nova linha, seguidos por 1 caractere de nova linha e, por último, em uma string “<my-custom-separator>”.
Um exemplo de fragmentação recursiva em ação.
Vejamos um exemplo de fragmentação recursiva em ação. Neste exemplo, usaremos as seguintes configurações de fragmentação com uma lista personalizada de separadores que dividem um documento Markdown usando os dois níveis de cabeçalho superiores:
Vamos analisar um documento Markdown simples, sem divisões em partes (unchunked):

Agora vamos usar as configurações de fragmentação definidas acima para dividir o documento em partes:



Nota: A quebra de linha no final de cada bloco (exceto o Bloco 3) não está destacada, mas está incluída dentro dos limites reais do bloco.
Comece a usar o chunking recursivo hoje mesmo!
Para obter mais informações sobre como utilizar este recurso, consulte a documentação sobre como configurar as definições de fragmentação.




