ათი წელია, რაც iPhone მაქვს და მომწონს. ზოგიერთისგან განსხვავებით, მე ნამდვილად მომწონს Siri და ხშირად ვიყენებ მას. მაგრამ ათი წლის შემდეგ, სირიმ ვერ გაარკვია, რომ როდესაც ის ჩემს ტექსტებს გადაიწერს, უნდა იცოდეს, რომ ჩემი ცოლის სახელი არ არის აარონი, ეს არის ერინი. მე ვაპატიებ სიტყვის ტექსტის განხორციელებას, რომელიც რესურსზე ინტენსიურია, მაგრამ მას შემდეგ რაც ერთხელ გამოვასწორე ეს შეცდომა და გამოვგზავნე შესწორებული ტექსტი, ეს შესწორება უნდა შენახულიყო შესწორების ისტორიაში ჩემს ტელეფონში - პატარა ფაილი, რომელსაც პოსტი იყენებს. - ტრანსფორმატორის მოდელის დამუშავება, სხვა მინიშნებებთან ერთად, ამ შეცდომის დაშვების ნაკლებად სავარაუდოა. მე ვიცი, რომ iPhone-ის მეტყველების ტექსტის ფუნქციონირებაზე Siri-ის ფუნქციონირება ზედმეტად გამარტივებულია, მაგრამ ასე ფიქრობენ ჩემი ბავშვები "AI ჩემს iPhone-ში".
მეტყველების ტექსტში გადაყვანის სისტემები ხშირად ებრძვიან ჰომოფონებს - სიტყვებს, რომლებიც ერთნაირად ჟღერს, მაგრამ განსხვავებული მართლწერა და მნიშვნელობა აქვთ. ეს შეცდომები შეიძლება იყოს იმედგაცრუებული, განსაკუთრებით მაშინ, როდესაც ისინი გავლენას ახდენენ პირად სახელებზე ან ჩვეულებრივ გამოყენებულ ტერმინებზე. ამ პრობლემის გადაჭრის გასაღები მდგომარეობს არა მეტყველების ამოცნობის ძრავის გადახედვაში, არამედ ტექსტის დამუშავების მსუბუქ, პოსტტრანსკრიპციის ფენაში, რომელიც დროთა განმავლობაში ადაპტირდება მომხმარებლის შესწორებებთან. აქ არის PyTorch-ზე დაფუძნებული კოდი, რომელიც მე შევქმენი ამის დასაძლევად.
ის სუპერ კომპაქტურია და ადვილად დასაყენებელია ტელეფონზე მობილურისთვის შედგენის შემდეგ. მე ვიცი, რომ Siri-ს უკან დგას ჯაჭვური მოდელების უაღრესად რთული ნაკრები, ამიტომ ეს კოდი შეიძლება გამოყენებულ იქნას მხოლოდ ახალი ფუნქციის უზრუნველსაყოფად, როგორც ამ მოდელებში, ქულა, რომელიც ეხმარება ტრანსკრიფციის პერსონალიზაციას, როდესაც კონკრეტული ჰომოფონები წარმოიქმნება. მაგრამ უფრო მარტივი იქნებოდა ამის გამოყენება, როგორც პოსტ დამუშავების ფენა.
ეს არ უნდა დაელოდო ახალი ტელეფონის გამოშვებას. ეს გამაუმჯობესებს ცხოვრებას Apple-ის მომდევნო განახლებაში ჩემი iPhone-ისთვის.
სისტემა ითვლის ალბათობის ქულას თითოეული ჰომოფონის კანდიდატისთვის ამ სამი ფაქტორის საფუძველზე და ირჩევს ყველაზე სავარაუდო შესწორებას. ქვემოთ მოცემულია პითონის იმპლემენტაცია, რომელიც დაყოფილია სექციებად ახსნა-განმარტებით.
პირველი ნაბიჯი არის ჰომოფონების მონაცემთა ბაზის შექმნა ან ჩატვირთვა. ეს არის სიტყვების წყვილები (ან ჯგუფები), რომლებიც სავარაუდოდ აღრეული იქნება ტრანსკრიფციის დროს.
# 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". ტრანსფორმატორების იმპორტის მილსადენიდან
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]
ეს ფუნქცია სკანირებს წინადადებას სქესის სპეციფიკური ნაცვალსახელებისთვის ან სხვა მინიშნებებისთვის, რომლებიც შეიძლება მიუთითებდეს სიტყვის დანიშნულ მნიშვნელობაზე.
თითოეულ ჰომოფონურ კანდიდატს ენიჭება ალბათობის ქულა საფუძველზე:
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-ის მსგავსი ვირტუალური ასისტენტები უფრო მგრძნობიარე და პერსონალიზირებული გახადოს.