Clasificación de Textos utilizando técnicas de Aprendizaje Profundo en el área de PLN
Conocerás diferentes técnicas utilizadas para la clasificación de textos y oraciones mediante técnicas de Procesamiento de Lenguaje Natural (PLN).
Clasificación de Textos utilizando técnicas de Aprendizaje Profundo en el área de PLN
Por Jhesica Katherine Alvarez Salcedo
El área de Procesamiento del Lenguaje Natural( NLP) teje relaciones con diferentes áreas de estudio dentro de la inteligencia artificial, como lo son : Aprendizaje Automático (ML) y Aprendizaje Profundo (DL). El siguiente diagrama muestra la relación de NLP con Inteligencia Artificial (AI), Aprendizaje Automático (ML) y Aprendizaje Profundo (DL) [5]
Dentro de la Inteligencia Artificial encontramos lo que se llama Aprendizaje Automático. Este es el uso de algoritmos para encontrar patrones en los datos. Mientras, el Aprendizaje Profundo es un campo dentro de Aprendizaje Automático que utiliza algoritmos llamados redes neuronales [5].
En el presente artículo nos enfocaremos en diferentes técnicas utilizadas para la clasificación de textos y oraciones mediante técnicas de Procesado de Lenguaje Natural (PLN).
El análisis de texto es un campo interdisciplinario relativamente nuevo, basado en las ciencias de la computación y la lingüística [1], el cual, tiene entre sus particularidades una alta dimensionalidad y desbalance entre categorías, lo que la distingue y la hace ser más complicada que la de otro tipo de datos, como por ejemplo imágenes [6].
Por otro lado, en el campo del aprendizaje automático se realizan muchas aplicaciones, como la clasificación y agrupación de datos. La clasificación de datos puede ser de dos tipos: binaria cuando se tienen una clase y multi-clase cuando se tienen más de una clase. Pero en la clasificación de textos es lógico pensar que un texto puede pertenecer a una o más clases. Un ejemplo es la clasificación multi-etiqueta y se encuentra dentro del aprendizaje automático[4].
Sin embargo, los métodos de Aprendizaje Profundo o Deep Learning como: las Redes Neuronales Convolucionales, las Redes Neuronales Recurrentes, la propuesta nombrada Memoria a Corto Plazo, las Unidades Recurrentes Cerradas y las Máquinas de Boltzman Restringidas, entre otros [9], están demostrando ser muy buenos en la clasificación de textos, logrando resultados de vanguardia [3], especialmente mediante la utilización de Redes Neuronales Recurrentes para problemas de PLN, clasificación de textos y oraciones [4], logrando así resolver diferentes problemas, como por ejemplo: análisis de sentimiento de los tweets y las reseñas de películas, así como clasificar el correo electrónico como spam, o no, entre otros [3].
Algunos ejemplos de marcos de aprendizaje profundo son: TensorFlow, Keras, PyTorch, MXNet, Chainer principalmente en Python, DL4J en Java y Scala, entre otros[10].
Es importante resaltar que los modelos de redes neuronales requieren un preprocesado[11], en lo referente al preprocesado de texto : dividir una oración en una lista de palabras, binarización ((One hot ecoding)) de las variables categóricas y vectorizar textos son algunos ejemplos[13].
A continuación se detalla de manera práctica cómo preparar los datos para implementar una Red Neuronal Recurrente a través de 1 ejemplo, utilizando Keras y y Tokenizer para el preprocesado[13]:
Google Colaboratory
Lenguaje de Programación Python
El primer paso será el descargar y preparar el conjunto de datos con el que entrenaremos nuestra red neuronal:
data = ['El asma es una enfermedad respiratoria', 'El asma bronquial se caracteriza por una obstrucción reversible y ocasional de la vía aérea.'] [12].
Importar librerías
from keras.preprocessing.text import Tokenizer
Argumentos
nb_words: Número máximo de palabras con las que trabajar
tokenizer = Tokenizer(num_words=1000)
Métodos
fit_on_texts
# Esto crea el índice de palabras.
tokenizer.fit_on_texts(data)
texts_to_sequences
# Esto convierte cadenas en listas de índices enteros.
sequences = tokenizer.texts_to_sequences(data)
print(sequences)
[[1, 2, 4, 3, 5, 6], [1, 2, 7, 8, 9, 10, 3, 11, 12, 13, 14, 15, 16, 17, 18]]
texts_to_matrix
matrix=tokenizer.texts_to_matrix(data)
print (matrix)
[[0. 1. 1. ... 0. 0. 0.]
[0. 1. 1. ... 0. 0. 0.]]
Atributos
word_counts
Mapea el número de veces que se repite una palabra
word_counts = tokenizer.word_counts
print(word_counts)
OrderedDict([('el', 2), ('asma', 2), ('es', 1), ('una', 2), ('enfermedad', 1), ('respiratoria', 1), ('bronquial', 1), ('se', 1), ('caracteriza', 1), ('por', 1), ('obstrucción', 1), ('reversible', 1), ('y', 1), ('ocasional', 1), ('de', 1), ('la', 1), ('vía', 1), ('aérea', 1)])
word_docs
word_docs = tokenizer.word_docs
Mapea el número de veces que se repite una palabra en los documentos/textos
print(word_docs)
defaultdict(<class 'int'>, {'respiratoria': 1, 'una': 2, 'enfermedad': 1, 'asma': 2, 'es': 1, 'el': 2, 'caracteriza': 1, 'la': 1, 'reversible': 1, 'aérea': 1, 'se': 1, 'de': 1, 'ocasional': 1, 'bronquial': 1, 'por': 1, 'obstrucción': 1, 'vía': 1, 'y': 1})
word_index
Recupera el índice de palabras que se calculó
word_index = tokenizer.word_index
print('Se encontraron %s tokens únicos.' % len(word_index))
print(word_index)
Se encontraron 18 tokens únicos.
{'el': 1, 'asma': 2, 'una': 3, 'es': 4, 'enfermedad': 5, 'respiratoria': 6, 'bronquial': 7, 'se': 8, 'caracteriza': 9, 'por': 10, 'obstrucción': 11, 'reversible': 12, 'y': 13, 'ocasional': 14, 'de': 15, 'la': 16, 'vía': 17, 'aérea': 18}
document_count
Devuelve el Número de documentos (textos / secuencias) en los que se entrenó el tokenizador
document_count = tokenizer.document_count
print(document_count)
2
Luego guardamos en un nuevo fichero CSV y pasamos al análisis de los datos.
En el ejemplo anterior vimos que es necesario aplicar un preprocesamiento de datos a la hora de trabajar con data no estructurada como los son los textos para poder aplicar redes neuronales, utilizando el lenguaje de programación python con Keras, que permitirán a futuro la aplicación de algoritmos y la presentación de resultados.
Podemos concluir, que los métodos de aprendizaje profundo están logrando resultados en lo que el procesado de texto se refiere, sin embargo, todavía hay muchos problemas desafiantes que resolver para el procesamiento del lenguaje Natural.
Referencias
[1] ALFARO A., Rodrigo y ALLENDE O., Héctor. Clasificación de Textos Multi-etiquetados con Modelo Bernoulli Multi-variado y Representación Dependiente de la Etiqueta. Rev. signos [online]. 2020, vol.53, n.104 [citado 2021-11-07], pp.549-567. Disponible en: <http://www.scielo.cl/scielo.php?script=sci_arttext&pid=S0718-09342020000300549&lng=es&nrm=iso>. ISSN 0718-0934. http://dx.doi.org/10.4067/S0718-09342020000300549.
[2] Fernando Pech May. Procesamiento de Lenguaje Natural con DeepLearning. Electronic version [citado 2021-11-07]. Disponible en :
https://www.tamps.cinvestav.mx/~fpech/doc/DLScr/PLN.html
[3] Curso de Natural Language Processing con Deep. Electronic version [citado 2021-11-07]. Disponible en: .https://unipython.com/modelos-neuronales-para-la-clasificacion-de-documentos/
[4] Quispe Poccohuanca, Oscar Edmit.Integración de técnicas de deep learning y algoritmos de aprendizaje multi etiqueta para la Clasificación de Textos. Electronic version [citado 2021-11-07]. Disponible en: http://repositorio.unsa.edu.pe/handle/UNSA/6422
[5] Bertha Briceño - Eugenia Fernandez.
Aplicando el procesamiento del lenguaje natural para clasificar artículos del coronavirus. Electronic version [citado 2021-11-07]. Disponible en:
[6] CARDENAS, Juan; OLIVARES, Gastón y ALFARO, Rodrigo. Clasificación automática de textos usando redes de palabras. Rev. signos [online]. 2014, vol.47, n.86 [citado 2021-11-07], pp.346-364. Disponible en: <http://www.scielo.cl/scielo.php?script=sci_arttext&pid=S0718-09342014000300001&lng=es&nrm=iso>. ISSN 0718-0934. http://dx.doi.org/10.4067/S0718-09342014000300001.
[7] VILLADA, Fernando; MUNOZ, Nicolás y GARCIA-QUINTERO, Edwin. Redes Neuronales Artificiales aplicadas a la Predicción del Precio del Oro. Inf. tecnol. [online]. 2016, vol.27, n.5 [citado 2021-11-08], pp.143-150. Disponible en: <http://www.scielo.cl/scielo.php?script=sci_arttext&pid=S0718-07642016000500016&lng=es&nrm=iso>. ISSN 0718-0764. http://dx.doi.org/10.4067/S0718-07642016000500016.
[8] PEREZ RAMIREZ, Fredy Ocaris and FERNANDEZ CASTANO, Horacio. LAS REDES NEURONALES Y LA EVALUACIÓN DEL RIESGO DE CRÉDITO. Rev. ing. univ. Medellin [online]. 2007, vol.6, n.10 [cited 2021-11-07], pp.77-91. Available from: <http://www.scielo.org.co/scielo.php?script=sci_arttext&pid=S1692-33242007000100007&lng=en&nrm=iso>. ISSN 1692-3324
[9] Dionis López Ramos, Leticia Arco García. Aprendizaje profundo para la extracción de aspectos en opiniones textuales. Revista Cubana de Ciencias Informáticas, vol. 13, núm. 2, pp. 105-145, 2019. [citado 2021-11-08]. Disponible en: https://www.redalyc.org/journal/3783/378362738008/html/
[10] Prensa CambioDigital OnLine, Todo sobre el aprendizaje profundo. Disponible en: https://cambiodigital-ol.com/2019/06/todo-sobre-el-aprendizaje-profundo/
[11] Joaquín Amat Rodrigo. Redes neuronales con Python. Disponible en:
https://www.cienciadedatos.net/documentos/py35-redes-neuronales-python.html
[12] Asma bronquial. Universidad de Navarra. Disponible en: https://www.cun.es/enfermedades-tratamientos/enfermedades/asma-bronquial
[13] Keras: Deep Learning library for Theano and TensorFlow. Disponible en: https://faroit.com/keras-docs/1.2.0/