Calculadora de similaridade cosseno TF-IDF — pontue dois textos de 0 a 1
Cole dois textos e obtenha a similaridade cosseno dos seus vetores TF-IDF suavizados (N=2) numa escala de 0 a 1. O vocabulário total, o número de termos comuns e a norma de cada vetor ficam num único painel, com chaves para ignorar maiúsculas e para o TF sublinear. Até 20 000 caracteres por documento.
💡 Sobre esta ferramenta
Ao implementar o ranking de um buscador ou ao verificar a sobreposição entre dois artigos, costuma valer a pena conferir manualmente se dois trechos realmente se parecem pela forma como suas palavras se cruzam. Antes de recorrer a um modelo de embeddings, muitas vezes você quer primeiro a similaridade lexical simples — é isso que esta calculadora oferece.
O TF-IDF pondera cada termo multiplicando sua frequência no documento (TF) pela sua raridade entre documentos (IDF). Palavras frequentes e distintivas pesam mais, enquanto as que aparecem em ambos os documentos são descontadas. A ferramenta trata suas duas entradas como dois documentos, constrói o vocabulário comum, forma os vetores TF-IDF e devolve a similaridade cosseno com quatro casas decimais.
Com apenas dois documentos, o IDF bruto de uma palavra compartilhada se anula, então a ferramenta usa a mesma fórmula suavizada do scikit-learn: IDF = ln((N+1)/(df+1)) + 1. Isso atribui peso 1,0 aos termos comuns e cerca de 1,405 aos que aparecem em apenas um documento. O vocabulário total, a contagem de termos comuns e as normas aparecem ao lado para você acompanhar como o número foi formado.
🧐 Perguntas frequentes
Como leio o valor cosseno? Quanto mais perto de 1, mais alinhados estão os vetores e mais parecidos são os textos (ângulo 0°); 0 significa que não há termos comuns e eles são ortogonais (ângulo 90°). Em torno de 0,5 indica sobreposição parcial de vocabulário.
Por que há uma suavização de +1 no IDF? Com apenas dois documentos, uma palavra presente em ambos teria IDF bruto zero e perderia todo o seu peso. A suavização padrão do scikit-learn (+1 no numerador e no denominador, +1 no final) mantém peso 1,0 nos termos comuns para que o cálculo não quebre.
O que muda ao ativar o TF sublinear? Em vez da contagem bruta, a frequência passa a ser 1 + ln(tf), o que atenua o efeito de uma palavra repetida muitas vezes. Importa em textos longos onde um termo se repete bastante; corresponde à opção padrão do scikit-learn.
Como o CJK e outras escritas são segmentados? Os caracteres CJK (chinês, kana japonês, coreano) são tratados como um token por caractere. Sequências de letras, dígitos, apóstrofo, hífen e sublinhado formam uma única palavra. Não há análise morfológica, então use como medida lexical de proximidade, do tipo saco de palavras.
O que a normalização de maiúsculas afeta? Quando ativa, as letras ASCII viram minúsculas, de modo que "Cosine" e "cosine" contam como o mesmo termo. O CJK não é afetado. Desative quando precisar distinguir nomes próprios com maiúscula.
📚 Notas sobre TF-IDF e cosseno
Desde que foi proposto nos anos 1970, o TF-IDF segue sendo um alicerce da pontuação em busca de texto completo. A pontuação padrão do Elasticsearch e do Lucene é o BM25, uma evolução do TF-IDF, mas a ideia de fundo — frequência vezes raridade — é a mesma. Examinar manualmente um cosseno TF-IDF simples ajuda a entender por que um ranking de busca sai em certa ordem.
A similaridade cosseno ignora o comprimento do vetor e olha só a direção porque o objetivo é comparar a "direção" do vocabulário sem ser distorcido pelo comprimento de cada texto. Um documento longo e um curto ainda podem pontuar alto se a composição de suas palavras for similar. A ferramenta também mostra a norma A e a norma B, então você vê ao mesmo tempo a magnitude do vetor TF-IDF de cada documento: o acúmulo de seus termos e pesos.