2012-08-03 10 views
9

Estoy trabajando en un proyecto que requiere que haga coincidir una frase o palabra clave con un conjunto de palabras clave similares. Necesito realizar un análisis semántico para el mismo.Qué herramientas NLP usar para unir frases que tengan un significado o semántica similar

un ejemplo:

Relevante QT
seguro de salud barato
seguro de salud asequible
bajo costo del seguro médico del Plan
la salud por menos
de salud de bajo costo cobertura

significado común

seguro de salud a bajo costo

Aquí la palabra bajo la columna de Significado común debe coincidir con la columna de QT relevante. Miré un montón de herramientas y técnicas para hacer lo mismo. S-Match parecía muy prometedor, pero tengo que trabajar en Python, no en Java. También el análisis semántico latente se ve bien, pero creo que es más para la clasificación de documentos basada en una palabra clave en lugar de la coincidencia de palabras clave. Estoy algo familiarizado con NLTK. ¿Podría alguien dar alguna idea sobre qué dirección debo seguir y qué herramientas debería usar para hacer lo mismo?

+0

¿Cuál es el alcance de su proyecto? Si está tratando con algunas palabras clave o sentidos centrales, puede ser fácil especificar manualmente las clases de equivalencia de palabras (por ejemplo, una lista de palabras de frases que significa "seguro de salud de bajo costo"). – dmh

+0

Tengo que extraer palabras semánticamente similares, como seguro de salud de bajo costo de un grupo de alrededor de 200000 palabras. Estoy pensando que debo aplicar el agrupamiento después de ejecutar un algoritmo inicial en estas palabras para generar una especie de centros (palabras) que coincidirán semánticamente con palabras similares en su grupo. Todo el procedimiento no está supervisado. –

Respuesta

0

Empezaría por echar un vistazo a Wordnet. Le dará sinónimos reales y otras relaciones de palabras para cientos de miles de términos. Desde que etiquetó nltk: proporciona enlaces para Wordnet, y puede usarlo como base para soluciones específicas de dominio.

Todavía en el NLTK, consulte la discusión del método similar() en el introduction para el libro NLTK, y la clase nltk.text.ContextIndex en la que se basa. (Todo es bastante simple, pero podría ser todo lo que realmente necesitas).

3

Si tiene un gran corpus, donde aparecen estas palabras, disponible, puede entrenar un modelo para representar cada palabra como vector. Por ejemplo, puede utilizar el aprendizaje profundo a través de los modelos "skip-gram y CBOW" de word2vec, se implementan en el gensim software package

En el modelo word2vec, cada palabra está representada por un vector, luego puede medir la similitud semántica entre dos palabras midiendo el coseno de los vectores que representan las palabras. palabras similares semánticas deben tener una alta similitud del coseno, por ejemplo:

model.similarity('cheap','inexpensive') = 0.8 

(El valor se compone, sólo para ilustración.)

también, de mis experimentos, resumiendo un número relativamente pequeño de las palabras (es decir, hasta 3 o 4 palabras) conserva la semántica, por ejemplo:.

vector1 = model['cheap']+model['health']+model['insurance'] 
vector2 = model['low']+model['cost']+model['medical']+model['insurance'] 

similarity(vector1,vector2) = 0.7 

(Una vez más, sólo para ilustración)

se puede utilizar esta similitud semántica mida entre palabras como una medida para generar sus grupos.

1

Cuando el análisis semántico latente se refiere a un "documento", básicamente significa cualquier conjunto de palabras que sea más largo que 1. Puede usarlo para calcular la similitud entre un documento y otro, entre una palabra y otra palabra, o entre una palabra y un documento. Entonces, ciertamente podría usarlo para su aplicación elegida.

Otros algoritmos que pueden ser útiles incluyen:

Cuestiones relacionadas