Un Corte en Dos

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este proyecto, aprenderás cómo implementar un subword tokenizer, que es un paso crucial en las tareas de procesamiento de lenguaje natural. La tokenización es el proceso de descomponer una cadena de texto en unidades más pequeñas, llamadas tokens, que pueden ser palabras individuales, caracteres o subpalabras. Este proyecto se centra en la tokenización a nivel de subpalabras, que se utiliza comúnmente en inglés y otros idiomas basados en el alfabeto latino.

👀 Vista previa

['I','studied', 'in', 'LabEx', 'for', '1', '0', 'days', 'and', 'completed', 'the', '[UNK]', '[UNK]', 'course', '.']

🎯 Tareas

En este proyecto, aprenderás:

  • Cómo implementar una función de subword tokenizer que realice la tokenización a nivel de caracteres utilizando el algoritmo greedy longest-match-first
  • Cómo probar el subword tokenizer con un ejemplo proporcionado y analizar la salida
  • Cómo entender el algoritmo de tokenización y su implementación

🏆 Logros

Después de completar este proyecto, podrás:

  • Comprender la importancia de la tokenización en las tareas de procesamiento de lenguaje natural
  • Implementar un componente central de una tubería de procesamiento de lenguaje natural
  • Distinguir entre la tokenización a nivel de caracteres y la tokenización a nivel de subpalabras
  • Aplicar el algoritmo greedy longest-match-first para tokenizar texto en subpalabras

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/DataScienceandMachineLearningGroup(["Data Science and Machine Learning"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/AdvancedTopicsGroup(["Advanced Topics"]) python/BasicConceptsGroup -.-> python/strings("Strings") python/DataStructuresGroup -.-> python/lists("Lists") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/AdvancedTopicsGroup -.-> python/regular_expressions("Regular Expressions") python/DataScienceandMachineLearningGroup -.-> python/data_analysis("Data Analysis") python/DataScienceandMachineLearningGroup -.-> python/machine_learning("Machine Learning") subgraph Lab Skills python/strings -.-> lab-300244{{"Un Corte en Dos"}} python/lists -.-> lab-300244{{"Un Corte en Dos"}} python/function_definition -.-> lab-300244{{"Un Corte en Dos"}} python/regular_expressions -.-> lab-300244{{"Un Corte en Dos"}} python/data_analysis -.-> lab-300244{{"Un Corte en Dos"}} python/machine_learning -.-> lab-300244{{"Un Corte en Dos"}} end

Comprender el proceso de tokenización

En este paso, aprenderás sobre el proceso de tokenización y su importancia en las tareas de procesamiento de lenguaje natural.

La tokenización es el proceso de descomponer una cadena de texto en unidades más pequeñas, llamadas tokens. Estos tokens pueden ser palabras individuales, caracteres o subpalabras, dependiendo del método de tokenización específico utilizado.

En las tareas de procesamiento de lenguaje natural, la mayoría de los modelos de aprendizaje automático no admiten directamente datos de cadena. Para que los modelos aprendan efectivamente, los datos de cadena deben ser numerizados, lo que es un proceso conocido como Tokenización. La tokenización también es la preparación para la numerización, y la numerización requiere una asignación, que se proporciona por una tabla de asignación.

La tokenización a nivel de caracteres es un método que divide las cadenas en función de los símbolos más pequeños de un idioma y se utiliza comúnmente en la tokenización del inglés.

La tokenización a nivel de subpalabras se utiliza comúnmente en inglés y otros idiomas basados en el alfabeto latino y es una mejora con respecto a la tokenización a nivel de palabras.

Implementar el subword tokenizer

En este paso, implementarás una función de subword tokenizer que realice la tokenización a nivel de caracteres para palabras en inglés utilizando el algoritmo greedy longest-match-first. Esta función también elimina todos los símbolos, incluyendo los espacios, de la cadena de entrada.

Abre el archivo subword_tokenizer.py en tu editor de código. Este archivo contiene un esqueleto de la función subword_tokenizer(). Tu tarea es completar las partes faltantes de la función.

La función debe cumplir con los siguientes requisitos:

  1. La función debe tomar una cadena como entrada. Esta función recibe una cadena que contiene caracteres ingleses, números y signos de puntuación. La cadena te ha sido proporcionada y no puedes cambiar el contenido de la cadena.
  2. La función debe devolver el resultado de la tokenización como una lista.

Aquí está el código completo de la función subword_tokenizer():

import re

def subword_tokenizer(text, vocab) -> list:
    """
    Tokeniza el texto de entrada en subpalabras basado en un vocabulario proporcionado.

    Argumentos:
    - text (str): Texto de entrada a tokenizar.
    - vocab (list): Lista de vocabulario que contiene subpalabras.

    Devuelve:
    - list: Lista de tokens de subpalabras.
    """

    def is_in_vocab(word) -> bool:
        """
        Verifica si una palabra dada está en el vocabulario.

        Argumentos:
        - word (str): Palabra a verificar.

        Devuelve:
        - bool: True si la palabra está en el vocabulario, False en caso contrario.
        """
        return word in vocab

    def find_longest_match(word) -> tuple:
        """
        Encuentra la subpalabra que coincide más larga para una palabra dada en el vocabulario.

        Argumentos:
        - word (str): Palabra para la que se busca una coincidencia.

        Devuelve:
        - tuple: Una tupla que contiene la subpalabra que coincide más larga y la parte restante de la palabra.
        """
        for i in range(len(word), 0, -1):
            subword = word[:i]
            if is_in_vocab(subword):
                return subword, word[i:]
        return "[UNK]", ""

    tokens = []
    ## Elimina los caracteres no alfanuméricos y divide el texto en palabras
    words = re.findall(r"\b\w+\b", text)

    for word in words:
        while word:
            subword, remaining = find_longest_match(word)
            tokens.append(subword)
            word = remaining

    return tokens


if __name__ == "__main__":
    ## Uso de ejemplo:
    vocab = [
        "I",
        "studied",
        "in",
        "LabEx",
        "for",
        "1",
        "0",
        "days",
        "and",
        "completed",
        "the",
        "course",
    ]
    text = "I studied in LabEx for 10 days and completed the TensorFlow Serving course."

    tokenization_result = subword_tokenizer(text, vocab)
    print(tokenization_result)

Prueba el subword tokenizer

En este paso, probarás la función subword_tokenizer() con el ejemplo proporcionado y verificará la salida.

Ejecuta el script subword_tokenizer.py en tu terminal:

python3 subword_tokenizer.py

La salida debe ser similar a la siguiente:

['I','studied', 'in', 'LabEx', 'for', '1', '0', 'days', 'and', 'completed', 'the', '[UNK]', '[UNK]', 'course', '.']

Observe la salida y asegúrese de que el proceso de tokenización funcione como se esperaba. La función debe tokenizar el texto de entrada en una lista de subpalabras, donde las palabras desconocidas se representan por el token [UNK].

Comprende el algoritmo de tokenización

En este paso, profundizarás en la implementación de la función subword_tokenizer() y entenderás el algoritmo de tokenización.

La función subword_tokenizer() utiliza un algoritmo greedy longest-match-first para tokenizar el texto de entrada. Aquí está cómo funciona el algoritmo:

  1. La función primero elimina todos los caracteres no alfanuméricos del texto de entrada y divide el texto en palabras individuales.
  2. Para cada palabra, la función intenta encontrar la subpalabra que coincide más larga en el vocabulario proporcionado.
  3. Si se encuentra una subpalabra en el vocabulario, se agrega a la lista de tokens. Si no se encuentra ninguna subpalabra, se agrega el token [UNK] a la lista.
  4. El proceso continúa hasta que todas las palabras en el texto de entrada hayan sido tokenizadas.

La función is_in_vocab() es una función auxiliar que verifica si una palabra dada está presente en el vocabulario proporcionado.

La función find_longest_match() es el núcleo del algoritmo de tokenización. Itera a través de la palabra, comenzando por la subpalabra posible más larga, y verifica si la subpalabra actual está en el vocabulario. Si se encuentra una coincidencia, devuelve la subpalabra y la parte restante de la palabra. Si no se encuentra ninguna coincidencia, devuelve el token [UNK] y una cadena vacía.

Comprender el algoritmo de tokenización te ayudará a mejorar aún más el subword tokenizer o adaptarlo a diferentes casos de uso.

✨ Revisar Solución y Practicar

Resumen

¡Felicitaciones! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.