Use vectores de palabras para encontrar matemáticamente palabras con significado similar

Fotografía: Nika Charakova

1. Descripción

        En resumen, un vector de palabras no es más que una secuencia de números reales que representan el significado de una palabra del lenguaje natural. Esta tecnología es un habilitador importante de capacidades útiles de PNL, que permite que las máquinas "entiendan" el lenguaje humano. Este artículo analiza cómo usar vectores de palabras para calcular mediante programación la similitud semántica de los textos, lo cual es útil, por ejemplo, si necesita clasificar los textos según los temas que cubren. Comienza con una vista conceptual y ejemplos, luego muestra cómo usar spaCy, una biblioteca Python de NLP líder, para determinar la similitud semántica del texto.

2. El concepto de palabra vector

        Así que echemos un vistazo conceptual a los vectores de palabras para que puedas tener una idea básica de cómo calcular matemáticamente la similitud semántica entre palabras representadas en forma de vector. Luego verá el método similarity() de spaCy, que compara los vectores de palabras de los objetos contenedores (Doc, Span, Token) para determinar qué tan cerca están en significado.

        En el modelado estadístico, las palabras se asignan a vectores de números reales que reflejan la similitud semántica de las palabras. Puede imaginar el espacio vectorial de palabras como una nube donde los vectores de palabras con significados similares se encuentran cerca. Por ejemplo, el vector que representa la palabra "manzana" debe estar más cerca del vector de la palabra "pera" que de la palabra "coche". Dado que los dos primeros se refieren a frutos comestibles, el segundo se refiere a vehículos de carretera de cuatro ruedas. Para generar estos vectores, necesita codificar el significado de estas palabras. En realidad, hay varias formas de codificar el significado.

3. Definir significado con coordenadas

        Una forma de generar vectores de palabras significativos es asignar objetos o categorías del mundo real a cada coordenada del vector de palabras. Por ejemplo, suponga que está generando vectores de palabras para las siguientes palabras: romano, italiano, ateniense y griego. La palabra vectores debería reflejar matemáticamente el hecho de que Roma es la capital de Italia y tiene una relación con Italia diferente a la de Atenas. Al mismo tiempo, deben reflejar el hecho de que Atenas y Roma son capitales y Grecia e Italia son estados.

        La siguiente figura ilustra cómo se vería este espacio vectorial en forma de matriz.

        Aquí, distribuyes el significado de cada palabra entre coordenadas en un espacio de cuatro dimensiones que representan las categorías "País", "Capital", "Griego" e "Italiano". En este ejemplo simplificado, los valores de las coordenadas pueden ser 1 o 0, indicando si la palabra correspondiente pertenece a esa categoría.

        Una vez que tenga un espacio vectorial donde los vectores de números capturen el significado de las palabras correspondientes, puede usar la aritmética vectorial en este espacio vectorial para comprender mejor el significado de las palabras. Para saber de qué país Atenas es la capital, puedes usar la siguiente ecuación, donde cada token representa su vector correspondiente y X es el vector desconocido:

        Italia — Roma = X — Atenas

        Esta ecuación expresa una analogía donde X representa vectores de palabras que tienen la misma relación con Atenas que Italia tiene con Roma. Para resolver X, puedes reescribir la ecuación así:

        X = Italia - Roma + Atenas

        Primero reste el vector Roma del vector Italia restando los elementos vectoriales correspondientes. Luego, suma el vector resultante y la suma del vector Atenas. El diagrama de la siguiente figura resume este cálculo.

        Al restar el vector de palabras para Roma del vector de palabras para Italia y luego agregar el vector de palabras para Atenas, puedes obtener un vector igual al vector de Grecia.

4. Usa dimensiones para expresar significado

        Aunque el espacio vectorial que acaba de crear tiene solo cuatro categorías, los espacios vectoriales del mundo real pueden requerir decenas de miles de dichas categorías. Un espacio vectorial de este tamaño no es práctico para la mayoría de las aplicaciones porque requiere una gran matriz de incrustación de palabras. Por ejemplo, si desea codificar 10 000 categorías y 1 000 000 de entidades, necesita matrices de incorporación de 10 000 × 1 000 000.

        Una forma obvia de reducir el tamaño de la matriz de incrustación es reducir el número de categorías en el espacio vectorial. En lugar de utilizar coordenadas para representar todas las categorías, la implementación real de los espacios vectoriales de palabras utiliza la distancia entre vectores para cuantificar y clasificar la similitud semántica. Las dimensiones generalmente no tienen un significado inherente. En cambio, representan posiciones en un espacio vectorial, y la distancia entre vectores representa la similitud en el significado de las palabras correspondientes. Para ver un ejemplo de un espacio vectorial real, puede descargar la biblioteca de vectores de palabras fastText en  English word vectors fastText  , que distribuye el significado de las palabras en un espacio vectorial de palabras de 300 dimensiones.

Cinco, método de similitud de spaCy ()

        En spaCy, cada tipo de objeto contenedor tiene un método de similitud que le permite calcular una estimación de la similitud semántica entre dos objetos contenedor de cualquier tipo al comparar sus vectores de palabras. Para calcular la similitud de intervalos y documentos que no tienen sus propios vectores de palabras, spaCy promedia los vectores de palabras etiquetados que contienen.

        La similitud semántica de dos objetos contenedores se puede calcular incluso si los dos objetos son diferentes. Por ejemplo, puede comparar un objeto Token con un objeto Span, un objeto Span con un objeto Doc, etc.

        El siguiente ejemplo calcula qué tan similar es un objeto Span a un objeto Doc:

>>> doc=nlp(‘I want a green apple.’)
>>> doc.similarity(doc[2:5])
0.7305813588233471

        Este código calcula una estimación de similitud semántica entre la oración "Quiero una manzana verde" y la frase "una manzana verde" derivada de la misma oración. Como puede ver, la similitud calculada es lo suficientemente alta como para que dos objetos se consideren similares en contenido (la similitud varía de 0 a 1). No es sorprendente que el método similarity() devuelva 1 cuando compara un objeto consigo mismo:

>>> doc.similitud(doc)
1.0
>>> doc[2:5].similitud(doc[2:5])
1.0

6. Posdata

        Nota: Los ejemplos utilizados en este artículo se tomaron de mi libro reciente "Procesamiento del lenguaje natural con Python y spaCy (https://nostarch.com/NLPPython)" publicado por No Starch Press ( https://nostarch.com/ ). con Python y spaCy ) .

Supongo que te gusta

Origin blog.csdn.net/gongdiwudu/article/details/132325632
Recomendado
Clasificación