Ejemplo del modelo oculto de Markov

Autor: | Última modificación: 7 de marzo de 2023 | Tiempo de Lectura: 3 minutos
Temas en este post: ,

Antes de entrar en el ejemplo del modelo oculto de Markov, es necesario explicar a qué hace referencia este término. Un hidden Markov model o HMM es un modelo de distribución de probabilidad que se utiliza para describir una secuencia de eventos observables que son generados por un conjunto subyacente de estados ocultos.

En otras palabras, el modelo de Markov es un modelo que utiliza las probabilidades de transición y el análisis de datos observados para hacer inferencias sobre los estados ocultos que producen los datos y generar reconocimiento de patrones por medio de una variable aleatoria.

En este post veremos un ejemplo del modelo oculto de Markov, que nos ayudará a entender un poco mejor este concepto que parece tan abstracto.

Ejemplo del modelo oculto de Markov

El dataset

Lo primero que haremos será descargarnos el dataset:

! wget https://transfer.sh/ttw10k/merged_clean.txt.zip
Ejemplo del modelo oculto de Markov

El siguiente paso sería descomprimirlo:

#Ejemplo del modelo oculto de Markov
! unzip merged_clean.txt.zip

A continuación, instalamos la librería que debemos utilizar para la implementación de nuestro modelo de Markov:

#Ejemplo del modelo oculto de Markov
! pip install hmmlearn
Ejemplo del modelo oculto de Markov 1
#Ejemplo del modelo oculto de Markov
! head merged_clean.txt
Ejemplo del modelo oculto de Markov 2

Hidden Markov model

En este ejemplo del modelo oculto de Markov, lo primero que haremos es preprocesar todo el texto que tenemos. Como veremos, el preprocesamiento para texto nlg es diferente a lo que hemos estado viendo para otro tipo de tareas.

En este caso vamos a utilizar sklearn, nltk para hacer este preprocesamiento y la librería que hemos mencionado para entrenamiento.

#Ejemplo del modelo oculto de Markov
import sys, json, codecs, pickle, argparse
import numpy as np
import string

import joblig
from sklearn.preprocessing import LabelEncoder
from hmmlearn import hmm
from nltk import FreqDist

El primer paso es abrir el fichero. Ya tenemos el txt, de modo que hacemos un open, leemos todo el texto con el .read y lo guardamos en la variable llamada file.

Ya que los textos que tenemos no están estructurados de ninguna forma, solo son un montón de cuentos metidos en un fichero, lo siguiente que haremos es separar el dataset en frases. Para eso hacemos un file.split por salto de línea («\n»); de este modo, nos quedamos con todas las frases del dataset.

Ahora lo que haremos será generar el diccionario que nos hace el mapeo para los signos de puntuación del texto, de cara a eliminarlos de todas las frases. Es muy importante que no haya signos de puntuación en nuestro dataset, ya que eso mete muchísimo ruido en los algoritmos.

Cuando hacemos el split, puede haber espacios dobles, por lo que con el ciclo for se eliminarán esos dobles espacios:

#Ejemplo del modelo oculto de Markov
file = open ("merged_clean.txt", 'r', encoding = 'utf - 8').read ()
sentences = file.split ("\n")
table = str.maketrans (' ', ' ', string.punctuation)

for index, sentence in enumerate (sentences):
      if sentence == " " :
            del sentences [index]

Una vez tenemos ya todas las frases limpias, lo que vamos a hacer es iterar por cada una de las frases y vamos a tokenizar todas las palabras. Recorremos, línea a línea, cada una de las frases que tenemos y hacemos un split por espacios para obtener todas esas palabras.

Después analizaremos cada una de las palabras que tenemos en «lines», para ver si tienen algún tipo de puntuación; en caso de que lo tengan, vamos a eliminarlo con el translate:

#Ejemplo del modelo oculto de Markov
lines = [line.split () for line in sentences]

for line_index, line in enumerate (lines):
      for word_index, word in enumerate (line):
            lines [line_index] [word_index] = word.translate (table)

words = [word.lower () for line in lines for word in line]

table = str.maketrans (' ', ' ', string.punctuation)
for index, word in enumerate (words):
      words [index] = word.translate (table)

alphabet = set (words)
le = LabelEncoder ()
le.fit (list (alphabet))

seq = le.transform (words)
features = np.fromiter (seq, np.int64)
features = features.reshape (-1, 1)
#features = np.atleast_2d (features).T
fd = FreqDist (seq)
#Ejemplo del modelo oculto de Markov
print (words [:10])
print (seq [:10])
Ejemplo del modelo oculto de Markov 3
#Ejemplo del modelo oculto de Markov
model = hmm.MultinomialHMM (n_componentes = 3, init_params = "ste")
#Ejemplo del modelo oculto de Markov
print (lines [:2])
print (features [:2])
Ejemplo del modelo oculto de Markov 4

¿Qué sigue?

Ahora que hemos visto un ejemplo del modelo oculto de Markov, es el momento de seguir formándote en alguna de las numerosas temáticas que tiene el ámbito del Big Data. En KeepCoding te ofrecemos la posibilidad de aprender con los mejores profesionales, que te guiarán a través de la teoría y la práctica para que, en unos pocos meses, te transformes en un gran profesional IT. Échale un vistazo al temario de nuestro Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp y descubre esta formación intensiva de alta calidad. ¡Pide ya más información y da el paso que impulsará tu futuro!

👉 Descubre más del Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp ¡Descarga el temario!

👉 Prueba el Bootcamp Gratis por una Semana ¡Empieza ahora mismo!

👉 Conoce nuestros otros Bootcamps en Programación y Tecnología

[email protected]

Días

Big data, inteligencia artificial & machine learning full stack bootcamp

Fórmate en Big Data y Consigue el Empleo que sueñas

becas | opciones de financiación