2010-10-27 14 views
5

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.

Respuesta

5

No estoy seguro de por qué está ordenando los trigramas para cada oración. Todo lo que necesita tener en cuenta al calcular la similitud del coseno es si el mismo trigrama se produjo en las dos oraciones y con qué frecuencias. Conceptualmente hablando, usted define un orden fijo y común entre todos los trigramas posibles. Recuerde que el orden debe ser el mismo para todas las oraciones. Si el número de trigramas posibles es N, entonces para cada oración obtienes un vector de dimensionalidad N. Si un determinado trigrama no ocurre, estableces el valor correspondiente en el vector a cero. Realmente no necesita almacenar los ceros, pero tiene que encargarse de ellos cuando defina el producto escalar.

Habiendo dicho eso, los trigramas no son una buena opción ya que las posibilidades de un partido son mucho más escasas. Para k alto tendrá mejores resultados de bolsas de k palabras consecutivas, en lugar de k-gramos. Tenga en cuenta que el orden no importa dentro de una bolsa, es un conjunto. Estás usando k = 3 k-grams, pero parece estar en el lado alto, especialmente para las oraciones.Deje caer a bi-gramos o use bolsas de diferentes longitudes, comenzando desde 1. Preferiblemente use ambas.

Estoy seguro de que has notado que las oraciones que no usan el trigrama exacto tienen 0 similitudes en tu método. K-bag de palabras aliviará la situación un poco, pero no la resolverá por completo. Porque ahora necesitas oraciones para compartir palabras reales. Dos oraciones pueden ser similares sin usar las mismas palabras. Hay un par de formas de arreglar esto. Utilice LSI (indexación semántica latente) o agrupe las palabras y use las etiquetas del grupo para definir su similitud de coseno.

Para calcular la similitud del coseno entre los vectores xey, calcule el producto escalar y divida por las normas de x y y. La norma 2 del vector x se puede calcular como la raíz cuadrada de la suma de las componentes al cuadrado. Sin embargo, también debe probar su algoritmo sin ninguna normalización para comparar. Por lo general, funciona bien, porque ya se está ocupando de los tamaños relativos de las oraciones cuando calcula el término frecuencias (tf).

Espero que esto ayude.

+0

@Ahmet Si hay algo que quieras que aclare, házmelo saber. – srean

+0

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. –

+0

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

Cuestiones relacionadas