query nodejs node docs javascript node.js elasticsearch word2vec

javascript - nodejs - Extraer las palabras más importantes del índice Elasticsearch, utilizando el cliente Node JS



node js elasticsearch (2)

Inspirado por el siguiente git y video , intento crear una búsqueda conceptual para mi dominio, usando word2vec como filtro de sinónimos para mis consultas.

Dando la siguiente estructura de documento:

{ "_index": "conversations", "_type": "conversation", "_id": "103130", "_score": 0.97602403, "_source": { "context": "Welcome to our service, how can I help? do you offer a free trial", "answer": "Yes we do. Here is a link for our trial account." } }

Me gustaría iterar a través del índice completo y extraer las palabras con "mayor importancia" (tf-idf?).
Una vez que tenga la lista de las 100 mejores palabras, crearé un filtro de sinónimos usando word2vec .

Mi pregunta es: ¿cómo se puede hacer esto utilizando el cliente ES Node JS?


Elastic Search proporciona una agregación de datos muy específica que le permite extraer "palabras clave significativas" para un subconjunto de su índice [1]

Para elaborar lo que es significativo, necesita un primer plano (el subconjunto de documentos que desea analizar) y un fondo (todo el corpus).

Como se dará cuenta, para identificar un término como significativo necesita comparar cómo aparece en su corpus en comparación con otra cosa (por ejemplo, un corpus genérico). Puede encontrar algún archivo que contenga una especie de puntaje IDF general para los términos (Reuter corpus, corpus marrón, efecto wikipedia). Entonces puede: Conjunto de documentos en primer plano -> su corpus Conjunto de documentos en segundo plano -> corpus genérico

[1] https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-significantterms-aggregation.html


Tf-Idf de los documentos se utiliza generalmente para encontrar la similitud de los documentos (utilizando similitud Cosine, distancia euclidiana, etc.)

Tf o frecuencia de término indica la frecuencia de una palabra en el documento. Cuanto mayor sea la frecuencia de la palabra, mayor será la importancia de la palabra.

Idf o la frecuencia inversa del documento indica la cantidad de documentos (de la colección de entrada) que contiene la palabra. Más rara es la palabra, mayor es la importancia de la palabra.

Si solo usamos TF para construir un vector de documentos, somos propensos al correo no deseado porque las palabras comunes (por ejemplo: pronombres, conjunciones, etc.) adquieren más importancia. Por lo tanto, la combinación de td-idf da un mejor significado e indica el significado real de la palabra. O, en otras palabras, para clasificar las palabras de un documento en función de la importancia, no se aconseja calcular solo el tf de cada palabra, en su lugar se usa tf-idf en toda la colección de entrada y el rango en función del valor de tf-idf que muestra el significado real de las palabras clave

Eche un vistazo a la solución de ejemplo de python para calcular el valor de tf-idf para la lista de tweets de json y encontrar los tweets similares.

Muestra Github