En el contexto del procesamiento del lenguaje natural (NLP), el modelado de temas es un problema de aprendizaje no supervisado cuyo objetivo es encontrar temas abstractos en una colección de documentos.
El modelado de temas responde a la pregunta: "Dado un corpus de texto de muchos documentos, ¿podemos encontrar los temas abstractos de los que habla el texto?"
En este tutorial, usted:
- Aprenda sobre dos poderosas técnicas de factorización de matrices: Descomposición de valores singulares (SVD) y Factorización de matrices no negativas (NMF)
- Úselos para encontrar temas en una colección de documentos
Al final de este tutorial, podrá crear sus propios modelos de temas para encontrar temas en cualquier parte del texto.📚📑
Empecemos.
Tabla de contenido
- ¿Qué es el modelado de temas?
- Ecuación de puntuación TF-IDF
- Modelado de temas mediante la descomposición de valores singulares (SVD)
- ¿Qué es SVD Truncado o k-SVD?
- Modelado de temas usando factorización de matriz no negativa (NMF)
- 7 pasos para usar SVD para el modelado de temas
- Cómo visualizar temas como nubes de palabras
- Cómo utilizar NMF para el modelado de temas
- SVD vs NMF: una descripción general de las diferencias
- Referencias y lecturas adicionales sobre el modelado de temas
¿Qué es el modelado de temas?
Comencemos por comprender qué es el modelado de temas.
Suponga que recibe un gran corpus de texto que contiene varios documentos. Le gustaría conocer los temas clave que residen en la colección de documentos dada sin leer cada documento.
El modelado de temas lo ayuda a destilar la información en el corpus de texto grande en una cierta cantidad de temas. Los temas son grupos de palabras que son similares en contexto y son indicativos de la información en la colección de documentos.
A continuación se muestra la estructura general de la Matriz Documento-Término para un corpus de texto que contiene M documentos y N términos en total:
Analicemos la representación matricial:
- D1, D2, ..., DM son los documentos M.
- T1, T2, ..., TN son los N términos
Para completar la matriz de documentos y términos, usemos la métrica ampliamente utilizada: la puntuación TF-IDF.
Ecuación de puntuación TF-IDF
La puntuación TF-IDF viene dada por la siguiente ecuación:
Ecuación creada usando latex2png
dónde,
TF_ij
Tj
Di
dfj
Tj
Un término que aparece con frecuencia en un documento en particular, y rara vez en todo el corpus, tiene una puntuación IDF más alta.
Espero que ahora haya adquirido una comprensión superficial del DTM y el puntaje TF-IDF. Si desea obtener una comprensión más profunda, considere leer mi tutorial Matriz de documentos y términos en PNL: explicación de las puntuaciones de recuento y TF-IDF .
▶️ Lea la historia aquí ▶️
Ahora repasemos las técnicas de factorización de matrices.
Modelado de temas mediante la descomposición de valores singulares (SVD)
El uso de la descomposición de valores singulares (SVD) para el modelado de temas se explica en la siguiente figura:
La Descomposición de Valor Singular en la Matriz Documento-Término D da las siguientes tres matrices:
- La matriz vectorial singular izquierda U . Esta matriz se obtiene mediante la descomposición propia de la matriz de Gram D.D_T —también llamada matriz de similitud de documentos. La i, j-ésima entrada de la matriz de similitud de documentos indica cuán similar es el documento i al documento j.
- La matriz de valores singulares S que significan la importancia relativa de los temas.
- La matriz vectorial singular derecha V_T , que también se denomina el término matriz de tema. Los temas en el texto residen a lo largo de las filas de esta matriz.
Si desea actualizar el concepto de descomposición propia, aquí hay un excelente tutorial de Grant Sanderson de 3Blue1Brown . Explica visualmente los vectores propios y los valores propios.
Está totalmente bien si encuentra el funcionamiento de SVD un poco difícil de entender. 🙂
Por ahora, puede pensar en SVD como una caja negra que opera en su Matriz de término de documento (DTM) y produce 3 matrices, U, S y V_T . Y los temas residen a lo largo de las filas de la matriz V_T . Esto se ilustra en la siguiente figura.
Nota : SVD también se denomina indexación semántica latente (LSI).
¿Qué es SVD Truncado o k-SVD?
Suponga que tiene un corpus de texto de 150 documentos. ¿Preferiría hojear 150 temas diferentes que describen el corpus, o preferiría leer 10 temas que pueden transmitir el contenido del corpus?
Bueno, a menudo es útil corregir una pequeña cantidad de temas que transmitan mejor el contenido del texto. Y esto es lo que motiva k-SVD .
Como la multiplicación de matrices requiere muchos cálculos, se prefiere elegir los k valores singulares más grandes y los temas correspondientes a ellos. El funcionamiento de k-SVD se ilustra a continuación.
Modelado de temas usando factorización de matriz no negativa (NMF)
La factorización matricial no negativa (NMF) funciona como se muestra a continuación:
La Factorización de Matriz no negativa actúa sobre la Matriz de Término-Documento y produce lo siguiente:
- La matriz W , que se denomina matriz documento-tema . Esta matriz muestra la distribución de los temas en los documentos del corpus.
- La matriz H , que también se denomina matriz término-tópico . Esta matriz captura la importancia de los términos en los temas.
NMF es más fácil de interpretar ya que todos los elementos de las matrices W y H ahora son no negativos. Por lo que una mayor puntuación corresponde a una mayor relevancia.
Pero, ¿cómo obtenemos las matrices W y H?
NMF es una técnica de factorización de matriz no exacta . Esto significa que no puede multiplicar W y H para recuperar la matriz de término de documento original V.
Las matrices W y H se inicializan aleatoriamente. Y el algoritmo se ejecuta iterativamente hasta que encontramos W y H que minimizan la función de costo.
La función de costo es la norma de Frobenius de la matriz V - WH , como se muestra a continuación:
Ecuación creada usando latex2png
La norma de Frobenius de una matriz A con m filas y n columnas viene dada por la siguiente ecuación:
Ecuación creada usando latex2png
7 pasos para usar SVD para el modelado de temas
1️⃣ Para usar SVD para obtener temas, primero obtengamos un corpus de texto.
La siguiente celda de código contiene un fragmento de texto sobre programación informática .
text=[ "Computer programming is the process of designing and building an executable computer program to accomplish a specific computing result or to perform a specific task." , "Programming involves tasks such as: analysis, generating algorithms, profiling algorithms' accuracy and resource consumption, and the implementation of algorithms in a chosen programming language (commonly referred to as coding)." , "The source program is written in one or more languages that are intelligible to programmers, rather than machine code, which is directly executed by the central processing unit." , "The purpose of programming is to find a sequence of instructions that will automate the performance of a task (which can be as complex as an operating system) on a computer, often for solving a given problem." , "Proficient programming thus often requires expertise in several different subjects, including knowledge of the application domain, specialized algorithms, and formal logic." , "Tasks accompanying and related to programming include: testing, debugging, source code maintenance, implementation of build systems, and management of derived artifacts, such as the machine code of computer programs." , "These might be considered part of the programming process, but often the term software development is used for this larger process with the term programming, implementation, or coding reserved for the actual writing of code." , "Software engineering combines engineering techniques with software development practices." , "Reverse engineering is a related process used by designers, analysts and programmers to understand and re-create/re-implement" ]
El texto para el que tienes que buscar temas ya está listo.
2️⃣ El siguiente paso es importar el
TfidfVectorizer
clase del módulo de extracción de características de scikit-learn para datos de texto: from sklearn.feature_extraction.text import TfidfVectorizer
Usarás el
TfidfVectorizer
class para obtener el DTM poblado con las puntuaciones TF-IDF para el corpus de texto.3️⃣ Para usar SVD truncado (k-SVD) discutido anteriormente, debe importar el
TruncatedSVD
clase de scikit-learn's decomposition
módulo: from sklearn.decomposition import TruncatedSVD
▶ Ahora que ha importado todos los módulos necesarios, es hora de comenzar su búsqueda de temas en el texto.
4️⃣ En este paso, creará una instancia
Tfidfvectorizer
objeto. Llamémoslo vectorizador. vectorizer = TfidfVectorizer(stop_words= 'english' ,smooth_idf= True ) # under the hood - lowercasing,removing special chars,removing stop words
input_matrix = vectorizer.fit_transform(text).todense()
Hasta ahora, has:
☑ recopiló el texto,
☑ importó los módulos necesarios, y
☑ obtenido el DTM de entrada.
Ahora procederá a usar SVD para obtener temas.
5️⃣ Ahora usarás el
TruncatedSVD
clase que importó en el paso 3️⃣. svd_modeling= TruncatedSVD(n_components= 4 , algorithm= 'randomized' , n_iter= 100 , random_state= 122 ) svd_modeling.fit(input_matrix) components=svd_modeling.components_ vocab = vectorizer.get_feature_names()
6️⃣ Escribamos una función que obtenga los temas por nosotros.
topic_word_list = [] def get_topics ( components ):
for i, comp in enumerate (components): terms_comp = zip (vocab,comp) sorted_terms = sorted (terms_comp, key= lambda x:x[ 1 ], reverse= True )[: 7 ] topic= " "
for t in sorted_terms: topic= topic + ' ' + t[ 0 ] topic_word_list.append(topic) print (topic_word_list) return topic_word_list get_topics(components)
7️⃣ Y es hora de ver los temas y ver si tienen sentido. Cuando llamas al
get_topics()
función con los componentes obtenidos de SVD como argumento, obtendrá una lista de temas y las palabras principales en cada uno de esos temas. Topic 1 : code programming process software term computer engineering Topic 2 : engineering software development combines practices techniques used Topic 3 : code machine source central directly executed intelligible Topic 4 : computer specific task automate complex given instructions
Y tienes tus temas en solo 7 pasos. ¿Se ven bien los temas?
Cómo visualizar temas como nubes de palabras
En la sección anterior, imprimió los temas y les dio sentido usando las palabras principales de cada tema.
Otro método popular de visualización de temas es la nube de palabras .
En una nube de palabras, los términos de un tema en particular se muestran en términos de su significado relativo . La palabra más importante tiene el tamaño de fuente más grande, y así sucesivamente.
!pip install wordcloud from wordcloud import WordCloud import matplotlib.pyplot as plt for i in range ( 4 ): wc = WordCloud(width= 1000 , height= 600 , margin= 3 , prefer_horizontal= 0.7 ,scale= 1 ,background_color= 'black' , relative_scaling= 0 ).generate(topic_word_list[i]) plt.imshow(wc) plt.title( f"Topic {i+ 1 } " ) plt.axis( "off" ) plt.show()
Las nubes de palabras para los temas 1 a 4 se muestran en la siguiente cuadrícula de imágenes:
Nubes de temas de SVD
Como puede ver, el tamaño de fuente de las palabras indica su importancia relativa en un tema. Estas nubes de palabras también se denominan nubes de temas.
Cómo utilizar NMF para el modelado de temas
En esta sección, seguirá los mismos pasos que en SVD.
Primero debe importar el
NMF
clase de scikit-learn's decomposition
módulo. from sklearn.decomposition import NMF NMF_model = NMF(n_components= 4 , random_state= 1 ) W = NMF_model.fit_transform(input_matrix) H = NMF_model.components_
Y luego puedes llamar al
get_topics()
función en la matriz H para obtener los temas. Topic 1 : code machine source central directly executed intelligible Topic 2 : engineering software process development used term combines Topic 3 : algorithms programming application different domain expertise formal Topic 4 : computer specific task programming automate complex given
Nubes temáticas de NMF
Para el fragmento de texto dado, puede ver que tanto SVD como NMF brindan nubes de temas similares.
SVD vs NMF: una descripción general de las diferencias
Ahora, reunamos las diferencias entre estas dos técnicas de factorización de matrices para el modelado de temas.
- SVD es una técnica de factorización de matriz exacta: puede reconstruir el DTM de entrada a partir de las matrices resultantes.
- Si elige usar k-SVD, es la mejor aproximación de rango k posible al DTM de entrada.
- Aunque NMF es una aproximación no exacta al DTM de entrada, se sabe que captura temas más diversos que SVD.
Terminando el tutorial de modelado de temas
Espero que disfrutes este tutorial. Como siguiente paso, puede activar su propio cuaderno de Colab utilizando las celdas de código de este tutorial.
¡Solo tiene que ingresar el fragmento de texto para el que le gustaría encontrar temas, y tendrá listos sus temas y nubes de palabras!
Si está buscando tutoriales prácticos, aprenda a cuantificar imágenes en color en Python . O aprenda todo sobre la matriz de confusión en el aprendizaje automático .
¡Gracias por leer y feliz codificación!