Mwen te gen yon iPhone pou dis ane, e mwen renmen li. Kontrèman ak kèk moun, mwen reyèlman renmen Siri epi sèvi ak li souvan. Men apre dizan, Siri poko konprann ke lè li transkri tèks mwen yo, li ta dwe konnen non madanm mwen se pa Arawon, se Erin. Mwen padonnen aplikasyon lapawòl-a-tèks, ki gen anpil resous, men apre mwen te korije erè sa a yon fwa epi mwen te voye yon tèks revize, koreksyon sa a ta dwe estoke nan yon istwa koreksyon sou telefòn mwen an—yon ti fichye ki itilize pa yon pòs. -pwosesis transfòmatè modèl, ansanm ak lòt endikasyon, fè erè sa a anpil mwens chans. Mwen konnen ke yo rele diskou iPhone a nan tèks fonksyonalite Siri se twòp senplifye, men se ki jan timoun mwen yo panse a 'AI nan iPhone mwen an.'
Sistèm lapawòl-a-tèks souvan lite ak omofòn—mo ki son menm men ki gen diferan òtograf ak siyifikasyon. Erè sa yo ka fwistre, sitou lè yo afekte non pèsonèl oswa tèm souvan itilize. Kle a pou rezoud pwoblèm sa a se pa nan revizyon motè rekonesans lapawòl la men nan yon kouch pwosesis tèks ki lejè, apre-transcription ki adapte ak koreksyon itilizatè yo sou tan. Men kòd ki baze sou PyTorch mwen fèt pou adrese sa a.
Li super kontra ak fasil pou deplwaye sou yon telefòn apre konpile pou mobil. Mwen konnen ke dèyè Siri gen yon seri modèl chèn trè konplèks, kidonk kòd sa a ta ka itilize jis pou bay yon nouvo karakteristik kòm opinyon nan modèl sa yo, yon nòt ki ede pèsonalize transkripsyon an lè omofòn an patikilye leve. Men, li ta pi senp yo sèvi ak sa a kòm yon kouch pwosesis pòs.
Sa a pa oblije rete tann pou yon nouvo lage telefòn yo dwe deplwaye. Li ta fè lavi pi bon pou mwen nan pwochen aktyalizasyon Apple lage pou iPhone mwen an.
Sistèm nan kalkile yon nòt chans pou chak kandida omofòn ki baze sou twa faktè sa yo epi chwazi koreksyon ki gen plis chans. Anba a se aplikasyon Python kase an seksyon ak eksplikasyon.
Premye etap la se kreye oswa chaje yon baz done omofòn. Sa yo se pè mo (oswa gwoup) ki gen anpil chans pou yo konfonn pandan transcription.
# Homophones database homophones_db = { "Aaron": ["Erin"], "bare": ["bear"], "phase": ["faze"], "affect": ["effect"], }
Sa a se yon diksyonè senp kote kle a se mo ki mal transkri a, ak valè a se yon lis altènativ omofòn. Pou egzanp, "faz" ka konfonn ak "faze". Apre sa, baz done sa a pral mande lè yo rankontre yon mo ki pa klè.
Kòd la swiv koreksyon itilizatè yo nan yon diksyonè kote chak kle se yon tiple (original_word, corrected_word) ak valè a se kantite fwa itilizatè a korije erè sa a.
# Correction history tracker correction_history = { ("phase", "Faye's"): 3, ("bear", "bare"): 2, }
Si itilizatè a korije "faz" nan "Faye a" twa fwa, sistèm nan priyorite koreksyon sa a pou pwochen transcriptions.
Yon lòt faktè ki enfliyanse seleksyon omofòn se konbyen fwa yo itilize yon mo an patikilye. Sa a ta ka non pèsonèl oswa tèm itilizatè a souvan tape.
# Frequent contact tracker frequent_contacts = { "faye": 15, "phase": 5, "erin": 10, "aaron": 2, }
Sistèm nan bay plis pwa mo yo itilize souvan lè li deranje omofòn yo. Pa egzanp, si "faye" parèt 15 fwa men "phase" parèt sèlman 5 fwa, "faye" ap pito.
Endikasyon kontèks yo ekstrè nan fraz ki antoure a pou rafine seleksyon an plis. Pou egzanp, si fraz la gen pwonon "li", sistèm nan ka favorize "Erin" sou "Aaron". soti nan transformateur enpòte tiyo
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]
Fonksyon sa a analize fraz la pou pwonon ki espesifik pou sèks oswa lòt endikasyon ki ta ka endike siyifikasyon mo a gen entansyon.
Yo bay chak kandida omofòn yon nòt chans ki baze sou:
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
Nòt sa a konbine twa faktè yo pou detèmine omofòn ki gen plis chans.
Avèk nòt chans yo kalkile, sistèm nan chwazi omofòn ki gen nòt ki pi wo a.
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)
Pwosesis sa a asire yo chwazi mo ki pi apwopriye a dapre istwa, frekans, ak kontèks.
Sistèm nan trete yon fraz antye, aplike lojik dezabigwasyon an nan chak mo.
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)
Lè itilizatè a korije yon erè, istwa koreksyon an ak kontak souvan yo mete ajou pou amelyore prediksyon nan lavni.
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}
Kouch pwosesis tèks ki lejè sa a amelyore presizyon aplikasyon lapawòl-a-tèks lè li aprann nan koreksyon itilizatè yo, pwofite itilizasyon souvan, epi analize kontèks. Li se kontra enfòmèl ant ase yo kouri sou aparèy mobil ak adaptab a bezwen itilizatè endividyèl, ofri yon altènatif pi entelijan nan modèl tradisyonèl estatik. Avèk efò minim, Apple-oswa nenpòt lòt konpayi-te kapab entegre fonksyonalite sa a pou fè asistan vityèl tankou Siri pi reponn ak pèsonalize.