Estou prototipando um aplicativo e preciso de um modelo de linguagem para calcular a perplexidade em algumas frases geradas.
Existe algum modelo de linguagem treinado em python que eu possa usar facilmente? Algo simples como
model = LanguageModel('en')
p1 = model.perplexity('This is a well constructed sentence')
p2 = model.perplexity('Bunny lamp robert junior pancake')
assert p1 < p2
Eu olhei para algumas estruturas, mas não consegui encontrar o que quero. Eu sei que posso usar algo como:
from nltk.model.ngram import NgramModel
lm = NgramModel(3, brown.words(categories='news'))
Isso usa uma boa distribuição de probabilidade de turing no Brown Corpus, mas eu estava procurando por um modelo bem trabalhado em alguns grandes conjuntos de dados, como o conjunto de dados 1b words. Algo em que posso confiar nos resultados de um domínio geral (não apenas notícias)
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
fonte
fonte
Respostas:
O pacote spaCy possui muitos modelos de idiomas , incluindo os treinados no Common Crawl .
O modelo de linguagem tem um significado específico no Processamento de linguagem natural (PNL). Um modelo de linguagem é uma distribuição de probabilidade através de sequências de tokens. Dada uma sequência específica de tokens, o modelo pode atribuir uma probabilidade dessa sequência aparecer. Os modelos de linguagem da SpaCy incluem mais do que apenas uma distribuição de probabilidade.
O pacote spaCy precisa ser instalado e os modelos de idiomas precisam ser baixados:
Em seguida, os modelos de linguagem podem ser usados com algumas linhas do Python:
Para um determinado modelo e token, há uma estimativa de probabilidade de log suavizada do tipo de palavra de um token que pode ser encontrada com:
token.prob
attribute.fonte
token.prob
atributo), mas é construído apenas na versão de modelo grande. Se você editar sua resposta para incluir essas informações, eu posso lhe dar uma recompensa. Engraçado o suficiente, eu tenho usado spacy por meses agora e vi nenhum lugar que eu que tinha esse recursoEu acho que a resposta aceita está incorreta.
token.prob é o log-prob do token sendo um tipo específico. Suponho que 'type' se refira a algo como tag POS ou tipo de entidade nomeada (não está claro na documentação do spacy) e a pontuação é uma medida de confiança no espaço de todos os tipos.
Isso não é o mesmo que as probabilidades atribuídas por um modelo de linguagem. Um modelo de linguagem fornece a distribuição de probabilidade entre todos os tokens possíveis (não o tipo), dizendo qual deles é mais provável que ocorra a seguir.
Esse repositório possui uma documentação bastante interessante sobre o uso do BERT (um modelo de ponta) com pesos pré-treinados para a rede neural,
Acho que as APIs não causam perplexidade diretamente, mas você deve conseguir pontuações de probabilidade para cada token com bastante facilidade ( https://github.com/huggingface/pytorch-pretrained-BERT#usage ).
fonte
Também acho que a primeira resposta está incorreta pelas razões que o @ noob333 explicou.
Mas também Bert não pode ser usado imediatamente como modelo de linguagem. Bert fornece
p(word|context(both left and right) )
e o que você deseja é calcularp(word|previous tokens(only left contex))
. O autor explica aqui: https://github.com/google-research/bert/issues/35 por que você não pode usá-lo como um filme.No entanto, você pode adaptar o Bert e usá-lo como modelo de linguagem, conforme explicado aqui: https://arxiv.org/pdf/1902.04094.pdf
Mas você pode usar os modelos abertos ai gpt ou gpt-2 pré-definidos no mesmo repositório ( https://github.com/huggingface/pytorch-pretrained-BERT )
Aqui está como você pode calcular a perplexidade usando o modelo gpt ( https://github.com/huggingface/pytorch-pretrained-BERT/issues/473 )
fonte