Como ingeniero de ML en Quora, ¿alguna vez ha implementado un artículo de investigación en aprendizaje automático para resolver un problema técnico o de producto?

Me uní a Quora como ingeniero de aprendizaje automático a principios del año pasado y he estado trabajando en cómo corregir automáticamente los errores en las preguntas. Encontré inspiración en un artículo publicado por Ziang Xie ( Ziang Xie et al., 2016 ), que muestra un modelo de corrección del lenguaje neural de extremo a extremo.

En Quora, recibimos toneladas de preguntas todos los días por personas de diferentes países y orígenes. Queremos que todos puedan hacer cualquier tipo de pregunta que deseen, independientemente de su dominio del inglés, sin tener que preocuparse por la sintaxis y los errores semánticos. Como tal, creamos un modelo de aprendizaje automático que puede corregir automáticamente muchos errores comunes en las preguntas, incluidos errores ortográficos, preposiciones / artículos faltantes, puntuación incorrecta / faltante, mayúsculas incorrectas, etc. Aquí hay un ejemplo representativo:

Las dificultades en la corrección de preguntas se demuestran perfectamente en este ejemplo. Primero, esta pregunta comienza con “Hola señor”, lo cual es innecesario. Segundo, tiene un espacio innecesario entre las palabras “logro” y “período”. Finalmente, para ser gramaticalmente correcto, se requiere “the” antes de la abreviatura “SSB”.

En general, la corrección del lenguaje es uno de los problemas más complejos en el campo del procesamiento del lenguaje natural [PNL]. La conferencia CoNLL-2014 tiene una competencia centrada en este desafío general. La competencia ha atraído a muchos investigadores para resolver el problema.


Definición del problema

El problema de corrección de la pregunta se puede definir de la siguiente manera: Dada una pregunta de entrada x llena de errores, correlacione con una pregunta de salida y con los errores en x corregidos total (o parcialmente).

La mayor parte de la investigación existente en esta área se centra en la formación de clasificadores para tipos específicos de errores. Por ejemplo, Han ( Han et al., 2006 ) entrenó a un clasificador para corregir errores de artículos y Rozovskaya ( Rozovskaya et. Al., 2010 ) propuso un sistema enfocado en corregir errores de preposición y determinantes. Sin embargo, la capacitación / mantenimiento de modelos separados para diferentes tipos de error es ineficiente, y sería preferible corregir todos los errores en un modelo, si es posible. Hacia este objetivo, el reciente artículo de Ziang Xie me llamó la atención como una posible solución.

Arquitectura principal

El componente central del artículo de Ziang Xie es una red neuronal recurrente codificador-decodificador [RNN] con un mecanismo de atención (como se muestra en la figura 1). Funciona a nivel de caracteres de modo que 1) se puede evitar el problema de falta de vocabulario [OOV] y 2) tiene la capacidad de corregir errores de ortografía. Sin embargo, al operar a nivel de caracteres, la longitud total de la secuencia es grande en comparación con operar a nivel de palabra, lo que significa que el tiempo requerido para codificar / decodificar una pregunta es alto. Por otro lado, el tiempo de búsqueda del decodificador se reduce ya que el tamaño del vocabulario para el nivel de caracteres es mucho más pequeño que el nivel de palabra.

Figura 1: la arquitectura codificador-decodificador.

La red del codificador utiliza una unidad recurrente cerrada bidireccional [GRU] ( Cho et al., 2014 ). La arquitectura principal de un GRU es muy similar a la de un LSTM. Tiene dos puertas, una puerta de reinicio y una puerta de actualización. La puerta de reinicio determina cómo combinar la nueva entrada con información previa (también llamada memoria) mientras que la puerta de actualización define la cantidad de memoria anterior que se debe conservar.

Toda la red del codificador contiene tres capas para asignar la pregunta de entrada x a una representación de alto nivel. Excepto por la primera capa que usa la incrustación de caracteres de la pregunta de entrada x como entrada, cada capa concatena sus estados ocultos hacia adelante y hacia atrás, cuyo resultado se usa como entrada para la siguiente capa (como se muestra en la figura 2).

Figura 2: la primera capa en la red del codificador.

La red del decodificador utiliza un GRU estándar, y cada unidad GRU solo puede obtener información de la unidad pasada, pero no del futuro. También tiene tres capas, y la última capa está condicionada a la representación codificada utilizando un mecanismo de atención ( Bahdanau et al., 2014 ), que es una suma ponderada sobre los estados ocultos en la última capa del codificador. Con este mecanismo de atención, podemos asegurar que la pregunta de salida y no diverja de la pregunta de entrada x. En otras palabras, queremos asegurarnos de que la pregunta y conserve el significado de la pregunta x. La secuencia de salida “óptima” se recupera mediante la búsqueda de haz con un ancho de haz predefinido. La búsqueda de haz es un algoritmo codicioso. Utiliza la búsqueda de amplitud primero con un número limitado de nodos (llamado ancho de haz) mantenidos en cada nivel del árbol. En general, un tamaño de haz más grande conducirá a resultados más precisos, pero con un tiempo de búsqueda más largo y más uso de memoria. En nuestro caso, el ancho del haz se establece en 8, lo que muestra un buen equilibrio entre velocidad y precisión.

Actualmente, utilizamos este modelo para corregir nuevas preguntas y la precisión del modelo se mide utilizando la puntuación BLEU . El puntaje BLEU se usa comúnmente para medir la calidad de un sistema de traducción automática. Específicamente, mide la superposición de N-gram entre la salida de traducción automática y el texto de referencia (verdad básica).

Figura 3: un ejemplo de cálculo de la puntuación BLEU de 4 gramos entre la salida de traducción automática y el texto de referencia.

Para satisfacer mejor nuestras necesidades, modificamos un poco la arquitectura original al reducir el número de capas utilizadas en el codificador y el decodificador de tres a dos. Después de experimentar con algunas combinaciones diferentes, descubrimos que esto nos da la compensación óptima entre el tiempo de inferencia y la precisión; es decir, logramos un tiempo de predicción mucho más rápido, pero no una precisión mucho peor.

Figura 4: un ejemplo de preguntas arregladas automáticamente por nuestro modelo de corrección de preguntas. “Verde”: parte añadida; “Rojo”: parte eliminada.


En Quora, el aprendizaje automático se ha utilizado de muchas maneras diferentes, como la clasificación de respuestas, la detección de preguntas duplicadas, la detección de spam, etc. También tenemos charlas semanales de aprendizaje automático donde discutimos las tendencias de aprendizaje automático y documentos de investigación relevantes. Si está interesado en trabajar en problemas relacionados con el aprendizaje automático, ¡únase a nosotros!

More Interesting

¿Cuál es el papel de la informática en el aprendizaje automático?

¿Cómo es la aplicación K-Means de maximización de expectativas en Naive Bayes?

¿Debo ir por TensorFlow o PyTorch?

En la minería de texto, ¿por qué deberíamos eliminar el término disperso de la matriz de términos del documento?

¿Cómo determina Quora a quién poner en mi sección "mejorar su alimentación"?

¿Cuál es la solución del ejercicio 1.3 del libro Machine Learning de Tom M. Mitchell?

Debido a que este será el tema de un panel en el Instituto de Verano NBER, ¿qué puede aprender la economía de Data Science y / o Machine Learning, y qué puntos sobre este tema le gustaría ver incluidos?

¿Cómo podemos hacer una buena predicción usando el aprendizaje profundo MXNet R?

¿Cómo se encuentran los trabajos de consultoría en machine learning + PNL?

¿Qué curso se sugiere para el aprendizaje automático que sea más un curso basado en proyectos?

En vista de los nuevos temas de TI (AI, IoT, datos grandes / rápidos, análisis, blockchain, etc.), ¿hay alguna ventaja en aprender la programación de Python?

¿Son los métodos de aprendizaje automático una especie de interpolación, mientras que los métodos de series temporales actúan como métodos de extrapolación?

Si no escalo las características antes de aplicar el descenso de gradiente, ralentizará la convergencia, pero ¿puede cambiar los resultados?

¿Qué hacen los ingenieros de aprendizaje automático diariamente?

¿Siri es una forma de aprendizaje automático?