Cómo calcular la similitud de coseno entre tweets

Tengo poca curiosidad por saber por qué coseno? Después de pensar un poco, pensé en experimentar con coseno y jaccard. Los resultados se pueden ver en [1]

La mayoría de las veces cuando implementamos algoritmos, es fundamental entender cuándo usar qué. Que yo sepa y entiendo, el uso de Cosine aquí es una matanza excesiva porque

  • La longitud del texto que estamos comparando es inferior a 140 caracteres.
  • La noción de usar coseno será general debido a la computación de los vectores.
  • Además, usar el modelo word2vec no será útil porque son más adecuados para textos más grandes.

Con base en los resultados en [1], se observa que en lugar de mirar el coseno. Un modelo de jaccard será suficiente para el problema en cuestión y funciona bastante bien. Si no funciona, puede agregar más

  • Semántica usando búsquedas basadas en diccionario
  • Eliminar palabras de detención
  • Limpiar el texto

Y, mejorar los resultados.

Referencias

[1] manjunath-s / datascience-experiment

[2] ¿Qué es doc2vec?

[3] PNL 05: de Word2vec a Doc2vec: un ejemplo simple con Gensim

Supongo que ya desarrolló un script rápido para extraer los dos tweets (o más si está haciendo un análisis de datos en un gran grupo de datos). Este ejemplo asume que está comparando similitudes entre dos partes de texto. Las imágenes serían un juego de pelota diferente.

Esta es una implementación rápida en Python. Puedes traducirlo rápidamente al idioma que prefieras.

En el siguiente ejemplo, suponga que text1 y text2 son los dos tweets. v1 y v2 son el resultado de llamar a iNeedAVector ().

Esto compara la similitud de la superficie.

importación re, matemáticas
del contador de importación de colecciones
WORD = re.compile (r ‘\ w +’)
def iNeedACosine (v1, v2):
intersección = set (v1.keys ()) y set (v2.keys ())
nume = suma ([v1 [x] * v2 [x] para x en la intersección])
prueba1 = suma ([v1 [x] ** 2 para x en v1.keys ()])
prueba2 = suma ([v2 [x] ** 2 para x en v2.keys ()])
den = math.sqrt (prueba1) * math.sqrt (prueba2)
si no den:
retorno 0.0
más:
flotador de retorno (nume) / den
def iNeedAVector (texto):
palabras = WORD.findall (texto)
Contador de retorno (palabras)

Tomemos un ejemplo, digamos que hay 2 tweets t1 y t2.

T1 tiene palabras w1, w2, w3 y t2 tiene palabras w4, w5, w6. ans s1, s2, s3 … ¿hay puntajes respectivos? La similitud de coseno entre t1 y t2 se puede calcular como la suma de s1 * s4, s2 * s5, s3 * s6 dividido por el producto de la raíz cuadrada de s1, s2, s3 y s4, s5, s6 …

Hay 2 formas:

  1. Si se conoce el vocabulario, componga los vectores tf-idf para cada tweet y calcule la similitud del coseno entre los vectores tf-idf
  2. Si no se conoce el vocabulario, podemos proyectar los tweets en un espacio semántico previamente entrenado (wikipedia-word2vec, googlenews-word2vec, estos modelos están disponibles en Internet). Estas proyecciones son vectores. Ahora, de nuevo, puede calcular la similitud de coseno entre estos vectores Bolsa de palabras y bolsas de palomitas de maíz

Puede calcular la similitud de coseno entre vectores. Entonces, el primer paso será vectorizar sus tweets. Puede usar doc2vec, un algoritmo similar a word2vec, pero que se usa para crear incrustaciones para párrafos o incluso documentos.

También puede intentar usar el modelo Skip Thought. El modelo Skip-Thoughts es un codificador de oraciones. Aprende a codificar oraciones de entrada en una representación vectorial de dimensión fija que es útil para muchas tareas, por ejemplo, para detectar paráfrasis o para clasificar si una revisión del producto es positiva o negativa. El artículo original está aquí.

Puede ver la implementación de tensorflow aquí.

More Interesting

¿Cuáles son las diferencias entre los algoritmos CHAID y CART para el crecimiento de los árboles de decisión?

Si pronostico grupos en un conjunto de trenes completo y los uso como características categóricas y realizo CV, ¿sería una fuga?

¿Cuál es el lugar de las redes neuronales en una arquitectura más amplia de cognición mecánica?

¿Cuáles son las ventajas de la regresión logística?

¿Cómo está bien si me resulta difícil recordar todo después de terminar el curso de aprendizaje automático?

Yoshua Bengio: ¿cuáles son las preguntas abiertas más importantes en el aprendizaje profundo?

¿Existe un modelo más efectivo que Word2vec desde 2013?

Cómo dibujar un múltiple de un autoencoder variacional en Keras

Cómo interpretar el resultado de una red totalmente convolucional

¿Se utiliza el álgebra abstracta y el análisis real en el aprendizaje automático? Si es así, ¿cómo se usan?

¿Quién inventó las redes neuronales de convolución?

¿Qué núcleo (para los métodos de núcleo en el aprendizaje automático) es menos sensible a la alta dimensión: cauchy, gaussiana o laplaciana?

¿Cómo trata Google Translate u otra traducción en línea con palabras que no existen en el otro idioma?

¿Se pueden usar los modelos ocultos de Markov como clasificadores binarios? Si es así, ¿cómo?

¿Cuáles son los roles de probabilidad y estadística en el aprendizaje automático? ¿Qué tan importantes son? ¿Cuáles son sus aplicaciones en el aprendizaje automático?