क्या अजगर के लिए कोई अच्छा आउट-ऑफ-द-बॉक्स भाषा मॉडल है?


11

मैं एक एप्लिकेशन का प्रोटोटाइप बना रहा हूं और मुझे कुछ उत्पन्न वाक्यों के प्रति एकरूपता की गणना करने के लिए एक भाषा मॉडल की आवश्यकता है।

क्या अजगर में कोई प्रशिक्षित भाषा मॉडल है जिसका मैं आसानी से उपयोग कर सकता हूं? जैसे कुछ सरल

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'))

यह ब्राउन कॉर्पस पर एक अच्छी ट्यूरिंग संभावना वितरण का उपयोग करता है, लेकिन मैं कुछ बड़े डेटासेट पर अच्छी तरह से तैयार किए गए मॉडल की तलाश कर रहा था, जैसे 1 बी शब्द डेटासेट। कुछ ऐसा जो मैं वास्तव में एक सामान्य डोमेन के लिए परिणामों पर भरोसा कर सकता हूं (केवल समाचार नहीं)

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 


वैसे यह बिल्कुल भी प्रयोग करने योग्य नहीं है लेकिन यह कुछ है। धन्यवाद :)
फ्रेड

यह एक पूर्व-प्रशिक्षित मॉडल है जिसे आप बस डाउनलोड और चला सकते हैं, और आपको लगता है कि "बिल्कुल भी प्रयोग करने योग्य नहीं है" ...
user12075

मुझे लगता है कि आपके और मेरे पास बहुत अलग-अलग परिभाषाएं हैं जो "आसानी से उपयोग करने योग्य" का अर्थ है ... मुझे यह पता लगाने की आवश्यकता होगी कि मुझे (इनपुट और आउटपुट) में टेंसरफ़्लो ओप्स कैसे प्राप्त करना चाहिए (इनपुट और आउटपुट) और वे कैसे व्यवहार करते हैं, यह पता करें कि क्या कोई प्रीप्रोसेसिंग है यह और फिर हर चीज़ को किसी न किसी प्रतिस्‍पर्धा समारोह में लपेटना। मैं यह नहीं कह रहा हूं कि मैं यह नहीं कर सकता, मैं सिर्फ यह कह रहा हूं कि यह "आसानी से उपयोग करने योग्य" फ़ंक्शन में नहीं है जो मैंने दिखाया। लेकिन फिर से, सूचक के लिए धन्यवाद
फ्रेड

क्या आपने गूगल की कोशिश की है? मैंने सुना है कि वे उचित मात्रा में डेटा प्राप्त करते हैं :) सुनिश्चित नहीं हैं कि उनके पास सटीक मैट्रिक्स हैं या नहीं। cloud.google.com/natural-language/docs
flyingmeatball

जवाबों:


5

Spacy पैकेज कई है भाषा मॉडल पर प्रशिक्षित भी शामिल होते हैं, आम क्रॉल

प्राकृतिक भाषा प्रसंस्करण (एनएलपी) में भाषा मॉडल का विशिष्ट अर्थ है। एक भाषा मॉडल टोकन के अनुक्रमों पर एक संभावना वितरण है। टोकन के एक विशिष्ट अनुक्रम को देखते हुए, मॉडल उस अनुक्रम की संभावना को प्रदर्शित कर सकता है। SpaCy के भाषा मॉडल में सिर्फ एक प्रायिकता वितरण से अधिक शामिल हैं।

SpaCy पैकेज को स्थापित करने की आवश्यकता है और भाषा मॉडल को डाउनलोड करने की आवश्यकता है:

$ pip install spacy 
$ python -m spacy download en

तब पायथन की कुछ पंक्तियों के साथ भाषा मॉडल का उपयोग किया जा सकता है:

>>> import spacy
>>> nlp = spacy.load('en')

किसी दिए गए मॉडल और टोकन के लिए, एक स्मूथ लॉग की प्रायिकता का अनुमान है एक टोकन शब्द का प्रकार इसके साथ पाया जा सकता है: token.probविशेषता।


मेरी पिछली टिप्पणियों को हटा दिया गया ... स्पष्ट रूप से स्पाइस में एक उचित भाषा मॉडल ( token.probविशेषता का उपयोग करके ) शामिल है, लेकिन यह केवल बड़े मॉडल संस्करण में बनाया गया है। यदि आप अपने उत्तर को उस जानकारी को शामिल करने के लिए संपादित करते हैं तो मैं आपको इनाम दे सकता हूं। काफी मजेदार है, मैं महीनों से स्पैस का उपयोग कर रहा हूं और कहीं नहीं मैंने देखा कि इसमें यह विशेषता थी
फ्रेड

👍 खुशी है कि आपको कुछ ऐसा मिला जो आपके लिए काम करता है।
ब्रायन स्पिरिंग

फिर से .. यह केवल तभी काम करता है जब आप बड़े अंग्रेजी मॉडल
फ्रेड

6

मुझे लगता है कि स्वीकृत उत्तर गलत है।

token.prob एक विशेष प्रकार के टोकन के लॉग-प्रो है। मुझे लगता है कि 'प्रकार' पीओएस-टैग या नामित इकाई के प्रकार की तरह है (यह स्पैस के प्रलेखन से स्पष्ट नहीं है) और स्कोर सभी प्रकार के अंतरिक्ष पर एक विश्वास उपाय है।

यह भाषा मॉडल द्वारा निर्दिष्ट संभावनाओं के समान नहीं है। एक भाषा मॉडल आपको सभी संभावित टोकन (प्रकार नहीं) पर संभाव्यता वितरण देता है जिसमें कहा गया है कि उनमें से कौन आगे होने की संभावना है।

इस रेपो में न्यूरल लोगों के लिए पूर्व-प्रशिक्षित भार के साथ BERT (एक अत्याधुनिक मॉडल) का उपयोग करने पर बहुत अच्छे दस्तावेज हैं,

मुझे लगता है कि एपीआई आपको सीधे प्रभावित नहीं करता है, लेकिन आपको प्रत्येक टोकन के लिए प्रायिकता स्कोर प्राप्त करने में सक्षम होना चाहिए ( https://github.com/huggingface/pytorch-pretrained-BERT#usage )।


4

मुझे यह भी लगता है कि पहला उत्तर उन कारणों के लिए गलत है जो @ noob333 ने स्पष्ट किए हैं।

लेकिन बर्ट को भाषा के मॉडल के रूप में बॉक्स से बाहर नहीं किया जा सकता है। बर्ट आपको देता है p(word|context(both left and right) )और आप जो चाहते हैं वह गणना करना है p(word|previous tokens(only left contex))। लेखक यहाँ बताता है: https://github.com/google-research/bert/issues/35 आप इसे lm के रूप में क्यों नहीं उपयोग कर सकते हैं।

हालाँकि आप बर्ट को अनुकूलित कर सकते हैं और इसे एक भाषा मॉडल के रूप में उपयोग कर सकते हैं, जैसा कि यहाँ बताया गया है: https://arxiv.org/pdf/1902.04094.pdf

लेकिन आप एक ही रेपो ( https://github.com/huggingface/pytorch-pretrained-BERT ) से खुले आईआईटी gpt या gpt-2 प्री-टेल मॉडल का उपयोग कर सकते हैं

यहां बताया गया है कि आप gpt मॉडल ( https://github.com/huggingface/pytorch-pretrained-BERT/issues/473 ) का उपयोग करते हुए प्रतिरूप की गणना कैसे कर सकते हैं

import math
from pytorch_pretrained_bert import OpenAIGPTTokenizer, OpenAIGPTModel, OpenAIGPTLMHeadModel
# Load pre-trained model (weights)
model = OpenAIGPTLMHeadModel.from_pretrained('openai-gpt')
model.eval()
# Load pre-trained model tokenizer (vocabulary)
tokenizer = OpenAIGPTTokenizer.from_pretrained('openai-gpt')

def score(sentence):
    tokenize_input = tokenizer.tokenize(sentence)
    tensor_input = torch.tensor([tokenizer.convert_tokens_to_ids(tokenize_input)])
    loss=model(tensor_input, lm_labels=tensor_input)
    return math.exp(loss)


a=['there is a book on the desk',
                'there is a plane on the desk',
                        'there is a book in the desk']
print([score(i) for i in a])
21.31652459381952, 61.45907380241148, 26.24923942649312
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.