No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Procesamiento de datos: tokenización y creación de vocabulario

13/24
Recursos

¿Cómo iniciar la tokenización de nuestros textos con Torch Text?

En la ciencia de datos y el procesamiento del lenguaje natural, la tokenización es un paso esencial para convertir textos en datos que una máquina pueda utilizar. En esta clase, te guiaré para comprender cómo comenzar con esta tarea usando Torch Text, específicamente aplicando tokenización a los textos de DBpedia.

¿Qué es Torch Text y cómo se utiliza?

Torch Text es una poderosa biblioteca de PyTorch destinada a facilitar el manejo y la transformación de datos textuales. Nos permite tokenizar textos, crear vocabularios y más. Empezaremos examinando un dataset para familiarizarnos con su estructura antes de avanzar al procesamiento.

  1. Carga inicial del dataset: Utilizaremos un train iter que actuará como iterador sobre los datos ya importados de DBpedia. Esto nos permite visualizar cómo son los textos en bruto.
  2. Uso del iterador: Con el comando next, podemos obtener el siguiente elemento del iterador, lo que nos permite observar los datos de nuestro dataset de manera secuencial.
train_iter = ...
sample_text = next(train_iter)

¿Cuál es la importancia de la tokenización?

La tokenización convierte largas oraciones o fragmentos textuales en piezas más pequeñas. Esto es crucial para que las máquinas puedan trabajar con texto, transformándolo en números y facilitando así la comprensión y el procesamiento automatizado.

  1. Importar herramientas necesarias: Usaremos GetTokenizer de Torch Text para la tokenización. Esta función nos proporciona una variedad de tokenizadores predefinidos, incluyendo BasicEnglish.
  2. Elegir el tokenizador correcto: Torch Text permite utilizar diferentes tokenizadores. Aunque en este caso usamos BasicEnglish, otros como spaCy o HuggingFace también son viables dependiendo de nuestras necesidades.
from torchtext.data.utils import get_tokenizer
tokenizador = getTokenizer('basic_english')

¿Cómo se crea y utiliza un vocabulario?

Un vocabulario traduce los tokens en números. Esto permite a las máquinas interpretar el texto de manera eficiente.

  1. Crear un iterador: Necesitamos un iterador de nuestros datos para pasar cada texto por el tokenizador.
  2. Generar tokens: Construimos una función yieldTokens que toma un iterador de textos y devuelve los tokens procesados.
  3. Construcción del vocabulario: Utilizamos la función BuildVocabFromIterator para crear un mapa de tokens a números enteros, considerando también los tokens desconocidos.
from torchtext.vocab import build_vocab_from_iterator

def yield_tokens(data_iter):
    for _, text in data_iter:
        yield tokenizador(text)

vocabulario = build_vocab_from_iterator(yield_tokens(train_iter), specials=["<unk>"])
vocabulario.set_default_index(vocabulario["<unk>"])

¿Cómo desarrollar funciones para procesar datos eficientemente?

El uso de funciones ayuda a simplificar el proceso de conversión de texto en números. Dos funciones clave son textoPipeline y labelpipeline:

  1. Pipeline de texto: Transformación de texto en una secuencia de tokens que luego pasan a números usando un vocabulario.
  2. Pipeline de etiquetado: Toma una etiqueta numérica y la ajusta para empezar desde cero.
texto_pipeline = lambda x: vocabulario(tokenizador(x))
label_pipeline = lambda x: int(x) - 1

Cuando ejecutamos estas herramientas en texto de ejemplo como "Hello, I am Omar", obtenemos una lista de números enteros que representan cada palabra en el vocabulario. Así, logramos que los datos textuales sean aptos para el análisis y modelado.

El viaje hacia el procesamiento y análisis de datos nunca termina. ¡Anímate a seguir explorando el potencial de estas técnicas y herramientas que ofrece Torch Text!

Aportes 8

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Como se actualizó el dataset de DBpedia, puede crear un archivo de Python y copiar el source code del dataset <https://pytorch.org/text/stable/_modules/torchtext/datasets/dbpedia.html> Mi script lo llamé dbpedia.py y lo importo de la siguiente manera `from`` dbpedia ``import`` DBpedia` Únicamente elimine \[docs de `[docs]@_create_dataset_directory(``dataset_name``=DATASET_NAME)` Y el url lo cambié por `URL = "https://drive.usercontent.google.com/download?id=0Bz8a_Dbh9QhbQ2Vic1kxMmZZQ1k&export=download&authuser=0"` Espero les sirva para seguir el curso

Tuve la duda de cómo funcionaba el tokenizer + vocabulario y traigo mis conclusiones.

El tokenizer simplemente separa las palabras en tokens, y el algoritmo que usemos (en este caso basic_english) determinará qué caracteres tokenizará y que limpiezas y convenciones llevará a cabo (agregar espacios a las puntuaciones, transformar los saltos de linea en espacios sencillos y demás limpiezas) y retornará un array gigante con los cada palabra tokenizada.

El vocab (o vocabulario) por otra parte es especial. El proceso para determinar qué valor numérico pertenece a cada token es directamente proporcional a su frecuencia de aparición. Entre más aparezca un token en un dataset (también llamado text corpus) menor valor tendrá, por eso los conectores suelen tener valores tan bajos.

La razón por la que debemos agregar el <unk> en el vocab es porque únicamente hemos creado los valores de los tokens disponibles en el text corpus, por lo que, si en alguna inferencia usamos texto que no contiene un token válido, debemos tener un mecanismo para encapsularlo.

si tienen el error

ImportError: cannot import name ‘DILL_AVAILABLE’ from ‘torch.utils.data.datapipes.utils.common

Utilicen

torch.utils.data.datapipes.utils.common.DILL_AVAILABLE = torch.utils._import_utils.dill_available()

antes de

train_iter = iter(DBpedia(split='train'))

Ver el enlace

Se actualizo la libreria no funciona, me pide los datos de train pero no encuentro la forma de solucionarlo :C
El procesamiento de datos, especialmente en tareas de procesamiento de lenguaje natural (NLP), implica pasos como la tokenización y la creación de vocabularios. Aquí te explico ambos conceptos y cómo se implementan, particularmente en el contexto de PyTorch. \### 1. Tokenización La \*\*tokenización\*\* es el proceso de dividir un texto en unidades más pequeñas llamadas "tokens". Estos pueden ser palabras, subpalabras o caracteres. La tokenización permite que los modelos entiendan el texto en un formato que pueden procesar. Existen diferentes enfoques de tokenización: \- \*\*Tokenización por palabras\*\*: Divide el texto en palabras. \- \*\*Tokenización por subpalabras\*\*: Utiliza algoritmos como Byte Pair Encoding (BPE) para dividir palabras en subunidades, lo que es útil para manejar palabras desconocidas y reducir el vocabulario. \- \*\*Tokenización por caracteres\*\*: Cada carácter se convierte en un token, lo que puede ser útil para ciertos tipos de modelos. \### Ejemplo de Tokenización en PyTorch Aquí hay un ejemplo básico de cómo realizar la tokenización utilizando `torchtext`: ```python import torch from torchtext.data.utils import get\_tokenizer \# Texto de ejemplo text = "Hola, esto es un ejemplo de tokenización." \# Crear un tokenizador tokenizer = get\_tokenizer("basic\_english") \# Tokenizar el texto tokens = tokenizer(text) print(tokens) ``` \### 2. Creación de Vocabulario La \*\*creación de vocabulario\*\* implica construir un conjunto de todos los tokens únicos que aparecen en tu conjunto de datos. Esto es fundamental porque el modelo necesita mapear cada token a un número entero (índice) que puede utilizar durante el entrenamiento. Los vocabularios pueden ser simples o pueden incluir mapeos adicionales, como las frecuencias de palabras. \### Ejemplo de Creación de Vocabulario en PyTorch A continuación, se muestra un ejemplo de cómo crear un vocabulario a partir de los tokens: ```python from collections import Counter from torchtext.vocab import Vocab \# Contar la frecuencia de los tokens counter = Counter(tokens) \# Crear el vocabulario vocab = Vocab(counter) \# Ver el vocabulario print(vocab.stoi) # Muestra el índice de cada token print(vocab.itos) # Muestra el token correspondiente a cada índice ``` \### Integración en el Entrenamiento del Modelo Una vez que tienes los tokens y el vocabulario, puedes convertir tus textos en secuencias de índices y alimentar estos índices a tu modelo de PyTorch para el entrenamiento. \### Ejemplo Completo Aquí hay un flujo de trabajo más completo que incluye la tokenización y la creación de vocabulario: ```python import torch from torchtext.data.utils import get\_tokenizer from collections import Counter from torchtext.vocab import Vocab \# Texto de ejemplo corpus = \[ "Hola, esto es un ejemplo de tokenización.", "Este es otro ejemplo para crear vocabulario." ] \# Crear un tokenizador tokenizer = get\_tokenizer("basic\_english") \# Tokenizar y contar la frecuencia de tokens tokens = \[] for line in corpus: tokens.extend(tokenizer(line)) \# Crear el vocabulario counter = Counter(tokens) vocab = Vocab(counter) \# Convertir texto a índices text\_indices = \[\[vocab\[token] for token in tokenizer(line)] for line in corpus] \# Mostrar los resultados print("Vocabulario:", vocab.stoi) print("Índices del texto:", text\_indices) ``` \### Conclusión La tokenización y la creación de vocabulario son pasos críticos en el procesamiento de datos para modelos de NLP. Usar bibliotecas como `torchtext` simplifica mucho estos procesos, permitiendo concentrarse en el diseño y entrenamiento de modelos en lugar de preocuparse por el preprocesamiento de datos.
Les qiuiero compartir un video que me explico de una manera muy clara el concepto <https://www.youtube.com/watch?v=LagcbjDkqJE>
Si no les funciona ninguna de las otras soluciones que estaban en los comentarios para solucionar el problema con el dataset, lo que hice fue crear otro ambiente con python 3.9 e instalar la version de torchtext 0.15.1. No necesariamente debe ser la 3.9, pero era la que tenia a la mano.
¿Dónde estan las archivos de recursos de la clase ?