!!! يمكنك تشغيل هذا الكمبيوتر الدفتري محليًا (إذا كان لديك كل التبعيات ووحدة معالجة الرسومات) أو على Google Colab.
يرجى التأكد من متطلبات البرامج التالية إذا كنت ستعمل على المستوى المحلي:
python 3.6 .9
docker - ce > 19.03 . 5
docker - API 1.40
nvidia - container - toolkit > 1.3 . 0 - 1
nvidia - container - runtime > 3.4 . 0 - 1
nvidia - docker2 > 2.5 . 0 - 1
nvidia - driver >= 455.23
تجمع مجموعة بيانات SQuAD2.0 بين 100000 سؤال في SQuAD1.1 مع أكثر من 50000 سؤال غير قابل للإجابة تمت كتابتها بطريقة عدائية من قبل العاملين الجماعيين لتبدو مشابهة للأسئلة التي يمكن الإجابة عليها.
فيما يلي نموذج لتنسيق مجموعة بيانات الإجابة على أسئلة الفريق:
يحتوي كل title
على إدخال فقرة واحد أو عدة paragraph
، يتكون كل منها من context
question-answer entries (qas)
.
يحتوي كل إدخال سؤال وجواب على question
id
فريد عالميًا
العلامة المنطقية is_impossible
، والتي توضح ما إذا كان السؤال قابلاً للإجابة أم لا: إذا كان السؤال قابلاً للإجابة، فإن إدخال answer
واحد يحتوي على نطاق النص وفهرس أحرف البداية في السياق. إذا لم يكن السؤال قابلاً للإجابة، فسيتم توفير قائمة answers
فارغة.
!!! بالنسبة لمهمة ضمان الجودة، تقبل مجموعة أدوات NVIDIA البيانات بتنسيق SQuAD JSON. إذا كانت لديك بياناتك بأي تنسيق آخر، فتأكد من تحويلها بتنسيق SQuAD كما هو موضح أدناه.
{
"data" : [
{
"title" : "Super_Bowl_50" ,
"paragraphs" : [
{
"context" : "Super Bowl 50 was an American football game to determine the champion of the National Football League (NFL) for the 2015 season. The American Football Conference (AFC) champion Denver Broncos defeated the National Football Conference (NFC) champion Carolina Panthers 24 u2013 10 to earn their third Super Bowl title. The game was played on February 7, 2016, at Levi's Stadium in the San Francisco Bay Area at Santa Clara, California. As this was the 50th Super Bowl, the league emphasized the " golden anniversary " with various gold-themed initiatives, as well as temporarily suspending the tradition of naming each Super Bowl game with Roman numerals (under which the game would have been known as " Super Bowl L " ), so that the logo could prominently feature the Arabic numerals 50." ,
"qas" : [
{
"question" : "Where did Super Bowl 50 take place?" ,
"is_impossible" : "false" ,
"id" : "56be4db0acb8001400a502ee" ,
"answers" : [
{
"answer_start" : "403" ,
"text" : "Santa Clara, California"
}
]
},
{
"question" : "What was the winning score of the Super Bowl 50?" ,
"is_impossible" : "true" ,
"id" : "56be4db0acb8001400a502ez" ,
"answers" : [
]
}
]
}
]
}
]
}
إنه في الأساس أمر واحد فقط لتشغيل المعالجة المسبقة للبيانات والتدريب والضبط الدقيق والتقييم والاستدلال والتصدير! تتم جميع التكوينات من خلال ملفات مواصفات YAML. توجد نماذج لملفات المواصفات متاحة بالفعل لتستخدمها مباشرة أو كمرجع لإنشاء ملف خاص بك. من خلال ملفات المواصفات هذه، يمكنك ضبط العديد من المقابض مثل النموذج ومجموعة البيانات والمعلمات الفائقة والمحسن وما إلى ذلك.
لتدريب نموذج ضمان الجودة بتنسيق NVIDIA، نستخدم الأوامر التالية:
# set language model and tokenizer to be used
config . model . language_model . pretrained_model_name = "bert-base-uncased"
config . model . tokenizer . tokenizer_name = "bert-base-uncased"
# path where model will be saved
config . model . nemo_path = f" { WORK_DIR } /checkpoints/bert_squad_v2_0.nemo"
trainer = pl . Trainer ( ** config . trainer )
model = BERTQAModel ( config . model , trainer = trainer )
trainer . fit ( model )
trainer . test ( model )
model . save_to ( config . model . nemo_path )
مزيد من التفاصيل حول هذه الوسائط موجودة في Question_Answering.ipynb
!!! تتبع ملفات التقييم (للتحقق من الصحة والاختبار) التنسيق أعلاه باستثناء أنها يمكن أن تقدم أكثر من إجابة لنفس السؤال. !!!يتبع ملف الاستدلال التنسيق أعلاه باستثناء أنه لا يتطلب answers
والكلمات الأساسية is_impossible
.
# Load saved model
model = BERTQAModel . restore_from ( config . model . nemo_path )
eval_device = [ config . trainer . devices [ 0 ]] if isinstance ( config . trainer . devices , list ) else 1
model . trainer = pl . Trainer (
devices = eval_device ,
accelerator = config . trainer . accelerator ,
precision = 16 ,
logger = False ,
)
config . exp_manager . create_checkpoint_callback = False
exp_dir = exp_manager ( model . trainer , config . exp_manager )
def dump_json ( filepath , data ):
with open ( filepath , "w" ) as f :
json . dump ( data , f )
def create_inference_data_format ( context , question ):
squad_data = { "data" : [{ "title" : "inference" , "paragraphs" : []}], "version" : "v2.1" }
squad_data [ "data" ][ 0 ][ "paragraphs" ]. append (
{
"context" : context ,
"qas" : [
{ "id" : 0 , "question" : question ,}
],
}
)
return squad_data
context = "The Amazon rainforest is a moist broadleaf forest that covers most of the Amazon basin of South America. This basin encompasses 7,000,000 square kilometres (2,700,000 sq mi), of which 5,500,000 square kilometres (2,100,000 sq mi) are covered by the rainforest. The majority of the forest is contained within Brazil, with 60% of the rainforest, followed by Peru with 13%, and Colombia with 10%."
question = "Which country has the most?"
inference_filepath = "inference.json"
inference_data = create_inference_data_format ( context , question )
dump_json ( inference_filepath , inference_data )
predictions = model . inference ( "inference.json" )
question = predictions [ 1 ][ 0 ][ 0 ][ "question" ]
answer = predictions [ 1 ][ 0 ][ 0 ][ "text" ]
probability = predictions [ 1 ][ 0 ][ 0 ][ "probability" ]
print ( f" n > Question: { question } n > Answer: { answer } n Probability: { probability } " )
100 % | ██████████ | 1 / 1 [ 00 : 00 < 00 : 00 , 184.29 it / s ]
100 % | ██████████ | 1 / 1 [ 00 : 00 < 00 : 00 , 8112.77 it / s ]
> Question : Which country has the most ?
> Answer : Brazil
Probability : 0.9688649039578262
في هذه الدراسة، يتم استخدامه من سؤال-الإجابة-التدريب-final.ipynb. يمكنك العثور على مزيد من المعلومات هنا.