بيرت هو نموذج اللغة الأكثر حداثة ل 104 لغة. برنامج تعليمي لإطلاق BERT محليًا وعلى Google Colab

الصورة


BERT هي عبارة عن شبكة عصبية من Google ، والتي أظهرت من خلال هامش كبير أحدث النتائج في عدد من المهام. باستخدام BERT ، يمكنك إنشاء برامج AI لمعالجة لغة طبيعية: الإجابة على الأسئلة المطروحة في أي شكل ، وإنشاء برامج الدردشة ، والمترجمين التلقائي ، وتحليل النص ، وهلم جرا.


قامت Google بنشر نماذج BERT المدربة مسبقًا ، ولكن كما هو الحال عادة في التعلم الآلي ، فإنها تعاني من نقص الوثائق. لذلك ، في هذا البرنامج التعليمي سوف نتعلم كيفية تشغيل الشبكة العصبية BERT على الكمبيوتر المحلي ، وكذلك على GPU الخادم المجاني على Google Colab.


لماذا هو ضروري على الإطلاق


لإرسال النص إلى مدخلات الشبكة العصبية ، تحتاج إلى تقديمه بطريقة ما في شكل أرقام. من الأسهل القيام بهذه الرسالة بحرف ، مع تطبيق حرف واحد على كل مدخل للشبكة العصبية. ثم سيتم تشفير كل حرف برقم من 0 إلى 32 (بالإضافة إلى نوع من الهامش لعلامات الترقيم). هذا هو ما يسمى مستوى الحرف.


ولكن يتم الحصول على نتائج أفضل بكثير إذا قدمنا ​​المقترحات ليس بحرف واحد ، ولكن عن طريق تقديم كلمة كاملة (أو على الأقل المقاطع الصوتية) إلى كل إدخال من الشبكة العصبية. سيكون بالفعل مستوى كلمة. الخيار الأسهل هو ترجمة قاموس بكل الكلمات الموجودة ، وإطعام الشبكة عدد الكلمات في هذا القاموس. على سبيل المثال ، إذا كانت كلمة "dog" موجودة في هذا القاموس في مكان 1678 ، فإننا ندخل الرقم 1678 لإدخال الشبكة العصبية لهذه الكلمة.


لكن فقط بلغة طبيعية ، مع كلمة "كلب" ، تظهر العديد من الجمعيات في الحال مرة واحدة في شخص: "رقيق" ، "شرير" ، "صديق لشخص". هل من الممكن ترميز هذه الميزة من تفكيرنا بطريقة ما في العرض التقديمي للشبكة العصبية؟ اتضح ما تستطيع. للقيام بذلك ، يكفي إعادة ترتيب أرقام الكلمات بحيث تكون الكلمات القريبة من المعنى جنبًا إلى جنب. فليكن ، على سبيل المثال ، الرقم "1678" لكلمة "dog" ، وبالنسبة لكلمة "fluffy" ، الرقم 1680. وبالنسبة لكلمة "teapot" ، فإن الرقم هو 9000. وكما ترون ، فإن الرقمين 1678 و 1680 أقرب إلى بعضهما البعض من الرقم 9000.


في الممارسة العملية ، لا يتم تخصيص كل كلمة لعدد واحد ، ولكن عدة - متجه ، على سبيل المثال ، من 32 رقمًا. ويتم قياس المسافات على أنها المسافات بين النقاط التي تشير إليها هذه المتجهات في الفضاء ذي البعد المقابل (بالنسبة للمتجه 32 رقمًا طويلًا ، فهذه مسافة ذات 32 بُعدًا أو 32 محورًا). يسمح لك هذا بمقارنة كلمة واحدة في وقت واحد بعدة كلمات قريبة من المعنى (حسب المحور الذي يجب حسابه). علاوة على ذلك ، يمكن إجراء العمليات الحسابية باستخدام المتجهات. مثال كلاسيكي: إذا قمت بطرح المتجه "رجل" من المتجه الذي يشير إلى كلمة "ملك" وقمت بإضافة المتجه لكلمة "امرأة" ، فإنك تحصل على متجه ناتج معين. وسوف تتوافق بأعجوبة مع كلمة "ملكة". وبالفعل ، "الملك رجل + امرأة = ملكة". السحر! وهذا ليس مثالا تجريديا ، لكنه يحدث بالفعل . بالنظر إلى أن الشبكات العصبية تتكيف بشكل جيد مع التحولات الرياضية على مدخلاتها ، فإن هذا يوفر على ما يبدو كفاءة عالية لهذه الطريقة.


هذا النهج يسمى حفلات الزفاف. جميع حزم التعلم الآلي (TensorFlow ، PyTorch) تسمح للطبقة الأولى من الشبكة العصبية بوضع طبقة خاصة من Embedding Layer ، والتي تقوم بذلك تلقائيًا. وهذا يعني ، عند إدخال الشبكة العصبية ، تقديم رقم الكلمة المعتاد في القاموس ، وترجمة Embedding Layer ، التعلم الذاتي ، كل كلمة إلى متجه بطول محدد ، على سبيل المثال ، 32 رقمًا.


لكنهم سرعان ما أدركوا أنه من الأكثر ربحية تدريب مثل هذا التمرين المتجه للكلمات على مجموعة كبيرة من النصوص ، على سبيل المثال ، على ويكيبيديا بأكملها ، واستخدام متجهات الكلمات الجاهزة في شبكات عصبية محددة بدلاً من تدريبهم مرة أخرى.


هناك عدة طرق لتمثيل الكلمات كنواقل ؛ لقد تطورت تدريجياً: word2vec ، GloVe ، Elmo.


في صيف عام 2018 ، لاحظت OpenAI أنه إذا قمت بتدريب مسبق على شبكة عصبية على بنية Transformer على كميات كبيرة من النص ، فسوف تظهر بشكل غير متوقع وبهامش كبير نتائج ممتازة في العديد من أنواع مختلفة من مهام معالجة اللغة الطبيعية. في الواقع ، فإن مثل هذه الشبكة العصبية في ناتجها تخلق تصورات متجهة للكلمات ، وحتى العبارات الكاملة. ومن خلال تعليق مثل هذا النموذج اللغوي على كتلة صغيرة من زوج من طبقات إضافية من الخلايا العصبية ، يمكنك تدريب هذه الشبكة العصبية لأية مهام.


BERT من Google عبارة عن شبكة GPA متقدمة من OpenAI (ثنائية الاتجاه بدلاً من أحادية الاتجاه ، وما إلى ذلك) ، بناءً على بنية Transformer. في الوقت الحالي ، يعد BERT أحدث التقنيات وفقًا لمعايير NLP الشائعة تقريبًا.


كيف فعلوا ذلك


الفكرة وراء BERT بسيطة للغاية: دعنا نتغذى في الشبكة العصبية بعبارات نستبدل فيها 15 ٪ من الكلمات بـ [MASK] ونقوم بتدريب الشبكة العصبية على التنبؤ بهذه الكلمات المقنعة.


على سبيل المثال ، إذا أرسلنا عبارة "جئت إلى [MASK] واشتريت [MASK]" لإدخال الشبكة العصبية ، فيجب أن تظهر عبارة "store" و "milk" في الخرج. هذا مثال مبسط من صفحة BERT الرسمية ، في الجمل الطويلة يصبح نطاق الخيارات الممكنة أصغر ، وتكون استجابة الشبكة العصبية أكثر تحديدًا.


ولكي تتعلم الشبكة العصبية فهم العلاقة بين الجمل المختلفة ، سنقوم بالإضافة إلى ذلك بتدريبها على التنبؤ بما إذا كانت العبارة الثانية هي استمرار منطقي للأولى. أم أنها عبارة عشوائية لا علاقة لها بالأولى.


لذلك ، لجملتين: "ذهبت إلى المتجر". و "واشترى الحليب هناك". ، يجب أن تجيب الشبكة العصبية على أن هذا منطقي. وإذا كانت العبارة الثانية هي "السماء الكرتونية بلوتو" ، فلا بد لي من الإجابة أن هذا الاقتراح لا علاقة له بالأولى. سنلعب مع كل من هذه الأوضاع بيرت أدناه.


بعد أن دربنا على الشبكة العصبية على مجموعة النصوص من ويكيبيديا ومجموعة الكتب BookCorpus لمدة 4 أيام في 16 TPU ، حصلنا على BERT.


التثبيت والإعداد


ملاحظة : في هذا القسم سنطلق ونلعب مع بيرت على الكمبيوتر المحلي. لتشغيل هذه الشبكة العصبية على وحدة معالجة الرسومات المحلية ، ستحتاج إلى NVidia GTX 970 مع 4 غيغابايت من ذاكرة الفيديو أو أعلى. إذا كنت ترغب فقط في تشغيل BERT في متصفح (لا تحتاج حتى إلى GPU على جهاز الكمبيوتر الخاص بك لهذا) ، فانتقل إلى قسم Google Colab.


أولاً ، قم بتثبيت TensorFlow ، إذا لم يكن لديك بالفعل ، باتباع الإرشادات الواردة من https://www.tensorflow.org/install . لدعم GPU ، يجب أولاً تثبيت CUDA Toolkit 9.0 ، ثم cuDNN SDK 7.2 ، وعندها فقط TensorFlow مع دعم GPU:


pip install tensorflow-gpu 

في الأساس ، هذا يكفي لتشغيل بيرت. ولكن لا توجد تعليمات على هذا النحو ، يمكنك إعداده بنفسك عن طريق فرز المصادر في ملف run_classifier.py (الموقف المعتاد في "التعلم الآلي" هو عندما يتعين عليك الذهاب إلى المصادر بدلاً من الوثائق). لكننا سنفعل ذلك بشكل أسهل ونستخدم غلاف Keras BERT (يمكن أن يكون مفيدًا أيضًا لضبط الشبكة لاحقًا ، لأنه يوفر واجهة Keras مريحة).


للقيام بذلك ، قم بتثبيت Keras نفسها:


 pip install keras 

وبعد كراس بيرت:


 pip install keras-bert 

سنحتاج أيضًا إلى ملف tokenization.py من github BERT الأصلي. إما أن تنقر فوق الزر Raw وحفظه في المجلد باستخدام البرنامج النصي في المستقبل ، أو قم بتنزيل المستودع بأكمله وأخذ الملف من هناك ، أو قم بنسخ نسخة من المستودع باستخدام هذا الرمز https://github.com/blade1780/bert .


الآن حان الوقت لتنزيل الشبكة العصبية المدربة مسبقًا. هناك عدة خيارات لـ BERT ، وكلها مدرجة في صفحة github.com/google-research/bert الرسمية. سنتخذ "BERT-Base ، Multilingual Cased" العالمي متعدد اللغات ، من أجل 104 لغات. قم بتنزيل ملف multi_cased_L-12_H-768_A-12.zip (632 ميغابايت) وقم بفك ضغطه في المجلد باستخدام البرنامج النصي المستقبلي.


كل شيء جاهز ، قم بإنشاء ملف BERT.py ، ثم سيكون هناك القليل من التعليمات البرمجية.


استيراد المكتبات المطلوبة وتعيين المسارات


 # coding: utf-8 import sys import codecs import numpy as np from keras_bert import load_trained_model_from_checkpoint import tokenization # ,     BERT folder = 'multi_cased_L-12_H-768_A-12' config_path = folder+'/bert_config.json' checkpoint_path = folder+'/bert_model.ckpt' vocab_path = folder+'/vocab.txt' 

نظرًا لأنه سيتعين علينا ترجمة أسطر النص العادية إلى تنسيق خاص من الرموز ، فإننا سننشئ كائنًا خاصًا لهذا الغرض. انتبه إلى do_lower_case = False ، نظرًا لأننا نستخدم نموذج Cased BERT ، وهو حساس لحالة الأحرف.


 tokenizer = tokenization.FullTokenizer(vocab_file=vocab_path, do_lower_case=False) 

تحميل النموذج


 model = load_trained_model_from_checkpoint(config_path, checkpoint_path, training=True) model.summary() 

يمكن أن يعمل BERT في وضعين: تخمين الكلمات المفتقدة في العبارة ، أو تخمين ما إذا كانت العبارة الثانية منطقية بعد الأولى. سنفعل كلا الخيارين.


بالنسبة إلى الوضع الأول ، يلزمك تقديم عبارة بالتنسيق:


 [CLS]    [MASK]   [MASK]. [SEP] 

يجب أن تعيد الشبكة العصبية جملة كاملة بالكلمات المملوءة بدلاً من الأقنعة: "أتيت إلى المتجر واشتريت اللبن".


بالنسبة للوضع الثاني ، يجب تغذية كلتا الجملتين مفصولة بفاصل بمدخل الشبكة العصبية:


 [CLS]    . [SEP]   . [SEP] 

يجب أن تجيب الشبكة العصبية عما إذا كانت العبارة الثانية هي استمرار منطقي للأول. أم أنها عبارة عشوائية لا علاقة لها بالأولى.


لكي يعمل BERT ، تحتاج إلى إعداد ثلاثة متجهات ، يبلغ طول كل واحدة منها 512 رقمًا: الرمز المميز ، والإدخال السيني ، والإدخال السيني.


سيقوم Token_input بتخزين الكود المصدري الخاص بنا المترجم إلى الرموز باستخدام الرمز المميز . ستكون العبارة في شكل فهارس في القاموس في بداية هذا المتجه ، وسيتم ملء الباقي بالأصفار.


في mask_input ، يجب أن نضع 1 لجميع المواضع التي يوجد فيها القناع [MASK] ، ونملأ الباقي بالأصفار .


في seg_input ، يجب أن نشير إلى العبارة الأولى (بما في ذلك بدء فاصل CLS و SEP) كـ 0 ، والعبارة الثانية (بما في ذلك نهاية SEP) كـ 1 ، وملء الباقي حتى نهاية المتجه بالأصفار.


لا يستخدم BERT قاموسًا لكلمات كاملة ، بل يستخدم أكثر المقاطع شيوعًا. على الرغم من أنه يحتوي أيضًا على كلمات كاملة. يمكنك فتح ملف vocab.txt في الشبكة العصبية التي تم تنزيلها ومعرفة الكلمات التي تستخدمها الشبكة العصبية عند إدخالها. هناك كلمات كاملة مثل فرنسا. لكن معظم الكلمات الروسية تحتاج إلى تقسيمها إلى مقاطع. لذلك ، يجب تقسيم كلمة "جاء" إلى "مع" و "## ذهب". للمساعدة في تحويل أسطر النص العادية إلى التنسيق الذي يتطلبه BERT ، نستخدم الوحدة النمطية tokenization.py.


الوضع 1: التنبؤ بالكلمات المغلقة بواسطة الرمز [قناع] في عبارة


عبارة الإدخال التي يتم تغذيتها إلى إدخال الشبكة العصبية


 sentence = '   [MASK]   [MASK].' print(sentence) 

تحويله إلى الرموز. المشكلة هي أن الرمز المميز لا يمكنه معالجة علامات الخدمة مثل [CLS] و [MASK] ، على الرغم من أن vocab.txt يحتوي عليها في القاموس. لذلك ، سيتعين علينا تقسيم خطنا يدويًا باستخدام علامات [MASK] وتحديد أجزاء من النص العادي منه لتحويله إلى رموز BERT باستخدام الرمز المميز. أضف أيضًا [CLS] في البداية و [SEP] في نهاية العبارة.


 sentence = sentence.replace(' [MASK] ','[MASK]'); sentence = sentence.replace('[MASK] ','[MASK]'); sentence = sentence.replace(' [MASK]','[MASK]') #    sentence = sentence.split('[MASK]') #     tokens = ['[CLS]'] #      [CLS] #        tokenizer.tokenize(),    [MASK] for i in range(len(sentence)): if i == 0: tokens = tokens + tokenizer.tokenize(sentence[i]) else: tokens = tokens + ['[MASK]'] + tokenizer.tokenize(sentence[i]) tokens = tokens + ['[SEP]'] #      [SEP] 

تحتوي الرموز المميزة الآن على رموز مضمونة ليتم تحويلها إلى فهارس في القاموس. لنقم بذلك:


 token_input = tokenizer.convert_tokens_to_ids(tokens) 

الآن في token_input هناك سلسلة من الأرقام (أرقام الكلمات في قاموس vocab.txt) التي تحتاج إلى إدخالها في إدخال الشبكة العصبية. يبقى فقط لتمديد هذا المتجه بطول 512 عنصر. يُنشئ بناء Python [0] * مجموعة من طول الطول ، مملوءة بالأصفار. أضفه فقط إلى الرموز المميزة الخاصة بنا ، والتي تجمع في صفيفين صفيفتين في واحدة.


 token_input = token_input + [0] * (512 - len(token_input)) 

قم الآن بإنشاء قناع قناع 512 طولًا ، ووضع 1 في كل مكان ، حيث يظهر الرقم 103 في الرموز (التي تتوافق مع العلامة [MASK] في قاموس vocab.txt) ، وملء الباقي بـ 0:


 mask_input = [0]*512 for i in range(len(mask_input)): if token_input[i] == 103: mask_input[i] = 1 

بالنسبة إلى وضع BERT الأول للعملية ، يجب ملء seg_input بالكامل بالأصفار:


 seg_input = [0]*512 

في الخطوة الأخيرة ، تحتاج إلى تحويل صفائف python إلى صفائف numpy مع الشكل (1،512) ، والتي وضعناها في صفيف فرعي []:


 token_input = np.asarray([token_input]) mask_input = np.asarray([mask_input]) seg_input = np.asarray([seg_input]) 

حسنا ، فعلت. الآن تشغيل التنبؤ بالشبكة العصبية!


 predicts = model.predict([token_input, seg_input, mask_input])[0] predicts = np.argmax(predicts, axis=-1) predicts = predicts[0][:len(tokens)] #   ,    ,        

الآن تنسيق النتيجة من الرموز إلى سلسلة مفصولة بمسافات


 out = [] #   out     [MASK],    1  mask_input for i in range(len(mask_input[0])): if mask_input[0][i] == 1: # [0][i], ..   batch   (1,512),       out.append(predicts[i]) out = tokenizer.convert_ids_to_tokens(out) #     out = ' '.join(out) #       out = tokenization.printable_text(out) #    out = out.replace(' ##','') #   : " ##" -> "" 

وإخراج النتيجة:


 print('Result:', out) 

في مثالنا ، لعبارة "جئت إلى [MASK] واشتريت [MASK]." أنتجت الشبكة العصبية النتيجة "منزل" و "هو": "أتيت إلى المنزل واشتريتها". حسنا ، ليس سيئا للغاية لأول مرة. شراء منزل هو بالتأكيد أفضل من الحليب).


أمثلة أخرى (لا أقدم أمثلة فاشلة ، فهناك أكثر من الأمثلة الناجحة. في معظم الحالات ، تعطي الشبكة إجابة فارغة):

الأرض هي الثالثة [قناع] من الشمس
النتيجة: نجمة


أفضل ساندويتش [قناع] بالزبدة
النتيجة: يلتقي


بعد [قناع] الغداء من المفترض أن النوم
النتيجة: هذا


ابتعد عن [قناع]
النتيجة: ## أوه - هل هذا نوع من اللعنة؟ )


[قناع] من الباب
النتيجة: عرض


مع [قناع] المطرقة والأظافر يمكن أن تجعل مجلس الوزراء
النتيجة: مساعدة


وإذا غدا ليس كذلك؟ اليوم ، على سبيل المثال ، ليس [قناع]!
النتيجة: سوف تكون


كيف تتعب من تجاهل [قناع]؟
النتيجة: لها


هناك منطق يومي ، هناك منطق للإناث ، لكن لا يوجد شيء معروف عن الذكر [قناع]
النتيجة: فلسفة


عند النساء ، في سن الثلاثين ، يتم تشكيل صورة للأمير ، تتناسب مع أي [قناع].
النتيجة: رجل


بأغلبية الأصوات ، صوت سنو وايت والأقزام السبعة لصالح [قناع] ، مع صوت واحد ضد.
النتيجة: قرية - الحرف الأول هو الصحيح


قيم شقتك على مقياس من 10 نقاط: [أقنعة] النقاط
النتيجة: 10


لديك [قناع] ، [قناع] و [قناع]!
النتيجة: أحبني أنا - لا ، بيرت ، لم أقصد ذلك على الإطلاق


يمكنك إدخال العبارات الإنجليزية (وأي منها بلغ 104 لغة ، قائمة هنا )


[قناع] يجب أن تستمر!
النتيجة:


الوضع 2: التحقق من اتساق جملتين


وضعنا جملتين متتاليتين سيتم تغذيتهم لإدخال الشبكة العصبية


 sentence_1 = '   .' sentence_2 = '  .' print(sentence_1, '->', sentence_2) 

سننشئ الرموز المميزة بالتنسيق [CLS] statement_1 [SEP] statement_2 [SEP] ، ونحول النص العادي إلى الرموز باستخدام الرموز المميزة:


 tokens_sen_1 = tokenizer.tokenize(sentence_1) tokens_sen_2 = tokenizer.tokenize(sentence_2) tokens = ['[CLS]'] + tokens_sen_1 + ['[SEP]'] + tokens_sen_2 + ['[SEP]'] 

نقوم بتحويل الرموز المميزة للسلسلة إلى مؤشرات رقمية (أرقام الكلمات في قاموس vocab.txt) ونوسع المتجه إلى 512:


 token_input = tokenizer.convert_tokens_to_ids(tokens) token_input = token_input + [0] * (512 - len(token_input)) 

كلمة قناع في هذه الحالة مليئة تماما الأصفار


 mask_input = [0] * 512 

ولكن يجب ملء قناع الاقتراح تحت الجملة الثانية (بما في ذلك SEP النهائي) بوحدات ، وكل شيء آخر مع الأصفار:


 seg_input = [0]*512 len_1 = len(tokens_sen_1) + 2 #   , +2 -   CLS   SEP for i in range(len(tokens_sen_2)+1): # +1, ..   SEP seg_input[len_1 + i] = 1 #   ,   SEP,  #   numpy   (1,) -> (1,512) token_input = np.asarray([token_input]) mask_input = np.asarray([mask_input]) seg_input = np.asarray([seg_input]) 

نمرر العبارات عبر الشبكة العصبية (هذه المرة تكون النتيجة في [1] ، وليس في [0] ، كما كانت أعلاه)


 predicts = model.predict([token_input, seg_input, mask_input])[1] 

ونستمد الاحتمال من أن العبارة الثانية هي مجموعة طبيعية وليست عشوائية من الكلمات


 print('Sentence is okey:', int(round(predicts[0][0]*100)), '%') 

في جملتين:


جئت إلى المتجر. -> واشترى الحليب.


استجابة الشبكة العصبية:


الجملة على ما يرام: 99 ٪


وإذا كانت العبارة الثانية هي "السماء الكرتونية بلوتو" ، فسيكون الجواب:


الجملة على ما يرام: 4 ٪


جوجل كولاب


توفر Google وحدة معالجة الرسومات لخادم Tesla K80 مجانًا مع ذاكرة فيديو بسعة 12 جيجا بايت (تتوفر TPUs الآن ، ولكن تكوينها أكثر تعقيدًا قليلاً). يجب تصميم كل رمز كولاب كدفتر ملاحظات. لبدء تشغيل BERT في متصفح ، ما عليك سوى فتح الرابط


http://colab.research.google.com/github/blade1780/bert/blob/master/BERT.ipynb


من قائمة " وقت التشغيل " ، حدد " تشغيل الكل" ، بحيث يتم توصيل التنزيلات النموذجية والمكتبات الضرورية للمرة الأولى لأول مرة بدء تشغيل جميع الخلايا. توافق على إعادة تعيين جميع وقت التشغيل إذا لزم الأمر.


إذا حدث خطأ ما ...

تأكد من تحديد GPU و Python 3 في قائمة وقت التشغيل -> تغيير نوع وقت التشغيل


إذا لم يكن زر الاتصال نشطًا ، فانقر فوقه ليصبح متصلًا.


الآن قم بتغيير جملة سطور الإدخال ، الجملة_1 و الجملة_2 ، وانقر على أيقونة التشغيل الموجودة على اليسار لبدء الخلية الحالية فقط. تشغيل دفتر الملاحظات بأكمله لم يعد ضروريًا.


يمكنك تشغيل BERT على Google Colab حتى من هاتف ذكي ، ولكن إذا لم يكن مفتوحًا ، فقد تحتاج إلى تمكين مربع اختيار الإصدار الكامل في إعدادات المتصفح.


ما التالي؟


لتدريب BERT على مهمة محددة ، تحتاج إلى إضافة طبقة أو طبقتين من شبكة Feed Forward البسيطة فوقه ، وتدريبها فقط دون لمس شبكة BERT الرئيسية. يمكن القيام بذلك إما على TensorFlow العارية أو من خلال قذيفة Keras BERT. يحدث هذا التدريب الإضافي لمجال معين بسرعة كبيرة ويشبه تمامًا التوليف الدقيق في شبكات الالتفاف. لذلك ، لمهمة SQuAD ، يمكنك تدريب شبكة عصبية على TPU واحد في 30 دقيقة فقط (مقارنة مع 4 أيام على 16 TPU لتدريب BERT نفسها).


للقيام بذلك ، سيكون عليك دراسة كيفية تمثيل الطبقات الأخيرة في BERT ، بالإضافة إلى مجموعة بيانات مناسبة. في صفحة BERT الرسمية https://github.com/google-research/bert ، توجد عدة أمثلة لمهام مختلفة ، بالإضافة إلى إرشادات حول كيفية بدء إعادة التدريب على TPUs السحابية. وسيكون على كل شيء آخر البحث في المصدر في الملفات run_classifier.py و extract_features.py .


PS


تتم استضافة الرمز ودفتر jupyter لجوجل كولاب المقدم هنا في المستودع .


لا ينبغي أن نتوقع المعجزات. لا تتوقع أن يتحدث بيرت مثل الشخص. لا يعني وضع الحالة الحديثة على الإطلاق أن التقدم في البرمجة اللغوية العصبية قد وصل إلى مستوى مقبول. هذا يعني فقط أن BERT أفضل من الموديلات السابقة ، والتي كانت أسوأ. حوار الذكاء الاصطناعى القوي لا يزال بعيدا جدا. بالإضافة إلى ذلك ، يعد BERT نموذجًا أساسيًا للغة ، وليس روبوت محادثة جاهز ، لذلك لا يُظهر نتائج جيدة إلا بعد إعادة التدريب لمهمة محددة.

Source: https://habr.com/ru/post/ar436878/


All Articles