¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Cómo medir la similitud entre dos textos

Después de esta lección: Puedo medir cuánto se parecen dos textos con la similitud del coseno.

Lección de 55 min1 comandoLaboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

Cuándo dos textos se parecen

La similitud del coseno mide cuánto se parecen dos textos comparando los recuentos de sus palabras. Un buscador la usa para ordenar los resultados, y una biblioteca para encontrar apuntes parecidos al que tienes delante.

Dos frases pueden usar casi las mismas palabras y decir cosas distintas, o usar otras y decir lo mismo. La medida no entiende el significado, pero sí da un número que se puede comparar.

Al final de esta lección

Nota

Puedo medir cuánto se parecen dos textos con la similitud del coseno.

Palabras clave

PalabraQué significa
Vectoruna fila de números, uno por cada palabra del vocabulario
Producto escalarla suma de multiplicar dos vectores posición a posición
Longitudla raíz de la suma de los cuadrados de un vector
Similitud del cosenoel producto escalar entre las dos longitudes
Vocabulario comúnlas palabras que se usan para armar los dos vectores

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un texto se convierte en un vector

Para comparar textos con números, primero se elige un vocabulario común. Después se cuenta cuántas veces sale cada palabra del vocabulario en cada texto.

La fila de recuentos es un vector. Con cinco palabras en el vocabulario, cada texto es una fila de cinco números. Dos textos con el mismo vocabulario tienen vectores del mismo tamaño y se pueden comparar posición a posición.

Convierte una frase en un vector

Código: python
# Un texto se convierte en una fila de recuentos.
vocab = ["tren", "bus", "llega", "tarde", "puntual"]
tokens = "el tren llega tarde".split()
vector = []
for word in vocab:
    vector.append(tokens.count(word))
print(vector)
# Cambia el texto por "el bus llega tarde" y compara las dos filas.

Ejemplo resuelto: dos avisos de transporte

Textotrenbusllegatardepuntual
el tren llega tarde10110
el bus llega tarde01110
tren puntual puntual10002

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

El producto escalar suma lo común

El producto escalar multiplica los dos vectores posición a posición y suma los resultados. Una palabra que está en los dos textos suma. Una que solo está en uno multiplica por cero y no suma nada.

Para los dos avisos de arriba: 1 por 0, más 0 por 1, más 1 por 1, más 1 por 1, más 0 por 0. Eso da 2, las dos palabras que comparten: «llega» y «tarde».

Calcula un producto escalar

Código: python
# El producto escalar: multiplica posición a posición y suma.
a = [1, 0, 1, 1, 0]
b = [0, 1, 1, 1, 0]
total = 0
for n in range(len(a)):
    total = total + a[n] * b[n]
print("producto escalar:", total)
# Cambia b por [1, 0, 1, 1, 0] y mira qué pasa.

El coseno corrige el efecto del tamaño

El producto escalar crece si el texto es más largo. Para evitarlo, se divide entre las longitudes de los dos vectores. La longitud es la raíz de la suma de los cuadrados.

El resultado es la similitud del coseno. Va de 0, que significa que no comparten ninguna palabra, a 1, que significa que tienen las mismas proporciones.

Calcula el coseno de dos vectores

Comando
docker exec jupyter python3 -c "print(round((1*2+2*1)/(5**0.5*5**0.5),2))"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error muy común

Advertencia

Mucha gente cree que un coseno alto significa que los dos textos dicen lo mismo. Solo significa que usan las mismas palabras en proporciones parecidas. «El examen es fácil» y «El examen no es fácil» tienen un coseno alto y dicen lo contrario.

Para ir más lejos: el aviso más parecido

Escribe cuatro avisos cortos de una facultad y una pregunta de un estudiante. Convierte los cinco textos en vectores con el mismo vocabulario.

Calcula el coseno de la pregunta con cada aviso. ¿Cuál sale más parecido? Cambia una palabra de la pregunta y vuelve a mirar.

Sobre este laboratorio y su código: Laboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.