¿Qué algoritmo puedo usar para medir la correlación entre dos palabras?

Para responder bien a esto, necesitamos una definición más específica de “correlación”.

Sabrás una palabra de la compañía que guarda.

—John Firth, 1957.

Si simplemente desea medir la frecuencia con la que aparece la palabra a dentro de n palabras de la palabra b , esto se calcula directamente, con suficiente RAM, con una matriz de correlación grande. Las filas y columnas son la palabra en el vocabulario, y el elemento < x , y > representa el número de veces que las palabras aparecen juntas.

Se pueden utilizar técnicas más avanzadas para calcular la similitud de palabras. De acuerdo con la declaración anterior de Firth, dicha matriz de correlación puede usarse como el primer paso para encontrar tales medidas. Un enfoque comercial popular es word2vec, que en muchos aspectos es conceptualmente similar a la indexación semántica latente. Representa los términos en un espacio vectorial, lo que permite medir la similitud en términos de distancia.

Una medida común de la distancia entre dos secuencias se llama distancia de edición.

A diferencia de la distancia de Hamming, que solo mide la cantidad de diferencias al alinear las palabras una al lado de la otra, la distancia de edición es robusta para las inserciones y eliminaciones, que son errores comunes de transcripción tanto para humanos como en procesos naturales. La distancia de edición y otros tipos de algoritmos de alineación de secuencias se usan comúnmente para detectar similitudes de documentos y en bioinformática.

Supongo que se refiere a la correlación como un número que da una idea sobre similitud y disimilitud. Por lo general, necesitaría un conjunto de datos de texto grande. Una forma de hacerlo sería crear un modelo de bolsa de palabras de todas las palabras del conjunto de datos. El BoW se puede ordenar alfabéticamente y podemos crear un vector grande donde cada índice = índice de palabra en BoW.

Luego, para cada palabra de interés, podríamos elegir n-gramos (n no debería ser demasiado grande o demasiado pequeño) que contenga la palabra. Ahora para cada palabra de interés podemos crear un vector donde cada elemento en el índice i = 1 si alguno de sus n-gramos contiene la palabra en el índice i en BoW.

Ahora podría simplemente medir la distancia del coseno entre los vectores de dos palabras de interés para obtener su correlación.

Fórmula para la distancia cosenoidal:

Dónde,

Un número mayor significa más similitud.

También podría usar formas más sofisticadas como la inclusión de palabras, utilizando redes neuronales pre-entrenadas gratuitas como word2vec (o entrene su propio modelo word2vec).

Hice algo como esto en una empresa de posgrado, años atrás, tratando de clasificar, agrupar e identificar mecanógrafos humanos a partir de sus palabras / frases más distintivas (o incluso errores tipográficos). Suena muy parecido a tu proyecto.

Los dos métodos más útiles / aplicables que encontré fueron las identidades de Fisher (distancia de suma de cuadrados) (varianza): información de Fisher, que mide la importancia de una variable aleatoria X:

y, mejor aún, Thorvald Thiele hizo un rimelig (danés para “verosimilitud”), midiendo ‘cuán fuertemente único / identificar una muestra de texto se compara con otras muestras de texto dentro de ese mismo trabajo escrito, y expresable como una prueba de razón de verosimilitud:

Creo que el segundo (Thorvald Thiele, log-verosimilitud) va a estar cerca de lo que quieres. Tendrá que determinar “el texto ‘normal’ para comparar las muestras”. Puede tratarse de un diccionario típico o de Oxford English Corpus, o tal vez solo la colección de todos los comentarios de texto contenidos en su producto. Tendrá que decidir, en función del dominio comercial y la necesidad específica.

Grita a las maravillas de la web semántica.

Lo que probablemente esté buscando se llama medida de similitud semántica. Se pretende cuantificar la similitud entre dos términos en una ontología o vocabulario en función de su posición. Puede pensar en estas ontologías y vocabularios como diccionarios gigantes que almacenan palabras en forma de jerarquía (aunque las ontologías en particular también contienen otras relaciones entre términos) o árbol.

La medida más fundamental y común de similitud semántica es la medida de ruta que pertenece a una categoría de medidas relacionadas que se denominan medidas basadas en el conocimiento. Esencialmente, este algoritmo funciona calculando la longitud de ruta más corta entre dos términos dados en un árbol / jerarquía. El siguiente gráfico debería proporcionarle una mejor idea de lo que estoy hablando.

Debido a que hay algunos defectos con este método basado en muchas cosas en las que no voy a entrar, existen varias otras medidas de similitud semántica que se han publicado en la literatura reciente. Si estás interesado, te animo a que los revises.

También existe otra categoría de medidas destinadas a lograr un objetivo similar llamado medidas basadas en la distribución que también se basan en un corpus junto con una fuente de conocimiento. Si está buscando específicamente conectividad / relación general en lugar de similitud, entonces el método que está buscando se llama caminata aleatoria.

¡Espero que esto ayude!

Si desea medir la similitud semántica, puede usar la similitud de Lin, que se basa en la similitud de Resnik.

Similitud de Lin: [math] sim (u, v) = 2 * Q (LCA (u, v)) / (Q (u) + Q (v)) [/ math], donde [math] u [/ math] y [math] v [/ math] son ​​palabras, [math] Q (u) = -log (P (u)) [/ math] es Autoinformación, y [math] LCA (u, v) [/ math ] es el antepasado común más bajo en el árbol del cuerpo.
Similitud de Resnik: [matemáticas] sim (u, v) = Q (LCA (u, v)) [/ matemáticas]

También puede usar el análisis semántico latente para la Reducción de dimensionalidad para encontrar conceptos en el espacio dimensional inferior.

Depende de lo que quieras decir con correlación.

Una opción es SoundEx, que codifica palabras que suenan similares al mismo código. Probablemente haya mejores opciones para esto ahora, pero es fácil y rápido.

Otra opción sería comparar la posición de cada letra y calcular la distancia entre las letras. En este caso, la distancia podría definirse como la distancia alfabética o quizás la distancia del teclado. Por ejemplo, las palabras “the” y “you”, alfabéticamente t e y están separadas por 5 letras, h y o están separadas por 7 letras y e y u están separadas por 16 letras para una distancia total de 5 + 7 + 16 = 28 Sin embargo, si estaba midiendo la distancia del teclado, t e y están separados por 1 (teclado estándar de EE. UU.), H y o están separados por 3 o 4 (dependiendo de cómo decida medir) y e y u están separados por 4 para un total de 8 o 9. No sé si este algoritmo tiene un nombre, ya que se me ocurrió, pero probablemente lo tenga.