Estoy creando prototipos de una aplicación y necesito un modelo de lenguaje para calcular la perplejidad en algunas oraciones generadas.
¿Hay algún modelo de lenguaje entrenado en Python que pueda usar fácilmente? Algo simple como
model = LanguageModel('en')
p1 = model.perplexity('This is a well constructed sentence')
p2 = model.perplexity('Bunny lamp robert junior pancake')
assert p1 < p2
He visto algunos marcos pero no he podido encontrar lo que quiero. Sé que puedo usar algo como:
from nltk.model.ngram import NgramModel
lm = NgramModel(3, brown.words(categories='news'))
Esto utiliza una buena distribución de probabilidad de turing en Brown Corpus, pero estaba buscando un modelo bien diseñado en algún conjunto de datos grande, como el conjunto de datos de 1b palabras. Algo en lo que realmente puedo confiar en los resultados para un dominio general (no solo noticias)
python
nlp
language-model
r
statistics
linear-regression
machine-learning
classification
random-forest
xgboost
python
sampling
data-mining
orange
predictive-modeling
recommender-system
statistics
dimensionality-reduction
pca
machine-learning
python
deep-learning
keras
reinforcement-learning
neural-network
image-classification
r
dplyr
deep-learning
keras
tensorflow
lstm
dropout
machine-learning
sampling
categorical-data
data-imputation
machine-learning
deep-learning
machine-learning-model
dropout
deep-network
pandas
data-cleaning
data-science-model
aggregation
python
neural-network
reinforcement-learning
policy-gradients
r
dataframe
dataset
statistics
prediction
forecasting
r
k-means
python
scikit-learn
labels
python
orange
cloud-computing
machine-learning
neural-network
deep-learning
rnn
recurrent-neural-net
logistic-regression
missing-data
deep-learning
autoencoder
apache-hadoop
time-series
data
preprocessing
classification
predictive-modeling
time-series
machine-learning
python
feature-selection
autoencoder
deep-learning
keras
tensorflow
lstm
word-embeddings
predictive-modeling
prediction
machine-learning-model
machine-learning
classification
binary
theory
machine-learning
neural-network
time-series
lstm
rnn
neural-network
deep-learning
keras
tensorflow
convnet
computer-vision
Fred
fuente
fuente
Respuestas:
El paquete spaCy tiene muchos modelos de idiomas , incluidos los formados en Common Crawl .
El modelo del lenguaje tiene un significado específico en el procesamiento del lenguaje natural (NlP). Un modelo de lenguaje es una distribución de probabilidad sobre secuencias de tokens. Dada una secuencia específica de tokens, el modelo puede asignar una probabilidad de que aparezca esa secuencia. Los modelos de lenguaje de SpaCy incluyen más que solo una distribución de probabilidad.
Es necesario instalar el paquete spaCy y descargar los modelos de idiomas:
Luego, los modelos de lenguaje pueden usarse con un par de líneas de Python:
Para un modelo y token dados, se puede encontrar una estimación de probabilidad de registro suavizada del tipo de palabra de un token con:
token.prob
atributo.fuente
token.prob
atributo), pero solo está construido en la versión de modelo grande. Si edita su respuesta para incluir esa información, puedo darle la recompensa. Curiosamente, he estado usando spacy durante meses y en ninguna parte vi que tenía esta característicaCreo que la respuesta aceptada es incorrecta.
token.prob es el log-prob del token que es un tipo particular. Supongo que 'tipo' se refiere a algo como la etiqueta POS o el tipo de entidad con nombre (no está claro en la documentación de spacy) y el puntaje es una medida de confianza en el espacio de todos los tipos.
Esto no es lo mismo que las probabilidades asignadas por un modelo de lenguaje. Un modelo de lenguaje le brinda la distribución de probabilidad sobre todos los tokens posibles (no el tipo) que dice cuál de ellos es más probable que ocurra a continuación.
Este repositorio tiene bastante buena documentación sobre el uso de BERT (un modelo de última generación) con pesos pre-entrenados para la red neuronal,
Creo que las API no le dan perplejidad directamente, pero debería poder obtener puntajes de probabilidad para cada token con bastante facilidad ( https://github.com/huggingface/pytorch-pretrained-BERT#usage ).
fuente
También creo que la primera respuesta es incorrecta por las razones que @ noob333 explicó.
Pero también Bert no se puede usar fuera de la caja como modelo de lenguaje. Bert te da
p(word|context(both left and right) )
y lo que quieres es calcularp(word|previous tokens(only left contex))
. El autor explica aquí: https://github.com/google-research/bert/issues/35 por qué no puede usarlo como una película.Sin embargo, puede adaptar Bert y usarlo como modelo de lenguaje, como se explica aquí: https://arxiv.org/pdf/1902.04094.pdf
Pero puede usar los modelos abiertos ai gpt o gpt-2 del mismo repositorio ( https://github.com/huggingface/pytorch-pretrained-BERT )
Aquí es cómo puede calcular la perplejidad utilizando el modelo gpt ( https://github.com/huggingface/pytorch-pretrained-BERT/issues/473 )
fuente