มีรูปแบบภาษาที่ดีนอกกรอบสำหรับงูใหญ่หรือไม่?


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

ฉันคิดว่าคุณและฉันมีคำจำกัดความที่แตกต่างกันมากในสิ่งที่ "ใช้งานได้อย่างง่ายดาย" หมายถึง ... ฉันจะต้องคิดหาวิธีการรับ tenorflow ops ที่ฉันต้องการ (อินพุทและเอาท์พุท) และวิธีการทำงาน นี้แล้วห่อทุกอย่างในฟังก์ชั่นความงุนงง ฉันไม่ได้บอกว่าฉันไม่สามารถทำได้ฉันแค่บอกว่ามันไม่ใช่ฟังก์ชั่น "พร้อมใช้งาน" ที่ฉันแสดงให้เห็น แต่ขอขอบคุณอีกครั้งสำหรับตัวชี้
Fred

คุณลอง google แล้วหรือยัง ฉันได้ยินมาว่าพวกเขาได้รับข้อมูลจำนวนพอสมควร :) ไม่แน่ใจว่าพวกเขามีตัวชี้วัดที่แน่นอนที่คุณต้องการหรือไม่ cloud.google.com/natural-language/docs
flyingmeatball

คำตอบ:


5

spacyแพคเกจมีหลายรูปแบบภาษารวมทั้งคนที่ผ่านการฝึกอบรมในการรวบรวมข้อมูลทั่วไป

รูปแบบภาษามีความหมายเฉพาะในการประมวลผลภาษาธรรมชาติ (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 เป็น log-prob ของโทเค็นที่เป็นประเภทเฉพาะ ฉันเดา 'ประเภท' หมายถึงบางสิ่งบางอย่างเช่น POS-tag หรือประเภทของเอนทิตีที่ระบุชื่อ (ไม่ชัดเจนจากเอกสารของ spacy) และคะแนนคือความมั่นใจในการวัดพื้นที่ทุกประเภท

สิ่งนี้ไม่เหมือนกับความน่าจะเป็นที่กำหนดโดยแบบจำลองภาษา แบบจำลองภาษาจะให้การแจกแจงความน่าจะเป็นไปได้กับโทเค็นที่เป็นไปได้ทั้งหมด (ไม่ใช่ประเภท) โดยบอกว่ารูปแบบใดที่น่าจะเกิดขึ้นต่อไป

repo นี้มีเอกสารที่ดีเกี่ยวกับการใช้ BERT (แบบจำลองล้ำสมัย) พร้อมตุ้มน้ำหนักสำหรับเครือข่ายประสาท

ฉันคิดว่า API ไม่ได้ทำให้คุณงงงวยโดยตรง แต่คุณควรจะได้รับคะแนนความน่าจะเป็นสำหรับแต่ละโทเค็นค่อนข้างง่าย ( https://github.com/huggingface/pytorch-pretrained-BERT#usage )


5

ฉันคิดว่าคำตอบแรกนั้นไม่ถูกต้องด้วยเหตุผลที่ @ noob333 อธิบาย

แต่เบิร์ตก็ไม่สามารถใช้งานนอกกรอบเป็นแบบจำลองภาษาได้ เบิร์ตจะช่วยให้คุณและสิ่งที่คุณต้องการคือการคำนวณp(word|context(both left and right) ) p(word|previous tokens(only left contex))ผู้เขียนอธิบายที่นี่: https://github.com/google-research/bert/issues/35ทำไมคุณไม่สามารถใช้มันเป็น lm

อย่างไรก็ตามคุณสามารถปรับใช้ Bert และใช้เป็นโมเดลภาษาดังที่อธิบายไว้ที่นี่: https://arxiv.org/pdf/1902.04094.pdf

แต่คุณสามารถใช้โมเดล ai gpt หรือ gpt-2 แบบเปิดล่วงหน้าได้จาก repo เดียวกัน ( https://github.com/huggingface/pytorch-pretrained-BERT )

นี่คือวิธีที่คุณสามารถคำนวณความฉงนสนเท่ห์โดยใช้โมเดล 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.