He estado trabajando en un proyecto sobre la similitud de las oraciones. Sé que se me ha preguntado muchas veces en SO, pero solo quiero saber si mi problema puede lograrse con el método que uso por la forma en que lo estoy haciendo, o debería cambiar mi enfoque del problema. A grandes rasgos, se supone que el sistema divide todas las oraciones de un artículo y encuentra oraciones similares entre otros artículos que se alimentan al sistema.similitud de la oración n-gram con la similitud del coseno medida
Estoy usando la similitud del coseno con los pesos tf-idf y así es como lo hice.
1- Primero, dividí todos los artículos en oraciones, luego genero trigramas para cada oración y los clasifico (¿debería?).
2- Calculo los pesos de tf-idf de trigramas y creo vectores para todas las oraciones.
3- Calculo el producto punto y la magnitud de la oración original y de la oración que se va a comparar. Luego calcule la similitud del coseno.
Sin embargo, el sistema no funciona como esperaba. Aquí, tengo algunas preguntas en mi mente.
Por lo que he leído sobre los pesos tf-idf, creo que son más útiles para encontrar "documentos" similares. Como estoy trabajando en oraciones, modifiqué un poco el algoritmo al cambiar algunas variables de la fórmula de las definiciones de tf e idf (en lugar de documento, traté de encontrar una definición basada en oraciones).
tf = número de ocurrencias de trigrama en pena/número de todos los trigramas en sentencia
IDF = número de todas las frases en todos los artículos/número de oraciones donde trigrama aparece
¿Cree que está bien usar tal definición para este problema?
Otra es que vi que la normalización se menciona muchas veces cuando se calcula la similitud del coseno. Supongo que esto es importante porque los vectores de trigramas pueden no ser del mismo tamaño (que raramente son en mi caso). Si un vector trigrama tiene el tamaño de xy el otro es x + 1, entonces trato el primer vector como si fuera el tamaño de x + 1 con el último valor siendo 0. ¿Esto es lo que significa normalización? Si no, ¿cómo hago la normalización?
Además de esto, si he elegido el algoritmo incorrecto, ¿qué más se puede usar para dicho problema (preferiblemente con el enfoque n-gram)?
Gracias de antemano.
@Ahmet Si hay algo que quieras que aclare, házmelo saber. – srean
Gracias por su respuesta. Primero, la razón por la que ordeno el vector es porque obtengo mejores resultados. Intenté con lo que sugieres, pero no hay suerte. Pero me acabo de dar cuenta de que las palabras similares son generalmente las que tienen una longitud similar. Esta similitud del coseno me parece un poco aleatoria ya que no estamos verificando la conexión entre los n-grams, sino que estamos verificando la frecuencia de n-gramas sin considerar cuáles son. Tal vez aún, me falta algo. –
Por supuesto, la similitud del coseno parecerá aleatoria si no se tiene en cuenta que coincidan o no, porque lo que se está computando en ese caso no tiene nada que ver con la similitud del coseno. Lo estás haciendo mal y en este caso, será aleatorio por definición. Inténtalo de nuevo y sigue de cerca las instrucciones, funcionará. – srean