Tener un corpus de más de un millón de documentos.
Para un documento dado, desea encontrar documentos similares usando coseno como en el modelo de espacio vectorial
Todos los tf se han normalizado usando frecuencia aumentada, para evitar un sesgo hacia documentos más largos como en este tf-idf :
Han precalculado todos
Haga que los valores para el denominador se calculen previamente.
Por lo tanto, para un determinado debe obtener una puntuación superior a 1 millón de
Tener un umbral de 0,6 coseno para similitud d 1 d 2
Puedo observar eso para un determinadohay un rango bastante estrecho depara coseno 0.6
Por ejemplo, en una búsqueda de similar para un coseno de 0.6 y ade 7.7631 luegorango de 7.0867 a 8.8339
Donde fuera del umbral del coseno 0.6rango de 0.7223 a 89.3395
Esto fue con normalización de documentos tf estándar.
Está mirando MUCHOque no tienen la posibilidad de ser un coseno 0.6 partido El | El | d 2 | El | ≥ ≥ | El | d 1 | El | El | El | d 2 | El | El | El | d 2 | El | El | El | d 2 | El |
Finalmente la pregunta:
para dary coseno de> = 0.6 ¿cómo puede determinar el rango deque tiene una oportunidad?
Quepuedo eliminar de forma segura? El | El | d 2 | El | El | El | d 2 | El |
También sé el número de términos en y si hay un rango de conteo de términos.d 2
A través de la experimentacióny
parece ser seguro, pero es de esperar que haya un rango que sea seguro
El | El | d 2 | El | < | El | d 1 | El | / .8
Creé algunos casos de prueba con algunos términos únicos, algunos no tan únicos y otros comunes. Efectivamente, puede tomar el término más exclusivo y aumentar esa frecuencia en la comparación. El numerador (producto de puntos) subirá y también lo hará || comparar || y obtendrá un coseno muy cerca de 1.
Tipo de relacionado y NO la pregunta.
También estoy usando el tf-idf para agrupar documentos en grupos. La base de clientes a la que estoy vendiendo está acostumbrada a cerca de grupos dup. Ahí estoy tomando un enfoque relacionado en el que considero el recuento de términos más pequeño y lo evalúo contra el recuento de términos hasta 3 veces. Por lo tanto, un conteo a término de 10 mira de 10 a 30 (4-9 ya tenían su oportunidad en 10). Aquí puedo darme el lujo de perder uno y recogerlo en otro. He terminado el 10% y la proporción más grande es 1.8.
Identifique las fallas en este análisis.
Como lo señaló AN6U5, hay una falla en este análisis.
Ya no es un coseno si el documento está normalizado en ponderado
Y como señaló Mathew tampoco puede concluir d1⋅d2≤d1⋅d1
Estoy todavía con la esperanza de algo que me diera una tapa dura, pero la gente que parece saber estas cosas no me están diciendo
que no quieren cambiar la pregunta por lo que sólo ignorar este
voy a hacer algunos análisis y tal vez enviar una pregunta separada sobre el documento de normalización
para el propósito de esta pregunta asume que el documento está normalizado en bruto tf
Lo siento, pero no soy bueno con el marcado que se usa para hacer las ecuaciones.
Así que en mi notación
|| d1 || = sqrt (suma (w1 x w1))
d1 punto d2 = suma (w1 X w2)
Suponga que d1 es el documento más corto
El mejor d1 punto d2 que se puede lograr es d1 punto d1
Si d1 se casa con 100 paul 20
Y d2 se casa con 100 paul 20 peter 1
Normalizado
d1 se casa 1 paul 1/5
d2 se casa 1 paul 1/5 peter 1/100
Claramente casarse y paul tienen el mismo idf en ambos documentos
El mejor punto d1 posible d2 es d1 punto d1
La coincidencia máxima posible con d1 es d1
cos = d1 punto d1 / || d1 || || d2 ||
cuadrado ambos lados
cos X cos = (d1 punto d1) X (d1 punto d1) / ((d1 punto d1) X (d2 punto d2)) cos X cos = (d1 punto d1) / (d2 punto d2)
toma el cuadrado raíz de ambos lados
cos = || d1 || / || d2 ||
es || d2 || no limitado por el cos?
Si solo uso || d2 || > = cos || d1 || y || d2 || <= || d1 || / cos obtengo la velocidad computacional que necesito
fuente
Respuestas:
Desafortunadamente, las matemáticas se simplifican para mostrar que no se puede justificar rigurosamente restringir la comparación de similitud de coseno de los vectores en función de su longitud.
El punto clave es que la métrica de similitud de coseno se normaliza en función de la longitud, de modo que solo se consideran los vectores unitarios. Sé que esta no es necesariamente la respuesta que quería, pero las matemáticas muestran claramente que las métricas de similitud de coseno son independientes de la longitud del vector.
Veamos las matemáticas con más detalle:
Está aplicando una métrica de similitud de coseno y requiere que esa métrica sea mayor que 0.6:
Pero las longitudes escalares en la parte inferior se pueden distribuir en los productos cruzados anteriores (propiedad distributiva):
Por lo tanto:
depende solo de la orientación de los vectores y no de su magnitud (es decir, longitud).
Conciliar esto con lo que estás haciendo:
Quizás pueda conciliar lo que ha estado haciendo con las métricas de distancia al considerar también la distancia euclidiana. Mientras que la similitud del coseno solo devuelve un valor entre -1 y 1 basado en el ángulo entre los dos vectores, las distancias euclidianas devolverán valores que dependen de las longitudes de los dos vectores. En cierto sentido, estás combinando aspectos de la distancia euclidiana con similitud de coseno.
Tiene bastante sentido exigir que las longitudes relativas estén dentro del 25% una de la otra en el sentido de que esto combina un aspecto de la distancia euclidiana para crear coberturas grupales, lo que reduce el tiempo de cálculo, luego se puede usar la similitud de coseno agnóstico de la longitud como El determinante final.
Tenga en cuenta que 1 / .8 = 1.25, entonces d2> =. 8d1 es una restricción más estricta que d2 <= d1 / .8. Sugiero usar d2> =. 75d1 y d2 <= 1.25d1 ya que esto es simétrico.
¡Espero que esto ayude!
fuente
Para trabajar con un poco de álgebra, permítanme presentarles algunos términos más (y renombrar algunos por otros más cortos):
fuente
Publico una respuesta pero claramente otorgaré el bono a otra persona
Creo que hay un numerador máximo si el documento tf está normalizado
d1⋅d2 / (|| d1 |||| d2 ||)
Suponga que d1 tiene los mismos o menos términos (o simplemente tome la d con menos términos)
El máximo posible tf normalizado es 1
Entonces, la suma máxima posible del numerador (tf1, i * idf, i * 1 * idf, i)
|| d2 || = suma (tf1, i * idf, i * 1 * idf, i) / || d1 || / .6
En cuanto a un mínimo, estoy trabajando en eso, pero claramente hay un mínimo.
Si vas a igualar vas a tener || d ||
fuente