파이썬에 적합한 기본 언어 모델이 있습니까?


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

이것은 Brown Corpus에서 좋은 튜링 확률 분포를 사용하지만 1b 단어 데이터 세트와 같은 일부 큰 데이터 세트에서 잘 만들어진 모델을 찾고있었습니다. 뉴스뿐만 아니라 일반 도메인의 결과를 실제로 신뢰할 수있는 것

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

이것은 단순히 다운로드하여 실행할 수있는 사전 훈련 된 모델이며, "전혀 사용할 수있는 것은 아닙니다"라고 생각합니다.
user12075

나는 당신과 내가 "준비 가능"의 의미에 대해 매우 다른 정의를 가지고 있다고 생각합니다 ... 나는 내가 원하는 tensorflow ops (입력 및 출력)를 얻는 방법과 그들이 어떻게 행동하는지, 전처리가 있는지 알아 내야합니다. 이것을 난처한 기능으로 모든 것을 감싸십시오. 나는 그것을 할 수 없다고 말하는 것이 아니라, 내가 보여준 "사용 가능"기능이 전혀 아니라고 말하는 것입니다. 그러나 다시 한 번, 포인터에 감사드립니다
Fred

Google을 사용해 보셨습니까? 나는 그들이 상당한 양의 데이터를 얻는다고 들었습니다 :) 그들이 당신이 추구하는 정확한 지표가 있는지 확실하지 않습니다. cloud.google.com/natural-language/docs
flyingmeatball

답변:


5

적응의 패키지는 많은이 언어 모델 에 대한 교육을 포함 해, 일반적인 크롤링 .

언어 모델 은 자연어 처리 (NlP)에서 특정 의미를 갖습니다. 언어 모델은 일련의 토큰에 대한 확률 분포입니다. 특정 토큰 시퀀스가 ​​주어지면 모델은 해당 시퀀스가 ​​나타날 확률을 할당 할 수 있습니다. SpaCy의 언어 모델에는 확률 분포 이상의 것이 포함됩니다.

spaCy 패키지를 설치하고 언어 모델을 다운로드해야합니다.

$ pip install spacy 
$ python -m spacy download en

그런 다음 언어 모델을 몇 줄의 Python과 함께 사용할 수 있습니다.

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

주어진 모델과 토큰의 경우 토큰의 단어 유형에 대한 평활 로그 확률 추정값은 다음과 같이 찾을 수 있습니다 token.prob.


내 이전 의견을 삭제했습니다 ... 분명히 spacy에는 적절한 언어 모델 ( token.prob속성 사용)이 포함되어 있지만 큰 모델 버전에서만 빌드되었습니다. 해당 정보를 포함하도록 답변을 편집하면 현상금을 줄 수 있습니다. 충분히 웃긴, 나는 지금 몇 달 동안 spacy를 사용해 왔는데,이 기능이 있다는 것을 알 수 없었습니다
Fred

👍 당신에게 맞는 것을 찾아서 다행입니다.
Brian Spiering

다시 .. 이것은 큰 영어 모델을 다운로드 한 경우에만 작동합니다
Fred

6

수락 된 답변이 잘못되었다고 생각합니다.

token.prob는 특정 유형의 토큰의 로그 프로브입니다. '유형'은 POS 태그 또는 명명 된 엔터티 유형 (스페이서의 문서에서 명확하지 않음)과 같은 것을 의미한다고 생각하며 점수는 모든 유형의 공간에 대한 신뢰도 측정입니다.

이것은 언어 모델에 의해 지정된 확률과 동일 하지 않습니다 . 언어 모델은 유형이 아닌 모든 가능한 토큰에 대한 확률 분포를 통해 다음에 발생할 가능성이 가장 높은 토큰을 알려줍니다.

이 리포지토리에는 신경망에 대해 사전 훈련 된 가중치와 함께 BERT (최첨단 모델)를 사용하는 방법에 대한 훌륭한 문서가 있습니다.

API가 직접 복잡성을 제공하지는 않지만 각 토큰에 대한 확률 점수를 매우 쉽게 얻을 수 있어야한다고 생각합니다 ( https://github.com/huggingface/pytorch-pretrained-BERT#usage ).


4

또한 @ noob333이 설명 한 이유로 첫 번째 대답이 잘못되었다고 생각합니다.

그러나 Bert는 언어 모델로 즉시 사용할 수 없습니다. Bert는 당신 p(word|context(both left and right) )에게 원하는 것을 계산하는 것 p(word|previous tokens(only left contex))입니다. 저자는 여기에 설명합니다 : https://github.com/google-research/bert/issues/35 왜 영화로 사용할 수 없는지.

그러나 https://arxiv.org/pdf/1902.04094.pdf에 설명 된대로 Bert를 적용하여 언어 모델로 사용할 수 있습니다.

그러나 동일한 repo ( https://github.com/huggingface/pytorch-pretrained-BERT ) 에서 열린 ai 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.