Logo Studenta

(PLN)-Modelos de lenguaje

¡Estudia con miles de materiales!

Vista previa del material en texto

Modelos de lenguaje
Los lenguaje de son una parte fundamental del procesamiento del lenguaje natural (PLN) y juegan un papel clave en diversos modelos, como el reconocimiento de voz, la traducción automática, la generación de texto y la clasificación de texto, entre otros. Un modelo de lenguaje es una representación probabilística que asigna una probabilidad a una secuencia de palabras en un idioma determinado. Su objetivo es capturar la estructura y las regularidades del lenguaje humano para predecir la probabilidad de ocurrencias de palabras o secuencias de palabras en una oración.
1. Modelado de secuencia de palabras:
En el modelado de lenguaje, se busca calcular la probabilidad de una secuencia de palabras como P(w1, w2, ..., wn), donde w1, w2, ..., wn son las palabras que forman la oración. Para esto, se utiliza la regla de la cadena y la aproximación de Markov para simplificar el cálculo de la probabilidad:
P(w1, w2, ..., wn) = P(w1) * P(w2 | w1) * P(w3 | w1, w2) * ... * P(wn | w1, w2, ..., wn-1)
La aproximación de Markov asume que la probabilidad de una palabra solo depende de un contexto limitado de palabras anteriores, es decir, se asume que P(wn | w1, w2, ..., wn-1) ≈ P(wn | wn-k, ..., wn-1), donde k es un valor fijo que define el "orden" del modelo.
2. Modelos de n-gramas:
Los modelos de n-gramas son una clase popular de modelos de lenguaje que utilizan la aproximación de Markov con n=1, 2, 3, ..., para calcular la probabilidad de una secuencia de palabras. Un n-grama es una secuencia contigua de n palabras en un texto. Por ejemplo, para n=1, se tienen los unigramas, que son simplemente palabras individuales en el texto. Para n=2, se tienen los bigramas, que son secuencias de dos palabras consecutivas, y así sucesivamente.
Ejemplo de modelo de unigramas:
Supongamos que tenemos el siguiente corpus de entrenamiento:
La tabla de frecuencias de unigramas seria:
La probabilidad de una palabra dada en este modelo de unigramas sería simplemente la frecuencia de esa palabra dividida por el número total de palabras en el corpus.
3. Modelos de lenguaje con suavizado:
Los modelos de lenguaje pueden basarse en n-gramas para encontrar problemas cuando se encuentran secuencias de palabras que no aparecen en el corpus de entrenamiento. Esto puede llevar a que la probabilidad de una secuencia de palabras sea cero, lo cual no es deseable. Para evitar esto, se utiliza el suavizado, que es una técnica que asigna una probabilidad pequeña pero no nula a todas las secuencias de palabras posibles, incluso aquellas que no están en el corpus de entrenamiento.
Ejemplo de suavizado con suavizado de Laplace (Laplace smoothing):
Supongamos que queremos calcular la probabilidad de la secuencia "el gato blanco" en el corpus de entrenamiento anterior, pero "blanco" no aparece en el corpus. Sin suavizado, la probabilidad sería cero. Con suavizado de Laplace, se suma una constante a la frecuencia de todas las palabras para asegurar que ninguna probabilidad sea cero. Supongamos que agregamos una constante de 1.
La tabla de frecuencias de unigramas con suavizado seria:
 
La probabilidad de "el gato blanco" sería (2 + 1) / (9 + 8) = 3/17.
4. Modelos de lenguaje neuronal:
Los modelos de lenguaje basados ​​en redes neuronales, como las redes neuronales recurrentes (RNN) y los transformers, han demostrado un gran éxito en el procesamiento del lenguaje natural. Estos utilizan una arquitectura de aprendizaje profundo para capturar relaciones complejas entre las palabras y generar secuencias de texto más modelos coherentes y precisos.
Ejemplo de modelo de lenguaje neural con RNN:
import tensorflow as tf
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
# Datos de entrenamiento
corpus = [
 "El gato persigue al ratón.",
 "El ratón se esconde."
]
# Tokenización
tokenizer = Tokenizer()
tokenizer.fit_on_texts(corpus)
vocab_size = len(tokenizer.word_index) + 1
# Secuencias de palabras
sequences = tokenizer.texts_to_sequences(corpus)
# Padding
maxlen = max(len(seq) for seq in sequences)
sequences_padded = pad_sequences(sequences, maxlen=maxlen)
# Definir modelo RNN
model = tf.keras.Sequential([
 tf.keras.layers.Embedding(vocab_size, 100, input_length=maxlen),
 tf.keras.layers.SimpleRNN(128),
 tf.keras.layers.Dense(vocab_size, activation='softmax')
])
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
# Entrenamiento
X = sequences_padded[:, :-1]
y = tf.keras.utils.to_categorical(sequences_padded[:, -1], num_classes=vocab_size)
model.fit(X, y, epochs=100, verbose=1)
En este ejemplo, se entrena un modelo de lenguaje neural utilizando una red neuronal recurrente (RNN) para predecir la siguiente palabra en una secuencia de palabras. El modelo utiliza una capa de incrustación para representar cada palabra como un vector denso, seguida de una capa RNN y una capa densa con una función softmax para calcular la probabilidad de la siguiente palabra.
Conclusiones:
Los modelos de lenguaje son esenciales en el procesamiento del lenguaje natural y juegan un papel importante en diversas aplicaciones que involucran el lenguaje humano. Desde los modelos de n-gramas con suavizado hasta los modelos de lenguaje neuronal más avanzados, cada enfoque tiene sus ventajas y desafíos. La selección del modelo adecuado depende de la tarea específica y los recursos disponibles. Con el continuo avance de las técnicas de aprendizaje automático y el procesamiento del lenguaje natural, se espera que los modelos de lenguaje sigan mejorando y desempeñen un papel crucial en el desarrollo de sistemas inteligentes que puedan comprender, interpretar y generar lenguaje humano de manera más efectiva.