Possui corpus de mais de um milhão de documentos
Para um determinado documento, deseja encontrar documentos semelhantes usando cosseno como no modelo de espaço vetorial
Todos os tf foram normalizados usando frequência aumentada, para evitar um viés em direção a documentos mais longos, como neste tf-idf :
Pré-calculou tudo
Os valores do denominador são pré-calculados.
Portanto, para um dado d 1, é necessário pontuar mais de 1 milhão d 2
Tenha um limite de 0,6 cosseno para semelhança
Eu posso observar isso por um determinado existe uma gama bastante estreita de | | d 2 | | para cosseno ≥ 0,6
Por exemplo, em uma pesquisa semelhante para um cosseno de ≥ 0,6 e a | | d 1 | | de 7.7631 então | | d 2 | | intervalo de 7,0867 a 8,8339
Onde fora do limiar de cosseno 0,6 | | d 2 | | variam de 0,7223 a 89,3395
Isso ocorreu com a normalização padrão do documento tf.
Ele está olhando MUITO de que não têm chance de ser uma partida de cosseno 0,6
Finalmente a pergunta:
para dar e cosseno de> = 0,6 como pode determinar o intervalo de | | d 2 | | que tem uma chance?
Qual | | d 2 | | posso eliminar com segurança?
Eu também sei o número de termos em e d 2 se houver intervalo de contagem de termos.
Via experimentação
e | | d 2 | | < | | d 1 | | / .8
parece ser seguro, mas espero que haja um alcance comprovadamente seguro
Criamos alguns casos de teste com alguns termos únicos, alguns não tão únicos e outros comuns. Com certeza, você pode pegar o termo mais exclusivo e aumentar essa frequência na comparação. O numerador aumentará (produto escalar) e, portanto, || comparará || e obterá um cosseno muito próximo de 1.
Tipo de relacionado e NÃO a pergunta.
Também estou usando o tf-idf para agrupar documentos em grupos. A base de clientes em que estou vendendo está acostumada a aproximar-se de grupos dup. Lá, estou adotando uma abordagem relacionada, visto como a menor contagem de termos e a avalio em relação à contagem de termos até 3x. Portanto, uma contagem de 10 a 10 é de 10 a 30 (4-9 já teve sua chance de 10). Aqui, posso me dar ao luxo de perder um, caso ele seja capturado em outro. Estou 10% pronto e a maior proporção é de 1,8.
Por favor, identifique as falhas em esta análise
como fora apontado por AN6U5 há uma falha na análise
Não é mais um cosseno se o documento é normalizado em ponderada
E como fora apontado por Mathew também não se pode concluir d1⋅d2≤d1⋅d1
estou ainda esperando por algo para me dar uma dura ligado, mas as pessoas que parecem saber essas coisas estão me dizendo não
eu não quero mudar a pergunta então basta ignorar este
vou fazer algumas análises e talvez postar uma pergunta separada na normalização de documentos
para o objetivo desta pergunta assume que o documento está normalizado em bruto tf
Desculpe, mas não sou bom com o que a marcação é usada para fazer as equações
Então, na minha notação
|| d1 || = sqrt (soma (w1 x w1))
d1 ponto d2 = soma (w1 X w2)
Suponha que d1 seja o documento mais curto
O melhor d1 ponto d2 que pode ser alcançado é d1 ponto d1
Se d1 se casar com 100 paul 20
E d2 for se casar com 100 paul 20 pedro 1
D1
normalizado
é casado 1 paul 1/5
d2 se casa 1 paul 1/5 peter 1/100
claramente se casa e paul tem o mesmo idf nos dois documentos
O melhor ponto d1 possível d2 é d1 ponto d1
A correspondência máxima possível para d1 é d1
cos = d1 ponto d1 / || d1 || || d2 ||
quadrado ambos os lados
cos X cos = (d1 ponto d1) X (d1 ponto d1) / ((d1 ponto d1) X (d2 ponto d2)) cos X cos = (d1 ponto d1) / (d2 ponto d2)
pegue o quadrado raiz de ambos os lados
cos = || d1 || / || d2 ||
é || d2 || não limitado pelo cos?
Se eu apenas usar || d2 || > = cos || d1 || e || d2 || <= || d1 || / cos eu recebo a velocidade computacional necessária
fonte
Respostas:
Infelizmente, a matemática simplifica para mostrar que você não pode justificar rigorosamente restringir a comparação de similaridade de cosseno dos vetores com base em seus comprimentos.
O ponto principal é que a métrica de similaridade do cosseno normaliza com base no comprimento, de modo que apenas os vetores unitários são considerados. Eu sei que essa não é necessariamente a resposta que você queria, mas a matemática mostra claramente que as métricas de similaridade do cosseno são agnósticas ao comprimento do vetor.
Vamos analisar a matemática com mais detalhes:
Você está aplicando uma métrica de similaridade de cosseno e exigindo que essa métrica seja maior que 0,6:
Mas os comprimentos escalares na parte inferior podem ser distribuídos nos produtos cruzados acima (propriedade distributiva):
Para isso:
depende apenas da orientação dos vetores e não de sua magnitude (ou seja, comprimento).
Reconciliando isso com o que você está fazendo:
Talvez você possa reconciliar o que tem feito com as métricas de distância, considerando também a distância euclidiana. Onde como a similaridade do cosseno retorna apenas um valor entre -1 e 1 com base no ângulo entre os dois vetores, as distâncias euclidianas retornarão valores que dependem dos comprimentos dos dois vetores. Em certo sentido, você está combinando aspectos da distância euclidiana com semelhança de cosseno.
Faz bastante sentido exigir que os comprimentos relativos estejam dentro de 25% um do outro, no sentido de que isso combina um aspecto da distância euclidiana para criar copas agrupadas, o que reduz o tempo de computação e, em seguida, a similaridade agnóstica do cosseno pode ser usada como o determinante final.
Observe que 1 / .8 = 1,25; portanto, d2> =. 8d1 é uma restrição mais rígida que d2 <= d1 / .8. Sugiro usar d2> =. 75d1 e d2 <= 1.25d1, pois isso é simétrico.
Espero que isto ajude!
fonte
Para trabalhar com uma álgebra, deixe-me introduzir mais alguns termos (e renomear alguns para outros mais curtos):
fonte
Eu posto uma resposta, mas claramente concederei o bônus a outra pessoa
Eu acho que existe um numerador máximo se o documento tf for normalizado
d1⋅d2 / (|| d1 |||| d2 ||)
Suponha que d1 tenha os mesmos termos ou menos (ou apenas faça d com menos termos)
O máximo possível de tf normalizado é 1
Portanto, a soma máxima possível do numerador (tf1, i * idf, i * 1 * idf, i)
|| d2 || = soma (tf1, i * idf, i * 1 * idf, i) / || d1 || / .6
No mínimo, estou trabalhando nisso, mas claramente há um mínimo.
Se você vai combinar, você terá || d ||
fonte