Compartir a través de


Aptitud cognitiva División de texto

Importante

Algunos parámetros están en versión preliminar pública en Términos de uso complementarios. La API REST en versión preliminar admite estos parámetros.

La aptitud División de texto divide el texto en fragmentos de texto. Puede especificar si desea dividir el texto en oraciones o en páginas de una longitud determinada. Los metadatos posicionales como desplazamiento y posición ordinal también están disponibles como salidas. Esta aptitud es útil si hay requisitos máximos de longitud de texto en otras aptitudes de nivel inferior, como insertar aptitudes que pasan fragmentos de datos para insertar modelos en Azure OpenAI y otros proveedores de modelos. Para obtener más información sobre este escenario, vea Documentos de fragmentos para la búsqueda de vectores.

Varios parámetros son específicos de la versión. En la tabla de parámetros skills se indica la versión de la API en la que se introdujo un parámetro para saber si se requiere una actualización de versión . Para usar características específicas de la versión, como la fragmentación de tokens en 2024-09-01-preview, puede usar Azure Portal o tener como destino una versión de la API REST o comprobar un registro de cambios del SDK de Azure para ver si admite la característica.

Azure Portal admite la mayoría de las características en versión preliminar y se pueden usar para crear o actualizar un conjunto de aptitudes. Para las actualizaciones de la aptitud División de texto, edite la definición JSON del conjunto de aptitudes para agregar nuevos parámetros de vista previa.

Nota:

Esta aptitud no está enlazada a Las herramientas de Foundry. No es facturable y no tiene ningún requisito clave de Las herramientas de foundry.

@odata.type

Microsoft.Skills.Text.SplitSkill

Parámetros de la aptitud

Los parámetros distinguen mayúsculas de minúsculas.

Nombre del parámetro Descripción
textSplitMode pages o sentences. Las páginas tienen una longitud máxima configurable, pero la aptitud intenta evitar truncar una frase para que la longitud real sea menor. Las frases constituyen una cadena que termina en la puntuación de fin de frase, como un punto, signo de interrogación o signo de exclamación, suponiendo que el idioma tenga puntuación final de frase.
maximumPageLength Solo se aplica si textSplitMode está establecido en pages. Para unit establecer en characters, este parámetro hace referencia a la longitud máxima de página en caracteres medida por String.Length. El valor mínimo es 300, el máximo es 50 000 y el valor predeterminado es 5000. El algoritmo hace todo lo posible para dividir el texto en los límites de frases, por lo que el tamaño de cada fragmento puede ser ligeramente menor que maximumPageLength.

Para unit establecer en azureOpenAITokens, la longitud máxima de página es el límite de longitud del token del modelo. Para los modelos de inserción de texto, una recomendación general para la longitud de página es 512 tokens.
defaultLanguageCode (Opcional) Uno de los siguientes 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. El valor predeterminado es inglés (en). Algunos aspectos que se deben tener en cuenta son:
  • Proporcionar un código de idioma es útil para evitar cortar una palabra por la mitad para idiomas sin espacios como el chino, japonés y coreano.
  • Si no conoce el idioma con antelación (por ejemplo, si usa LanguageDetectionSkill para detectar el idioma), se recomienda el valor en predeterminado.
pageOverlapLength Solo se aplica si textSplitMode está establecido en pages. Cada página comienza con este número de caracteres o tokens desde el final de la página anterior. Si este parámetro se establece en 0, no hay texto superpuesto en páginas sucesivas. En este ejemplo se incluye el parámetro.
maximumPagesToTake Solo se aplica si textSplitMode está establecido en pages. Número de páginas que se van a devolver. El valor predeterminado es 0, lo que significa devolver todas las páginas. Debe establecer este valor si solo se necesita un subconjunto de páginas. En este ejemplo se incluye el parámetro.
unit Solo se aplica si textSplitMode está establecido en pages. Especifica si se va a fragmentar por characters (valor predeterminado) o azureOpenAITokens. Establecer la unidad afecta a maximumPageLength y pageOverlapLength.
azureOpenAITokenizerParameters Objeto que proporciona parámetros adicionales para la azureOpenAITokens unidad.

encoderModelName es un tokenizador designado que se usa para convertir texto en tokens, esencial para las tareas de procesamiento de lenguaje natural (NLP). Los diferentes modelos usan distintos tokenizadores. Los valores válidos incluyen cl100k_base (valor predeterminado) usado por GPT-4. Otros valores válidos son r50k_base, p50k_base y p50k_edit. La aptitud implementa la biblioteca tiktoken mediante SharpToken y Microsoft.ML.Tokenizers , sin embargo, no admite todos los codificadores. Por ejemplo, actualmente no hay compatibilidad con o200k_base codificación usada por GPT-4o.

allowedSpecialTokens define una colección de tokens especiales que se permiten en el proceso de tokenización. Los tokens especiales son cadenas que desea tratar de forma única, asegurándose de que no se dividen durante la tokenización. Por ejemplo ["[START"], "[END]"]. Si la biblioteca no realiza la tiktoken tokenización según lo previsto, ya sea debido a limitaciones específicas del lenguaje u otros comportamientos inesperados, se recomienda usar la división de texto en su lugar.

Entradas de la aptitud

Nombre del parámetro Descripción
text Texto que se dividirá en subcadenas.
languageCode (Opcional) Código de idioma para el documento. Si no conoce el idioma de las entradas de texto (por ejemplo, si usa LanguageDetectionSkill para detectar el idioma), puede omitir este parámetro. Si establece languageCode en un idioma que no está en la lista de admitidos de defaultLanguageCode, se emite una advertencia y el texto no se divide.

Salidas de la aptitud

Nombre del parámetro Descripción
textItems La salida es una matriz de subcadenas extraídas. textItems es el nombre predeterminado de la salida.

targetName es opcional, pero si tiene varias aptitudes de división de texto, asegúrese de establecer targetName para que no sobrescriba los datos de la primera aptitud con la segunda. Si targetName se establece, úsela en asignaciones de campos de salida o en aptitudes de nivel inferior que consumen la salida de la aptitud, como una aptitud de inserción.
offsets La salida es una matriz de desplazamientos que se extrajeron. El valor de cada índice es un objeto que contiene el desplazamiento del elemento de texto en ese índice en tres codificaciones: UTF-8, UTF-16 y CodePoint. offsets es el nombre predeterminado de la salida.

targetName es opcional, pero si tiene varias aptitudes de división de texto, asegúrese de establecer targetName para que no sobrescriba los datos de la primera aptitud con la segunda. Si targetName se establece, úsela en asignaciones de campos de salida o en aptitudes de nivel inferior que consumen la salida de la aptitud, como una aptitud de inserción.
lengths La salida es una matriz de longitudes extraídas. El valor de cada índice es un objeto que contiene el desplazamiento del elemento de texto en ese índice en tres codificaciones: UTF-8, UTF-16 y CodePoint. lengths es el nombre predeterminado de la salida.

targetName es opcional, pero si tiene varias aptitudes de división de texto, asegúrese de establecer targetName para que no sobrescriba los datos de la primera aptitud con la segunda. Si targetName se establece, úsela en asignaciones de campos de salida o en aptitudes de nivel inferior que consumen la salida de la aptitud, como una aptitud de inserción.
ordinalPositions La salida es una matriz de posiciones ordinales correspondientes a la posición del elemento de texto dentro del texto de origen. ordinalPositions es el nombre predeterminado de la salida.

targetName es opcional, pero si tiene varias aptitudes de división de texto, asegúrese de establecer targetName para que no sobrescriba los datos de la primera aptitud con la segunda. Si targetName se establece, úsela en asignaciones de campos de salida o en aptitudes de nivel inferior que consumen la salida de la aptitud, como una aptitud de inserción.

Definición de ejemplo

{
    "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 ejemplo

{
    "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"
            }
        }
    ]
}

Salida de ejemplo

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "pages": [
                    "This is the loan...",
                    "In the next section, we continue..."
                ],
                "offsets": [
                    {
                        "utf8": 0,
                        "utf16": 0,
                        "codePoint": 0
                    },
                    {
                        "utf8": 146,
                        "utf16": 146,
                        "codePoint": 146
                    }
                ],
                "lengths": [
                    {
                        "utf8": 146,
                        "utf16": 146,
                        "codePoint": 146
                    },
                    {
                        "utf8": 211,
                        "utf16": 211,
                        "codePoint": 211
                    }
                ],
                "ordinalPositions" : [
                    1,
                    2
                ]
            }
        },
        {
            "recordId": "2",
            "data": {
                "pages": [
                    "This is the second document...",
                    "In the next section of the second doc..."
                ],
                "offsets": [
                    {
                        "utf8": 0,
                        "utf16": 0,
                        "codePoint": 0
                    },
                    {
                        "utf8": 115,
                        "utf16": 115,
                        "codePoint": 115
                    }
                ],
                "lengths": [
                    {
                        "utf8": 115,
                        "utf16": 115,
                        "codePoint": 115
                    },
                    {
                        "utf8": 209,
                        "utf16": 209,
                        "codePoint": 209
                    }
                ],
                 "ordinalPositions" : [
                    1,
                    2
                ]
            }
        }
    ]
}

Nota:

En este ejemplo se establece textItems en pages a través de targetName. Como targetName se establece, pages es el valor que debe usar para seleccionar la salida de la aptitud División de texto. Use /document/pages/* en aptitudes de bajada, asignaciones de campos de salida del indexador, proyecciones del almacén de conocimiento y proyecciones de índice. En este ejemplo no se establece offsets, lengthsni ordinalPosition en ningún otro nombre, por lo que el valor que debe usar en las aptitudes de bajada no se modificaría. offsets y lengths son tipos complejos en lugar de primitivos, ya que contienen los valores de varios tipos de codificación. El valor que debe usar para obtener una codificación específica, por ejemplo, UTF-8, tendría este aspecto: /document/offsets/*/utf8.

Ejemplo de fragmentación y vectorización

Este ejemplo es para la vectorización integrada.

  • pageOverlapLength: el texto superpuesto es útil en escenarios de fragmentación de datos, ya que conserva la continuidad entre los fragmentos generados a partir del mismo documento.

  • maximumPagesToTake: los límites en la ingesta de páginas son útiles en escenarios de vectorización, ya que ayudan a mantenerse bajo los límites de entrada máximos de los modelos de inserción que proporcionan la vectorización.

Definición de ejemplo

Esta definición agrega pageOverlapLength de 100 caracteres y maximumPagesToTake de uno.

Suponiendo que maximumPageLength tiene 5000 caracteres (valor predeterminado), procesa "maximumPagesToTake": 1 los primeros 5000 caracteres de cada documento de origen.

En este ejemplo se establece textItems en myPages a través de targetName. Como targetName se establece, myPages es el valor que debe usar para seleccionar la salida de la aptitud División de texto. Use /document/myPages/* en aptitudes de bajada, asignaciones de campos de salida del indexador, proyecciones del almacén de conocimiento y proyecciones 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 ejemplo (igual que el ejemplo 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"
            }
        }
    ]
}

Salida de ejemplo (observe la superposición)

Dentro de cada matriz "textItems", el texto final del primer elemento se copia al principio del segundo elemento.

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "myPages": [
                    "This is the loan...Here is the overlap part",
                    "Here is the overlap part...In the next section, we continue..."
                ]
            }
        },
        {
            "recordId": "2",
            "data": {
                "myPages": [
                    "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 error

Si un idioma no está admitido, se genera una advertencia.

Consulte también