Showing posts with label mallet. Show all posts
Showing posts with label mallet. Show all posts

Sunday, November 24, 2013

Modelado de Tópicos.


Cosas que me gustaría tener como referencia sobre el Modelado de Tópicos.


Papers: 
"On Smoothing and Inference for Topic Models"
http://www.ics.uci.edu/~asuncion/pubs/UAI_09.pdf
Notas:
para el cálculo de la Probabilidad Apriori utilizan PLSA ó LDA.
para el cáculo de la Probabilidad Posteriori mencionan:  Gibbs sampling, Collapsed variational Bayesian Inference, Inference Variational Bayesian, Maxímo Likehood Estimation (ME), Maximo Posteriori Estimation.

"An Estimate of an Upper Bound for the Entropy of English "
http://acl.ldc.upenn.edu/J/J92/J92-1002.pdf
Notas:
La definición de entropía como medida sobre que tan bueno o no es un modelo, por su representación en bits. cuantos bits utiliza un modelo. bits/palabras, bits/trigrams, bits/bigrams.


"Probabilistic topic models"
http://www.cs.princeton.edu/~blei/papers/Blei2012.pdf
Notas:
Una revisión bien completa y que define de forma fácil cómo funciona el modelado de tópicos.


"Latent Dirichlet Allocation"
http://www.cs.princeton.edu/~blei/papers/BleiNgJordan2003.pdf
Notas:
¿Cuantos tópicos son apropiados?, ¿Cuantas iteraciones de muestreo son necesarias?, ¿Cómo puede ser optimizado?
Exchangeability: NO significa que las variables aleatorias son independientes e identicamente distribuidas. se le define como "condicionalmente independientes" e identicamente distribuidas.
La distribución conjunta de variables aleatoriaas es simple y calculada cn la probabilidad marginal ajustada a la distribución LDA.
Los Documentos son representados como una mezcla aleatoria de tópicos donde cada tópico es caracterizado por una distribución sobre palabras.
Para variar el alfa y beta ( utiliza Newton-Rapson) estos parametros influyen en la perplejidad del modelo.
Perplejidad es una métrica que mide que tan bueno es el modelo,
Si perplejidad es menor el modelo es mejor, tiende a ser más general, y se define que el modelo hace un mejor trabajo de comprensión de la data de prueba.
Si la perplejidad incrementa, se diría que desmejora. La perplejidad es una medida de la teoría de la información, Este es el paper que da base al software de modelado de tópicos Mallet.
LDA utiliza: Distribución de probabilidad conjunta observada y aleatoria.

Algunas definiciones, creo que es de la wikipedia, son anotaciones personales:

Gibbs Samplings: Es un algoritmo del tipo MCMC (Markov Chain Monte Carlo) que permite obtener una secuencia de observaciones. Donde sus valores son una distribución de probabilidad multivariada (es decir la unión de distribuciones e probabilidades diferentes de 2 o más variables) .
Esta secuencia puede ser usada para aproximar distribuciones que no siguen una distribución conocida sino que contiene partes de varias.

Gibbs Samplings es comúnmente usado en la estadística de inferencia, especialmente por la inferencia bayesiana. Es un algoritmo de resultados aleatorios por lo que en cada ejecución arroja diferentes resultados.
Gibbs Samplings genera una cadena de Markov donde cada elemento está relacionado con el inmediato siguiente, y no con el resto de eventos pasados. (ley de memoria distribución exponencial, La probabilidad de ocurrencia de eventos presentes o futuros no depende (eventos independientes) de los que hayan ocurrido en el pasado)
Gibbs para datos continuos --> se divide en carpetas (bin) y se utiliza ME (expectation maximization)
para datos discretos --> Maximun Posteriori. Mallet utiliza Gibbs Sampling por defecto, sin embago se puede modificar.
tf-idf,  valora palabras basado en cuan especial son ellas a un documento en particular con un gran corpus. LSA utiliza este score con una matriz de documentos y términos.  otra forma es a través del SVD (singular value descomposition) permite descubrir como una palabra se encuentra relacionada con la otra.
pLSA asume  que un documento es un conjunto de tópicos, más no de palabras (los tópicos son generados primeros que los documentos.).


Saturday, August 10, 2013

Mallet How to.



En linux es realmente sencillo, sólo descargar y exportar la variable de ambiente en la terminal/línea de comando/consola. En Win igual sólo que hay que saber como editar las variables de entorno.

export MALLET_HOME = 'ruta/donde/esta/mallet'

En general Mallet viene con stopwords definidas para inglés y alemán. Se encuentran en el directorio stoplists. En caso de añadir nuevas stopwords colocarlas en este directorio por llevar un orden, realmente se pueden colocar en cualquier sitio ya que luego en el comando se le añade la ruta del listado de palabras que se desean eliminar.

sample-data: directorio con data de ejemplo.
bin: directorio con el binario, a usar para ejecutar mallet.
test:
src: se puede ver el código de mallet en su mayoría se reduce a contar palabras, el 90 % del tiempo esto es lo que se hace cuando nos referimos a text mining.

Yo creé un directorio llamado data: ahí están todos los txts, de los cuales quiero extraer los tópicos, Mallet también lee el formato csv, donde la primera columna es el título y el resto es el contenido o texto que quiero analizar. cada línea sería un texto o documento diferente.

cosas que no vamos a tocar, ni mirar:
pom.xml, build.xml, Makefile : archivo de configuración de Maven.
lib: librerías para que funcione mallet, un monton de archivos jar.
dist: Archivo jar que contiene la funcionalidad de mallet.
class: archivos binarios ya compilados de Java.



Obtener el formato mallet desde un archivo csv:

./bin/mallet  import-file --input allmyfavorites.csv --output myfavorites.mallet

Obtener el formato Mallet de aproximadamente 6500 articulos:

bin/mallet import-dir --input ./data \
--keep-secuence  true \
--output noticias.mallet \
--stoplist-file ./stoplists/stopwords.txt
comenzó: 5:18 termino 5.19. para 6000 documento bastante rápido veamos..
lo siguiente, hará el trabajo de obtener tópicos mediante el algoritmo LDA:

bin/mallet train-topics \
--input noticias.mallet \
--optimize-interval 20 \
--num-topics 20 \
--word-topic-counts-file  noticias_word-topic-counts.txt \
--output-state noticias-topic-state.gz \
--output-topic-keys noticias_keys.txt \
--output-doc-topics noticias_composition.txt 
Comenzó a las 5.22 aplicando LDA a 6500 documentos.
Terminó : 6y22 :( al menos lo hizo y no dió error de memoria :)
Total time: 56 minutes 46 seconds

Los archivos de salida son 3:

noticias_keys.txt tendría todos los tópicos que encontró el algoritmo.
noticias_composition.txt tendría todos los tópicos, y la porción de cada tópico en cada documento, de este archivo se puede realizar grafos, heatmap, treemap, y es el que contiene la información que podría definir similaridad entre documentos.
noticias-topic-state.gz contiene todas las palabras, que encontró en los distintos documentos, podría servir para hacer una nube de palabras, y para analizar globalmente con R.

Esto se realizó siguiendo este tutoríal: http://programminghistorian.org
La fotografía, es de una exposición donde las ilustraciones deben reflejar lo que contiene el texto de la derecha de la imagen.
Licencia, Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported


Mas info y scripts: https://github.com/j3nnn1/topic_model


Thursday, August 1, 2013

Modelado de Tópicos "automagically".


Es una técnica para tratar documentos que no tienen alguna categorización,
y asume que cada documento es una mezcla aleatorias de categorías o tópicos
donde cada categoría es definida por la preferencia de algunas palabras
sobre otras. Finalmente pretendemos que vamos a generar cada palabra
en cada documento desde 0 una y otra vez, y aleatoriamente escogemos una
categoría y de esta categoría escogemos una palabra que representen dicha
categoría basado en la preferencia de esta palabra sobre otras.

Un tópico en el contexto de modelado de tópicos es una distribución
de probabilidades de palabras para un conjunto, e indica la probabilidad
que una palabra aparezca en un documento  sobre un tópico en particular.

Resumen.

1 - El modelado de tópicos asume que las palabras que comprende el texto
fueron generadas aleatoriamente. (mmmjum si claro, y en la luna ha oxigeno.)
2 - Su objetivo es Inferir una convincente respuesta bajo la asunción que el punto
1 siempre es verdadero.

Poco creíble ¿no?, pero lo cierto es que segun lo leído en su mayoría funciona.
Comentan que el potencial del modelado de tópicos no se observa en cada
documento individualmente, sino más bien en un enfoque global analizando
grandes cantidades de documentos para visualizar patrones entre ellos. Esto
me trae buenos recuerdo de Bertalanffy y su teoría general de sistemas.


Para definir un proyecto de modelado,  consta de 5 atributos:

1 - ¿cual es el corpus a analizar?
2 - ¿qué técnica o algoritmo de modelado se va a aplicar?
3 - ¿Cual es la unidad de Análisis?
4 - ¿Como fue el postprocesamiento?
5 -¿Puedo visualizarlo mediante y gráfico y cómo?

Los Proyectos de modelado de tópicos se dividen en:

Proyectos de enfoque sincrónico: en el cual el valor de la unidad de análisis
no posee límite de tiempo, o mejor dicho no se identifica con una brecha de
tiempo.

Proyecto de enfoque diacrónico: La unidad de analisis de tiempo se genera
en un fecha o rango de fecha definido.

Respondiendo esto de acuerdo a un proyecto que tengo actualmente:
1 - ¿cual es el corpus a analizar?
    noticias, artículos y opiniones de 10 periódicos en internet,
    bajo la sección de economía, sin tomar en cuenta la fecha
    en la que se hizo el fetch de la url.
2 - ¿qué técnica o algoritmo de modelado se va a aplicar?
    Vanilla LDA Mallet. (Distribution Dirichlet?)
 3 - ¿Cual es la unidad de Análisis?
    1 documento = 1 noticia.
4 - ¿Como fue el postprocesamiento?
    si el tiempo es generoso con nosotros hacer cluster en R
    en base a esta data de tópicos.
5 - ¿visualización?
   un heapmap sería una buena opción. Si murphy no anda cerca.
   un gráfico de líneas,  con variable x = tiempo y scoring
   de relevancia y cada línea sería un tópico diferente.

Referencia.
topic-modeling-in-the-humanities-an-overview