Compartilhar via


Habilidade cognitiva do Text Split

Importante

Alguns parâmetros estão em visualização pública nos Termos de Uso Complementares. A API REST de visualização dá suporte a esses parâmetros.

A habilidade Text Split quebra o texto em partes do texto. Você pode especificar se deseja quebrar o texto em sentenças ou em páginas de um tamanho específico. Essa habilidade será útil se houver requisitos de comprimento máximo de texto em outras habilidades downstream, como habilidades de inserção que passam partes de dados para modelos de inserção no Azure OpenAI e em outros provedores de modelo. Para obter mais informações sobre esse cenário, consulte Documentos de partes para pesquisa vetorial.

Vários parâmetros são específicos da versão. A tabela de parâmetros skills observa a versão da API na qual um parâmetro foi introduzido para que você saiba se uma atualização de versão é necessária. Para usar recursos específicos da versão, como agrupamento de token em 2024-09-01-preview, você pode usar o portal do Azure ou direcionar uma versão da API REST ou verificar um log de alterações do SDK do Azure para ver se ele dá suporte ao recurso.

O portal do Azure dá suporte à maioria dos recursos de visualização e pode ser usado para criar ou atualizar um conjunto de habilidades. Para atualizações da habilidade Divisão de Texto, edite a definição JSON do conjunto de habilidades para adicionar novos parâmetros de visualização.

Observação

Essa habilidade não está associada aos serviços de IA do Azure. Ele não pode ser cobrado e não tem nenhum requisito de chave dos serviços de IA do Azure.

@odata.type

Microsoft.Skills.Text.SplitSkill

Parâmetros de habilidades

Os parâmetros diferenciam maiúsculas de minúsculas.

Nome do parâmetro Versão Descrição
textSplitMode Todas as versões pages ou sentences. As páginas têm um comprimento máximo configurável, mas a habilidade tenta evitar truncar uma frase para que o comprimento real possa ser menor. As frases são uma cadeia de caracteres que termina na pontuação de término da frase, como um ponto de interrogação, ponto de interrogação ou ponto de exclamação, supondo que o idioma tenha pontuação de fim de frase.
maximumPageLength Todas as versões Aplica-se somente se textSplitMode estiver definido como pages . Para unit definido como characters, este parâmetro refere-se ao comprimento máximo da página em caracteres, conforme medido por String.Length. O valor mínimo é 300, o máximo é 50000 e o valor padrão é 5000. O algoritmo faz o possível para quebrar o texto em limites de frase, portanto, o tamanho de cada parte pode ser um pouco menor que maximumPageLength.

For unit set to azureOpenAITokens, o comprimento máximo da página é o limite de comprimento do token do modelo. Para modelos de inserção de texto, uma recomendação geral para o comprimento da página é 512 tokens.
defaultLanguageCode Todas as versões (opcional) Um dos seguintes códigos de idioma: am, bs, cs, da, de, en, es, et, fr, he, hi, hr, hu, fi, id, is, it, ja, ko, lv, no, nl, pl, pt-PT, pt-BR, ru, sk, sl, sr, sv, tr, ur, zh-Hans. O padrão é inglês (en). Algumas coisas para levar em consideração:
  • Fornecer um código de idioma é útil para evitar cortar uma palavra pela metade para idiomas não brancos, como chinês, japonês e coreano.
  • Se você não souber o idioma com antecedência (por exemplo, se estiver usando LanguageDetectionSkill para detectar o idioma), recomendamos o en padrão.
pageOverlapLength 01-07-2024 Aplica-se somente se textSplitMode estiver definido como pages . Cada página começa com esse número de caracteres ou tokens do final da página anterior. Se esse parâmetro for definido como 0, não haverá texto sobreposto em páginas sucessivas. Este exemplo inclui o parâmetro.
maximumPagesToTake 01-07-2024 Aplica-se somente se textSplitMode estiver definido como pages . Número de páginas a serem retornadas. O padrão é 0, o que significa retornar todas as páginas. Você deverá definir esse valor se apenas um subconjunto de páginas for necessário. Este exemplo inclui o parâmetro.
unit 2024-09-01-preview New. Aplica-se somente se textSplitMode estiver definido como pages . Especifica se deve ser dividido por characters (padrão) ou azureOpenAITokens. A configuração da unidade afeta maximumPageLength e pageOverlapLength.
azureOpenAITokenizerParameters 2024-09-01-preview New. Um objeto que fornece parâmetros extras para a azureOpenAITokens unidade.

encoderModelName é um tokenizer designado usado para converter texto em tokens, essencial para tarefas de processamento de linguagem natural (NLP). Modelos diferentes usam tokenizadores diferentes. Os valores válidos incluem cl100k_base (padrão) usados por GPT-35-Turbo e GPT-4. Outros valores válidos são r50k_base, p50k_base e p50k_edit. A habilidade implementa a biblioteca tiktoken por meio do SharpToken e Microsoft.ML.Tokenizers não oferece suporte a todos os codificadores. Por exemplo, atualmente não há suporte para codificação o200k_base usada pelo GPT-4o.

allowedSpecialTokens define uma coleção de tokens especiais que são permitidos no processo de tokenização. Tokens especiais são cadeias de caracteres que você deseja tratar exclusivamente, garantindo que eles não sejam divididos durante a geração de tokens. Por exemplo, ["[START"], "[END]"]. Para idiomas nos quais a biblioteca tiktoken não está executando a tokenização conforme o esperado, é recomendável usar a divisão de texto.

Entradas de habilidades

Nome do parâmetro Descrição
text O texto a ser dividido em subcadeias.
languageCode (opcional) Código de idioma para o documento. Se você não souber o idioma das entradas de texto (por exemplo, se estiver usando LanguageDetectionSkill para detectar o idioma), poderá omitir esse parâmetro. Se você definir languageCode como um idioma que não estiver na lista com suporte para defaultLanguageCode, um aviso será emitido e o texto não será dividido.

Saídas de habilidades

Nome do parâmetro Descrição
textItems A saída é uma matriz de subcadeias de caracteres que foram extraídas. textItems é o nome padrão da saída.

targetName é opcional, mas se você tiver várias habilidades de Divisão de Texto, certifique-se de definir targetName para não substituir os dados da primeira habilidade pela segunda. Se targetName estiver definido, use-o em mapeamentos de campo de saída ou em habilidades downstream que consomem a saída da habilidade, como uma habilidade de inserção.

Definição de exemplo

{
    "name": "SplitSkill", 
    "@odata.type": "#Microsoft.Skills.Text.SplitSkill", 
    "description": "A skill that splits text into chunks", 
    "context": "/document", 
    "defaultLanguageCode": "en", 
    "textSplitMode": "pages", 
    "unit": "azureOpenAITokens", 
    "azureOpenAITokenizerParameters":{ 
        "encoderModelName":"cl100k_base", 
        "allowedSpecialTokens": [ 
            "[START]", 
            "[END]" 
        ] 
    },
    "maximumPageLength": 512,
    "inputs": [
        {
            "name": "text",
            "source": "/document/text"
        },
        {
            "name": "languageCode",
            "source": "/document/language"
        }
    ],
    "outputs": [
        {
            "name": "textItems",
            "targetName": "pages"
        }
    ]
}

Entrada de exemplo

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "text": "This is the loan application for Joe Romero, a Microsoft employee who was born in Chile and who then moved to Australia...",
                "languageCode": "en"
            }
        },
        {
            "recordId": "2",
            "data": {
                "text": "This is the second document, which will be broken into several pages...",
                "languageCode": "en"
            }
        }
    ]
}

Saída de exemplo

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "textItems": [
                    "This is the loan...",
                    "In the next section, we continue..."
                ]
            }
        },
        {
            "recordId": "2",
            "data": {
                "textItems": [
                    "This is the second document...",
                    "In the next section of the second doc..."
                ]
            }
        }
    ]
}

Exemplo de agrupamento e vetorização

Este exemplo é para vetorização integrada.

  • pageOverlapLength: A sobreposição de texto é útil em cenários de agrupamento de dados porque preserva a continuidade entre partes geradas do mesmo documento.

  • maximumPagesToTake: Os limites de ingestão de página são úteis em cenários de vetorização porque ajudam você a permanecer abaixo dos limites máximos de entrada dos modelos de inserção que fornecem a vetorização.

Definição de exemplo

Essa definição adiciona pageOverlapLength de 100 caracteres e maximumPagesToTake de um.

Supondo que sejam maximumPageLength 5.000 caracteres (o padrão), processa "maximumPagesToTake": 1 os primeiros 5.000 caracteres de cada documento de origem.

Este exemplo define textItems como myPages through targetName. Porque targetName está definido, myPages é o valor que você deve usar para selecionar a saída da habilidade Divisão de Texto. Use /document/mypages/* em habilidades downstream, mapeamentos de campo de saída do indexador, projeções de repositório de conhecimento e projeções de índice.

{
    "@odata.type": "#Microsoft.Skills.Text.SplitSkill",
    "textSplitMode" : "pages", 
    "maximumPageLength": 1000,
    "pageOverlapLength": 100,
    "maximumPagesToTake": 1,
    "defaultLanguageCode": "en",
    "inputs": [
        {
            "name": "text",
            "source": "/document/content"
        },
        {
            "name": "languageCode",
            "source": "/document/language"
        }
    ],
    "outputs": [
        {
            "name": "textItems",
            "targetName": "mypages"
        }
    ]
}

Entrada de exemplo (igual ao exemplo anterior)

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "text": "This is the loan application for Joe Romero, a Microsoft employee who was born in Chile and who then moved to Australia...",
                "languageCode": "en"
            }
        },
        {
            "recordId": "2",
            "data": {
                "text": "This is the second document, which will be broken into several sections...",
                "languageCode": "en"
            }
        }
    ]
}

Saída de exemplo (observe a sobreposição)

Em cada matriz "textItems", o texto à direita do primeiro item é copiado para o início do segundo item.

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "textItems": [
                    "This is the loan...Here is the overlap part",
                    "Here is the overlap part...In the next section, we continue..."
                ]
            }
        },
        {
            "recordId": "2",
            "data": {
                "textItems": [
                    "This is the second document...Here is the overlap part...",
                    "Here is the overlap part...In the next section of the second doc..."
                ]
            }
        }
    ]
}

Casos de erro

Se não houver suporte para um idioma, um aviso será gerado.

Confira também