როგორც Hugging Face-ის ბლოგის წინა პოსტებში განვიხილეთ, Sentence Transformers (ST) არის ბიბლიოთეკა, რომელიც გვაძლევს წინადადების ემბედინგების გენერირების ხელსაწყოებს, რომლებსაც მრავალი გამოყენება აქვთ. რადგანაც მე მქონდა წვდომა სიმღერის ტექსტების მონაცემთა ნაკრებზე, გადავწყვიტე გამომეყენებინა ST-ის სემანტიკური ძიების ფუნქციონალი, რათა შემექმნა დასაკრავი სიები მოცემული ტექსტური მოთხოვნის საფუძველზე. კონკრეტულად, მიზანი იყო მოთხოვნიდან ემბედინგის შექმნა, ამ ემბედინგის გამოყენება სემანტიკური ძიებისთვის წინასწარ გენერირებული სიმღერის ტექსტების ემბედინგების ნაკრებში, რათა მიგვეღო შესაბამისი სიმღერების ნაკრები. ეს ყველაფერი გაერთიანდებოდა Gradio აპლიკაციაში, ახალი Blocks API-ის გამოყენებით, რომელიც განთავსდებოდა Hugging Face Spaces-ზე. ჩვენ განვიხილავთ Gradio-ს ოდნავ მოწინავე გამოყენებას, ამიტომ თუ ბიბლიოთეკაში დამწყები ხართ, გირჩევთ წაიკითხოთ "Introduction to Blocks" ამ პოსტის Gradio-ს სპეციფიკური ნაწილების განხილვამდე. ასევე, გაითვალისწინეთ, რომ მიუხედავად იმისა, რომ სიმღერის ტექსტების მონაცემთა ნაკრებს არ გამოვაქვეყნებ, ტექსტების ემბედინგები ხელმისაწვდომია Hugging Face Hub-ზე, რათა თქვენ თვითონ გამოსცადოთ. მოდით დავიწყოთ! 🪂 ემბედინგები გადამწყვეტია Sentence Transformers-ში! წინა სტატიაში ვისწავლეთ, რა არის ემბედინგები და როგორ ვქმნით მათ, და გირჩევთ გაეცნოთ მას ამ პოსტის გაგრძელებამდე. Sentence Transformers გთავაზობთ წინასწარ გაწვრთნილი ემბედინგის მოდელების დიდ კოლექციას! ის მოიცავს გაკვეთილებსაც კი ამ მოდელების ჩვენივე საწვრთნელი მონაცემებით დასაზუსტებლად, მაგრამ მრავალი გამოყენების შემთხვევაში (როგორიცაა სემანტიკური ძიება სიმღერის ტექსტების კორპუსზე) წინასწარ გაწვრთნილი მოდელები შესანიშნავად იმუშავებენ ყუთიდანვე. მაგრამ ამდენი ხელმისაწვდომი ემბედინგის მოდელის არსებობისას, როგორ უნდა ვიცოდეთ, რომელი გამოვიყენოთ? ST-ის დოკუმენტაცია ხაზს უსვამს მრავალ არჩევანს, მათი შეფასების მეტრიკებთან და განზრახული გამოყენების შემთხვევების აღწერებთან ერთად. MS MARCO მოდელები გაწვრთნილია Bing საძიებო სისტემის მოთხოვნებზე, მაგრამ რადგან ისინი სხვა სფეროებშიც კარგად მუშაობენ, გადავწყვიტე, რომ ნებისმიერი მათგანი კარგი არჩევანი იქნებოდა ამ პროექტისთვის. დასაკრავი სიის გენერატორისთვის ყველაფერი, რაც გვჭირდება, არის სიმღერების მოძიება, რომლებსაც აქვთ გარკვეული სემანტიკური მსგავსება, და რადგან მე არ მადარდებს კონკრეტული მუშაობის მეტრიკის მიღწევა, თვითნებურად ავირჩიე sentence-transformers/msmarco-MiniLM-L-6-v3. ST-ში თითოეულ მოდელს აქვს კონფიგურირებადი შეყვანის თანმიმდევრობის სიგრძე (მაქსიმუმამდე), რის შემდეგაც თქვენი შეყვანები დამოკლდება. ჩემს მიერ არჩეულ მოდელს ჰქონდა მაქსიმალური თანმიმდევრობის სიგრძე 512 სიტყვის ნაწილისაგან, რაც, როგორც აღმოვაჩინე, ხშირად არ არის საკმარისი მთელი სიმღერების ემბედირებისთვის. საბედნიეროდ, არსებობს მარტივი გზა, რათა ტექსტები დავყოთ უფრო მცირე ნაწილებად, რომელთა მონელებაც მოდელს შეუძლია – სტროფებად! მას შემდეგ, რაც ჩვენს სიმღერებს სტროფებად დავყოფთ და თითოეულ სტროფს ემბედირებას გავუკეთებთ, აღმოვაჩენთ, რომ ძიება ბევრად უკეთ მუშაობს. ემბედინგების რეალურად გენერირებისთვის, შეგიძლიათ გამოიძახოთ Sentence Transformers მოდელის .encode() მეთოდი და გადასცეთ მას სტრიქონების სია. შემდეგ შეგიძლიათ შეინახოთ ემბედინგები ისე, როგორც გსურთ – ამ შემთხვევაში მე მათი Pickle ფორმატში შენახვა ვამჯობინე. თქვენი ემბედინგების სხვებთან გასაზიარებლად, შეგიძლიათ ატვირთოთ Pickle ფაილი Hugging Face მონაცემთა ნაკრებზე. წაიკითხეთ ეს გაკვეთილი მეტის გასაგებად, ან ეწვიეთ Datasets-ის დოკუმენტაციას, რათა თავად გამოსცადოთ! მოკლედ, Hub-ზე ახალი მონაცემთა ნაკრების შექმნის შემდეგ, შეგიძლიათ უბრალოდ ხელით ატვირთოთ თქვენი Pickle ფაილი ღილაკზე "ფაილის დამატება" (Add file) დაწკაპუნებით, როგორც ეს ნაჩვენებია ქვემოთ. ბოლოს, რაც ახლა უნდა გავაკეთოთ, არის ემბედინგების გამოყენება სემანტიკური ძიებისთვის! შემდეგი კოდი იტვირთავს ემბედინგებს, გენერირებს ახალ ემბედინგს მოცემული სტრიქონისთვის და ახორციელებს სემანტიკურ ძიებას სიმღერის ტექსტების ემბედინგებზე უახლოესი დამთხვევების მოსაძებნად. შედეგებთან მუშაობის გასამარტივებლად, მე ასევე მომწონს მათი Pandas DataFrame-ში მოთავსება. რადგან ჩვენ ვეძებთ ნებისმიერ სტროფს, რომელიც შეესაბამება ტექსტურ მოთხოვნას, დიდია ალბათობა, რომ სემანტიკურმა ძიებამ ერთი და იმავე სიმღერიდან მრავალი სტროფი იპოვოს. როდესაც დუბლიკატებს ამოვშლით, შეიძლება მხოლოდ რამდენიმე განსხვავებული სიმღერა დაგვრჩეს. თუ გავზრდით სტროფის ემბედინგების რაოდენობას, რომელსაც util.semantic_search იღებს top_k პარამეტრის მეშვეობით, შეგვიძლია გავზარდოთ ნაპოვნი სიმღერების რაოდენობა. ექსპერიმენტულად აღმოვაჩინე, რომ როდესაც top_k=20-ს ვაყენებ, თითქმის ყოველთვის ვიღებ მინიმუმ 9 განსხვავებულ სიმღერას. დემოსთვის მინდოდა, რომ მომხმარებლებს შეეყვანათ ტექსტური მოთხოვნა (ან აერჩიათ რამდენიმე მაგალითიდან) და განეხორციელებინათ სემანტიკური ძიება ყველაზე შესაბამისი 9 სიმღერის მოსაძებნად. შემდეგ, მომხმარებლებს უნდა შეეძლოთ აერჩიათ მიღებული სიმღერებიდან, რათა ენახათ ტექსტები, რაც მათ გარკვეულ წარმოდგენას მისცემდა, თუ რატომ შეირჩა ეს კონკრეტული სიმღერები. აი, როგორ შეგვიძლია ამის გაკეთება! Gradio დემოს თავში, აპლიკაციის გაშვებისას, Hugging Face მონაცემთა ნაკრებებიდან ვიტვირთავთ ემბედინგებს, ასახვებს (mappings) და ტექსტებს. Gradio Blocks API გაძლევთ საშუალებას შექმნათ მრავალსაფეხურიანი ინტერფეისები, რაც ნიშნავს, რომ თქვენ თავისუფლად შეგიძლიათ შექმნათ საკმაოდ რთული თანმიმდევრობები თქვენი დემოებისთვის. აქ განვიხილავთ კოდის რამდენიმე მაგალითს, მაგრამ იხილეთ პროექტის კოდი, რათა ნახოთ ყველაფერი მოქმედებაში. ამ პროექტისთვის გვინდა, რომ მომხმარებლებმა აირჩიონ ტექსტური მოთხოვნა და შემდეგ, სემანტიკური ძიების დასრულების შემდეგ, მომხმარებლებს უნდა ჰქონდეთ შესაძლებლობა აირჩიონ სიმღერა შედეგებიდან ტექსტების შესამოწმებლად. Gradio-ს საშუალებით, ეს შეიძლება აშენდეს იტერაციულად...