ეს ბლოგპოსტი ითვალისწინებს, რომ მკითხველი გაეცნო ტექსტის გენერაციის მეთოდებს, რომლებიც იყენებენ სხივური ძიების (beam search) სხვადასხვა ვარიანტებს, როგორც ეს განმარტებულია ბლოგპოსტში: "როგორ მოვახდინოთ ტექსტის გენერირება: ენის გენერაციისთვის ტრანსფორმერების გამოყენებით დეკოდირების სხვადასხვა მეთოდები". ჩვეულებრივი სხივური ძიებისგან განსხვავებით, შეზღუდული სხივური ძიება საშუალებას გვაძლევს კონტროლი მოვახდინოთ ტექსტის გენერაციის შედეგზე. ეს სასარგებლოა, რადგან ზოგჯერ ზუსტად ვიცით, რა გვსურს გენერირებულ ტექსტში. მაგალითად, ნერვული მანქანური თარგმანის ამოცანისას, ლექსიკონის დახმარებით შეიძლება ვიცოდეთ, რომელი სიტყვები უნდა იყოს შეტანილი საბოლოო თარგმანში. ზოგჯერ, ენობრივი მოდელისთვის თითქმის თანაბრად შესაძლო გენერირებული გამოსავლები შესაძლოა არ იყოს თანაბრად სასურველი საბოლოო მომხმარებლისთვის კონკრეტული კონტექსტის გამო. ორივე ეს სიტუაცია შეიძლება გადაწყდეს იმით, რომ მომხმარებლებმა შეძლონ მოდელისთვის მიუთითონ, რომელი სიტყვები უნდა იყოს ჩართული საბოლოო შედეგში. თუმცა, ეს რეალურად არატრივიალური პრობლემაა. ეს იმიტომ, რომ ამოცანა მოითხოვს, რომ გენერაციის პროცესში სადმე, საბოლოო გამოსავალში, იძულებით მოხდეს გარკვეული ქვე-მიმდევრობების გენერირება. დავუშვათ, გვინდა წინადადება S-ის გენერირება, რომელიც თანმიმდევრობით უნდა შეიცავდეს ფრაზას p1={t1,t2} (სადაც t1 და t2 ტოკენებია). განვსაზღვროთ მოსალოდნელი წინადადება S, როგორც: Sexpected={s1,s2,...,sk,t1,t2,sk+1,...,sn}. პრობლემა ისაა, რომ სხივური ძიება თანმიმდევრობას ტოკენ-ტოკენით აგენერირებს. თუმცა არ არის სრულად ზუსტი, შეიძლება ვიფიქროთ სხივურ ძიებაზე, როგორც ფუნქციაზე B(s0:i)=si+1, სადაც ის ათვალიერებს ტოკენების მიმდინარე გენერირებულ თანმიმდევრობას 0-დან i-მდე და შემდეგ წინასწარმეტყველებს შემდეგ ტოკენს i+1 პოზიციაზე. მაგრამ როგორ შეუძლია ამ ფუნქციას, ნებისმიერ ik ნაბიჯი? და რა ხდება, თუ თქვენ გაქვთ მრავალი შეზღუდვა სხვადასხვა მოთხოვნებით? რა მოხდება, თუ გსურთ ფრაზის p1={t1,t2} და ასევე ფრაზის p2={t3,t4,t5,t6} იძულებით ჩართვა? რა მოხდება, თუ გსურთ, რომ მოდელმა აირჩიოს ორ ფრაზას შორის? რა მოხდება, თუ გვინდა ფრაზის p1 იძულებით ჩართვა და მხოლოდ ერთი ფრაზის დაწესება ფრაზების სიიდან {p21,p22,p23}? ზემოთ მოყვანილი მაგალითები რეალურად ძალიან გონივრული გამოყენების შემთხვევებია, როგორც ეს ქვემოთ იქნება ნაჩვენები, და შეზღუდული სხივური ძიების ახალი ფუნქცია ყველა მათგანს შესაძლებელს ხდის! ეს პოსტი სწრაფად მიმოიხილავს, რისი გაკეთება შეუძლია შეზღუდული სხივური ძიების ახალ ფუნქციას თქვენთვის და შემდეგ უფრო ღრმად ჩაუღრმავდება, თუ როგორ მუშაობს ის შიდა მექანიზმებით. დავუშვათ, ვცდილობთ ვთარგმნოთ "How old are you?" (რამდენი წლის ხარ?) გერმანულად. "Wie alt bist du?" არის ის, რასაც იტყოდით არაფორმალურ გარემოში, ხოლო "Wie alt sind Sie?" არის ის, რასაც იტყოდით ფორმალურ გარემოში. კონტექსტიდან გამომდინარე, შეიძლება გვსურდეს ფორმალობის ერთი ფორმა მეორეზე, მაგრამ როგორ ვუთხრათ ეს მოდელს? აი, როგორ მოვახდენდით ტექსტის თარგმანს ტრადიციული სხივური ძიების პარამეტრებში. მაგრამ რა მოხდებოდა, თუ ვიცოდით, რომ გვინდოდა ფორმალური გამოსავალი არაფორმალურის ნაცვლად? რა მოხდებოდა, თუ წინასწარი ცოდნიდან ვიცოდით, რა უნდა შეეტანა გენერაციას და შეგვეძლო მისი შეყვანა გენერაციის პროცესში? ქვემოთ მოცემულია ის, რაც ახლა შესაძლებელია force_words_ids საკვანძო არგუმენტის გამოყენებით model.generate()-ში: როგორც ხედავთ, ჩვენ შევძელით გენერაციის მართვა წინასწარი ცოდნით ჩვენი სასურველი გამოსავლის შესახებ. ადრე ჩვენ მოგვიწევდა მრავალი შესაძლო გამოსავლის გენერირება, შემდეგ კი იმის გაფილტვრა, რაც ჩვენს მოთხოვნებს შეესაბამებოდა. ახლა ამის გაკეთება გენერაციის ეტაპზე შეგვიძლია. ზემოთ ვახსენეთ გამოყენების შემთხვევა, როდესაც ვიცით, რომელი სიტყვები გვსურს იყოს შეტანილი საბოლოო გამოსავალში. ამის მაგალითი შეიძლება იყოს ლექსიკონის გამოყენება ნერვული მანქანური თარგმანის დროს. მაგრამ რა მოხდება, თუ არ ვიცით, რომელი სიტყვის ფორმები გამოვიყენოთ, სადაც გვსურს, რომ ["raining", "rained", "rains", ...] მსგავსი გამოსავლები თანაბრად შესაძლებელი იყოს? უფრო ზოგადი გაგებით, ყოველთვის არის შემთხვევები, როდესაც არ გვინდა ზუსტი სიტყვა სიტყვასიტყვით, ასო-ასო, და შესაძლოა ღია ვიყოთ სხვა დაკავშირებული შესაძლებლობებისთვისაც. შეზღუდვები, რომლებიც ამ ქცევას იძლევა, არის განმყოფი შეზღუდვები (Disjunctive Constraints), რომლებიც მომხმარებელს საშუალებას აძლევს შეიყვანოს სიტყვების სია, რომლის მიზანია გენერაციის მართვა ისე, რომ საბოლოო გამოსავალი შეიცავდეს სულ მცირე ერთს სიტყვების სიიდან. აი, მაგალითი, რომელიც ზემოთ მოცემული ორი ტიპის შეზღუდვების ნაზავს იყენებს: როგორც ხედავთ, პირველმა გამოსავალმა გამოიყენა "screaming", მეორე გამოსავალმა გამოიყენა "screamed", და ორივემ გამოიყენა "scared" სიტყვასიტყვით. ასარჩევი სია ["screaming", "screamed", ...] არ უნდა იყოს მხოლოდ სიტყვის ფორმები; ამას შეუძლია დააკმაყოფილოს ნებისმიერი გამოყენების შემთხვევა, სადაც გვჭირდება მხოლოდ ერთი სიტყვების სიიდან. ქვემოთ მოცემულია ტრადიციული სხივური ძიების მაგალითი, აღებული წინა ბლოგპოსტიდან: ხარბი (greedy) ძიებისგან განსხვავებით...