I am a hacker, engineer, product manager, and researcher on LLMs, AI/ML, and the ethics of applied machine learning.
The code in this story is for educational purposes. The readers are solely responsible for whatever they build with it.
මට අවුරුදු දහයක් තිස්සේ iPhone එකක් තිබුණා, මම එයට කැමතියි. සමහර අය මෙන් නොව, මම ඇත්තටම සිරි රස විඳින අතර එය නිතර භාවිතා කරමි. නමුත් අවුරුදු දහයකට පසු, එය මගේ ලිපි පිටපත් කරන විට, එය මගේ බිරිඳගේ නම ආරොන් නොව එරින් බව දැනගත යුතු බව සිරිට වැටහුණේ නැත. කථනයෙන් පෙළ ක්රියාවට නැංවීමට මම සමාව දෙමි, එය සම්පත්-අවශ්යයි, නමුත් මම වරක් එම වැරැද්ද නිවැරදි කර සංශෝධිත පෙළක් යැවූ පසු, එම නිවැරදි කිරීම මගේ දුරකථනයේ නිවැරදි කිරීමේ ඉතිහාසයක ගබඩා කර තිබිය යුතුය - පෝස්ට් එකකින් භාවිතා කරන කුඩා ගොනුවකි. ට්රාන්ස්ෆෝමර් මාදිලිය සැකසීම, වෙනත් ඉඟි සමඟ, මෙම වැරැද්ද බොහෝ දුරට අඩු කිරීමට ඉඩ ඇත. අයිෆෝන් කථනය අකුරු ක්රියාකාරීත්වයට ඇමතීම සිරි අතිශයින් සරල කරන බව මම දනිමි, නමුත් 'මගේ iPhone හි AI' ගැන මගේ දරුවන් සිතන්නේ එලෙස ය.
කථනය-පෙළ-පෙළ පද්ධති බොහෝ විට සමලිංගික සමඟ අරගල කරයි—එකම ශබ්ද වන නමුත් විවිධ අක්ෂර වින්යාස සහ අර්ථයන් ඇති වචන. මෙම දෝෂයන් කලකිරීමට පත් විය හැක, විශේෂයෙන්ම ඒවා පුද්ගලික නම් හෝ බහුලව භාවිතා වන යෙදුම් වලට බලපාන විට. මෙම ගැටළුව විසඳීම සඳහා යතුර පවතින්නේ කථන හඳුනාගැනීමේ එන්ජිම ප්රතිසංස්කරණය කිරීම නොව, කාලයත් සමඟ පරිශීලක නිවැරදි කිරීම් වලට අනුවර්තනය වන සැහැල්ලු, පශ්චාත් පිටපත් කිරීමේ පෙළ සැකසුම් ස්ථරයක ය. මේ තියෙන්නේ මම මේක විසඳන්න හදපු PyTorch පදනම් කරගත් කේතය.
එය ඉතා සංයුක්ත වන අතර ජංගම දුරකථන සඳහා සම්පාදනය කිරීමෙන් පසු දුරකථනයක යෙදවීමට පහසුය. Siri පිටුපස ඉතා සංකීර්ණ දම්වැල් සහිත ආකෘති කට්ටලයක් ඇති බව මම දනිමි, එබැවින් මෙම කේතය එම මාදිලිවලට ආදානය ලෙස නව විශේෂාංගයක් සැපයීමට පමණක් භාවිතා කළ හැකිය, එය විශේෂිත homophones මතු වන විට පිටපත් කිරීම පුද්ගලීකරණය කිරීමට උපකාරී වේ. නමුත් මෙය පසු සැකසුම් ස්ථරයක් ලෙස භාවිතා කිරීම වඩාත් සරල වනු ඇත.
මෙය නව දුරකථන නිකුතුවක් යෙදවීමට බලා සිටිය යුතු නැත. එය මගේ iPhone සඳහා Apple නිකුත් කරන මීළඟ යාවත්කාලීනයේදී මට ජීවිතය යහපත් කරයි.
පද්ධතිය මෙම සාධක තුන මත පදනම්ව එක් එක් homophone අපේක්ෂකයා සඳහා සම්භාවිතා ලකුණු ගණනය කර බොහෝ දුරට නිවැරදි කිරීම තෝරා ගනී. පහත දැක්වෙන්නේ පයිතන් ක්රියාත්මක කිරීම පැහැදිලි කිරීම් සහිත කොටස් වලට කැඩී ඇත.
පළමු පියවර වන්නේ homophones දත්ත සමුදායක් නිර්මාණය කිරීම හෝ පැටවීමයි. මේවා පිටපත් කිරීමේදී ව්යාකූල වීමට ඉඩ ඇති වචන යුගල (හෝ කණ්ඩායම්) වේ.
# Homophones database homophones_db = { "Aaron": ["Erin"], "bare": ["bear"], "phase": ["faze"], "affect": ["effect"], }
මෙය සරල ශබ්දකෝෂයක් වන අතර යතුර වැරදි ලෙස පිටපත් කරන ලද වචනය වන අතර අගය සමලිංගික විකල්ප ලැයිස්තුවකි. උදාහරණයක් ලෙස, "අදියර" "faze" සමඟ පටලවා ගත හැක. පසුව, අපැහැදිලි වචනයක් හමු වූ විට මෙම දත්ත සමුදාය විමසනු ඇත.
කේතය ශබ්ද කෝෂයක පරිශීලක නිවැරදි කිරීම් නිරීක්ෂණය කරයි, එහිදී සෑම යතුරක්ම (මුල්ම_වචනය, නිවැරදි_වචනය) ටපල් එකක් වන අතර අගය යනු පරිශීලකයා එම දෝෂය නිවැරදි කළ වාර ගණනයි.
# Correction history tracker correction_history = { ("phase", "Faye's"): 3, ("bear", "bare"): 2, }
පරිශීලකයා "අදියර" "Faye's" ලෙස තුන් වරක් නිවැරදි කරන්නේ නම්, පද්ධතිය අනාගත පිටපත් කිරීම් සඳහා මෙම නිවැරදි කිරීමට ප්රමුඛත්වය දෙයි.
homophone තෝරාගැනීමට බලපාන තවත් සාධකයක් වන්නේ යම් වචනයක් කොපමණ වාරයක් භාවිතා කරන්නේද යන්නයි. මෙය පරිශීලකයා නිතර ටයිප් කරන පුද්ගලික නම් හෝ නියමයන් විය හැකිය.
# Frequent contact tracker frequent_contacts = { "faye": 15, "phase": 5, "erin": 10, "aaron": 2, }
සමලිංගික විභේදනය කිරීමේදී පද්ධතිය නිතර භාවිතා කරන වචන වලට වැඩි බරක් ලබා දෙයි. උදාහරණයක් ලෙස, "faye" 15 වතාවක් දිස්වන නමුත් "phase" 5 වතාවක් පමණක් දිස් වේ නම්, "faye" වඩාත් කැමති වේ.
තේරීම තවදුරටත් පිරිපහදු කිරීම සඳහා අවට වාක්යයෙන් සන්දර්භ ඉඟි උපුටා ගනු ලැබේ. උදාහරණයක් ලෙස, වාක්යයේ "she" යන සර්වනාමය අඩංගු නම්, පද්ධතිය "Aaron" ට වඩා "Erin" ට කැමති විය හැක. ට්රාන්ස්ෆෝමර් ආනයන නල මාර්ගයෙන්
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]
මෙම ශ්රිතය ස්ත්රී පුරුෂ භාවය-විශේෂිත සර්වනාම හෝ වචනයේ අපේක්ෂිත අර්ථය දැක්විය හැකි වෙනත් ඉඟි සඳහා වාක්ය පරිලෝකනය කරයි.
සෑම homophone අපේක්ෂකයෙකුටම සම්භාවිතා ලකුණු ලබා දී ඇත:
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
මෙම ලකුණු බොහෝ දුරට ඉඩ ඇති homophone තීරණය කිරීමට සාධක තුන ඒකාබද්ධ කරයි.
සම්භාවිතා ලකුණු ගණනය කිරීමත් සමඟ, පද්ධතිය වැඩිම ලකුණු සහිත homophone තෝරා ගනී.
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 වැනි අතථ්ය සහායකයින් වඩාත් ප්රතිචාරාත්මක සහ පුද්ගලීකරණය කිරීමට මෙම ක්රියාකාරිත්වය ඒකාබද්ධ කළ හැකිය.