Tecnología de aprendizaje automático: utilice el aprendizaje profundo para procesar texto

Hasta ahora, hemos explorado la aplicación del aprendizaje automático en varios entornos: el modelado de temas, la agrupación en clústeres, la clasificación, el resumen de texto e incluso el etiquetado POS y el etiquetado NER se entrenan mediante el aprendizaje automático. En este capítulo, comenzaremos a explorar una tecnología de aprendizaje automático de vanguardia: el aprendizaje profundo. El aprendizaje profundo está inspirado en la biología para construir estructuras algorítmicas para completar las tareas de aprendizaje de texto, como la generación de texto, la clasificación y la incorporación de palabras. Este capítulo discutirá los conceptos básicos del aprendizaje profundo y cómo implementar modelos de aprendizaje profundo de texto. Los temas cubiertos en este capítulo son los siguientes:

  • Aprendizaje profundo
  • Aplicación del aprendizaje profundo al texto;
  • Tecnología de generación de texto.

13.1 Aprendizaje profundo

Los capítulos anteriores introdujeron técnicas de aprendizaje automático, incluidos modelos de temas, algoritmos de agrupación y clasificación, y lo que llamamos incrustación de palabras de aprendizaje superficial. La incrustación de palabras se considera el primer modelo de red neuronal que los lectores encuentran en este libro y pueden aprender información semántica.

Una red neuronal puede entenderse como un sistema informático o un algoritmo de aprendizaje automático cuya estructura se inspira en las neuronas biológicas del cerebro. Solo podemos introducir redes neuronales de esta manera general, porque la tecnología actual carece de un conocimiento profundo del cerebro humano. Las redes neuronales se basan en las conexiones y estructuras neuronales del cerebro, como los perceptrones y las redes neuronales de una sola capa.

Una red neuronal estándar contiene algunos nodos neuronales como unidades aritméticas e interactúan a través de conexiones. En cierto sentido, el modelo es similar a la estructura del cerebro: los nodos representan neuronas y las conexiones representan conexiones entre neuronas. Las neuronas en diferentes capas realizan diferentes tipos de operaciones La red que se muestra en la Figura 13.1 contiene una capa de entrada, múltiples capas ocultas y una capa de salida.

 

Figura 13.1 Ejemplo de estructura de red neuronal

Por el contrario, la investigación de las redes neuronales también ha promovido el desarrollo de la ciencia cognitiva, y las redes neuronales pueden ayudar a comprender el cerebro humano. Las tareas de clasificación, agrupación y creación de vectores de palabras y documentos mencionadas anteriormente se pueden realizar mediante algoritmos de aprendizaje automático implementados por redes neuronales.

Fuera del campo del análisis de texto, las redes neuronales han logrado un gran éxito. Los resultados de las investigaciones actuales en los campos de la clasificación de imágenes, la visión artificial, el reconocimiento de voz y el diagnóstico médico suelen realizarse a través de redes neuronales. Como se mencionó anteriormente, las redes neuronales pueden generar vectores de palabras y los valores almacenados en la capa oculta de la figura se pueden representar como vectores de palabras.

Esta sección presenta el aprendizaje profundo y también amplía el tema de las redes neuronales al aprendizaje profundo. El aprendizaje profundo es solo una forma de red neuronal multicapa. Debido a que la mayoría de las redes neuronales actuales han aplicado una estructura de múltiples capas, esta estructura de múltiples capas es una tecnología de aprendizaje profundo. Hay excepciones. Por ejemplo, en Word2Vec, solo obtenemos pesos de una capa.

Las redes neuronales y el aprendizaje profundo tienen aplicaciones en muchos campos. Aunque no podemos explicarlos con precisión desde una perspectiva matemática, este libro aún lo considera una solución preferida para el procesamiento del lenguaje natural, por lo que presentaremos cómo Aplicar el aprendizaje profundo al análisis de texto.

13.2 Aplicación del aprendizaje profundo al texto

Al aprender las incrustaciones de palabras, nos hemos dado cuenta del poder de las redes neuronales. Esto es solo una parte de la función de la red neuronal, que es obtener información útil a través de la estructura misma, pero sus capacidades son más que eso. Al empezar a utilizar redes más profundas, no es prudente utilizar pesos para extraer información útil, en este caso, estamos más interesados ​​en la salida natural de la red neuronal. Podemos entrenar redes neuronales para realizar múltiples tareas relacionadas con el análisis de texto, de hecho, para algunas de estas tareas, la aplicación de redes neuronales ha cambiado completamente la forma en que manejamos las tareas.

Uno de los mejores casos de uso de aprendizaje profundo se encuentra en el campo de la traducción automática, especialmente el modelo de traducción neuronal de Google. Desde septiembre de 2016, Google ha utilizado métodos y modelos estadísticos y basados ​​en reglas para la traducción de idiomas, pero el equipo de investigación de Google Brain cambió rápidamente al uso de redes neuronales, que llamamos traducción de disparo cero. Anteriormente, cuando Google realizaba la tarea de traducción del malayo al árabe, primero traducía el idioma de origen al idioma intermedio inglés. Después de la aparición de la red neuronal, el modelo acepta una oración de entrada del idioma de origen y no genera inmediatamente la oración de destino traducida, sino que ejecuta un conjunto de mecanismos de puntuación detrás de ella, como una revisión gramatical. En comparación con el método de traducción tradicional que divide la oración del idioma de origen, realiza una traducción basada en reglas y luego vuelve a ensamblar los engorrosos pasos de una oración, el modelo de traducción profunda es más conciso. Aunque el modelo profundo requiere más datos de entrenamiento y más tiempo de entrenamiento, su archivo de modelo es aún más pequeño que el archivo de modelo de traducción estadística. Cada vez se reemplazan más traducciones de idiomas por modelos en profundidad, y los efectos van más allá de los modelos anteriores, especialmente el modelo de traducción al hindi recientemente lanzado.

Aunque la tecnología de traducción automática ha avanzado mucho, todavía tiene muchas deficiencias. Por ejemplo, los usuarios necesitan resultados de traducción más gramaticalmente precisos, y los sistemas de traducción actuales solo pueden proporcionar resultados en el idioma de destino con una semántica cercana. Así como los modelos profundos brillan en otros campos, la gente también espera que las redes neuronales puedan mejorar en gran medida la calidad de la traducción automática.

La tecnología de incrustación de palabras es otra aplicación muy popular de las redes neuronales en el campo del procesamiento de texto. Teniendo en cuenta cómo se utilizan los vectores de palabras y los vectores de documentos en muchas tareas de PNL, significa que la incrustación de palabras tiene un lugar en muchos algoritmos de aprendizaje automático que involucran texto. De hecho, reemplazar todos los vectores anteriores con incrustaciones de palabras significa que todos los algoritmos o aplicaciones incluyen redes neuronales, que pueden capturar la información contextual de las palabras y ayudar a mejorar la clasificación y el agrupamiento.

En tareas de clasificación y agrupamiento, las redes neuronales se utilizan ampliamente. En muchos escenarios complejos, como los robots de chat, la clasificación de texto es inseparable. El análisis de sentimientos en el texto es esencialmente una tarea de clasificación, es decir, distinguir si el sentimiento actual es positivo o negativo (o más emociones múltiples subdivididas). Las redes complejas, como las redes neuronales convolucionales y las redes neuronales recurrentes, se pueden utilizar para estas tareas de clasificación de texto. Por supuesto, la red neuronal de una sola capa más simple también puede lograr buenos resultados de predicción.

Mirando hacia atrás en el etiquetado POS y el etiquetado NER introducidos antes, en realidad usan redes neuronales para identificar partes del habla y entidades nombradas, por lo que ya hemos involucrado el aprendizaje profundo al usar spaCy para etiquetar partes del habla.

Los principios matemáticos de las redes neuronales están más allá del alcance de este libro.Cuando se analizan los diferentes tipos de redes neuronales y cómo usarlas, solo discutimos su arquitectura, hiperparámetros y aplicaciones prácticas. Los hiperparámetros son parámetros configurables en algoritmos de aprendizaje automático. Por lo general, es necesario establecer valores específicos de hiperparámetros antes de que se ejecute el algoritmo.

Para redes neuronales ordinarias e incluso redes neuronales convolucionales, el desarrollador fija y establece el tamaño de los espacios de entrada y salida. El tipo de entrada / salida puede ser imágenes, frases o esencialmente un conjunto de vectores. En el campo del procesamiento del lenguaje natural, el vector de salida representa la probabilidad de que el documento pertenezca a una determinada categoría. La red neuronal recurrente pertenece a una especie de red neuronal con una arquitectura especial, que puede aceptar la entrada de secuencia y realizar tareas de predicción que son mucho más complicadas que la clasificación. Las redes neuronales recurrentes se utilizan con mucha frecuencia en el análisis de texto porque entienden los datos de entrada como una secuencia para capturar la información de contexto de las palabras en la oración.

Otro escenario de aplicación de las redes neuronales en texto es la generación de modelos de lenguaje probabilísticos, que pueden entenderse como el cálculo de la probabilidad de la siguiente palabra (o carácter) a partir del texto anterior. En otras palabras, el modelo utiliza información contextual para calcular la probabilidad de la palabra actual. Este método ha sido ampliamente utilizado antes de la aparición de redes neuronales, como la tecnología n-gram, y el principio de funcionamiento es similar. Los métodos tradicionales se basan en corpus y base de datos de texto, tratando de calcular la probabilidad de co-ocurrencia de dos palabras adyacentes. Por ejemplo, pensaríamos que Nueva York es una frase porque su probabilidad de co-ocurrencia es muy alta y la probabilidad de co-ocurrencia se calcula en base a la probabilidad condicional y las reglas de probabilidad en cadena.

La red neuronal no se realiza aprendiendo la probabilidad de ocurrencia de palabras y caracteres, sino mediante un generador de secuencias, por lo que la red neuronal es un modelo generativo. El modelo generativo de procesamiento del lenguaje natural es muy interesante, puede aprender qué tipo de oraciones tienen alta probabilidad, por lo que los datos de texto necesarios para el entrenamiento se pueden obtener a través de la simulación de redes neuronales.

La tecnología de incrustación de palabras se crea en base a esta idea: si la palabra azul aparece después de pintar la pared con texto con la misma probabilidad que en rojo, la tecnología de incrustación de palabras codificará las dos palabras en el mismo espacio semántico. Esta tecnología de comprensión semántica más tarde se convirtió en una representación compartida, es decir, mapeando entradas con la misma semántica pero de diferentes tipos al mismo espacio vectorial. Por ejemplo, la palabra inglesa dog y la palabra china dog tienen la misma semántica, por lo que se pueden asignar a vectores muy similares en el espacio vectorial compartido chino-inglés. La magia de la red neuronal es que a través del entrenamiento, incluso puede mapear imágenes y texto en el mismo espacio. La descripción de texto automática de imágenes es una técnica de este tipo.

Los modelos profundos que incorporan el aprendizaje por refuerzo (la tecnología de modelos de entrenamiento a través de recompensas y castigos por errores de aprendizaje) ya pueden derrotar a los humanos en el juego de Go, y Go fue una vez considerado el campo más difícil de superar para la inteligencia artificial.

Una de las primeras tareas de procesamiento del lenguaje natural es el resumen de texto. La forma tradicional de resolver este problema es ordenar las oraciones que proporcionan la mayor cantidad de información y seleccionar un subconjunto de ellas. Este libro intenta utilizar este algoritmo en los capítulos relevantes del resumen del texto. Para el aprendizaje profundo, puede generar directamente un fragmento de texto, que es similar a la forma en que piensan los humanos, es decir, omitiendo el paso de seleccionar oraciones clave y crear un resumen directamente a través de un modelo de probabilidad. Esta técnica a menudo se conoce como generación de lenguaje natural (NLG).

Por lo tanto, el modelo de traducción automática de redes neuronales que acabamos de mencionar es también un modelo generativo similar, que genera directamente oraciones en el idioma de destino. A continuación, intentamos utilizar este método como ejemplo para construir el primer modelo de profundidad basado en texto.

13.3 Generación de texto

Los capítulos anteriores discutieron ampliamente el aprendizaje profundo y el procesamiento del lenguaje natural, así como las técnicas de generación de texto para obtener resultados convincentes. A continuación, implementaremos algunos ejemplos de generación de texto.

La estructura de red neuronal que usaremos es una red neuronal recurrente, y su versión de implementación específica es LSTM, una red de memoria larga y corta. Este tipo de red puede capturar simultáneamente la información de contexto larga y breve de las palabras. El blog más popular sobre LSTM es Understanding LSTM Networks, escrito por Colah . Los lectores pueden obtener más información sobre los principios internos de LSTM en este artículo.

Andrej Karpathy también escribió un artículo de arquitectura similar en su blog La efectividad irrazonable de las redes neuronales El lenguaje de implementación es Lua y el marco es Keras (un marco de aprendizaje profundo altamente abstracto).

El ecosistema de aprendizaje profundo basado en el lenguaje Python se está desarrollando rápidamente. Según la situación real, los desarrolladores pueden usar una variedad de métodos para construir un sistema de aprendizaje profundo. Este libro utiliza un marco de alto nivel relativamente abstracto para mostrar fácilmente al lector el proceso de formación. En 2018, elegir un marco de aprendizaje profundo no es fácil, por lo que este libro utiliza Keras como marco de ejemplo, pero antes de eso, analicemos y comparemos brevemente las características de varios marcos.

  • TensorFlow:  TensorFlow es un marco de red neuronal lanzado por Google, y también es un marco utilizado por el equipo de inteligencia artificial Google Brain. A diferencia de las herramientas de desarrollo comerciales puras, TensorFlow es mantenido por una comunidad de código abierto activa y admite la ejecución en la plataforma GPU. La compatibilidad con GPU es una característica muy importante, puede realizar operaciones matemáticas más rápido que la CPU normal. Dado que TensorFlow es un modelo basado en la computación gráfica, encaja bien con el modelo de red neuronal. El marco admite interfaces tanto de alto nivel como de bajo nivel, y actualmente es el esquema de selección más popular en la industria y la ciencia.
  • Theano:  Es el primer marco de aprendizaje profundo del mundo desarrollado por Yoshia Bengio (un pionero en aprendizaje profundo) de MILA (Instituto de Algoritmos de Aprendizaje de Montreal). Toma gráficos simbólicos como parte de la construcción de aprendizaje profundo, proporciona operaciones de interfaz de bajo nivel y es un sistema de aprendizaje profundo muy poderoso. Aunque su código ha dejado de mantenerse, todavía es digno de referencia, aunque solo sea para comprender esta historia. Lasagne y Blocks son interfaces de alto nivel de Theano, que abstraen y encapsulan algunas operaciones de bajo nivel.
  • Caffe & Caffe2:  Caffe es el primer marco dedicado al aprendizaje profundo, desarrollado por la Universidad de California, Berkeley. El framework se caracteriza por su alta velocidad y modularidad, y puede resultar un poco torpe de utilizar, ya que no es un framework desarrollado en lenguaje Python, es necesario configurar el archivo .prototxt para utilizar la red neuronal. Por supuesto, esta operación adicional no afecta el costo del aprendizaje, y aún esperamos utilizar algunas de sus excelentes características.
  • PyTorch:  es un framework desarrollado en base a la librería Torch de Lua, que rápidamente se ha convertido en un miembro de la familia de frameworks profundos. Su autor, Facebook AI Research Institute FAIR, lo donó a la comunidad de código abierto y proporcionó múltiples conjuntos de API. Como tiene buenas características, como gráficos de cálculo dinámico, se recomienda a los lectores que lo consulten.
  • Keras:  Keras es el marco profundo utilizado en los ejemplos de este libro. Con muchos paquetes de interfaz avanzados, abstractos y concisos, se considera que es el marco en profundidad más adecuado para el desarrollo de prototipos. Es compatible con TensorFlow y Theano, dos algoritmos subyacentes. Veremos su facilidad de uso al implementar código en el ejemplo de generación de texto. Al mismo tiempo, Keras tiene una comunidad grande y activa. TensorFlow también anunció que Keras se empaquetará en una versión de lanzamiento posterior, lo que significa que Keras seguirá teniendo una fuerte vitalidad durante mucho tiempo en el futuro.

Se recomienda que los lectores comprendan cada marco en profundidad para que se pueda usar de manera óptima en diferentes escenarios de aplicación. Las tecnologías involucradas en estos marcos son las mismas, por lo que pueden tener la misma lógica y proceso de generación de texto.

El ejemplo mencionado anteriormente en este capítulo involucrará una red neuronal recurrente. La ventaja de esta red es que puede memorizar el contexto. Los parámetros de la capa de red actual se aprenden en base a la información pasada por la capa anterior, y el nombre recursivo se deriva de esta, por lo que Puede obtener un mejor efecto de entrenamiento que otras estructuras de redes neuronales.

Usaremos una variante de la red neuronal recurrente LSTM (Long Short Memory Network) para implementar el siguiente ejemplo, esta red puede mantener la memoria de información a largo plazo. Cuando la entrada es una estructura de series de tiempo, LSTM a menudo puede lograr buenos resultados. En escenarios de lenguaje natural, la apariencia de cada palabra se ve afectada por el contexto de la oración. Esta característica de LSTM es aún más importante, y la singularidad de esta estructura de red es que puede comprender el contexto de las palabras circundantes y al mismo tiempo Recuerda las palabras anteriores.

Si los lectores están interesados ​​en los principios matemáticos detrás de RNN y LSTM, puede consultar los dos artículos siguientes:

  • Comprensión de las redes LSTM
  • Efectividad irrazonable de las redes neuronales recurrentes

El primer paso del código de muestra también es cargar algunas bibliotecas necesarias. Asegúrate de instalar Keras y TensorFlow en el pip local usando pip o conda.

El siguiente código es el resultado de una ligera modificación de Jupyter Notebook:

import kerasfrom keras.models import Sequentialfrom keras.layers import LSTM, Dense, Dropoutfrom keras.callbacks import ModelCheckpointfrom keras.utils import np_utilsimport numpy as np

Aquí usamos el modelo de secuencia de Keras y agregamos una estructura LSTM. El siguiente paso es organizar los datos de entrenamiento. En teoría, cualquier dato de texto se puede utilizar como entrada, dependiendo del tipo de datos que queramos generar. Aquí es donde los desarrolladores pueden ser creativos. RNN puede formar JK Rowling, Shakespeare e incluso su propio estilo de escritura, siempre que haya suficientes datos.

El uso de Keras para generar texto requiere que se construya un mapeo de todos los diferentes caracteres de antemano (el ejemplo aquí está basado en caracteres). Por ejemplo, el texto de entrada es source_data.txt. En el código de muestra a continuación, todas las variables dependen del conjunto de datos seleccionado, pero no importa qué archivo de texto se seleccione, el código se ejecutará normalmente.

filename    = 'data/source_data.txt'data        = open(filename).read()data        = data.lower()# Find all the unique characterschars       = sorted(list(set(data)))char_to_int = dict((c, i) for i, c in enumerate(chars))ix_to_char  = dict((i, c) for i, c in enumerate(chars))vocab_size  = len(chars)

Ambos diccionarios en el código anterior deben utilizarse como variables para pasar caracteres al modelo y generar texto. Un conjunto de entrada estándar debe contener los tres valores variables de print (chars), vocab_size y char_to_int.

El contenido del juego de caracteres es el siguiente:

['n', ' ', '!', '&', "'", '(', ')', ',', '-', '.', '0', '1', '2', '3', '4','5', '6', '7', '8', '9', ':', ';', '?', '[', ']', 'a', 'b', 'c', 'd', 'e','f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't','u', 'v', 'w', 'x', 'y', 'z']

El tamaño del diccionario es:

51

Después de mapear a id, el contenido del diccionario es el siguiente:

{'n': 0, ' ': 1, '!': 2, '&': 3, "'": 4, '(': 5, ')': 6, ',': 7, '-': 8,'.': 9, '0': 10, '1': 11, '2': 12, '3': 13, '4': 14, '5': 15, '6': 16, '7':17, '8': 18, '9': 19, ':': 20, ';': 21, '?': 22, '[': 23, ']': 24, 'a': 25,'b': 26, 'c': 27, 'd': 28, 'e': 29, 'f': 30, 'g': 31, 'h': 32, 'i': 33,'j': 34, 'k': 35, 'l': 36, 'm': 37, 'n': 38, 'o': 39, 'p': 40, 'q': 41,'r': 42, 's': 43, 't': 44, 'u': 45, 'v': 46, 'w': 47, 'x': 48, 'y': 49,'z': 50}

RNN acepta secuencias de caracteres como entrada y genera secuencias similares. Ahora procese la fuente de datos en la siguiente secuencia:

seq_length = 100list_X = [ ]list_Y = [ ]for i in range(0, len(chars) - seq_length, 1):    seq_in = raw_text[i:i + seq_length]    seq_out = raw_text[i + seq_length]    list_X.append([char_to_int[char] for char in seq_in])    list_Y.append(char_to_int[seq_out])n_patterns = len(list_X)

Para convertirlo a un formato que cumpla con la entrada del modelo, se requiere un procesamiento adicional:

X = np.reshape(list_X, (n_patterns, seq_length, 1))# Encode output as one-hot vectorY = np_utils.to_categorical(list_Y)

Debido a que la unidad de cada resultado de predicción es un carácter, la codificación one-hot basada en caracteres es esencial. Este ejemplo usa np_utils.to_categorical para la codificación. Por ejemplo, cuando se usa el índice 37 para codificar la letra m, el código se verá así:

[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.  0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.  1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

Ahora comience a crear formalmente un modelo de red neuronal:

model = Sequential()model.add(LSTM(256, input_shape=(X.shape[1], X.shape[2])))model.add(Dropout(0.2))model.add(Dense(y.shape[1], activation='softmax'))model.compile(loss='categorical_crossentropy', optimizer='adam')

El ejemplo anterior crea un LSTM con solo una capa de neuronas (creadas con Dense), la tasa de abandono se establece en 0.2, la función de activación es softmax y el algoritmo de optimización es ADAM.

Cuando la red neuronal funciona bien en un solo conjunto de datos, el valor de Abandono se usa para resolver el problema de sobreajuste de la red neuronal. La función de activación se utiliza para determinar el método de activación del valor de salida de una neurona, y el algoritmo de optimización se utiliza para ayudar a la red a reducir el error entre el valor predicho y el valor real.

La elección de los valores de estos hiperparámetros pertenece al conocimiento práctico. En el próximo capítulo, presentaremos brevemente cómo seleccionar valores de hiperparámetros apropiados para tareas de procesamiento de texto. Por ahora, puede considerar temporalmente la selección de hiperparámetros como un paso de caja negra para comprender. Los hiperparámetros usados ​​aquí son todos parámetros estándar cuando se usa Keras para generar texto.

El código para entrenar el modelo es muy simple, similar a scikit-learn, simplemente llame a la función de ajuste:

filepath="weights-improvement-{epoch:02d}-{loss:.4f}.hdf5"checkpoint = ModelCheckpoint(filepath, monitor='loss', verbose=1,save_best_only=True, mode='min')callbacks_list = [checkpoint]# fit the modelmodel.fit(X, y, epochs=20, batch_size=128, callbacks=callbacks_list)

La función de ajuste entrenará la entrada repetidamente durante n_epochs veces y luego guardará el peso óptimo para cada entrenamiento a través del método de devolución de llamada.

El tiempo que tarda la función de ajuste en completar el entrenamiento depende del tamaño del conjunto de entrenamiento, que a menudo lleva varias horas o incluso días.

Otro método de entrenamiento es precargar los pesos de un modelo entrenado:

filename = "weights.hdf5"model.load_weights(filename)model.compile(loss='categorical_crossentropy', optimizer='adam')

Conseguimos un modelo entrenado y podemos empezar a generar secuencias de texto a nivel de personaje.

start   = np.random.randint(0, len(X) - 1)pattern = np.ravel(X[start]).tolist()

Como quiero que el texto generado sea más aleatorio, la biblioteca numpy se usa para limitar el rango de caracteres:

output = []for i in range(250):    x           = np.reshape(pattern, (1, len(pattern), 1))    x           = x / float(vocab_size)    prediction  = model.predict(x, verbose = 0)    index       = np.argmax(prediction)    result      = index    output.append(result)    pattern.append(index)    pattern = pattern[1 : len(pattern)]print (""", ''.join([ix_to_char[value] for value in output]), """)

Como puede ver, basado en el carácter actual x que queremos predecir, el modelo da el resultado de la predicción del siguiente carácter con la mayor probabilidad de ocurrencia (la función argmax devuelve la identificación del carácter con la mayor probabilidad de ocurrencia), y luego convierte el índice en un carácter, y luego Agregar a la lista de salida. Dependiendo del número de iteraciones que queramos ver en la salida, necesitamos ejecutar múltiples bucles.

El modelo de red en el ejemplo de LSTM no es complicado y los lectores pueden agregar más capas a la red por sí mismos para lograr mejores resultados de predicción que este ejemplo. Por supuesto, un modelo simple será mejor que antes después de muchas épocas de entrenamiento. El blog de Andrej Karpathy demostró esta conclusión y proporcionó los resultados experimentales del modelo en la base de código de Shakespeare y Linux.

El preprocesamiento de los datos de entrada y la repetición de la época de entrenamiento al mismo tiempo también pueden optimizar el efecto de predicción. Aumentar el número de capas de red y el número de entrenamientos de época también incrementará el costo de tiempo del entrenamiento. Si los lectores solo quieren experimentar con RNN en lugar de construir un modelo de producción escalable, Keras es suficiente.

13.4 Resumen

Este capítulo demuestra completamente el poder del aprendizaje profundo. Entrenamos con éxito un generador de texto que está cerca de lo humano en términos de gramática y ortografía. Para crear un chatbot más realista, se necesitan más ajustes e intervenciones lógicas.

Aunque los resultados de generación de texto de esta calidad no son perfectos para nosotros, en otros escenarios de análisis de texto, las redes neuronales pueden producir resultados de predicción satisfactorios, como la clasificación de texto y la agrupación. El próximo capítulo explorará el uso de Keras y spaCy para la clasificación de texto.

Antes de finalizar este capítulo, se recomienda a los lectores que lean los siguientes artículos para profundizar su comprensión de las técnicas de generación de texto de aprendizaje profundo:

  • Mejores prácticas de PNL
  • Aprendizaje profundo y representaciones
  • Efectividad irrazonable de las redes neuronales
  • Lo mejor de 2017 para PNL y DL

Este artículo está tomado de "Procesamiento del lenguaje natural y lingüística computacional"

 

Este libro describe cómo utilizar el procesamiento del lenguaje natural y los algoritmos lingüísticos computacionales para razonar sobre los datos que tiene y obtener conocimientos. Estos algoritmos se basan en técnicas de inteligencia artificial y aprendizaje automático estadístico. Las herramientas que usan estos algoritmos ahora están disponibles y se pueden usar en herramientas como Python, Gensim y spaCy.

Este libro comienza con la limpieza de datos y luego presenta conceptos relacionados de lingüística computacional. Después de dominar estos contenidos, puede usar lenguaje y texto reales, y usar Python para explorar áreas más complejas de PNL estadística y aprendizaje profundo. Aprenderá a utilizar las herramientas adecuadas para anotar, analizar y modelar textos, y dominar el uso de las herramientas de marco correspondientes. También sabrá cuándo elegir una herramienta como Gensim como modelo de tema y cuándo utilizar Keras para el aprendizaje profundo. .

Este libro equilibra la relación entre la teoría y los casos reales, para que pueda ejecutar sus propios proyectos de procesamiento del lenguaje natural mientras domina los conocimientos teóricos. Descubrirá el rico ecosistema de Python, una herramienta de procesamiento de lenguaje natural, y entrará en el interesante mundo del análisis de texto moderno.

Supongo que te gusta

Origin blog.csdn.net/epubit17/article/details/108233425
Recomendado
Clasificación