ამ პოსტში ჩვენ წარმოგიდგენთ, თუ როგორ ვავარჯიშებთ „მცირე“ მოდელს (84 მილიონი პარამეტრი = 6 ფენა, 768 ფარული ზომა, 12 ყურადღების თავი) – რაც DistilBERT-ის ფენებისა და თავების იდენტური რაოდენობაა – ესპერანტოს ენაზე. შემდგომში მოდელს დავაკორექტირებთ სიტყვის ნაწილების მონიშვნის (part-of-speech tagging) დავალებისთვის. ესპერანტო არის ხელოვნური ენა, რომლის მიზანიც ადვილად სასწავლი ყოფნაა. ჩვენ ის რამდენიმე მიზეზის გამო ავარჩიეთ ამ დემონსტრაციისთვის: (შენიშვნა: ამ პოსტის გასაგებად ესპერანტოს ცოდნა არ დაგჭირდებათ, მაგრამ თუ მისი სწავლა გსურთ, Duolingo-ს აქვს კარგი კურსი 280 ათასი აქტიური მოსწავლით). ჩვენს მოდელს ერქმევა... მოიცადეთ... EsperBERTo 😂. პირველ რიგში, ვიპოვოთ ტექსტური კორპუსი ესპერანტოზე. აქ გამოვიყენებთ OSCAR კორპუსის ესპერანტო ნაწილს INRIA-დან. OSCAR არის მრავალენოვანი, ვრცელი კორპუსი, რომელიც მიღებულია Common Crawl-ის ვებ-დამპებიდან ენის კლასიფიკაციისა და ფილტრაციის მეშვეობით. მონაცემთა ნაკრების ესპერანტო ნაწილი მხოლოდ 299 მეგაბაიტს შეადგენს, ამიტომ მას გავაერთიანებთ ლაიფციგის კორპუსების კოლექციის ესპერანტო ქვეკორპუსთან, რომელიც მოიცავს ტექსტებს მრავალფეროვანი წყაროებიდან, როგორიცაა ახალი ამბები, ლიტერატურა და ვიკიპედია. საბოლოო სავარჯიშო კორპუსის ზომა 3 გიგაბაიტია, რაც მაინც მცირეა – თქვენი მოდელისთვის უკეთეს შედეგებს მიიღებთ, თუ წინასწარი ვარჯიშისთვის მეტ მონაცემს მოიპოვებთ. ჩვენ ვირჩევთ ბაიტების დონის „ბაიტ-წყვილოვანი კოდირების“ (Byte-pair encoding) ტოკენიზატორის (ისეთივე, როგორიც GPT-2-შია) ვარჯიშს, RoBERTa-ს მსგავსი სპეციალური ტოკენებით. მისი ზომა თვითნებურად 52,000-ზე დავაყენოთ. ჩვენ გირჩევთ ბაიტების დონის BPE-ს ვარჯიშს (ნაცვლად, ვთქვათ, WordPiece ტოკენიზატორის, როგორიცაა BERT), რადგან ის ლექსიკას ერთი ბაიტების ანბანიდან დაიწყებს, ასე რომ ყველა სიტყვა დაიყოფა ტოკენებად (აღარ იქნება ტოკენები!). და აი, გამომავალი შედეგის ოდნავ დაჩქარებული კადრი: ჩვენს მონაცემთა ნაკრებზე, ვარჯიშს დაახლოებით 5 წუთი დასჭირდა. 🔥🔥 ვაუ, ეს სწრაფი იყო! ⚡️🔥 ახლა გვაქვს როგორც vocab.json (ყველაზე ხშირი ტოკენების სია სიხშირის მიხედვით), ასევე merges.txt (შერწყმის სია). შესანიშნავია ის, რომ ჩვენი ტოკენიზატორი ოპტიმიზებულია ესპერანტოსთვის. ინგლისურისთვის გაწვრთნილ ზოგად ტოკენიზატორთან შედარებით, უფრო მეტი მშობლიური სიტყვა წარმოდგენილია ერთი, განუყოფელი ტოკენით. დიაკრიტიკული ნიშნები, ანუ ესპერანტოში გამოყენებული აქცენტირებული სიმბოლოები – ĉ, ĝ, ĥ, ĵ, ŝ და ŭ – მშობლიურადაა კოდირებული. ჩვენ ასევე უფრო ეფექტურად წარმოვადგენთ თანმიმდევრობებს. ამ კორპუსზე, კოდირებული თანმიმდევრობების საშუალო სიგრძე დაახლოებით 30%-ით ნაკლებია, ვიდრე GPT-2-ის წინასწარ გაწვრთნილი ტოკენიზატორის გამოყენებისას. აი, როგორ შეგიძლიათ მისი გამოყენება ტოკენიზატორებში, RoBERTa-ს სპეციალური ტოკენების დამუშავების ჩათვლით – რა თქმა უნდა, მისი გამოყენება უშუალოდ transformers-დანაც შეგეძლებათ. განახლება: თანდართული Colab ნოუთბუქი ჩვენს ახალ Trainer-ს უშუალოდ იყენებს, სკრიპტის ნაცვლად. შეგიძლიათ აირჩიოთ თქვენთვის საუკეთესო მიდგომა. ახლა ჩვენს ენობრივ მოდელს transformers-ის run_language_modeling.py სკრიპტის გამოყენებით ვავარჯიშებთ (რომელიც ახლახან გადაერქვა run_lm_finetuning.py-დან, რადგან ახლა უფრო შეუფერხებლად უჭერს მხარს ნულიდან ვარჯიშს). უბრალოდ გახსოვდეთ, რომ --model_name_or_path დატოვოთ None-ზე, რათა ნულიდან ივარჯიშოთ, არსებული მოდელის ან ჩექპოინტის ნაცვლად. ჩვენ RoBERTa-ს მსგავს მოდელს ვავარჯიშებთ, რომელიც BERT-ის მსგავსია რამდენიმე ცვლილებით (დეტალებისთვის იხილეთ დოკუმენტაცია). რადგან მოდელი BERT-ის მსგავსია, მას „ნიღბიანი ენის მოდელირების“ (Masked language modeling) ამოცანაზე ვავარჯიშებთ, ანუ ვწინასწარმეტყველებთ, როგორ შევავსოთ შემთხვევითად დანიღბული (mask) ტოკენები მონაცემთა ნაკრებში. ამას მაგალითის სკრიპტი უზრუნველყოფს. ჩვენ მხოლოდ ორი რამ გვჭირდება: აი, ჩვენი EsperantoDataset-ის მარტივი ვერსია. თუ თქვენი მონაცემთა ნაკრები ძალიან დიდია, შეგიძლიათ აირჩიოთ მაგალითების მყისიერად ჩატვირთვა და ტოკენიზაცია, წინასწარი დამუშავების ნაცვლად. აი, ჰიპერპარამეტრებისა და არგუმენტების ერთი კონკრეტული ნაკრები, რომელსაც სკრიპტს გადავცემთ: როგორც ყოველთვის, აირჩიეთ ყველაზე დიდი სერიის ზომა (batch size), რომლის განთავსებაც შეგიძლიათ თქვენს GPU-ზე/-ებზე. 🔥🔥🔥 დავიწყოთ ვარჯიში!! 🔥🔥🔥 აქ შეგიძლიათ შეამოწმოთ ჩვენი Tensorboard ჰიპერპარამეტრების ერთი კონკრეტული ნაკრებისთვის: ჩვენი მაგალითის სკრიპტები ნაგულისხმევად Tensorboard ფორმატში ინახავს ჩანაწერებს, runs/ საქაღალდეში. შემდეგ თქვენი დაფის სანახავად უბრალოდ გაუშვით tensorboard dev upload --logdir runs – ეს დააყენებს tensorboard.dev-ს, Google-ის მიერ მართულ ჰოსტინგ ვერსიას, რომელიც საშუალებას გაძლევთ გაუზიაროთ თქვენი ML ექსპერიმენტი ნებისმიერს. ვარჯიშისა და შეფასების დანაკარგების შემცირების გარდა, იმის შესამოწმებლად, სწავლობს თუ არა ჩვენი ენობრივი მოდელი რაიმე საინტერესოს, ყველაზე მარტივი გზაა FillMaskPipeline. Pipeline-ები არის მარტივი შემფუთველები ტოკენიზატორებისა და მოდელების გარშემო, და „fill-mask“ ფუნქცია საშუალებას მოგცემთ შეიყვანოთ დანიღბული ტოკენის შემცველი თანმიმდევრობა (აქ, ) და დააბრუნოს ყველაზე სავარაუდო შევსებული თანმიმდევრობების სია, მათი ალბათობებით. კარგი, მარტივი სინტაქსი/გრამატიკა მუშაობს. მოდით ვცადოთ ოდნავ უფრო საინტერესო მოთხოვნა: „Jen la komenco de bela tago“ (ეს არის ლამაზი დღის დასაწყისი), მართლაც! უფრო რთული მოთხოვნებით, შეგიძლიათ შეამოწმოთ, დაიჭირა თუ არა თქვენმა ენობრივმა მოდელმა მეტი სემანტიკური ცოდნა, ან თუნდაც რაიმე სახის (სტატისტიკური) საღი აზრის მსჯელობა. ახლა შეგვიძლია ჩვენი ახალი ესპერანტო ენობრივი მოდელი დავაკორექტიროთ სიტყვის ნაწილების მონიშვნის შემდგომი ამოცანისთვის. როგორც უკვე აღვნიშნეთ, ესპერანტო არის უაღრესად რეგულარული ენა, სადაც სიტყვების დაბოლოებები, როგორც წესი, განაპირობებს სიტყვის გრამატიკულ ნაწილს. ანოტირებული ესპერანტოს მონაცემთა ნაკრების გამოყენებით...