Redes neuronales y la filosofía del lenguaje.

¿Por qué las teorías de Wittgenstein siguen siendo la base de toda la PNL moderna?

La representación vectorial de las palabras es quizás una de las ideas más bellas y románticas en la historia de la inteligencia artificial. La filosofía del lenguaje es una rama de la filosofía que explora la relación entre el lenguaje y la realidad y cómo hacer que el discurso sea significativo y comprensible. Una representación vectorial de palabras es un método muy específico en el procesamiento moderno del lenguaje natural (PNL). En cierto sentido, es una evidencia empírica de las teorías de Ludwig Wittgenstein, uno de los filósofos más relevantes del siglo pasado. Para Wittgenstein, el uso de palabras es un movimiento en un juego de lenguaje social jugado por miembros de la comunidad que se entienden entre sí. El significado de una palabra depende solo de su utilidad en un contexto; no corresponde uno a uno con un objeto del mundo real.

Para una gran clase de casos en los que usamos la palabra "significado", se puede definir como el significado de la palabra es su uso en el lenguaje .

Por supuesto, entender el significado exacto de una palabra es muy difícil. Hay muchos aspectos a considerar:

  • a qué objeto puede referirse la palabra;
  • qué parte del discurso es;
  • si es una expresión idiomática;
  • todos los matices de significados;
  • Y así sucesivamente.

Todos estos aspectos, al final, se reducen a una cosa: saber cómo usar la palabra.

El concepto de significado y por qué un conjunto ordenado de caracteres tiene una connotación definitiva en el lenguaje no es solo una cuestión filosófica, sino también probablemente el mayor problema que tienen que enfrentar los especialistas en IA que trabajan con PNL. Es bastante obvio para una persona de habla rusa que un "perro" es un "animal", y se parece más a un "gato" que a un "delfín", pero esta tarea está lejos de ser simple para una solución sistemática.

Habiendo corregido ligeramente las teorías de Wittgenstein, podemos decir que los perros se parecen a los gatos porque a menudo aparecen en los mismos contextos: probablemente puedas encontrar perros y gatos asociados con las palabras "hogar" y "jardín" que con las palabras "mar" y el "océano". Es esta intuición la que subyace en Word2Vec , una de las implementaciones más famosas y exitosas de la representación vectorial de palabras. Hoy en día, las máquinas distan mucho de comprender realmente textos largos y pasajes, pero la representación vectorial de las palabras es, sin duda, el único método que nos ha permitido dar el mayor paso en esta dirección durante la última década.

De BoW a Word2Vec


En muchos problemas informáticos, el primer problema es presentar los datos en forma numérica; Las palabras y oraciones son probablemente las más difíciles de imaginar de esta forma. En nuestra configuración, las palabras D se seleccionan del diccionario, y a cada palabra se le puede asignar un índice numérico i .

Durante muchas décadas, se ha adoptado un enfoque clásico para representar cada palabra como un vector numérico D-dimensional de todos los ceros, excepto uno en la posición i. Como ejemplo, considere un diccionario de tres palabras: "perro", "gato" y "delfín" (D = 3). Cada palabra puede representarse como un vector tridimensional: "perro" corresponde a [1,0,0], "gato" a [0,1,0] y "delfín", obviamente, [0,0,1]. El documento se puede representar como un vector D-dimensional, donde cada elemento cuenta las apariciones de la i-ésima palabra en el documento. Este modelo se llama Bag-of-words (BoW), y se ha utilizado durante décadas.

A pesar de su éxito en los años 90, BoW carecía de la única función interesante de las palabras: su significado. Sabemos que dos palabras muy diferentes pueden tener significados similares, incluso si son completamente diferentes desde el punto de vista de la ortografía. "Gato" y "perro" son animales domésticos, "rey" y "reina" están cerca uno del otro, "manzana" y "cigarrillo" no tienen ninguna relación. Sabemos esto, pero en el modelo BoW, todas estas palabras están a la misma distancia en el espacio vectorial: 1.

El mismo problema se aplica a los documentos: al usar BoW, podemos concluir que los documentos son similares solo si contienen la misma palabra varias veces. Y aquí viene Word2Vec, que introduce en los términos del aprendizaje automático muchas preguntas filosóficas que Wittgenstein discutió en sus Estudios filosóficos hace 60 años.

En un diccionario de tamaño D, donde la palabra se identifica por su índice, el objetivo es calcular la representación vectorial N-dimensional de cada palabra para N << D. Idealmente, queremos que sea un vector denso que represente algunos aspectos semánticamente específicos del significado. Por ejemplo, idealmente queremos que "perro" y "gato" tengan representaciones similares, y "manzana" y "cigarrillo" están muy distantes en el espacio vectorial.

Queremos realizar algunas operaciones algebraicas básicas en vectores, como +−= . Quiero que la distancia entre los vectores "actor" y "actriz" coincida sustancialmente con la distancia entre el "príncipe" y la "princesa". Aunque estos resultados son bastante utópicos, los experimentos muestran que los vectores Word2Vec exhiben propiedades muy cercanas a estos.

Word2Vec no aprende puntos de vista directamente de esto, pero los recibe como un subproducto de la clasificación sin un maestro. El conjunto de datos de corpus de palabras de NLP promedio consiste en un conjunto de oraciones; cada palabra en una oración aparece en el contexto de las palabras circundantes. El propósito del clasificador es predecir la palabra objetivo, considerando las palabras contextuales como entrada. Para la oración "el perro marrón juega en el jardín", las palabras [marrón, juegos, en el jardín] se proporcionan al modelo como entrada, y ella debe predecir la palabra "perro". Esta tarea se considera como aprender sin un maestro, ya que el corpus no necesita ser marcado con una fuente externa de verdad: si tiene un conjunto de oraciones, siempre puede crear automáticamente ejemplos positivos y negativos. Mirando al "perro marrón jugando en el jardín" como un ejemplo positivo, podemos crear muchos patrones negativos, como "avión marrón jugando en el jardín" o "uva marrón jugando en el jardín", reemplazando la palabra objetivo "perro" con palabras aleatorias del conjunto de datos.

Y ahora la aplicación de las teorías de Wittgenstein es perfectamente clara: el contexto es crucial para la representación vectorial de las palabras, ya que es importante atribuir significado a la palabra en sus teorías. Si dos palabras tienen significados similares, tendrán representaciones similares (una pequeña distancia en el espacio N-dimensional) solo porque a menudo aparecen en contextos similares. Por lo tanto, el "gato" y el "perro" eventualmente tendrán vectores cercanos porque a menudo aparecen en los mismos contextos: es útil que el modelo use representaciones vectoriales similares para ellos, porque esto es lo más conveniente que puede hacer, para obtener mejores resultados en la predicción de dos palabras en función de sus contextos.

El artículo original ofrece dos arquitecturas diferentes: CBOW y Skip-gram. En ambos casos, las representaciones verbales se enseñan junto con una tarea de clasificación específica, proporcionando las mejores representaciones vectoriales posibles de palabras que maximizan el rendimiento del modelo.


Figura 1. Comparación de arquitecturas CBOW y Skip-gram

CBOW significa Bolsa Continua de Palabras, y su tarea es adivinar una palabra con el contexto en mente como entrada. Las entradas y salidas se representan como vectores D-dimensionales que se proyectan en un espacio N-dimensional con pesos comunes. Solo buscamos pesos de proyección. De hecho, la representación vectorial de las palabras es D × N matrices, donde cada fila representa una palabra del diccionario. Todas las palabras de contexto se proyectan en una posición, y sus representaciones vectoriales se promedian; por lo tanto, el orden de las palabras no afecta el resultado.

Skip-gram hace lo mismo, pero viceversa: trata de predecir las palabras de contexto C , tomando la palabra objetivo como entrada. La tarea de predecir varias palabras contextuales puede reformularse en un conjunto de problemas de clasificación binaria independientes, y ahora el objetivo es predecir la presencia (o ausencia) de palabras contextuales.

Como regla general, Skip-gram requiere más tiempo para el entrenamiento y, a menudo, ofrece resultados ligeramente mejores, pero, como de costumbre, las diferentes aplicaciones tienen diferentes requisitos, y es difícil predecir de antemano cuáles mostrarán el mejor resultado. A pesar de la simplicidad del concepto, aprender este tipo de arquitectura es una verdadera pesadilla debido a la cantidad de datos y la potencia de procesamiento necesaria para optimizar los pesos. Afortunadamente, en Internet puede encontrar algunas representaciones vectoriales de palabras previamente entrenadas, y puede estudiar el espacio vectorial, el más interesante, con solo unas pocas líneas de código Python.

Posibles mejoras: GloVe y fastText


Sobre el clásico Word2Vec en los últimos años, se han propuesto muchas posibles mejoras. Los dos más interesantes y comúnmente utilizados son GloVe (Universidad de Stanford) y fastText (desarrollado por Facebook). Están tratando de identificar y superar las limitaciones del algoritmo original.

En un artículo científico original , los autores de GloVe enfatizan que el entrenamiento modelo en un contexto local separado hace un uso deficiente de las estadísticas globales del corpus. El primer paso para superar esta limitación es crear una matriz global X , donde cada elemento i, j cuenta el número de referencias a la palabra j en el contexto de la palabra i . La segunda idea importante de este documento es la comprensión de que solo las probabilidades por sí solas no son suficientes para una predicción confiable de los valores, y también se necesita una matriz de coincidencia, de la que se pueden extraer directamente ciertos aspectos de los valores.

Considere dos palabras i y j que son de particular interés. Para concreción, supongamos que estamos interesados ​​en el concepto de un estado termodinámico, para el cual podemos tomar i = y j = . La relación de estas palabras puede investigarse estudiando la razón de sus probabilidades de ocurrencia conjunta usando diferentes palabras sonoras, k. Para las palabras k relacionadas con hielo pero no con vapor, digamos k = [sólido, estado de la materia], esperamos que la relación Pik / Pjk sea mayor. De manera similar, para las palabras k asociadas con vapor, pero no con hielo, digamos k = , la proporción debe ser pequeña. Para palabras como "agua" o "moda", que están igualmente relacionadas con el hielo y el vapor, o que no tienen relación con ellas, esta relación debe estar cerca de la unidad.

Esta razón de probabilidades se convierte en el punto de partida para estudiar la representación vectorial de las palabras. Queremos poder calcular vectores que, en combinación con una función específica F, mantengan esta relación constante en el espacio de representación vectorial.


Figura 2. La fórmula más común para la representación vectorial de palabras en el modelo GloVe

La función F y la dependencia de la palabra k pueden simplificarse reemplazando los exponenciales y las compensaciones fijas, lo que da la función de minimizar errores por el método J de mínimos cuadrados:


Figura 3. La función final de calcular la representación vectorial de palabras en el modelo GloVe

La función f es una función de conteo que intenta no cargar coincidencias muy frecuentes y raras, mientras que bi y bj son compensaciones para restaurar la simetría de la función. En los últimos párrafos del artículo se muestra que el entrenamiento de este modelo al final no es muy diferente del entrenamiento del modelo clásico Skip-gram, aunque en pruebas empíricas GloVe es superior a ambas implementaciones de Word2Vec.

Por otro lado, fastText corrige un inconveniente completamente diferente de Word2Vec: si el entrenamiento del modelo comienza con la codificación directa de un vector D-dimensional, entonces se ignora la estructura interna de las palabras. En lugar de codificar directamente la codificación de palabras que aprenden representaciones verbales, fastText ofrece estudiar N-gramos de caracteres y representar palabras como la suma de vectores N-gram. Por ejemplo, con N = 3, la palabra "flor" se codifica como 6 diferentes 3 gramos [<fl, flo, low, Debt, wer, er>] más una secuencia especial <flower>. Observe cómo se usan los corchetes angulares para indicar el principio y el final de una palabra. Por lo tanto, la palabra está representada por su índice en el diccionario de palabras y el conjunto de N-gramos que contiene, asignados a enteros utilizando la función hash. Esta mejora simple le permite dividir representaciones de N-gram entre palabras y calcular representaciones vectoriales de palabras que no estaban en el caso de aprendizaje.

Experimentos y posibles aplicaciones.


Como ya dijimos, para usar estas representaciones vectoriales solo necesita unas pocas líneas de código Python. Realicé varios experimentos con el modelo GloVe de 50 dimensiones , entrenado en 6 mil millones de palabras de oraciones de Wikipedia, así como con el modelo de texto rápido de 300 dimensiones, entrenado en Common Crawl (que dio 600 mil millones de tokens). Esta sección proporciona enlaces a los resultados de ambos experimentos solo para probar los conceptos y dar una comprensión general del tema.

En primer lugar, quería verificar algunas similitudes básicas de palabras, la característica más simple pero importante de su representación vectorial. Como era de esperar, las palabras más similares con la palabra "perro" fueron "gato" (0.92), "perros" (0.85), "caballo" (0.79), "cachorro" (0.78) y "mascota" (0.77). Tenga en cuenta que la forma plural tiene casi el mismo significado que el singular. Nuevamente, es bastante trivial para nosotros decir eso, pero para un automóvil no es un hecho. Ahora comida: las palabras más similares para "pizza" son "sandwich" (0.87), "sandwiches" (0.86), "snack" (0.81), "productos horneados" (0.79), "papas fritas" (0.79) y "hamburguesas" ( 0,78). Tiene sentido, los resultados son satisfactorios y el modelo se comporta bastante bien.

El siguiente paso es realizar algunos cálculos básicos en el espacio vectorial y verificar qué tan correctamente el modelo ha adquirido algunas propiedades importantes. De hecho, como resultado del cálculo de los vectores +- , el resultado es "actriz" (0,94), y como resultado del cálculo del +- , se obtiene la palabra "rey" (0,86). En términos generales, si el valor es a:b=c:d , entonces la palabra d debe obtenerse como d=b-a+c . Pasando al siguiente nivel, es imposible imaginar cómo estas operaciones vectoriales incluso describen aspectos geográficos: sabemos que Roma es la capital de Italia, ya que Berlín es la capital de Alemania, de hecho +-= (0.88) y +-= (0.83) .

Y ahora para la parte divertida. Siguiendo la misma idea, intentaremos sumar y restar conceptos. Por ejemplo, ¿Cuál es el equivalente estadounidense de pizza para los italianos? +-= (0.60) , luego (0.59) . Desde que me mudé a Holanda, siempre digo que este país es una mezcla de tres cosas: un poco de capitalismo estadounidense, frío sueco y calidad de vida, y, finalmente, una pizca de abundancia napolitana. Al cambiar ligeramente el teorema original, eliminando un poco de precisión suiza, obtenemos Holanda (0,68) como resultado de ++- : bastante impresionante, para ser sincero.


Figura 4. Para todos los lectores holandeses: tome esto como un cumplido, ¿de acuerdo?

Se pueden encontrar buenos recursos prácticos aquí y aquí para usar estas representaciones vectoriales pre-entrenadas. Gensim es una biblioteca Python simple y completa con algunas funciones algebraicas y de similitud listas para usar. Estas representaciones vectoriales pre-entrenadas se pueden usar de varias maneras (y útiles), por ejemplo, para mejorar el rendimiento de los analizadores del estado de ánimo o los modelos de lenguaje. Cualquiera sea la tarea, el uso de vectores N-dimensionales mejorará significativamente la eficiencia del modelo en comparación con la codificación directa. Por supuesto, la capacitación en representaciones vectoriales en un área específica mejorará aún más el resultado, pero esto puede requerir, quizás, un esfuerzo y tiempo excesivos.

Source: https://habr.com/ru/post/es435984/


All Articles