Prototypuję aplikację i potrzebuję modelu językowego, aby obliczyć zakłopotanie w przypadku niektórych wygenerowanych zdań.
Czy istnieje jakiś wyuczony model języka w Pythonie, którego można łatwo używać? Coś prostego jak
model = LanguageModel('en')
p1 = model.perplexity('This is a well constructed sentence')
p2 = model.perplexity('Bunny lamp robert junior pancake')
assert p1 < p2
Patrzyłem na niektóre frameworki, ale nie mogłem znaleźć tego, czego chcę. Wiem, że mogę użyć czegoś takiego:
from nltk.model.ngram import NgramModel
lm = NgramModel(3, brown.words(categories='news'))
Wykorzystuje to dobry rozkład prawdopodobieństwa Turinga na Korpusie Browna, ale szukałem dobrze spreparowanego modelu na dużym zestawie danych, takim jak zestaw danych 1b słów. Coś, czemu mogę zaufać wynikom dla domeny ogólnej (nie tylko wiadomości)
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
źródło
źródło
Odpowiedzi:
Spacy pakiet ma wiele modeli językowych , w tym te, które przeszkolone na wspólnej Crawl .
Model językowy ma określone znaczenie w przetwarzaniu języka naturalnego (NlP). Model językowy to rozkład prawdopodobieństwa między sekwencjami tokenów. Biorąc pod uwagę określoną sekwencję tokenów, model może przypisać prawdopodobieństwo wystąpienia tej sekwencji. Modele językowe SpaCy obejmują coś więcej niż rozkład prawdopodobieństwa.
Pakiet spaCy musi zostać zainstalowany, a modele językowe należy pobrać:
Następnie modele językowe mogą być używane z kilkoma liniami Pythona:
Dla danego modelu i tokena istnieje wygładzone oszacowanie prawdopodobieństwa logarytmu typu słowa tokena, które można znaleźć za pomocą:
token.prob
atrybutu.źródło
token.prob
atrybutu), ale jest wbudowany tylko w wersję dużego modelu. Jeśli zmodyfikujesz swoją odpowiedź, aby uwzględnić te informacje, mogę dać ci nagrodę. Zabawne, używam spacy od miesięcy i nigdzie nie widziałem, żeby miał tę funkcjęMyślę, że zaakceptowana odpowiedź jest nieprawidłowa.
token.prob jest log-prob z tokena będącego określonego typu. Zgaduję, że „typ” odnosi się do czegoś takiego jak POS-tag lub typ nazwanego bytu (nie wynika to z dokumentacji spacy), a wynik jest miarą pewności względem przestrzeni wszystkich typów.
To nie to samo, co prawdopodobieństwa przypisane przez model językowy. Model językowy daje rozkład prawdopodobieństwa na wszystkie możliwe tokeny (nie typ), mówiąc, który z nich najprawdopodobniej wystąpi w następnej kolejności.
To repozytorium ma całkiem niezłą dokumentację na temat używania BERT (najnowocześniejszego modelu) z wstępnie wyszkolonymi obciążnikami dla sieci neuronowej,
Myślę, że interfejsy API nie dają bezpośredniej dezorientacji, ale powinieneś być w stanie dość łatwo uzyskać wyniki prawdopodobieństwa dla każdego tokena ( https://github.com/huggingface/pytorch-pretrained-BERT#usage ).
źródło
Myślę też, że pierwsza odpowiedź jest niepoprawna z powodów wyjaśnionych przez @ noob333.
Ale również Bert nie może być używany od razu jako model językowy. Bert daje ci
p(word|context(both left and right) )
to, czego chcesz, to obliczeniap(word|previous tokens(only left contex))
. Autor wyjaśnia tutaj: https://github.com/google-research/bert/issues/35 dlaczego nie można użyć go jako lm.Możesz jednak dostosować Bert i używać go jako modelu językowego, jak wyjaśniono tutaj: https://arxiv.org/pdf/1902.04094.pdf
Ale możesz użyć otwartych wstępnie zabezpieczonych modeli AIpt lub GPT-2 z tego samego repozytorium ( https://github.com/huggingface/pytorch-pretrained-BERT )
Oto, jak możesz obliczyć problem za pomocą modelu gpt ( https://github.com/huggingface/pytorch-pretrained-BERT/issues/473 )
źródło