paint-brush
Jeni të lodhur nga Siri duke ju ngatërruar emrin? Këtu është një rregullim i thjeshtënga@philhopkins
326 lexime
326 lexime

Jeni të lodhur nga Siri duke ju ngatërruar emrin? Këtu është një rregullim i thjeshtë

nga Philip Hopkins6m2024/12/14
Read on Terminal Reader

Shume gjate; Te lexosh

Duke mundur Apple dhe Siri në lojën e transkriptimit dhe dërgimit të teksteve
featured image - Jeni të lodhur nga Siri duke ju ngatërruar emrin? Këtu është një rregullim i thjeshtë
Philip Hopkins HackerNoon profile picture
0-item

Unë kam një iPhone për dhjetë vjet dhe më pëlqen. Ndryshe nga disa njerëz, më pëlqen shumë Siri dhe e përdor shpesh. Por pas dhjetë vjetësh, Siri nuk e ka kuptuar që kur transkripton tekstet e mia, duhet të dijë se emri i gruas sime nuk është Aaron, është Erin. E fal zbatimin e fjalës në tekst, i cili kërkon burime intensive, por pasi e korrigjova një herë atë gabim dhe dërgova një tekst të rishikuar, ai korrigjim duhej të ishte ruajtur në një histori korrigjimi në telefonin tim - një skedar i vogël i përdorur nga një postim -Përpunimi i modelit të transformatorit, së bashku me të dhëna të tjera, për ta bërë këtë gabim shumë më pak të mundshëm. E di që ta quash funksionalitetin e tekstit të fjalës së iPhone-it Siri është tepër thjeshtuese, por kjo është mënyra se si fëmijët e mi mendojnë për 'AI në iPhone tim'.


Sistemet e fjalës në tekst shpesh luftojnë me homofonet - fjalë që tingëllojnë njësoj, por kanë drejtshkrime dhe kuptime të ndryshme. Këto gabime mund të jenë zhgënjyese, veçanërisht kur ato prekin emrat personalë ose termat e përdorur zakonisht. Çelësi për rregullimin e këtij problemi nuk qëndron në rregullimin e motorit të njohjes së të folurit, por në një shtresë të lehtë përpunimi të tekstit pas transkriptimit që përshtatet me korrigjimet e përdoruesit me kalimin e kohës. Këtu është kodi i bazuar në PyTorch që kam krijuar për të adresuar këtë.


Është super kompakt dhe i lehtë për t'u vendosur në një telefon pas përpilimit për celular. E di që pas Siri-t është një grup shumë kompleks modelesh të lidhura me zinxhirë, kështu që ky kod mund të përdoret vetëm për të ofruar një veçori të re si hyrje në ato modele, një rezultat që ndihmon në personalizimin e transkriptimit kur shfaqen homofone të veçanta. Por do të ishte më e thjeshtë ta përdorje këtë si një shtresë pas përpunimit.

Kjo nuk duhet të presë që një version i ri i telefonit të vendoset. Do ta bënte jetën më të mirë për mua në përditësimin e radhës që do të lëshojë Apple për iPhone tim.

Ideja Themelore

Kjo qasje fokusohet në tre elementë kryesorë:

  • Historia e korrigjimit: Ruan korrigjimet e mëparshme të përdoruesit, duke i dhënë përparësi fjalëve që përdoruesi i ka rregulluar në mënyrë eksplicite më parë.
  • Kontaktet e shpeshta: Gjurmon fjalët ose emrat e përdorur shpesh, duke u dhënë një gjasa më të lartë atyre që përdoren më shpesh.
  • Analiza kontekstuale: Përdor përpunimin e gjuhës natyrore (NLP) për të analizuar tekstin përreth për të dhëna që ndihmojnë në zbërthimin e homofonëve.


Sistemi llogarit një rezultat gjasash për secilin kandidat homofon bazuar në këta tre faktorë dhe zgjedh korrigjimin më të mundshëm. Më poshtë është zbatimi i Python i ndarë në seksione me shpjegime.

Ngarkimi i bazës së të dhënave të homofonëve

Hapi i parë është krijimi ose ngarkimi i një baze të dhënash të homofonëve. Këto janë çifte fjalësh (ose grupe) që ka të ngjarë të ngatërrohen gjatë transkriptimit.


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

Ky është një fjalor i thjeshtë ku çelësi është fjala e transkriptuar gabimisht dhe vlera është një listë e alternativave homofone. Për shembull, "faza" mund të ngatërrohet me "faze". Më vonë, kjo bazë të dhënash do të pyetet kur të ndeshet një fjalë e paqartë.

Ndjekja e historisë së korrigjimit

Kodi gjurmon korrigjimet e përdoruesit në një fjalor ku çdo çelës është një tufë prej (fjalë_origjinale, fjalë e korrigjuar) dhe vlera është numri i herëve që përdoruesi e korrigjoi atë gabim.

Gjurmuesi i historisë së korrigjimit

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


Nëse përdoruesi korrigjon "fazën" në "Faye's" tre herë, sistemi i jep përparësi këtij korrigjimi për transkriptimet e ardhshme.

Kontaktet e shpeshta

Një faktor tjetër që ndikon në përzgjedhjen e homofonit është se sa shpesh përdoret një fjalë e caktuar. Këta mund të jenë emra personalë ose terma që përdoruesi i shkruan shpesh.

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

Sistemi u jep më shumë peshë fjalëve të përdorura shpesh kur sqaron homofonët. Për shembull, nëse "faye" shfaqet 15 herë, por "faza" shfaqet vetëm 5 herë, "faye" do të preferohet.

Analiza Kontekstuale

Të dhëna të kontekstit nxirren nga fjalia përreth për të përmirësuar më tej përzgjedhjen. Për shembull, nëse fjalia përmban përemrin "ajo", sistemi mund të favorizojë "Erin" mbi "Aaron". nga tubacioni i importit të transformatorëve

Ngarko një model NLP për analizën e kontekstit

 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]

Ky funksion skanon fjalinë për përemra specifikë të gjinisë ose të dhëna të tjera që mund të tregojnë kuptimin e synuar të fjalës.

Llogaritja e rezultateve të gjasave

Secilit kandidat homofon i caktohet një rezultat gjasash bazuar në:

  1. Korrigjimet e kaluara : Pesha më e lartë (p.sh., 3x).
  2. Përdorimi i shpeshtë : Pesha mesatare (p.sh. 2x).
  3. Përputhja e kontekstit : Pesha më e ulët (p.sh., 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

Ky rezultat kombinon tre faktorët për të përcaktuar homofonin më të mundshëm.

Homofonë që çdyshojnë

Me llogaritjen e rezultateve të gjasave, sistemi zgjedh homofonin me rezultatin më të lartë.

 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)


Ky proces siguron që fjala më e përshtatshme të zgjidhet bazuar në histori, frekuencë dhe kontekst.

Përpunimi i transkriptimeve të plota

Sistemi përpunon një fjali të tërë, duke aplikuar logjikën e zbërthimit për secilën fjalë.

 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)

Shembull i plotë i rrjedhës së punës

 # 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)

Përditësimi i komenteve

Kur përdoruesi korrigjon një gabim, historiku i korrigjimit dhe kontaktet e shpeshta përditësohen për të përmirësuar parashikimet e ardhshme.


 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)

Shembull i transkriptimit dhe korrigjimit

 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}

konkluzioni

Kjo shtresë e lehtë e përpunimit të tekstit rrit saktësinë e aplikacioneve të fjalës në tekst duke mësuar nga korrigjimet e përdoruesit, duke shfrytëzuar përdorimin e shpeshtë dhe duke analizuar kontekstin. Është mjaft kompakt për t'u ekzekutuar në pajisje celulare dhe i adaptueshëm për nevojat individuale të përdoruesve, duke ofruar një alternativë më të zgjuar ndaj modeleve statike tradicionale. Me përpjekje minimale, Apple—ose çdo kompani tjetër—mund ta integrojë këtë funksionalitet për t'i bërë asistentët virtualë si Siri më të përgjegjshëm dhe të personalizuar.