Saya membuat prototipe aplikasi dan saya membutuhkan model bahasa untuk menghitung kebingungan pada beberapa kalimat yang dihasilkan.
Apakah ada model bahasa terlatih dalam python yang bisa saya gunakan? Sesuatu yang sederhana seperti
model = LanguageModel('en')
p1 = model.perplexity('This is a well constructed sentence')
p2 = model.perplexity('Bunny lamp robert junior pancake')
assert p1 < p2
Saya telah melihat beberapa kerangka kerja tetapi tidak dapat menemukan apa yang saya inginkan. Saya tahu saya bisa menggunakan sesuatu seperti:
from nltk.model.ngram import NgramModel
lm = NgramModel(3, brown.words(categories='news'))
Ini menggunakan distribusi probabilitas turing yang baik pada Brown Corpus, tetapi saya sedang mencari beberapa model yang dibuat dengan baik pada beberapa dataset besar, seperti dataset kata 1b. Sesuatu yang benar-benar dapat saya percayai hasil untuk domain umum (bukan hanya berita)
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
sumber
sumber
Jawaban:
The spacy paket memiliki banyak model bahasa , termasuk yang dilatih umum Crawl .
Model bahasa memiliki arti khusus dalam Natural Language Processing (NlP). Model bahasa adalah distribusi probabilitas melalui urutan token. Diberikan urutan token tertentu, model dapat menetapkan probabilitas munculnya urutan itu. Model bahasa SpaCy mencakup lebih dari sekedar distribusi probabilitas.
Paket spaCy perlu diinstal dan model bahasa perlu diunduh:
Kemudian model bahasa dapat digunakan dengan beberapa baris Python:
Untuk model dan token yang diberikan, ada estimasi probabilitas log yang dihaluskan dari jenis kata token yang dapat ditemukan dengan:
token.prob
atribut.sumber
token.prob
atribut), tetapi itu hanya dibangun dalam versi model besar. Jika Anda mengedit jawaban Anda untuk memasukkan info itu, saya bisa memberi Anda hadiah. Cukup lucu, saya telah menggunakan spacy selama berbulan-bulan sekarang dan di mana pun saya melihat bahwa ia memiliki fitur iniSaya pikir jawaban yang diterima salah.
token.prob adalah log-prob dari token yang menjadi tipe tertentu. Saya menebak 'tipe' mengacu pada sesuatu seperti POS-tag atau tipe entitas yang dinamai (tidak jelas dari dokumentasi spacy) dan skornya adalah ukuran kepercayaan atas ruang semua jenis.
Ini tidak sama dengan probabilitas yang diberikan oleh model bahasa. Model bahasa memberi Anda distribusi probabilitas atas semua token yang mungkin (bukan tipe) yang mengatakan dari mereka yang paling mungkin terjadi selanjutnya.
Repo ini memiliki dokumentasi yang cukup bagus tentang penggunaan BERT (model mutakhir) dengan bobot pra-terlatih untuk jaringan saraf,
Saya pikir API tidak memberikan Anda kebingungan secara langsung tetapi Anda harus bisa mendapatkan skor probabilitas untuk setiap token dengan mudah ( https://github.com/huggingface/pytorch-pretrained-BERT#usage ).
sumber
Saya juga berpikir bahwa jawaban pertama salah karena alasan yang dijelaskan @ noob333.
Tetapi juga Bert tidak dapat digunakan di luar kotak sebagai model bahasa. Bert memberi Anda
p(word|context(both left and right) )
dan apa yang Anda inginkan adalah menghitungp(word|previous tokens(only left contex))
. Penulis menjelaskan di sini: https://github.com/google-research/bert/issues/35 mengapa Anda tidak dapat menggunakannya sebagai lm.Namun Anda dapat mengadaptasi Bert dan menggunakannya sebagai model bahasa, seperti yang dijelaskan di sini: https://arxiv.org/pdf/1902.04094.pdf
Tetapi Anda dapat menggunakan model open ai gpt atau gpt-2 dari repo yang sama ( https://github.com/huggingface/pytorch-pretrained-BERT )
Inilah cara Anda dapat menghitung kebingungan dengan menggunakan model gpt ( https://github.com/huggingface/pytorch-pretrained-BERT/issues/473 )
sumber