მაღალი ხარისხის მთარგმნელის ადაპტირება: გამოწვევები და პროცესი
სტატია დეტალურად აღწერს Facebook FAIR-ის WMT19-ის ახალი ამბების მთარგმნელობითი სისტემის `transformers` ბიბლიოთეკასთან ადაპტირების (porting) პროცესს. პროექტის მიზანი იყო მაღალი ხარისხის მთარგმნელის ადაპტირება, რისთვისაც თავდაპირველი სისტემის დეტალური შესწავლა გახდა საჭირო. ავტორი განიხილავს პროექტის კომპლექსურობის დაძლევას მცირე ამოცანებად დაყოფით, წინასწარ გაწვრთნილი en-ru/ru-en მოდელებთან მუშაობის უპირატესობებს და ლექსიკონების განსხვავებების (გაერთიანებული vs. ცალკეული) დამუშავების თავისებურებე
საინტერესო პროექტს ვეძებდი სამუშაოდ და სემ შლეიფერმა შემომთავაზა, რომ მაღალი ხარისხის მთარგმნელის ადაპტირებაზე მემუშავა. წავიკითხე მოკლე ნაშრომი: Facebook FAIR-ის WMT19-ის ახალი ამბების მთარგმნელობითი დავალების განაცხადი, რომელიც აღწერს თავდაპირველ სისტემას და გადავწყვიტე, მეცადა. თავიდან წარმოდგენა არ მქონდა, როგორ მივდგომოდი ამ კომპლექსურ პროექტს და სემმა დამეხმარა მის უფრო მცირე ამოცანებად დაყოფაში, რაც ძალიან დიდი დახმარება აღმოჩნდა. ადაპტირების დროს ავირჩიე წინასწარ გაწვრთნილი en-ru/ru-en მოდელებთან მუშაობა, რადგან ორივე ენაზე ვსაუბრობ. ბევრად უფრო რთული იქნებოდა de-en/en-de წყვილებთან მუშაობა, რადგან გერმანული არ ვიცი, და თარგმანის ხარისხის შეფასებამ, მხოლოდ შედეგების წაკითხვითა და გაგებით, ადაპტირების პროცესის მოწინავე ეტაპებზე, დიდი დრო დამიზოგა. ასევე, რადგან საწყისი ადაპტირება en-ru/ru-en მოდელებით გავაკეთე, სრულიად არ ვიცოდი, რომ de-en/en-de მოდელები იყენებდნენ გაერთიანებულ ლექსიკონს, მაშინ როცა პირველი იყენებდა 2 ცალკეულ, განსხვავებული ზომის ლექსიკონს. ამიტომ, როგორც კი 2 ცალკეული ლექსიკონის მხარდაჭერის უფრო რთული სამუშაო შევასრულე, გაერთიანებული ლექსიკონის ამუშავება უმნიშვნელო აღმოჩნდა.
პირველი ნაბიჯი, რა თქმა უნდა, ხრიკზე წასვლა იყო. რატომ უნდა დახარჯო დიდი ძალისხმევა, როცა შეგიძლია მცირე დახარჯო. ამიტომ, დავწერე მოკლე ნოუთბუქი, რომელიც რამდენიმე ხაზი კოდით უზრუნველყოფდა fairseq-ის პროქსის და ახდენდა transformers API-ის ემულაციას. თუ მხოლოდ ძირითადი თარგმანი იყო საჭირო, ეს საკმარისი იქნებოდა. მაგრამ, რა თქმა უნდა, გვინდოდა სრული ადაპტირება, ამიტომ ამ მცირე გამარჯვების შემდეგ, ბევრად უფრო რთულ საკითხებზე გადავედი. ამ სტატიის მიზნებისთვის ვივარაუდოთ, რომ ვმუშაობთ `~/porting` დირექტორიაში, ამიტომ შევქმნათ ეს დირექტორია: ამ სამუშაოსთვის რამდენიმე რამ გვჭირდება დასაინსტალირებელი: მოკლე მიმოხილვისთვის, შემდეგი ფაილები იყო შესაქმნელი და ჩასაწერი: იყო სხვა ფაილებიც, რომლებიც საჭიროებდა მოდიფიკაციას, მათზე სტატიის ბოლოს ვისაუბრებთ.
ადაპტირების პროცესის ერთ-ერთი ყველაზე მნიშვნელოვანი ნაწილია სკრიპტის შექმნა, რომელიც აიღებს მოდელის თავდაპირველი დეველოპერის მიერ მოწოდებულ ყველა ხელმისაწვდომ საწყის მონაცემს, რაც მოიცავს ჩეკპოინტს წინასწარ გაწვრთნილი წონებით, მოდელისა და ტრენინგის კონფიგურაციას, ლექსიკონებსა და ტოკენიზატორის დამხმარე ფაილებს და გადაიყვანს მათ `transformers`-ის მიერ მხარდაჭერილ მოდელის ფაილების ახალ კომპლექტში. საბოლოო კონვერტაციის სკრიპტს ნახავთ აქ: `src/transformers/convert_fsmt_original_pytorch_checkpoint_to_pytorch.py`. ეს პროცესი დავიწყე არსებული კონვერტაციის სკრიპტებიდან ერთ-ერთის, `src/transformers/convert_bart_original_pytorch_checkpoint_to_pytorch.py`, კოპირებით, მისი უმეტესი ნაწილი ამოვშალე და შემდეგ თანდათანობით დავამატე ნაწილები, ადაპტირების პროცესში წინსვლისას.
განვითარების პროცესში მთელ ჩემს კოდს ვტესტავდი კონვერტირებული მოდელის ფაილების ლოკალურ ასლზე, და მხოლოდ ბოლოს, როდესაც ყველაფერი მზად იყო, ავტვირთე ფაილები 🤗 s3-ზე და შემდეგ გავაგრძელე ტესტირება ონლაინ ვერსიასთან მიმართებაში. მოდით, ჯერ შევხედოთ, თუ რა მონაცემებს ვიღებთ fairseq-ის წინასწარ გაწვრთნილი მოდელიდან. ჩვენ გამოვიყენებთ მოსახერხებელ `torch.hub` API-ს, რაც ძალიან აადვილებს ამ ჰაბზე წარდგენილი მოდელების განთავსებას: ეს კოდი ჩამოტვირთავს წინასწარ გაწვრთნილ მოდელს და მის დამხმარე ფაილებს. ეს ინფორმაცია ვიპოვე pytorch hub-ზე fairseq-ის შესაბამის გვერდზე.
იმის სანახავად, თუ რა არის ჩამოტვირთულ ფაილებში, ჯერ სწორი საქაღალდე უნდა ვიპოვოთ `~/.cache`-ის ქვეშ. აჩვენებს: შეიძლება იქ ერთზე მეტი ჩანაწერი გქონდეთ, თუ ჰაბს სხვა მოდელებისთვისაც იყენებდით. მოდით, შევქმნათ სიმბოლური ბმული (symlink), რათა ადვილად მივუთითოთ ამ გაუგებარ ქეშის საქაღალდის სახელს მომავალში: შენიშვნა: გზა შეიძლება განსხვავებული იყოს, როდესაც თავად სცდით, რადგან მოდელის ჰეშის მნიშვნელობა შეიძლება შეიცვალოს. სწორს ნახავთ `~/.cache/torch/hub/pytorch_fairseq/`-ში. თუ ამ საქაღალდეში ჩავიხედავთ: გვაქვს: ამ ფაილებიდან თითოეულს განვიხილავთ შემდეგ სექციებში. აი, მოკლე შესავალი, თუ როგორ თარგმნიან კომპიუტერები ტექსტს დღესდღეობით. კომპიუტერებს არ შეუძლიათ ტექსტის წაკითხვა, მათ მხოლოდ რიცხვებთან შეუძლიათ მუშაობა. ასე რომ, ტექსტთან მუშაობისას უნდა გადავაკეთოთ ერთი ან მეტი ასო რიცხვებად და გადავცეთ კომპიუტერულ პროგრამას. როდესაც პროგრამა დაასრულებს, ისიც რიცხვებს აბრუნებს, რომლებიც ისევ ტექსტად უნდა გადავაქციოთ.
დავიწყოთ ორი წინადადებით რუსულ და ინგლისურ ენებზე და თითოეულ სიტყვას მივანიჭოთ უნიკალური ნომერი: 10-ით დაწყებული რიცხვები რუსულ სიტყვებს უნიკალურ რიცხვებთან აკავშირებს. 20-ით დაწყებული რიცხვები იგივეს აკეთებენ ინგლისური სიტყვებისთვის. თუ რუსული არ იცით, მაინც ხედავთ, რომ სიტყვა я (ნიშნავს 'მე') ორჯერ მეორდება წინადადებაში და მას იგივე ნომერი 10 ენიჭება. იგივე ეხება I (20)-საც, რომელიც ასევე ორჯერ მეორდება. თარგმანის სისტემა მუშაობს შემდეგ ეტაპებზე: თუ გავაერთიანებთ პირველ ორ და ბოლო ორ ნაბიჯს, მივიღებთ 3 ეტაპს: მეორე ეტაპმა შეიძლება დააბრუნოს ერთი ან რამდენიმე შესაძლო თარგმანი. ამ უკანასკნელ შემთხვევაში, გამომძახებელს შეუძლია აირჩიოს ყველაზე შესაფერისი შედეგი. ამ სტატიაში მე მივმართავ სხივური ძიების ალგორითმს (beam search algorithm), რომელიც მრავალი შესაძლო შედეგის ძიების ერთ-ერთი გზაა. სხივის ზომა კი გულისხმობს, თუ რამდენი შედეგი ბრუნდება.
თეგები:
#ხელოვნური ინტელექტი
#პროგრამირება
#transformers
#მანქანური თარგმანი
#fairseq
#მოდელის ადაპტირება
#nmt
წყარო: huggingface.co
AI-ით გადამუშავებული
მსგავსი სტატიები
ტექნოლოგიები
Honor Magic V6: უთხელესი დასაკეცი ტელეფონი? პირველი შთაბეჭდილებები
ტექნოლოგიები
Honor Magic V6: ყველაზე თხელი დასაკეცი სმარტფონი და მისი შთამბეჭდავი შესაძლებლობები
ტექნოლოგიები