გაეცანით ამ სამეურს Notebook Companion-თან ერთად: Sentence Transformers-ის მოდელის დატრენინგება ან ფაინ-ტიუნინგი დიდწილად დამოკიდებულია ხელმისაწვდომ მონაცემებსა და სამიზნე დავალებაზე. მთავარი ასპექტი ორგვარია: ამ სამეურში თქვენ შეძლებთ: Sentence Transformer-ის მოდელში, თქვენ გარდაქმნით ცვლადი სიგრძის ტექსტს (ან გამოსახულების პიქსელებს) ფიქსირებული ზომის ემბედინგად, რომელიც წარმოადგენს ამ მონაცემის მნიშვნელობას. ემბედინგებთან მუშაობის დასაწყებად, იხილეთ ჩვენი წინა სამეური. ეს პუბლიკაცია ფოკუსირებულია ტექსტზე. აი, როგორ მუშაობს Sentence Transformers-ის მოდელები: ეს სქემა აჯამებს პროცესს: არ დაგავიწყდეთ Sentence Transformers-ის ბიბლიოთეკის ინსტალაცია pip install -U sentence-transformers ბრძანებით. კოდში, ეს ორეტაპიანი პროცესი მარტივია: ზემოთ მოცემული კოდიდან ხედავთ, რომ Sentence Transformers-ის მოდელები შედგება მოდულებისგან, ანუ ფენების ჩამონათვალისგან, რომლებიც თანმიმდევრულად სრულდება. შეყვანილი ტექსტი შედის პირველ მოდულში, ხოლო საბოლოო გამოსავალი ბოლო კომპონენტიდან მოდის. მიუხედავად სიმარტივისა, ზემოთ მოცემული მოდელი Sentence Transformers-ის მოდელების ტიპიური არქიტექტურაა. საჭიროების შემთხვევაში, შესაძლებელია დამატებითი ფენების დამატება, მაგალითად, მკვრივი (dense), სიტყვათა ტომრის (bag of words) და კონვოლუციური (convolutional) ფენები. რატომ არ გამოვიყენოთ Transformer-ის მოდელი, როგორიცაა BERT ან Roberta, პირდაპირ მთლიანი წინადადებებისა და ტექსტებისთვის ემბედინგების შესაქმნელად? ამას სულ მცირე ორი მიზეზი აქვს. ამ სექციაში ჩვენ ვაშენებთ Sentence Transformers-ის მოდელს ნულიდან. თუ გსურთ არსებული Sentence Transformers-ის მოდელის ფაინ-ტიუნინგი, შეგიძლიათ გამოტოვოთ ზემოთ მოცემული ნაბიჯები და მისი იმპორტი Hugging Face Hub-იდან. Sentence Transformers-ის მოდელების უმეტესობა შეგიძლიათ იპოვოთ „წინადადების მსგავსების“ (Sentence Similarity) დავალებაში. აქ ჩვენ ვტვირთავთ „sentence-transformers/all-MiniLM-L6-v2“ მოდელს: ახლა ყველაზე მნიშვნელოვანი ნაწილი: მონაცემთა ნაკრების ფორმატი. Sentence Transformers-ის მოდელის დასატრენინგებლად, როგორმე უნდა აცნობოთ მას, რომ ორ წინადადებას აქვს მსგავსების გარკვეული ხარისხი. ამიტომ, მონაცემთა თითოეული მაგალითი საჭიროებს ეტიკეტს ან სტრუქტურას, რომელიც მოდელს საშუალებას მისცემს გაიგოს, მსგავსია თუ განსხვავებულია ორი წინადადება. სამწუხაროდ, არ არსებობს მონაცემების მომზადების ერთი უნივერსალური გზა Sentence Transformers-ის მოდელის დასატრენინგებლად. ეს დიდწილად დამოკიდებულია თქვენს მიზნებსა და მონაცემების სტრუქტურაზე. თუ არ გაქვთ მკაფიო ეტიკეტი, რაც ყველაზე სავარაუდო სცენარია, მისი გამოყვანა შესაძლებელია დოკუმენტების დიზაინიდან, საიდანაც მიიღეთ წინადადებები. მაგალითად, ორ წინადადებას ერთსა და იმავე ანგარიშში უფრო მეტი მსგავსება უნდა ჰქონდეს, ვიდრე ორ წინადადებას სხვადასხვა ანგარიშში. მეზობელი წინადადებები შეიძლება უფრო მეტად იყოს შესადარი, ვიდრე არამეზობელი წინადადებები. გარდა ამისა, თქვენი მონაცემების სტრუქტურა გავლენას მოახდენს იმაზე, თუ რომელ დანაკარგის ფუნქციას (loss function) გამოიყენებთ. ეს განხილული იქნება შემდეგ სექციაში. გახსოვდეთ, რომ ამ პუბლიკაციისთვის განკუთვნილი Notebook Companion-ში უკვე განხორციელებულია მთელი კოდი. მონაცემთა ნაკრების კონფიგურაციების უმეტესობა ოთხი ფორმიდან ერთ-ერთს მიიღებს (ქვემოთ იხილავთ თითოეული შემთხვევის მაგალითებს): მაგალითად, ამ სამეურში თქვენ დაატრენინგებთ Sentence Transformer-ს მეოთხე შემთხვევაში მოცემული მონაცემთა ნაკრების გამოყენებით. შემდეგ კი მოახდენთ მის ფაინ-ტიუნინგს მეორე შემთხვევაში მოცემული მონაცემთა ნაკრების კონფიგურაციის გამოყენებით (იხილეთ Notebook Companion ამ ბლოგისთვის). გაითვალისწინეთ, რომ Sentence Transformers-ის მოდელები შეიძლება დატრენინგდეს ადამიანის მიერ ეტიკეტირებით (შემთხვევები 1 და 3) ან ტექსტის ფორმატირებიდან ავტომატურად გამოყვანილი ეტიკეტებით (ძირითადად შემთხვევა 2; თუმცა შემთხვევა 4 არ მოითხოვს ეტიკეტებს, უფრო რთულია ტრიპლეტში მონაცემების მოძიება, თუ მას MegaBatchMarginLoss ფუნქციის მსგავსად არ დაამუშავებთ). Hugging Face Hub-ზე მოცემულია მონაცემთა ნაკრებები თითოეული ზემოთ მოცემული შემთხვევისთვის. გარდა ამისა, Hub-ზე არსებულ მონაცემთა ნაკრებებს აქვს Dataset Preview ფუნქციონალი, რომელიც საშუალებას გაძლევთ იხილოთ მონაცემთა ნაკრებების სტრუქტურა მათ გადმოწერამდე. წარმოგიდგენთ მონაცემთა ნაკრებების მაგალითებს თითოეული შემთხვევისთვის: შემთხვევა 1: ისეთივე დაყენება, როგორც ბუნებრივი ენის ინფერენციისთვის (Natural Language Inference), შეიძლება გამოყენებულ იქნას, თუ გაქვთ (ან ქმნით) ეტიკეტი, რომელიც მიუთითებს ორ წინადადებას შორის მსგავსების ხარისხს; მაგალითად {0,1,2}, სადაც 0 არის წინააღმდეგობა და 2 არის გამოყვანა (entailment). გადახედეთ SNLI მონაცემთა ნაკრების სტრუქტურას. შემთხვევა 2: Sentence Compression მონაცემთა ნაკრებს აქვს მაგალითები, რომლებიც შედგება დადებითი წყვილებისგან. თუ თქვენს მონაცემთა ნაკრებს აქვს ორზე მეტი დადებითი წინადადება თითო მაგალითზე, მაგალითად, ხუთეულები (quintets) COCO Captions-ის ან Flickr30k Captions-ის მონაცემთა ნაკრებებში, შეგიძლიათ მაგალითები ისე დააფორმატოთ, რომ მიიღოთ დადებითი წყვილების განსხვავებული კომბინაციები. შემთხვევა 3: TREC მონაცემთა ნაკრებს აქვს მთელი რიცხვითი ეტიკეტები, რომლებიც მიუთითებს თითოეული წინადადების კლასს. Yahoo Answers Topics მონაცემთა ნაკრების თითოეული მაგალითი შეიცავს სამ წინადადებას და ეტიკეტს, რომელიც მიუთითებს მის თემაზე; ამგვარად, თითოეული მაგალითი შეიძლება დაიყოს სამ ნაწილად. შემთხვევა 4: Quora Triplets მონაცემთა ნაკრებს აქვს ტრიპლეტები (ანკერი, პოზიტიური, ნეგატიური) ეტიკეტების გარეშე. შემდეგი ნაბიჯი არის მონაცემთა ნაკრების გადაყვანა Sentence Transformers-ის მოდელისთვის გასაგებ ფორმატში. მოდელს არ შეუძლია სტრიქონების ნედლეული სიების მიღება. თითოეული მაგალითი უნდა გარდაიქმნას sentence_transformers.InputExample კლასად, შემდეგ კი torch.utils.data.DataLoader კლასად, რათა მოხდეს მაგალითების დაჯგუფება და შერევა. დააინსტალირეთ Hugging Face Datasets pip install datasets ბრძანებით. შემდეგ იმპორტირება მოახდინეთ მონაცემთა ნაკრების load_dataset ფუნქციით: ეს გზამკვლევი იყენებს ეტიკეტირების გარეშე ტრიპლეტების მონაცემთა ნაკრებს.