Я создаю прототип приложения и мне нужна языковая модель для вычисления недоумения в некоторых сгенерированных предложениях.
Есть ли в Python обученная языковая модель, которую я могу легко использовать? Что-то простое, как
model = LanguageModel('en')
p1 = model.perplexity('This is a well constructed sentence')
p2 = model.perplexity('Bunny lamp robert junior pancake')
assert p1 < p2
Я посмотрел на некоторые рамки, но не смог найти то, что я хочу. Я знаю, что могу использовать что-то вроде:
from nltk.model.ngram import NgramModel
lm = NgramModel(3, brown.words(categories='news'))
Это использует хорошее распределение вероятности тьюринга в Brown Corpus, но я искал какую-то хорошо продуманную модель для некоторого большого набора данных, такого как набор данных 1b words. То, что я могу доверять результатам для общего домена (не только новости)
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
Фред
источник
источник
Ответы:
В пакете spaCy есть много языковых моделей , в том числе обученных на Common Crawl .
Языковая модель имеет особое значение в обработке естественного языка (NlP). Языковая модель - это распределение вероятностей по последовательностям токенов. При заданной последовательности токенов модель может назначить вероятность появления этой последовательности. Языковые модели SpaCy включают в себя больше, чем просто распределение вероятностей.
Необходимо установить пакет spaCy и загрузить языковые модели:
Тогда языковые модели можно использовать с парой строк Python:
Для данной модели и токена существует сглаженная логарифмическая оценка вероятности типа слова токена с
token.prob
атрибутом :.источник
token.prob
атрибута), но она встроена только в версию большой модели. Если вы отредактируете свой ответ, включив эту информацию, я могу дать вам награду. Как ни странно, я уже несколько месяцев пользуюсь spacy, и нигде не видел, чтобы у него была эта функцияЯ думаю, что общепринятый ответ неверен.
token.prob является логом-пробами из маркеров являются конкретным типом. Я предполагаю, что «типа» относится к чему-то, как POS-тег или типа имени объекта (это не ясно из документации Spacy), и оценкой является мерой доверия над пространством всех типов.
Это не то же самое , как и вероятности , приписанная модель языка. Языковая модель дает вам распределение вероятностей по всем возможным токенам (не по типу) с указанием того, какой из них наиболее вероятен следующим.
Этот репозиторий имеет довольно хорошую документацию по использованию BERT (современной модели) с предварительно обученными весами для нейронной сети,
Я думаю, что API не дает вам затруднений напрямую, но вы должны быть в состоянии получить оценки вероятности для каждого токена довольно легко ( https://github.com/huggingface/pytorch-pretrained-BERT#usage ).
источник
Я также думаю, что первый ответ неверен по причинам, которые объяснил @ noob333.
Но и Берт не может использоваться из коробки в качестве языковой модели. Берт дает вам то,
p(word|context(both left and right) )
что вы хотите, чтобы вычислитьp(word|previous tokens(only left contex))
. Автор объясняет здесь: https://github.com/google-research/bert/issues/35, почему вы не можете использовать его в качестве lm.Однако вы можете адаптировать Bert и использовать его в качестве языковой модели, как описано здесь: https://arxiv.org/pdf/1902.04094.pdf
Но вы можете использовать готовые модели open ai gpt или gpt-2 из того же репо ( https://github.com/huggingface/pytorch-pretrained-BERT )
Вот как вы можете вычислить недоумение, используя модель gpt ( https://github.com/huggingface/pytorch-pretrained-BERT/issues/473 )
источник