paint-brush
დაიღალეთ Siri თქვენი სახელის არევით? აქ არის მარტივი გამოსწორებამიერ@philhopkins
326 საკითხავი
326 საკითხავი

დაიღალეთ Siri თქვენი სახელის არევით? აქ არის მარტივი გამოსწორება

მიერ Philip Hopkins6m2024/12/14
Read on Terminal Reader

Ძალიან გრძელი; Წაკითხვა

Apple-ისა და Siri-ს ცემა ტექსტების გადაწერისა და გაგზავნის თამაშში
featured image - დაიღალეთ Siri თქვენი სახელის არევით? აქ არის მარტივი გამოსწორება
Philip Hopkins HackerNoon profile picture
0-item

ათი წელია, რაც iPhone მაქვს და მომწონს. ზოგიერთისგან განსხვავებით, მე ნამდვილად მომწონს Siri და ხშირად ვიყენებ მას. მაგრამ ათი წლის შემდეგ, სირიმ ვერ გაარკვია, რომ როდესაც ის ჩემს ტექსტებს გადაიწერს, უნდა იცოდეს, რომ ჩემი ცოლის სახელი არ არის აარონი, ეს არის ერინი. მე ვაპატიებ სიტყვის ტექსტის განხორციელებას, რომელიც რესურსზე ინტენსიურია, მაგრამ მას შემდეგ რაც ერთხელ გამოვასწორე ეს შეცდომა და გამოვგზავნე შესწორებული ტექსტი, ეს შესწორება უნდა შენახულიყო შესწორების ისტორიაში ჩემს ტელეფონში - პატარა ფაილი, რომელსაც პოსტი იყენებს. - ტრანსფორმატორის მოდელის დამუშავება, სხვა მინიშნებებთან ერთად, ამ შეცდომის დაშვების ნაკლებად სავარაუდოა. მე ვიცი, რომ iPhone-ის მეტყველების ტექსტის ფუნქციონირებაზე Siri-ის ფუნქციონირება ზედმეტად გამარტივებულია, მაგრამ ასე ფიქრობენ ჩემი ბავშვები "AI ჩემს iPhone-ში".


მეტყველების ტექსტში გადაყვანის სისტემები ხშირად ებრძვიან ჰომოფონებს - სიტყვებს, რომლებიც ერთნაირად ჟღერს, მაგრამ განსხვავებული მართლწერა და მნიშვნელობა აქვთ. ეს შეცდომები შეიძლება იყოს იმედგაცრუებული, განსაკუთრებით მაშინ, როდესაც ისინი გავლენას ახდენენ პირად სახელებზე ან ჩვეულებრივ გამოყენებულ ტერმინებზე. ამ პრობლემის გადაჭრის გასაღები მდგომარეობს არა მეტყველების ამოცნობის ძრავის გადახედვაში, არამედ ტექსტის დამუშავების მსუბუქ, პოსტტრანსკრიპციის ფენაში, რომელიც დროთა განმავლობაში ადაპტირდება მომხმარებლის შესწორებებთან. აქ არის PyTorch-ზე დაფუძნებული კოდი, რომელიც მე შევქმენი ამის დასაძლევად.


ის სუპერ კომპაქტურია და ადვილად დასაყენებელია ტელეფონზე მობილურისთვის შედგენის შემდეგ. მე ვიცი, რომ Siri-ს უკან დგას ჯაჭვური მოდელების უაღრესად რთული ნაკრები, ამიტომ ეს კოდი შეიძლება გამოყენებულ იქნას მხოლოდ ახალი ფუნქციის უზრუნველსაყოფად, როგორც ამ მოდელებში, ქულა, რომელიც ეხმარება ტრანსკრიფციის პერსონალიზაციას, როდესაც კონკრეტული ჰომოფონები წარმოიქმნება. მაგრამ უფრო მარტივი იქნებოდა ამის გამოყენება, როგორც პოსტ დამუშავების ფენა.

ეს არ უნდა დაელოდო ახალი ტელეფონის გამოშვებას. ეს გამაუმჯობესებს ცხოვრებას Apple-ის მომდევნო განახლებაში ჩემი iPhone-ისთვის.

ძირითადი იდეა

ეს მიდგომა ფოკუსირებულია სამ ძირითად ელემენტზე:

  • კორექციის ისტორია: ინახავს მომხმარებლის წინა შესწორებებს, პრიორიტეტულად ანიჭებს სიტყვებს, რომლებიც მან ცალსახად დააფიქსირა.
  • ხშირი კონტაქტები: თვალყურს ადევნებს ხშირად გამოყენებულ სიტყვებს ან სახელებს, ანიჭებს უფრო მეტ ალბათობას უფრო ხშირად გამოყენებულ სიტყვებს.
  • კონტექსტუალური ანალიზი: იყენებს ბუნებრივი ენის დამუშავებას (NLP) გარემომცველი ტექსტის გასაანალიზებლად მინიშნებებისთვის, რომლებიც ხელს უწყობს ჰომოფონების გარკვევას.


სისტემა ითვლის ალბათობის ქულას თითოეული ჰომოფონის კანდიდატისთვის ამ სამი ფაქტორის საფუძველზე და ირჩევს ყველაზე სავარაუდო შესწორებას. ქვემოთ მოცემულია პითონის იმპლემენტაცია, რომელიც დაყოფილია სექციებად ახსნა-განმარტებით.

ჰომოფონების მონაცემთა ბაზის ჩატვირთვა

პირველი ნაბიჯი არის ჰომოფონების მონაცემთა ბაზის შექმნა ან ჩატვირთვა. ეს არის სიტყვების წყვილები (ან ჯგუფები), რომლებიც სავარაუდოდ აღრეული იქნება ტრანსკრიფციის დროს.


 # Homophones database homophones_db = { "Aaron": ["Erin"], "bare": ["bear"], "phase": ["faze"], "affect": ["effect"], }

ეს არის მარტივი ლექსიკონი, სადაც გასაღები არის არასწორად გადაწერილი სიტყვა, ხოლო მნიშვნელობა არის ჰომოფონური ალტერნატივების სია. მაგალითად, „ფაზა“ შეიძლება აგვერიოს „ფაზთან“. მოგვიანებით, ამ მონაცემთა ბაზაში იქნება გამოკითხული, როდესაც ორაზროვანი სიტყვა შეგხვდებათ.

კორექტირების ისტორიის თვალყურის დევნება

კოდი თვალყურს ადევნებს მომხმარებლის შესწორებებს ლექსიკონში, სადაც თითოეული კლავიატურა არის ორმაგი (original_word, corrected_word) და მნიშვნელობა არის მომხმარებლის მიერ შესწორებული შეცდომის რაოდენობა.

კორექტირების ისტორიის ტრეკერი

 # Correction history tracker correction_history = { ("phase", "Faye's"): 3, ("bear", "bare"): 2, }


თუ მომხმარებელი სამჯერ შეასწორებს „ფაზას“ „ფეის“, სისტემა პრიორიტეტს ანიჭებს ამ შესწორებას მომავალი ტრანსკრიფციებისთვის.

ხშირი კონტაქტები

კიდევ ერთი ფაქტორი, რომელიც გავლენას ახდენს ჰომოფონის შერჩევაზე, არის ის, თუ რამდენად ხშირად გამოიყენება კონკრეტული სიტყვა. ეს შეიძლება იყოს პირადი სახელები ან ტერმინები, რომლებსაც მომხმარებელი ხშირად აკრეფს.

 # Frequent contact tracker frequent_contacts = { "faye": 15, "phase": 5, "erin": 10, "aaron": 2, }

სისტემა უფრო მეტ წონას ანიჭებს ხშირად გამოყენებულ სიტყვებს ჰომოფონების გარკვევისას. მაგალითად, თუ "faye" გამოჩნდება 15-ჯერ, მაგრამ "ფაზა" გამოჩნდება მხოლოდ 5-ჯერ, უპირატესობა მიენიჭება "faye".

კონტექსტუალური ანალიზი

კონტექსტური მინიშნებები ამოღებულია მიმდებარე წინადადებიდან, რათა კიდევ უფრო დახვეწოს შერჩევა. მაგალითად, თუ წინადადება შეიცავს ნაცვალსახელს "she", სისტემამ შეიძლება უპირატესობა მიანიჭოს "Erin"-ს ვიდრე "Aaron". ტრანსფორმატორების იმპორტის მილსადენიდან

ჩატვირთეთ NLP მოდელი კონტექსტური ანალიზისთვის

 from transformers import pipeline # Load an NLP model for context analysis context_analyzer = pipeline("fill-mask", model="bert-base-uncased") def detect_context(sentence): """Detect context-specific clues in the sentence.""" pronouns = ["he", "she", "his", "her", "their"] tokens = sentence.lower().split() return [word for word in tokens if word in pronouns]

ეს ფუნქცია სკანირებს წინადადებას სქესის სპეციფიკური ნაცვალსახელებისთვის ან სხვა მინიშნებებისთვის, რომლებიც შეიძლება მიუთითებდეს სიტყვის დანიშნულ მნიშვნელობაზე.

ალბათობის ქულების გამოთვლა

თითოეულ ჰომოფონურ კანდიდატს ენიჭება ალბათობის ქულა საფუძველზე:

  1. წარსული შესწორებები : უფრო მაღალი წონა (მაგ., 3x).
  2. ხშირი გამოყენება : საშუალო წონა (მაგ., 2x).
  3. კონტექსტის შესატყვისი : დაბალი წონა (მაგ., 1x).
 def calculate_likelihood(word, candidate, sentence): """Calculate a likelihood score for a homophone candidate.""" correction_score = correction_history.get((word, candidate), 0) * 3 frequency_score = frequent_contacts.get(candidate, 0) * 2 context = detect_context(sentence) context_clues = homophones_db.get(candidate, []) context_score = sum(1 for clue in context if clue in context_clues) return correction_score + frequency_score + context_score

ეს ქულა აერთიანებს სამ ფაქტორს ყველაზე სავარაუდო ჰომოფონის დასადგენად.

არაორაზროვანი ჰომოფონები

ალბათობის ქულების გამოთვლით, სისტემა ირჩევს ჰომოფონს უმაღლესი ქულით.

 def prioritize_homophones(word, candidates, sentence): """Prioritize homophones based on their likelihood scores.""" likelihoods = { candidate: calculate_likelihood(word, candidate, sentence) for candidate in candidates } return max(likelihoods, key=likelihoods.get) def disambiguate_homophone(word, sentence): """Disambiguate homophones using likelihood scores.""" candidates = homophones_db.get(word, []) if not candidates: return word return prioritize_homophones(word, candidates, sentence)


ეს პროცესი უზრუნველყოფს ყველაზე შესაფერისი სიტყვის არჩევას ისტორიის, სიხშირისა და კონტექსტის მიხედვით.

სრული ტრანსკრიფციების დამუშავება

სისტემა ამუშავებს მთელ წინადადებას, იყენებს გაურკვევლობის ლოგიკას თითოეულ სიტყვაზე.

 def process_transcription(transcription): """Process the transcription to correct homophones.""" words = transcription.split() corrected_words = [disambiguate_homophone(word, transcription) for word in words] return " ".join(corrected_words)

სამუშაო პროცესის სრული მაგალითი

 # Example transcription and correction raw_transcription = "This is phase one plan." corrected_transcription = process_transcription(raw_transcription) print("Original Transcription:", raw_transcription) print("Corrected Transcription:", corrected_transcription) # Simulate user feedback update_correction_history("phase", "faye") print("Updated Correction History:", correction_history) print("Updated Frequent Contacts:", frequent_contacts)

უკუკავშირის განახლება

როდესაც მომხმარებელი ასწორებს შეცდომას, შესწორების ისტორია და ხშირი კონტაქტები განახლდება მომავალი პროგნოზების გასაუმჯობესებლად.


 def update_correction_history(original, corrected): """Update correction history and frequent contacts.""" correction_history[(original, corrected)] = correction_history.get((original, corrected), 0) + 1 frequent_contacts[corrected] = frequent_contacts.get(corrected, 0) + 1 frequent_contacts[original] = max(0, frequent_contacts.get(original, 0) - 1)

მაგალითი ტრანსკრიფცია და კორექტირება

 Original Transcription: This is phase one plan. Corrected Transcription: This is Faye's one plan. Updated Correction History: {('phase', 'Faye's'): 4} Updated Frequent Contacts: {'Faye's': 16, 'phase': 4}

დასკვნა

ტექსტის დამუშავების ეს მსუბუქი ფენა აძლიერებს მეტყველება-ტექსტში აპლიკაციების სიზუსტეს მომხმარებლის შესწორებების სწავლით, ხშირი გამოყენებისა და კონტექსტის ანალიზით. ის საკმარისად კომპაქტურია მობილურ მოწყობილობებზე მუშაობისთვის და ადაპტირებადი მომხმარებლის ინდივიდუალური საჭიროებებისთვის, სთავაზობს უფრო ჭკვიან ალტერნატივას ტრადიციული სტატიკური მოდელებისთვის. მინიმალური ძალისხმევით, Apple-ს ან ნებისმიერ სხვა კომპანიას შეუძლია ამ ფუნქციის ინტეგრირება, რათა Siri-ის მსგავსი ვირტუალური ასისტენტები უფრო მგრძნობიარე და პერსონალიზირებული გახადოს.