A Catalan Albert (A Lite Bert) ، يأخذ Google التعلم الخاضع للإشراف على تمثيلات اللغة.
تم تدريبه على مجموعة من 19.557.475 أزواج من الجملة (التي تحتوي على 729 مليون كلمة فريدة) مستخرجة من مجموعة بيانات أوسكار في INRIA. نستخدم مجموعة التحقق من صحة 833.259 أزواج الجملة لتقييم النموذج.
يمكنك قراءة ورقة ألبرت الأصلية هنا.
وهي متوفرة في صفحة Huggingface Hub Page
| نموذج | قوس. | بيانات التدريب | العب معها | تصوره |
|---|---|---|---|---|
codegram / calbert-tiny-uncased | صغير (غير قائم) | أوسكار (4.3 جيجابايت من النص) | بطاقة على محور الطراز | تصور في Exbert |
codegram / calbert-base-uncased | القاعدة (غير قائدا) | أوسكار (4.3 جيجابايت من النص) | بطاقة على محور الطراز | تصور في Exbert |
تحتاج فقط إلى مكتبة transformers . لا شيء آخر لاستنساخ أو تثبيت.
لاختيار إصدار النموذج الذي يجب استخدامه ( tiny ، أو base ) ، ضع في اعتبارك أن النماذج الأصغر أقل قوة ، ولكنها لا يمكن تشغيلها.
pip install transformers from transformers import AutoModel , AutoTokenizer
tokenizer = AutoTokenizer . from_pretrained ( "codegram/calbert-base-uncased" )
model = AutoModel . from_pretrained ( "codegram/calbert-base-uncased" )
model . eval () # disable dropoutالآن على حالتي الاستخدام الرئيسية التي يمكنك القيام بها.
هذه هي أبسط حالة استخدام ، ولكنها ليست الأكثر فائدة. لا يزال ، ها هو! مهما كانت الكلمات التي تريد إخفاءها ، استخدم الرمز المميز الخاص [MASK] للإشارة إليها. سيقوم النموذج بإخراج المرشحين الأكثر احتمالا للكلمة المقنعة.
from transformers import pipeline
calbert_fill_mask = pipeline ( "fill-mask" , model = "codegram/calbert-base-uncased" , tokenizer = "codegram/calbert-base-uncased" )
results = calbert_fill_mask ( "M'agrada [MASK] això" )
# results
# [{'sequence': "[CLS] m'agrada molt aixo[SEP]", 'score': 0.614592969417572, 'token': 61},
# {'sequence': "[CLS] m'agrada moltíssim aixo[SEP]", 'score': 0.06058056280016899, 'token': 4867},
# {'sequence': "[CLS] m'agrada més aixo[SEP]", 'score': 0.017195818945765495, 'token': 43},
# {'sequence': "[CLS] m'agrada llegir aixo[SEP]", 'score': 0.016321714967489243, 'token': 684},
# {'sequence': "[CLS] m'agrada escriure aixo[SEP]", 'score': 0.012185849249362946, 'token': 1306}]يمكن استخدام متجه الميزة المستخرجة لفهرسة المستندات كمتجهات كثيفة في Elasticsearch على سبيل المثال ، وإجراء عمليات البحث عن التشابه.
حالة الاستخدام الأخرى هي فهم اللغة الطبيعية -استخدام هذه المتجهات كتمثيل مجردة للمستندات/الجمل التي يمكن استخدامها كمدخلات لنماذج أخرى مثل المصنفات.
إليك كيفية استخراج المتجهات من جملة أو وثيقة:
import torch
# Tokenize in sub-words with SentencePiece
tokenized_sentence = tokenizer . tokenize ( "M'és una mica igual" )
# ['▁m', "'", 'es', '▁una', '▁mica', '▁igual']
# 1-hot encode and add special starting and end tokens
encoded_sentence = tokenizer . encode ( tokenized_sentence )
# [2, 109, 7, 71, 36, 371, 1103, 3]
# NB: Can be done in one step : tokenize.encode("M'és una mica igual")
# Feed tokens to Calbert as a torch tensor (batch dim 1)
encoded_sentence = torch . tensor ( encoded_sentence ). unsqueeze ( 0 )
embeddings , _ = model ( encoded_sentence )
embeddings . size ()
# torch.Size([1, 8, 768])
embeddings . detach ()
# tensor([[[-0.0261, 0.1166, -0.1075, ..., -0.0368, 0.0193, 0.0017],
# [ 0.1289, -0.2252, 0.9881, ..., -0.1353, 0.3534, 0.0734],
# [-0.0328, -1.2364, 0.9466, ..., 0.3455, 0.7010, -0.2085],
# ...,
# [ 0.0397, -1.0228, -0.2239, ..., 0.2932, 0.1248, 0.0813],
# [-0.0261, 0.1165, -0.1074, ..., -0.0368, 0.0193, 0.0017],
# [-0.1934, -0.2357, -0.2554, ..., 0.1831, 0.6085, 0.1421]]]) هذا جزء من البحث التطبيقي الذي نقوم به في CodeGram (الذي يشكر على الوقت والحساب!).
كان هذا بمثابة الكثير من الألم للبناء دون تعانق محولات ومكتبات الرمز المميزات. شكرًا لك على جعل NLP لطيفًا بالفعل للعمل معه!
أيضًا ، بفضل Google Research لإنشاء Albert وفتح المصدر في المقام الأول.
ألبرت نموذج لغة ، أي شبكة عصبية يمكنها تعلم التسلسلات بهيكل معين ، مثل الجمل في اللغة الطبيعية (ولكن ليس فقط اللغة الطبيعية!).
لكن كيف يتعلمون اللغة؟ يتم تدريب نماذج اللغة المختلفة بمهام ذريعة مختلفة ، وهي التحديات التي تقدمها لهم حتى يتمكنوا من تعلم كيفية عمل اللغة. والفكرة هي أنه من أجل الحصول على جيدة بشكل جيد في هذه المهمة الواحدة ، يجب عليهم تعلم قواعد اللغة بشكل غير مباشر ، وحتى دلالاتها وأسلوبها.
عادة ما يتم تدريب نماذج اللغة التقليدية (المعروفة أيضًا باسم السببية ) بمهمة التنبؤ بالكلمة التالية في تسلسل ، مثل هذا:
ومع ذلك ، فإن ألبرت من عائلة أخرى تسمى نماذج اللغة المقنعة . في هذه العائلة ، فإن مهمة الذريعة التي يتعين عليهم تعلمها متشابهة ، ولكن بدلاً من التنبؤ دائمًا بالكلمة الأخيرة في تسلسل ، يتم تحويل بعض الكلمات في الجملة بشكل عشوائي إلى فراغات (أو ملثمة ) ، مثل هذا:
هذه المهمة أكثر صعوبة قليلاً ، والأهم من ذلك ، تتطلب فهم السياق المحيط بالفراغ بشكل أفضل.
تبين ، بمجرد أن يصبح نموذج اللغة جيدًا حقًا ، في مهمة ذريعة لا معنى لها ، يمكن إعادة استخدامه بسهولة لمهام أكثر إثارة للاهتمام.
بمجرد أن تتعلم اللغة القواعد والدلالات ، يمكن أن تصبح مصنفًا جيدًا جدًا للجمل ، وحتى المستندات الكاملة ، على سبيل المثال.
إذا قمت بتدريسها بعد ذلك بتصنيف التغريدات أو المستندات إلى فئات (أو تحديد المشاعر ، أو السمية على سبيل المثال) ، لم تعد ترى مجرد مجموعة من الشخصيات المربكة ، بل إنها "قراءة" المستند على مستوى أكثر تجريدية ، لذلك يمكن أن "منطقيًا" بسهولة أكبر. (لاحظ اقتباسات الهواء ، هذا ليس سحرًا ولكنه ربما يكون أقرب شيء.)
لأنه لا توجد نماذج لغة في الكاتالونية! وهناك الكثير من النص الكاتالوني الذي يجب معالجته. (في كاتالونيا).
لإدارة التبعية ، نستخدم الشعر (و Docker بالطبع).
pip install -U poetry
poetry install
poetry shell صورة الإنتاج لتدريب النموذج تحت docker/ ، وتسمى codegram/calbert . أنه يحتوي على جميع أحدث التبعيات ، ولكن لا يوجد رمز - ستقوم DeepKit بشحن الكود في كل تجربة (اقرأ لمعرفة المزيد حول DeepKit).
كل التكوين يعيش تحت config . هناك يمكنك التحكم في المعلمات المتعلقة بالتدريب ، والرمز ، وكل شيء ، وحتى اختيار إصدار النموذج الذي يجب تدريبه.
كل التكوين يمكن تجاوزه ، لأنه تكوين هيدرا. تحقق من مستنداتهم.
تعيش مجموعة فرعية صغيرة من مجموعة البيانات تحت dist/data حتى تتمكن من تدريب نموذج صغير وإجراء تجارب سريعة محليًا.
لتنزيل مجموعة البيانات الكاملة وتقسيمها تلقائيًا في التدريب / التحقق ، فقط قم بتشغيل هذا الأمر:
python -m calbert download_data --out-dir dataset الرمز المميزات المسبق في dist/tokenizer-{cased,uncased} . يتم تدريبهم فقط على مجموعة التدريب الكاملة.
إذا كنت ترغب في إعادة تدريب الرمز المميز (بشكل افتراضي غير قائم):
python -m calbert train_tokenizer --input-file dataset/train.txt --out-dir tokenizerلتدريب واحد مغلف ، فقط تجاوز تكوين هيدرا المناسب:
python -m calbert train_tokenizer --input-file dataset/train.txt --out-dir tokenizer vocab.lowercase=Falseنحن نستخدم DeepKit لتشغيل وتتبع التجارب. قم بتنزيله مجانًا لمنصة الاختيار الخاصة بك إذا كنت ترغب في التشغيل محليًا ، أو التحقق من مستنداتهم لتشغيلها مقابل خادم المجتمع المجاني.
للتأكد من أن كل شيء يعمل ، دعنا ندرب نموذج اختبار مع صورة Docker الفعلية في DeepKit:
deepkit run test.deepkit.ymlبشكل افتراضي ، سيتم تدريبه في مثيل DeepKit المحلي ، باستخدام وحدة المعالجة المركزية الخاصة بك. اقرأ مستنداتهم لمعرفة كيفية تخصيص عمليات التشغيل الخاصة بك.
قم بتكوين مجموعة في DeepKit المحلية مع جهاز واحد على الأقل مع وحدة معالجة الرسومات.
deepkit run --clusterبمجرد حصولك على نموذج مدرب ، يمكنك تصديره لاستخدامه كنموذج قياسي محولات LuggingFace.
على سبيل المثال ، دعنا نتخيل أنك دربت نموذجًا base-uncased وتريد تصديره.
قم بتنزيل مجلد export من المخرجات في تشغيل DeepKit الخاص بك ، وتشغيله:
mv export calbert-base-uncased
transformers-cli login
transformers-cli upload exportmake test