Ich erstelle Prototypen für eine Anwendung und benötige ein Sprachmodell, um die Ratlosigkeit einiger generierter Sätze zu berechnen.
Gibt es ein geschultes Sprachmodell in Python, das ich problemlos verwenden kann? So etwas Einfaches wie
model = LanguageModel('en')
p1 = model.perplexity('This is a well constructed sentence')
p2 = model.perplexity('Bunny lamp robert junior pancake')
assert p1 < p2
Ich habe mir einige Frameworks angesehen, konnte aber nicht finden, was ich will. Ich weiß, dass ich so etwas verwenden kann:
from nltk.model.ngram import NgramModel
lm = NgramModel(3, brown.words(categories='news'))
Dies verwendet eine gute Turing-Wahrscheinlichkeitsverteilung für Brown Corpus, aber ich suchte nach einem gut ausgearbeiteten Modell für einen großen Datensatz, wie den 1b-Wörter-Datensatz. Etwas, dem ich die Ergebnisse für eine allgemeine Domain wirklich vertrauen kann (nicht nur Nachrichten)
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
quelle
quelle
Antworten:
Das spaCy- Paket enthält viele Sprachmodelle , einschließlich solcher , die in Common Crawl geschult wurden .
Das Sprachmodell hat eine spezifische Bedeutung in der Verarbeitung natürlicher Sprache (Natural Language Processing, NlP). Ein Sprachmodell ist eine Wahrscheinlichkeitsverteilung über Folgen von Token. Bei einer bestimmten Folge von Token kann das Modell eine Wahrscheinlichkeit für das Auftreten dieser Folge zuweisen. Die Sprachmodelle von SpaCy umfassen mehr als nur eine Wahrscheinlichkeitsverteilung.
Das spaCy-Paket muss installiert sein und die Sprachmodelle müssen heruntergeladen werden:
Dann können die Sprachmodelle mit ein paar Zeilen Python verwendet werden:
Für ein bestimmtes Modell und Token gibt es eine geglättete Protokollwahrscheinlichkeitsschätzung des Worttyps eines Tokens, die mit dem
token.prob
Attribut : gefunden werden kann.quelle
token.prob
Attributs), das jedoch nur in der großen Modellversion erstellt wurde. Wenn Sie Ihre Antwort so bearbeiten, dass sie diese Informationen enthält, kann ich Ihnen das Kopfgeld geben. Komischerweise benutze ich Spacy seit Monaten und nirgends habe ich gesehen, dass es diese Funktion hatIch denke, die akzeptierte Antwort ist falsch.
token.prob ist das log-prob des Tokens, das ein bestimmter Typ ist. Ich vermute, 'Typ' bezieht sich auf etwas wie POS-Tag oder Typ einer benannten Entität (dies ist aus der Dokumentation von spacy nicht ersichtlich) und die Punktzahl ist ein Konfidenzmaß über den Raum aller Typen.
Dies ist nicht dasselbe wie die Wahrscheinlichkeiten, die von einem Sprachmodell zugewiesen werden. Ein Sprachmodell gibt Ihnen die Wahrscheinlichkeitsverteilung über alle möglichen Token (nicht den Typ), aus der hervorgeht, welcher von ihnen am wahrscheinlichsten als nächstes auftritt.
Dieses Repo enthält eine hübsche Dokumentation zur Verwendung von BERT (einem hochmodernen Modell) mit vorab trainierten Gewichten für das neuronale Netzwerk.
Ich denke, die APIs geben Ihnen nicht direkt Verwirrung, aber Sie sollten in der Lage sein, Wahrscheinlichkeitswerte für jedes Token ganz einfach zu erhalten ( https://github.com/huggingface/pytorch-pretrained-BERT#usage ).
quelle
Ich denke auch, dass die erste Antwort aus den Gründen, die @ noob333 erklärt hat, falsch ist.
Aber auch Bert kann nicht sofort als Sprachmodell verwendet werden. Bert gibt dir das
p(word|context(both left and right) )
und was du willst ist zu berechnenp(word|previous tokens(only left contex))
. Der Autor erklärt hier: https://github.com/google-research/bert/issues/35 warum Sie es nicht als lm verwenden können.Sie können Bert jedoch anpassen und als Sprachmodell verwenden, wie hier erläutert: https://arxiv.org/pdf/1902.04094.pdf
Sie können jedoch die Open Ai Gpt- oder Gpt-2-Modelle aus demselben Repo verwenden ( https://github.com/huggingface/pytorch-pretrained-BERT ).
Hier erfahren Sie, wie Sie die Ratlosigkeit mithilfe des gpt-Modells berechnen können ( https://github.com/huggingface/pytorch-pretrained-BERT/issues/473 ).
quelle
@lads, haben Sie eine aktualisierte Version des Ratgeber-Berechnungscodes für die Transformatoren? Ich habe Code wie https://gist.github.com/huikang/83b7674e3fd36895f69b5c8f9b8bcc4d erstellt . Aber es funktioniert nicht.
Nachdem ich die Migration vom Pytorch-Pretrained-Modell gelesen hatte, fand ich das Problem heraus. Vielen Dank.
quelle