Sentence Transformers-ის დახვეწა (finetuning) ამჟამად მოიცავს რამდენიმე კომპონენტს, მათ შორის მონაცემთა ნაკრებებს (datasets), დანაკარგის ფუნქციებს (loss functions), ვარჯიშის არგუმენტებს (training arguments), შემფასებლებს (evaluators) და თავად ახალ ტრენერს (trainer). თითოეულ ამ კომპონენტს დეტალურად განვიხილავ და მოვიყვან მაგალითებს, თუ როგორ გამოვიყენოთ ისინი ეფექტური მოდელების სავარჯიშოდ. Sentence Transformer-ის მოდელების დახვეწას შეუძლია მნიშვნელოვნად გააუმჯობესოს მათი შესრულება კონკრეტულ ამოცანებზე. ეს განპირობებულია იმით, რომ თითოეული ამოცანა მოითხოვს მსგავსების უნიკალურ გაგებას. განვიხილოთ რამდენიმე საინფორმაციო სტატიის სათაური მაგალითისთვის: გამოყენების შემთხვევის მიხედვით, შესაძლოა გვსურდეს ამ ტექსტებისთვის მსგავსი ან განსხვავებული ემბედინგები. მაგალითად, საინფორმაციო სტატიების კლასიფიკაციის მოდელმა შეიძლება ეს ტექსტები მსგავსად მიიჩნიოს, რადგან ორივე ტექნოლოგიის კატეგორიას მიეკუთვნება. მეორეს მხრივ, სემანტიკური ტექსტური მსგავსების ან მოძიების მოდელმა ისინი განსხვავებულად უნდა მიიჩნიოს მათი განსხვავებული მნიშვნელობების გამო. Sentence Transformer-ის მოდელების ვარჯიში მოიცავს შემდეგ კომპონენტებს: ახლა კი, მოდით, უფრო დეტალურად განვიხილოთ თითოეული ეს კომპონენტი. SentenceTransformerTrainer იყენებს datasets.Dataset ან datasets.DatasetDict ინსტანციებს ვარჯიშისა და შეფასებისთვის. შეგიძლიათ მონაცემების ჩატვირთვა Hugging Face Datasets Hub-დან ან ადგილობრივი მონაცემების გამოყენება სხვადასხვა ფორმატში, როგორიცაა CSV, JSON, Parquet, Arrow ან SQL. შენიშვნა: Hugging Face-ის ბევრი მონაცემთა ნაკრები, რომელიც Sentence Transformers-თან თავსებადია, მონიშნულია sentence-transformers ტეგით, რაც საშუალებას გაძლევთ მარტივად იპოვოთ ისინი შემდეგ მისამართზე: https://huggingface.co/datasets?other=sentence-transformers. კატეგორიულად გირჩევთ, დაათვალიეროთ ეს მონაცემთა ნაკრებები, რათა იპოვოთ სასწავლო მონაცემები, რომლებიც შეიძლება სასარგებლო იყოს თქვენი ამოცანებისთვის. Hugging Face Hub-დან მონაცემების ჩასატვირთად გამოიყენეთ load_dataset ფუნქცია: ზოგიერთ მონაცემთა ნაკრებს, როგორიცაა sentence-transformers/all-nli, აქვს მრავალი ქვეჯგუფი სხვადასხვა მონაცემთა ფორმატით. თქვენ უნდა მიუთითოთ ქვეჯგუფის სახელი მონაცემთა ნაკრების სახელთან ერთად. თუ გაქვთ ადგილობრივი მონაცემები საერთო ფაილის ფორმატებში, მათი ჩატვირთვა ასევე მარტივად შეგიძლიათ load_dataset-ის გამოყენებით: თუ თქვენი ადგილობრივი მონაცემები საჭიროებს წინასწარ დამუშავებას, შეგიძლიათ გამოიყენოთ datasets.Dataset.from_dict, რათა მოახდინოთ თქვენი მონაცემთა ნაკრების ინიციალიზაცია სიების ლექსიკონით (dictionary of lists): ლექსიკონში თითოეული გასაღები ხდება სვეტი მიღებულ მონაცემთა ნაკრებში. გადამწყვეტი მნიშვნელობა აქვს იმის უზრუნველყოფას, რომ თქვენი მონაცემთა ნაკრების ფორმატი შეესაბამებოდეს თქვენს მიერ არჩეულ დანაკარგის ფუნქციას. ეს მოიცავს ორი საკითხის შემოწმებას: მაგალითად, თუ თქვენი დანაკარგის ფუნქცია იღებს (anchor, positive, negative) ტრიპლეტებს, მაშინ თქვენი მონაცემთა ნაკრების პირველი, მეორე და მესამე სვეტები შესაბამისად ემთხვევა anchor, positive და negative-ს. ეს ნიშნავს, რომ თქვენი პირველი და მეორე სვეტი უნდა შეიცავდეს ტექსტებს, რომლებიც ახლოს უნდა იყოს ჩაშენებული (embed closely), ხოლო თქვენი პირველი და მესამე სვეტი უნდა შეიცავდეს ტექსტებს, რომლებიც შორს უნდა იყოს ჩაშენებული (embed far apart). სწორედ ამიტომ, თქვენი დანაკარგის ფუნქციიდან გამომდინარე, მონაცემთა ნაკრების სვეტების თანმიმდევრობას აქვს მნიშვნელობა. განვიხილოთ მონაცემთა ნაკრები სვეტებით [„text1“, „text2“, „label“], სადაც „label“ სვეტი შეიცავს მცურავი წერტილის მსგავსების ქულებს (floating point similarity scores). ეს მონაცემთა ნაკრები შეიძლება გამოყენებულ იქნას CoSENTLoss, AnglELoss და CosineSimilarityLoss-თან ერთად, რადგან: თუ თქვენი მონაცემთა ნაკრებში სვეტები არასწორად არის დალაგებული, გამოიყენეთ Dataset.select_columns მათ გადასალაგებლად. გარდა ამისა, წაშალეთ ნებისმიერი ზედმეტი სვეტი (მაგ., sample_id, metadata, source, type) Dataset.remove_columns-ის გამოყენებით, რადგან წინააღმდეგ შემთხვევაში ისინი შეყვანად (inputs) იქნება განხილული. დანაკარგის ფუნქციები ზომავს, თუ რამდენად კარგად მუშაობს მოდელი მონაცემთა მოცემულ პარტიაზე და წარმართავს ოპტიმიზაციის პროცესს. დანაკარგის ფუნქციის არჩევანი დამოკიდებულია თქვენს ხელთ არსებულ მონაცემებსა და სამიზნე ამოცანაზე. ოფციების სრული ჩამონათვალისთვის იხილეთ „Loss Overview“. უმეტეს დანაკარგის ფუნქციას შეუძლია ინიციალიზება მხოლოდ SentenceTransformer მოდელით, რომელსაც ავარჯიშებთ: SentenceTransformersTrainingArguments კლასი საშუალებას გაძლევთ მიუთითოთ პარამეტრები, რომლებიც გავლენას ახდენენ ვარჯიშის შესრულებასა და თვალთვალ/გამართვაზე (tracking/debugging). მიუხედავად იმისა, რომ ეს არგუმენტები სურვილისამებრ არის, მათზე ექსპერიმენტებმა შეიძლება ხელი შეუწყოს ვარჯიშის ეფექტურობის გაუმჯობესებას და ვარჯიშის პროცესის შესახებ შეხედულებების მიწოდებას. Sentence Transformers-ის დოკუმენტაციაში მე აღვწერე ზოგიერთი ყველაზე სასარგებლო ვარჯიშის არგუმენტი. გირჩევთ, წაიკითხოთ იგი „Training Overview > Training Arguments“ განყოფილებაში. აი, მაგალითი, თუ როგორ უნდა მოახდინოთ SentenceTransformersTrainingArguments-ის ინიციალიზაცია: გაითვალისწინეთ, რომ eval_strategy შემოღებულ იქნა transformers-ის 4.41.0 ვერსიაში. წინა ვერსიებმა უნდა გამოიყენონ evaluation_strategy. შეგიძლიათ SentenceTransformerTrainer-ს მიაწოდოთ eval_dataset, რათა მიიღოთ შეფასების დანაკარგი ვარჯიშის დროს, მაგრამ შესაძლოა სასარგებლო იყოს უფრო კონკრეტული მეტრიკების მიღება ვარჯიშის დროსაც. ამისთვის შეგიძლიათ გამოიყენოთ შემფასებლები (evaluators), რათა შეაფასოთ მოდელის შესრულება სასარგებლო მეტრიკებით ვარჯიშამდე, ვარჯიშის დროს ან მის შემდეგ. შეგიძლიათ გამოიყენოთ როგორც eval_dataset, ასევე evaluator, ერთი ან მეორე, ან არცერთი. ისინი აფასებენ eval_strategy და eval_steps ვარჯიშის არგუმენტების საფუძველზე. აი, Sentence Transformers-თან ერთად არსებული დანერგილი შემფასებლები: გარდა ამისა, შეგიძლიათ გამოიყენოთ SequentialEvaluator, რათა გააერთიანოთ მრავალი შემფასებელი ერთში, რომელიც შემდეგ შეიძლება გადაეცეს SentenceTransformerTrainer-ს. თუ არ გაქვთ საჭირო შეფასების მონაცემები, მაგრამ მაინც გსურთ თვალყური ადევნოთ მოდელის მუშაობას...