Partilhar via


Habilidade cognitiva de divisão de texto

Importante

Alguns parâmetros estão em pré-visualização pública em Termos de Utilização Suplementares. A API REST de visualização suporta esses parâmetros.

A habilidade Divisão de texto divide o texto em partes de texto. Você pode especificar se deseja dividir o texto em frases ou em páginas de um determinado comprimento. Essa habilidade é útil se houver requisitos de comprimento máximo de texto em outras habilidades a jusante, como incorporar habilidades que passam blocos de dados para incorporar modelos no Azure OpenAI e em outros provedores de modelos. Para obter mais informações sobre esse cenário, consulte Documentos de bloco para pesquisa vetorial.

Vários parâmetros são específicos da versão. A tabela de parâmetros de habilidades 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 fragmentação de token na visualização 2024-09-01, 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.

Nota

Essa habilidade não está vinculada aos serviços de IA do Azure. Não é faturável e não tem nenhum requisito de chave de serviços de IA do Azure.

@odata.type

Microsoft.Skills.Text.SplitSkill

Parâmetros de habilidade

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

Nome do parâmetro Versão Description
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. Frases são uma cadeia de caracteres que termina na pontuação final da frase, como um ponto, ponto de interrogação ou ponto de exclamação, supondo que o idioma tenha pontuação final de frase.
maximumPageLength Todas as versões Aplica-se apenas 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 medido por String.Length. O valor mínimo é 300, o máximo é 50000 e o valor padrão é 5000. O algoritmo faz o seu melhor para quebrar o texto nos limites da frase, de modo que o tamanho de cada pedaço pode ser um pouco menor do que maximumPageLength.

Para unit definido como azureOpenAITokens, o comprimento máximo da página é o limite de comprimento do token do modelo. Para modelos de incorporação de texto, uma recomendação geral para o comprimento da página é de 512 tokens.
defaultLanguageCode Todas as versões (facultativo) Um dos seguintes códigos linguísticos: 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 a considerar:
  • Fornecer um código de idioma é útil para evitar cortar uma palavra ao meio para idiomas que não são espaços em branco, como chinês, japonês e coreano.
  • Se você não souber o idioma com antecedência (por exemplo, se estiver usando a LanguageDetectionSkill para detetar o idioma), recomendamos o en padrão.
pageOverlapLength 2024-07-01 Aplica-se apenas se textSplitMode estiver definido como pages. Cada página começa com este número de caracteres ou tokens do final da página anterior. Se esse parâmetro for definido como 0, não haverá sobreposição de texto em páginas sucessivas. Este exemplo inclui o parâmetro.
maximumPagesToTake 2024-07-01 Aplica-se apenas se textSplitMode estiver definido como pages. Número de páginas a devolver. O padrão é 0, o que significa retornar todas as páginas. Você deve definir esse valor se apenas um subconjunto de páginas for necessário. Este exemplo inclui o parâmetro.
unit 2024-09-01-visualização Novo. Aplica-se apenas 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-visualização Novo. Um objeto que fornece parâmetros extras para a azureOpenAITokens unidade.

encoderModelName é um tokenizador 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 pelo 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 de SharpToken e Microsoft.ML.Tokenizers não suporta 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 dentro do processo de tokenização. Os tokens especiais são cadeias de caracteres que você deseja tratar exclusivamente, garantindo que não sejam divididos durante a tokenização. 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 Habilidade

Nome do parâmetro Description
text O texto a ser dividido em substring.
languageCode (Opcional) Código linguístico do documento. Se você não souber o idioma das entradas de texto (por exemplo, se estiver usando LanguageDetectionSkill para detetar o idioma), poderá omitir esse parâmetro. Se você definir languageCode como um idioma não está na lista de suporte para o defaultLanguageCode, um aviso será emitido e o texto não será dividido.

Resultados de Competências

Nome do parâmetro Description
textItems Output é uma matriz de substrings 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 de habilidade, como uma habilidade de incorporação.

Definição da amostra

{
    "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 fragmentação e vetorização

Este exemplo é para vetorização integrada.

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

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

Definição da amostra

Esta definição acrescenta pageOverlapLength de 100 caracteres e maximumPagesToTake de um.

Supondo que o maximumPageLength seja de 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 de indexador, projeções de armazenamento 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"
        }
    ]
}

Exemplo de entrada (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 da amostra (observe a sobreposição)

Dentro de 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 um idioma não for suportado, um aviso será gerado.

Consulte também