Comprender el Análisis Semántico Latente (LSA)

Comprender el Análisis Semántico Latente (LSA)
TL;DR
El Análisis Semántico Latente (LSA) es una técnica de procesamiento del lenguaje natural (NLP) utilizada para descubrir relaciones entre términos y documentos en un corpus de texto. Reduce los datos de texto de alta dimensionalidad a una representación de menor dimensionalidad aplicando la Descomposición en Valores Singulares (SVD) a la matriz término-documento. Este proceso captura la estructura semántica latente de los datos, agrupando palabras y documentos similares según sus significados contextuales. LSA se utiliza comúnmente en tareas como el agrupamiento de documentos, la recuperación de información, y el modelado de temas. Al revelar patrones ocultos en los datos, LSA mejora la comprensión y la organización de grandes conjuntos de datos de texto.
Introducción
¿Alguna vez te has preguntado cómo los motores de búsqueda entienden lo que estás buscando, incluso cuando no usas las palabras exactas? Ahí es donde entra en juego el Análisis Semántico Latente (LSA).
LSA identifica las conexiones subyacentes entre palabras al reconocer patrones y relaciones en el texto. Por ejemplo, cuando buscas “mejores zapatillas para correr,” podrías obtener resultados sobre comparaciones de marcas de calzado, reseñas de calzado e incluso consejos para correr. Todos estos son relevantes para tu búsqueda, aunque las palabras exactas que usaste no estén presentes. LSA lo hace posible al reconocer patrones en el texto y descubrir relaciones entre palabras. Esto ayuda a sistemas como motores de búsqueda, algoritmos de recomendación y chatbots impulsados por IA a comprender el contexto y el significado, no solo las palabras clave.
Ahora, veamos en detalle qué es LSA, cómo funciona, su importancia, beneficios, desafíos y aplicaciones.
¿Qué es LSA?
El Análisis Semántico Latente es un método de Procesamiento del Lenguaje Natural (NLP) que utiliza técnicas matemáticas como la Descomposición en Valores Singulares (SVD) para identificar asociaciones y significados contextuales de palabras dentro de grandes cuerpos de texto.
Los orígenes de LSA se remontan a finales de la década de 1980. Se aplicó por primera vez para descubrir estructuras semánticas ocultas en el texto. En 1988, Scott Deerwester y sus colegas patentaron una técnica para la recuperación de información. Esta técnica se basaba en una estructura semántica latente llamada Indexación Semántica Latente (LSI). Fue innovadora porque permitió a los sistemas recuperar documentos relevantes sin coincidencias exactas de palabras clave en una época en la que la coincidencia de palabras clave era el método principal para la recuperación de información. En su lugar, se basaba en las conexiones semánticas subyacentes entre términos.
Puedes pensar en LSA como un bibliotecario inteligente que nota patrones ocultos en el texto y conecta palabras e ideas de manera significativa.
Figura- Red Semántica de Zapatillas para Correr
Figura: Red Semántica de Zapatillas para Correr
Con LSA, los sistemas pueden:
Encontrar relaciones ocultas entre palabras e ideas
Comprender mejor el texto y mejorar la recuperación de información
Mejorar los resultados de búsqueda conectando términos relacionados
Encontrar significados más profundos en grandes colecciones de texto
LSA es un enfoque de aprendizaje no supervisado que no requiere datos etiquetados para descubrir relaciones y estructuras dentro del texto. Utiliza la descomposición en valores singulares (SVD) para reducir la dimensionalidad de la matriz término-documento, transformándola en un conjunto más pequeño de características latentes. Estas características capturan los patrones más significativos en los datos, destacando las relaciones semánticas subyacentes.
¿Cómo funciona LSA?
LSA implica cuatro pasos. Revisaremos la implementación de cada paso usando la biblioteca de Python scikit-learn.
Preprocesamiento de texto
Creación de la matriz documento-término
Descomposición en valores singulares (SVD)
Datos codificados por temas
Figura- Desglose paso a paso de LSA.png
Figura: Desglose paso a paso de LSA
Preprocesamiento de texto
Preparamos nuestros datos de texto sin procesar como documentos almacenados como cadenas en una lista.
documents = [
"tall green tree sway",
"short green bush stand",
"tall yellow tree glow",
"short yellow flower bloom”
]
Figura- La matriz documento-término.png
Matriz documento-término
Una matriz documento-término representa las frecuencias de los términos que aparecen en la colección de documentos de texto.
Figura: La matriz documento-término
Esta matriz documento-término se puede generar usando el modelo CountVectorizer en scikit-learn.
from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
document_term_matrix = vectorizer.fit_transform(documents)
Este proceso transformó cada documento en un vector.
Figura- Documentos a vectores.png
Figura: Documentos a vectores
Podemos usar document_term_matrix.todense() para ver nuestra matriz documento-término.
document_term_matrix.todense()
Salida:
Figura- La salida
Figura: La salida
La matriz resultante muestra cada fila como un vector. Cada fila corresponde a un documento, y las columnas representan los términos. Los valores indican cuántas veces aparece cada término en cada documento.
Descomposición en valores singulares
SVD es una técnica matemática utilizada para simplificar conjuntos de datos complejos. SVD descompone una matriz A en tres matrices separadas:
_A=UΣVT_
A: __Una matriz documento-término que representa documentos y sus frecuencias de términos.
U: Una matriz documento-tema ortogonal que muestra qué tan fuertemente se relaciona cada documento con cada tema.
Σ: Una matriz diagonal de valores singulares que captura la importancia de los temas.
_VT_: Una matriz término-tema ortogonal que muestra las relaciones entre los términos y los temas.
Figura- SVD en nuestro caso de uso
Figura: SVD en nuestro caso de uso
Reducción de dimensionalidad con SVD truncada
La reducción de dimensionalidad es una capacidad inherente de SVD. La técnica simplifica los conjuntos de datos reduciendo el número de características mientras conserva la información más importante.
SVD se puede lograr usando el modelo TruncatedSVD en scikit-learn. Se llama SVD “truncada” porque reduce el número de características en el conjunto de datos sin una pérdida significativa de información. Esto la convierte en una herramienta eficaz para la reducción de dimensionalidad.
Figura- Reducción de dimensionalidad
Figura: Reducción de dimensionalidad
Crearemos un modelo SVD para ajustar y transformar nuestra matriz documento-término.
from sklearn.decomposition import TruncatedSVD
svd = TruncatedSVD(n_components=2)
lsa = svd.fit(document_term_matrix)
Este proceso prepara nuestro modelo para transformar los datos originales en datos codificados por temas. Establecemos n_components=2 en TruncatedSVD para representar dos temas. Un tema representa palabras que aparecen juntas con frecuencia en los documentos.
En nuestro caso, un tema captura una temática recurrente relacionada con árboles y plantas. Palabras como "alto," "verde," y "árbol" aparecen juntas, lo que muestra patrones subyacentes en los datos. Por lo tanto, SVD comprime los datos y revela su estructura semántica.
Datos Codificados por Tema
Los datos ahora contienen dos columnas. Cada columna representa uno de los dos temas que especificamos en TruncatedSVD. Usamos la biblioteca pandas para ver la salida de nuestro LSA.
import pandas as pd
lsa_transformed = svd.transform(document_term_matrix)
topic_df = pd.DataFrame(lsa_transformed, columns=["Topic 1", "Topic 2"])
topic_df["Original Document"] = documents
print(topic_df[["Original Document", "Topic 1", "Topic 2"]].to_string(index=False))
Salida:
Figura: La salida
La salida muestra los cuatro documentos originales junto con valores numéricos. Los valores representan qué tan fuertemente está asociado cada documento con los dos temas. Observamos que los cuatro documentos son fuertes en el Tema 1. Sin embargo, hay una clara diferencia en el Tema 2, donde:
El primer y el tercer documento son negativos.
El segundo y el cuarto documento son positivos.
Esto sugiere que el primer y el tercer documento se centran en árboles altos, mientras que el segundo y el cuarto tratan sobre arbustos y flores bajos. Esta representación numérica ayuda a distinguir claramente las temáticas en el texto en función de los temas.
Podemos ir un paso más allá comprendiendo qué representa cada tema a través del diccionario y la matriz de codificación.
Un diccionario es una colección de todas las palabras únicas en los documentos.
Una matriz de codificación muestra qué tan fuertemente se relaciona cada palabra con cada tema.
Visualización del Diccionario
El diccionario forma parte del modelo CountVectorizer, accesible mediante el método .get_feature_names_out().
vocabulary = vectorizer.get_feature_names_out()
print("Dictionary:", vocabulary)
**Salida:
Figura: La salida
Estas palabras forman la base para analizar cómo se construyen los temas.
Visualización de la Matriz de Codificación
La matriz de codificación se almacena como components_ en el modelo TruncatedSVD. Proporciona un mapeo de palabras a temas.
encoding_matrix = pd.DataFrame( svd.components_.T, index=vocabulary, columns=["Topic 1", "Topic 2"] ) print(encoding_matrix)
Salida:
Figura: La salida
Cada fila corresponde a una palabra, y cada columna corresponde a un tema. Los valores indican qué tan fuertemente está asociada una palabra con cada tema.
Interpretación de la Matriz de Codificación
Nos centramos en los valores absolutos de la codificación para identificar las palabras más importantes para cada tema.
encoding_matrix["Abs Topic 1"] = encoding_matrix["Topic 1"].abs()
encoding_matrix["Abs Topic 2"] = encoding_matrix["Topic 2"].abs()
topic_1_top_words = encoding_matrix.sort_values("Abs Topic 1", ascending=False)
topic_2_top_words = encoding_matrix.sort_values("Abs Topic 2", ascending=False)
print("Top Words for Topic 1:")
print(topic_1_top_words[["Topic 1"]].head())
print("Top Words for Topic 2:")
print(topic_2_top_words[["Topic 2"]].head())
Salida:
Figure- the output 4.png
Figura: la salida
Observamos que:
Para el Tema 1, palabras como "alto" y "árbol" son importantes.
Para el Tema 2, palabras como "bajo" y "alto" son importantes.
El Tema 2 contrasta con las palabras "bajo," que tiene un valor positivo, y "alto," que tiene un valor negativo. Esto muestra que el Tema 2 es adecuado para distinguir si un documento dado es “bajo” o “alto.” Los fuertes valores positivos y negativos de estas palabras indican su importancia dentro de este tema. Dado que el Tema 2 tiene un valor positivo para la palabra “bajo,” podemos usar este tema para saber qué tan estrechamente se relaciona un documento dado con “bajo.”
Comparación con técnicas similares
LSA a menudo se compara con otras técnicas similares en el análisis de texto. Aquí tienes una comparación para aclarar malentendidos comunes:
LSA vs. LDA
LDA (Latent Dirichlet Allocation) es un modelo probabilístico que genera temas asumiendo una distribución bayesiana jerárquica. Mientras tanto, LSA usa SVD para reducir la dimensionalidad de la matriz término-documento. Esto convierte a LSA en un método determinista porque utiliza transformaciones fijas (SVD), dando el mismo resultado cada vez para la misma entrada.
LDA proporciona probabilidades para las palabras dentro de los temas y los temas dentro de los documentos. Crea temas más coherentes debido a su marco probabilístico. Esto lo hace mejor para conjuntos de datos grandes y ruidosos. Por otro lado, LSA es eficaz para conjuntos de datos más pequeños y para explorar relaciones semánticas.
LSA vs. NMF
NMF (Non-negative Matrix Factorization) comparte similitudes con LSA en su uso de la factorización de matrices. Sin embargo, impone una restricción de no negatividad, asegurando que todos los componentes sean aditivos. Esta restricción hace que los resultados de NMF sean más interpretables que los de LSA, que permite valores negativos en su proceso de factorización.
Por ejemplo, los temas identificados por NMF solo mostrarán asociaciones positivas entre términos como "bueno" y "calidad" en una reseña positiva. Esto hace que NMF sea más fácil de interpretar. Otra distinción radica en la consistencia de los resultados. LSA da la misma salida debido a su uso de SVD. Los resultados de NMF pueden variar según la inicialización y a menudo requieren múltiples ejecuciones para la optimización.
Beneficios y desafíos de LSA
Comprender los beneficios y desafíos de LSA es esencial para aplicarla eficazmente en tareas de procesamiento del lenguaje natural.
Beneficios
Algunos de los beneficios clave de LSA incluyen:
Recuperación de información mejorada: LSA mejora la precisión de los motores de búsqueda al considerar el significado semántico de las palabras. Esto permite obtener resultados de búsqueda más relevantes.
Reducción de dimensionalidad: LSA simplifica datos complejos al reducir el número de dimensiones en la matriz documento-término. Esto hace que los datos sean más manejables e interpretables.
Análisis semántico: LSA captura relaciones semánticas latentes entre términos y documentos. Esto ayuda en tareas como agrupamiento de documentos y modelado de temas.
Desafíos
Algunos de los desafíos asociados con LSA incluyen:
Suposición de relaciones lineales: LSA asume relaciones lineales entre términos y conceptos. Esto puede no alinearse siempre con la verdadera naturaleza del lenguaje. Como resultado, puede conducir a imprecisiones, como interpretaciones erróneas de los significados de las palabras.
Orden de las palabras: LSA no tiene en cuenta el orden de las palabras en un documento, lo cual puede ser crucial para entender el contexto y el significado.
Manejo de sinónimos y polisemia: LSA puede tener dificultades con palabras con múltiples significados (polisemia) o sinónimos. No desambigua explícitamente estos términos.
Aplicaciones, herramientas y proveedores de LSA
LSA tiene una amplia aplicabilidad en NLP y recuperación de información, y cuenta con el apoyo de diversas herramientas y plataformas que mejoran su integración y escalabilidad.
Aplicaciones
LSA se utiliza ampliamente en aplicaciones del mundo real dentro de sistemas de NLP y recuperación de información. Estas incluyen:
Motores de búsqueda: LSA ayuda a mejorar los resultados de búsqueda al identificar estructuras semánticas latentes en documentos y consultas.
Sistemas de recomendación: LSA sugiere elementos relevantes analizando las relaciones semánticas entre usuarios y elementos basándose en datos históricos o preferencias.
Agrupamiento de documentos: LSA reduce la dimensionalidad y descubre relaciones semánticas. Esto le permite agrupar automáticamente documentos similares, ayudando a organizar grandes corpus de texto.
Aplicaciones de chatbots/NLP: LSA mejora los chatbots y otras aplicaciones de NLP al mejorar la comprensión del contexto y la intención.
Herramientas
Varias herramientas admiten la implementación de LSA:
Milvus: Una base de datos vectorial de código abierto para almacenar y consultar embeddings vectoriales convertidos mediante técnicas de LSA para realizar búsquedas de similitud semántica.
scikit-learn: Una biblioteca de Python que proporciona utilidades para generar embeddings LSA mediante técnicas como SVD.
Gensim: Una biblioteca de Python ampliamente utilizada para modelado de temas y análisis de similitud de documentos. Gensim proporciona una implementación eficiente de Indexación Semántica Latente (LSI) a través de su clase gensim.models.LsiModel.
Conexión con Milvus
Milvus permite el almacenamiento y la recuperación eficientes de embeddings. Es ideal para realizar búsquedas de similitud vectorial rápidas y precisas.
Descripción general del flujo de trabajo
El proceso implica:
Generación de embeddings: Usamos DefaultEmbeddingFunction para convertir documentos como "tall green tree sway" en representaciones vectoriales. Estos embeddings son cruciales para realizar búsquedas de similitud semántica.
Almacenamiento en Milvus: Almacenar los embeddings generados junto con los metadatos asociados en Milvus para una gestión eficiente.
Búsqueda de similitud: Se genera un vector de consulta a partir de una frase de búsqueda como "tall green tree sway." Este vector se utiliza para buscar en la colección las coincidencias más similares.
Conexión con Milvus
Milvus permite el almacenamiento y la recuperación eficientes de embeddings. Es ideal para realizar búsquedas de similitud vectorial rápidas y precisas.
Descripción general del flujo de trabajo
El proceso implica:
Generación de embeddings: Aplicamos LSA para transformar documentos como "tall green tree sway" en representaciones vectoriales. Estos vectores encapsulan la estructura semántica del texto.
Almacenamiento en Milvus: Almacenar los vectores transformados junto con los metadatos asociados en una colección de Milvus.
Búsqueda de similitud: Usar un vector de consulta como "tall green tree sway" para recuperar los documentos más similares semánticamente de la colección.
Pasos a seguir
Crear una colección de Milvus: Inicializar una colección especificando la dimensión del vector.
Insertar datos: Agregar los vectores transformados por LSA y sus metadatos a la colección.
Realizar búsqueda de similitud: Consultar la colección usando un vector para encontrar las coincidencias más cercanas.
from pymilvus import MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus",
db_name="default"
)
if client.has_collection(collection_name="coll"):
client.drop_collection(collection_name="coll")
client.create_collection(
collection_name="coll",
dimension=2,
)
vectors = lsa_transformed
data = [
{"id": i, "vector": vectors[i], "document": documents[i]}
for i in range(len(vectors))
]
data
res = client.insert(collection_name="coll", data=data)
query_vectors = [lsa_transformed[0]]
res = client.search(
collection_name="coll",
data=query_vectors,
limit=3,
output_fields=["document"],
)
for item in res[0]:
print(f"ID: {item['id']}")
print(f"Distance: {item['distance']}")
print(f"Entity:")
print(f" Document: {item['entity']['document']}\n")
Resultado:
Hemos recuperado los documentos más relevantes en función de su cercanía semántica.
Preguntas frecuentes
- ¿Cómo gestiona LSA la polisemia y cuáles son sus limitaciones?
LSA trata cada palabra como si tuviera un único significado. Esto genera problemas con las palabras polisémicas, que causan imprecisiones semánticas.
- ¿Cuáles son los desafíos computacionales de LSA en conjuntos de datos grandes?
LSA requiere SVD, que es computacionalmente intensivo y consume mucho tiempo, especialmente con conjuntos de datos grandes. Además, las dimensiones producidas por SVD pueden ser difíciles de interpretar.
- ¿Cuáles son las limitaciones de LSA para capturar el orden de las palabras?
LSA ignora el orden de las palabras, lo que afecta tareas como el análisis de sentimiento, donde la secuencia de palabras (p. ej., "not good" vs. "good not") influye en el significado.
- ¿Cómo maneja LSA los sinónimos y qué desafíos surgen?
LSA identifica relaciones semánticas latentes entre palabras. Sin embargo, puede tener dificultades con diferencias sutiles entre sinónimos, lo que complica tareas como la agrupación de documentos.
- ¿Cómo aborda LSA la dispersión en las matrices término-documento?
LSA crea matrices término-documento dispersas, lo que puede reducir la precisión y la eficiencia. Incluso con SVD, esta dispersión limita su rendimiento en tareas como la clasificación de documentos.
Fuentes relacionadas
Búsqueda de similitud vectorial de artículos científicos de ArXiv con Milvus 2.1
Escalado de búsqueda con Milvus: manejo de conjuntos de datos masivos con facilidad
Las 10 principales técnicas de NLP que todo científico de datos debería conocer
Primeros pasos con la búsqueda híbrida semántica / de texto completo con Milvus 2.5
Novedades de Milvus 2.5: búsqueda de texto completo, optimización avanzada de consultas y más
- TL;DR
- Introducción
- ¿Qué es LSA?
- ¿Cómo funciona LSA?
- Comparación con técnicas similares
- Beneficios y desafíos de LSA
- Aplicaciones, herramientas y proveedores de LSA
- Preguntas frecuentes
- Fuentes relacionadas
Contenido
Comienza Gratis, Escala Fácilmente
Prueba la base de datos vectorial completamente gestionada construida para tus aplicaciones GenAI.
Prueba Zilliz Cloud Gratis

