chore(i18n): sync translations with latest source changes (chunk 73/148, 100 files)
This commit is contained in:
parent
ecc5a662b0
commit
3dcd19b725
|
|
@ -15,7 +15,7 @@ Po transformatorių modelių sėkmės sprendžiant NLP užduotis, tos pačios ar
|
|||
|
||||
Pagrindinė CLIP idėja yra gebėjimas palyginti tekstinius užklausimus su vaizdu ir nustatyti, kaip gerai vaizdas atitinka užklausimą.
|
||||
|
||||

|
||||

|
||||
|
||||
> *Paveikslėlis iš [šio tinklaraščio įrašo](https://openai.com/blog/clip/)*
|
||||
|
||||
|
|
@ -29,7 +29,7 @@ Kai modelis yra iš anksto apmokytas, galime jam pateikti vaizdų paketą ir tek
|
|||
|
||||
Tarkime, mums reikia klasifikuoti vaizdus, pavyzdžiui, į kategorijas: katės, šunys ir žmonės. Tokiu atveju galime modeliui pateikti vaizdą ir seriją tekstinių užklausų: "*katės paveikslas*", "*šuns paveikslas*", "*žmogaus paveikslas*". Gautame 3 tikimybių vektoriuje tiesiog reikia pasirinkti indeksą su didžiausia reikšme.
|
||||
|
||||

|
||||

|
||||
|
||||
> *Paveikslėlis iš [šio tinklaraščio įrašo](https://openai.com/blog/clip/)*
|
||||
|
||||
|
|
@ -53,13 +53,13 @@ Daugiau apie VQGAN sužinokite [Taming Transformers](https://compvis.github.io/t
|
|||
|
||||
Vienas svarbus skirtumas tarp VQGAN ir tradicinio GAN yra tas, kad pastarasis gali sukurti padorų vaizdą iš bet kokio įvesties vektoriaus, o VQGAN greičiausiai sukurs vaizdą, kuris nebus nuoseklus. Todėl reikia papildomai vadovauti vaizdo kūrimo procesui, ir tai galima padaryti naudojant CLIP.
|
||||
|
||||

|
||||

|
||||
|
||||
Norint sugeneruoti vaizdą, atitinkantį tekstinę užklausą, pradedame nuo atsitiktinio kodavimo vektoriaus, kuris perduodamas per VQGAN, kad būtų sukurtas vaizdas. Tada CLIP naudojamas nuostolių funkcijai sukurti, kuri parodo, kaip gerai vaizdas atitinka tekstinę užklausą. Tikslas yra sumažinti šiuos nuostolius, naudojant atgalinį sklidimą, kad būtų koreguojami įvesties vektoriaus parametrai.
|
||||
|
||||
Puiki biblioteka, įgyvendinanti VQGAN+CLIP, yra [Pixray](http://github.com/pixray/pixray).
|
||||
|
||||
 |  | 
|
||||
 |  | 
|
||||
----|----|----
|
||||
Vaizdas sukurtas pagal užklausą *artimas akvarelės portretas jauno literatūros mokytojo su knyga* | Vaizdas sukurtas pagal užklausą *artimas aliejinis portretas jaunos kompiuterių mokslų mokytojos su kompiuteriu* | Vaizdas sukurtas pagal užklausą *artimas aliejinis portretas seno matematikos mokytojo priešais lentą*
|
||||
|
||||
|
|
|
|||
|
|
@ -1,134 +1,134 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "4ed9993bca581850c983c95d5a3f57eb",
|
||||
"translation_date": "2025-12-25T02:17:03+00:00",
|
||||
"original_hash": "14816e97d79b296c87811724f7785923",
|
||||
"translation_date": "2026-01-01T14:09:05+00:00",
|
||||
"source_file": "README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
[](https://github.com/microsoft/AI-For-Beginners/blob/main/LICENSE)
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/graphs/contributors/)
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/graphs/contributors/)
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/issues/)
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/pulls/)
|
||||
[](http://makeapullrequest.com)
|
||||
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/watchers/)
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/network/)
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/stargazers/)
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/watchers/)
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/network/)
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/stargazers/)
|
||||
[](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)
|
||||
[](https://gitter.im/Microsoft/ai-for-beginners?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
||||
|
||||
[](https://discord.gg/nTYy5BXMWG)
|
||||
[](https://discord.gg/nTYy5BXMWG)
|
||||
|
||||
# Artificial Intelligence for Beginners - A Curriculum
|
||||
# കൃത്രിമ ബുദ്ധി (Artificial Intelligence) مبت初心ക്കാർക്കുള്ള കോഴ്സ് - ഒരു കരിക്കുലം
|
||||
|
||||
||
|
||||
||
|
||||
|:---:|
|
||||
| AI For Beginners - _സ്കെറ്റ്ച്നോട്ട് by [@girlie_mac](https://twitter.com/girlie_mac)_ |
|
||||
| AI For Beginners - _സ്കെച്നോട്ട് by [@girlie_mac](https://twitter.com/girlie_mac)_ |
|
||||
|
||||
12 ആഴ്ചകൾ, 24 പാഠങ്ങൾ എന്നിവയുള്ള നമ്മുടെ പാഠ്യക്രമത്തിലൂടെ **ആർട്ടിഫിഷ്യൽ ഇന്റലിജൻസ്** (AI) ലോകത്തെ അന്വേഷിക്കൂ! ഇതിൽ പ്രായോഗിക പാഠങ്ങൾ, ക്വിസുകൾ, ലാബ് പ്രവർത്തനങ്ങൾ എന്നിവ അടങ്ങിയിരിക്കുന്നു. പാഠ്യക്രമം തുടക്കക്കാർക്ക് അനുയോജ്യമാണ് കൂടാതെ TensorFlow, PyTorch പോലുള്ള ടൂളുകൾക്കും AI നിൽക്കുന്നത് സംബന്ധിച്ച നൈതികതക്കും ഉൾക്കൊള്ളുന്നു
|
||||
നമ്മുടെ 12-ആഴ്ച, 24-പാഠങ്ങളടങ്ങിയ കരിക്കുലം ഉപയോഗിച്ച് **കൃത്രിമ ബുദ്ധി**(AI)യുടെ ലോകം അന്വേഷിക്കുക! ഇതിൽ പ്രായോഗിക പാഠങ്ങൾ, ക്വിസ്, ലാബുകൾ എന്നിവ ഉൾപ്പെടുന്നു. ഈ കരിക്കുലം ആരംഭക്കാർക്ക് അനുയോജ്യമായതാണു, TensorFlow, PyTorch പോലുള്ള ഉപകരണങ്ങളും AI നുള്ള നയ ശക്തതകളും ഉൾപ്പെടുന്നു
|
||||
|
||||
### 🌐 ബഹുഭാഷಾ പിന്തുണ
|
||||
### 🌐 ബഹുഭാഷാ പിന്തുണ
|
||||
|
||||
#### GitHub Action മുഖേന പിന്തുണ (സ്വയകാരികവും ഏപ്പോഴും അപ്-ടു-ഡേറ്റ് ആയതിനാൽ)
|
||||
#### GitHub Action വഴി പിന്തുണ ലഭ്യമാണ് (സ്വയമാറ്റവും എപ്പോഴും നവീകരിച്ചിട്ടുള്ളതും)
|
||||
|
||||
<!-- CO-OP TRANSLATOR LANGUAGES TABLE START -->
|
||||
[അറബി](../ar/README.md) | [ബംഗാളി](../bn/README.md) | [ബൾഗേറിയൻ](../bg/README.md) | [ബർമീസ് (മ്യാൻമാർ)](../my/README.md) | [ചൈനീസ് (സിംപ്ലിഫൈഡ്)](../zh/README.md) | [ചൈനീസ് (പരമ്പരാഗതം, ഹോങ്കോങ്)](../hk/README.md) | [ചൈനീസ് (പരമ്പരാഗതം, മക്കാവോ)](../mo/README.md) | [ചൈനീസ് (പരമ്പരാഗതം, തൈവാൻ)](../tw/README.md) | [ക്രൊയേഷ്യൻ](../hr/README.md) | [ചെക്ക്](../cs/README.md) | [ഡാനിഷ്](../da/README.md) | [ഡച്ചുഭാഷ](../nl/README.md) | [എസ്റ്റോണിയൻ](../et/README.md) | [ഫിനിഷ്](../fi/README.md) | [ഫ്രഞ്ച്](../fr/README.md) | [ജർമ്മൻ](../de/README.md) | [ഗ്രീക്ക്](../el/README.md) | [ഹീബ്രു](../he/README.md) | [ഹിന്ദി](../hi/README.md) | [ഹംഗേറിയൻ](../hu/README.md) | [ഇന്തോനേഷ്യൻ](../id/README.md) | [ഇറ്റാലിയൻ](../it/README.md) | [ജാപ്പനീസ്](../ja/README.md) | [ಕನ್ನಡ](../kn/README.md) | [കൊറിയൻ](../ko/README.md) | [ലിതുവേനിയൻ](../lt/README.md) | [മലേ](../ms/README.md) | [മലയാളം](./README.md) | [മറാത്തി](../mr/README.md) | [नेपाली](../ne/README.md) | [നൈജീരിയൻ പിഡ്ജിൻ](../pcm/README.md) | [നോർവീജിയൻ](../no/README.md) | [പെർഷ്യൻ (ഫാർസി)](../fa/README.md) | [പോളിഷ്](../pl/README.md) | [പോർതുഗീസ് (ബ്രസീൽ)](../br/README.md) | [പോർതുഗീസ് (പോർച്ചുഗൽ)](../pt/README.md) | [പഞ്ചാബി (ഗੁਰുമുഖി)](../pa/README.md) | [റൊമാനിയൻ](../ro/README.md) | [റഷ്യൻ](../ru/README.md) | [സർബിയൻ (സിറില്ലിക്)](../sr/README.md) | [സ്ലോവാക്](../sk/README.md) | [സ്ലൊവേനിയൻ](../sl/README.md) | [സ്പാനിഷ്](../es/README.md) | [സ്വാഹിലി](../sw/README.md) | [സ്വീഡിഷ്](../sv/README.md) | [തഗാലോഗ് (ഫിലിപ്പിനോ)](../tl/README.md) | [தமிழ്](../ta/README.md) | [తెలుగు](../te/README.md) | [തായ്](../th/README.md) | [ടർക്കിഷ്](../tr/README.md) | [യുക്രെയ്നിയൻ](../uk/README.md) | [ഉർദു](../ur/README.md) | [വിയറ്റ്നാമീസ്](../vi/README.md)
|
||||
[അറബി](../ar/README.md) | [ബംഗാളി](../bn/README.md) | [ബൾഗേറിയൻ](../bg/README.md) | [ബർമീസ് (മ്യാൻമാർ)](../my/README.md) | [ചൈനീസ് (സിംപ്ലിഫൈഡ്)](../zh/README.md) | [ചൈനീസ് (പരമ്പരാഗതം, ഹോങ്കോങ്)](../hk/README.md) | [ചൈനീസ് (പരമ്പരാഗതം, മക്കാവ്)](../mo/README.md) | [ചൈനീസ് (പരമ്പരഗ്, തായ്വാൻ)](../tw/README.md) | [ക്രൊയേഷ്യൻ](../hr/README.md) | [ചെക്ക്](../cs/README.md) | [ഡാനിഷ്](../da/README.md) | [ഡച്ച്](../nl/README.md) | [എസ്റ്റോണിയൻ](../et/README.md) | [ഫിന്നീഷ്](../fi/README.md) | [ഫ്രഞ്ച്](../fr/README.md) | [ജർമ്മൻ](../de/README.md) | [ഗ്രീക്ക്](../el/README.md) | [ഹീബ്രു](../he/README.md) | [ഹിന്ദി](../hi/README.md) | [ഹംഗേറിയൻ](../hu/README.md) | [ഇന്ദോനേഷ്യൻ](../id/README.md) | [ഇറ്റാലിയൻ](../it/README.md) | [ജപ്പാനീസ്](../ja/README.md) | [കന്നഡ](../kn/README.md) | [കൊറിയൻ](../ko/README.md) | [ലിത്വാനിയൻ](../lt/README.md) | [മലായ്](../ms/README.md) | [മലയാളം](./README.md) | [മറാത്തി](../mr/README.md) | [നെപ്പാളി](../ne/README.md) | [നൈജീരിയൻ പിഡ്ജിന്](../pcm/README.md) | [നോർവീജിയൻ](../no/README.md) | [പേർഷ്യൻ (ഫാർസി)](../fa/README.md) | [പോളിഷ്](../pl/README.md) | [പോർടുഗീസ് (ബ്രസീൽ)](../br/README.md) | [പോർടുഗീസ് (പോർച്ചുഗൽ)](../pt/README.md) | [പഞ്ചാബി (ഗുരുമുഖി)](../pa/README.md) | [റൊമാനിയൻ](../ro/README.md) | [റഷ്യൻ](../ru/README.md) | [സെർബിയൻ (സിറിലിക്)](../sr/README.md) | [സ്ലൊവാക്](../sk/README.md) | [സ്ലോവേനിയൻ](../sl/README.md) | [സ്പാനിഷ്](../es/README.md) | [സ്വാഹിലി](../sw/README.md) | [സ്വീഡിഷ്](../sv/README.md) | [ടാഗലോഗ് (ഫിലിപ്പിനൊ)](../tl/README.md) | [തമിഴ്](../ta/README.md) | [തെലുങ്ക്](../te/README.md) | [തായ്](../th/README.md) | [തുർക്കിഷ്](../tr/README.md) | [ഉക്രെയ്നിയൻ](../uk/README.md) | [ഉർദു](../ur/README.md) | [വിയറ്റ്നാമീസ്](../vi/README.md)
|
||||
<!-- CO-OP TRANSLATOR LANGUAGES TABLE END -->
|
||||
|
||||
**കൂടുതൽ തരംഭാഷാ പിന്തുണ ചേർക്കണമെങ്കിൽ പിന്തുണ ചെയ്യപ്പെടുന്ന ഭാഷകളുടെ ലിസ്റ്റ് [ഇവിടെ](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md) കാണാം**
|
||||
**കൂടുതൽ പരിഭാഷകൾ ആവശ്യമായാൽ പിന്തുണ ലഭ്യമായ ഭാഷകൾ [ഇവിടെയാണ്](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md)**
|
||||
|
||||
## കമ്മ്യൂണിറ്റിയിൽ ചേർക്കുക
|
||||
[](https://discord.gg/nTYy5BXMWG)
|
||||
## കമ്മ്യൂണിറ്റിയിൽ ചേരുക
|
||||
[](https://discord.gg/nTYy5BXMWG)
|
||||
|
||||
## നിങ്ങൾ എന്ത് പഠിക്കും
|
||||
## നിങ്ങൾ പഠിക്കേണ്ടത്
|
||||
|
||||
**[കോഴ്സിന്റെ മൈൻഡ്മാപ്പ്](http://soshnikov.com/courses/ai-for-beginners/mindmap.html)**
|
||||
**[പാഠ്യപദ്ധതിയുടെ മൈൻഡ്മാപ്പ്](http://soshnikov.com/courses/ai-for-beginners/mindmap.html)**
|
||||
|
||||
ഈ പാഠ്യക്രമത്തിൽ നിങ്ങൾ താഴെപ്പറയുന്നവയെ പഠിക്കും:
|
||||
ഈ കരിക്കുലത്തിൽ നിങ്ങൾ പഠിക്കുക:
|
||||
|
||||
* ആർട്ടിഫിഷ്യൽ ഇന്റലിജൻസിന്റെ വ്യത്യസ്ത സമീപനങ്ങൾ, അതിൽ "പാരമ്പര്യ" സിംബോളിക് സമീപനവും **ജ്ഞാന പ്രതിനിധീകരണം** (Knowledge Representation) மற்றும் ന്യായീകരണവും ഉൾപ്പെടുന്നു ([GOFAI](https://en.wikipedia.org/wiki/Symbolic_artificial_intelligence)).
|
||||
* നൂറൽ നെറ്റ്വർക്ക്കളും **ഡിപ്ലേർണിംഗും**, ഇവയാണ് ആധുനിക AI യുടെ കേന്ദ്ര. ഈ പ്രധാന വിഷയങ്ങളുടെ ആശയങ്ങൾ രണ്ട് പ്രശസ്ത ഫ്രെയിംവർക്കുകളിൽ — [TensorFlow](http://Tensorflow.org) మరియు [PyTorch](http://pytorch.org) — ഉള്ള കോഡ് ഉപയോഗിച്ച് വിശദീകരിക്കും.
|
||||
* ചിത്രങ്ങളുമായി һәм ടെക്സ്റ്റുമായി പ്രവർത്തിക്കാൻ ഉപയോഗിക്കുന്ന നൂറൽ ആർക്കിടെക്ചറുകൾ. പുതിയ മോഡലുകൾ couvrir ചെയ്യും, പക്ഷേ ഏറ്റവും state-of-the-art നിലവാരത്തിൽ ചില കുറവുകൾ ഉണ്ടായിരിക്കാം.
|
||||
* കുറച്ച് പരമപ്രചാരത്തിലുള്ള AI സമീപനങ്ങൾ, ഉദാഹരണത്തിന് **ജെനെറ്റിക് ആൽഗോരിഥങ്ങൾ** (Genetic Algorithms) და **മൾട്ടി-ഏജന്റ് സിസ്റ്റങ്ങൾ** (Multi-Agent Systems).
|
||||
* കൃത്രിമ ബുദ്ധിയുടെ വിവിധ സമീപനങ്ങൾ, "നല്ല പഴയ" പ്രതീകാത്മക സമീപനം ഉൾപ്പെടെ, **ജ്ഞാന പ്രതിനിധീകരണം**യും ന്യായീകരണവുമൊടുവിലായി ([GOFAI](https://en.wikipedia.org/wiki/Symbolic_artificial_intelligence)).
|
||||
* **ന്യൂറൽ നെറ്റ്വർക്കുകൾ** மற்றும் **ഡീപ്പ് ലേണിംഗ്**, ഇവ ആധുനിക AI-യുടെ ഹൃദയഭാഗമാണ്. ഈ പ്രധാന വിഷയങ്ങളുടെ ആശയങ്ങൾ നാം രണ്ട് പ്രധാന ഫ്രെയിംവർക്കുകളിൽ - [TensorFlow](http://Tensorflow.org)യും [PyTorch](http://pytorch.org)ഉം കോഡ് ഉപയോഗിച്ച് വിശദീകരിക്കും.
|
||||
* ചിത്രങ്ങളുമായും വാചകങ്ങളുമായും പ്രവർത്തിക്കാൻ അനുയോജ്യമായ **ന്യൂറൽ ആർക്കിടെക്ചറുകൾ**. നാം പുതിയ മോഡലുകൾ അടങ്ങിയവയെ ഉൾപ്പെടുത്തും, പക്ഷേ ഏറ്റവും പുതിയ ഗവേഷണത്തിനു പോലെ മുഴുവനായിരിക്കാമെന്നില്ല.
|
||||
* കുറവ് ജനപ്രിയമായ AI സമീപനങ്ങൾ, ഉദാഹരണത്തിന് **ജനിതക ആൽഗോരിദങ്ങൾ** (Genetic Algorithms) και **മൾട്ടി-ഏജന്റ് സിസ്റ്റങ്ങൾ**.
|
||||
|
||||
ഈ പാഠ്യക്രമത്തിൽ ഞങ്ങൾ ഉൾപ്പെടുത്തുകയില്ലാത്തവ:
|
||||
ഈ കരിക്കുലത്തിൽ നമ്മൾ ഉൾപ്പെടുത്തിയില്ലാത്തതുകൾ:
|
||||
|
||||
> [ഈ കോഴ്സിന് ബന്ധപ്പെട്ട എല്ലാ അധിക വിഭവങ്ങളും നമ്മുടെ Microsoft Learn കളക്ഷനിൽ കണ്ടെത്തുക](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum)
|
||||
> [ഈ കോഴ്സിന്റെ എല്ലാ അധിക വിഭവങ്ങളും ഞങ്ങളുടെ Microsoft Learn ശേഖരത്തിൽ കണ്ടെത്തുക](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum)
|
||||
|
||||
* ബിസിനസിൽ **AI ഉപയോഗിക്കുന്ന** ബിസിനസ് കേസുകൾ. ഇതിന് Microsoft Learn ൽ ഉള്ള [Introduction to AI for business users](https://docs.microsoft.com/learn/paths/introduction-ai-for-business-users/?WT.mc_id=academic-77998-bethanycheum) പഠനപഥം പരിഗണിക്കുക, അല്ലെങ്കിൽ [AI Business School](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-bethanycheum), [INSEAD](https://www.insead.edu/) എന്ന സ്ഥാപനവുമായി സഹകരിച്ച് വികസിപ്പിച്ചതിനെ പരിശോധിക്കുക.
|
||||
* **ക്ലാസിക് മെഷീൻ ലേണിങ്ങ്**, ഇത് നല്ല രീതിയിൽ നമ്മളുടെ [Machine Learning for Beginners Curriculum](http://github.com/Microsoft/ML-for-Beginners) ൽ വിവരിച്ചിട്ടുണ്ട്.
|
||||
* പ്രായോഗിക AI ആപ്പ്ലിക്കേഷനുകൾ **[Cognitive Services](https://azure.microsoft.com/services/cognitive-services/?WT.mc_id=academic-77998-bethanycheum)** ഉപയോഗിച്ച് നിർമ്മിക്കപ്പെട്ടവ. ഇതിന്, Microsoft Learnille ഉള്ള [vision](https://docs.microsoft.com/learn/paths/create-computer-vision-solutions-azure-cognitive-services/?WT.mc_id=academic-77998-bethanycheum), [natural language processing](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-bethanycheum), **[Generative AI with Azure OpenAI Service](https://learn.microsoft.com/en-us/training/paths/develop-ai-solutions-azure-openai/?WT.mc_id=academic-77998-bethanycheum)** എന്നിവയടക്കം ഉള്ള മോഡ്യൂളുകൾ തുടങ്ങാൻ ഞങ്ങൾ ശുപാർശ ചെയ്യുന്നു.
|
||||
* പ്രത്യേക ML **ക്ലൗഡ് ഫ്രെയിംവർക്കുകൾ**, ഉദാഹരണത്തിന് [Azure Machine Learning](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-bethanycheum), [Microsoft Fabric](https://learn.microsoft.com/en-us/training/paths/get-started-fabric/?WT.mc_id=academic-77998-bethanycheum), അല്ലെങ്കിൽ [Azure Databricks](https://docs.microsoft.com/learn/paths/data-engineer-azure-databricks?WT.mc_id=academic-77998-bethanycheum). [Build and operate machine learning solutions with Azure Machine Learning](https://docs.microsoft.com/learn/paths/build-ai-solutions-with-azure-ml-service/?WT.mc_id=academic-77998-bethanycheum) և [Build and Operate Machine Learning Solutions with Azure Databricks](https://docs.microsoft.com/learn/paths/build-operate-machine-learning-solutions-azure-databricks/?WT.mc_id=academic-77998-bethanycheum) പഠനപഥങ്ങൾ പരിഗണിക്കുക.
|
||||
* **സംവാദാത്മക AI** (Conversational AI) և **ചാറ്റ് ബോട്ടുകൾ**. ഈ വിഷയത്തിനുള്ള ഒരു വേറെ [Create conversational AI solutions](https://docs.microsoft.com/learn/paths/create-conversational-ai-solutions/?WT.mc_id=academic-77998-bethanycheum) പഠനപഥം ഉണ്ട്, കൂടുതൽ വിവരങ്ങൾക്ക് നിങ്ങൾക്കിത് ([this blog post](https://soshnikov.com/azure/hello-bot-conversational-ai-on-microsoft-platform/)) പരിശോധിക്കാൻ കഴിയും.
|
||||
* ഡീപ്പ് ലേണിങിന്റെ പിന്നിലെ **ഗണിതശാസ്ത്രം**. ഇതിന് Ian Goodfellow, Yoshua Bengio, Aaron Courville എന്നിവരുടെ [Deep Learning](https://www.amazon.com/Deep-Learning-Adaptive-Computation-Machine/dp/0262035618) എന്ന പുസ്തകം ശുപാർശ ചെയ്യുന്നു, ഇത് ഓൺലൈനിൽ [https://www.deeplearningbook.org/](https://www.deeplearningbook.org/) ൽ ലഭ്യമാണ്.
|
||||
* വ്യാപാരത്തിൽ **AI** ഉപയോഗിക്കുന്ന ബിസിനസ് കേസുകൾ. Microsoft Learn-ിലെ [Introduction to AI for business users](https://docs.microsoft.com/learn/paths/introduction-ai-for-business-users/?WT.mc_id=academic-77998-bethanycheum) ലേണിംഗ് പാതയെടുക്കാൻ പരിഗണിക്കുക, അല്ലെങ്കിൽ [AI Business School](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-bethanycheum), [INSEAD](https://www.insead.edu/) സഹകരിച്ച് വികസിപ്പിച്ചിരിക്കുന്നു.
|
||||
* **ക്ലാസിക് മെഷീൻ ലേണിംഗ്**, ഇത് ഞങ്ങളുടെ [Machine Learning for Beginners Curriculum](http://github.com/Microsoft/ML-for-Beginners) നന്നായി വിവരിച്ചിരിക്കുന്നു.
|
||||
* പ്രായോഗിക AI അപ്ലിക്കേഷനുകൾ **[Cognitive Services](https://azure.microsoft.com/services/cognitive-services/?WT.mc_id=academic-77998-bethanycheum)** ഉപയോഗിച്ച് നിർമ്മിച്ചവ. ഇതിനായി, Microsoft Learn-ൽ ഉള്ള [vision](https://docs.microsoft.com/learn/paths/create-computer-vision-solutions-azure-cognitive-services/?WT.mc_id=academic-77998-bethanycheum), [natural language processing](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-bethanycheum), **[Generative AI with Azure OpenAI Service](https://learn.microsoft.com/en-us/training/paths/develop-ai-solutions-azure-openai/?WT.mc_id=academic-77998-bethanycheum)** എന്നിവയുടെ മോഡ്യൂളുകൾ ആരംഭിക്കാൻ ഞങ്ങൾ ശിപാർശ ചെയ്യുന്നു.
|
||||
* പ്രത്യേക ML **ക്ലൗഡ് ഫ്രെയിംവർക്കുകൾ**, ഉദാഹരണത്തിന് [Azure Machine Learning](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-bethanycheum), [Microsoft Fabric](https://learn.microsoft.com/en-us/training/paths/get-started-fabric/?WT.mc_id=academic-77998-bethanycheum), അല്ലെങ്കിൽ [Azure Databricks](https://docs.microsoft.com/learn/paths/data-engineer-azure-databricks?WT.mc_id=academic-77998-bethanycheum). [Build and operate machine learning solutions with Azure Machine Learning](https://docs.microsoft.com/learn/paths/build-ai-solutions-with-azure-ml-service/?WT.mc_id=academic-77998-bethanycheum) and [Build and Operate Machine Learning Solutions with Azure Databricks](https://docs.microsoft.com/learn/paths/build-operate-machine-learning-solutions-azure-databricks/?WT.mc_id=academic-77998-bethanycheum) ലേണിംഗ് പാതകൾ ഉപയോഗിക്കാൻ പരിഗണിക്കുക.
|
||||
* **സംവാദാത്മക AI**യും **ചാറ്റ് ബോടുകളും**. അതിന് വേറൊരു [Create conversational AI solutions](https://docs.microsoft.com/learn/paths/create-conversational-ai-solutions/?WT.mc_id=academic-77998-bethanycheum) ലേണിംഗ് പാതയുണ്ട്, കൂടുതൽ വിശദാംശങ്ങൾക്ക് നിങ്ങൾ [ഈ ബ്ലോഗ് പോസ്റ്റ്](https://soshnikov.com/azure/hello-bot-conversational-ai-on-microsoft-platform/) കാണാവുന്നതാണ്.
|
||||
* ഡീപ്പ് ലേൺണിങിന്റെ പിന്നിലെ **ഡീപ് ഗണിതം**. ഇതിന് ഞങ്ങൾ ശുപാർശ ചെയ്യുന്നത് Ian Goodfellow, Yoshua Bengio, Aaron Courville ലെ [Deep Learning](https://www.amazon.com/Deep-Learning-Adaptive-Computation-Machine/dp/0262035618) ആണ്, ഇത് ഓൺലൈനായും [https://www.deeplearningbook.org/](https://www.deeplearningbook.org/)ലിലും ലഭ്യമാണ്.
|
||||
|
||||
_ക്ലൗഡിലെ AI_ വിഷയങ്ങളിൽ ലഘുവഴിച്ചറിയലിനായി നിങ്ങൾക്ക് [Get started with artificial intelligence on Azure](https://docs.microsoft.com/learn/paths/get-started-with-artificial-intelligence-on-azure/?WT.mc_id=academic-77998-bethanycheum) Learning Path പരിഗണിക്കാവുന്നതാണ്.
|
||||
ക്ലൗഡിൽ AI സംബന്ധിച്ച വിഷങ്ങളിലേക്കുള്ള ഒരു സൌമ്യമായ പരിചয়েরായ് നിങ്ങൾക്ക് [Get started with artificial intelligence on Azure](https://docs.microsoft.com/learn/paths/get-started-with-artificial-intelligence-on-azure/?WT.mc_id=academic-77998-bethanycheum) ലേണിംഗ് പാത സ്വീകരിക്കാൻ പരിഗണിക്കാം.
|
||||
|
||||
# Content
|
||||
# ഉള്ളടക്കം
|
||||
|
||||
| | പാഠത്തിന്റെ ലിങ്ക് | PyTorch/Keras/TensorFlow | ലാബ് |
|
||||
| | പാഠ ലിങ്ക് | PyTorch/Keras/TensorFlow | Lab |
|
||||
| :-: | :------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------ |
|
||||
| 0 | [കോഴ്സ് സെറ്റപ്പ്](./lessons/0-course-setup/setup.md) | [താങ്കളുടെ ഡെവലപ്മെന്റ് പരിസ്ഥിതി സജ്ജമാക്കൽ](./lessons/0-course-setup/how-to-run.md) | |
|
||||
| I | [**ആർട്ടിഫിഷ്യൽ ഇന്റലിജൻസിലേക്ക് പരിചയം**](./lessons/1-Intro/README.md) | | |
|
||||
| 01 | [ആർട്ടിഫിഷ്യൽ ഇന്റലിജൻസിന്റെ പരിചയം এবং ചരിത്രം](./lessons/1-Intro/README.md) | - | - |
|
||||
| II | **സിംബോളിക് AI** |
|
||||
| 02 | [ജ്ഞാന പ്രതിനിധീകരണം மற்றும் എക്സ്പർട്ട് സിസ്റ്റങ്ങൾ](./lessons/2-Symbolic/README.md) | [Expert Systems](./lessons/2-Symbolic/Animals.ipynb) / [Ontology](./lessons/2-Symbolic/FamilyOntology.ipynb) /[Concept Graph](./lessons/2-Symbolic/MSConceptGraph.ipynb) | |
|
||||
| III | [**ന്യൂറൽ നെറ്റ്വർക്ക്സിലേക്ക് പരിചയം**](./lessons/3-NeuralNetworks/README.md) |||
|
||||
| 03 | [പേഴ്സെപ്ട്രോൺ](./lessons/3-NeuralNetworks/03-Perceptron/README.md) | [നോട്ട്ബുക്ക്](./lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb) | [ലാബ്](./lessons/3-NeuralNetworks/03-Perceptron/lab/README.md) |
|
||||
| 04 | [മൾട്ടി-ലെയേർഡ് പേറ്സെപ്ട്രോൺയും നമ്മുടെ സ്വന്തം ഫ്രെയിംവർക്ക് സൃഷ്ടിക്കൽ](./lessons/3-NeuralNetworks/04-OwnFramework/README.md) | [നോട്ട്ബുക്ക്](./lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) | [ലാബ്](./lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md) |
|
||||
| 05 | [ഫ്രെയിംവർക്കുകൾക്ക് പരിചയം (PyTorch/TensorFlow) மற்றும் ഒവർഫിറ്റിംഗ്](./lessons/3-NeuralNetworks/05-Frameworks/README.md) | [PyTorch](./lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) / [Keras](./lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) / [TensorFlow](./lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [ലാബ്](./lessons/3-NeuralNetworks/05-Frameworks/lab/README.md) |
|
||||
| IV | [**കമ്പ്യൂട്ടർ വിസൻ**](./lessons/4-ComputerVision/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) / [TensorFlow](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste)| [Microsoft Azure-ൽ കമ്പ്യൂട്ടർ വിസൻ എക്സ്പ്ലോർ ചെയ്യുക](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) |
|
||||
| 06 | [കമ്പ്യൂട്ടർ വിസനിലേക്ക് പരിചയം. OpenCV](./lessons/4-ComputerVision/06-IntroCV/README.md) | [നോട്ട്ബുക്ക്](./lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) | [ലാബ്](./lessons/4-ComputerVision/06-IntroCV/lab/README.md) |
|
||||
| 07 | [കോൺവൊല്യൂഷണൽ ന്യുറൽ നെറ്റ്വർക്കുകൾ](./lessons/4-ComputerVision/07-ConvNets/README.md) & [CNN Architectures](./lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) | [PyTorch](./lessons/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb) /[TensorFlow](./lessons/4-ComputerVision/07-ConvNets/ConvNetsTF.ipynb) | [ലാബ്](./lessons/4-ComputerVision/07-ConvNets/lab/README.md) |
|
||||
| 08 | [മുൻപരിശീലിത നെറ്റ്വർക്കുകൾ மற்றும் ട്രാൻസ്ഫർ ലേണിംഗ്](./lessons/4-ComputerVision/08-TransferLearning/README.md) and [Training Tricks](./lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) | [PyTorch](./lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) / [TensorFlow](./lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [ലാബ്](./lessons/4-ComputerVision/08-TransferLearning/lab/README.md) |
|
||||
| 09 | [ഓട്ടോഎൻകോഡറുകളും VAEs](./lessons/4-ComputerVision/09-Autoencoders/README.md) | [PyTorch](./lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) / [TensorFlow](./lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) | |
|
||||
| 10 | [ജനറേറ്റീവ് അഡ്വേഴ്സീരിയൽ നെറ്റ്വർക്കുകൾ & കലാത്മക സ്റ്റൈൽ ട്രാൻസ്ഫർ](./lessons/4-ComputerVision/10-GANs/README.md) | [PyTorch](./lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) / [TensorFlow](./lessons/4-ComputerVision/10-GANs/GANTF.ipynb) | |
|
||||
| 0 | [കോഴ്സ് സജ്ജീകരണം](./lessons/0-course-setup/setup.md) | [നിങ്ങളുടെ ഡെവലപ്മെന്റ് പരിസ്ഥിതി സജ്ജമാക്കുക](./lessons/0-course-setup/how-to-run.md) | |
|
||||
| I | [**AI-യിലേക്ക് പരിചയം**](./lessons/1-Intro/README.md) | | |
|
||||
| 01 | [AI-യുടെ പരിചയവും ചരിത്രവും](./lessons/1-Intro/README.md) | - | - |
|
||||
| II | **പ്രതീകാത്മക AI** |
|
||||
| 02 | [ജ്ഞാന പ്രതിനിധീകരണം மற்றும் വിദഗ്ദ്ധ സിസ്റ്റങ്ങൾ](./lessons/2-Symbolic/README.md) | [വിദഗ്ദ്ധ സിസ്റ്റങ്ങൾ](./lessons/2-Symbolic/Animals.ipynb) / [ഓന്റോളജി](./lessons/2-Symbolic/FamilyOntology.ipynb) /[സങ്കൽപ്പ ഗ്രാഫ്](./lessons/2-Symbolic/MSConceptGraph.ipynb) | |
|
||||
| III | [**ന്യൂറൽ നെറ്റ്വർക്കുകളിലേക്ക് പരിചയം**](./lessons/3-NeuralNetworks/README.md) |||
|
||||
| 03 | [പെർസെപ്ട്രോൺ](./lessons/3-NeuralNetworks/03-Perceptron/README.md) | [നോട്ട്ബുക്ക്](./lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb) | [ലാബ്](./lessons/3-NeuralNetworks/03-Perceptron/lab/README.md) |
|
||||
| 04 | [ബഹു-ലെയർഡ് പെർസെപ്ട്രോൺ և നമ്മുടെ സ്വന്തം ഫ്രെയിംവർക്കിന്റെ സൃഷ്ടി](./lessons/3-NeuralNetworks/04-OwnFramework/README.md) | [നോട്ട്ബുക്ക്](./lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) | [ലാബ്](./lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md) |
|
||||
| 05 | [ഫ്രെയിംവർക്കുകൾക്ക് പരിചയം (PyTorch/TensorFlow) കൂടാതെ ഓവർഫിറ്റിംഗ്](./lessons/3-NeuralNetworks/05-Frameworks/README.md) | [PyTorch](./lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) / [Keras](./lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) / [TensorFlow](./lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [ലാബ്](./lessons/3-NeuralNetworks/05-Frameworks/lab/README.md) |
|
||||
| IV | [**കമ്പ്യൂട്ടർ ദൃശ്യം**](./lessons/4-ComputerVision/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) / [TensorFlow](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste)| [Microsoft Azure-ൽ കമ്പ്യൂട്ടർ ദൃശ്യം അന്വേഷണത്തിലേക്ക്](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) |
|
||||
| 06 | [കമ്പ്യൂട്ടർ ദൃശ്യം: പരിചയം. OpenCV](./lessons/4-ComputerVision/06-IntroCV/README.md) | [നോട്ട്ബുക്ക്](./lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) | [ലാബ്](./lessons/4-ComputerVision/06-IntroCV/lab/README.md) |
|
||||
| 07 | [കൺവല്യൂഷണൽ ന്യൂറൽ നെറ്റ്വർക്കുകൾ](./lessons/4-ComputerVision/07-ConvNets/README.md) & [CNN ആർക്കിടെക്ചറുകൾ](./lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) | [PyTorch](./lessons/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb) /[TensorFlow](./lessons/4-ComputerVision/07-ConvNets/ConvNetsTF.ipynb) | [ലാബ്](./lessons/4-ComputerVision/07-ConvNets/lab/README.md) |
|
||||
| 08 | [മുൻപരിശീലിത നെറ്റ്വർക്ക്കളും ട്രാൻസ്ഫർലേണിങ്](./lessons/4-ComputerVision/08-TransferLearning/README.md) and [ട്രെയിനിംഗ് തന്ത്രങ്ങൾ](./lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) | [PyTorch](./lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) / [TensorFlow](./lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [ലാബ്](./lessons/4-ComputerVision/08-TransferLearning/lab/README.md) |
|
||||
| 09 | [ഓട്ടോഎൻകോഡറുകൾ மற்றும் VAEകൾ](./lessons/4-ComputerVision/09-Autoencoders/README.md) | [PyTorch](./lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) / [TensorFlow](./lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) | |
|
||||
| 10 | [ജനറേറ്റീവ് അഡ്വേഴ്സറിയൽ നെറ്റ്വർക്ക്లు & ആർട്ടിസ്റ്റിക് സ്റ്റൈൽ ട്രാൻസ്ഫർ](./lessons/4-ComputerVision/10-GANs/README.md) | [PyTorch](./lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) / [TensorFlow](./lessons/4-ComputerVision/10-GANs/GANTF.ipynb) | |
|
||||
| 11 | [വസ്തു കണ്ടെത്തൽ](./lessons/4-ComputerVision/11-ObjectDetection/README.md) | [TensorFlow](./lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection.ipynb) | [ലാബ്](./lessons/4-ComputerVision/11-ObjectDetection/lab/README.md) |
|
||||
| 12 | [സെമാന്റിക് സെഗ്മെൻറേഷൻ. U-Net](./lessons/4-ComputerVision/12-Segmentation/README.md) | [PyTorch](./lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) / [TensorFlow](./lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb) | |
|
||||
| V | [**പ്രാകൃത ഭാഷാ പ്രോസസ്സിംഗ്**](./lessons/5-NLP/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) /[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) | [Microsoft Azure-ൽ പ്രാകൃത ഭാഷാ പ്രോസസ്സിംഗ് എക്സ്പ്ലോർ ചെയ്യുക](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum)|
|
||||
| 13 | [ടെക്സ്റ്റ് പ്രതിനിധീകരണം. Bow/TF-IDF](./lessons/5-NLP/13-TextRep/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb) | |
|
||||
| 14 | [സെമാന്റിക് വേഡ് എംബഡിംഗുകൾ. Word2Vec and GloVe](./lessons/5-NLP/14-Embeddings/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) | |
|
||||
| 15 | [ഭാഷാ മോഡലിംഗ്. നിങ്ങളുടെ സ്വന്തം എംബഡിങുകൾ പരിശീലിപ്പിക്കൽ](./lessons/5-NLP/15-LanguageModeling/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) | [ലാബ്](./lessons/5-NLP/15-LanguageModeling/lab/README.md) |
|
||||
| 16 | [റികറന്റ് ന്യുറൽ നെറ്റ്വർക്കുകൾ](./lessons/5-NLP/16-RNN/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNTF.ipynb) | |
|
||||
| 17 | [ജനറേറ്റീവ് റികറന്റ് നെറ്റ്വർക്കുകൾ](./lessons/5-NLP/17-GenerativeNetworks/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.ipynb) | [ലാബ്](./lessons/5-NLP/17-GenerativeNetworks/lab/README.md) |
|
||||
| 18 | [ട്രാൻസ്ഫോർമേഴ്സ്. BERT.](./lessons/5-NLP/18-Transformers/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb) /[TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersTF.ipynb) | |
|
||||
| 19 | [നെയിംഡ് എന്റിറ്റി റെക്കഗ്നിഷൻ](./lessons/5-NLP/19-NER/README.md) | [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/19-NER/NER-TF.ipynb) | [ലാബ്](./lessons/5-NLP/19-NER/lab/README.md) |
|
||||
| 20 | [വലു്യമുള്ള ഭാഷാ മോഡലുകൾ, പ്രോംപ്റ്റ് പ്രോഗ്രാമിംഗ് மற்றும் Few-Shot ടാസ്കുകൾ](./lessons/5-NLP/20-LangModels/README.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) | |
|
||||
| VI | **മറ്റു AI സാങ്കേതികങ്ങൾ** || |
|
||||
| 21 | [ജനിതക ആൽഗോരിതങ്ങൾ](./lessons/6-Other/21-GeneticAlgorithms/README.md) | [നോട്ട്ബുക്ക്](./lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb) | |
|
||||
| 22 | [ഡീപ്പ് റീൻഫോഴ്സ്മെന്റ് ലേണിംഗ്](./lessons/6-Other/22-DeepRL/README.md) | [PyTorch](./lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) /[TensorFlow](./lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) | [ലാബ്](./lessons/6-Other/22-DeepRL/lab/README.md) |
|
||||
| 12 | [സെമാന്റിക് സെഗ്മെന്റേഷൻ. U-Net](./lessons/4-ComputerVision/12-Segmentation/README.md) | [PyTorch](./lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) / [TensorFlow](./lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb) | |
|
||||
| V | [**പ്രാകൃത ഭാഷാ പ്രോസസ്സിംഗ്**](./lessons/5-NLP/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) /[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) | [Microsoft Azure-ൽ പ്രാകൃത ഭാഷാ പ്രോസസ്സിംഗ് അന്വേഷിക്കുക](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum)|
|
||||
| 13 | [പാഠ പ്രതിനിധീകരണം. Bow/TF-IDF](./lessons/5-NLP/13-TextRep/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb) | |
|
||||
| 14 | [സെമാന്റിക് വാക്ക് എംബഡിങ്ങുകൾ. Word2Vec and GloVe](./lessons/5-NLP/14-Embeddings/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) | |
|
||||
| 15 | [ഭാഷാ മോഡലിംഗ്. നിങ്ങളുടെ സ്വന്തം എംബഡിങ്ങുകൾ പരിശീലിപ്പിക്കൽ](./lessons/5-NLP/15-LanguageModeling/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) | [ലാബ്](./lessons/5-NLP/15-LanguageModeling/lab/README.md) |
|
||||
| 16 | [റിക്കറന്റ് ന്യൂറൽ നെറ്റ്വർക്കുകൾ](./lessons/5-NLP/16-RNN/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNTF.ipynb) | |
|
||||
| 17 | [ജനറേറ്റീവ് റിക്കറന്റ് നെറ്റ്വർക്കുകൾ](./lessons/5-NLP/17-GenerativeNetworks/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.ipynb) | [ലാബ്](./lessons/5-NLP/17-GenerativeNetworks/lab/README.md) |
|
||||
| 18 | [Transformers. BERT.](./lessons/5-NLP/18-Transformers/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb) /[TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersTF.ipynb) | |
|
||||
| 19 | [നാമീകരിച്ചതായ ഘടകങ്ങളുടെ തിരിച്ചറിവ്](./lessons/5-NLP/19-NER/README.md) | [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/19-NER/NER-TF.ipynb) | [ലാബ്](./lessons/5-NLP/19-NER/lab/README.md) |
|
||||
| 20 | [വലുതായ ഭാഷാ മോഡലുകൾ, പ്രോംപ്റ്റ് പ്രോഗ്രാമിംഗ്, மற்றும் Few-Shot ടാസ്കുകൾ](./lessons/5-NLP/20-LangModels/README.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) | |
|
||||
| VI | **മറ്റുള്ള AI സാങ്കേതിക വിദ്യകൾ** || |
|
||||
| 21 | [ജനിതക ആൽഗോറിതങ്ങൾ](./lessons/6-Other/21-GeneticAlgorithms/README.md) | [നോട്ട്ബുക്ക്](./lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb) | |
|
||||
| 22 | [ഡീപ്പ് റീൻഫോഴ്സ്മെന്റ് ലേണിംഗ്](./lessons/6-Other/22-DeepRL/README.md) | [PyTorch](./lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) /[TensorFlow](./lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) | [ലാബ്](./lessons/6-Other/22-DeepRL/lab/README.md) |
|
||||
| 23 | [മൾട്ടി-ഏജന്റ് സിസ്റ്റങ്ങൾ](./lessons/6-Other/23-MultiagentSystems/README.md) | | |
|
||||
| VII | **AI നൈതികത** | | |
|
||||
| 24 | [AI നൈതികതയും ഉത്തരവാദിത്വപരമായ AI](./lessons/7-Ethics/README.md) | [Microsoft Learn: ഉത്തരവാദിത്വപരമായ AI സിദ്ധാന്തങ്ങൾ](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) | |
|
||||
| IX | **കൂടുതൽ** | | |
|
||||
| 25 | [മൾട്ടി-മോഡൽ നെറ്റ്വർക്കുകൾ, CLIP and VQGAN](./lessons/X-Extras/X1-MultiModal/README.md) | [നോട്ട്ബുക്ക്](./lessons/X-Extras/X1-MultiModal/Clip.ipynb) | |
|
||||
| 24 | [AI നൈതികതയും ഉത്തരവാദിത്വമുള്ള AI](./lessons/7-Ethics/README.md) | [Microsoft Learn: ഉത്തരവാദിയായ AI സിദ്ധാന്തങ്ങൾ](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) | |
|
||||
| IX | **കൂടുതൽ വിഷയങ്ങൾ** | | |
|
||||
| 25 | [മൾട്ടി-മൊഡൽ നെറ്റ്വർക്കുകൾ, CLIP and VQGAN](./lessons/X-Extras/X1-MultiModal/README.md) | [നോട്ട്ബുക്ക്](./lessons/X-Extras/X1-MultiModal/Clip.ipynb) | |
|
||||
|
||||
## ഓരോ പാഠവും ഉൾക്കൊള്ളുന്നത്
|
||||
## ഓരോ പാഠത്തിലും ഉൾപ്പെടുന്നവ
|
||||
|
||||
* മുൻകൂടി വായിക്കാൻ ഉള്ള സാമഗ്രി
|
||||
* പ്രവർത്തനക്ഷമമായ Jupyter നോട്ട്ബുക്ക്లు, ഇവ പലപ്പോഴും ഒരു ഫ്രെയിംവർക്കിന് പ്രത്യേകമായതും ആണ് (**PyTorch** അല്ലെങ്കിൽ **TensorFlow**). പ്രവർത്തനക്ഷമമായ നോട്ട്ബുക്ക് വലിയൊരു സിദ്ധാന്തപരുള്ള ഉള്ളടക്കവും ഉൾക്കൊള്ളുന്നതിനാൽ വിഷയം മനസ്സിലാക്കാൻ കുറഞ്ഞത് ഒരു പതിപ്പ് (PyTorch അല്ലെങ്കിൽ TensorFlow) ഒരിക്കല് പരിശോധിക്കേണ്ടതാണ്.
|
||||
* **ലാബുകൾ** ചില വിഷയങ്ങൾക്ക് ലഭ്യത്തിലാണ്, ഇവ നിങ്ങൾ പഠിച്ച വസ്തുവിനെ ഒരു പ്രത്യേക പ്രശ്നത്തിൽ പ്രയോഗിക്കാൻ ഒരു അവസരം നൽകുന്നു.
|
||||
* ചില വിഭാഗങ്ങളിൽ ബന്ധപ്പെട്ട വിഷയങ്ങൾ ഉൾക്കൊള്ളുന്ന [**MS Learn**](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) മോഡ്യൂളുകളിലേക്കുള്ള ലിങ്കുകൾ അടങ്ങിയിരിക്കുന്നു.
|
||||
* മുന് വായനക്കുള്ള സാമഗ്രികൾ
|
||||
* നടപ്പാക്കാവുന്ന Jupyter നോട്ട്ബുക്കുകൾ, സാധാരണയായി ഫ്രെയിംവർക്കിന് പ്രത്യേകമായിരിക്കും (**PyTorch** or **TensorFlow**). നടപ്പാക്കിയ നോട്ട്ബുക്ക് സിദ്ധാന്തപരമായ വലിയൊരു വിഭവവും അടങ്ങിയിട്ടുണ്ട്, അതിനാൽ വിഷയം മനസിലാക്കാൻ കുറഞ്ഞതായിരുന്നാലും നോട്ട്ബുക്കിന്റെ ഒരു പതിപ്പ് (PyTorch അല്ലെങ്കിൽ TensorFlow) വായിച്ചുകാലം കൊണ്ട് പോകേണ്ടതുണ്ട്.
|
||||
* ചില വിഷയങ്ങൾക്ക് ലഭ്യമായ **ലാബുകൾ**, ഇത് നിങ്ങൾ പഠിച്ച മെറ്റീരിയൽ ഒരു പ്രത്യേക പ്രശ്നത്തിലേക്ക് പ്രയോഗിക്കാൻ അവസരം നൽകും.
|
||||
* ചില സെക്ഷനുകളിൽ ബന്ധപ്പെട്ട വിഷയങ്ങൾ ഉൾക്കൊള്ളുന്ന [**MS Learn**](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) മോഡ്യൂളുകളിലേക്ക് ലിങ്കുകൾ ഉണ്ട്.
|
||||
|
||||
## തുടക്കം
|
||||
## തുടങ്ങാം
|
||||
|
||||
### 🎯 AI-യിൽ പുതുതായി? ഇവിടെ നിന്നു തുടങ്ങുക!
|
||||
### 🎯 എഐയിൽ പുതിയവനോ? ഇവിടെ തുടങ്ങൂ!
|
||||
|
||||
നിങ്ങൾ AI-യിൽ പൂര്ണമായി പുതുതായി ആണെങ്കിൽ, ചുരുങ്ങിയതും പ്രായോഗികവുമായ ഉദാഹരണങ്ങൾ വേണമെങ്കിൽ, ഞങ്ങളുടെ [**ആദ്യകാലത്തിന് അനുയോജ്യമായ ഉദാഹരണങ്ങൾ**](./examples/README.md) കാണുക! ഇവയിൽ ഉൾപ്പെടുന്നു:
|
||||
നിങ്ങൾ എഐയിൽ പൂർണമായും പുതിയവനാണെങ്കിൽ, ശീഘ്രവും കൈകൊണ്ടു പരീക്ഷിക്കാവുന്ന ഉദാഹരണങ്ങൾ വേണമെങ്കിൽ, ഞങ്ങളുടെ [**ആരംഭകർക്ക് സൗഹൃദമുള്ള ഉദാഹരണങ്ങൾ**](./examples/README.md) പരിശോധിക്കുക! ഇതിൽ ഉൾപ്പെടുന്നു:
|
||||
|
||||
- 🌟 **Hello AI World** - നിങ്ങളുടെ ആദ്യ AI പ്രോഗ്രാം (패റ്റേൺ തിരിച്ചറിവ്)
|
||||
- 🧠 **Simple Neural Network** - പ്രാരംഭം മുതൽ ഒരു ന്യുറൽ നെറ്റ്വർക്ക് നിർമ്മിക്കുക
|
||||
- 🖼️ **Image Classifier** - വിശദമായ കമന്റുകളോടെ ചിത്രങ്ങൾ വർഗ്ഗീകരിക്കുക
|
||||
- 💬 **ടെക്സ്റ്റ് സെൻറിമെന്റ്** - പോസിറ്റീവ്/നെഗറ്റീവ് ടെക്സ്റ്റ് വിശകലനം ചെയ്യുക
|
||||
- 🌟 **ഹെലോ AI വേൾഡ്** - നിങ്ങളുടെ ആദ്യ AI പ്രോഗ്രാം (മാദൃക തിരിച്ചറിവ്)
|
||||
- 🧠 **ലളിതമായ ന്യൂറൽ നെറ്റ്വർക്കു** - തുടക്കത്തിൽ നിന്നുതന്നെ ഒരു ന്യൂറൽ നെറ്റ്വർക്ക് നിർമ്മിക്കുക
|
||||
- 🖼️ **ചിത്ര വർഗ്ഗീകരകൻ** - വിശദമായ കമന്റുകളോടെ ചിത്രങ്ങൾ വർഗ്ഗീകരിക്കുക
|
||||
- 💬 **ടെക്സ്റ്റ് സെന്റിമെന്റ്** - പോസിറ്റീവ്/നെഗറ്റീവ് ടെക്സ്റ്റ് വിശകലനം
|
||||
|
||||
These examples are designed to help you understand AI concepts before diving into the full curriculum.
|
||||
|
||||
### 📚 Full Curriculum Setup
|
||||
### 📚 പൂർണ പാഠ്യപദ്ധതി സജ്ജീകരണം
|
||||
|
||||
- We have created a [setup lesson](./lessons/0-course-setup/setup.md) to help you with setting up your development environment. - For Educators, we have created a [curricula setup lesson](./lessons/0-course-setup/for-teachers.md) for you too!
|
||||
- How to [Run the code in a VSCode or a Codepace](./lessons/0-course-setup/how-to-run.md)
|
||||
- നാം [സജ്ജീകരണ പാഠം](./lessons/0-course-setup/setup.md) രചിച്ചിരിക്കുന്നു നിങ്ങളുടെ ഡെവലപ്മെന്റ് പരിസരം സജ്ജീകരിക്കുന്നതിന് സഹായിക്കാൻ. - അധ്യാപകർക്കായി, നാം നിങ്ങളെക്കും ഒരു [പാഠ്യപദ്ധതി സജ്ജീകരണ പാഠം](./lessons/0-course-setup/for-teachers.md) തയ്യാറാക്കി!
|
||||
- എങ്ങനെ [VSCode-ലോ Codepace-ലോ കോഡ് റൺ ചെയ്യാം](./lessons/0-course-setup/how-to-run.md)
|
||||
|
||||
Follow these steps:
|
||||
|
||||
|
|
@ -146,7 +146,7 @@ If you have product feedback or questions whilst building visit our [Azure AI Fo
|
|||
|
||||
## Quizzes
|
||||
|
||||
> **A note about quizzes**: All quizzes are contained in the Quiz-app folder in etc\quiz-app, or [Online Here](https://ff-quizzes.netlify.app/) They are linked from within the lessons the quiz app can be run locally or deployed to Azure; follow the instruction in the `quiz-app` folder. They are gradually being localized.
|
||||
> **ക്വിസുകൾക്കുറിച്ചുള്ള ഒരു കുറിപ്പ്**: All quizzes are contained in the Quiz-app folder in etc\quiz-app, or [ഓൺലൈനായി ഇവിടെ](https://ff-quizzes.netlify.app/) They are linked from within the lessons the quiz app can be run locally or deployed to Azure; follow the instruction in the `quiz-app` folder. They are gradually being localized.
|
||||
|
||||
## Help Wanted
|
||||
|
||||
|
|
@ -154,11 +154,11 @@ Do you have suggestions or found spelling or code errors? Raise an issue or crea
|
|||
|
||||
## Special Thanks
|
||||
|
||||
* **✍️ Primary Author:** [Dmitry Soshnikov](http://soshnikov.com), PhD
|
||||
* **🔥 Editor:** [Jen Looper](https://twitter.com/jenlooper), PhD
|
||||
* **🎨 Sketchnote illustrator:** [Tomomi Imura](https://twitter.com/girlie_mac)
|
||||
* **✅ Quiz Creator:** [Lateefah Bello](https://github.com/CinnamonXI), [MLSA](https://studentambassadors.microsoft.com/)
|
||||
* **🙏 Core Contributors:** [Evgenii Pishchik](https://github.com/Pe4enIks)
|
||||
* **✍️ പ്രധാന രചയിതാവ്:** [Dmitry Soshnikov](http://soshnikov.com), PhD
|
||||
* **🔥 എഡിറ്റർ:** [Jen Looper](https://twitter.com/jenlooper), PhD
|
||||
* **🎨 സ്കെച്ച്നോട്ട് ഇലസ്ട്രേറ്റർ:** [Tomomi Imura](https://twitter.com/girlie_mac)
|
||||
* **✅ ക്വിസ് സൃഷ്ടാവ്:** [Lateefah Bello](https://github.com/CinnamonXI), [MLSA](https://studentambassadors.microsoft.com/)
|
||||
* **🙏 പ്രധാന സംഭാവകർ:** [Evgenii Pishchik](https://github.com/Pe4enIks)
|
||||
|
||||
## Other Curricula
|
||||
|
||||
|
|
@ -166,21 +166,21 @@ Our team produces other curricula! Check out:
|
|||
|
||||
<!-- CO-OP TRANSLATOR OTHER COURSES START -->
|
||||
### LangChain
|
||||
[](https://aka.ms/langchain4j-for-beginners)
|
||||
[](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin)
|
||||
[](https://aka.ms/langchain4j-for-beginners)
|
||||
[](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin)
|
||||
|
||||
---
|
||||
|
||||
### Azure / Edge / MCP / Agents
|
||||
[](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
|
||||
---
|
||||
|
||||
### Generative AI Series
|
||||
[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst)
|
||||
[-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
|
||||
[-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst)
|
||||
|
|
@ -188,13 +188,13 @@ Our team produces other curricula! Check out:
|
|||
---
|
||||
|
||||
### Core Learning
|
||||
[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
|
||||
[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
|
||||
[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -208,15 +208,15 @@ Our team produces other curricula! Check out:
|
|||
|
||||
If you get stuck or have any questions about building AI apps. Join fellow learners and experienced developers in discussions about MCP. It's a supportive community where questions are welcome and knowledge is shared freely.
|
||||
|
||||
[](https://discord.gg/nTYy5BXMWG)
|
||||
[](https://discord.gg/nTYy5BXMWG)
|
||||
|
||||
If you have product feedback or errors while building visit:
|
||||
|
||||
[](https://aka.ms/foundry/forum)
|
||||
[](https://aka.ms/foundry/forum)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
നിരാകരണം:
|
||||
ഈ പ്രമാണം AI തർജ്ജമാ സേവനമായ [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് തർജ്ജമിച്ചതാണ്. ഞങ്ങൾ കൃത്യത ഉറപ്പാക്കാൻ ശ്രമിക്കുമ്പോഴും, ഓട്ടോമേറ്റഡ് തർജ്ജമകളിൽ പിശകുകളും തെറ്റുകളും ഉണ്ടായിരിക്കാനുള്ള സാധ്യതയുണ്ട്. അതിനാൽ മാതൃഭാഷയിലെ മൗലിക പ്രമാണത്തെ പ്രാമാണിക സ്രോതസ്സായി കരുതണം. നിർണായക വിവരങ്ങൾക്ക് വിദഗ്ദ്ധ മനുഷ്യ വിവർത്തനം ശുപാർശിക്കുന്നു. ഈ തർജ്ജമ ഉപയോഗിക്കപ്പെട്ടതിൽനിന്നോ അതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കും വ്യാഖ്യാനപ്രശ്നങ്ങൾക്കും ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
അസൂചനം:
|
||||
ഈ രേഖ AI പരിഭാഷാ സേവനമായ Co-op Translator (https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് പരിഭാഷപ്പെടുത്തിയതാണ്. ഞങ്ങൾ കൃത്യതയ്ക്ക് ശ്രമിച്ചേക്കলেও, ഓട്ടോമാറ്റഡ് പരിഭാഷകളിൽ പിശകുകൾ അല്ലെങ്കിൽ അപൂർണ്ണതകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. യഥാർത്ഥ രേഖ അതിന്റെ മാതൃഭാഷയിൽ പ്രാമാണിക ഉറവിടമായെന്ന് പരിഗണിക്കേണ്ടതാണ്. നിർണായകമായ വിവരങ്ങൾക്ക് പ്രൊഫഷണൽ മനുഷ്യ പരിഭാഷ ശിപാർശ ചെയ്യപ്പെടുന്നു. ഈ പരിഭാഷ ഉപയോഗിച്ചതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണങ്ങൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,166 +1,166 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "f57e8aa46141fd220b16ffed8f11aec7",
|
||||
"translation_date": "2025-11-25T20:54:16+00:00",
|
||||
"source_file": "lessons/1-Intro/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# എഐയുടെ പരിചയം
|
||||
|
||||

|
||||
|
||||
> സ്കെച്ച്നോട്ട്: [ടോമോമി ഇമുര](https://twitter.com/girlie_mac)
|
||||
|
||||
## [പഠനത്തിന് മുമ്പുള്ള ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/1)
|
||||
|
||||
**കൃത്രിമ ബുദ്ധിമുട്ട്** എന്നത് ഒരു രസകരമായ ശാസ്ത്രീയ ശാഖയാണ്, ഇത് കമ്പ്യൂട്ടറുകൾക്ക് ബുദ്ധിമുട്ടുള്ള പെരുമാറ്റം കാണിക്കാൻ എങ്ങനെ കഴിയും എന്ന് പഠിക്കുന്നു, ഉദാഹരണത്തിന് മനുഷ്യർക്ക് നന്നായി ചെയ്യാൻ കഴിയുന്ന കാര്യങ്ങൾ ചെയ്യുക.
|
||||
|
||||
ആദ്യമായി, കമ്പ്യൂട്ടറുകൾ [ചാൾസ് ബാബേജ്](https://en.wikipedia.org/wiki/Charles_Babbage) നിർമിച്ചത് സംഖ്യകളിൽ നിശ്ചിത ക്രമത്തിൽ പ്രവർത്തിക്കുന്നതിനായി - ഒരു ആൽഗോരിതം. 19-ാം നൂറ്റാണ്ടിൽ നിർദ്ദേശിച്ച ആദ്യ മാതൃകയേക്കാൾ ആധുനിക കമ്പ്യൂട്ടറുകൾ വളരെ മുന്നേറ്റം നേടിയിട്ടുണ്ടെങ്കിലും, അവ ഇപ്പോഴും നിയന്ത്രിത കണക്കുകൂട്ടലുകൾ പിന്തുടരുന്നു. അതിനാൽ, ലക്ഷ്യം നേടാൻ വേണ്ട കൃത്യമായ നടപടികൾ അറിയുകയാണെങ്കിൽ, കമ്പ്യൂട്ടറിനെ പ്രോഗ്രാം ചെയ്യാൻ കഴിയും.
|
||||
|
||||

|
||||
|
||||
> ഫോട്ടോ: [വിക്കി സോഷ്നിക്കോവ](http://twitter.com/vickievalerie)
|
||||
|
||||
> ✅ ഒരു വ്യക്തിയുടെ ഫോട്ടോയിൽ നിന്നു അവരുടെ പ്രായം നിർവചിക്കുന്നത് വ്യക്തമായി പ്രോഗ്രാം ചെയ്യാൻ കഴിയാത്ത ഒരു ജോലി ആണ്, കാരണം നമ്മൾ അത് ചെയ്യുമ്പോൾ തലയിൽ ഒരു സംഖ്യ എങ്ങനെ വരുന്നു എന്ന് നമുക്ക് അറിയില്ല.
|
||||
|
||||
---
|
||||
|
||||
എങ്കിലും, ചില ജോലികൾ നമുക്ക് വ്യക്തമായി എങ്ങനെ പരിഹരിക്കാമെന്ന് അറിയില്ല. ഒരു വ്യക്തിയുടെ ഫോട്ടോയിൽ നിന്നു പ്രായം നിർണയിക്കുന്നത് പരിഗണിക്കൂ. നാം പല പ്രായത്തിലുള്ള ആളുകളുടെ ഉദാഹരണങ്ങൾ കണ്ടിട്ടുണ്ടാകുന്നതിനാൽ നാം അത് പഠിച്ചിരിക്കുന്നു, പക്ഷേ നാം എങ്ങനെ ചെയ്യുന്നു എന്ന് വ്യക്തമായി വിശദീകരിക്കാൻ കഴിയില്ല, അല്ലെങ്കിൽ കമ്പ്യൂട്ടറിനെ പ്രോഗ്രാം ചെയ്യാനും കഴിയില്ല. ഇത് തന്നെ **കൃത്രിമ ബുദ്ധിമുട്ട്** (AI) യുടെ താൽപര്യമുള്ള ജോലികളാണ്.
|
||||
|
||||
✅ നിങ്ങൾക്ക് കമ്പ്യൂട്ടറിന് നൽകാൻ കഴിയുന്ന, AI ഉപയോഗിച്ച് സഹായം ലഭിക്കുന്ന ചില ജോലികൾ എന്തെല്ലാമാണെന്ന് ചിന്തിക്കുക. ധനകാര്യ, മെഡിസിൻ, കലകൾ തുടങ്ങിയ മേഖലകളിൽ ഇന്ന് AI എങ്ങനെ സഹായിക്കുന്നു?
|
||||
|
||||
## ദുർബല AI vs. ശക്തമായ AI
|
||||
|
||||
ദുർബല AI | ശക്തമായ AI
|
||||
---------------------------------------|-------------------------------------
|
||||
ദുർബല AI എന്നത് ഒരു പ്രത്യേക ജോലി അല്ലെങ്കിൽ കുറച്ച് ജോലികൾക്കായി രൂപകൽപ്പന ചെയ്തും പരിശീലിപ്പിച്ചും ഉള്ള AI സിസ്റ്റങ്ങളെയാണ് സൂചിപ്പിക്കുന്നത്.|ശക്തമായ AI, അല്ലെങ്കിൽ കൃത്രിമ പൊതുബുദ്ധി (AGI), മനുഷ്യനിലവാരമുള്ള ബുദ്ധിമുട്ടും മനസ്സിലാക്കലും ഉള്ള AI സിസ്റ്റങ്ങളെയാണ് സൂചിപ്പിക്കുന്നത്.
|
||||
ഈ AI സിസ്റ്റങ്ങൾ സാധാരണ ബുദ്ധിമുട്ടുള്ളവയല്ല; അവർ നിർവചിച്ച ജോലിയിൽ മികച്ച പ്രകടനം കാണിക്കുന്നു, പക്ഷേ യഥാർത്ഥ മനസ്സിലാക്കലോ ബോധമോ ഇല്ല.|ഈ AI സിസ്റ്റങ്ങൾക്ക് മനുഷ്യൻ ചെയ്യാൻ കഴിയുന്ന ഏതൊരു ബുദ്ധിമുട്ടുള്ള ജോലിയും ചെയ്യാനുള്ള കഴിവും, വ്യത്യസ്ത മേഖലകളിൽ അനുയോജ്യമായും പ്രവർത്തിക്കാനുള്ള കഴിവും, ബോധമോ സ്വയം ബോധമോ ഉള്ള രൂപവും ഉണ്ട്.
|
||||
ദുർബല AIയുടെ ഉദാഹരണങ്ങൾ സിരി, അലക്സ പോലുള്ള വിർച്വൽ അസിസ്റ്റന്റുകൾ, സ്ട്രീമിംഗ് സേവനങ്ങളിൽ ഉപയോഗിക്കുന്ന ശുപാർശ ആൽഗോരിതങ്ങൾ, പ്രത്യേക ഉപഭോക്തൃ സേവന ജോലികൾക്കായി രൂപകൽപ്പന ചെയ്ത ചാറ്റ്ബോട്ടുകൾ എന്നിവയാണ്.|ശക്തമായ AI നേടുക AI ഗവേഷണത്തിന്റെ ദീർഘകാല ലക്ഷ്യമാണ്, ഇത് ബുദ്ധിമുട്ട്, പഠനം, മനസ്സിലാക്കൽ, വ്യത്യസ്ത ജോലികളിലും സാഹചര്യങ്ങളിലും അനുയോജ്യമായും പ്രവർത്തിക്കാൻ കഴിയുന്ന AI സിസ്റ്റങ്ങൾ വികസിപ്പിക്കേണ്ടതാണ്.
|
||||
ദുർബല AI വളരെ പ്രത്യേകതയുള്ളതാണ്, മനുഷ്യനുപോലെ ബുദ്ധിമുട്ടുള്ള കഴിവുകളും പൊതുവായ പ്രശ്നപരിഹാര ശേഷികളും ഇല്ല.|ശക്തമായ AI ഇപ്പോൾ സിദ്ധാന്തപരമായ ആശയമാണ്, ഇതുവരെ യാതൊരു AI സിസ്റ്റവും ഈ തലത്തിലെ പൊതുവായ ബുദ്ധിമുട്ട് കൈവരിച്ചിട്ടില്ല.
|
||||
|
||||
കൂടുതൽ വിവരങ്ങൾക്ക് **[കൃത്രിമ പൊതുബുദ്ധി](https://en.wikipedia.org/wiki/Artificial_general_intelligence)** (AGI) കാണുക.
|
||||
|
||||
## ബുദ്ധിമുട്ടിന്റെ നിർവചനവും ട്യൂറിംഗ് ടെസ്റ്റും
|
||||
|
||||
**[ബുദ്ധിമുട്ട്](https://en.wikipedia.org/wiki/Intelligence)** എന്ന പദം ഉപയോഗിക്കുമ്പോൾ ഒരു പ്രശ്നം ഉണ്ട്, അതായത് ഈ പദത്തിന് വ്യക്തമായ നിർവചനമില്ല. ബുദ്ധിമുട്ട് **അബ്സ്ട്രാക്ട് ചിന്തന**യുമായി ബന്ധപ്പെട്ടു എന്ന് പറയാം, അല്ലെങ്കിൽ **സ്വയം ബോധം**യുമായി ബന്ധപ്പെട്ടു എന്ന് പറയാം, പക്ഷേ നാം അതിനെ ശരിയായി നിർവചിക്കാൻ കഴിയുന്നില്ല.
|
||||
|
||||

|
||||
|
||||
> [ഫോട്ടോ](https://unsplash.com/photos/75715CVEJhI) - [ആംബർ കിപ്പ്](https://unsplash.com/@sadmax) Unsplash-ൽ നിന്നു
|
||||
|
||||
*ബുദ്ധിമുട്ട്* എന്ന പദത്തിന്റെ അനിശ്ചിതത്വം കാണാൻ, "ഒരു പൂച്ച ബുദ്ധിമുട്ടുള്ളതാണോ?" എന്ന ചോദ്യം ഉത്തരം പറയാൻ ശ്രമിക്കുക. വ്യത്യസ്ത ആളുകൾക്ക് വ്യത്യസ്ത ഉത്തരങ്ങൾ ഉണ്ടാകും, കാരണം ഈ വാദം ശരിയാണെന്ന് തെളിയിക്കാൻ സർവത്ര അംഗീകരിക്കപ്പെട്ട ഒരു പരീക്ഷണം ഇല്ല. നിങ്ങൾക്ക് ഉണ്ടെന്ന് തോന്നിയാൽ - നിങ്ങളുടെ പൂച്ചയെ IQ ടെസ്റ്റിൽ പരീക്ഷിച്ച് നോക്കൂ...
|
||||
|
||||
✅ നിങ്ങൾ ബുദ്ധിമുട്ട് എങ്ങനെ നിർവചിക്കുന്നു എന്ന് ഒരു നിമിഷം ചിന്തിക്കുക. ഒരു കോഴി ഒരു മസിലിൽ നിന്ന് ഭക്ഷണം കണ്ടെത്താൻ കഴിവുള്ളതാണെങ്കിൽ അത് ബുദ്ധിമുട്ടുള്ളതാണോ? ഒരു കുട്ടി ബുദ്ധിമുട്ടുള്ളതാണോ?
|
||||
|
||||
---
|
||||
|
||||
AGIയെക്കുറിച്ച് സംസാരിക്കുമ്പോൾ, നാം യഥാർത്ഥ ബുദ്ധിമുട്ടുള്ള ഒരു സിസ്റ്റം സൃഷ്ടിച്ചിട്ടുണ്ടോ എന്ന് അറിയാൻ ഒരു മാർഗ്ഗം വേണം. [ആലൻ ട്യൂറിംഗ്](https://en.wikipedia.org/wiki/Alan_Turing) നിർദ്ദേശിച്ച ഒരു മാർഗ്ഗം **[ട്യൂറിംഗ് ടെസ്റ്റ്](https://en.wikipedia.org/wiki/Turing_test)** ആണ്, ഇത് ബുദ്ധിമുട്ടിന്റെ ഒരു നിർവചനമായി പ്രവർത്തിക്കുന്നു. ഈ ടെസ്റ്റ് ഒരു സിസ്റ്റം യഥാർത്ഥ ബുദ്ധിമുട്ടുള്ള ഒരു മനുഷ്യനുമായി താരതമ്യം ചെയ്യുന്നു, കാരണം യാതൊരു സ്വയം പ്രവർത്തിക്കുന്ന താരതമ്യവും കമ്പ്യൂട്ടർ പ്രോഗ്രാമിലൂടെ മറികടക്കാൻ കഴിയുന്നതുകൊണ്ട്, മനുഷ്യ ചോദ്യംചെയ്യുന്നവനെ ഉപയോഗിക്കുന്നു. അതിനാൽ, ഒരു മനുഷ്യൻ ടെക്സ്റ്റ് അടിസ്ഥാനത്തിലുള്ള സംഭാഷണത്തിൽ യഥാർത്ഥ മനുഷ്യനെയും കമ്പ്യൂട്ടർ സിസ്റ്റത്തിനെയും വേർതിരിക്കാൻ കഴിയുന്നില്ലെങ്കിൽ, ആ സിസ്റ്റം ബുദ്ധിമുട്ടുള്ളതായാണ് കണക്കാക്കുന്നത്.
|
||||
|
||||
> 2014-ൽ സെന്റ് പീറ്റേഴ്സ്ബർഗിൽ വികസിപ്പിച്ചെടുത്ത [Eugene Goostman](https://en.wikipedia.org/wiki/Eugene_Goostman) എന്ന ചാറ്റ്ബോട്ട് ട്യൂറിംഗ് ടെസ്റ്റ് കടന്നുപോകാൻ അടുത്തെത്തി. ഇത് 13 വയസ്സുള്ള യുക്രെയ്നിയൻ ബാലനായി മുന്നറിയിപ്പ് നൽകി, അതുകൊണ്ട് അറിവിന്റെ കുറവും ചില വാചക വ്യത്യാസങ്ങളും വിശദീകരിക്കാമെന്ന് പറഞ്ഞു. 5 മിനിറ്റ് സംഭാഷണത്തിന് ശേഷം 30% ജഡ്ജുമാർക്ക് ഇത് മനുഷ്യനാണെന്ന് വിശ്വസിപ്പിച്ചു, ട്യൂറിംഗ് 2000-ൽ യന്ത്രം ഇത് കടന്നുപോകുമെന്ന് കരുതിയിരുന്നു. എന്നാൽ, ഇത് ബുദ്ധിമുട്ടുള്ള സിസ്റ്റം സൃഷ്ടിച്ചതായി അല്ല, അല്ലെങ്കിൽ കമ്പ്യൂട്ടർ സിസ്റ്റം മനുഷ്യ ചോദ്യംചെയ്യുന്നവനെ മായ്ച്ചുവെന്ന് അല്ല - സിസ്റ്റം മനുഷ്യരെ മായ്ച്ചില്ല, മറിച്ച് ബോട്ട് സൃഷ്ടിച്ചവർ മായ്ച്ചു!
|
||||
|
||||
✅ നിങ്ങൾ ഒരിക്കൽ ചാറ്റ്ബോട്ട് നിങ്ങളെ മനുഷ്യനുമായി സംസാരിക്കുന്നതായി തെറ്റിദ്ധരിപ്പിച്ചിട്ടുണ്ടോ? അത് നിങ്ങളെ എങ്ങനെ വിശ്വസിപ്പിച്ചു?
|
||||
|
||||
## എഐയിലേക്കുള്ള വ്യത്യസ്ത സമീപനങ്ങൾ
|
||||
|
||||
കമ്പ്യൂട്ടർ മനുഷ്യനുപോലെ പെരുമാറണമെങ്കിൽ, നമ്മുടെ ചിന്തന രീതിയെ കമ്പ്യൂട്ടറിനുള്ളിൽ മോഡൽ ചെയ്യണം. അതിനാൽ, മനുഷ്യനെ ബുദ്ധിമുട്ടുള്ളവനാക്കുന്നത് എന്താണെന്ന് മനസ്സിലാക്കണം.
|
||||
|
||||
> യന്ത്രത്തിൽ ബുദ്ധിമുട്ട് പ്രോഗ്രാം ചെയ്യാൻ, നമ്മുടെ തീരുമാനമെടുക്കൽ പ്രക്രിയകൾ എങ്ങനെ പ്രവർത്തിക്കുന്നു എന്ന് മനസ്സിലാക്കണം. നിങ്ങൾ സ്വയം നിരീക്ഷണം ചെയ്താൽ, ചില പ്രക്രിയകൾ ബോധപൂർവ്വം അല്ലാതെ നടക്കുന്നു - ഉദാഹരണത്തിന്, ഒരു പൂച്ചയെ നായയെന്ന് തിരിച്ചറിയാൻ ചിന്തിക്കേണ്ടതില്ല - എന്നാൽ ചിലത് ചിന്തനയോടെ നടക്കുന്നു.
|
||||
|
||||
ഈ പ്രശ്നത്തിന് രണ്ട് സമീപനങ്ങൾ ഉണ്ട്:
|
||||
|
||||
ടോപ്പ്-ഡൗൺ സമീപനം (സിംബോളിക് റീസണിംഗ്) | ബോട്ടം-അപ്പ് സമീപനം (ന്യൂറൽ നെറ്റ്വർക്കുകൾ)
|
||||
---------------------------------------|-------------------------------------
|
||||
ടോപ്പ്-ഡൗൺ സമീപനം ഒരു വ്യക്തി പ്രശ്നം പരിഹരിക്കാൻ എങ്ങനെ ചിന്തിക്കുന്നു എന്ന് മോഡൽ ചെയ്യുന്നു. ഇത് മനുഷ്യനിൽ നിന്നുള്ള **ജ്ഞാനം** എടുക്കുകയും, അത് കമ്പ്യൂട്ടർ വായിക്കാൻ കഴിയുന്ന രൂപത്തിൽ പ്രതിനിധാനം ചെയ്യുകയും ചെയ്യുന്നു. കൂടാതെ, കമ്പ്യൂട്ടറിനുള്ളിൽ **റീസണിംഗ്** മോഡൽ ചെയ്യാനുള്ള മാർഗ്ഗം വികസിപ്പിക്കണം. | ബോട്ടം-അപ്പ് സമീപനം മനുഷ്യ മസ്തിഷ്കത്തിന്റെ ഘടന മോഡൽ ചെയ്യുന്നു, അതിൽ അനേകം ലളിതമായ ഘടകങ്ങൾ **ന്യൂറോണുകൾ** എന്നറിയപ്പെടുന്നു. ഓരോ ന്യൂറോണും അതിന്റെ ഇൻപുട്ടുകളുടെ ഭാരിത ശരാശരിയായി പ്രവർത്തിക്കുന്നു, **പരിശീലന ഡാറ്റ** നൽകി ന്യൂറോണുകളുടെ നെറ്റ്വർക്ക് പ്രയോജനപ്രദമായ പ്രശ്നങ്ങൾ പരിഹരിക്കാൻ പരിശീലിപ്പിക്കാം.
|
||||
|
||||
മറ്റു ചില സമീപനങ്ങളും ഉണ്ട്:
|
||||
|
||||
* **എമർജന്റ്**, **സിനർജറ്റിക്** അല്ലെങ്കിൽ **മൾട്ടി-ഏജന്റ് സമീപനം** അനേകം ലളിതമായ ഏജന്റുകളുടെ ഇടപെടലിലൂടെ സങ്കീർണ്ണമായ ബുദ്ധിമുട്ടുള്ള പെരുമാറ്റം ലഭിക്കാമെന്ന് അടിസ്ഥാനമാക്കുന്നു. [വികാസ സൈബർനെറ്റിക്സ്](https://en.wikipedia.org/wiki/Global_brain#Evolutionary_cybernetics) പ്രകാരം, ബുദ്ധിമുട്ട് *മറ്റു ലളിതമായ, പ്രതികരണപരമായ പെരുമാറ്റങ്ങളിൽ നിന്നു* *മീറ്റാസിസ്റ്റം ട്രാൻസിഷൻ* പ്രക്രിയയിൽ *ഉത്ഭവിക്കാം*.
|
||||
|
||||
* **വികാസ സമീപനം** അല്ലെങ്കിൽ **ജനിതക ആൽഗോരിതം** വികാസത്തിന്റെ സിദ്ധാന്തങ്ങളെ അടിസ്ഥാനമാക്കിയുള്ള ഒരു മെച്ചപ്പെടുത്തൽ പ്രക്രിയയാണ്.
|
||||
|
||||
ഈ സമീപനങ്ങൾ കോഴ്സിൽ പിന്നീട് പരിഗണിക്കും, ഇപ്പോൾ നാം രണ്ട് പ്രധാന ദിശകളിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കും: ടോപ്പ്-ഡൗൺ, ബോട്ടം-അപ്പ്.
|
||||
|
||||
### ടോപ്പ്-ഡൗൺ സമീപനം
|
||||
|
||||
**ടോപ്പ്-ഡൗൺ സമീപനത്തിൽ**, നാം നമ്മുടെ ചിന്തന രീതിയെ മോഡൽ ചെയ്യാൻ ശ്രമിക്കുന്നു. നാം ചിന്തിക്കുമ്പോൾ നമ്മുടെ ചിന്തകൾ പിന്തുടരാൻ കഴിയുന്നതിനാൽ, ഈ പ്രക്രിയ ഫോർമലൈസ് ചെയ്ത് കമ്പ്യൂട്ടറിനുള്ളിൽ പ്രോഗ്രാം ചെയ്യാം. ഇതാണ് **സിംബോളിക് റീസണിംഗ്**.
|
||||
|
||||
മനുഷ്യർക്ക് ചില നിയമങ്ങൾ മനസ്സിൽ ഉണ്ടാകാം, അവ അവരുടെ തീരുമാനമെടുക്കൽ പ്രക്രിയകൾ നയിക്കുന്നു. ഉദാഹരണത്തിന്, ഒരു ഡോക്ടർ രോഗിയെ പരിശോധന ചെയ്യുമ്പോൾ, അവൻ/അവൾക്ക് പനി ഉണ്ടെന്ന് മനസ്സിലാകാം, അതിനാൽ ശരീരത്തിൽ ചില അണുബാധകൾ ഉണ്ടാകാം. ഒരു വലിയ നിയമസമൂഹം ഒരു പ്രത്യേക പ്രശ്നത്തിൽ പ്രയോഗിച്ച് ഡോക്ടർ അന്തിമ രോഗനിർണയം കണ്ടെത്താൻ കഴിയും.
|
||||
|
||||
ഈ സമീപനം **ജ്ഞാന പ്രതിനിധാനം**ക്കും **റീസണിംഗിനും** ആശ്രയിച്ചിരിക്കുന്നു. മനുഷ്യ വിദഗ്ധനിൽ നിന്നുള്ള ജ്ഞാനം എടുക്കുന്നത് ഏറ്റവും ബുദ്ധിമുട്ടുള്ള ഭാഗമായിരിക്കാം, കാരണം പലപ്പോഴും ഡോക്ടർ എന്തുകൊണ്ട് ഒരു പ്രത്യേക രോഗനിർണയം വരുത്തുന്നു എന്ന് വ്യക്തമായി അറിയില്ല. ചിലപ്പോൾ പരിഹാരം അവന്റെ തലയിൽ തന്നെ വ്യക്തമായി വരുന്നു. ചില ജോലികൾ, ഉദാഹരണത്തിന് ഒരു വ്യക്തിയുടെ ഫോട്ടോയിൽ നിന്നു പ്രായം നിർണയിക്കൽ, ജ്ഞാന നിയന്ത്രണത്തിലേക്ക് കുറയ്ക്കാനാകില്ല.
|
||||
|
||||
### ബോട്ടം-അപ്പ് സമീപനം
|
||||
|
||||
മറ്റുവഴി, നാം നമ്മുടെ മസ്തിഷ്കത്തിലെ ഏറ്റവും ലളിത ഘടകമായ ന്യൂറോണിനെ മോഡൽ ചെയ്യാം. കമ്പ്യൂട്ടറിനുള്ളിൽ **കൃത്രിമ ന്യൂറൽ നെറ്റ്വർക്ക്** നിർമ്മിച്ച്, ഉദാഹരണങ്ങൾ നൽകി പ്രശ്നങ്ങൾ പരിഹരിക്കാൻ പഠിപ്പിക്കാം. ഇത് ഒരു കുഞ്ഞ് തന്റെ ചുറ്റുപാടുകളെ കുറിച്ച് നിരീക്ഷണങ്ങൾ നടത്തി പഠിക്കുന്ന രീതിയോട് സമാനമാണ്.
|
||||
|
||||
✅ കുഞ്ഞുങ്ങൾ എങ്ങനെ പഠിക്കുന്നു എന്ന് കുറച്ച് ഗവേഷണം ചെയ്യുക. കുഞ്ഞിന്റെ മസ്തിഷ്കത്തിലെ അടിസ്ഥാന ഘടകങ്ങൾ എന്തെല്ലാമാണ്?
|
||||
|
||||
> | ML എന്ത്? | |
|
||||
> |--------------|-----------|
|
||||
> | കൃത്രിമ ബുദ്ധിമുട്ടിന്റെ ഭാഗമായും, ഡാറ്റയുടെ അടിസ്ഥാനത്തിൽ പ്രശ്നം പരിഹരിക്കാൻ കമ്പ്യൂട്ടർ പഠിക്കുന്നതിനെ **മെഷീൻ ലേണിംഗ്** എന്ന് വിളിക്കുന്നു. ഈ കോഴ്സിൽ ക്ലാസിക്കൽ മെഷീൻ ലേണിംഗ് പരിഗണിക്കില്ല - നിങ്ങൾക്ക് വേറെ [Machine Learning for Beginners](http://aka.ms/ml-beginners) പാഠ്യപദ്ധതി കാണാം. |  |
|
||||
|
||||
## എഐയുടെ ഒരു സംക്ഷിപ്ത ചരിത്രം
|
||||
|
||||
കൃത്രിമ ബുദ്ധിമുട്ട് 20-ാം നൂറ്റാണ്ടിന്റെ മധ്യത്തിൽ ഒരു ശാഖയായി ആരംഭിച്ചു. ആദ്യം, സിംബോളിക് റീസണിംഗ് പ്രചാരത്തിലായിരുന്നു, ഇത് ചില പ്രധാന വിജയങ്ങൾക്കു വഴിതെളിച്ചു, ഉദാഹരണത്തിന് വിദഗ്ധ സിസ്റ്റങ്ങൾ – ചില പരിമിത പ്രശ്ന മേഖലകളിൽ വിദഗ്ധൻപോലെ പ്രവർത്തിക്കുന്ന കമ്പ്യൂട്ടർ പ്രോഗ്രാമുകൾ. എന്നാൽ, ഈ സമീപനം വലിയ തോതിൽ വ്യാപിപ്പിക്കാൻ കഴിയില്ലെന്ന് ഉടൻ മനസ്സിലായി. വിദഗ്ധനിൽ നിന്നുള്ള ജ്ഞാനം എടുക്കുകയും, അത് കമ്പ്യൂട്ടറിലേക്കു പ്രതിനിധാനം ചെയ്യുകയും, ആ ജ്ഞാനശേഖരം കൃത്യമായി നിലനിർത്തുകയും ചെയ്യുന്നത് വളരെ സങ്കീർണ്ണവും ചെലവേറിയതുമായ ജോലി ആയിരുന്നു. ഇതാണ് 1970-കളിലെ [AI വിന്റർ](https://en.wikipedia.org/wiki/AI_winter) ന്റെ കാരണമായത്.
|
||||
|
||||
<img alt="എഐയുടെ സംക്ഷിപ്ത ചരിത്രം" src="../../../../translated_images/history-of-ai.7e83efa70b537f5a0264357672b0884cf3a220fbafe35c65d70b2c3805f7bf5e.ml.png" width="70%"/>
|
||||
|
||||
> ചിത്രം: [ഡ്മിത്രി സോഷ്നിക്കോവ്](http://soshnikov.com)
|
||||
|
||||
കാലക്രമേണ, കംപ്യൂട്ടിംഗ് വിഭവങ്ങൾ വിലകുറഞ്ഞതായി, കൂടുതൽ ഡാറ്റ ലഭ്യമായി, അതിനാൽ ന്യൂറൽ നെറ്റ്വർക്ക് സമീപനങ്ങൾ മനുഷ്യരെ മത്സരിപ്പിക്കുന്നതിൽ മികച്ച പ്രകടനം കാണിച്ചു, ഉദാഹരണത്തിന് കമ്പ്യൂട്ടർ ദൃശ്യവും ശബ്ദ മനസ്സിലാക്കലും. കഴിഞ്ഞ ദശകത്തിൽ, കൃത്രിമ ബുദ്ധിമുട്ട് എന്ന പദം പ്രധാനമായും ന്യൂറൽ നെറ്റ്വർക്കുകളുടെ പദവിയായി ഉപയോഗിക്കപ്പെടുന്നു, കാരണം കേട്ടുവരുന്ന AI വിജയങ്ങൾ അവയിൽ അധിഷ്ഠിതമാണ്.
|
||||
|
||||
ചതുരശ്രം കളിക്കുന്ന കമ്പ്യൂട്ടർ പ്രോഗ്രാം സൃഷ്ടിക്കുമ്പോൾ സമീപനങ്ങൾ എങ്ങനെ മാറിയെന്ന് കാണാം:
|
||||
|
||||
* ആദ്യം, ചെസ്സ് പ്രോഗ്രാമുകൾ തിരച്ചിൽ അടിസ്ഥാനമാക്കിയായിരുന്നു – ഒരു പ്രോഗ്രാം എതിരാളിയുടെ സാധ്യതയുള്ള നീക്കങ്ങൾ കണക്കാക്കി, കുറച്ച് നീക്കങ്ങൾക്കുള്ളിൽ ലഭ്യമായ മികച്ച സ്ഥാനം കണ്ടെത്തി ഏറ്റവും നല്ല നീക്കം തിരഞ്ഞെടുക്കുന്നു. ഇതു [ആൽഫാ-ബീറ്റ പ്രൂണിംഗ്](https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning) ആൽഗോരിതം വികസിപ്പിക്കാൻ വഴിതെളിച്ചു.
|
||||
* തിരച്ചിൽ തന്ത്രങ്ങൾ കളിയുടെ അവസാനം നല്ലതാണ്, കാരണം തിരച്ചിൽ സ്ഥലം കുറവാണ്. എന്നാൽ കളിയുടെ തുടക്കത്തിൽ തിരച്ചിൽ സ്ഥലം വലുതാണ്, ആൽഗോരിതം മനുഷ്യ കളിക്കാരുടെ നിലവിലുള്ള മത്സരങ്ങളിൽ നിന്നു പഠിച്ച് മെച്ചപ്പെടുത്താം. പിന്നീട് പരീക്ഷണങ്ങൾ [കേസ്-ബേസ്ഡ് റീസണിംഗ്](https://en.wikipedia.org/wiki/Case-based_reasoning) ഉപയോഗിച്ചു, പ്രോഗ്രാം നിലവിലെ സ്ഥിതിക്ക് സമാനമായ കേസുകൾ ജ്ഞാനശേഖരത്തിൽ തിരഞ്ഞെടുത്തു.
|
||||
* മനുഷ്യരെ തോൽപ്പിക്കുന്ന ആധുനിക പ്രോഗ്രാമുകൾ ന്യൂറൽ നെറ്റ്വർക്കുകളും [റീ ഇൻഫോഴ്സ്മെന്റ് ലേണിംഗ്](https://en.wikipedia.org/wiki/Reinforcement_learning) ഉം അടിസ്ഥാനമാക്കിയതാണ്, ഇവ സ്വയം നേരിട്ട് കളിച്ച് പിഴവുകളിൽ നിന്നു പഠിക്കുന്നു – മനുഷ്യർ ചെസ്സ് പഠിക്കുമ്പോൾ ചെയ്യുന്ന പോലെ. എന്നാൽ കമ്പ്യൂട്ടർ വളരെ കുറച്ച് സമയത്ത് കൂടുതൽ കളികൾ കളിക്കാനാകുന്നതിനാൽ വേഗത്തിൽ പഠിക്കുന്നു.
|
||||
|
||||
✅ AI കളിച്ച മറ്റു ഗെയിമുകൾ കുറിച്ച് കുറച്ച് ഗവേഷണം ചെയ്യുക.
|
||||
|
||||
അങ്ങനെ, “സംഭാഷണ പ്രോഗ്രാമുകൾ” (ട്യൂറിംഗ് ടെസ്റ്റ് കടക്കാൻ കഴിയുന്നവ) സൃഷ്ടിക്കാനുള്ള സമീപനവും എങ്ങനെ മാറിയെന്ന് കാണാം:
|
||||
|
||||
* ആദ്യം
|
||||
> ചിത്രം: Dmitry Soshnikov, [ഫോട്ടോ](https://unsplash.com/photos/r8LmVbUKgns) [Marina Abrosimova](https://unsplash.com/@abrosimova_marina_foto) യുടെ, Unsplash
|
||||
|
||||
## പുതിയ AI ഗവേഷണം
|
||||
|
||||
2010-ൽ വലിയ പൊതു ഡാറ്റാസെറ്റുകൾ ലഭ്യമാകാൻ തുടങ്ങിയപ്പോൾ, ന്യൂറൽ നെറ്റ്വർക്ക് ഗവേഷണത്തിൽ വലിയ വളർച്ച ആരംഭിച്ചു. ഏകദേശം 14 മില്യൺ അനോട്ടേറ്റഡ് ചിത്രങ്ങൾ അടങ്ങിയ [ImageNet](https://en.wikipedia.org/wiki/ImageNet) എന്ന വലിയ ചിത്രശേഖരം, [ImageNet Large Scale Visual Recognition Challenge](https://image-net.org/challenges/LSVRC/) എന്ന മത്സരം ജനിപ്പിച്ചു.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം: [Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
2012-ൽ, [Convolutional Neural Networks](../4-ComputerVision/07-ConvNets/README.md) ആദ്യമായി ചിത്രവർഗ്ഗീകരണത്തിൽ ഉപയോഗിച്ചു, ഇതോടെ വർഗ്ഗീകരണ പിശകുകൾ (ഏകദേശം 30% മുതൽ 16.4% വരെ) ഗണ്യമായി കുറഞ്ഞു. 2015-ൽ, Microsoft Research-ന്റെ ResNet ആർക്കിടെക്ചർ [മനുഷ്യനിലവാരമുള്ള കൃത്യത കൈവരിച്ചു](https://doi.org/10.1109/ICCV.2015.123).
|
||||
|
||||
അതിനുശേഷം, ന്യൂറൽ നെറ്റ്വർക്ക് പല ജോലികളിലും വളരെ വിജയകരമായ പ്രകടനം കാഴ്ചവെച്ചു:
|
||||
|
||||
---
|
||||
|
||||
വർഷം | മനുഷ്യനിലവാരം കൈവരിച്ചത്
|
||||
-----|--------
|
||||
2015 | [ചിത്രവർഗ്ഗീകരണം](https://doi.org/10.1109/ICCV.2015.123)
|
||||
2016 | [സംവാദാത്മക ശബ്ദ തിരിച്ചറിയൽ](https://arxiv.org/abs/1610.05256)
|
||||
2018 | [സ്വയംകൃത യന്ത്രഭാഷാന്തരം](https://arxiv.org/abs/1803.05567) (ചൈനീസ്-ഇംഗ്ലീഷ്)
|
||||
2020 | [ചിത്ര വിവരണം](https://arxiv.org/abs/2009.13682)
|
||||
|
||||
കഴിഞ്ഞ കുറേ വർഷങ്ങളായി, BERT, GPT-3 പോലുള്ള വലിയ ഭാഷാ മോഡലുകളുമായി വലിയ വിജയങ്ങൾ കണ്ടു. ഇതിന് പ്രധാന കാരണം, പൊതുവായ ടെക്സ്റ്റ് ഡാറ്റ ലഭ്യമാകുന്നതാണ്, ഇത് മോഡലുകൾക്ക് ടെക്സ്റ്റുകളുടെ ഘടനയും അർത്ഥവും പിടികൂടാൻ, പൊതുവായ ടെക്സ്റ്റ് ശേഖരങ്ങളിൽ പ്രീ-ട്രെയിൻ ചെയ്യാനും, പിന്നീട് പ്രത്യേക ജോലികൾക്കായി മോഡലുകൾ പ്രത്യേകിപ്പിക്കാനും സഹായിക്കുന്നു. ഈ കോഴ്സിൽ പിന്നീട് [Natural Language Processing](../5-NLP/README.md) കുറിച്ച് കൂടുതൽ പഠിക്കും.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
ഇന്റർനെറ്റിൽ ഒരു യാത്ര നടത്തുക, നിങ്ങളുടെ അഭിപ്രായത്തിൽ AI ഏറ്റവും ഫലപ്രദമായി ഉപയോഗിക്കുന്നിടം കണ്ടെത്തുക. അത് ഒരു മാപ്പിംഗ് ആപ്പിൽ ആണോ, ശബ്ദം-ടെക്സ്റ്റ് സേവനത്തിലോ, അല്ലെങ്കിൽ ഒരു വീഡിയോ ഗെയിമിലോ? ആ സിസ്റ്റം എങ്ങനെ നിർമ്മിച്ചതെന്ന് ഗവേഷണം ചെയ്യുക.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/2)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
AI, ML ചരിത്രം [ഈ പാഠം](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/2-history-of-ML) വായിച്ച് അവലോകനം ചെയ്യുക. ആ പാഠത്തിന്റെ മുകളിൽ ഉള്ള സ്കെച്ച്നോട്ടിൽ നിന്നോ ഇതിൽ നിന്നോ ഒരു ഘടകം എടുത്ത് അതിന്റെ സാംസ്കാരിക പശ്ചാത്തലം മനസ്സിലാക്കാൻ കൂടുതൽ ഗവേഷണം നടത്തുക.
|
||||
|
||||
**അസൈൻമെന്റ്**: [ഗെയിം ജാം](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് പരിഗണിക്കേണ്ടതാണ്. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "f57e8aa46141fd220b16ffed8f11aec7",
|
||||
"translation_date": "2025-11-25T20:54:16+00:00",
|
||||
"source_file": "lessons/1-Intro/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# എഐയുടെ പരിചയം
|
||||
|
||||

|
||||
|
||||
> സ്കെച്ച്നോട്ട്: [ടോമോമി ഇമുര](https://twitter.com/girlie_mac)
|
||||
|
||||
## [പഠനത്തിന് മുമ്പുള്ള ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/1)
|
||||
|
||||
**കൃത്രിമ ബുദ്ധിമുട്ട്** എന്നത് ഒരു രസകരമായ ശാസ്ത്രീയ ശാഖയാണ്, ഇത് കമ്പ്യൂട്ടറുകൾക്ക് ബുദ്ധിമുട്ടുള്ള പെരുമാറ്റം കാണിക്കാൻ എങ്ങനെ കഴിയും എന്ന് പഠിക്കുന്നു, ഉദാഹരണത്തിന് മനുഷ്യർക്ക് നന്നായി ചെയ്യാൻ കഴിയുന്ന കാര്യങ്ങൾ ചെയ്യുക.
|
||||
|
||||
ആദ്യമായി, കമ്പ്യൂട്ടറുകൾ [ചാൾസ് ബാബേജ്](https://en.wikipedia.org/wiki/Charles_Babbage) നിർമിച്ചത് സംഖ്യകളിൽ നിശ്ചിത ക്രമത്തിൽ പ്രവർത്തിക്കുന്നതിനായി - ഒരു ആൽഗോരിതം. 19-ാം നൂറ്റാണ്ടിൽ നിർദ്ദേശിച്ച ആദ്യ മാതൃകയേക്കാൾ ആധുനിക കമ്പ്യൂട്ടറുകൾ വളരെ മുന്നേറ്റം നേടിയിട്ടുണ്ടെങ്കിലും, അവ ഇപ്പോഴും നിയന്ത്രിത കണക്കുകൂട്ടലുകൾ പിന്തുടരുന്നു. അതിനാൽ, ലക്ഷ്യം നേടാൻ വേണ്ട കൃത്യമായ നടപടികൾ അറിയുകയാണെങ്കിൽ, കമ്പ്യൂട്ടറിനെ പ്രോഗ്രാം ചെയ്യാൻ കഴിയും.
|
||||
|
||||

|
||||
|
||||
> ഫോട്ടോ: [വിക്കി സോഷ്നിക്കോവ](http://twitter.com/vickievalerie)
|
||||
|
||||
> ✅ ഒരു വ്യക്തിയുടെ ഫോട്ടോയിൽ നിന്നു അവരുടെ പ്രായം നിർവചിക്കുന്നത് വ്യക്തമായി പ്രോഗ്രാം ചെയ്യാൻ കഴിയാത്ത ഒരു ജോലി ആണ്, കാരണം നമ്മൾ അത് ചെയ്യുമ്പോൾ തലയിൽ ഒരു സംഖ്യ എങ്ങനെ വരുന്നു എന്ന് നമുക്ക് അറിയില്ല.
|
||||
|
||||
---
|
||||
|
||||
എങ്കിലും, ചില ജോലികൾ നമുക്ക് വ്യക്തമായി എങ്ങനെ പരിഹരിക്കാമെന്ന് അറിയില്ല. ഒരു വ്യക്തിയുടെ ഫോട്ടോയിൽ നിന്നു പ്രായം നിർണയിക്കുന്നത് പരിഗണിക്കൂ. നാം പല പ്രായത്തിലുള്ള ആളുകളുടെ ഉദാഹരണങ്ങൾ കണ്ടിട്ടുണ്ടാകുന്നതിനാൽ നാം അത് പഠിച്ചിരിക്കുന്നു, പക്ഷേ നാം എങ്ങനെ ചെയ്യുന്നു എന്ന് വ്യക്തമായി വിശദീകരിക്കാൻ കഴിയില്ല, അല്ലെങ്കിൽ കമ്പ്യൂട്ടറിനെ പ്രോഗ്രാം ചെയ്യാനും കഴിയില്ല. ഇത് തന്നെ **കൃത്രിമ ബുദ്ധിമുട്ട്** (AI) യുടെ താൽപര്യമുള്ള ജോലികളാണ്.
|
||||
|
||||
✅ നിങ്ങൾക്ക് കമ്പ്യൂട്ടറിന് നൽകാൻ കഴിയുന്ന, AI ഉപയോഗിച്ച് സഹായം ലഭിക്കുന്ന ചില ജോലികൾ എന്തെല്ലാമാണെന്ന് ചിന്തിക്കുക. ധനകാര്യ, മെഡിസിൻ, കലകൾ തുടങ്ങിയ മേഖലകളിൽ ഇന്ന് AI എങ്ങനെ സഹായിക്കുന്നു?
|
||||
|
||||
## ദുർബല AI vs. ശക്തമായ AI
|
||||
|
||||
ദുർബല AI | ശക്തമായ AI
|
||||
---------------------------------------|-------------------------------------
|
||||
ദുർബല AI എന്നത് ഒരു പ്രത്യേക ജോലി അല്ലെങ്കിൽ കുറച്ച് ജോലികൾക്കായി രൂപകൽപ്പന ചെയ്തും പരിശീലിപ്പിച്ചും ഉള്ള AI സിസ്റ്റങ്ങളെയാണ് സൂചിപ്പിക്കുന്നത്.|ശക്തമായ AI, അല്ലെങ്കിൽ കൃത്രിമ പൊതുബുദ്ധി (AGI), മനുഷ്യനിലവാരമുള്ള ബുദ്ധിമുട്ടും മനസ്സിലാക്കലും ഉള്ള AI സിസ്റ്റങ്ങളെയാണ് സൂചിപ്പിക്കുന്നത്.
|
||||
ഈ AI സിസ്റ്റങ്ങൾ സാധാരണ ബുദ്ധിമുട്ടുള്ളവയല്ല; അവർ നിർവചിച്ച ജോലിയിൽ മികച്ച പ്രകടനം കാണിക്കുന്നു, പക്ഷേ യഥാർത്ഥ മനസ്സിലാക്കലോ ബോധമോ ഇല്ല.|ഈ AI സിസ്റ്റങ്ങൾക്ക് മനുഷ്യൻ ചെയ്യാൻ കഴിയുന്ന ഏതൊരു ബുദ്ധിമുട്ടുള്ള ജോലിയും ചെയ്യാനുള്ള കഴിവും, വ്യത്യസ്ത മേഖലകളിൽ അനുയോജ്യമായും പ്രവർത്തിക്കാനുള്ള കഴിവും, ബോധമോ സ്വയം ബോധമോ ഉള്ള രൂപവും ഉണ്ട്.
|
||||
ദുർബല AIയുടെ ഉദാഹരണങ്ങൾ സിരി, അലക്സ പോലുള്ള വിർച്വൽ അസിസ്റ്റന്റുകൾ, സ്ട്രീമിംഗ് സേവനങ്ങളിൽ ഉപയോഗിക്കുന്ന ശുപാർശ ആൽഗോരിതങ്ങൾ, പ്രത്യേക ഉപഭോക്തൃ സേവന ജോലികൾക്കായി രൂപകൽപ്പന ചെയ്ത ചാറ്റ്ബോട്ടുകൾ എന്നിവയാണ്.|ശക്തമായ AI നേടുക AI ഗവേഷണത്തിന്റെ ദീർഘകാല ലക്ഷ്യമാണ്, ഇത് ബുദ്ധിമുട്ട്, പഠനം, മനസ്സിലാക്കൽ, വ്യത്യസ്ത ജോലികളിലും സാഹചര്യങ്ങളിലും അനുയോജ്യമായും പ്രവർത്തിക്കാൻ കഴിയുന്ന AI സിസ്റ്റങ്ങൾ വികസിപ്പിക്കേണ്ടതാണ്.
|
||||
ദുർബല AI വളരെ പ്രത്യേകതയുള്ളതാണ്, മനുഷ്യനുപോലെ ബുദ്ധിമുട്ടുള്ള കഴിവുകളും പൊതുവായ പ്രശ്നപരിഹാര ശേഷികളും ഇല്ല.|ശക്തമായ AI ഇപ്പോൾ സിദ്ധാന്തപരമായ ആശയമാണ്, ഇതുവരെ യാതൊരു AI സിസ്റ്റവും ഈ തലത്തിലെ പൊതുവായ ബുദ്ധിമുട്ട് കൈവരിച്ചിട്ടില്ല.
|
||||
|
||||
കൂടുതൽ വിവരങ്ങൾക്ക് **[കൃത്രിമ പൊതുബുദ്ധി](https://en.wikipedia.org/wiki/Artificial_general_intelligence)** (AGI) കാണുക.
|
||||
|
||||
## ബുദ്ധിമുട്ടിന്റെ നിർവചനവും ട്യൂറിംഗ് ടെസ്റ്റും
|
||||
|
||||
**[ബുദ്ധിമുട്ട്](https://en.wikipedia.org/wiki/Intelligence)** എന്ന പദം ഉപയോഗിക്കുമ്പോൾ ഒരു പ്രശ്നം ഉണ്ട്, അതായത് ഈ പദത്തിന് വ്യക്തമായ നിർവചനമില്ല. ബുദ്ധിമുട്ട് **അബ്സ്ട്രാക്ട് ചിന്തന**യുമായി ബന്ധപ്പെട്ടു എന്ന് പറയാം, അല്ലെങ്കിൽ **സ്വയം ബോധം**യുമായി ബന്ധപ്പെട്ടു എന്ന് പറയാം, പക്ഷേ നാം അതിനെ ശരിയായി നിർവചിക്കാൻ കഴിയുന്നില്ല.
|
||||
|
||||

|
||||
|
||||
> [ഫോട്ടോ](https://unsplash.com/photos/75715CVEJhI) - [ആംബർ കിപ്പ്](https://unsplash.com/@sadmax) Unsplash-ൽ നിന്നു
|
||||
|
||||
*ബുദ്ധിമുട്ട്* എന്ന പദത്തിന്റെ അനിശ്ചിതത്വം കാണാൻ, "ഒരു പൂച്ച ബുദ്ധിമുട്ടുള്ളതാണോ?" എന്ന ചോദ്യം ഉത്തരം പറയാൻ ശ്രമിക്കുക. വ്യത്യസ്ത ആളുകൾക്ക് വ്യത്യസ്ത ഉത്തരങ്ങൾ ഉണ്ടാകും, കാരണം ഈ വാദം ശരിയാണെന്ന് തെളിയിക്കാൻ സർവത്ര അംഗീകരിക്കപ്പെട്ട ഒരു പരീക്ഷണം ഇല്ല. നിങ്ങൾക്ക് ഉണ്ടെന്ന് തോന്നിയാൽ - നിങ്ങളുടെ പൂച്ചയെ IQ ടെസ്റ്റിൽ പരീക്ഷിച്ച് നോക്കൂ...
|
||||
|
||||
✅ നിങ്ങൾ ബുദ്ധിമുട്ട് എങ്ങനെ നിർവചിക്കുന്നു എന്ന് ഒരു നിമിഷം ചിന്തിക്കുക. ഒരു കോഴി ഒരു മസിലിൽ നിന്ന് ഭക്ഷണം കണ്ടെത്താൻ കഴിവുള്ളതാണെങ്കിൽ അത് ബുദ്ധിമുട്ടുള്ളതാണോ? ഒരു കുട്ടി ബുദ്ധിമുട്ടുള്ളതാണോ?
|
||||
|
||||
---
|
||||
|
||||
AGIയെക്കുറിച്ച് സംസാരിക്കുമ്പോൾ, നാം യഥാർത്ഥ ബുദ്ധിമുട്ടുള്ള ഒരു സിസ്റ്റം സൃഷ്ടിച്ചിട്ടുണ്ടോ എന്ന് അറിയാൻ ഒരു മാർഗ്ഗം വേണം. [ആലൻ ട്യൂറിംഗ്](https://en.wikipedia.org/wiki/Alan_Turing) നിർദ്ദേശിച്ച ഒരു മാർഗ്ഗം **[ട്യൂറിംഗ് ടെസ്റ്റ്](https://en.wikipedia.org/wiki/Turing_test)** ആണ്, ഇത് ബുദ്ധിമുട്ടിന്റെ ഒരു നിർവചനമായി പ്രവർത്തിക്കുന്നു. ഈ ടെസ്റ്റ് ഒരു സിസ്റ്റം യഥാർത്ഥ ബുദ്ധിമുട്ടുള്ള ഒരു മനുഷ്യനുമായി താരതമ്യം ചെയ്യുന്നു, കാരണം യാതൊരു സ്വയം പ്രവർത്തിക്കുന്ന താരതമ്യവും കമ്പ്യൂട്ടർ പ്രോഗ്രാമിലൂടെ മറികടക്കാൻ കഴിയുന്നതുകൊണ്ട്, മനുഷ്യ ചോദ്യംചെയ്യുന്നവനെ ഉപയോഗിക്കുന്നു. അതിനാൽ, ഒരു മനുഷ്യൻ ടെക്സ്റ്റ് അടിസ്ഥാനത്തിലുള്ള സംഭാഷണത്തിൽ യഥാർത്ഥ മനുഷ്യനെയും കമ്പ്യൂട്ടർ സിസ്റ്റത്തിനെയും വേർതിരിക്കാൻ കഴിയുന്നില്ലെങ്കിൽ, ആ സിസ്റ്റം ബുദ്ധിമുട്ടുള്ളതായാണ് കണക്കാക്കുന്നത്.
|
||||
|
||||
> 2014-ൽ സെന്റ് പീറ്റേഴ്സ്ബർഗിൽ വികസിപ്പിച്ചെടുത്ത [Eugene Goostman](https://en.wikipedia.org/wiki/Eugene_Goostman) എന്ന ചാറ്റ്ബോട്ട് ട്യൂറിംഗ് ടെസ്റ്റ് കടന്നുപോകാൻ അടുത്തെത്തി. ഇത് 13 വയസ്സുള്ള യുക്രെയ്നിയൻ ബാലനായി മുന്നറിയിപ്പ് നൽകി, അതുകൊണ്ട് അറിവിന്റെ കുറവും ചില വാചക വ്യത്യാസങ്ങളും വിശദീകരിക്കാമെന്ന് പറഞ്ഞു. 5 മിനിറ്റ് സംഭാഷണത്തിന് ശേഷം 30% ജഡ്ജുമാർക്ക് ഇത് മനുഷ്യനാണെന്ന് വിശ്വസിപ്പിച്ചു, ട്യൂറിംഗ് 2000-ൽ യന്ത്രം ഇത് കടന്നുപോകുമെന്ന് കരുതിയിരുന്നു. എന്നാൽ, ഇത് ബുദ്ധിമുട്ടുള്ള സിസ്റ്റം സൃഷ്ടിച്ചതായി അല്ല, അല്ലെങ്കിൽ കമ്പ്യൂട്ടർ സിസ്റ്റം മനുഷ്യ ചോദ്യംചെയ്യുന്നവനെ മായ്ച്ചുവെന്ന് അല്ല - സിസ്റ്റം മനുഷ്യരെ മായ്ച്ചില്ല, മറിച്ച് ബോട്ട് സൃഷ്ടിച്ചവർ മായ്ച്ചു!
|
||||
|
||||
✅ നിങ്ങൾ ഒരിക്കൽ ചാറ്റ്ബോട്ട് നിങ്ങളെ മനുഷ്യനുമായി സംസാരിക്കുന്നതായി തെറ്റിദ്ധരിപ്പിച്ചിട്ടുണ്ടോ? അത് നിങ്ങളെ എങ്ങനെ വിശ്വസിപ്പിച്ചു?
|
||||
|
||||
## എഐയിലേക്കുള്ള വ്യത്യസ്ത സമീപനങ്ങൾ
|
||||
|
||||
കമ്പ്യൂട്ടർ മനുഷ്യനുപോലെ പെരുമാറണമെങ്കിൽ, നമ്മുടെ ചിന്തന രീതിയെ കമ്പ്യൂട്ടറിനുള്ളിൽ മോഡൽ ചെയ്യണം. അതിനാൽ, മനുഷ്യനെ ബുദ്ധിമുട്ടുള്ളവനാക്കുന്നത് എന്താണെന്ന് മനസ്സിലാക്കണം.
|
||||
|
||||
> യന്ത്രത്തിൽ ബുദ്ധിമുട്ട് പ്രോഗ്രാം ചെയ്യാൻ, നമ്മുടെ തീരുമാനമെടുക്കൽ പ്രക്രിയകൾ എങ്ങനെ പ്രവർത്തിക്കുന്നു എന്ന് മനസ്സിലാക്കണം. നിങ്ങൾ സ്വയം നിരീക്ഷണം ചെയ്താൽ, ചില പ്രക്രിയകൾ ബോധപൂർവ്വം അല്ലാതെ നടക്കുന്നു - ഉദാഹരണത്തിന്, ഒരു പൂച്ചയെ നായയെന്ന് തിരിച്ചറിയാൻ ചിന്തിക്കേണ്ടതില്ല - എന്നാൽ ചിലത് ചിന്തനയോടെ നടക്കുന്നു.
|
||||
|
||||
ഈ പ്രശ്നത്തിന് രണ്ട് സമീപനങ്ങൾ ഉണ്ട്:
|
||||
|
||||
ടോപ്പ്-ഡൗൺ സമീപനം (സിംബോളിക് റീസണിംഗ്) | ബോട്ടം-അപ്പ് സമീപനം (ന്യൂറൽ നെറ്റ്വർക്കുകൾ)
|
||||
---------------------------------------|-------------------------------------
|
||||
ടോപ്പ്-ഡൗൺ സമീപനം ഒരു വ്യക്തി പ്രശ്നം പരിഹരിക്കാൻ എങ്ങനെ ചിന്തിക്കുന്നു എന്ന് മോഡൽ ചെയ്യുന്നു. ഇത് മനുഷ്യനിൽ നിന്നുള്ള **ജ്ഞാനം** എടുക്കുകയും, അത് കമ്പ്യൂട്ടർ വായിക്കാൻ കഴിയുന്ന രൂപത്തിൽ പ്രതിനിധാനം ചെയ്യുകയും ചെയ്യുന്നു. കൂടാതെ, കമ്പ്യൂട്ടറിനുള്ളിൽ **റീസണിംഗ്** മോഡൽ ചെയ്യാനുള്ള മാർഗ്ഗം വികസിപ്പിക്കണം. | ബോട്ടം-അപ്പ് സമീപനം മനുഷ്യ മസ്തിഷ്കത്തിന്റെ ഘടന മോഡൽ ചെയ്യുന്നു, അതിൽ അനേകം ലളിതമായ ഘടകങ്ങൾ **ന്യൂറോണുകൾ** എന്നറിയപ്പെടുന്നു. ഓരോ ന്യൂറോണും അതിന്റെ ഇൻപുട്ടുകളുടെ ഭാരിത ശരാശരിയായി പ്രവർത്തിക്കുന്നു, **പരിശീലന ഡാറ്റ** നൽകി ന്യൂറോണുകളുടെ നെറ്റ്വർക്ക് പ്രയോജനപ്രദമായ പ്രശ്നങ്ങൾ പരിഹരിക്കാൻ പരിശീലിപ്പിക്കാം.
|
||||
|
||||
മറ്റു ചില സമീപനങ്ങളും ഉണ്ട്:
|
||||
|
||||
* **എമർജന്റ്**, **സിനർജറ്റിക്** അല്ലെങ്കിൽ **മൾട്ടി-ഏജന്റ് സമീപനം** അനേകം ലളിതമായ ഏജന്റുകളുടെ ഇടപെടലിലൂടെ സങ്കീർണ്ണമായ ബുദ്ധിമുട്ടുള്ള പെരുമാറ്റം ലഭിക്കാമെന്ന് അടിസ്ഥാനമാക്കുന്നു. [വികാസ സൈബർനെറ്റിക്സ്](https://en.wikipedia.org/wiki/Global_brain#Evolutionary_cybernetics) പ്രകാരം, ബുദ്ധിമുട്ട് *മറ്റു ലളിതമായ, പ്രതികരണപരമായ പെരുമാറ്റങ്ങളിൽ നിന്നു* *മീറ്റാസിസ്റ്റം ട്രാൻസിഷൻ* പ്രക്രിയയിൽ *ഉത്ഭവിക്കാം*.
|
||||
|
||||
* **വികാസ സമീപനം** അല്ലെങ്കിൽ **ജനിതക ആൽഗോരിതം** വികാസത്തിന്റെ സിദ്ധാന്തങ്ങളെ അടിസ്ഥാനമാക്കിയുള്ള ഒരു മെച്ചപ്പെടുത്തൽ പ്രക്രിയയാണ്.
|
||||
|
||||
ഈ സമീപനങ്ങൾ കോഴ്സിൽ പിന്നീട് പരിഗണിക്കും, ഇപ്പോൾ നാം രണ്ട് പ്രധാന ദിശകളിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കും: ടോപ്പ്-ഡൗൺ, ബോട്ടം-അപ്പ്.
|
||||
|
||||
### ടോപ്പ്-ഡൗൺ സമീപനം
|
||||
|
||||
**ടോപ്പ്-ഡൗൺ സമീപനത്തിൽ**, നാം നമ്മുടെ ചിന്തന രീതിയെ മോഡൽ ചെയ്യാൻ ശ്രമിക്കുന്നു. നാം ചിന്തിക്കുമ്പോൾ നമ്മുടെ ചിന്തകൾ പിന്തുടരാൻ കഴിയുന്നതിനാൽ, ഈ പ്രക്രിയ ഫോർമലൈസ് ചെയ്ത് കമ്പ്യൂട്ടറിനുള്ളിൽ പ്രോഗ്രാം ചെയ്യാം. ഇതാണ് **സിംബോളിക് റീസണിംഗ്**.
|
||||
|
||||
മനുഷ്യർക്ക് ചില നിയമങ്ങൾ മനസ്സിൽ ഉണ്ടാകാം, അവ അവരുടെ തീരുമാനമെടുക്കൽ പ്രക്രിയകൾ നയിക്കുന്നു. ഉദാഹരണത്തിന്, ഒരു ഡോക്ടർ രോഗിയെ പരിശോധന ചെയ്യുമ്പോൾ, അവൻ/അവൾക്ക് പനി ഉണ്ടെന്ന് മനസ്സിലാകാം, അതിനാൽ ശരീരത്തിൽ ചില അണുബാധകൾ ഉണ്ടാകാം. ഒരു വലിയ നിയമസമൂഹം ഒരു പ്രത്യേക പ്രശ്നത്തിൽ പ്രയോഗിച്ച് ഡോക്ടർ അന്തിമ രോഗനിർണയം കണ്ടെത്താൻ കഴിയും.
|
||||
|
||||
ഈ സമീപനം **ജ്ഞാന പ്രതിനിധാനം**ക്കും **റീസണിംഗിനും** ആശ്രയിച്ചിരിക്കുന്നു. മനുഷ്യ വിദഗ്ധനിൽ നിന്നുള്ള ജ്ഞാനം എടുക്കുന്നത് ഏറ്റവും ബുദ്ധിമുട്ടുള്ള ഭാഗമായിരിക്കാം, കാരണം പലപ്പോഴും ഡോക്ടർ എന്തുകൊണ്ട് ഒരു പ്രത്യേക രോഗനിർണയം വരുത്തുന്നു എന്ന് വ്യക്തമായി അറിയില്ല. ചിലപ്പോൾ പരിഹാരം അവന്റെ തലയിൽ തന്നെ വ്യക്തമായി വരുന്നു. ചില ജോലികൾ, ഉദാഹരണത്തിന് ഒരു വ്യക്തിയുടെ ഫോട്ടോയിൽ നിന്നു പ്രായം നിർണയിക്കൽ, ജ്ഞാന നിയന്ത്രണത്തിലേക്ക് കുറയ്ക്കാനാകില്ല.
|
||||
|
||||
### ബോട്ടം-അപ്പ് സമീപനം
|
||||
|
||||
മറ്റുവഴി, നാം നമ്മുടെ മസ്തിഷ്കത്തിലെ ഏറ്റവും ലളിത ഘടകമായ ന്യൂറോണിനെ മോഡൽ ചെയ്യാം. കമ്പ്യൂട്ടറിനുള്ളിൽ **കൃത്രിമ ന്യൂറൽ നെറ്റ്വർക്ക്** നിർമ്മിച്ച്, ഉദാഹരണങ്ങൾ നൽകി പ്രശ്നങ്ങൾ പരിഹരിക്കാൻ പഠിപ്പിക്കാം. ഇത് ഒരു കുഞ്ഞ് തന്റെ ചുറ്റുപാടുകളെ കുറിച്ച് നിരീക്ഷണങ്ങൾ നടത്തി പഠിക്കുന്ന രീതിയോട് സമാനമാണ്.
|
||||
|
||||
✅ കുഞ്ഞുങ്ങൾ എങ്ങനെ പഠിക്കുന്നു എന്ന് കുറച്ച് ഗവേഷണം ചെയ്യുക. കുഞ്ഞിന്റെ മസ്തിഷ്കത്തിലെ അടിസ്ഥാന ഘടകങ്ങൾ എന്തെല്ലാമാണ്?
|
||||
|
||||
> | ML എന്ത്? | |
|
||||
> |--------------|-----------|
|
||||
> | കൃത്രിമ ബുദ്ധിമുട്ടിന്റെ ഭാഗമായും, ഡാറ്റയുടെ അടിസ്ഥാനത്തിൽ പ്രശ്നം പരിഹരിക്കാൻ കമ്പ്യൂട്ടർ പഠിക്കുന്നതിനെ **മെഷീൻ ലേണിംഗ്** എന്ന് വിളിക്കുന്നു. ഈ കോഴ്സിൽ ക്ലാസിക്കൽ മെഷീൻ ലേണിംഗ് പരിഗണിക്കില്ല - നിങ്ങൾക്ക് വേറെ [Machine Learning for Beginners](http://aka.ms/ml-beginners) പാഠ്യപദ്ധതി കാണാം. |  |
|
||||
|
||||
## എഐയുടെ ഒരു സംക്ഷിപ്ത ചരിത്രം
|
||||
|
||||
കൃത്രിമ ബുദ്ധിമുട്ട് 20-ാം നൂറ്റാണ്ടിന്റെ മധ്യത്തിൽ ഒരു ശാഖയായി ആരംഭിച്ചു. ആദ്യം, സിംബോളിക് റീസണിംഗ് പ്രചാരത്തിലായിരുന്നു, ഇത് ചില പ്രധാന വിജയങ്ങൾക്കു വഴിതെളിച്ചു, ഉദാഹരണത്തിന് വിദഗ്ധ സിസ്റ്റങ്ങൾ – ചില പരിമിത പ്രശ്ന മേഖലകളിൽ വിദഗ്ധൻപോലെ പ്രവർത്തിക്കുന്ന കമ്പ്യൂട്ടർ പ്രോഗ്രാമുകൾ. എന്നാൽ, ഈ സമീപനം വലിയ തോതിൽ വ്യാപിപ്പിക്കാൻ കഴിയില്ലെന്ന് ഉടൻ മനസ്സിലായി. വിദഗ്ധനിൽ നിന്നുള്ള ജ്ഞാനം എടുക്കുകയും, അത് കമ്പ്യൂട്ടറിലേക്കു പ്രതിനിധാനം ചെയ്യുകയും, ആ ജ്ഞാനശേഖരം കൃത്യമായി നിലനിർത്തുകയും ചെയ്യുന്നത് വളരെ സങ്കീർണ്ണവും ചെലവേറിയതുമായ ജോലി ആയിരുന്നു. ഇതാണ് 1970-കളിലെ [AI വിന്റർ](https://en.wikipedia.org/wiki/AI_winter) ന്റെ കാരണമായത്.
|
||||
|
||||
<img alt="എഐയുടെ സംക്ഷിപ്ത ചരിത്രം" src="../../../../translated_images/history-of-ai.7e83efa70b537f5a.ml.png" width="70%"/>
|
||||
|
||||
> ചിത്രം: [ഡ്മിത്രി സോഷ്നിക്കോവ്](http://soshnikov.com)
|
||||
|
||||
കാലക്രമേണ, കംപ്യൂട്ടിംഗ് വിഭവങ്ങൾ വിലകുറഞ്ഞതായി, കൂടുതൽ ഡാറ്റ ലഭ്യമായി, അതിനാൽ ന്യൂറൽ നെറ്റ്വർക്ക് സമീപനങ്ങൾ മനുഷ്യരെ മത്സരിപ്പിക്കുന്നതിൽ മികച്ച പ്രകടനം കാണിച്ചു, ഉദാഹരണത്തിന് കമ്പ്യൂട്ടർ ദൃശ്യവും ശബ്ദ മനസ്സിലാക്കലും. കഴിഞ്ഞ ദശകത്തിൽ, കൃത്രിമ ബുദ്ധിമുട്ട് എന്ന പദം പ്രധാനമായും ന്യൂറൽ നെറ്റ്വർക്കുകളുടെ പദവിയായി ഉപയോഗിക്കപ്പെടുന്നു, കാരണം കേട്ടുവരുന്ന AI വിജയങ്ങൾ അവയിൽ അധിഷ്ഠിതമാണ്.
|
||||
|
||||
ചതുരശ്രം കളിക്കുന്ന കമ്പ്യൂട്ടർ പ്രോഗ്രാം സൃഷ്ടിക്കുമ്പോൾ സമീപനങ്ങൾ എങ്ങനെ മാറിയെന്ന് കാണാം:
|
||||
|
||||
* ആദ്യം, ചെസ്സ് പ്രോഗ്രാമുകൾ തിരച്ചിൽ അടിസ്ഥാനമാക്കിയായിരുന്നു – ഒരു പ്രോഗ്രാം എതിരാളിയുടെ സാധ്യതയുള്ള നീക്കങ്ങൾ കണക്കാക്കി, കുറച്ച് നീക്കങ്ങൾക്കുള്ളിൽ ലഭ്യമായ മികച്ച സ്ഥാനം കണ്ടെത്തി ഏറ്റവും നല്ല നീക്കം തിരഞ്ഞെടുക്കുന്നു. ഇതു [ആൽഫാ-ബീറ്റ പ്രൂണിംഗ്](https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning) ആൽഗോരിതം വികസിപ്പിക്കാൻ വഴിതെളിച്ചു.
|
||||
* തിരച്ചിൽ തന്ത്രങ്ങൾ കളിയുടെ അവസാനം നല്ലതാണ്, കാരണം തിരച്ചിൽ സ്ഥലം കുറവാണ്. എന്നാൽ കളിയുടെ തുടക്കത്തിൽ തിരച്ചിൽ സ്ഥലം വലുതാണ്, ആൽഗോരിതം മനുഷ്യ കളിക്കാരുടെ നിലവിലുള്ള മത്സരങ്ങളിൽ നിന്നു പഠിച്ച് മെച്ചപ്പെടുത്താം. പിന്നീട് പരീക്ഷണങ്ങൾ [കേസ്-ബേസ്ഡ് റീസണിംഗ്](https://en.wikipedia.org/wiki/Case-based_reasoning) ഉപയോഗിച്ചു, പ്രോഗ്രാം നിലവിലെ സ്ഥിതിക്ക് സമാനമായ കേസുകൾ ജ്ഞാനശേഖരത്തിൽ തിരഞ്ഞെടുത്തു.
|
||||
* മനുഷ്യരെ തോൽപ്പിക്കുന്ന ആധുനിക പ്രോഗ്രാമുകൾ ന്യൂറൽ നെറ്റ്വർക്കുകളും [റീ ഇൻഫോഴ്സ്മെന്റ് ലേണിംഗ്](https://en.wikipedia.org/wiki/Reinforcement_learning) ഉം അടിസ്ഥാനമാക്കിയതാണ്, ഇവ സ്വയം നേരിട്ട് കളിച്ച് പിഴവുകളിൽ നിന്നു പഠിക്കുന്നു – മനുഷ്യർ ചെസ്സ് പഠിക്കുമ്പോൾ ചെയ്യുന്ന പോലെ. എന്നാൽ കമ്പ്യൂട്ടർ വളരെ കുറച്ച് സമയത്ത് കൂടുതൽ കളികൾ കളിക്കാനാകുന്നതിനാൽ വേഗത്തിൽ പഠിക്കുന്നു.
|
||||
|
||||
✅ AI കളിച്ച മറ്റു ഗെയിമുകൾ കുറിച്ച് കുറച്ച് ഗവേഷണം ചെയ്യുക.
|
||||
|
||||
അങ്ങനെ, “സംഭാഷണ പ്രോഗ്രാമുകൾ” (ട്യൂറിംഗ് ടെസ്റ്റ് കടക്കാൻ കഴിയുന്നവ) സൃഷ്ടിക്കാനുള്ള സമീപനവും എങ്ങനെ മാറിയെന്ന് കാണാം:
|
||||
|
||||
* ആദ്യം
|
||||
> ചിത്രം: Dmitry Soshnikov, [ഫോട്ടോ](https://unsplash.com/photos/r8LmVbUKgns) [Marina Abrosimova](https://unsplash.com/@abrosimova_marina_foto) യുടെ, Unsplash
|
||||
|
||||
## പുതിയ AI ഗവേഷണം
|
||||
|
||||
2010-ൽ വലിയ പൊതു ഡാറ്റാസെറ്റുകൾ ലഭ്യമാകാൻ തുടങ്ങിയപ്പോൾ, ന്യൂറൽ നെറ്റ്വർക്ക് ഗവേഷണത്തിൽ വലിയ വളർച്ച ആരംഭിച്ചു. ഏകദേശം 14 മില്യൺ അനോട്ടേറ്റഡ് ചിത്രങ്ങൾ അടങ്ങിയ [ImageNet](https://en.wikipedia.org/wiki/ImageNet) എന്ന വലിയ ചിത്രശേഖരം, [ImageNet Large Scale Visual Recognition Challenge](https://image-net.org/challenges/LSVRC/) എന്ന മത്സരം ജനിപ്പിച്ചു.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം: [Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
2012-ൽ, [Convolutional Neural Networks](../4-ComputerVision/07-ConvNets/README.md) ആദ്യമായി ചിത്രവർഗ്ഗീകരണത്തിൽ ഉപയോഗിച്ചു, ഇതോടെ വർഗ്ഗീകരണ പിശകുകൾ (ഏകദേശം 30% മുതൽ 16.4% വരെ) ഗണ്യമായി കുറഞ്ഞു. 2015-ൽ, Microsoft Research-ന്റെ ResNet ആർക്കിടെക്ചർ [മനുഷ്യനിലവാരമുള്ള കൃത്യത കൈവരിച്ചു](https://doi.org/10.1109/ICCV.2015.123).
|
||||
|
||||
അതിനുശേഷം, ന്യൂറൽ നെറ്റ്വർക്ക് പല ജോലികളിലും വളരെ വിജയകരമായ പ്രകടനം കാഴ്ചവെച്ചു:
|
||||
|
||||
---
|
||||
|
||||
വർഷം | മനുഷ്യനിലവാരം കൈവരിച്ചത്
|
||||
-----|--------
|
||||
2015 | [ചിത്രവർഗ്ഗീകരണം](https://doi.org/10.1109/ICCV.2015.123)
|
||||
2016 | [സംവാദാത്മക ശബ്ദ തിരിച്ചറിയൽ](https://arxiv.org/abs/1610.05256)
|
||||
2018 | [സ്വയംകൃത യന്ത്രഭാഷാന്തരം](https://arxiv.org/abs/1803.05567) (ചൈനീസ്-ഇംഗ്ലീഷ്)
|
||||
2020 | [ചിത്ര വിവരണം](https://arxiv.org/abs/2009.13682)
|
||||
|
||||
കഴിഞ്ഞ കുറേ വർഷങ്ങളായി, BERT, GPT-3 പോലുള്ള വലിയ ഭാഷാ മോഡലുകളുമായി വലിയ വിജയങ്ങൾ കണ്ടു. ഇതിന് പ്രധാന കാരണം, പൊതുവായ ടെക്സ്റ്റ് ഡാറ്റ ലഭ്യമാകുന്നതാണ്, ഇത് മോഡലുകൾക്ക് ടെക്സ്റ്റുകളുടെ ഘടനയും അർത്ഥവും പിടികൂടാൻ, പൊതുവായ ടെക്സ്റ്റ് ശേഖരങ്ങളിൽ പ്രീ-ട്രെയിൻ ചെയ്യാനും, പിന്നീട് പ്രത്യേക ജോലികൾക്കായി മോഡലുകൾ പ്രത്യേകിപ്പിക്കാനും സഹായിക്കുന്നു. ഈ കോഴ്സിൽ പിന്നീട് [Natural Language Processing](../5-NLP/README.md) കുറിച്ച് കൂടുതൽ പഠിക്കും.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
ഇന്റർനെറ്റിൽ ഒരു യാത്ര നടത്തുക, നിങ്ങളുടെ അഭിപ്രായത്തിൽ AI ഏറ്റവും ഫലപ്രദമായി ഉപയോഗിക്കുന്നിടം കണ്ടെത്തുക. അത് ഒരു മാപ്പിംഗ് ആപ്പിൽ ആണോ, ശബ്ദം-ടെക്സ്റ്റ് സേവനത്തിലോ, അല്ലെങ്കിൽ ഒരു വീഡിയോ ഗെയിമിലോ? ആ സിസ്റ്റം എങ്ങനെ നിർമ്മിച്ചതെന്ന് ഗവേഷണം ചെയ്യുക.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/2)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
AI, ML ചരിത്രം [ഈ പാഠം](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/2-history-of-ML) വായിച്ച് അവലോകനം ചെയ്യുക. ആ പാഠത്തിന്റെ മുകളിൽ ഉള്ള സ്കെച്ച്നോട്ടിൽ നിന്നോ ഇതിൽ നിന്നോ ഒരു ഘടകം എടുത്ത് അതിന്റെ സാംസ്കാരിക പശ്ചാത്തലം മനസ്സിലാക്കാൻ കൂടുതൽ ഗവേഷണം നടത്തുക.
|
||||
|
||||
**അസൈൻമെന്റ്**: [ഗെയിം ജാം](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് പരിഗണിക്കേണ്ടതാണ്. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,478 +1,478 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"source": [
|
||||
"# ഒരു മൃഗ വിദഗ്ധ സിസ്റ്റം നടപ്പിലാക്കൽ\n",
|
||||
"\n",
|
||||
"[AI for Beginners Curriculum](http://github.com/microsoft/ai-for-beginners) എന്നതിൽ നിന്നുള്ള ഒരു ഉദാഹരണം.\n",
|
||||
"\n",
|
||||
"ഈ സാമ്പിളിൽ, ചില ശാരീരിക ലക്ഷണങ്ങളുടെ അടിസ്ഥാനത്തിൽ ഒരു മൃഗം നിർണയിക്കുന്ന ഒരു ലളിതമായ അറിവ് അടിസ്ഥാനമാക്കിയ സിസ്റ്റം നടപ്പിലാക്കും. സിസ്റ്റം താഴെ കാണുന്ന AND-OR വൃക്ഷം ഉപയോഗിച്ച് പ്രതിനിധീകരിക്കാം (ഇത് മുഴുവൻ വൃക്ഷത്തിന്റെ ഒരു ഭാഗമാണ്, നാം എളുപ്പത്തിൽ കൂടുതൽ നിയമങ്ങൾ ചേർക്കാം):\n",
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## പിന്വിധാനത്തോടെ നമ്മുടെ സ്വന്തം വിദഗ്ധ സിസ്റ്റം ഷെല്\n",
|
||||
"\n",
|
||||
"ഉത്പാദന നിയമങ്ങളെ അടിസ്ഥാനമാക്കി അറിവ് പ്രതിനിധീകരണത്തിന് ഒരു ലളിതമായ ഭാഷ നിർവചിക്കാം. നിയമങ്ങൾ നിർവചിക്കാൻ കീവേർഡുകളായി Python ക്ലാസുകൾ ഉപയോഗിക്കും. അടിസ്ഥാനപരമായി 3 തരത്തിലുള്ള ക്ലാസുകൾ ഉണ്ടാകും:\n",
|
||||
"* `Ask` ഉപയോക്താവിനോട് ചോദിക്കേണ്ട ഒരു ചോദ്യത്തെ പ്രതിനിധീകരിക്കുന്നു. ഇതിൽ സാധ്യതയുള്ള ഉത്തറുകളുടെ സെറ്റ് അടങ്ങിയിരിക്കും.\n",
|
||||
"* `If` ഒരു നിയമത്തെ പ്രതിനിധീകരിക്കുന്നു, ഇത് നിയമത്തിന്റെ ഉള്ളടക്കം സൂക്ഷിക്കുന്നതിന് ഒരു സിന്റാക്ടിക് ഷുഗർ മാത്രമാണ്\n",
|
||||
"* `AND`/`OR` വൃക്ഷത്തിന്റെ AND/OR ശാഖകൾ പ്രതിനിധീകരിക്കുന്ന ക്ലാസുകളാണ്. അവയ്ക്ക് ഉള്ളിൽ വാദങ്ങളുടെ പട്ടിക സൂക്ഷിക്കാനാണ്. കോഡ് ലളിതമാക്കാൻ, എല്ലാ പ്രവർത്തനങ്ങളും മാതൃക്ലാസ് `Content`-ൽ നിർവചിച്ചിരിക്കുന്നു\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class Ask():\n",
|
||||
" def __init__(self,choices=['y','n']):\n",
|
||||
" self.choices = choices\n",
|
||||
" def ask(self):\n",
|
||||
" if max([len(x) for x in self.choices])>1:\n",
|
||||
" for i,x in enumerate(self.choices):\n",
|
||||
" print(\"{0}. {1}\".format(i,x),flush=True)\n",
|
||||
" x = int(input())\n",
|
||||
" return self.choices[x]\n",
|
||||
" else:\n",
|
||||
" print(\"/\".join(self.choices),flush=True)\n",
|
||||
" return input()\n",
|
||||
"\n",
|
||||
"class Content():\n",
|
||||
" def __init__(self,x):\n",
|
||||
" self.x=x\n",
|
||||
" \n",
|
||||
"class If(Content):\n",
|
||||
" pass\n",
|
||||
"\n",
|
||||
"class AND(Content):\n",
|
||||
" pass\n",
|
||||
"\n",
|
||||
"class OR(Content):\n",
|
||||
" pass"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"നമ്മുടെ സിസ്റ്റത്തിൽ, പ്രവർത്തന സ്മൃതി **ഗുണം-മൂല്യ ജോഡികൾ** എന്ന രൂപത്തിൽ **വസ്തുതകളുടെ** പട്ടിക ഉൾക്കൊള്ളും. പ്രവർത്തന സ്മൃതിയിൽ ചേർക്കേണ്ട പുതിയ വസ്തുതകളായ പ്രവർത്തനങ്ങളെ (actions) AND-OR വ്യഞ്ജനങ്ങളായി പ്രകടിപ്പിച്ച നിബന്ധനകളുമായി ബന്ധിപ്പിക്കുന്ന ഒരു വലിയ നിഘണ്ടുവായി അറിവ് അടിസ്ഥാനത്തെ നിർവചിക്കാം. കൂടാതെ, ചില വസ്തുതകൾ `Ask` ചെയ്യാവുന്നതാണ്.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"rules = {\n",
|
||||
" 'default': Ask(['y','n']),\n",
|
||||
" 'color' : Ask(['red-brown','black and white','other']),\n",
|
||||
" 'pattern' : Ask(['dark stripes','dark spots']),\n",
|
||||
" 'mammal': If(OR(['hair','gives milk'])),\n",
|
||||
" 'carnivor': If(OR([AND(['sharp teeth','claws','forward-looking eyes']),'eats meat'])),\n",
|
||||
" 'ungulate': If(['mammal',OR(['has hooves','chews cud'])]),\n",
|
||||
" 'bird': If(OR(['feathers',AND(['flies','lies eggs'])])),\n",
|
||||
" 'animal:monkey' : If(['mammal','carnivor','color:red-brown','pattern:dark spots']),\n",
|
||||
" 'animal:tiger' : If(['mammal','carnivor','color:red-brown','pattern:dark stripes']),\n",
|
||||
" 'animal:giraffe' : If(['ungulate','long neck','long legs','pattern:dark spots']),\n",
|
||||
" 'animal:zebra' : If(['ungulate','pattern:dark stripes']),\n",
|
||||
" 'animal:ostrich' : If(['bird','long nech','color:black and white','cannot fly']),\n",
|
||||
" 'animal:pinguin' : If(['bird','swims','color:black and white','cannot fly']),\n",
|
||||
" 'animal:albatross' : If(['bird','flies well'])\n",
|
||||
"}"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"പിന്നോട്ടുള്ള നിഗമനം നടത്താൻ, നാം `Knowledgebase` ക്ലാസ് നിർവചിക്കും. ഇതിൽ ഉൾപ്പെടുന്നത്:\n",
|
||||
"* പ്രവർത്തനക്ഷമമായ `memory` - ഗുണലക്ഷണങ്ങളെ മൂല്യങ്ങളുമായി മാപ്പ് ചെയ്യുന്ന ഒരു ഡിക്ഷണറി\n",
|
||||
"* മുകളിൽ നിർവചിച്ച ഫോർമാറ്റിലുള്ള Knowledgebase `rules`\n",
|
||||
"\n",
|
||||
"രണ്ടു പ്രധാന രീതികൾ:\n",
|
||||
"* `get` ഒരു ഗുണലക്ഷണത്തിന്റെ മൂല്യം നേടാൻ, ആവശ്യമെങ്കിൽ നിഗമനം നടത്തുന്നു. ഉദാഹരണത്തിന്, `get('color')` ഒരു നിറം സ്ലോട്ടിന്റെ മൂല്യം നേടും (ആവശ്യമെങ്കിൽ ചോദിക്കും, പിന്നീട് ഉപയോഗത്തിനായി പ്രവർത്തന സ്മരണയിൽ സൂക്ഷിക്കും). `get('color:blue')` ചോദിച്ചാൽ, നിറം ചോദിച്ച്, നിറത്തിന്റെ അടിസ്ഥാനത്തിൽ `y`/`n` മൂല്യം നൽകും.\n",
|
||||
"* `eval` യഥാർത്ഥ നിഗമനം നടത്തുന്നു, അഥവാ AND/OR വൃക്ഷം സഞ്ചരിച്ച്, ഉപലക്ഷ്യങ്ങൾ വിലയിരുത്തുന്നു, തുടങ്ങിയവ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class KnowledgeBase():\n",
|
||||
" def __init__(self,rules):\n",
|
||||
" self.rules = rules\n",
|
||||
" self.memory = {}\n",
|
||||
" \n",
|
||||
" def get(self,name):\n",
|
||||
" if ':' in name:\n",
|
||||
" k,v = name.split(':')\n",
|
||||
" vv = self.get(k)\n",
|
||||
" return 'y' if v==vv else 'n'\n",
|
||||
" if name in self.memory.keys():\n",
|
||||
" return self.memory[name]\n",
|
||||
" for fld in self.rules.keys():\n",
|
||||
" if fld==name or fld.startswith(name+\":\"):\n",
|
||||
" # print(\" + proving {}\".format(fld))\n",
|
||||
" value = 'y' if fld==name else fld.split(':')[1]\n",
|
||||
" res = self.eval(self.rules[fld],field=name)\n",
|
||||
" if res!='y' and res!='n' and value=='y':\n",
|
||||
" self.memory[name] = res\n",
|
||||
" return res\n",
|
||||
" if res=='y':\n",
|
||||
" self.memory[name] = value\n",
|
||||
" return value\n",
|
||||
" # field is not found, using default\n",
|
||||
" res = self.eval(self.rules['default'],field=name)\n",
|
||||
" self.memory[name]=res\n",
|
||||
" return res\n",
|
||||
" \n",
|
||||
" def eval(self,expr,field=None):\n",
|
||||
" # print(\" + eval {}\".format(expr))\n",
|
||||
" if isinstance(expr,Ask):\n",
|
||||
" print(field)\n",
|
||||
" return expr.ask()\n",
|
||||
" elif isinstance(expr,If):\n",
|
||||
" return self.eval(expr.x)\n",
|
||||
" elif isinstance(expr,AND) or isinstance(expr,list):\n",
|
||||
" expr = expr.x if isinstance(expr,AND) else expr\n",
|
||||
" for x in expr:\n",
|
||||
" if self.eval(x)=='n':\n",
|
||||
" return 'n'\n",
|
||||
" return 'y'\n",
|
||||
" elif isinstance(expr,OR):\n",
|
||||
" for x in expr.x:\n",
|
||||
" if self.eval(x)=='y':\n",
|
||||
" return 'y'\n",
|
||||
" return 'n'\n",
|
||||
" elif isinstance(expr,str):\n",
|
||||
" return self.get(expr)\n",
|
||||
" else:\n",
|
||||
" print(\"Unknown expr: {}\".format(expr))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഇപ്പോൾ നമുക്ക് നമ്മുടെ മൃഗജ്ഞാനശേഖരം നിർവചിച്ച് ഉപദേശനം നടത്താം. ഈ വിളി നിങ്ങളോട് ചോദ്യങ്ങൾ ചോദിക്കും എന്ന് ശ്രദ്ധിക്കുക. യെസ്-നോ ചോദ്യങ്ങൾക്ക് `y`/`n` ടൈപ്പ് ചെയ്ത് ഉത്തരം നൽകാം, അല്ലെങ്കിൽ കൂടുതൽ ദൈർഘ്യമുള്ള ബഹുവികൽപ ചോദ്യങ്ങൾക്ക് 0..N എന്ന സംഖ്യ വ്യക്തമാക്കാം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"hair\n",
|
||||
"y/n\n",
|
||||
"sharp teeth\n",
|
||||
"y/n\n",
|
||||
"claws\n",
|
||||
"y/n\n",
|
||||
"forward-looking eyes\n",
|
||||
"y/n\n",
|
||||
"color\n",
|
||||
"0. red-brown\n",
|
||||
"1. black and white\n",
|
||||
"2. other\n",
|
||||
"has hooves\n",
|
||||
"y/n\n",
|
||||
"long neck\n",
|
||||
"y/n\n",
|
||||
"long legs\n",
|
||||
"y/n\n",
|
||||
"pattern\n",
|
||||
"0. dark stripes\n",
|
||||
"1. dark spots\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"'giraffe'"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"kb = KnowledgeBase(rules)\n",
|
||||
"kb.get('animal')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## ഫോർവേഡ് ഇൻഫറൻസ് നടത്താൻ PyKnow ഉപയോഗിക്കൽ\n",
|
||||
"\n",
|
||||
"അടുത്ത ഉദാഹരണത്തിൽ, നാം നോളജ് റെപ്രസെന്റേഷനുള്ള ലൈബ്രറികളിൽ ഒന്നായ [PyKnow](https://github.com/buguroo/pyknow/) ഉപയോഗിച്ച് ഫോർവേഡ് ഇൻഫറൻസ് നടപ്പിലാക്കാൻ ശ്രമിക്കും. **PyKnow** പൈതൺ ഭാഷയിൽ ഫോർവേഡ് ഇൻഫറൻസ് സിസ്റ്റങ്ങൾ സൃഷ്ടിക്കാൻ ഉള്ള ഒരു ലൈബ്രറിയാണ്, ഇത് പാരമ്പര്യമായ പഴയ സിസ്റ്റമായ [CLIPS](http://www.clipsrules.net/index.html) നെപ്പോലെ രൂപകൽപ്പന ചെയ്തതാണ്.\n",
|
||||
"\n",
|
||||
"നാം ഫോർവേഡ് ചെയിനിംഗ് സ്വയം നടപ്പിലാക്കാമായിരുന്നു, എന്നാൽ സാധാരണയായി ലളിതമായ നടപ്പാക്കലുകൾ വളരെ കാര്യക്ഷമമല്ല. കൂടുതൽ ഫലപ്രദമായ റൂൾ മാച്ചിംഗിനായി പ്രത്യേക ആൽഗോരിതം [Rete](https://en.wikipedia.org/wiki/Rete_algorithm) ഉപയോഗിക്കുന്നു.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Collecting git+https://github.com/buguroo/pyknow/\n",
|
||||
" Cloning https://github.com/buguroo/pyknow/ to /tmp/pip-req-build-3cqeulyl\n",
|
||||
" Running command git clone --filter=blob:none --quiet https://github.com/buguroo/pyknow/ /tmp/pip-req-build-3cqeulyl\n",
|
||||
" Resolved https://github.com/buguroo/pyknow/ to commit 48818336f2e9a126f1964f2d8dc22d37ff800fe8\n",
|
||||
" Preparing metadata (setup.py) ... \u001b[?25ldone\n",
|
||||
"\u001b[?25hCollecting frozendict==1.2\n",
|
||||
" Using cached frozendict-1.2.tar.gz (2.6 kB)\n",
|
||||
" Preparing metadata (setup.py) ... \u001b[?25ldone\n",
|
||||
"\u001b[?25hCollecting schema==0.6.7\n",
|
||||
" Using cached schema-0.6.7-py2.py3-none-any.whl (14 kB)\n",
|
||||
"Building wheels for collected packages: pyknow, frozendict\n",
|
||||
" Building wheel for pyknow (setup.py) ... \u001b[?25ldone\n",
|
||||
"\u001b[?25h Created wheel for pyknow: filename=pyknow-1.7.0-py3-none-any.whl size=34228 sha256=b7de5b09292c4007667c72f69b98d5a1b5f7324ff15f9dd8e077c3d5f7aade42\n",
|
||||
" Stored in directory: /tmp/pip-ephem-wheel-cache-k7jpave7/wheels/81/1a/d3/f6c15dbe1955598a37755215f2a10449e7418500d7bd4b9508\n",
|
||||
" Building wheel for frozendict (setup.py) ... \u001b[?25ldone\n",
|
||||
"\u001b[?25h Created wheel for frozendict: filename=frozendict-1.2-py3-none-any.whl size=3148 sha256=2863d55c240d2409cddf05ccfe600591f8478681549fc97555c47c90dc6bb160\n",
|
||||
" Stored in directory: /home/rg/.cache/pip/wheels/49/ac/f8/cb8120244e710bdb479c86198b03c7b08c3c2d3d2bf448fd6e\n",
|
||||
"Successfully built pyknow frozendict\n",
|
||||
"Installing collected packages: schema, frozendict, pyknow\n",
|
||||
"Successfully installed frozendict-1.2 pyknow-1.7.0 schema-0.6.7\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import sys\n",
|
||||
"!{sys.executable} -m pip install git+https://github.com/buguroo/pyknow/"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from pyknow import *\n",
|
||||
"#import pyknow"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"നാം നമ്മുടെ സിസ്റ്റം `KnowledgeEngine` എന്ന ക്ലാസ്സിന്റെ സബ്ക്ലാസായി നിർവചിക്കും. ഓരോ റൂൾവും `@Rule` അനോട്ടേഷനുള്ള വ്യത്യസ്ത ഫംഗ്ഷനായി നിർവചിക്കപ്പെടുന്നു, ഇത് റൂൾ എപ്പോൾ പ്രവർത്തിക്കണം എന്ന് വ്യക്തമാക്കുന്നു. റൂളിനുള്ളിൽ, നാം `declare` ഫംഗ്ഷൻ ഉപയോഗിച്ച് പുതിയ വസ്തുതകൾ ചേർക്കാം, ആ വസ്തുതകൾ ചേർക്കുന്നതിലൂടെ ഫോർവേഡ് ഇൻഫറൻസ് എഞ്ചിൻ ചില കൂടുതൽ റൂളുകൾ വിളിക്കും.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class Animals(KnowledgeEngine):\n",
|
||||
" @Rule(OR(\n",
|
||||
" AND(Fact('sharp teeth'),Fact('claws'),Fact('forward looking eyes')),\n",
|
||||
" Fact('eats meat')))\n",
|
||||
" def cornivor(self):\n",
|
||||
" self.declare(Fact('carnivor'))\n",
|
||||
" \n",
|
||||
" @Rule(OR(Fact('hair'),Fact('gives milk')))\n",
|
||||
" def mammal(self):\n",
|
||||
" self.declare(Fact('mammal'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('mammal'),\n",
|
||||
" OR(Fact('has hooves'),Fact('chews cud')))\n",
|
||||
" def hooves(self):\n",
|
||||
" self.declare('ungulate')\n",
|
||||
" \n",
|
||||
" @Rule(OR(Fact('feathers'),AND(Fact('flies'),Fact('lays eggs'))))\n",
|
||||
" def bird(self):\n",
|
||||
" self.declare('bird')\n",
|
||||
" \n",
|
||||
" @Rule(Fact('mammal'),Fact('carnivor'),\n",
|
||||
" Fact(color='red-brown'),\n",
|
||||
" Fact(pattern='dark spots'))\n",
|
||||
" def monkey(self):\n",
|
||||
" self.declare(Fact(animal='monkey'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('mammal'),Fact('carnivor'),\n",
|
||||
" Fact(color='red-brown'),\n",
|
||||
" Fact(pattern='dark stripes'))\n",
|
||||
" def tiger(self):\n",
|
||||
" self.declare(Fact(animal='tiger'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('ungulate'),\n",
|
||||
" Fact('long neck'),\n",
|
||||
" Fact('long legs'),\n",
|
||||
" Fact(pattern='dark spots'))\n",
|
||||
" def giraffe(self):\n",
|
||||
" self.declare(Fact(animal='giraffe'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('ungulate'),\n",
|
||||
" Fact(pattern='dark stripes'))\n",
|
||||
" def zebra(self):\n",
|
||||
" self.declare(Fact(animal='zebra'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('bird'),\n",
|
||||
" Fact('long neck'),\n",
|
||||
" Fact('cannot fly'),\n",
|
||||
" Fact(color='black and white'))\n",
|
||||
" def straus(self):\n",
|
||||
" self.declare(Fact(animal='ostrich'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('bird'),\n",
|
||||
" Fact('swims'),\n",
|
||||
" Fact('cannot fly'),\n",
|
||||
" Fact(color='black and white'))\n",
|
||||
" def pinguin(self):\n",
|
||||
" self.declare(Fact(animal='pinguin'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('bird'),\n",
|
||||
" Fact('flies well'))\n",
|
||||
" def albatros(self):\n",
|
||||
" self.declare(Fact(animal='albatross'))\n",
|
||||
" \n",
|
||||
" @Rule(Fact(animal=MATCH.a))\n",
|
||||
" def print_result(self,a):\n",
|
||||
" print('Animal is {}'.format(a))\n",
|
||||
" \n",
|
||||
" def factz(self,l):\n",
|
||||
" for x in l:\n",
|
||||
" self.declare(x)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഒരു നോളജ്ബേസ് നിർവചിച്ചതിന് ശേഷം, ഞങ്ങൾ ചില പ്രാഥമിക വാസ്തവങ്ങളുമായി നമ്മുടെ പ്രവർത്തന സ്മൃതി പൂരിപ്പിച്ച്, തുടർന്ന് inference നടത്താൻ `run()` മെത്തഡ് വിളിക്കുന്നു. ഫലമായി, പുതിയ inference ചെയ്ത വാസ്തവങ്ങൾ പ്രവർത്തന സ്മൃതിയിൽ ചേർക്കപ്പെട്ടിരിക്കുന്നതിനെ നിങ്ങൾ കാണാം, അതിൽ മൃഗത്തെക്കുറിച്ചുള്ള അന്തിമ വാസ്തവവും ഉൾപ്പെടുന്നു (നാം എല്ലാ പ്രാഥമിക വാസ്തവങ്ങളും ശരിയായി ക്രമീകരിച്ചാൽ).\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Animal is tiger\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"FactList([(0, InitialFact()),\n",
|
||||
" (1, Fact(color='red-brown')),\n",
|
||||
" (2, Fact(pattern='dark stripes')),\n",
|
||||
" (3, Fact('sharp teeth')),\n",
|
||||
" (4, Fact('claws')),\n",
|
||||
" (5, Fact('forward looking eyes')),\n",
|
||||
" (6, Fact('gives milk')),\n",
|
||||
" (7, Fact('mammal')),\n",
|
||||
" (8, Fact('carnivor')),\n",
|
||||
" (9, Fact(animal='tiger'))])"
|
||||
]
|
||||
},
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"ex1 = Animals()\n",
|
||||
"ex1.reset()\n",
|
||||
"ex1.factz([\n",
|
||||
" Fact(color='red-brown'),\n",
|
||||
" Fact(pattern='dark stripes'),\n",
|
||||
" Fact('sharp teeth'),\n",
|
||||
" Fact('claws'),\n",
|
||||
" Fact('forward looking eyes'),\n",
|
||||
" Fact('gives milk')])\n",
|
||||
"ex1.run()\n",
|
||||
"ex1.facts"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**അസൂയാ**: \nഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.7.4 64-bit (conda)",
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5"
|
||||
}
|
||||
},
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.11.2"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "ab2bd97b0453415b89a469284609a8ce",
|
||||
"translation_date": "2025-11-25T23:48:34+00:00",
|
||||
"source_file": "lessons/2-Symbolic/Animals.ipynb",
|
||||
"language_code": "ml"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"source": [
|
||||
"# ഒരു മൃഗ വിദഗ്ധ സിസ്റ്റം നടപ്പിലാക്കൽ\n",
|
||||
"\n",
|
||||
"[AI for Beginners Curriculum](http://github.com/microsoft/ai-for-beginners) എന്നതിൽ നിന്നുള്ള ഒരു ഉദാഹരണം.\n",
|
||||
"\n",
|
||||
"ഈ സാമ്പിളിൽ, ചില ശാരീരിക ലക്ഷണങ്ങളുടെ അടിസ്ഥാനത്തിൽ ഒരു മൃഗം നിർണയിക്കുന്ന ഒരു ലളിതമായ അറിവ് അടിസ്ഥാനമാക്കിയ സിസ്റ്റം നടപ്പിലാക്കും. സിസ്റ്റം താഴെ കാണുന്ന AND-OR വൃക്ഷം ഉപയോഗിച്ച് പ്രതിനിധീകരിക്കാം (ഇത് മുഴുവൻ വൃക്ഷത്തിന്റെ ഒരു ഭാഗമാണ്, നാം എളുപ്പത്തിൽ കൂടുതൽ നിയമങ്ങൾ ചേർക്കാം):\n",
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## പിന്വിധാനത്തോടെ നമ്മുടെ സ്വന്തം വിദഗ്ധ സിസ്റ്റം ഷെല്\n",
|
||||
"\n",
|
||||
"ഉത്പാദന നിയമങ്ങളെ അടിസ്ഥാനമാക്കി അറിവ് പ്രതിനിധീകരണത്തിന് ഒരു ലളിതമായ ഭാഷ നിർവചിക്കാം. നിയമങ്ങൾ നിർവചിക്കാൻ കീവേർഡുകളായി Python ക്ലാസുകൾ ഉപയോഗിക്കും. അടിസ്ഥാനപരമായി 3 തരത്തിലുള്ള ക്ലാസുകൾ ഉണ്ടാകും:\n",
|
||||
"* `Ask` ഉപയോക്താവിനോട് ചോദിക്കേണ്ട ഒരു ചോദ്യത്തെ പ്രതിനിധീകരിക്കുന്നു. ഇതിൽ സാധ്യതയുള്ള ഉത്തറുകളുടെ സെറ്റ് അടങ്ങിയിരിക്കും.\n",
|
||||
"* `If` ഒരു നിയമത്തെ പ്രതിനിധീകരിക്കുന്നു, ഇത് നിയമത്തിന്റെ ഉള്ളടക്കം സൂക്ഷിക്കുന്നതിന് ഒരു സിന്റാക്ടിക് ഷുഗർ മാത്രമാണ്\n",
|
||||
"* `AND`/`OR` വൃക്ഷത്തിന്റെ AND/OR ശാഖകൾ പ്രതിനിധീകരിക്കുന്ന ക്ലാസുകളാണ്. അവയ്ക്ക് ഉള്ളിൽ വാദങ്ങളുടെ പട്ടിക സൂക്ഷിക്കാനാണ്. കോഡ് ലളിതമാക്കാൻ, എല്ലാ പ്രവർത്തനങ്ങളും മാതൃക്ലാസ് `Content`-ൽ നിർവചിച്ചിരിക്കുന്നു\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class Ask():\n",
|
||||
" def __init__(self,choices=['y','n']):\n",
|
||||
" self.choices = choices\n",
|
||||
" def ask(self):\n",
|
||||
" if max([len(x) for x in self.choices])>1:\n",
|
||||
" for i,x in enumerate(self.choices):\n",
|
||||
" print(\"{0}. {1}\".format(i,x),flush=True)\n",
|
||||
" x = int(input())\n",
|
||||
" return self.choices[x]\n",
|
||||
" else:\n",
|
||||
" print(\"/\".join(self.choices),flush=True)\n",
|
||||
" return input()\n",
|
||||
"\n",
|
||||
"class Content():\n",
|
||||
" def __init__(self,x):\n",
|
||||
" self.x=x\n",
|
||||
" \n",
|
||||
"class If(Content):\n",
|
||||
" pass\n",
|
||||
"\n",
|
||||
"class AND(Content):\n",
|
||||
" pass\n",
|
||||
"\n",
|
||||
"class OR(Content):\n",
|
||||
" pass"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"നമ്മുടെ സിസ്റ്റത്തിൽ, പ്രവർത്തന സ്മൃതി **ഗുണം-മൂല്യ ജോഡികൾ** എന്ന രൂപത്തിൽ **വസ്തുതകളുടെ** പട്ടിക ഉൾക്കൊള്ളും. പ്രവർത്തന സ്മൃതിയിൽ ചേർക്കേണ്ട പുതിയ വസ്തുതകളായ പ്രവർത്തനങ്ങളെ (actions) AND-OR വ്യഞ്ജനങ്ങളായി പ്രകടിപ്പിച്ച നിബന്ധനകളുമായി ബന്ധിപ്പിക്കുന്ന ഒരു വലിയ നിഘണ്ടുവായി അറിവ് അടിസ്ഥാനത്തെ നിർവചിക്കാം. കൂടാതെ, ചില വസ്തുതകൾ `Ask` ചെയ്യാവുന്നതാണ്.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"rules = {\n",
|
||||
" 'default': Ask(['y','n']),\n",
|
||||
" 'color' : Ask(['red-brown','black and white','other']),\n",
|
||||
" 'pattern' : Ask(['dark stripes','dark spots']),\n",
|
||||
" 'mammal': If(OR(['hair','gives milk'])),\n",
|
||||
" 'carnivor': If(OR([AND(['sharp teeth','claws','forward-looking eyes']),'eats meat'])),\n",
|
||||
" 'ungulate': If(['mammal',OR(['has hooves','chews cud'])]),\n",
|
||||
" 'bird': If(OR(['feathers',AND(['flies','lies eggs'])])),\n",
|
||||
" 'animal:monkey' : If(['mammal','carnivor','color:red-brown','pattern:dark spots']),\n",
|
||||
" 'animal:tiger' : If(['mammal','carnivor','color:red-brown','pattern:dark stripes']),\n",
|
||||
" 'animal:giraffe' : If(['ungulate','long neck','long legs','pattern:dark spots']),\n",
|
||||
" 'animal:zebra' : If(['ungulate','pattern:dark stripes']),\n",
|
||||
" 'animal:ostrich' : If(['bird','long nech','color:black and white','cannot fly']),\n",
|
||||
" 'animal:pinguin' : If(['bird','swims','color:black and white','cannot fly']),\n",
|
||||
" 'animal:albatross' : If(['bird','flies well'])\n",
|
||||
"}"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"പിന്നോട്ടുള്ള നിഗമനം നടത്താൻ, നാം `Knowledgebase` ക്ലാസ് നിർവചിക്കും. ഇതിൽ ഉൾപ്പെടുന്നത്:\n",
|
||||
"* പ്രവർത്തനക്ഷമമായ `memory` - ഗുണലക്ഷണങ്ങളെ മൂല്യങ്ങളുമായി മാപ്പ് ചെയ്യുന്ന ഒരു ഡിക്ഷണറി\n",
|
||||
"* മുകളിൽ നിർവചിച്ച ഫോർമാറ്റിലുള്ള Knowledgebase `rules`\n",
|
||||
"\n",
|
||||
"രണ്ടു പ്രധാന രീതികൾ:\n",
|
||||
"* `get` ഒരു ഗുണലക്ഷണത്തിന്റെ മൂല്യം നേടാൻ, ആവശ്യമെങ്കിൽ നിഗമനം നടത്തുന്നു. ഉദാഹരണത്തിന്, `get('color')` ഒരു നിറം സ്ലോട്ടിന്റെ മൂല്യം നേടും (ആവശ്യമെങ്കിൽ ചോദിക്കും, പിന്നീട് ഉപയോഗത്തിനായി പ്രവർത്തന സ്മരണയിൽ സൂക്ഷിക്കും). `get('color:blue')` ചോദിച്ചാൽ, നിറം ചോദിച്ച്, നിറത്തിന്റെ അടിസ്ഥാനത്തിൽ `y`/`n` മൂല്യം നൽകും.\n",
|
||||
"* `eval` യഥാർത്ഥ നിഗമനം നടത്തുന്നു, അഥവാ AND/OR വൃക്ഷം സഞ്ചരിച്ച്, ഉപലക്ഷ്യങ്ങൾ വിലയിരുത്തുന്നു, തുടങ്ങിയവ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class KnowledgeBase():\n",
|
||||
" def __init__(self,rules):\n",
|
||||
" self.rules = rules\n",
|
||||
" self.memory = {}\n",
|
||||
" \n",
|
||||
" def get(self,name):\n",
|
||||
" if ':' in name:\n",
|
||||
" k,v = name.split(':')\n",
|
||||
" vv = self.get(k)\n",
|
||||
" return 'y' if v==vv else 'n'\n",
|
||||
" if name in self.memory.keys():\n",
|
||||
" return self.memory[name]\n",
|
||||
" for fld in self.rules.keys():\n",
|
||||
" if fld==name or fld.startswith(name+\":\"):\n",
|
||||
" # print(\" + proving {}\".format(fld))\n",
|
||||
" value = 'y' if fld==name else fld.split(':')[1]\n",
|
||||
" res = self.eval(self.rules[fld],field=name)\n",
|
||||
" if res!='y' and res!='n' and value=='y':\n",
|
||||
" self.memory[name] = res\n",
|
||||
" return res\n",
|
||||
" if res=='y':\n",
|
||||
" self.memory[name] = value\n",
|
||||
" return value\n",
|
||||
" # field is not found, using default\n",
|
||||
" res = self.eval(self.rules['default'],field=name)\n",
|
||||
" self.memory[name]=res\n",
|
||||
" return res\n",
|
||||
" \n",
|
||||
" def eval(self,expr,field=None):\n",
|
||||
" # print(\" + eval {}\".format(expr))\n",
|
||||
" if isinstance(expr,Ask):\n",
|
||||
" print(field)\n",
|
||||
" return expr.ask()\n",
|
||||
" elif isinstance(expr,If):\n",
|
||||
" return self.eval(expr.x)\n",
|
||||
" elif isinstance(expr,AND) or isinstance(expr,list):\n",
|
||||
" expr = expr.x if isinstance(expr,AND) else expr\n",
|
||||
" for x in expr:\n",
|
||||
" if self.eval(x)=='n':\n",
|
||||
" return 'n'\n",
|
||||
" return 'y'\n",
|
||||
" elif isinstance(expr,OR):\n",
|
||||
" for x in expr.x:\n",
|
||||
" if self.eval(x)=='y':\n",
|
||||
" return 'y'\n",
|
||||
" return 'n'\n",
|
||||
" elif isinstance(expr,str):\n",
|
||||
" return self.get(expr)\n",
|
||||
" else:\n",
|
||||
" print(\"Unknown expr: {}\".format(expr))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഇപ്പോൾ നമുക്ക് നമ്മുടെ മൃഗജ്ഞാനശേഖരം നിർവചിച്ച് ഉപദേശനം നടത്താം. ഈ വിളി നിങ്ങളോട് ചോദ്യങ്ങൾ ചോദിക്കും എന്ന് ശ്രദ്ധിക്കുക. യെസ്-നോ ചോദ്യങ്ങൾക്ക് `y`/`n` ടൈപ്പ് ചെയ്ത് ഉത്തരം നൽകാം, അല്ലെങ്കിൽ കൂടുതൽ ദൈർഘ്യമുള്ള ബഹുവികൽപ ചോദ്യങ്ങൾക്ക് 0..N എന്ന സംഖ്യ വ്യക്തമാക്കാം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"hair\n",
|
||||
"y/n\n",
|
||||
"sharp teeth\n",
|
||||
"y/n\n",
|
||||
"claws\n",
|
||||
"y/n\n",
|
||||
"forward-looking eyes\n",
|
||||
"y/n\n",
|
||||
"color\n",
|
||||
"0. red-brown\n",
|
||||
"1. black and white\n",
|
||||
"2. other\n",
|
||||
"has hooves\n",
|
||||
"y/n\n",
|
||||
"long neck\n",
|
||||
"y/n\n",
|
||||
"long legs\n",
|
||||
"y/n\n",
|
||||
"pattern\n",
|
||||
"0. dark stripes\n",
|
||||
"1. dark spots\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"'giraffe'"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"kb = KnowledgeBase(rules)\n",
|
||||
"kb.get('animal')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## ഫോർവേഡ് ഇൻഫറൻസ് നടത്താൻ PyKnow ഉപയോഗിക്കൽ\n",
|
||||
"\n",
|
||||
"അടുത്ത ഉദാഹരണത്തിൽ, നാം നോളജ് റെപ്രസെന്റേഷനുള്ള ലൈബ്രറികളിൽ ഒന്നായ [PyKnow](https://github.com/buguroo/pyknow/) ഉപയോഗിച്ച് ഫോർവേഡ് ഇൻഫറൻസ് നടപ്പിലാക്കാൻ ശ്രമിക്കും. **PyKnow** പൈതൺ ഭാഷയിൽ ഫോർവേഡ് ഇൻഫറൻസ് സിസ്റ്റങ്ങൾ സൃഷ്ടിക്കാൻ ഉള്ള ഒരു ലൈബ്രറിയാണ്, ഇത് പാരമ്പര്യമായ പഴയ സിസ്റ്റമായ [CLIPS](http://www.clipsrules.net/index.html) നെപ്പോലെ രൂപകൽപ്പന ചെയ്തതാണ്.\n",
|
||||
"\n",
|
||||
"നാം ഫോർവേഡ് ചെയിനിംഗ് സ്വയം നടപ്പിലാക്കാമായിരുന്നു, എന്നാൽ സാധാരണയായി ലളിതമായ നടപ്പാക്കലുകൾ വളരെ കാര്യക്ഷമമല്ല. കൂടുതൽ ഫലപ്രദമായ റൂൾ മാച്ചിംഗിനായി പ്രത്യേക ആൽഗോരിതം [Rete](https://en.wikipedia.org/wiki/Rete_algorithm) ഉപയോഗിക്കുന്നു.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Collecting git+https://github.com/buguroo/pyknow/\n",
|
||||
" Cloning https://github.com/buguroo/pyknow/ to /tmp/pip-req-build-3cqeulyl\n",
|
||||
" Running command git clone --filter=blob:none --quiet https://github.com/buguroo/pyknow/ /tmp/pip-req-build-3cqeulyl\n",
|
||||
" Resolved https://github.com/buguroo/pyknow/ to commit 48818336f2e9a126f1964f2d8dc22d37ff800fe8\n",
|
||||
" Preparing metadata (setup.py) ... \u001b[?25ldone\n",
|
||||
"\u001b[?25hCollecting frozendict==1.2\n",
|
||||
" Using cached frozendict-1.2.tar.gz (2.6 kB)\n",
|
||||
" Preparing metadata (setup.py) ... \u001b[?25ldone\n",
|
||||
"\u001b[?25hCollecting schema==0.6.7\n",
|
||||
" Using cached schema-0.6.7-py2.py3-none-any.whl (14 kB)\n",
|
||||
"Building wheels for collected packages: pyknow, frozendict\n",
|
||||
" Building wheel for pyknow (setup.py) ... \u001b[?25ldone\n",
|
||||
"\u001b[?25h Created wheel for pyknow: filename=pyknow-1.7.0-py3-none-any.whl size=34228 sha256=b7de5b09292c4007667c72f69b98d5a1b5f7324ff15f9dd8e077c3d5f7aade42\n",
|
||||
" Stored in directory: /tmp/pip-ephem-wheel-cache-k7jpave7/wheels/81/1a/d3/f6c15dbe1955598a37755215f2a10449e7418500d7bd4b9508\n",
|
||||
" Building wheel for frozendict (setup.py) ... \u001b[?25ldone\n",
|
||||
"\u001b[?25h Created wheel for frozendict: filename=frozendict-1.2-py3-none-any.whl size=3148 sha256=2863d55c240d2409cddf05ccfe600591f8478681549fc97555c47c90dc6bb160\n",
|
||||
" Stored in directory: /home/rg/.cache/pip/wheels/49/ac/f8/cb8120244e710bdb479c86198b03c7b08c3c2d3d2bf448fd6e\n",
|
||||
"Successfully built pyknow frozendict\n",
|
||||
"Installing collected packages: schema, frozendict, pyknow\n",
|
||||
"Successfully installed frozendict-1.2 pyknow-1.7.0 schema-0.6.7\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import sys\n",
|
||||
"!{sys.executable} -m pip install git+https://github.com/buguroo/pyknow/"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from pyknow import *\n",
|
||||
"#import pyknow"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"നാം നമ്മുടെ സിസ്റ്റം `KnowledgeEngine` എന്ന ക്ലാസ്സിന്റെ സബ്ക്ലാസായി നിർവചിക്കും. ഓരോ റൂൾവും `@Rule` അനോട്ടേഷനുള്ള വ്യത്യസ്ത ഫംഗ്ഷനായി നിർവചിക്കപ്പെടുന്നു, ഇത് റൂൾ എപ്പോൾ പ്രവർത്തിക്കണം എന്ന് വ്യക്തമാക്കുന്നു. റൂളിനുള്ളിൽ, നാം `declare` ഫംഗ്ഷൻ ഉപയോഗിച്ച് പുതിയ വസ്തുതകൾ ചേർക്കാം, ആ വസ്തുതകൾ ചേർക്കുന്നതിലൂടെ ഫോർവേഡ് ഇൻഫറൻസ് എഞ്ചിൻ ചില കൂടുതൽ റൂളുകൾ വിളിക്കും.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class Animals(KnowledgeEngine):\n",
|
||||
" @Rule(OR(\n",
|
||||
" AND(Fact('sharp teeth'),Fact('claws'),Fact('forward looking eyes')),\n",
|
||||
" Fact('eats meat')))\n",
|
||||
" def cornivor(self):\n",
|
||||
" self.declare(Fact('carnivor'))\n",
|
||||
" \n",
|
||||
" @Rule(OR(Fact('hair'),Fact('gives milk')))\n",
|
||||
" def mammal(self):\n",
|
||||
" self.declare(Fact('mammal'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('mammal'),\n",
|
||||
" OR(Fact('has hooves'),Fact('chews cud')))\n",
|
||||
" def hooves(self):\n",
|
||||
" self.declare('ungulate')\n",
|
||||
" \n",
|
||||
" @Rule(OR(Fact('feathers'),AND(Fact('flies'),Fact('lays eggs'))))\n",
|
||||
" def bird(self):\n",
|
||||
" self.declare('bird')\n",
|
||||
" \n",
|
||||
" @Rule(Fact('mammal'),Fact('carnivor'),\n",
|
||||
" Fact(color='red-brown'),\n",
|
||||
" Fact(pattern='dark spots'))\n",
|
||||
" def monkey(self):\n",
|
||||
" self.declare(Fact(animal='monkey'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('mammal'),Fact('carnivor'),\n",
|
||||
" Fact(color='red-brown'),\n",
|
||||
" Fact(pattern='dark stripes'))\n",
|
||||
" def tiger(self):\n",
|
||||
" self.declare(Fact(animal='tiger'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('ungulate'),\n",
|
||||
" Fact('long neck'),\n",
|
||||
" Fact('long legs'),\n",
|
||||
" Fact(pattern='dark spots'))\n",
|
||||
" def giraffe(self):\n",
|
||||
" self.declare(Fact(animal='giraffe'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('ungulate'),\n",
|
||||
" Fact(pattern='dark stripes'))\n",
|
||||
" def zebra(self):\n",
|
||||
" self.declare(Fact(animal='zebra'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('bird'),\n",
|
||||
" Fact('long neck'),\n",
|
||||
" Fact('cannot fly'),\n",
|
||||
" Fact(color='black and white'))\n",
|
||||
" def straus(self):\n",
|
||||
" self.declare(Fact(animal='ostrich'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('bird'),\n",
|
||||
" Fact('swims'),\n",
|
||||
" Fact('cannot fly'),\n",
|
||||
" Fact(color='black and white'))\n",
|
||||
" def pinguin(self):\n",
|
||||
" self.declare(Fact(animal='pinguin'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('bird'),\n",
|
||||
" Fact('flies well'))\n",
|
||||
" def albatros(self):\n",
|
||||
" self.declare(Fact(animal='albatross'))\n",
|
||||
" \n",
|
||||
" @Rule(Fact(animal=MATCH.a))\n",
|
||||
" def print_result(self,a):\n",
|
||||
" print('Animal is {}'.format(a))\n",
|
||||
" \n",
|
||||
" def factz(self,l):\n",
|
||||
" for x in l:\n",
|
||||
" self.declare(x)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഒരു നോളജ്ബേസ് നിർവചിച്ചതിന് ശേഷം, ഞങ്ങൾ ചില പ്രാഥമിക വാസ്തവങ്ങളുമായി നമ്മുടെ പ്രവർത്തന സ്മൃതി പൂരിപ്പിച്ച്, തുടർന്ന് inference നടത്താൻ `run()` മെത്തഡ് വിളിക്കുന്നു. ഫലമായി, പുതിയ inference ചെയ്ത വാസ്തവങ്ങൾ പ്രവർത്തന സ്മൃതിയിൽ ചേർക്കപ്പെട്ടിരിക്കുന്നതിനെ നിങ്ങൾ കാണാം, അതിൽ മൃഗത്തെക്കുറിച്ചുള്ള അന്തിമ വാസ്തവവും ഉൾപ്പെടുന്നു (നാം എല്ലാ പ്രാഥമിക വാസ്തവങ്ങളും ശരിയായി ക്രമീകരിച്ചാൽ).\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Animal is tiger\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"FactList([(0, InitialFact()),\n",
|
||||
" (1, Fact(color='red-brown')),\n",
|
||||
" (2, Fact(pattern='dark stripes')),\n",
|
||||
" (3, Fact('sharp teeth')),\n",
|
||||
" (4, Fact('claws')),\n",
|
||||
" (5, Fact('forward looking eyes')),\n",
|
||||
" (6, Fact('gives milk')),\n",
|
||||
" (7, Fact('mammal')),\n",
|
||||
" (8, Fact('carnivor')),\n",
|
||||
" (9, Fact(animal='tiger'))])"
|
||||
]
|
||||
},
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"ex1 = Animals()\n",
|
||||
"ex1.reset()\n",
|
||||
"ex1.factz([\n",
|
||||
" Fact(color='red-brown'),\n",
|
||||
" Fact(pattern='dark stripes'),\n",
|
||||
" Fact('sharp teeth'),\n",
|
||||
" Fact('claws'),\n",
|
||||
" Fact('forward looking eyes'),\n",
|
||||
" Fact('gives milk')])\n",
|
||||
"ex1.run()\n",
|
||||
"ex1.facts"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**അസൂയാ**: \nഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.7.4 64-bit (conda)",
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5"
|
||||
}
|
||||
},
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.11.2"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "ab2bd97b0453415b89a469284609a8ce",
|
||||
"translation_date": "2025-11-25T23:48:34+00:00",
|
||||
"source_file": "lessons/2-Symbolic/Animals.ipynb",
|
||||
"language_code": "ml"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
|
|
@ -1,249 +1,249 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "7d097f7fda9166ead615e4c34552381b",
|
||||
"translation_date": "2025-11-25T21:01:12+00:00",
|
||||
"source_file": "lessons/2-Symbolic/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# അറിവ് പ്രതിനിധാനം ചെയ്യലും വിദഗ്ധ സിസ്റ്റങ്ങളും
|
||||
|
||||

|
||||
|
||||
> സ്കെച്ച്നോട്ട്: [Tomomi Imura](https://twitter.com/girlie_mac)
|
||||
|
||||
കൃത്രിമ ബുദ്ധിമുട്ടിന്റെ തിരച്ചിൽ മനുഷ്യർ പോലെ ലോകത്തെ മനസ്സിലാക്കാനുള്ള അറിവ് കണ്ടെത്തലിലാണ്. എന്നാൽ ഇത് എങ്ങനെ ചെയ്യാം?
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/3)
|
||||
|
||||
AIയുടെ ആദ്യകാലങ്ങളിൽ, ബുദ്ധിമുട്ടുള്ള സിസ്റ്റങ്ങൾ സൃഷ്ടിക്കുന്നതിന് മുകളിൽ നിന്ന് താഴേക്ക് സമീപനം (മുൻപത്തെ പാഠത്തിൽ ചർച്ച ചെയ്തത്) പ്രചാരത്തിലായിരുന്നു. ആളുകളിൽ നിന്നുള്ള അറിവ് യന്ത്രം വായിക്കാൻ കഴിയുന്ന രൂപത്തിലേക്ക് മാറ്റി, അത് ഉപയോഗിച്ച് പ്രശ്നങ്ങൾ സ്വയം പരിഹരിക്കാമെന്ന് കരുതിയിരുന്നു. ഈ സമീപനം രണ്ട് വലിയ ആശയങ്ങളിലായിരുന്നു അടിസ്ഥാനമാക്കിയിരിക്കുന്നത്:
|
||||
|
||||
* അറിവ് പ്രതിനിധാനം
|
||||
* തർക്കം (റീസണിംഗ്)
|
||||
|
||||
## അറിവ് പ്രതിനിധാനം
|
||||
|
||||
സിംബോളിക് AIയിൽ പ്രധാന ആശയങ്ങളിൽ ഒന്നാണ് **അറിവ്**. അറിവും *വിവരവും* അല്ലെങ്കിൽ *ഡാറ്റയും* തമ്മിൽ വ്യത്യാസം മനസ്സിലാക്കുന്നത് പ്രധാനമാണ്. ഉദാഹരണത്തിന്, പുസ്തകങ്ങളിൽ അറിവുണ്ടെന്ന് പറയാം, കാരണം പുസ്തകങ്ങൾ പഠിച്ച് വിദഗ്ധനാകാം. എന്നാൽ പുസ്തകങ്ങളിൽ ഉള്ളത് യഥാർത്ഥത്തിൽ *ഡാറ്റ* ആണ്, പുസ്തകങ്ങൾ വായിച്ച് ഈ ഡാറ്റ നമ്മുടെ ലോക മോഡലിൽ ചേർത്താൽ അത് അറിവായി മാറും.
|
||||
|
||||
> ✅ **അറിവ്** എന്നത് നമ്മുടെ തലയിൽ ഉള്ളതും ലോകത്തെ മനസ്സിലാക്കലിന്റെ പ്രതിനിധാനവുമാണ്. ഇത് ഒരു സജീവമായ **പഠന** പ്രക്രിയയിലൂടെ ലഭിക്കുന്നു, നമ്മൾ സ്വീകരിക്കുന്ന വിവരങ്ങൾ നമ്മുടെ സജീവ ലോക മോഡലിൽ ചേർക്കുന്നു.
|
||||
|
||||
അറിവ് കൃത്യമായി നിർവചിക്കാറില്ല, പക്ഷേ [DIKW പിരമിഡ്](https://en.wikipedia.org/wiki/DIKW_pyramid) ഉപയോഗിച്ച് ബന്ധപ്പെട്ട ആശയങ്ങളുമായി പൊരുത്തപ്പെടുത്തുന്നു. ഇതിൽ ഉൾപ്പെടുന്ന ആശയങ്ങൾ:
|
||||
|
||||
* **ഡാറ്റ**: എഴുതിയ എഴുത്തോ സംസാരിച്ച വാക്കുകളോ പോലുള്ള ഭൗതിക മാധ്യമങ്ങളിൽ പ്രതിനിധാനം ചെയ്യപ്പെടുന്ന ഒന്നാണ്. ഡാറ്റ മനുഷ്യരിൽ സ്വതന്ത്രമായി നിലനിൽക്കുന്നു, ആളുകൾക്കിടയിൽ കൈമാറാം.
|
||||
* **വിവരം**: ഡാറ്റയെ നമ്മുടെ തലയിൽ എങ്ങനെ വ്യാഖ്യാനിക്കുന്നു എന്നതാണ്. ഉദാഹരണത്തിന്, *കമ്പ്യൂട്ടർ* എന്ന വാക്ക് കേട്ടാൽ അതിന്റെ അർത്ഥം മനസ്സിലാക്കുന്നു.
|
||||
* **അറിവ്**: വിവരങ്ങൾ നമ്മുടെ ലോക മോഡലിൽ ചേർക്കപ്പെടുന്നത്. ഉദാഹരണത്തിന്, കമ്പ്യൂട്ടർ എന്താണെന്ന് പഠിച്ചാൽ, അത് എങ്ങനെ പ്രവർത്തിക്കുന്നു, വില എത്രയാണ്, എന്തിന് ഉപയോഗിക്കാം തുടങ്ങിയ ആശയങ്ങൾ ഉണ്ടാകുന്നു. ഈ ബന്ധമുള്ള ആശയങ്ങളുടെ ശൃംഖലയാണ് അറിവ്.
|
||||
* **ബുദ്ധി**: ലോകത്തെ മനസ്സിലാക്കലിന്റെ ഒരു ഉയർന്ന തലമാണ്, ഇത് *മെറ്റാ-അറിവ്* പ്രതിനിധാനം ചെയ്യുന്നു, ഉദാ: അറിവ് എപ്പോൾ എങ്ങനെ ഉപയോഗിക്കണം എന്ന ധാരണ.
|
||||
|
||||
<img src="../../../../translated_images/DIKW_Pyramid.94126f7d2bd8db5be71c6f1658b94bd3c85342e3cb827913b556b0414d358340.ml.png" width="30%"/>
|
||||
|
||||
*ചിത്രം [വിക്കിപീഡിയയിൽ നിന്ന്](https://commons.wikimedia.org/w/index.php?curid=37705247), Longlivetheux - സ്വന്തം കൃതി, CC BY-SA 4.0*
|
||||
|
||||
അതിനാൽ, **അറിവ് പ്രതിനിധാനം** എന്ന പ്രശ്നം കമ്പ്യൂട്ടറിനുള്ളിൽ അറിവ് ഡാറ്റ രൂപത്തിൽ പ്രതിനിധാനം ചെയ്ത് അത് സ്വയം ഉപയോഗിക്കാൻ കഴിയുന്ന വിധം കണ്ടെത്തലാണ്. ഇത് ഒരു സ്പെക്ട്രം ആയി കാണാം:
|
||||
|
||||

|
||||
|
||||
> ചിത്രം: [Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
* ഇടത്തുവശത്ത്, കമ്പ്യൂട്ടറുകൾക്ക് ഫലപ്രദമായി ഉപയോഗിക്കാവുന്ന വളരെ ലളിതമായ അറിവ് പ്രതിനിധാനങ്ങൾ ഉണ്ട്. ഏറ്റവും ലളിതമായത് ആൽഗോരിതമിക് ആണ്, അറിവ് കമ്പ്യൂട്ടർ പ്രോഗ്രാമായി പ്രതിനിധാനം ചെയ്യപ്പെടുന്നു. എന്നാൽ ഇത് ഏറ്റവും നല്ല മാർഗം അല്ല, കാരണം ഇത് ഫ്ലെക്സിബിൾ അല്ല. നമ്മുടെ തലയിൽ ഉള്ള അറിവ് പലപ്പോഴും ആൽഗോരിതമിക് അല്ല.
|
||||
* വലത്തുവശത്ത്, പ്രകൃതിദത്ത എഴുത്ത് പോലുള്ള പ്രതിനിധാനങ്ങൾ ഉണ്ട്. ഇത് ഏറ്റവും ശക്തമാണ്, പക്ഷേ സ്വയം തർക്കത്തിന് ഉപയോഗിക്കാനാകില്ല.
|
||||
|
||||
> ✅ ഒരു നിമിഷം ചിന്തിക്കുക, നിങ്ങൾ തലയിൽ അറിവ് എങ്ങനെ പ്രതിനിധാനം ചെയ്യുന്നു, അത് കുറിപ്പുകളായി മാറ്റുമ്പോൾ retention-നായി ഏത് ഫോർമാറ്റ് നിങ്ങൾക്ക് നല്ലതാണ്?
|
||||
|
||||
## കമ്പ്യൂട്ടർ അറിവ് പ്രതിനിധാനങ്ങൾ വർഗ്ഗീകരിക്കൽ
|
||||
|
||||
വിവിധ കമ്പ്യൂട്ടർ അറിവ് പ്രതിനിധാന രീതികൾ താഴെപ്പറയുന്ന വിഭാഗങ്ങളിലായി വേർതിരിക്കാം:
|
||||
|
||||
* **നെറ്റ്വർക്ക് പ്രതിനിധാനങ്ങൾ**: നമ്മുടെ തലയിൽ ബന്ധമുള്ള ആശയങ്ങളുടെ ഒരു നെറ്റ്വർക്ക് ഉണ്ടെന്നതിൽ അടിസ്ഥാനമാക്കിയുള്ളത്. അതേ നെറ്റ്വർക്ക് കമ്പ്യൂട്ടറിനുള്ളിൽ ഗ്രാഫ് രൂപത്തിൽ പുനരുണ്ടാക്കാം - ഇതാണ് **സെമാന്റിക് നെറ്റ്വർക്ക്**.
|
||||
|
||||
1. **ഓബ്ജക്റ്റ്-അട്രിബ്യൂട്ട്-വാല്യു ട്രിപ്പ്ലറ്റുകൾ** അല്ലെങ്കിൽ **അട്രിബ്യൂട്ട്-വാല്യു ജോഡികൾ**. ഒരു ഗ്രാഫ് കമ്പ്യൂട്ടറിനുള്ളിൽ നോഡുകളും എഡ്ജുകളും ഉള്ള പട്ടികയായി പ്രതിനിധാനം ചെയ്യാവുന്നതുകൊണ്ട്, സെമാന്റിക് നെറ്റ്വർക്ക് ട്രിപ്പ്ലറ്റുകളുടെ പട്ടികയായി പ്രതിനിധാനം ചെയ്യാം, അതിൽ ഓബ്ജക്റ്റുകൾ, ആട്രിബ്യൂട്ടുകൾ, മൂല്യങ്ങൾ ഉൾപ്പെടും. ഉദാഹരണത്തിന്, പ്രോഗ്രാമിംഗ് ഭാഷകളെക്കുറിച്ച് താഴെപ്പറയുന്ന ട്രിപ്പ്ലറ്റുകൾ ഉണ്ടാക്കാം:
|
||||
|
||||
Object | Attribute | Value
|
||||
-------|-----------|------
|
||||
Python | is | Untyped-Language
|
||||
Python | invented-by | Guido van Rossum
|
||||
Python | block-syntax | indentation
|
||||
Untyped-Language | doesn't have | type definitions
|
||||
|
||||
> ✅ ട്രിപ്പ്ലറ്റുകൾ മറ്റ് അറിവ് തരങ്ങൾ പ്രതിനിധാനം ചെയ്യാൻ എങ്ങനെ ഉപയോഗിക്കാമെന്ന് ചിന്തിക്കുക.
|
||||
|
||||
2. **ഹയർആർക്കിക്കൽ പ്രതിനിധാനങ്ങൾ**: നമ്മൾ തലയിൽ സാധാരണയായി ഒരു ഓബ്ജക്റ്റുകളുടെ ഹയർആർക്കി സൃഷ്ടിക്കുന്നതിൽ ഊന്നൽ നൽകുന്നു. ഉദാഹരണത്തിന്, കാനറി ഒരു പക്ഷിയാണ് എന്ന് അറിയാം, എല്ലാ പക്ഷികൾക്കും ചിറകുകൾ ഉണ്ടെന്ന് അറിയാം. കാനറിയുടെ നിറം സാധാരണയായി എന്താണെന്ന്, പറക്കാനുള്ള വേഗത എന്താണെന്ന് അറിയാം.
|
||||
|
||||
- **ഫ്രെയിം പ്രതിനിധാനം**: ഓരോ ഓബ്ജക്റ്റിനെയും അല്ലെങ്കിൽ ഓബ്ജക്റ്റുകളുടെ ക്ലാസിനെയും **ഫ്രെയിം** ആയി പ്രതിനിധാനം ചെയ്യുന്നു, അതിൽ **സ്ലോട്ടുകൾ** ഉണ്ട്. സ്ലോട്ടുകൾക്ക് സാധാരണ മൂല്യങ്ങൾ, മൂല്യ നിയന്ത്രണങ്ങൾ, അല്ലെങ്കിൽ മൂല്യം ലഭിക്കാൻ വിളിക്കാവുന്ന പ്രോസീജറുകൾ ഉണ്ടാകാം. എല്ലാ ഫ്രെയിമുകളും ഒരു ഹയർആർക്കി രൂപത്തിൽ ഒറ്റപ്പെട്ടിരിക്കുന്നു, ഒബ്ജക്റ്റ്-ഓറിയന്റഡ് പ്രോഗ്രാമിംഗ് ഭാഷകളിലെ ഓബ്ജക്റ്റ് ഹയർആർക്കിയെപ്പോലെ.
|
||||
- **സിനാരിയോകൾ**: സമയക്രമത്തിൽ വികസിക്കാവുന്ന സങ്കീർണ്ണ സാഹചര്യങ്ങൾ പ്രതിനിധാനം ചെയ്യുന്ന പ്രത്യേക തരത്തിലുള്ള ഫ്രെയിമുകൾ.
|
||||
|
||||
**Python**
|
||||
|
||||
Slot | Value | Default value | Interval |
|
||||
-----|-------|---------------|----------|
|
||||
Name | Python | | |
|
||||
Is-A | Untyped-Language | | |
|
||||
Variable Case | | CamelCase | |
|
||||
Program Length | | | 5-5000 lines |
|
||||
Block Syntax | Indent | | |
|
||||
|
||||
3. **പ്രൊസീജറൽ പ്രതിനിധാനങ്ങൾ**: ഒരു നിബന്ധന സംഭവിക്കുമ്പോൾ നടപ്പിലാക്കാവുന്ന പ്രവർത്തനങ്ങളുടെ പട്ടികയായി അറിവ് പ്രതിനിധാനം ചെയ്യുന്നു.
|
||||
- പ്രൊഡക്ഷൻ റൂൾസ് if-then പ്രസ്താവനകളാണ്, നമുക്ക് നിഗമനങ്ങൾ വരുത്താൻ സഹായിക്കുന്നു. ഉദാഹരണത്തിന്, ഒരു ഡോക്ടർക്ക് ഒരു നിയമം ഉണ്ടാകാം: **IF** രോഗിക്ക് ഉയർന്ന പനി **OR** രക്തപരിശോധനയിൽ C-റിയാക്ടീവ് പ്രോട്ടീൻ ഉയർന്നാൽ **THEN** അവന് അണുബാധയുണ്ട്. നിബന്ധനകളിൽ ഒന്നും കണ്ടാൽ, അണുബാധയെക്കുറിച്ച് നിഗമനം വരുത്താം, പിന്നീട് അത് തർക്കത്തിൽ ഉപയോഗിക്കാം.
|
||||
- ആൽഗോരിതങ്ങൾ മറ്റൊരു പ്രൊസീജറൽ പ്രതിനിധാന രൂപമാണ്, പക്ഷേ അറിവ് അടിസ്ഥാനമാക്കിയ സിസ്റ്റങ്ങളിൽ നേരിട്ട് ഉപയോഗിക്കാറില്ല.
|
||||
|
||||
4. **ലോജിക്**: ആദ്യം അറിസ്റ്റോട്ടിൽസ് മനുഷ്യരുടെ സർവത്ര അറിവ് പ്രതിനിധാനം ചെയ്യാനുള്ള മാർഗമായി നിർദ്ദേശിച്ചു.
|
||||
- പ്രെഡിക്കേറ്റ് ലോജിക് ഗണിത ശാസ്ത്ര സിദ്ധാന്തമായി വളരെ സമ്പന്നമാണ്, അതിനാൽ സാധാരണയായി പ്രൊലോഗിൽ ഉപയോഗിക്കുന്ന ഹോൺ ക്ലോസുകൾ പോലുള്ള ഒരു ഉപസമൂഹം ഉപയോഗിക്കുന്നു.
|
||||
- ഡിസ്ക്രിപ്റ്റീവ് ലോജിക് ഒരു ലോജിക്കൽ സിസ്റ്റങ്ങളുടെ കുടുംബമാണ്, ഇത് ഓബ്ജക്റ്റുകളുടെ ഹയർആർക്കി പ്രതിനിധാനം ചെയ്യാനും reasoning ചെയ്യാനും ഉപയോഗിക്കുന്നു, സെമാന്റിക് വെബ് പോലുള്ള വിതരണ അറിവ് പ്രതിനിധാനങ്ങൾക്കായി.
|
||||
|
||||
## വിദഗ്ധ സിസ്റ്റങ്ങൾ
|
||||
|
||||
സിംബോളിക് AIയുടെ ആദ്യ വിജയങ്ങളിൽ ഒന്നായിരുന്നു **വിദഗ്ധ സിസ്റ്റങ്ങൾ** - ചില പരിമിത പ്രശ്ന മേഖലകളിൽ വിദഗ്ധനായി പ്രവർത്തിക്കാൻ രൂപകൽപ്പന ചെയ്ത കമ്പ്യൂട്ടർ സിസ്റ്റങ്ങൾ. ഇവ മനുഷ്യ വിദഗ്ധരിൽ നിന്നുള്ള **അറിവ് ബേസ്** ഉപയോഗിച്ച് നിർമ്മിക്കപ്പെട്ടിരുന്നു, അതിന്മേൽ പ്രവർത്തിക്കുന്ന **ഇൻഫറൻസ് എഞ്ചിൻ** ഉണ്ടായിരുന്നു.
|
||||
|
||||
 | 
|
||||
---------------------------------------------|------------------------------------------------
|
||||
മനുഷ്യ നാഡീകുഴപ്പത്തിന്റെ ലളിതമായ ഘടന | അറിവ് അടിസ്ഥാനമാക്കിയ സിസ്റ്റത്തിന്റെ ഘടന
|
||||
|
||||
വിദഗ്ധ സിസ്റ്റങ്ങൾ മനുഷ്യന്റെ തർക്ക സംവിധാനത്തെപ്പോലെ നിർമ്മിച്ചിരിക്കുന്നു, അതിൽ **ഷോർട്ട്-ടേം മെമ്മറി**യും **ലോങ്-ടേം മെമ്മറി**യും ഉണ്ട്. അതുപോലെ, അറിവ് അടിസ്ഥാനമാക്കിയ സിസ്റ്റങ്ങളിൽ താഴെപ്പറയുന്ന ഘടകങ്ങൾ വേർതിരിക്കാം:
|
||||
|
||||
* **പ്രശ്ന മെമ്മറി**: ഇപ്പോൾ പരിഹരിക്കപ്പെടുന്ന പ്രശ്നത്തെക്കുറിച്ചുള്ള അറിവ് അടങ്ങിയിരിക്കുന്നു, ഉദാ: രോഗിയുടെ താപനില, രക്തസമ്മർദ്ദം, അണുബാധയുണ്ടോ എന്നത്. ഈ അറിവ് **സ്ഥിര അറിവ്** എന്നും വിളിക്കുന്നു, കാരണം ഇത് പ്രശ്നത്തെക്കുറിച്ചുള്ള ഒരു സ്നാപ്ഷോട്ട് ആണ് - *പ്രശ്നാവസ്ഥ*.
|
||||
* **അറിവ് ബേസ്**: പ്രശ്ന മേഖലയിൽ ദീർഘകാല അറിവ് പ്രതിനിധാനം ചെയ്യുന്നു. മനുഷ്യ വിദഗ്ധരിൽ നിന്നു കൈമാറിയതാണ്, കൂടാതെ ഇത് കൺസൾട്ടേഷനുകൾക്കിടയിൽ മാറാറില്ല. ഇത് പ്രശ്നാവസ്ഥകളിൽ നിന്ന് മറ്റൊന്നിലേക്ക് നാവിഗേറ്റ് ചെയ്യാൻ സഹായിക്കുന്നതിനാൽ **ഡൈനാമിക് അറിവ്** എന്നും വിളിക്കുന്നു.
|
||||
* **ഇൻഫറൻസ് എഞ്ചിൻ**: പ്രശ്നാവസ്ഥാ സ്പേസിൽ തിരച്ചിൽ നടത്തുന്നതും, ആവശ്യമായപ്പോൾ ഉപയോക്താവിനോട് ചോദ്യങ്ങൾ ചോദിക്കുന്നതും, ഓരോ അവസ്ഥയ്ക്കും അനുയോജ്യമായ നിയമങ്ങൾ കണ്ടെത്തുന്നതും നിയന്ത്രിക്കുന്നു.
|
||||
|
||||
ഉദാഹരണമായി, ഒരു ജീവിയെ അതിന്റെ ശാരീരിക സവിശേഷതകളുടെ അടിസ്ഥാനത്തിൽ തിരിച്ചറിയുന്ന വിദഗ്ധ സിസ്റ്റം പരിഗണിക്കാം:
|
||||
|
||||

|
||||
|
||||
> ചിത്രം: [Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
ഈ ചിത്രത്തെ **AND-OR ട്രീ** എന്ന് വിളിക്കുന്നു, ഇത് പ്രൊഡക്ഷൻ റൂളുകളുടെ ഗ്രാഫിക്കൽ പ്രതിനിധാനമാണ്. വിദഗ്ധരിൽ നിന്നുള്ള അറിവ് എടുക്കുമ്പോൾ ട്രീ വരയ്ക്കുന്നത് സഹായകരമാണ്. കമ്പ്യൂട്ടറിനുള്ളിൽ അറിവ് പ്രതിനിധാനം ചെയ്യാൻ നിയമങ്ങൾ ഉപയോഗിക്കുന്നത് കൂടുതൽ സൗകര്യപ്രദമാണ്:
|
||||
|
||||
```
|
||||
IF the animal eats meat
|
||||
OR (animal has sharp teeth
|
||||
AND animal has claws
|
||||
AND animal has forward-looking eyes
|
||||
)
|
||||
THEN the animal is a carnivore
|
||||
```
|
||||
|
||||
നിങ്ങൾ ശ്രദ്ധിക്കാം, നിയമത്തിന്റെ ഇടത് ഭാഗത്തുള്ള ഓരോ നിബന്ധനയും പ്രവർത്തനവും അടിസ്ഥാനപരമായി ഓബ്ജക്റ്റ്-അട്രിബ്യൂട്ട്-വാല്യു (OAV) ട്രിപ്പ്ലറ്റുകളാണ്. **വർക്കിംഗ് മെമ്മറി** നിലവിൽ പരിഹരിക്കപ്പെടുന്ന പ്രശ്നവുമായി ബന്ധപ്പെട്ട OAV ട്രിപ്പ്ലറ്റുകളുടെ സമാഹാരമാണ്. **റൂൾസ് എഞ്ചിൻ** നിലവിലുള്ള നിബന്ധനകൾ പൂരിപ്പിക്കുന്ന നിയമങ്ങൾ കണ്ടെത്തി അവ പ്രയോഗിച്ച് വർക്കിംഗ് മെമ്മറിയിൽ പുതിയ ട്രിപ്പ്ലറ്റുകൾ ചേർക്കുന്നു.
|
||||
|
||||
> ✅ നിങ്ങൾ ഇഷ്ടപ്പെടുന്ന വിഷയത്തിൽ നിങ്ങളുടെ സ്വന്തം AND-OR ട്രീ എഴുതുക!
|
||||
|
||||
### ഫോർവേഡ് vs. ബാക്ക്വേഡ് ഇൻഫറൻസ്
|
||||
|
||||
മുകളിൽ വിവരിച്ച പ്രക്രിയ **ഫോർവേഡ് ഇൻഫറൻസ്** എന്നാണ് വിളിക്കുന്നത്. ഇത് വർക്കിംഗ് മെമ്മറിയിൽ ലഭ്യമായ പ്രാരംഭ ഡാറ്റയിൽ നിന്ന് ആരംഭിച്ച് താഴെപ്പറയുന്ന തർക്ക ലൂപ്പ് നടപ്പിലാക്കുന്നു:
|
||||
|
||||
1. ലക്ഷ്യ ആട്രിബ്യൂട്ട് വർക്കിംഗ് മെമ്മറിയിൽ ഉണ്ടെങ്കിൽ - നിർത്തുക, ഫലം നൽകുക
|
||||
2. നിലവിൽ പൂരിപ്പിച്ചിരിക്കുന്ന നിബന്ധനകൾ ഉള്ള എല്ലാ നിയമങ്ങളും കണ്ടെത്തുക - **കോൺഫ്ലിക്റ്റ് സെറ്റ്** ലഭിക്കുക
|
||||
3. **കോൺഫ്ലിക്റ്റ് റെസല്യൂഷൻ** നടത്തുക - ഈ ഘട്ടത്തിൽ നടപ്പിലാക്കാനുള്ള ഒരു നിയമം തിരഞ്ഞെടുക്കുക. വിവിധ കോൺഫ്ലിക്റ്റ് റെസല്യൂഷൻ തന്ത്രങ്ങൾ ഉണ്ടാകാം:
|
||||
- അറിവ് ബേസിലെ ആദ്യ പ്രയോഗയോഗ്യമായ നിയമം തിരഞ്ഞെടുക്കുക
|
||||
- യാദൃച്ഛിക നിയമം തിരഞ്ഞെടുക്കുക
|
||||
- *കൂടുതൽ പ്രത്യേകമായ* നിയമം തിരഞ്ഞെടുക്കുക, അഥവാ LHS-ൽ ഏറ്റവും കൂടുതൽ നിബന്ധനകൾ പൂരിപ്പിക്കുന്ന നിയമം
|
||||
4. തിരഞ്ഞെടുക്കപ്പെട്ട നിയമം പ്രയോഗിച്ച് പ്രശ്നാവസ്ഥയിൽ പുതിയ അറിവ് ചേർക്കുക
|
||||
5. പടിയിലേയ്ക്ക് മടങ്ങി 1-ാം പടി ആവർത്തിക്കുക
|
||||
|
||||
എങ്കിലും, ചില സാഹചര്യങ്ങളിൽ പ്രശ്നത്തെക്കുറിച്ചുള്ള അറിവ് ശൂന്യമായിരിക്കാം, നാം ചോദ്യങ്ങൾ ചോദിച്ച് നിഗമനത്തിലേക്ക് എത്താൻ ആഗ്രഹിക്കാം. ഉദാഹരണത്തിന്, മെഡിക്കൽ ഡയഗ്നോസിസിൽ, രോഗിയെ പരിശോധിക്കുന്നതിന് മുമ്പ് എല്ലാ പരിശോധനകളും നടത്താറില്ല. തീരുമാനമെടുക്കേണ്ടപ്പോൾ മാത്രമേ പരിശോധനകൾ നടത്തൂ.
|
||||
|
||||
ഈ പ്രക്രിയ **ബാക്ക്വേഡ് ഇൻഫറൻസ്** ഉപയോഗിച്ച് മോഡൽ ചെയ്യാം. ഇത് **ലക്ഷ്യം** (goal) - കണ്ടെത്തേണ്ട ആട്രിബ്യൂട്ട് മൂല്യം - നയിക്കുന്നു:
|
||||
|
||||
1. ലക്ഷ്യത്തിന്റെ മൂല്യം നൽകുന്ന എല്ലാ നിയമങ്ങളും തിരഞ്ഞെടുക്കുക (RHS-ൽ ലക്ഷ്യം ഉള്ളവ) - കോൺഫ്ലിക്റ്റ് സെറ്റ്
|
||||
2. ആ ആട്രിബ്യൂട്ടിനുള്ള നിയമങ്ങൾ ഇല്ലെങ്കിൽ, അല്ലെങ്കിൽ ഉപയോക്താവിൽ നിന്ന് മൂല്യം ചോദിക്കണമെന്ന് നിയമം ഉണ്ടെങ്കിൽ - ചോദിക്കുക, അല്ലെങ്കിൽ:
|
||||
3. കോൺഫ്ലിക്റ്റ് റെസല്യൂഷൻ തന്ത്രം ഉപയോഗിച്ച് ഒരു നിയമം *ഹൈപ്പോത്തസിസ്* ആയി തിരഞ്ഞെടുക്കുക - അത് തെളിയിക്കാൻ ശ്രമിക്കും
|
||||
4. നിയമത്തിന്റെ LHS-ൽ ഉള്ള എല്ലാ ആട്രിബ്യൂട്ടുകൾക്കും ഈ പ്രക്രിയ ആവർത്തിച്ച് അവ ലക്ഷ്യങ്ങളായി തെളിയിക്കാൻ ശ്രമിക്കുക
|
||||
5. പ്രക്രിയ ഏതെങ്കിലും ഘട്ടത്തിൽ പരാജയപ്പെട്ടാൽ - 3-ാം പടിയിൽ മറ്റൊരു നിയമം ഉപയോഗിക്കുക
|
||||
|
||||
> ✅ ഏത് സാഹചര്യങ്ങളിൽ ഫോർവേഡ് ഇൻഫറൻസ് കൂടുതൽ അനുയോജ്യമാണ്? ബാക്ക്വേഡ് ഇൻഫറൻസ് എപ്പോൾ ഉപയോഗിക്കണം?
|
||||
|
||||
### വിദഗ്ധ സിസ്റ്റങ്ങൾ നടപ്പിലാക്കൽ
|
||||
|
||||
വിദഗ്ധ സിസ്റ്റങ്ങൾ വിവിധ ഉപകരണങ്ങൾ ഉപയോഗിച്ച് നടപ്പിലാക്കാം:
|
||||
|
||||
* ഉയർന്ന തലത്തിലുള്ള പ്രോഗ്രാമിംഗ് ഭാഷയിൽ നേരിട്ട് പ്രോഗ്രാം ചെയ്യുക. ഇത് നല്ല ആശയം അല്ല, കാരണം അറിവ് അടിസ്ഥാനമാക്കിയ സിസ്റ്റത്തിന്റെ പ്രധാന ഗുണം അറിവും ഇൻഫറൻസും വേർതിരിച്ചിരിക്കുന്നു എന്നതാണ്, പ്രശ്ന മേഖല വിദഗ്ധൻ ഇൻഫറൻസ് പ്രക്രിയയുടെ വിശദാംശങ്ങൾ അറിയാതെ നിയമങ്ങൾ എഴുതാൻ കഴിയണം.
|
||||
* **വിദഗ്ധ സിസ്റ്റം ഷെൽ** ഉപയോഗിക്കുക, അതായത് അറിവ് പ്രതിനിധാന ഭാഷ ഉപയോഗിച്ച് അറിവ് ചേർക്കാൻ രൂപകൽപ്പന ചെയ്ത സിസ്റ്റം.
|
||||
|
||||
## ✍️ അഭ്യാസം: ജീവി ഇൻഫറൻസ്
|
||||
|
||||
ഫോർവേഡ്, ബാക്ക്വേഡ് ഇൻഫറൻസ് വിദഗ്ധ സിസ്റ്റം നടപ്പിലാക്കാനുള്ള ഉദാഹരണത്തിന് [Animals.ipynb](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb) കാണുക.
|
||||
|
||||
> **കുറിപ്പ്**: ഈ ഉദാഹരണം വളരെ ലളിതമാണ്, വിദഗ്ധ സിസ്റ്റ് എങ്ങനെ കാണപ്പെടുന്നു എന്ന ആശയം നൽകുന്നു. നിങ്ങൾ ഇത്തരമൊരു സിസ്റ്റം സൃഷ്ടിക്കുമ്പോൾ, ഏകദേശം 200+ നിയമങ്ങൾ എത്തുമ്പോഴാണ് അതിൽ നിന്നുള്ള *ബുദ്ധിമുട്ടുള്ള* പെരുമാറ്റം ശ്രദ്ധിക്കാനാകുക. ചിലപ്പോൾ നിയമങ്ങൾ വളരെ സങ്കീർണ്ണമാകുന്നു, എല്ലാം മനസ്സിലാക്കാൻ ബുദ്ധിമുട്ട് ഉണ്ടാക
|
||||
- അറിവ് വിവരണത്തിനായി XML അടിസ്ഥാനമാക്കിയുള്ള ഭാഷകളുടെ ഒരു കുടുംബം: RDF (Resource Description Framework), RDFS (RDF Schema), OWL (Ontology Web Language).
|
||||
|
||||
സെമാന്റിക് വെബിലെ ഒരു പ്രധാന ആശയം **ഓന്റോളജി** എന്ന ആശയമാണ്. ഇത് ഒരു പ്രശ്ന മേഖലയെ ഔപചാരികമായ അറിവ് പ്രതിനിധാനം ഉപയോഗിച്ച് വ്യക്തമായി നിർവചിക്കുന്നതിനെ സൂചിപ്പിക്കുന്നു. ഏറ്റവും ലളിതമായ ഓന്റോളജി പ്രശ്ന മേഖലയിലെ വസ്തുക്കളുടെ ഒരു ഹയർആർക്കിയാകാം, എന്നാൽ കൂടുതൽ സങ്കീർണ്ണമായ ഓന്റോളജികൾ നിഗമനത്തിന് ഉപയോഗിക്കാവുന്ന നിയമങ്ങളും ഉൾക്കൊള്ളും.
|
||||
|
||||
സെമാന്റിക് വെബിൽ എല്ലാ പ്രതിനിധാനങ്ങളും ട്രിപ്പിളുകളിലാണ് അടിസ്ഥാനമാക്കുന്നത്. ഓരോ വസ്തുവും ഓരോ ബന്ധവും യുണീക്ക് ആയി URI ഉപയോഗിച്ച് തിരിച്ചറിയപ്പെടുന്നു. ഉദാഹരണത്തിന്, ഈ AI പാഠ്യപദ്ധതി 2022 ജനുവരി 1-ന് Dmitry Soshnikov വികസിപ്പിച്ചുവെന്ന് പറയാൻ താഴെ കാണുന്ന ട്രിപ്പിളുകൾ ഉപയോഗിക്കാം:
|
||||
|
||||
<img src="../../../../translated_images/triplet.4b9b332587593298b31846eb5cf341d8f7e48da76e6692dbb7cf0fcf2fd5ab38.ml.png" width="30%"/>
|
||||
|
||||
```
|
||||
http://github.com/microsoft/ai-for-beginners http://www.example.com/terms/creation-date “Jan 13, 2007”
|
||||
http://github.com/microsoft/ai-for-beginners http://purl.org/dc/elements/1.1/creator http://soshnikov.com
|
||||
```
|
||||
|
||||
> ✅ ഇവിടെ `http://www.example.com/terms/creation-date` ഉം `http://purl.org/dc/elements/1.1/creator` ഉം *creator* (സൃഷ്ടാവ്) ഉം *creation date* (സൃഷ്ടി തീയതി) ഉം സൂചിപ്പിക്കാൻ ഉപയോഗിക്കുന്ന പ്രശസ്തവും സർവത്ര അംഗീകരിക്കപ്പെട്ട URI കളാണ്.
|
||||
|
||||
കൂടുതൽ സങ്കീർണ്ണമായ സാഹചര്യത്തിൽ, സൃഷ്ടാക്കളുടെ പട്ടിക നിർവചിക്കാൻ RDF ൽ നിർവചിച്ചിട്ടുള്ള ചില ഡാറ്റാ ഘടനകൾ ഉപയോഗിക്കാം.
|
||||
|
||||
<img src="../../../../translated_images/triplet-complex.32094972c7b4441b844bd85e683ba8eedc08af12177160f11584452698f29ace.ml.png" width="40%"/>
|
||||
|
||||
> മുകളിൽ കാണുന്ന ചിത്രങ്ങൾ [Dmitry Soshnikov](http://soshnikov.com) യുടെതാണ്
|
||||
|
||||
സെമാന്റിക് വെബ് നിർമ്മാണം ചിലപ്പോൾ സെർച്ച് എഞ്ചിനുകളും സ്വാഭാവിക ഭാഷാ പ്രോസസ്സിംഗ് സാങ്കേതികവിദ്യകളും വിജയിച്ചതുകൊണ്ട് മന്ദഗതിയിലായി, അവ ടെക്സ്റ്റിൽ നിന്ന് ഘടനാപരമായ ഡാറ്റ എടുക്കാൻ സഹായിക്കുന്നു. എങ്കിലും ചില മേഖലകളിൽ ഓന്റോളജികളും അറിവ് അടിസ്ഥാനങ്ങളും പരിപാലിക്കാൻ വലിയ ശ്രമങ്ങൾ തുടരുന്നു. ശ്രദ്ധിക്കാവുന്ന ചില പ്രോജക്ടുകൾ:
|
||||
|
||||
* [WikiData](https://wikidata.org/) വിക്കിപീഡിയയുമായി ബന്ധപ്പെട്ട യന്ത്രം വായിക്കാൻ കഴിയുന്ന അറിവ് അടിസ്ഥാനങ്ങളുടെ ഒരു ശേഖരമാണ്. ഡാറ്റയുടെ ഭൂരിഭാഗവും വിക്കിപീഡിയയിലെ *InfoBoxes* എന്ന ഘടനാപരമായ ഉള്ളടക്കത്തിൽ നിന്നാണ് ശേഖരിക്കുന്നത്. നിങ്ങൾക്ക് SPARQL എന്ന സെമാന്റിക് വെബിനുള്ള പ്രത്യേക ക്വറി ഭാഷയിൽ [ക്വറി](https://query.wikidata.org/) ചെയ്യാം. മനുഷ്യരിൽ ഏറ്റവും ജനപ്രിയമായ കണ്ണിന്റെ നിറങ്ങൾ കാണിക്കുന്ന ഒരു ഉദാഹരണ ക്വറി ഇതാ:
|
||||
|
||||
```sparql
|
||||
#defaultView:BubbleChart
|
||||
SELECT ?eyeColorLabel (COUNT(?human) AS ?count)
|
||||
WHERE
|
||||
{
|
||||
?human wdt:P31 wd:Q5. # human instance-of homo sapiens
|
||||
?human wdt:P1340 ?eyeColor. # human eye-color ?eyeColor
|
||||
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
|
||||
}
|
||||
GROUP BY ?eyeColorLabel
|
||||
```
|
||||
|
||||
* [DBpedia](https://www.dbpedia.org/) WikiData പോലെയുള്ള മറ്റൊരു ശ്രമമാണ്.
|
||||
|
||||
> ✅ നിങ്ങളുടെ സ്വന്തം ഓന്റോളജികൾ നിർമ്മിക്കാൻ, അല്ലെങ്കിൽ നിലവിലുള്ളവ തുറക്കാൻ ആഗ്രഹിക്കുന്നുവെങ്കിൽ, [Protégé](https://protege.stanford.edu/) എന്ന മികച്ച ദൃശ്യ ഓന്റോളജി എഡിറ്റർ ഉണ്ട്. ഡൗൺലോഡ് ചെയ്യുക അല്ലെങ്കിൽ ഓൺലൈനിൽ ഉപയോഗിക്കുക.
|
||||
|
||||
<img src="../../../../translated_images/protege.274177ceeac13b38094bc425073776bb0d2525620ad6261b9d9760ebd2a8e322.ml.png" width="70%"/>
|
||||
|
||||
*Web Protégé എഡിറ്റർ റോമാനോവ് കുടുംബ ഓന്റോളജിയുമായി തുറന്നിരിക്കുന്ന ചിത്രം. Dmitry Soshnikov യുടെ സ്ക്രീൻഷോട്ട്*
|
||||
|
||||
## ✍️ അഭ്യാസം: ഒരു കുടുംബ ഓന്റോളജി
|
||||
|
||||
കുടുംബ ബന്ധങ്ങളെക്കുറിച്ച് നിഗമനം നടത്താൻ സെമാന്റിക് വെബ് സാങ്കേതികവിദ്യകൾ ഉപയോഗിക്കുന്ന ഒരു ഉദാഹരണത്തിന് [FamilyOntology.ipynb](https://github.com/Ezana135/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb) കാണുക. സാധാരണ GEDCOM ഫോർമാറ്റിൽ പ്രതിനിധാനം ചെയ്ത ഒരു കുടുംബ വൃക്ഷവും കുടുംബ ബന്ധങ്ങളുടെ ഓന്റോളജിയും എടുത്ത് നൽകിയ വ്യക്തികളുടെ കുടുംബ ബന്ധങ്ങളുടെ ഗ്രാഫ് നിർമ്മിക്കും.
|
||||
|
||||
## Microsoft Concept Graph
|
||||
|
||||
പലപ്പോഴും ഓന്റോളജികൾ ശ്രദ്ധാപൂർവ്വം കൈയാൽ സൃഷ്ടിക്കപ്പെടുന്നു. എന്നാൽ, സ്വാഭാവിക ഭാഷാ ടെക്സ്റ്റുകളിൽ നിന്ന് പോലുള്ള അസംഘടിത ഡാറ്റയിൽ നിന്ന് ഓന്റോളജികൾ **മൈനിംഗ്** ചെയ്യാനും സാധിക്കും.
|
||||
|
||||
ഇത്തരം ഒരു ശ്രമം Microsoft Research നടത്തിയതാണ്, ഫലമായി [Microsoft Concept Graph](https://blogs.microsoft.com/ai/microsoft-researchers-release-graph-that-helps-machines-conceptualize/?WT.mc_id=academic-77998-cacaste) ലഭിച്ചു.
|
||||
|
||||
ഇത് `is-a` പാരമ്പര്യ ബന്ധം ഉപയോഗിച്ച് കൂട്ടിച്ചേർത്ത വലിയ എന്റിറ്റി ശേഖരമാണ്. "Microsoft എന്താണ്?" എന്ന ചോദ്യത്തിന് "ഒരു കമ്പനി 0.87 സാധ്യതയോടെ, ഒരു ബ്രാൻഡ് 0.75 സാധ്യതയോടെ" എന്നിങ്ങനെ ഉത്തരം നൽകാൻ ഇത് സഹായിക്കുന്നു.
|
||||
|
||||
ഗ്രാഫ് REST API ആയി ലഭ്യമാണ്, അല്ലെങ്കിൽ എല്ലാ എന്റിറ്റി ജോഡികളും പട്ടികപ്പെടുത്തിയ വലിയ ഡൗൺലോഡുചെയ്യാവുന്ന ടെക്സ്റ്റ് ഫയലായി ലഭ്യമാണ്.
|
||||
|
||||
## ✍️ അഭ്യാസം: ഒരു കോൺസെപ്റ്റ് ഗ്രാഫ്
|
||||
|
||||
Microsoft Concept Graph ഉപയോഗിച്ച് വാർത്താ ലേഖനങ്ങളെ വിവിധ വിഭാഗങ്ങളായി ഗ്രൂപ്പുചെയ്യുന്നത് എങ്ങനെ ചെയ്യാമെന്ന് കാണാൻ [MSConceptGraph.ipynb](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/MSConceptGraph.ipynb) നോട്ട്ബുക്ക് പരീക്ഷിക്കുക.
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ഇന്നത്തെ കാലത്ത്, AI യെ സാധാരണയായി *Machine Learning* അല്ലെങ്കിൽ *Neural Networks* എന്നതിന്റെ സമാനാർത്ഥകമായി കാണുന്നു. എന്നാൽ മനുഷ്യൻ വ്യക്തമായ നിഗമനം പ്രകടിപ്പിക്കുന്നുണ്ട്, ഇത് ഇപ്പോൾ ന്യൂറൽ നെറ്റ്വർക്കുകൾ കൈകാര്യം ചെയ്യാത്ത ഒന്നാണ്. യഥാർത്ഥ ലോക പ്രോജക്ടുകളിൽ, വിശദമായ നിഗമനം വിശദീകരണങ്ങൾ ആവശ്യമായ, അല്ലെങ്കിൽ സിസ്റ്റത്തിന്റെ പെരുമാറ്റം നിയന്ത്രിതമായി മാറ്റേണ്ടതുള്ള പ്രവർത്തനങ്ങൾക്ക് ഇപ്പോഴും ഉപയോഗിക്കുന്നു.
|
||||
|
||||
## 🚀 വെല്ലുവിളി
|
||||
|
||||
ഈ പാഠവുമായി ബന്ധപ്പെട്ട കുടുംബ ഓന്റോളജി നോട്ട്ബുക്കിൽ, മറ്റ് കുടുംബ ബന്ധങ്ങളുമായി പരീക്ഷണം നടത്താനുള്ള അവസരം ഉണ്ട്. കുടുംബ വൃക്ഷത്തിലെ ആളുകൾക്കിടയിലെ പുതിയ ബന്ധങ്ങൾ കണ്ടെത്താൻ ശ്രമിക്കുക.
|
||||
|
||||
## [പാഠാനന്തര ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/4)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
മനുഷ്യർ അറിവ് അളക്കാനും കോഡിഫൈ ചെയ്യാനും ശ്രമിച്ച മേഖലകൾ കണ്ടെത്താൻ ഇന്റർനെറ്റിൽ കുറച്ച് ഗവേഷണം നടത്തുക. Bloom's Taxonomy നോക്കുക, മനുഷ്യർ അവരുടെ ലോകത്തെ എങ്ങനെ മനസ്സിലാക്കാൻ ശ്രമിച്ചുവെന്ന് ചരിത്രത്തിലേക്ക് തിരിച്ചു പോകുക. ജീവജാലങ്ങളുടെ ടാക്സോണോമി സൃഷ്ടിക്കാൻ Linnaeus നടത്തിയ പ്രവർത്തനം പരിശോധിക്കുക, രാസഘടകങ്ങളെ വിവരണവും ഗ്രൂപ്പുചെയ്യലും ചെയ്യാൻ Dmitri Mendeleev എങ്ങനെ മാർഗ്ഗം കണ്ടെത്തി എന്ന് കാണുക. മറ്റേതെങ്കിലും രസകരമായ ഉദാഹരണങ്ങൾ നിങ്ങൾക്ക് കണ്ടെത്താമോ?
|
||||
|
||||
**അസൈൻമെന്റ്**: [ഒരു ഓന്റോളജി നിർമ്മിക്കുക](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാപത്രം**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ വ്യാഖ്യാനക്കേടുകൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "7d097f7fda9166ead615e4c34552381b",
|
||||
"translation_date": "2025-11-25T21:01:12+00:00",
|
||||
"source_file": "lessons/2-Symbolic/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# അറിവ് പ്രതിനിധാനം ചെയ്യലും വിദഗ്ധ സിസ്റ്റങ്ങളും
|
||||
|
||||

|
||||
|
||||
> സ്കെച്ച്നോട്ട്: [Tomomi Imura](https://twitter.com/girlie_mac)
|
||||
|
||||
കൃത്രിമ ബുദ്ധിമുട്ടിന്റെ തിരച്ചിൽ മനുഷ്യർ പോലെ ലോകത്തെ മനസ്സിലാക്കാനുള്ള അറിവ് കണ്ടെത്തലിലാണ്. എന്നാൽ ഇത് എങ്ങനെ ചെയ്യാം?
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/3)
|
||||
|
||||
AIയുടെ ആദ്യകാലങ്ങളിൽ, ബുദ്ധിമുട്ടുള്ള സിസ്റ്റങ്ങൾ സൃഷ്ടിക്കുന്നതിന് മുകളിൽ നിന്ന് താഴേക്ക് സമീപനം (മുൻപത്തെ പാഠത്തിൽ ചർച്ച ചെയ്തത്) പ്രചാരത്തിലായിരുന്നു. ആളുകളിൽ നിന്നുള്ള അറിവ് യന്ത്രം വായിക്കാൻ കഴിയുന്ന രൂപത്തിലേക്ക് മാറ്റി, അത് ഉപയോഗിച്ച് പ്രശ്നങ്ങൾ സ്വയം പരിഹരിക്കാമെന്ന് കരുതിയിരുന്നു. ഈ സമീപനം രണ്ട് വലിയ ആശയങ്ങളിലായിരുന്നു അടിസ്ഥാനമാക്കിയിരിക്കുന്നത്:
|
||||
|
||||
* അറിവ് പ്രതിനിധാനം
|
||||
* തർക്കം (റീസണിംഗ്)
|
||||
|
||||
## അറിവ് പ്രതിനിധാനം
|
||||
|
||||
സിംബോളിക് AIയിൽ പ്രധാന ആശയങ്ങളിൽ ഒന്നാണ് **അറിവ്**. അറിവും *വിവരവും* അല്ലെങ്കിൽ *ഡാറ്റയും* തമ്മിൽ വ്യത്യാസം മനസ്സിലാക്കുന്നത് പ്രധാനമാണ്. ഉദാഹരണത്തിന്, പുസ്തകങ്ങളിൽ അറിവുണ്ടെന്ന് പറയാം, കാരണം പുസ്തകങ്ങൾ പഠിച്ച് വിദഗ്ധനാകാം. എന്നാൽ പുസ്തകങ്ങളിൽ ഉള്ളത് യഥാർത്ഥത്തിൽ *ഡാറ്റ* ആണ്, പുസ്തകങ്ങൾ വായിച്ച് ഈ ഡാറ്റ നമ്മുടെ ലോക മോഡലിൽ ചേർത്താൽ അത് അറിവായി മാറും.
|
||||
|
||||
> ✅ **അറിവ്** എന്നത് നമ്മുടെ തലയിൽ ഉള്ളതും ലോകത്തെ മനസ്സിലാക്കലിന്റെ പ്രതിനിധാനവുമാണ്. ഇത് ഒരു സജീവമായ **പഠന** പ്രക്രിയയിലൂടെ ലഭിക്കുന്നു, നമ്മൾ സ്വീകരിക്കുന്ന വിവരങ്ങൾ നമ്മുടെ സജീവ ലോക മോഡലിൽ ചേർക്കുന്നു.
|
||||
|
||||
അറിവ് കൃത്യമായി നിർവചിക്കാറില്ല, പക്ഷേ [DIKW പിരമിഡ്](https://en.wikipedia.org/wiki/DIKW_pyramid) ഉപയോഗിച്ച് ബന്ധപ്പെട്ട ആശയങ്ങളുമായി പൊരുത്തപ്പെടുത്തുന്നു. ഇതിൽ ഉൾപ്പെടുന്ന ആശയങ്ങൾ:
|
||||
|
||||
* **ഡാറ്റ**: എഴുതിയ എഴുത്തോ സംസാരിച്ച വാക്കുകളോ പോലുള്ള ഭൗതിക മാധ്യമങ്ങളിൽ പ്രതിനിധാനം ചെയ്യപ്പെടുന്ന ഒന്നാണ്. ഡാറ്റ മനുഷ്യരിൽ സ്വതന്ത്രമായി നിലനിൽക്കുന്നു, ആളുകൾക്കിടയിൽ കൈമാറാം.
|
||||
* **വിവരം**: ഡാറ്റയെ നമ്മുടെ തലയിൽ എങ്ങനെ വ്യാഖ്യാനിക്കുന്നു എന്നതാണ്. ഉദാഹരണത്തിന്, *കമ്പ്യൂട്ടർ* എന്ന വാക്ക് കേട്ടാൽ അതിന്റെ അർത്ഥം മനസ്സിലാക്കുന്നു.
|
||||
* **അറിവ്**: വിവരങ്ങൾ നമ്മുടെ ലോക മോഡലിൽ ചേർക്കപ്പെടുന്നത്. ഉദാഹരണത്തിന്, കമ്പ്യൂട്ടർ എന്താണെന്ന് പഠിച്ചാൽ, അത് എങ്ങനെ പ്രവർത്തിക്കുന്നു, വില എത്രയാണ്, എന്തിന് ഉപയോഗിക്കാം തുടങ്ങിയ ആശയങ്ങൾ ഉണ്ടാകുന്നു. ഈ ബന്ധമുള്ള ആശയങ്ങളുടെ ശൃംഖലയാണ് അറിവ്.
|
||||
* **ബുദ്ധി**: ലോകത്തെ മനസ്സിലാക്കലിന്റെ ഒരു ഉയർന്ന തലമാണ്, ഇത് *മെറ്റാ-അറിവ്* പ്രതിനിധാനം ചെയ്യുന്നു, ഉദാ: അറിവ് എപ്പോൾ എങ്ങനെ ഉപയോഗിക്കണം എന്ന ധാരണ.
|
||||
|
||||
<img src="../../../../translated_images/DIKW_Pyramid.94126f7d2bd8db5b.ml.png" width="30%"/>
|
||||
|
||||
*ചിത്രം [വിക്കിപീഡിയയിൽ നിന്ന്](https://commons.wikimedia.org/w/index.php?curid=37705247), Longlivetheux - സ്വന്തം കൃതി, CC BY-SA 4.0*
|
||||
|
||||
അതിനാൽ, **അറിവ് പ്രതിനിധാനം** എന്ന പ്രശ്നം കമ്പ്യൂട്ടറിനുള്ളിൽ അറിവ് ഡാറ്റ രൂപത്തിൽ പ്രതിനിധാനം ചെയ്ത് അത് സ്വയം ഉപയോഗിക്കാൻ കഴിയുന്ന വിധം കണ്ടെത്തലാണ്. ഇത് ഒരു സ്പെക്ട്രം ആയി കാണാം:
|
||||
|
||||

|
||||
|
||||
> ചിത്രം: [Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
* ഇടത്തുവശത്ത്, കമ്പ്യൂട്ടറുകൾക്ക് ഫലപ്രദമായി ഉപയോഗിക്കാവുന്ന വളരെ ലളിതമായ അറിവ് പ്രതിനിധാനങ്ങൾ ഉണ്ട്. ഏറ്റവും ലളിതമായത് ആൽഗോരിതമിക് ആണ്, അറിവ് കമ്പ്യൂട്ടർ പ്രോഗ്രാമായി പ്രതിനിധാനം ചെയ്യപ്പെടുന്നു. എന്നാൽ ഇത് ഏറ്റവും നല്ല മാർഗം അല്ല, കാരണം ഇത് ഫ്ലെക്സിബിൾ അല്ല. നമ്മുടെ തലയിൽ ഉള്ള അറിവ് പലപ്പോഴും ആൽഗോരിതമിക് അല്ല.
|
||||
* വലത്തുവശത്ത്, പ്രകൃതിദത്ത എഴുത്ത് പോലുള്ള പ്രതിനിധാനങ്ങൾ ഉണ്ട്. ഇത് ഏറ്റവും ശക്തമാണ്, പക്ഷേ സ്വയം തർക്കത്തിന് ഉപയോഗിക്കാനാകില്ല.
|
||||
|
||||
> ✅ ഒരു നിമിഷം ചിന്തിക്കുക, നിങ്ങൾ തലയിൽ അറിവ് എങ്ങനെ പ്രതിനിധാനം ചെയ്യുന്നു, അത് കുറിപ്പുകളായി മാറ്റുമ്പോൾ retention-നായി ഏത് ഫോർമാറ്റ് നിങ്ങൾക്ക് നല്ലതാണ്?
|
||||
|
||||
## കമ്പ്യൂട്ടർ അറിവ് പ്രതിനിധാനങ്ങൾ വർഗ്ഗീകരിക്കൽ
|
||||
|
||||
വിവിധ കമ്പ്യൂട്ടർ അറിവ് പ്രതിനിധാന രീതികൾ താഴെപ്പറയുന്ന വിഭാഗങ്ങളിലായി വേർതിരിക്കാം:
|
||||
|
||||
* **നെറ്റ്വർക്ക് പ്രതിനിധാനങ്ങൾ**: നമ്മുടെ തലയിൽ ബന്ധമുള്ള ആശയങ്ങളുടെ ഒരു നെറ്റ്വർക്ക് ഉണ്ടെന്നതിൽ അടിസ്ഥാനമാക്കിയുള്ളത്. അതേ നെറ്റ്വർക്ക് കമ്പ്യൂട്ടറിനുള്ളിൽ ഗ്രാഫ് രൂപത്തിൽ പുനരുണ്ടാക്കാം - ഇതാണ് **സെമാന്റിക് നെറ്റ്വർക്ക്**.
|
||||
|
||||
1. **ഓബ്ജക്റ്റ്-അട്രിബ്യൂട്ട്-വാല്യു ട്രിപ്പ്ലറ്റുകൾ** അല്ലെങ്കിൽ **അട്രിബ്യൂട്ട്-വാല്യു ജോഡികൾ**. ഒരു ഗ്രാഫ് കമ്പ്യൂട്ടറിനുള്ളിൽ നോഡുകളും എഡ്ജുകളും ഉള്ള പട്ടികയായി പ്രതിനിധാനം ചെയ്യാവുന്നതുകൊണ്ട്, സെമാന്റിക് നെറ്റ്വർക്ക് ട്രിപ്പ്ലറ്റുകളുടെ പട്ടികയായി പ്രതിനിധാനം ചെയ്യാം, അതിൽ ഓബ്ജക്റ്റുകൾ, ആട്രിബ്യൂട്ടുകൾ, മൂല്യങ്ങൾ ഉൾപ്പെടും. ഉദാഹരണത്തിന്, പ്രോഗ്രാമിംഗ് ഭാഷകളെക്കുറിച്ച് താഴെപ്പറയുന്ന ട്രിപ്പ്ലറ്റുകൾ ഉണ്ടാക്കാം:
|
||||
|
||||
Object | Attribute | Value
|
||||
-------|-----------|------
|
||||
Python | is | Untyped-Language
|
||||
Python | invented-by | Guido van Rossum
|
||||
Python | block-syntax | indentation
|
||||
Untyped-Language | doesn't have | type definitions
|
||||
|
||||
> ✅ ട്രിപ്പ്ലറ്റുകൾ മറ്റ് അറിവ് തരങ്ങൾ പ്രതിനിധാനം ചെയ്യാൻ എങ്ങനെ ഉപയോഗിക്കാമെന്ന് ചിന്തിക്കുക.
|
||||
|
||||
2. **ഹയർആർക്കിക്കൽ പ്രതിനിധാനങ്ങൾ**: നമ്മൾ തലയിൽ സാധാരണയായി ഒരു ഓബ്ജക്റ്റുകളുടെ ഹയർആർക്കി സൃഷ്ടിക്കുന്നതിൽ ഊന്നൽ നൽകുന്നു. ഉദാഹരണത്തിന്, കാനറി ഒരു പക്ഷിയാണ് എന്ന് അറിയാം, എല്ലാ പക്ഷികൾക്കും ചിറകുകൾ ഉണ്ടെന്ന് അറിയാം. കാനറിയുടെ നിറം സാധാരണയായി എന്താണെന്ന്, പറക്കാനുള്ള വേഗത എന്താണെന്ന് അറിയാം.
|
||||
|
||||
- **ഫ്രെയിം പ്രതിനിധാനം**: ഓരോ ഓബ്ജക്റ്റിനെയും അല്ലെങ്കിൽ ഓബ്ജക്റ്റുകളുടെ ക്ലാസിനെയും **ഫ്രെയിം** ആയി പ്രതിനിധാനം ചെയ്യുന്നു, അതിൽ **സ്ലോട്ടുകൾ** ഉണ്ട്. സ്ലോട്ടുകൾക്ക് സാധാരണ മൂല്യങ്ങൾ, മൂല്യ നിയന്ത്രണങ്ങൾ, അല്ലെങ്കിൽ മൂല്യം ലഭിക്കാൻ വിളിക്കാവുന്ന പ്രോസീജറുകൾ ഉണ്ടാകാം. എല്ലാ ഫ്രെയിമുകളും ഒരു ഹയർആർക്കി രൂപത്തിൽ ഒറ്റപ്പെട്ടിരിക്കുന്നു, ഒബ്ജക്റ്റ്-ഓറിയന്റഡ് പ്രോഗ്രാമിംഗ് ഭാഷകളിലെ ഓബ്ജക്റ്റ് ഹയർആർക്കിയെപ്പോലെ.
|
||||
- **സിനാരിയോകൾ**: സമയക്രമത്തിൽ വികസിക്കാവുന്ന സങ്കീർണ്ണ സാഹചര്യങ്ങൾ പ്രതിനിധാനം ചെയ്യുന്ന പ്രത്യേക തരത്തിലുള്ള ഫ്രെയിമുകൾ.
|
||||
|
||||
**Python**
|
||||
|
||||
Slot | Value | Default value | Interval |
|
||||
-----|-------|---------------|----------|
|
||||
Name | Python | | |
|
||||
Is-A | Untyped-Language | | |
|
||||
Variable Case | | CamelCase | |
|
||||
Program Length | | | 5-5000 lines |
|
||||
Block Syntax | Indent | | |
|
||||
|
||||
3. **പ്രൊസീജറൽ പ്രതിനിധാനങ്ങൾ**: ഒരു നിബന്ധന സംഭവിക്കുമ്പോൾ നടപ്പിലാക്കാവുന്ന പ്രവർത്തനങ്ങളുടെ പട്ടികയായി അറിവ് പ്രതിനിധാനം ചെയ്യുന്നു.
|
||||
- പ്രൊഡക്ഷൻ റൂൾസ് if-then പ്രസ്താവനകളാണ്, നമുക്ക് നിഗമനങ്ങൾ വരുത്താൻ സഹായിക്കുന്നു. ഉദാഹരണത്തിന്, ഒരു ഡോക്ടർക്ക് ഒരു നിയമം ഉണ്ടാകാം: **IF** രോഗിക്ക് ഉയർന്ന പനി **OR** രക്തപരിശോധനയിൽ C-റിയാക്ടീവ് പ്രോട്ടീൻ ഉയർന്നാൽ **THEN** അവന് അണുബാധയുണ്ട്. നിബന്ധനകളിൽ ഒന്നും കണ്ടാൽ, അണുബാധയെക്കുറിച്ച് നിഗമനം വരുത്താം, പിന്നീട് അത് തർക്കത്തിൽ ഉപയോഗിക്കാം.
|
||||
- ആൽഗോരിതങ്ങൾ മറ്റൊരു പ്രൊസീജറൽ പ്രതിനിധാന രൂപമാണ്, പക്ഷേ അറിവ് അടിസ്ഥാനമാക്കിയ സിസ്റ്റങ്ങളിൽ നേരിട്ട് ഉപയോഗിക്കാറില്ല.
|
||||
|
||||
4. **ലോജിക്**: ആദ്യം അറിസ്റ്റോട്ടിൽസ് മനുഷ്യരുടെ സർവത്ര അറിവ് പ്രതിനിധാനം ചെയ്യാനുള്ള മാർഗമായി നിർദ്ദേശിച്ചു.
|
||||
- പ്രെഡിക്കേറ്റ് ലോജിക് ഗണിത ശാസ്ത്ര സിദ്ധാന്തമായി വളരെ സമ്പന്നമാണ്, അതിനാൽ സാധാരണയായി പ്രൊലോഗിൽ ഉപയോഗിക്കുന്ന ഹോൺ ക്ലോസുകൾ പോലുള്ള ഒരു ഉപസമൂഹം ഉപയോഗിക്കുന്നു.
|
||||
- ഡിസ്ക്രിപ്റ്റീവ് ലോജിക് ഒരു ലോജിക്കൽ സിസ്റ്റങ്ങളുടെ കുടുംബമാണ്, ഇത് ഓബ്ജക്റ്റുകളുടെ ഹയർആർക്കി പ്രതിനിധാനം ചെയ്യാനും reasoning ചെയ്യാനും ഉപയോഗിക്കുന്നു, സെമാന്റിക് വെബ് പോലുള്ള വിതരണ അറിവ് പ്രതിനിധാനങ്ങൾക്കായി.
|
||||
|
||||
## വിദഗ്ധ സിസ്റ്റങ്ങൾ
|
||||
|
||||
സിംബോളിക് AIയുടെ ആദ്യ വിജയങ്ങളിൽ ഒന്നായിരുന്നു **വിദഗ്ധ സിസ്റ്റങ്ങൾ** - ചില പരിമിത പ്രശ്ന മേഖലകളിൽ വിദഗ്ധനായി പ്രവർത്തിക്കാൻ രൂപകൽപ്പന ചെയ്ത കമ്പ്യൂട്ടർ സിസ്റ്റങ്ങൾ. ഇവ മനുഷ്യ വിദഗ്ധരിൽ നിന്നുള്ള **അറിവ് ബേസ്** ഉപയോഗിച്ച് നിർമ്മിക്കപ്പെട്ടിരുന്നു, അതിന്മേൽ പ്രവർത്തിക്കുന്ന **ഇൻഫറൻസ് എഞ്ചിൻ** ഉണ്ടായിരുന്നു.
|
||||
|
||||
 | 
|
||||
---------------------------------------------|------------------------------------------------
|
||||
മനുഷ്യ നാഡീകുഴപ്പത്തിന്റെ ലളിതമായ ഘടന | അറിവ് അടിസ്ഥാനമാക്കിയ സിസ്റ്റത്തിന്റെ ഘടന
|
||||
|
||||
വിദഗ്ധ സിസ്റ്റങ്ങൾ മനുഷ്യന്റെ തർക്ക സംവിധാനത്തെപ്പോലെ നിർമ്മിച്ചിരിക്കുന്നു, അതിൽ **ഷോർട്ട്-ടേം മെമ്മറി**യും **ലോങ്-ടേം മെമ്മറി**യും ഉണ്ട്. അതുപോലെ, അറിവ് അടിസ്ഥാനമാക്കിയ സിസ്റ്റങ്ങളിൽ താഴെപ്പറയുന്ന ഘടകങ്ങൾ വേർതിരിക്കാം:
|
||||
|
||||
* **പ്രശ്ന മെമ്മറി**: ഇപ്പോൾ പരിഹരിക്കപ്പെടുന്ന പ്രശ്നത്തെക്കുറിച്ചുള്ള അറിവ് അടങ്ങിയിരിക്കുന്നു, ഉദാ: രോഗിയുടെ താപനില, രക്തസമ്മർദ്ദം, അണുബാധയുണ്ടോ എന്നത്. ഈ അറിവ് **സ്ഥിര അറിവ്** എന്നും വിളിക്കുന്നു, കാരണം ഇത് പ്രശ്നത്തെക്കുറിച്ചുള്ള ഒരു സ്നാപ്ഷോട്ട് ആണ് - *പ്രശ്നാവസ്ഥ*.
|
||||
* **അറിവ് ബേസ്**: പ്രശ്ന മേഖലയിൽ ദീർഘകാല അറിവ് പ്രതിനിധാനം ചെയ്യുന്നു. മനുഷ്യ വിദഗ്ധരിൽ നിന്നു കൈമാറിയതാണ്, കൂടാതെ ഇത് കൺസൾട്ടേഷനുകൾക്കിടയിൽ മാറാറില്ല. ഇത് പ്രശ്നാവസ്ഥകളിൽ നിന്ന് മറ്റൊന്നിലേക്ക് നാവിഗേറ്റ് ചെയ്യാൻ സഹായിക്കുന്നതിനാൽ **ഡൈനാമിക് അറിവ്** എന്നും വിളിക്കുന്നു.
|
||||
* **ഇൻഫറൻസ് എഞ്ചിൻ**: പ്രശ്നാവസ്ഥാ സ്പേസിൽ തിരച്ചിൽ നടത്തുന്നതും, ആവശ്യമായപ്പോൾ ഉപയോക്താവിനോട് ചോദ്യങ്ങൾ ചോദിക്കുന്നതും, ഓരോ അവസ്ഥയ്ക്കും അനുയോജ്യമായ നിയമങ്ങൾ കണ്ടെത്തുന്നതും നിയന്ത്രിക്കുന്നു.
|
||||
|
||||
ഉദാഹരണമായി, ഒരു ജീവിയെ അതിന്റെ ശാരീരിക സവിശേഷതകളുടെ അടിസ്ഥാനത്തിൽ തിരിച്ചറിയുന്ന വിദഗ്ധ സിസ്റ്റം പരിഗണിക്കാം:
|
||||
|
||||

|
||||
|
||||
> ചിത്രം: [Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
ഈ ചിത്രത്തെ **AND-OR ട്രീ** എന്ന് വിളിക്കുന്നു, ഇത് പ്രൊഡക്ഷൻ റൂളുകളുടെ ഗ്രാഫിക്കൽ പ്രതിനിധാനമാണ്. വിദഗ്ധരിൽ നിന്നുള്ള അറിവ് എടുക്കുമ്പോൾ ട്രീ വരയ്ക്കുന്നത് സഹായകരമാണ്. കമ്പ്യൂട്ടറിനുള്ളിൽ അറിവ് പ്രതിനിധാനം ചെയ്യാൻ നിയമങ്ങൾ ഉപയോഗിക്കുന്നത് കൂടുതൽ സൗകര്യപ്രദമാണ്:
|
||||
|
||||
```
|
||||
IF the animal eats meat
|
||||
OR (animal has sharp teeth
|
||||
AND animal has claws
|
||||
AND animal has forward-looking eyes
|
||||
)
|
||||
THEN the animal is a carnivore
|
||||
```
|
||||
|
||||
നിങ്ങൾ ശ്രദ്ധിക്കാം, നിയമത്തിന്റെ ഇടത് ഭാഗത്തുള്ള ഓരോ നിബന്ധനയും പ്രവർത്തനവും അടിസ്ഥാനപരമായി ഓബ്ജക്റ്റ്-അട്രിബ്യൂട്ട്-വാല്യു (OAV) ട്രിപ്പ്ലറ്റുകളാണ്. **വർക്കിംഗ് മെമ്മറി** നിലവിൽ പരിഹരിക്കപ്പെടുന്ന പ്രശ്നവുമായി ബന്ധപ്പെട്ട OAV ട്രിപ്പ്ലറ്റുകളുടെ സമാഹാരമാണ്. **റൂൾസ് എഞ്ചിൻ** നിലവിലുള്ള നിബന്ധനകൾ പൂരിപ്പിക്കുന്ന നിയമങ്ങൾ കണ്ടെത്തി അവ പ്രയോഗിച്ച് വർക്കിംഗ് മെമ്മറിയിൽ പുതിയ ട്രിപ്പ്ലറ്റുകൾ ചേർക്കുന്നു.
|
||||
|
||||
> ✅ നിങ്ങൾ ഇഷ്ടപ്പെടുന്ന വിഷയത്തിൽ നിങ്ങളുടെ സ്വന്തം AND-OR ട്രീ എഴുതുക!
|
||||
|
||||
### ഫോർവേഡ് vs. ബാക്ക്വേഡ് ഇൻഫറൻസ്
|
||||
|
||||
മുകളിൽ വിവരിച്ച പ്രക്രിയ **ഫോർവേഡ് ഇൻഫറൻസ്** എന്നാണ് വിളിക്കുന്നത്. ഇത് വർക്കിംഗ് മെമ്മറിയിൽ ലഭ്യമായ പ്രാരംഭ ഡാറ്റയിൽ നിന്ന് ആരംഭിച്ച് താഴെപ്പറയുന്ന തർക്ക ലൂപ്പ് നടപ്പിലാക്കുന്നു:
|
||||
|
||||
1. ലക്ഷ്യ ആട്രിബ്യൂട്ട് വർക്കിംഗ് മെമ്മറിയിൽ ഉണ്ടെങ്കിൽ - നിർത്തുക, ഫലം നൽകുക
|
||||
2. നിലവിൽ പൂരിപ്പിച്ചിരിക്കുന്ന നിബന്ധനകൾ ഉള്ള എല്ലാ നിയമങ്ങളും കണ്ടെത്തുക - **കോൺഫ്ലിക്റ്റ് സെറ്റ്** ലഭിക്കുക
|
||||
3. **കോൺഫ്ലിക്റ്റ് റെസല്യൂഷൻ** നടത്തുക - ഈ ഘട്ടത്തിൽ നടപ്പിലാക്കാനുള്ള ഒരു നിയമം തിരഞ്ഞെടുക്കുക. വിവിധ കോൺഫ്ലിക്റ്റ് റെസല്യൂഷൻ തന്ത്രങ്ങൾ ഉണ്ടാകാം:
|
||||
- അറിവ് ബേസിലെ ആദ്യ പ്രയോഗയോഗ്യമായ നിയമം തിരഞ്ഞെടുക്കുക
|
||||
- യാദൃച്ഛിക നിയമം തിരഞ്ഞെടുക്കുക
|
||||
- *കൂടുതൽ പ്രത്യേകമായ* നിയമം തിരഞ്ഞെടുക്കുക, അഥവാ LHS-ൽ ഏറ്റവും കൂടുതൽ നിബന്ധനകൾ പൂരിപ്പിക്കുന്ന നിയമം
|
||||
4. തിരഞ്ഞെടുക്കപ്പെട്ട നിയമം പ്രയോഗിച്ച് പ്രശ്നാവസ്ഥയിൽ പുതിയ അറിവ് ചേർക്കുക
|
||||
5. പടിയിലേയ്ക്ക് മടങ്ങി 1-ാം പടി ആവർത്തിക്കുക
|
||||
|
||||
എങ്കിലും, ചില സാഹചര്യങ്ങളിൽ പ്രശ്നത്തെക്കുറിച്ചുള്ള അറിവ് ശൂന്യമായിരിക്കാം, നാം ചോദ്യങ്ങൾ ചോദിച്ച് നിഗമനത്തിലേക്ക് എത്താൻ ആഗ്രഹിക്കാം. ഉദാഹരണത്തിന്, മെഡിക്കൽ ഡയഗ്നോസിസിൽ, രോഗിയെ പരിശോധിക്കുന്നതിന് മുമ്പ് എല്ലാ പരിശോധനകളും നടത്താറില്ല. തീരുമാനമെടുക്കേണ്ടപ്പോൾ മാത്രമേ പരിശോധനകൾ നടത്തൂ.
|
||||
|
||||
ഈ പ്രക്രിയ **ബാക്ക്വേഡ് ഇൻഫറൻസ്** ഉപയോഗിച്ച് മോഡൽ ചെയ്യാം. ഇത് **ലക്ഷ്യം** (goal) - കണ്ടെത്തേണ്ട ആട്രിബ്യൂട്ട് മൂല്യം - നയിക്കുന്നു:
|
||||
|
||||
1. ലക്ഷ്യത്തിന്റെ മൂല്യം നൽകുന്ന എല്ലാ നിയമങ്ങളും തിരഞ്ഞെടുക്കുക (RHS-ൽ ലക്ഷ്യം ഉള്ളവ) - കോൺഫ്ലിക്റ്റ് സെറ്റ്
|
||||
2. ആ ആട്രിബ്യൂട്ടിനുള്ള നിയമങ്ങൾ ഇല്ലെങ്കിൽ, അല്ലെങ്കിൽ ഉപയോക്താവിൽ നിന്ന് മൂല്യം ചോദിക്കണമെന്ന് നിയമം ഉണ്ടെങ്കിൽ - ചോദിക്കുക, അല്ലെങ്കിൽ:
|
||||
3. കോൺഫ്ലിക്റ്റ് റെസല്യൂഷൻ തന്ത്രം ഉപയോഗിച്ച് ഒരു നിയമം *ഹൈപ്പോത്തസിസ്* ആയി തിരഞ്ഞെടുക്കുക - അത് തെളിയിക്കാൻ ശ്രമിക്കും
|
||||
4. നിയമത്തിന്റെ LHS-ൽ ഉള്ള എല്ലാ ആട്രിബ്യൂട്ടുകൾക്കും ഈ പ്രക്രിയ ആവർത്തിച്ച് അവ ലക്ഷ്യങ്ങളായി തെളിയിക്കാൻ ശ്രമിക്കുക
|
||||
5. പ്രക്രിയ ഏതെങ്കിലും ഘട്ടത്തിൽ പരാജയപ്പെട്ടാൽ - 3-ാം പടിയിൽ മറ്റൊരു നിയമം ഉപയോഗിക്കുക
|
||||
|
||||
> ✅ ഏത് സാഹചര്യങ്ങളിൽ ഫോർവേഡ് ഇൻഫറൻസ് കൂടുതൽ അനുയോജ്യമാണ്? ബാക്ക്വേഡ് ഇൻഫറൻസ് എപ്പോൾ ഉപയോഗിക്കണം?
|
||||
|
||||
### വിദഗ്ധ സിസ്റ്റങ്ങൾ നടപ്പിലാക്കൽ
|
||||
|
||||
വിദഗ്ധ സിസ്റ്റങ്ങൾ വിവിധ ഉപകരണങ്ങൾ ഉപയോഗിച്ച് നടപ്പിലാക്കാം:
|
||||
|
||||
* ഉയർന്ന തലത്തിലുള്ള പ്രോഗ്രാമിംഗ് ഭാഷയിൽ നേരിട്ട് പ്രോഗ്രാം ചെയ്യുക. ഇത് നല്ല ആശയം അല്ല, കാരണം അറിവ് അടിസ്ഥാനമാക്കിയ സിസ്റ്റത്തിന്റെ പ്രധാന ഗുണം അറിവും ഇൻഫറൻസും വേർതിരിച്ചിരിക്കുന്നു എന്നതാണ്, പ്രശ്ന മേഖല വിദഗ്ധൻ ഇൻഫറൻസ് പ്രക്രിയയുടെ വിശദാംശങ്ങൾ അറിയാതെ നിയമങ്ങൾ എഴുതാൻ കഴിയണം.
|
||||
* **വിദഗ്ധ സിസ്റ്റം ഷെൽ** ഉപയോഗിക്കുക, അതായത് അറിവ് പ്രതിനിധാന ഭാഷ ഉപയോഗിച്ച് അറിവ് ചേർക്കാൻ രൂപകൽപ്പന ചെയ്ത സിസ്റ്റം.
|
||||
|
||||
## ✍️ അഭ്യാസം: ജീവി ഇൻഫറൻസ്
|
||||
|
||||
ഫോർവേഡ്, ബാക്ക്വേഡ് ഇൻഫറൻസ് വിദഗ്ധ സിസ്റ്റം നടപ്പിലാക്കാനുള്ള ഉദാഹരണത്തിന് [Animals.ipynb](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb) കാണുക.
|
||||
|
||||
> **കുറിപ്പ്**: ഈ ഉദാഹരണം വളരെ ലളിതമാണ്, വിദഗ്ധ സിസ്റ്റ് എങ്ങനെ കാണപ്പെടുന്നു എന്ന ആശയം നൽകുന്നു. നിങ്ങൾ ഇത്തരമൊരു സിസ്റ്റം സൃഷ്ടിക്കുമ്പോൾ, ഏകദേശം 200+ നിയമങ്ങൾ എത്തുമ്പോഴാണ് അതിൽ നിന്നുള്ള *ബുദ്ധിമുട്ടുള്ള* പെരുമാറ്റം ശ്രദ്ധിക്കാനാകുക. ചിലപ്പോൾ നിയമങ്ങൾ വളരെ സങ്കീർണ്ണമാകുന്നു, എല്ലാം മനസ്സിലാക്കാൻ ബുദ്ധിമുട്ട് ഉണ്ടാക
|
||||
- അറിവ് വിവരണത്തിനായി XML അടിസ്ഥാനമാക്കിയുള്ള ഭാഷകളുടെ ഒരു കുടുംബം: RDF (Resource Description Framework), RDFS (RDF Schema), OWL (Ontology Web Language).
|
||||
|
||||
സെമാന്റിക് വെബിലെ ഒരു പ്രധാന ആശയം **ഓന്റോളജി** എന്ന ആശയമാണ്. ഇത് ഒരു പ്രശ്ന മേഖലയെ ഔപചാരികമായ അറിവ് പ്രതിനിധാനം ഉപയോഗിച്ച് വ്യക്തമായി നിർവചിക്കുന്നതിനെ സൂചിപ്പിക്കുന്നു. ഏറ്റവും ലളിതമായ ഓന്റോളജി പ്രശ്ന മേഖലയിലെ വസ്തുക്കളുടെ ഒരു ഹയർആർക്കിയാകാം, എന്നാൽ കൂടുതൽ സങ്കീർണ്ണമായ ഓന്റോളജികൾ നിഗമനത്തിന് ഉപയോഗിക്കാവുന്ന നിയമങ്ങളും ഉൾക്കൊള്ളും.
|
||||
|
||||
സെമാന്റിക് വെബിൽ എല്ലാ പ്രതിനിധാനങ്ങളും ട്രിപ്പിളുകളിലാണ് അടിസ്ഥാനമാക്കുന്നത്. ഓരോ വസ്തുവും ഓരോ ബന്ധവും യുണീക്ക് ആയി URI ഉപയോഗിച്ച് തിരിച്ചറിയപ്പെടുന്നു. ഉദാഹരണത്തിന്, ഈ AI പാഠ്യപദ്ധതി 2022 ജനുവരി 1-ന് Dmitry Soshnikov വികസിപ്പിച്ചുവെന്ന് പറയാൻ താഴെ കാണുന്ന ട്രിപ്പിളുകൾ ഉപയോഗിക്കാം:
|
||||
|
||||
<img src="../../../../translated_images/triplet.4b9b332587593298.ml.png" width="30%"/>
|
||||
|
||||
```
|
||||
http://github.com/microsoft/ai-for-beginners http://www.example.com/terms/creation-date “Jan 13, 2007”
|
||||
http://github.com/microsoft/ai-for-beginners http://purl.org/dc/elements/1.1/creator http://soshnikov.com
|
||||
```
|
||||
|
||||
> ✅ ഇവിടെ `http://www.example.com/terms/creation-date` ഉം `http://purl.org/dc/elements/1.1/creator` ഉം *creator* (സൃഷ്ടാവ്) ഉം *creation date* (സൃഷ്ടി തീയതി) ഉം സൂചിപ്പിക്കാൻ ഉപയോഗിക്കുന്ന പ്രശസ്തവും സർവത്ര അംഗീകരിക്കപ്പെട്ട URI കളാണ്.
|
||||
|
||||
കൂടുതൽ സങ്കീർണ്ണമായ സാഹചര്യത്തിൽ, സൃഷ്ടാക്കളുടെ പട്ടിക നിർവചിക്കാൻ RDF ൽ നിർവചിച്ചിട്ടുള്ള ചില ഡാറ്റാ ഘടനകൾ ഉപയോഗിക്കാം.
|
||||
|
||||
<img src="../../../../translated_images/triplet-complex.32094972c7b4441b.ml.png" width="40%"/>
|
||||
|
||||
> മുകളിൽ കാണുന്ന ചിത്രങ്ങൾ [Dmitry Soshnikov](http://soshnikov.com) യുടെതാണ്
|
||||
|
||||
സെമാന്റിക് വെബ് നിർമ്മാണം ചിലപ്പോൾ സെർച്ച് എഞ്ചിനുകളും സ്വാഭാവിക ഭാഷാ പ്രോസസ്സിംഗ് സാങ്കേതികവിദ്യകളും വിജയിച്ചതുകൊണ്ട് മന്ദഗതിയിലായി, അവ ടെക്സ്റ്റിൽ നിന്ന് ഘടനാപരമായ ഡാറ്റ എടുക്കാൻ സഹായിക്കുന്നു. എങ്കിലും ചില മേഖലകളിൽ ഓന്റോളജികളും അറിവ് അടിസ്ഥാനങ്ങളും പരിപാലിക്കാൻ വലിയ ശ്രമങ്ങൾ തുടരുന്നു. ശ്രദ്ധിക്കാവുന്ന ചില പ്രോജക്ടുകൾ:
|
||||
|
||||
* [WikiData](https://wikidata.org/) വിക്കിപീഡിയയുമായി ബന്ധപ്പെട്ട യന്ത്രം വായിക്കാൻ കഴിയുന്ന അറിവ് അടിസ്ഥാനങ്ങളുടെ ഒരു ശേഖരമാണ്. ഡാറ്റയുടെ ഭൂരിഭാഗവും വിക്കിപീഡിയയിലെ *InfoBoxes* എന്ന ഘടനാപരമായ ഉള്ളടക്കത്തിൽ നിന്നാണ് ശേഖരിക്കുന്നത്. നിങ്ങൾക്ക് SPARQL എന്ന സെമാന്റിക് വെബിനുള്ള പ്രത്യേക ക്വറി ഭാഷയിൽ [ക്വറി](https://query.wikidata.org/) ചെയ്യാം. മനുഷ്യരിൽ ഏറ്റവും ജനപ്രിയമായ കണ്ണിന്റെ നിറങ്ങൾ കാണിക്കുന്ന ഒരു ഉദാഹരണ ക്വറി ഇതാ:
|
||||
|
||||
```sparql
|
||||
#defaultView:BubbleChart
|
||||
SELECT ?eyeColorLabel (COUNT(?human) AS ?count)
|
||||
WHERE
|
||||
{
|
||||
?human wdt:P31 wd:Q5. # human instance-of homo sapiens
|
||||
?human wdt:P1340 ?eyeColor. # human eye-color ?eyeColor
|
||||
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
|
||||
}
|
||||
GROUP BY ?eyeColorLabel
|
||||
```
|
||||
|
||||
* [DBpedia](https://www.dbpedia.org/) WikiData പോലെയുള്ള മറ്റൊരു ശ്രമമാണ്.
|
||||
|
||||
> ✅ നിങ്ങളുടെ സ്വന്തം ഓന്റോളജികൾ നിർമ്മിക്കാൻ, അല്ലെങ്കിൽ നിലവിലുള്ളവ തുറക്കാൻ ആഗ്രഹിക്കുന്നുവെങ്കിൽ, [Protégé](https://protege.stanford.edu/) എന്ന മികച്ച ദൃശ്യ ഓന്റോളജി എഡിറ്റർ ഉണ്ട്. ഡൗൺലോഡ് ചെയ്യുക അല്ലെങ്കിൽ ഓൺലൈനിൽ ഉപയോഗിക്കുക.
|
||||
|
||||
<img src="../../../../translated_images/protege.274177ceeac13b38.ml.png" width="70%"/>
|
||||
|
||||
*Web Protégé എഡിറ്റർ റോമാനോവ് കുടുംബ ഓന്റോളജിയുമായി തുറന്നിരിക്കുന്ന ചിത്രം. Dmitry Soshnikov യുടെ സ്ക്രീൻഷോട്ട്*
|
||||
|
||||
## ✍️ അഭ്യാസം: ഒരു കുടുംബ ഓന്റോളജി
|
||||
|
||||
കുടുംബ ബന്ധങ്ങളെക്കുറിച്ച് നിഗമനം നടത്താൻ സെമാന്റിക് വെബ് സാങ്കേതികവിദ്യകൾ ഉപയോഗിക്കുന്ന ഒരു ഉദാഹരണത്തിന് [FamilyOntology.ipynb](https://github.com/Ezana135/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb) കാണുക. സാധാരണ GEDCOM ഫോർമാറ്റിൽ പ്രതിനിധാനം ചെയ്ത ഒരു കുടുംബ വൃക്ഷവും കുടുംബ ബന്ധങ്ങളുടെ ഓന്റോളജിയും എടുത്ത് നൽകിയ വ്യക്തികളുടെ കുടുംബ ബന്ധങ്ങളുടെ ഗ്രാഫ് നിർമ്മിക്കും.
|
||||
|
||||
## Microsoft Concept Graph
|
||||
|
||||
പലപ്പോഴും ഓന്റോളജികൾ ശ്രദ്ധാപൂർവ്വം കൈയാൽ സൃഷ്ടിക്കപ്പെടുന്നു. എന്നാൽ, സ്വാഭാവിക ഭാഷാ ടെക്സ്റ്റുകളിൽ നിന്ന് പോലുള്ള അസംഘടിത ഡാറ്റയിൽ നിന്ന് ഓന്റോളജികൾ **മൈനിംഗ്** ചെയ്യാനും സാധിക്കും.
|
||||
|
||||
ഇത്തരം ഒരു ശ്രമം Microsoft Research നടത്തിയതാണ്, ഫലമായി [Microsoft Concept Graph](https://blogs.microsoft.com/ai/microsoft-researchers-release-graph-that-helps-machines-conceptualize/?WT.mc_id=academic-77998-cacaste) ലഭിച്ചു.
|
||||
|
||||
ഇത് `is-a` പാരമ്പര്യ ബന്ധം ഉപയോഗിച്ച് കൂട്ടിച്ചേർത്ത വലിയ എന്റിറ്റി ശേഖരമാണ്. "Microsoft എന്താണ്?" എന്ന ചോദ്യത്തിന് "ഒരു കമ്പനി 0.87 സാധ്യതയോടെ, ഒരു ബ്രാൻഡ് 0.75 സാധ്യതയോടെ" എന്നിങ്ങനെ ഉത്തരം നൽകാൻ ഇത് സഹായിക്കുന്നു.
|
||||
|
||||
ഗ്രാഫ് REST API ആയി ലഭ്യമാണ്, അല്ലെങ്കിൽ എല്ലാ എന്റിറ്റി ജോഡികളും പട്ടികപ്പെടുത്തിയ വലിയ ഡൗൺലോഡുചെയ്യാവുന്ന ടെക്സ്റ്റ് ഫയലായി ലഭ്യമാണ്.
|
||||
|
||||
## ✍️ അഭ്യാസം: ഒരു കോൺസെപ്റ്റ് ഗ്രാഫ്
|
||||
|
||||
Microsoft Concept Graph ഉപയോഗിച്ച് വാർത്താ ലേഖനങ്ങളെ വിവിധ വിഭാഗങ്ങളായി ഗ്രൂപ്പുചെയ്യുന്നത് എങ്ങനെ ചെയ്യാമെന്ന് കാണാൻ [MSConceptGraph.ipynb](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/MSConceptGraph.ipynb) നോട്ട്ബുക്ക് പരീക്ഷിക്കുക.
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ഇന്നത്തെ കാലത്ത്, AI യെ സാധാരണയായി *Machine Learning* അല്ലെങ്കിൽ *Neural Networks* എന്നതിന്റെ സമാനാർത്ഥകമായി കാണുന്നു. എന്നാൽ മനുഷ്യൻ വ്യക്തമായ നിഗമനം പ്രകടിപ്പിക്കുന്നുണ്ട്, ഇത് ഇപ്പോൾ ന്യൂറൽ നെറ്റ്വർക്കുകൾ കൈകാര്യം ചെയ്യാത്ത ഒന്നാണ്. യഥാർത്ഥ ലോക പ്രോജക്ടുകളിൽ, വിശദമായ നിഗമനം വിശദീകരണങ്ങൾ ആവശ്യമായ, അല്ലെങ്കിൽ സിസ്റ്റത്തിന്റെ പെരുമാറ്റം നിയന്ത്രിതമായി മാറ്റേണ്ടതുള്ള പ്രവർത്തനങ്ങൾക്ക് ഇപ്പോഴും ഉപയോഗിക്കുന്നു.
|
||||
|
||||
## 🚀 വെല്ലുവിളി
|
||||
|
||||
ഈ പാഠവുമായി ബന്ധപ്പെട്ട കുടുംബ ഓന്റോളജി നോട്ട്ബുക്കിൽ, മറ്റ് കുടുംബ ബന്ധങ്ങളുമായി പരീക്ഷണം നടത്താനുള്ള അവസരം ഉണ്ട്. കുടുംബ വൃക്ഷത്തിലെ ആളുകൾക്കിടയിലെ പുതിയ ബന്ധങ്ങൾ കണ്ടെത്താൻ ശ്രമിക്കുക.
|
||||
|
||||
## [പാഠാനന്തര ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/4)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
മനുഷ്യർ അറിവ് അളക്കാനും കോഡിഫൈ ചെയ്യാനും ശ്രമിച്ച മേഖലകൾ കണ്ടെത്താൻ ഇന്റർനെറ്റിൽ കുറച്ച് ഗവേഷണം നടത്തുക. Bloom's Taxonomy നോക്കുക, മനുഷ്യർ അവരുടെ ലോകത്തെ എങ്ങനെ മനസ്സിലാക്കാൻ ശ്രമിച്ചുവെന്ന് ചരിത്രത്തിലേക്ക് തിരിച്ചു പോകുക. ജീവജാലങ്ങളുടെ ടാക്സോണോമി സൃഷ്ടിക്കാൻ Linnaeus നടത്തിയ പ്രവർത്തനം പരിശോധിക്കുക, രാസഘടകങ്ങളെ വിവരണവും ഗ്രൂപ്പുചെയ്യലും ചെയ്യാൻ Dmitri Mendeleev എങ്ങനെ മാർഗ്ഗം കണ്ടെത്തി എന്ന് കാണുക. മറ്റേതെങ്കിലും രസകരമായ ഉദാഹരണങ്ങൾ നിങ്ങൾക്ക് കണ്ടെത്താമോ?
|
||||
|
||||
**അസൈൻമെന്റ്**: [ഒരു ഓന്റോളജി നിർമ്മിക്കുക](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാപത്രം**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ വ്യാഖ്യാനക്കേടുകൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,108 +1,108 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "c34cbba802058b6fa267e1a294d4e510",
|
||||
"translation_date": "2025-11-25T21:36:59+00:00",
|
||||
"source_file": "lessons/3-NeuralNetworks/03-Perceptron/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ന്യൂറൽ നെറ്റ്വർക്കുകളിലേക്ക് പരിചയം: പേഴ്സെപ്ട്രോൺ
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/5)
|
||||
|
||||
ആധുനിക ന്യൂറൽ നെറ്റ്വർക്കിനോട് സാമ്യമുള്ള ഒന്നിനെ ആദ്യമായി നടപ്പിലാക്കാൻ ശ്രമിച്ചത് 1957-ൽ കോർണൽ എയറോണോട്ടിക്കൽ ലബോറട്ടറിയിലെ ഫ്രാങ്ക് റോസൻബ്ര്ലാറ്റ് ആണ്. ഇത് "മാർക്ക്-1" എന്ന ഹാർഡ്വെയർ രൂപത്തിൽ ഉണ്ടായിരുന്നു, ട്രയാംഗിളുകൾ, സ്ക്വയറുകൾ, സർക്കിളുകൾ പോലുള്ള പ്രാഥമിക ജ്യാമിതീയ ആകൃതികൾ തിരിച്ചറിയാൻ രൂപകൽപ്പന ചെയ്തിരുന്നത്.
|
||||
|
||||
| | |
|
||||
|--------------|-----------|
|
||||
|<img src='../../../../../translated_images/Rosenblatt-wikipedia.294821b285ac796d2281a556fe3de9a7aa328e34cdd25f3ac9deefa0982ea2df.ml.jpg' alt='Frank Rosenblatt'/> | <img src='../../../../../translated_images/Mark_I_perceptron_wikipedia.1f84eaa2d4b76ec9fb32bab6ae07e40faa202be1935c0fbd8c2bc2600a87bcb1.ml.jpg' alt='The Mark 1 Perceptron' />|
|
||||
|
||||
> ചിത്രങ്ങൾ [വിക്കിപീഡിയയിൽ നിന്ന്](https://en.wikipedia.org/wiki/Perceptron)
|
||||
|
||||
ഒരു ഇൻപുട്ട് ചിത്രം 20x20 ഫോട്ടോസെൽ അറേ ആയി പ്രതിനിധീകരിച്ചിരുന്നു, അതിനാൽ ന്യൂറൽ നെറ്റ്വർക്കിന് 400 ഇൻപുട്ടുകളും ഒരു ബൈനറി ഔട്ട്പുട്ടും ഉണ്ടായിരുന്നു. ഒരു ലളിതമായ നെറ്റ്വർക്ക് ഒരു ന്യൂറോൺ മാത്രമായിരുന്നു, അതിനെ **threshold logic unit** എന്നും വിളിച്ചിരുന്നു. ന്യൂറൽ നെറ്റ്വർക്കിലെ വെയ്റ്റുകൾ പോട്ടൻഷ്യോമീറ്ററുകൾ പോലെ പ്രവർത്തിച്ചു, പരിശീലന ഘട്ടത്തിൽ മാനുവൽ ക്രമീകരണം ആവശ്യമായിരുന്നു.
|
||||
|
||||
> ✅ പോട്ടൻഷ്യോമീറ്റർ എന്നത് ഒരു സർക്യൂട്ടിന്റെ റെസിസ്റ്റൻസ് ക്രമീകരിക്കാൻ ഉപയോക്താവിന് അനുവദിക്കുന്ന ഉപകരണം ആണ്.
|
||||
|
||||
> ആ സമയത്ത് ന്യൂയോർക്ക് ടൈംസ് പേഴ്സെപ്ട്രോണിനെ കുറിച്ച് എഴുതിയതു: *നാവികസേന പ്രതീക്ഷിക്കുന്ന ഒരു ഇലക്ട്രോണിക് കമ്പ്യൂട്ടറിന്റെ ഭ്രൂണ രൂപം, അത് നടക്കാനും, സംസാരിക്കാനും, കാണാനും, എഴുതാനും, സ്വയം പുനരുത്പാദിപ്പിക്കാനും, അതിന്റെ നിലനിൽപ്പിനെ ബോധ്യപ്പെടുത്താനും കഴിയും.*
|
||||
|
||||
## പേഴ്സെപ്ട്രോൺ മോഡൽ
|
||||
|
||||
നമുക്ക് N ഫീച്ചറുകൾ ഉള്ള ഒരു മോഡൽ ഉണ്ടെന്ന് കരുതുക, അപ്പോൾ ഇൻപുട്ട് വെക്ടർ N വലുപ്പമുള്ള ഒരു വെക്ടർ ആയിരിക്കും. പേഴ്സെപ്ട്രോൺ ഒരു **ബൈനറി ക്ലാസിഫിക്കേഷൻ** മോഡലാണ്, അതായത് രണ്ട് ക്ലാസ്സുകളിലുള്ള ഇൻപുട്ട് ഡാറ്റ തമ്മിൽ വ്യത്യാസം കാണിക്കാൻ കഴിയും. ഓരോ ഇൻപുട്ട് വെക്ടറിനും x, നമ്മുടെ പേഴ്സെപ്ട്രോണിന്റെ ഔട്ട്പുട്ട് +1 അല്ലെങ്കിൽ -1 ആയിരിക്കും, ക്ലാസ്സിന്റെ അടിസ്ഥാനത്തിൽ. ഔട്ട്പുട്ട് താഴെ കാണുന്ന ഫോർമുല ഉപയോഗിച്ച് കണക്കാക്കും:
|
||||
|
||||
y(x) = f(w<sup>T</sup>x)
|
||||
|
||||
ഇവിടെ f ഒരു സ്റ്റെപ്പ് ആക്ടിവേഷൻ ഫംഗ്ഷനാണ്
|
||||
|
||||
<!-- img src="http://www.sciweavers.org/tex2img.php?eq=f%28x%29%20%3D%20%5Cbegin%7Bcases%7D%0A%20%20%20%20%20%20%20%20%20%2B1%20%26%20x%20%5Cgeq%200%20%5C%5C%0A%20%20%20%20%20%20%20%20%20-1%20%26%20x%20%3C%200%0A%20%20%20%20%20%20%20%5Cend%7Bcases%7D%20%5C%5C%0A&bc=White&fc=Black&im=jpg&fs=12&ff=arev&edit=0" align="center" border="0" alt="f(x) = \begin{cases} +1 & x \geq 0 \\ -1 & x < 0 \end{cases} \\" width="154" height="50" / -->
|
||||
<img src="../../../../../translated_images/activation-func.b4924007c7ce77648d4b1dd3e81c689453204902c096c626735c7b53688cdc63.ml.png"/>
|
||||
|
||||
## പേഴ്സെപ്ട്രോൺ പരിശീലനം
|
||||
|
||||
പേഴ്സെപ്ട്രോൺ പരിശീലിപ്പിക്കാൻ, ഏറ്റവും കൂടുതൽ മൂല്യങ്ങൾ ശരിയായി ക്ലാസിഫൈ ചെയ്യുന്ന വെയ്റ്റ് വെക്ടർ w കണ്ടെത്തണം, അതായത് ഏറ്റവും കുറഞ്ഞ **പിശക്** ഉണ്ടാക്കുന്ന w. ഈ പിശക് E, **പേഴ്സെപ്ട്രോൺ ക്രൈറ്റീരിയൻ** പ്രകാരം താഴെപ്പറയുന്ന വിധം നിർവചിക്കുന്നു:
|
||||
|
||||
E(w) = -∑w<sup>T</sup>x<sub>i</sub>t<sub>i</sub>
|
||||
|
||||
ഇവിടെ:
|
||||
|
||||
* തകരാറുള്ള ക്ലാസിഫിക്കേഷൻ ഉണ്ടാക്കുന്ന പരിശീലന ഡാറ്റ പോയിന്റുകൾ i-കളുടെ സംഖ്യയാണ് ഈ സമാഹാരം
|
||||
* x<sub>i</sub> ഇൻപുട്ട് ഡാറ്റയാണ്, t<sub>i</sub> നെഗറ്റീവ് ഉദാഹരണങ്ങൾക്ക് -1, പോസിറ്റീവ് ഉദാഹരണങ്ങൾക്ക് +1 ആണ്.
|
||||
|
||||
ഈ ക്രൈറ്റീരിയൻ വെയ്റ്റ് w-യുടെ ഫംഗ്ഷനായി കണക്കാക്കപ്പെടുന്നു, അതിനെ കുറയ്ക്കേണ്ടതാണ്. സാധാരണയായി **ഗ്രേഡിയന്റ് ഡിസെന്റ്** എന്ന രീതിയാണ് ഉപയോഗിക്കുന്നത്, ഇതിൽ നാം ആദ്യം ചില പ്രാരംഭ വെയ്റ്റുകൾ w<sup>(0)</sup> എടുക്കുന്നു, പിന്നീട് ഓരോ ഘട്ടത്തിലും താഴെ കാണുന്ന ഫോർമുല പ്രകാരം വെയ്റ്റുകൾ അപ്ഡേറ്റ് ചെയ്യുന്നു:
|
||||
|
||||
w<sup>(t+1)</sup> = w<sup>(t)</sup> - η∇E(w)
|
||||
|
||||
ഇവിടെ η എന്നത് **ലേണിംഗ് റേറ്റ്** ആണ്, ∇E(w) E-യുടെ **ഗ്രേഡിയന്റ്** ആണ്. ഗ്രേഡിയന്റ് കണക്കാക്കിയ ശേഷം, നമുക്ക് ലഭിക്കുന്നത്:
|
||||
|
||||
w<sup>(t+1)</sup> = w<sup>(t)</sup> + ∑ηx<sub>i</sub>t<sub>i</sub>
|
||||
|
||||
Python-ൽ ആൽഗോരിതം ഇങ്ങനെ കാണാം:
|
||||
|
||||
```python
|
||||
def train(positive_examples, negative_examples, num_iterations = 100, eta = 1):
|
||||
|
||||
weights = [0,0,0] # ഭാരങ്ങൾ ആരംഭിക്കുക (ഏതാണ്ട് യാദൃച്ഛികമായി :)
|
||||
|
||||
for i in range(num_iterations):
|
||||
pos = random.choice(positive_examples)
|
||||
neg = random.choice(negative_examples)
|
||||
|
||||
z = np.dot(pos, weights) # പെർസെപ്ട്രോൺ ഔട്ട്പുട്ട് കണക്കാക്കുക
|
||||
if z < 0: # പോസിറ്റീവ് ഉദാഹരണം നെഗറ്റീവായി വർഗ്ഗീകരിച്ചു
|
||||
weights = weights + eta*weights.shape
|
||||
|
||||
z = np.dot(neg, weights)
|
||||
if z >= 0: # നെഗറ്റീവ് ഉദാഹരണം പോസിറ്റീവായി വർഗ്ഗീകരിച്ചു
|
||||
weights = weights - eta*weights.shape
|
||||
|
||||
return weights
|
||||
```
|
||||
|
||||
## സംക്ഷേപം
|
||||
|
||||
ഈ പാഠത്തിൽ, നിങ്ങൾ പേഴ്സെപ്ട്രോൺ എന്ന ബൈനറി ക്ലാസിഫിക്കേഷൻ മോഡലിനെക്കുറിച്ച് പഠിച്ചു, കൂടാതെ വെയ്റ്റ് വെക്ടർ ഉപയോഗിച്ച് അത് എങ്ങനെ പരിശീലിപ്പിക്കാമെന്ന് മനസിലാക്കി.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
നിങ്ങൾക്ക് നിങ്ങളുടെ സ്വന്തം പേഴ്സെപ്ട്രോൺ നിർമ്മിക്കാൻ ആഗ്രഹമുണ്ടെങ്കിൽ, [Microsoft Learn-ലെ ഈ ലാബ്](https://docs.microsoft.com/en-us/azure/machine-learning/component-reference/two-class-averaged-perceptron?WT.mc_id=academic-77998-cacaste) പരീക്ഷിക്കാം, ഇത് [Azure ML ഡിസൈനർ](https://docs.microsoft.com/en-us/azure/machine-learning/concept-designer?WT.mc_id=academic-77998-cacaste) ഉപയോഗിക്കുന്നു.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/6)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
പേഴ്സെപ്ട്രോൺ ഉപയോഗിച്ച് ഒരു ലളിതമായ പ്രശ്നവും യഥാർത്ഥ ജീവിത പ്രശ്നങ്ങളും എങ്ങനെ പരിഹരിക്കാമെന്ന് കാണാനും പഠനം തുടരാനും - [Perceptron](Perceptron.ipynb) നോട്ട്ബുക്ക് സന്ദർശിക്കുക.
|
||||
|
||||
ഇതും ഒരു രസകരമായ [പേഴ്സെപ്ട്രോണുകളെക്കുറിച്ചുള്ള ലേഖനം](https://towardsdatascience.com/what-is-a-perceptron-basics-of-neural-networks-c4cfea20c590) ആണ്.
|
||||
|
||||
## [അസൈൻമെന്റ്](lab/README.md)
|
||||
|
||||
ഈ പാഠത്തിൽ, ബൈനറി ക്ലാസിഫിക്കേഷൻ ടാസ്കിനായി പേഴ്സെപ്ട്രോൺ നടപ്പിലാക്കി, രണ്ട് കൈയെഴുത്ത് അക്കങ്ങൾ തമ്മിൽ ക്ലാസിഫൈ ചെയ്യാൻ ഉപയോഗിച്ചു. ഈ ലാബിൽ, നിങ്ങൾക്ക് അക്ക ക്ലാസിഫിക്കേഷൻ പ്രശ്നം പൂർണ്ണമായി പരിഹരിക്കണം, അതായത് നൽകിയ ചിത്രത്തിന് ഏറ്റവും അനുയോജ്യമായ അക്കത്തെ കണ്ടെത്തണം.
|
||||
|
||||
* [നിർദ്ദേശങ്ങൾ](lab/README.md)
|
||||
* [നോട്ട്ബുക്ക്](lab/PerceptronMultiClass.ipynb)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "c34cbba802058b6fa267e1a294d4e510",
|
||||
"translation_date": "2025-11-25T21:36:59+00:00",
|
||||
"source_file": "lessons/3-NeuralNetworks/03-Perceptron/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ന്യൂറൽ നെറ്റ്വർക്കുകളിലേക്ക് പരിചയം: പേഴ്സെപ്ട്രോൺ
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/5)
|
||||
|
||||
ആധുനിക ന്യൂറൽ നെറ്റ്വർക്കിനോട് സാമ്യമുള്ള ഒന്നിനെ ആദ്യമായി നടപ്പിലാക്കാൻ ശ്രമിച്ചത് 1957-ൽ കോർണൽ എയറോണോട്ടിക്കൽ ലബോറട്ടറിയിലെ ഫ്രാങ്ക് റോസൻബ്ര്ലാറ്റ് ആണ്. ഇത് "മാർക്ക്-1" എന്ന ഹാർഡ്വെയർ രൂപത്തിൽ ഉണ്ടായിരുന്നു, ട്രയാംഗിളുകൾ, സ്ക്വയറുകൾ, സർക്കിളുകൾ പോലുള്ള പ്രാഥമിക ജ്യാമിതീയ ആകൃതികൾ തിരിച്ചറിയാൻ രൂപകൽപ്പന ചെയ്തിരുന്നത്.
|
||||
|
||||
| | |
|
||||
|--------------|-----------|
|
||||
|<img src='../../../../../translated_images/Rosenblatt-wikipedia.294821b285ac796d.ml.jpg' alt='Frank Rosenblatt'/> | <img src='../../../../../translated_images/Mark_I_perceptron_wikipedia.1f84eaa2d4b76ec9.ml.jpg' alt='The Mark 1 Perceptron' />|
|
||||
|
||||
> ചിത്രങ്ങൾ [വിക്കിപീഡിയയിൽ നിന്ന്](https://en.wikipedia.org/wiki/Perceptron)
|
||||
|
||||
ഒരു ഇൻപുട്ട് ചിത്രം 20x20 ഫോട്ടോസെൽ അറേ ആയി പ്രതിനിധീകരിച്ചിരുന്നു, അതിനാൽ ന്യൂറൽ നെറ്റ്വർക്കിന് 400 ഇൻപുട്ടുകളും ഒരു ബൈനറി ഔട്ട്പുട്ടും ഉണ്ടായിരുന്നു. ഒരു ലളിതമായ നെറ്റ്വർക്ക് ഒരു ന്യൂറോൺ മാത്രമായിരുന്നു, അതിനെ **threshold logic unit** എന്നും വിളിച്ചിരുന്നു. ന്യൂറൽ നെറ്റ്വർക്കിലെ വെയ്റ്റുകൾ പോട്ടൻഷ്യോമീറ്ററുകൾ പോലെ പ്രവർത്തിച്ചു, പരിശീലന ഘട്ടത്തിൽ മാനുവൽ ക്രമീകരണം ആവശ്യമായിരുന്നു.
|
||||
|
||||
> ✅ പോട്ടൻഷ്യോമീറ്റർ എന്നത് ഒരു സർക്യൂട്ടിന്റെ റെസിസ്റ്റൻസ് ക്രമീകരിക്കാൻ ഉപയോക്താവിന് അനുവദിക്കുന്ന ഉപകരണം ആണ്.
|
||||
|
||||
> ആ സമയത്ത് ന്യൂയോർക്ക് ടൈംസ് പേഴ്സെപ്ട്രോണിനെ കുറിച്ച് എഴുതിയതു: *നാവികസേന പ്രതീക്ഷിക്കുന്ന ഒരു ഇലക്ട്രോണിക് കമ്പ്യൂട്ടറിന്റെ ഭ്രൂണ രൂപം, അത് നടക്കാനും, സംസാരിക്കാനും, കാണാനും, എഴുതാനും, സ്വയം പുനരുത്പാദിപ്പിക്കാനും, അതിന്റെ നിലനിൽപ്പിനെ ബോധ്യപ്പെടുത്താനും കഴിയും.*
|
||||
|
||||
## പേഴ്സെപ്ട്രോൺ മോഡൽ
|
||||
|
||||
നമുക്ക് N ഫീച്ചറുകൾ ഉള്ള ഒരു മോഡൽ ഉണ്ടെന്ന് കരുതുക, അപ്പോൾ ഇൻപുട്ട് വെക്ടർ N വലുപ്പമുള്ള ഒരു വെക്ടർ ആയിരിക്കും. പേഴ്സെപ്ട്രോൺ ഒരു **ബൈനറി ക്ലാസിഫിക്കേഷൻ** മോഡലാണ്, അതായത് രണ്ട് ക്ലാസ്സുകളിലുള്ള ഇൻപുട്ട് ഡാറ്റ തമ്മിൽ വ്യത്യാസം കാണിക്കാൻ കഴിയും. ഓരോ ഇൻപുട്ട് വെക്ടറിനും x, നമ്മുടെ പേഴ്സെപ്ട്രോണിന്റെ ഔട്ട്പുട്ട് +1 അല്ലെങ്കിൽ -1 ആയിരിക്കും, ക്ലാസ്സിന്റെ അടിസ്ഥാനത്തിൽ. ഔട്ട്പുട്ട് താഴെ കാണുന്ന ഫോർമുല ഉപയോഗിച്ച് കണക്കാക്കും:
|
||||
|
||||
y(x) = f(w<sup>T</sup>x)
|
||||
|
||||
ഇവിടെ f ഒരു സ്റ്റെപ്പ് ആക്ടിവേഷൻ ഫംഗ്ഷനാണ്
|
||||
|
||||
<!-- img src="http://www.sciweavers.org/tex2img.php?eq=f%28x%29%20%3D%20%5Cbegin%7Bcases%7D%0A%20%20%20%20%20%20%20%20%20%2B1%20%26%20x%20%5Cgeq%200%20%5C%5C%0A%20%20%20%20%20%20%20%20%20-1%20%26%20x%20%3C%200%0A%20%20%20%20%20%20%20%5Cend%7Bcases%7D%20%5C%5C%0A&bc=White&fc=Black&im=jpg&fs=12&ff=arev&edit=0" align="center" border="0" alt="f(x) = \begin{cases} +1 & x \geq 0 \\ -1 & x < 0 \end{cases} \\" width="154" height="50" / -->
|
||||
<img src="../../../../../translated_images/activation-func.b4924007c7ce7764.ml.png"/>
|
||||
|
||||
## പേഴ്സെപ്ട്രോൺ പരിശീലനം
|
||||
|
||||
പേഴ്സെപ്ട്രോൺ പരിശീലിപ്പിക്കാൻ, ഏറ്റവും കൂടുതൽ മൂല്യങ്ങൾ ശരിയായി ക്ലാസിഫൈ ചെയ്യുന്ന വെയ്റ്റ് വെക്ടർ w കണ്ടെത്തണം, അതായത് ഏറ്റവും കുറഞ്ഞ **പിശക്** ഉണ്ടാക്കുന്ന w. ഈ പിശക് E, **പേഴ്സെപ്ട്രോൺ ക്രൈറ്റീരിയൻ** പ്രകാരം താഴെപ്പറയുന്ന വിധം നിർവചിക്കുന്നു:
|
||||
|
||||
E(w) = -∑w<sup>T</sup>x<sub>i</sub>t<sub>i</sub>
|
||||
|
||||
ഇവിടെ:
|
||||
|
||||
* തകരാറുള്ള ക്ലാസിഫിക്കേഷൻ ഉണ്ടാക്കുന്ന പരിശീലന ഡാറ്റ പോയിന്റുകൾ i-കളുടെ സംഖ്യയാണ് ഈ സമാഹാരം
|
||||
* x<sub>i</sub> ഇൻപുട്ട് ഡാറ്റയാണ്, t<sub>i</sub> നെഗറ്റീവ് ഉദാഹരണങ്ങൾക്ക് -1, പോസിറ്റീവ് ഉദാഹരണങ്ങൾക്ക് +1 ആണ്.
|
||||
|
||||
ഈ ക്രൈറ്റീരിയൻ വെയ്റ്റ് w-യുടെ ഫംഗ്ഷനായി കണക്കാക്കപ്പെടുന്നു, അതിനെ കുറയ്ക്കേണ്ടതാണ്. സാധാരണയായി **ഗ്രേഡിയന്റ് ഡിസെന്റ്** എന്ന രീതിയാണ് ഉപയോഗിക്കുന്നത്, ഇതിൽ നാം ആദ്യം ചില പ്രാരംഭ വെയ്റ്റുകൾ w<sup>(0)</sup> എടുക്കുന്നു, പിന്നീട് ഓരോ ഘട്ടത്തിലും താഴെ കാണുന്ന ഫോർമുല പ്രകാരം വെയ്റ്റുകൾ അപ്ഡേറ്റ് ചെയ്യുന്നു:
|
||||
|
||||
w<sup>(t+1)</sup> = w<sup>(t)</sup> - η∇E(w)
|
||||
|
||||
ഇവിടെ η എന്നത് **ലേണിംഗ് റേറ്റ്** ആണ്, ∇E(w) E-യുടെ **ഗ്രേഡിയന്റ്** ആണ്. ഗ്രേഡിയന്റ് കണക്കാക്കിയ ശേഷം, നമുക്ക് ലഭിക്കുന്നത്:
|
||||
|
||||
w<sup>(t+1)</sup> = w<sup>(t)</sup> + ∑ηx<sub>i</sub>t<sub>i</sub>
|
||||
|
||||
Python-ൽ ആൽഗോരിതം ഇങ്ങനെ കാണാം:
|
||||
|
||||
```python
|
||||
def train(positive_examples, negative_examples, num_iterations = 100, eta = 1):
|
||||
|
||||
weights = [0,0,0] # ഭാരങ്ങൾ ആരംഭിക്കുക (ഏതാണ്ട് യാദൃച്ഛികമായി :)
|
||||
|
||||
for i in range(num_iterations):
|
||||
pos = random.choice(positive_examples)
|
||||
neg = random.choice(negative_examples)
|
||||
|
||||
z = np.dot(pos, weights) # പെർസെപ്ട്രോൺ ഔട്ട്പുട്ട് കണക്കാക്കുക
|
||||
if z < 0: # പോസിറ്റീവ് ഉദാഹരണം നെഗറ്റീവായി വർഗ്ഗീകരിച്ചു
|
||||
weights = weights + eta*weights.shape
|
||||
|
||||
z = np.dot(neg, weights)
|
||||
if z >= 0: # നെഗറ്റീവ് ഉദാഹരണം പോസിറ്റീവായി വർഗ്ഗീകരിച്ചു
|
||||
weights = weights - eta*weights.shape
|
||||
|
||||
return weights
|
||||
```
|
||||
|
||||
## സംക്ഷേപം
|
||||
|
||||
ഈ പാഠത്തിൽ, നിങ്ങൾ പേഴ്സെപ്ട്രോൺ എന്ന ബൈനറി ക്ലാസിഫിക്കേഷൻ മോഡലിനെക്കുറിച്ച് പഠിച്ചു, കൂടാതെ വെയ്റ്റ് വെക്ടർ ഉപയോഗിച്ച് അത് എങ്ങനെ പരിശീലിപ്പിക്കാമെന്ന് മനസിലാക്കി.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
നിങ്ങൾക്ക് നിങ്ങളുടെ സ്വന്തം പേഴ്സെപ്ട്രോൺ നിർമ്മിക്കാൻ ആഗ്രഹമുണ്ടെങ്കിൽ, [Microsoft Learn-ലെ ഈ ലാബ്](https://docs.microsoft.com/en-us/azure/machine-learning/component-reference/two-class-averaged-perceptron?WT.mc_id=academic-77998-cacaste) പരീക്ഷിക്കാം, ഇത് [Azure ML ഡിസൈനർ](https://docs.microsoft.com/en-us/azure/machine-learning/concept-designer?WT.mc_id=academic-77998-cacaste) ഉപയോഗിക്കുന്നു.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/6)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
പേഴ്സെപ്ട്രോൺ ഉപയോഗിച്ച് ഒരു ലളിതമായ പ്രശ്നവും യഥാർത്ഥ ജീവിത പ്രശ്നങ്ങളും എങ്ങനെ പരിഹരിക്കാമെന്ന് കാണാനും പഠനം തുടരാനും - [Perceptron](Perceptron.ipynb) നോട്ട്ബുക്ക് സന്ദർശിക്കുക.
|
||||
|
||||
ഇതും ഒരു രസകരമായ [പേഴ്സെപ്ട്രോണുകളെക്കുറിച്ചുള്ള ലേഖനം](https://towardsdatascience.com/what-is-a-perceptron-basics-of-neural-networks-c4cfea20c590) ആണ്.
|
||||
|
||||
## [അസൈൻമെന്റ്](lab/README.md)
|
||||
|
||||
ഈ പാഠത്തിൽ, ബൈനറി ക്ലാസിഫിക്കേഷൻ ടാസ്കിനായി പേഴ്സെപ്ട്രോൺ നടപ്പിലാക്കി, രണ്ട് കൈയെഴുത്ത് അക്കങ്ങൾ തമ്മിൽ ക്ലാസിഫൈ ചെയ്യാൻ ഉപയോഗിച്ചു. ഈ ലാബിൽ, നിങ്ങൾക്ക് അക്ക ക്ലാസിഫിക്കേഷൻ പ്രശ്നം പൂർണ്ണമായി പരിഹരിക്കണം, അതായത് നൽകിയ ചിത്രത്തിന് ഏറ്റവും അനുയോജ്യമായ അക്കത്തെ കണ്ടെത്തണം.
|
||||
|
||||
* [നിർദ്ദേശങ്ങൾ](lab/README.md)
|
||||
* [നോട്ട്ബുക്ക്](lab/PerceptronMultiClass.ipynb)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1,102 +1,102 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "789d6c3fb6fc7948a470b33078a5983a",
|
||||
"translation_date": "2025-11-25T21:41:32+00:00",
|
||||
"source_file": "lessons/3-NeuralNetworks/04-OwnFramework/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ന്യൂറൽ നെറ്റ്വർക്കുകളിലേക്ക് പരിചയം. മൾട്ടി-ലെയർഡ് പേഴ്സെപ്ട്രോൺ
|
||||
|
||||
മുൻവകുപ്പിൽ, നിങ്ങൾ ഏറ്റവും ലളിതമായ ന്യൂറൽ നെറ്റ്വർക്ക് മോഡൽ - ഒറ്റ ലെയർ പേഴ്സെപ്ട്രോൺ, ഒരു ലീനിയർ രണ്ട്-ക്ലാസ് ക്ലാസിഫിക്കേഷൻ മോഡൽ - പഠിച്ചു.
|
||||
|
||||
ഈ വകുപ്പിൽ, നാം ഈ മോഡൽ കൂടുതൽ ഫ്ലെക്സിബിൾ ഫ്രെയിംവർക്കിലേക്ക് വികസിപ്പിക്കും, ഇത് നമുക്ക് അനുവദിക്കും:
|
||||
|
||||
* രണ്ട്-ക്ലാസ് കൂടാതെ **മൾട്ടി-ക്ലാസ് ക്ലാസിഫിക്കേഷൻ** നടത്താൻ
|
||||
* ക്ലാസിഫിക്കേഷനോടൊപ്പം **റെഗ്രഷൻ പ്രശ്നങ്ങൾ** പരിഹരിക്കാൻ
|
||||
* ലീനിയർ ആയി വേർതിരിക്കാൻ കഴിയാത്ത ക്ലാസുകൾ വേർതിരിക്കാൻ
|
||||
|
||||
നാം പൈത്തണിൽ നമ്മുടെ സ്വന്തം മോഡുലാർ ഫ്രെയിംവർക്ക് വികസിപ്പിക്കുകയും വ്യത്യസ്ത ന്യൂറൽ നെറ്റ്വർക്ക് ആർക്കിടെക്ചറുകൾ നിർമ്മിക്കാൻ സാധിക്കുമെന്നു കാണിക്കും.
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/7)
|
||||
|
||||
## മെഷീൻ ലേണിങ്ങിന്റെ ഫോർമലൈസേഷൻ
|
||||
|
||||
മെഷീൻ ലേണിങ്ങ് പ്രശ്നം ഫോർമലൈസ് ചെയ്യുന്നതിൽ നിന്ന് തുടങ്ങാം. പരിശീലന ഡാറ്റാസെറ്റ് **X** ലേബലുകളോടുകൂടി **Y** ഉണ്ടെന്ന് കരുതുക, ഏറ്റവും കൃത്യമായ പ്രവചനങ്ങൾ നടത്താൻ ഒരു മോഡൽ *f* നിർമ്മിക്കണം. പ്രവചനങ്ങളുടെ ഗുണമേന്മ **ലോസ് ഫംഗ്ഷൻ** ℒ ഉപയോഗിച്ച് അളക്കുന്നു. താഴെ പറയുന്ന ലോസ് ഫംഗ്ഷനുകൾ സാധാരണ ഉപയോഗിക്കുന്നു:
|
||||
|
||||
* റെഗ്രഷൻ പ്രശ്നത്തിന്, ഒരു സംഖ്യ പ്രവചിക്കേണ്ടപ്പോൾ, **അബ്സല്യൂട്ട് എറർ** ∑<sub>i</sub>|f(x<sup>(i)</sup>)-y<sup>(i)</sup>| അല്ലെങ്കിൽ **സ്ക്വയർഡ് എറർ** ∑<sub>i</sub>(f(x<sup>(i)</sup>)-y<sup>(i)</sup>)<sup>2</sup> ഉപയോഗിക്കാം
|
||||
* ക്ലാസിഫിക്കേഷനിൽ, **0-1 ലോസ്** (മൂല്യത്തിൽ മോഡലിന്റെ **അക്കുറസി** പോലെയാണ്), അല്ലെങ്കിൽ **ലോജിസ്റ്റിക് ലോസ്** ഉപയോഗിക്കുന്നു.
|
||||
|
||||
ഒറ്റ ലെയർ പേഴ്സെപ്ട്രോണിൽ, *f* ഫംഗ്ഷൻ ഒരു ലീനിയർ ഫംഗ്ഷനായി നിർവചിച്ചിരുന്നു: *f(x)=wx+b* (ഇവിടെ *w* ഭാര മാട്രിക്സ്, *x* ഇൻപുട്ട് ഫീച്ചറുകളുടെ വെക്ടർ, *b* ബയാസ് വെക്ടർ). വ്യത്യസ്ത ന്യൂറൽ നെറ്റ്വർക്ക് ആർക്കിടെക്ചറുകൾക്കായി ഈ ഫംഗ്ഷൻ കൂടുതൽ സങ്കീർണ്ണമായ രൂപം സ്വീകരിക്കാം.
|
||||
|
||||
> ക്ലാസിഫിക്കേഷനിൽ, നെറ്റ്വർക്ക് ഔട്ട്പുട്ടായി അനുയോജ്യമായ ക്ലാസുകളുടെ പ്രൊബബിലിറ്റികൾ ലഭിക്കുന്നത് ആഗ്രഹകരമാണ്. ഏതെങ്കിലും സംഖ്യകളെ പ്രൊബബിലിറ്റികളായി മാറ്റാൻ (ഉദാ: ഔട്ട്പുട്ട് നോർമലൈസ് ചെയ്യാൻ), സാധാരണ **softmax** ഫംഗ്ഷൻ σ ഉപയോഗിക്കുന്നു, അതിനാൽ *f* ഫംഗ്ഷൻ *f(x)=σ(wx+b)* ആകുന്നു.
|
||||
|
||||
മുകളിൽ *f* നിർവചിക്കുമ്പോൾ, *w*യും *b*യും ചേർന്ന് **പാരാമീറ്ററുകൾ** θ=⟨*w,b*⟩ എന്ന് വിളിക്കുന്നു. ഡാറ്റാസെറ്റ് ⟨**X**,**Y**⟩ നൽകിയാൽ, പാരാമീറ്ററുകളുടെ ഫംഗ്ഷനായി മുഴുവൻ ഡാറ്റാസെറ്റിലെ മൊത്തം പിശക് കണക്കാക്കാം.
|
||||
|
||||
> ✅ **ന്യൂറൽ നെറ്റ്വർക്ക് പരിശീലനത്തിന്റെ ലക്ഷ്യം പാരാമീറ്ററുകൾ θ മാറ്റി പിശക് കുറയ്ക്കുകയാണ്**
|
||||
|
||||
## ഗ്രേഡിയന്റ് ഡിസെന്റ് ഒപ്റ്റിമൈസേഷൻ
|
||||
|
||||
ഫംഗ്ഷൻ ഒപ്റ്റിമൈസേഷനിൽ പ്രശസ്തമായ ഒരു രീതി **ഗ്രേഡിയന്റ് ഡിസെന്റ്** ആണ്. ആശയം: പാരാമീറ്ററുകളെ സംബന്ധിച്ചുള്ള ലോസ് ഫംഗ്ഷന്റെ ഡെരിവേറ്റീവ് (മൾട്ടി-ഡൈമെൻഷണൽ കേസിൽ **ഗ്രേഡിയന്റ്**) കണക്കാക്കി, പിശക് കുറയുന്ന വിധത്തിൽ പാരാമീറ്ററുകൾ മാറ്റുക. ഇത് ഫോർമലൈസ് ചെയ്യാം:
|
||||
|
||||
* പാരാമീറ്ററുകൾ യാദൃച്ഛിക മൂല്യങ്ങളാൽ ആരംഭിക്കുക w<sup>(0)</sup>, b<sup>(0)</sup>
|
||||
* താഴെ പറയുന്ന ഘട്ടം പലതവണ ആവർത്തിക്കുക:
|
||||
- w<sup>(i+1)</sup> = w<sup>(i)</sup>-η∂ℒ/∂w
|
||||
- b<sup>(i+1)</sup> = b<sup>(i)</sup>-η∂ℒ/∂b
|
||||
|
||||
പരിശീലന സമയത്ത്, ഒപ്റ്റിമൈസേഷൻ ഘട്ടങ്ങൾ മുഴുവൻ ഡാറ്റാസെറ്റിനെ പരിഗണിച്ച് കണക്കാക്കണം (ലോസ് എല്ലാ പരിശീലന സാമ്പിളുകളുടെയും സംഖ്യയായി കണക്കാക്കപ്പെടുന്നു). എന്നാൽ യാഥാർത്ഥ്യത്തിൽ, ഡാറ്റാസെറ്റിന്റെ ചെറിയ ഭാഗങ്ങൾ **മിനിബാച്ചുകൾ** എടുത്ത്, അവയുടെ അടിസ്ഥാനത്തിൽ ഗ്രേഡിയന്റുകൾ കണക്കാക്കുന്നു. ഓരോ തവണയും ഭാഗം യാദൃച്ഛികമായി തിരഞ്ഞെടുക്കപ്പെടുന്നതിനാൽ, ഈ രീതി **സ്റ്റോക്കാസ്റ്റിക് ഗ്രേഡിയന്റ് ഡിസെന്റ്** (SGD) എന്ന് വിളിക്കുന്നു.
|
||||
|
||||
## മൾട്ടി-ലെയർഡ് പേഴ്സെപ്ട്രോണുകളും ബാക്ക്പ്രൊപ്പഗേഷൻ
|
||||
|
||||
ഒറ്റ ലെയർ നെറ്റ്വർക്ക്, മുകളിൽ കാണിച്ചതുപോലെ, ലീനിയർ ആയി വേർതിരിക്കാൻ കഴിയുന്ന ക്ലാസുകൾ ക്ലാസിഫൈ ചെയ്യാൻ കഴിയും. കൂടുതൽ സമൃദ്ധമായ മോഡൽ നിർമ്മിക്കാൻ, നാം നെറ്റ്വർക്ക് ലെയറുകൾ ചേർക്കാം. ഗണിതപരമായി, ഫംഗ്ഷൻ *f* കൂടുതൽ സങ്കീർണ്ണമായ രൂപം സ്വീകരിക്കുകയും പല ഘട്ടങ്ങളായി കണക്കാക്കപ്പെടുകയും ചെയ്യും:
|
||||
* z<sub>1</sub>=w<sub>1</sub>x+b<sub>1</sub>
|
||||
* z<sub>2</sub>=w<sub>2</sub>α(z<sub>1</sub>)+b<sub>2</sub>
|
||||
* f = σ(z<sub>2</sub>)
|
||||
|
||||
ഇവിടെ, α ഒരു **നോൺ-ലീനിയർ ആക്ടിവേഷൻ ഫംഗ്ഷൻ**, σ softmax ഫംഗ്ഷൻ, പാരാമീറ്ററുകൾ θ=<*w<sub>1</sub>,b<sub>1</sub>,w<sub>2</sub>,b<sub>2</sub>*>.
|
||||
|
||||
ഗ്രേഡിയന്റ് ഡിസെന്റ് ആൽഗോരിതം അതേപോലെ തുടരും, പക്ഷേ ഗ്രേഡിയന്റുകൾ കണക്കാക്കുന്നത് കൂടുതൽ ബുദ്ധിമുട്ടുള്ളതാണ്. ചെയിൻ ഡിഫറൻഷ്യേഷൻ നിയമം ഉപയോഗിച്ച് ഡെരിവേറ്റീവുകൾ കണക്കാക്കാം:
|
||||
|
||||
* ∂ℒ/∂w<sub>2</sub> = (∂ℒ/∂σ)(∂σ/∂z<sub>2</sub>)(∂z<sub>2</sub>/∂w<sub>2</sub>)
|
||||
* ∂ℒ/∂w<sub>1</sub> = (∂ℒ/∂σ)(∂σ/∂z<sub>2</sub>)(∂z<sub>2</sub>/∂α)(∂α/∂z<sub>1</sub>)(∂z<sub>1</sub>/∂w<sub>1</sub>)
|
||||
|
||||
> ✅ പാരാമീറ്ററുകളെ സംബന്ധിച്ചുള്ള ലോസ് ഫംഗ്ഷന്റെ ഡെരിവേറ്റീവുകൾ കണക്കാക്കാൻ ചെയിൻ ഡിഫറൻഷ്യേഷൻ നിയമം ഉപയോഗിക്കുന്നു.
|
||||
|
||||
ഈ എല്ലാ വ്യഞ്ജനങ്ങളുടെയും ഇടത്തരം ഭാഗം ഒരുപോലെയാണ്, അതിനാൽ ലോസ് ഫംഗ്ഷനിൽ നിന്ന് "പിന്നിലേക്ക്" കണക്കുകൂട്ടി ഡെരിവേറ്റീവുകൾ എളുപ്പത്തിൽ കണ്ടെത്താം. അതുകൊണ്ട് മൾട്ടി-ലെയർഡ് പേഴ്സെപ്ട്രോൺ പരിശീലന രീതി **ബാക്ക്പ്രൊപ്പഗേഷൻ** അല്ലെങ്കിൽ 'ബാക്ക്പ്രോപ്പ്' എന്ന് വിളിക്കുന്നു.
|
||||
|
||||
<img alt="compute graph" src="../../../../../translated_images/ComputeGraphGrad.4626252c0de035075e5cd2b7f71b776d5e3e8f64f2dc472b4420d3fdfaf53ba8.ml.png"/>
|
||||
|
||||
> TODO: ചിത്രം സൈറ്റേഷൻ
|
||||
|
||||
> ✅ ബാക്ക്പ്രോപ്പ് നമുക്ക് നോട്ട്ബുക്കിൽ കൂടുതൽ വിശദമായി പഠിക്കാം.
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ഈ പാഠത്തിൽ, നാം നമ്മുടെ സ്വന്തം ന്യൂറൽ നെറ്റ്വർക്ക് ലൈബ്രറി നിർമ്മിച്ചു, അത് ഉപയോഗിച്ച് ലളിതമായ രണ്ട്-ഡൈമെൻഷണൽ ക്ലാസിഫിക്കേഷൻ ടാസ്ക് ചെയ്തു.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
സഹായക നോട്ട്ബുക്കിൽ, നിങ്ങൾ മൾട്ടി-ലെയർഡ് പേഴ്സെപ്ട്രോണുകൾ നിർമ്മിക്കുകയും പരിശീലിപ്പിക്കുകയും ചെയ്യാനുള്ള നിങ്ങളുടെ സ്വന്തം ഫ്രെയിംവർക്ക് നടപ്പിലാക്കും. ആധുനിക ന്യൂറൽ നെറ്റ്വർക്കുകൾ എങ്ങനെ പ്രവർത്തിക്കുന്നുവെന്ന് വിശദമായി കാണാൻ കഴിയും.
|
||||
|
||||
[OwnFramework](OwnFramework.ipynb) നോട്ട്ബുക്ക് തുറന്ന് അതിലൂടെ പ്രവർത്തിക്കുക.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/8)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
ബാക്ക്പ്രൊപ്പഗേഷൻ AI, ML-ൽ സാധാരണ ഉപയോഗിക്കുന്ന ആൽഗോരിതമാണ്, [കൂടുതൽ വിശദമായി](https://wikipedia.org/wiki/Backpropagation) പഠിക്കാൻ ഉചിതമാണ്.
|
||||
|
||||
## [അസൈൻമെന്റ്](lab/README.md)
|
||||
|
||||
ഈ ലാബിൽ, നിങ്ങൾ ഈ പാഠത്തിൽ നിർമ്മിച്ച ഫ്രെയിംവർക്ക് ഉപയോഗിച്ച് MNIST ഹാൻഡ്റിറ്റൻ ഡിജിറ്റ് ക്ലാസിഫിക്കേഷൻ പരിഹരിക്കണം.
|
||||
|
||||
* [നിർദ്ദേശങ്ങൾ](lab/README.md)
|
||||
* [നോട്ട്ബുക്ക്](lab/MyFW_MNIST.ipynb)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "789d6c3fb6fc7948a470b33078a5983a",
|
||||
"translation_date": "2025-11-25T21:41:32+00:00",
|
||||
"source_file": "lessons/3-NeuralNetworks/04-OwnFramework/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ന്യൂറൽ നെറ്റ്വർക്കുകളിലേക്ക് പരിചയം. മൾട്ടി-ലെയർഡ് പേഴ്സെപ്ട്രോൺ
|
||||
|
||||
മുൻവകുപ്പിൽ, നിങ്ങൾ ഏറ്റവും ലളിതമായ ന്യൂറൽ നെറ്റ്വർക്ക് മോഡൽ - ഒറ്റ ലെയർ പേഴ്സെപ്ട്രോൺ, ഒരു ലീനിയർ രണ്ട്-ക്ലാസ് ക്ലാസിഫിക്കേഷൻ മോഡൽ - പഠിച്ചു.
|
||||
|
||||
ഈ വകുപ്പിൽ, നാം ഈ മോഡൽ കൂടുതൽ ഫ്ലെക്സിബിൾ ഫ്രെയിംവർക്കിലേക്ക് വികസിപ്പിക്കും, ഇത് നമുക്ക് അനുവദിക്കും:
|
||||
|
||||
* രണ്ട്-ക്ലാസ് കൂടാതെ **മൾട്ടി-ക്ലാസ് ക്ലാസിഫിക്കേഷൻ** നടത്താൻ
|
||||
* ക്ലാസിഫിക്കേഷനോടൊപ്പം **റെഗ്രഷൻ പ്രശ്നങ്ങൾ** പരിഹരിക്കാൻ
|
||||
* ലീനിയർ ആയി വേർതിരിക്കാൻ കഴിയാത്ത ക്ലാസുകൾ വേർതിരിക്കാൻ
|
||||
|
||||
നാം പൈത്തണിൽ നമ്മുടെ സ്വന്തം മോഡുലാർ ഫ്രെയിംവർക്ക് വികസിപ്പിക്കുകയും വ്യത്യസ്ത ന്യൂറൽ നെറ്റ്വർക്ക് ആർക്കിടെക്ചറുകൾ നിർമ്മിക്കാൻ സാധിക്കുമെന്നു കാണിക്കും.
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/7)
|
||||
|
||||
## മെഷീൻ ലേണിങ്ങിന്റെ ഫോർമലൈസേഷൻ
|
||||
|
||||
മെഷീൻ ലേണിങ്ങ് പ്രശ്നം ഫോർമലൈസ് ചെയ്യുന്നതിൽ നിന്ന് തുടങ്ങാം. പരിശീലന ഡാറ്റാസെറ്റ് **X** ലേബലുകളോടുകൂടി **Y** ഉണ്ടെന്ന് കരുതുക, ഏറ്റവും കൃത്യമായ പ്രവചനങ്ങൾ നടത്താൻ ഒരു മോഡൽ *f* നിർമ്മിക്കണം. പ്രവചനങ്ങളുടെ ഗുണമേന്മ **ലോസ് ഫംഗ്ഷൻ** ℒ ഉപയോഗിച്ച് അളക്കുന്നു. താഴെ പറയുന്ന ലോസ് ഫംഗ്ഷനുകൾ സാധാരണ ഉപയോഗിക്കുന്നു:
|
||||
|
||||
* റെഗ്രഷൻ പ്രശ്നത്തിന്, ഒരു സംഖ്യ പ്രവചിക്കേണ്ടപ്പോൾ, **അബ്സല്യൂട്ട് എറർ** ∑<sub>i</sub>|f(x<sup>(i)</sup>)-y<sup>(i)</sup>| അല്ലെങ്കിൽ **സ്ക്വയർഡ് എറർ** ∑<sub>i</sub>(f(x<sup>(i)</sup>)-y<sup>(i)</sup>)<sup>2</sup> ഉപയോഗിക്കാം
|
||||
* ക്ലാസിഫിക്കേഷനിൽ, **0-1 ലോസ്** (മൂല്യത്തിൽ മോഡലിന്റെ **അക്കുറസി** പോലെയാണ്), അല്ലെങ്കിൽ **ലോജിസ്റ്റിക് ലോസ്** ഉപയോഗിക്കുന്നു.
|
||||
|
||||
ഒറ്റ ലെയർ പേഴ്സെപ്ട്രോണിൽ, *f* ഫംഗ്ഷൻ ഒരു ലീനിയർ ഫംഗ്ഷനായി നിർവചിച്ചിരുന്നു: *f(x)=wx+b* (ഇവിടെ *w* ഭാര മാട്രിക്സ്, *x* ഇൻപുട്ട് ഫീച്ചറുകളുടെ വെക്ടർ, *b* ബയാസ് വെക്ടർ). വ്യത്യസ്ത ന്യൂറൽ നെറ്റ്വർക്ക് ആർക്കിടെക്ചറുകൾക്കായി ഈ ഫംഗ്ഷൻ കൂടുതൽ സങ്കീർണ്ണമായ രൂപം സ്വീകരിക്കാം.
|
||||
|
||||
> ക്ലാസിഫിക്കേഷനിൽ, നെറ്റ്വർക്ക് ഔട്ട്പുട്ടായി അനുയോജ്യമായ ക്ലാസുകളുടെ പ്രൊബബിലിറ്റികൾ ലഭിക്കുന്നത് ആഗ്രഹകരമാണ്. ഏതെങ്കിലും സംഖ്യകളെ പ്രൊബബിലിറ്റികളായി മാറ്റാൻ (ഉദാ: ഔട്ട്പുട്ട് നോർമലൈസ് ചെയ്യാൻ), സാധാരണ **softmax** ഫംഗ്ഷൻ σ ഉപയോഗിക്കുന്നു, അതിനാൽ *f* ഫംഗ്ഷൻ *f(x)=σ(wx+b)* ആകുന്നു.
|
||||
|
||||
മുകളിൽ *f* നിർവചിക്കുമ്പോൾ, *w*യും *b*യും ചേർന്ന് **പാരാമീറ്ററുകൾ** θ=⟨*w,b*⟩ എന്ന് വിളിക്കുന്നു. ഡാറ്റാസെറ്റ് ⟨**X**,**Y**⟩ നൽകിയാൽ, പാരാമീറ്ററുകളുടെ ഫംഗ്ഷനായി മുഴുവൻ ഡാറ്റാസെറ്റിലെ മൊത്തം പിശക് കണക്കാക്കാം.
|
||||
|
||||
> ✅ **ന്യൂറൽ നെറ്റ്വർക്ക് പരിശീലനത്തിന്റെ ലക്ഷ്യം പാരാമീറ്ററുകൾ θ മാറ്റി പിശക് കുറയ്ക്കുകയാണ്**
|
||||
|
||||
## ഗ്രേഡിയന്റ് ഡിസെന്റ് ഒപ്റ്റിമൈസേഷൻ
|
||||
|
||||
ഫംഗ്ഷൻ ഒപ്റ്റിമൈസേഷനിൽ പ്രശസ്തമായ ഒരു രീതി **ഗ്രേഡിയന്റ് ഡിസെന്റ്** ആണ്. ആശയം: പാരാമീറ്ററുകളെ സംബന്ധിച്ചുള്ള ലോസ് ഫംഗ്ഷന്റെ ഡെരിവേറ്റീവ് (മൾട്ടി-ഡൈമെൻഷണൽ കേസിൽ **ഗ്രേഡിയന്റ്**) കണക്കാക്കി, പിശക് കുറയുന്ന വിധത്തിൽ പാരാമീറ്ററുകൾ മാറ്റുക. ഇത് ഫോർമലൈസ് ചെയ്യാം:
|
||||
|
||||
* പാരാമീറ്ററുകൾ യാദൃച്ഛിക മൂല്യങ്ങളാൽ ആരംഭിക്കുക w<sup>(0)</sup>, b<sup>(0)</sup>
|
||||
* താഴെ പറയുന്ന ഘട്ടം പലതവണ ആവർത്തിക്കുക:
|
||||
- w<sup>(i+1)</sup> = w<sup>(i)</sup>-η∂ℒ/∂w
|
||||
- b<sup>(i+1)</sup> = b<sup>(i)</sup>-η∂ℒ/∂b
|
||||
|
||||
പരിശീലന സമയത്ത്, ഒപ്റ്റിമൈസേഷൻ ഘട്ടങ്ങൾ മുഴുവൻ ഡാറ്റാസെറ്റിനെ പരിഗണിച്ച് കണക്കാക്കണം (ലോസ് എല്ലാ പരിശീലന സാമ്പിളുകളുടെയും സംഖ്യയായി കണക്കാക്കപ്പെടുന്നു). എന്നാൽ യാഥാർത്ഥ്യത്തിൽ, ഡാറ്റാസെറ്റിന്റെ ചെറിയ ഭാഗങ്ങൾ **മിനിബാച്ചുകൾ** എടുത്ത്, അവയുടെ അടിസ്ഥാനത്തിൽ ഗ്രേഡിയന്റുകൾ കണക്കാക്കുന്നു. ഓരോ തവണയും ഭാഗം യാദൃച്ഛികമായി തിരഞ്ഞെടുക്കപ്പെടുന്നതിനാൽ, ഈ രീതി **സ്റ്റോക്കാസ്റ്റിക് ഗ്രേഡിയന്റ് ഡിസെന്റ്** (SGD) എന്ന് വിളിക്കുന്നു.
|
||||
|
||||
## മൾട്ടി-ലെയർഡ് പേഴ്സെപ്ട്രോണുകളും ബാക്ക്പ്രൊപ്പഗേഷൻ
|
||||
|
||||
ഒറ്റ ലെയർ നെറ്റ്വർക്ക്, മുകളിൽ കാണിച്ചതുപോലെ, ലീനിയർ ആയി വേർതിരിക്കാൻ കഴിയുന്ന ക്ലാസുകൾ ക്ലാസിഫൈ ചെയ്യാൻ കഴിയും. കൂടുതൽ സമൃദ്ധമായ മോഡൽ നിർമ്മിക്കാൻ, നാം നെറ്റ്വർക്ക് ലെയറുകൾ ചേർക്കാം. ഗണിതപരമായി, ഫംഗ്ഷൻ *f* കൂടുതൽ സങ്കീർണ്ണമായ രൂപം സ്വീകരിക്കുകയും പല ഘട്ടങ്ങളായി കണക്കാക്കപ്പെടുകയും ചെയ്യും:
|
||||
* z<sub>1</sub>=w<sub>1</sub>x+b<sub>1</sub>
|
||||
* z<sub>2</sub>=w<sub>2</sub>α(z<sub>1</sub>)+b<sub>2</sub>
|
||||
* f = σ(z<sub>2</sub>)
|
||||
|
||||
ഇവിടെ, α ഒരു **നോൺ-ലീനിയർ ആക്ടിവേഷൻ ഫംഗ്ഷൻ**, σ softmax ഫംഗ്ഷൻ, പാരാമീറ്ററുകൾ θ=<*w<sub>1</sub>,b<sub>1</sub>,w<sub>2</sub>,b<sub>2</sub>*>.
|
||||
|
||||
ഗ്രേഡിയന്റ് ഡിസെന്റ് ആൽഗോരിതം അതേപോലെ തുടരും, പക്ഷേ ഗ്രേഡിയന്റുകൾ കണക്കാക്കുന്നത് കൂടുതൽ ബുദ്ധിമുട്ടുള്ളതാണ്. ചെയിൻ ഡിഫറൻഷ്യേഷൻ നിയമം ഉപയോഗിച്ച് ഡെരിവേറ്റീവുകൾ കണക്കാക്കാം:
|
||||
|
||||
* ∂ℒ/∂w<sub>2</sub> = (∂ℒ/∂σ)(∂σ/∂z<sub>2</sub>)(∂z<sub>2</sub>/∂w<sub>2</sub>)
|
||||
* ∂ℒ/∂w<sub>1</sub> = (∂ℒ/∂σ)(∂σ/∂z<sub>2</sub>)(∂z<sub>2</sub>/∂α)(∂α/∂z<sub>1</sub>)(∂z<sub>1</sub>/∂w<sub>1</sub>)
|
||||
|
||||
> ✅ പാരാമീറ്ററുകളെ സംബന്ധിച്ചുള്ള ലോസ് ഫംഗ്ഷന്റെ ഡെരിവേറ്റീവുകൾ കണക്കാക്കാൻ ചെയിൻ ഡിഫറൻഷ്യേഷൻ നിയമം ഉപയോഗിക്കുന്നു.
|
||||
|
||||
ഈ എല്ലാ വ്യഞ്ജനങ്ങളുടെയും ഇടത്തരം ഭാഗം ഒരുപോലെയാണ്, അതിനാൽ ലോസ് ഫംഗ്ഷനിൽ നിന്ന് "പിന്നിലേക്ക്" കണക്കുകൂട്ടി ഡെരിവേറ്റീവുകൾ എളുപ്പത്തിൽ കണ്ടെത്താം. അതുകൊണ്ട് മൾട്ടി-ലെയർഡ് പേഴ്സെപ്ട്രോൺ പരിശീലന രീതി **ബാക്ക്പ്രൊപ്പഗേഷൻ** അല്ലെങ്കിൽ 'ബാക്ക്പ്രോപ്പ്' എന്ന് വിളിക്കുന്നു.
|
||||
|
||||
<img alt="compute graph" src="../../../../../translated_images/ComputeGraphGrad.4626252c0de03507.ml.png"/>
|
||||
|
||||
> TODO: ചിത്രം സൈറ്റേഷൻ
|
||||
|
||||
> ✅ ബാക്ക്പ്രോപ്പ് നമുക്ക് നോട്ട്ബുക്കിൽ കൂടുതൽ വിശദമായി പഠിക്കാം.
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ഈ പാഠത്തിൽ, നാം നമ്മുടെ സ്വന്തം ന്യൂറൽ നെറ്റ്വർക്ക് ലൈബ്രറി നിർമ്മിച്ചു, അത് ഉപയോഗിച്ച് ലളിതമായ രണ്ട്-ഡൈമെൻഷണൽ ക്ലാസിഫിക്കേഷൻ ടാസ്ക് ചെയ്തു.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
സഹായക നോട്ട്ബുക്കിൽ, നിങ്ങൾ മൾട്ടി-ലെയർഡ് പേഴ്സെപ്ട്രോണുകൾ നിർമ്മിക്കുകയും പരിശീലിപ്പിക്കുകയും ചെയ്യാനുള്ള നിങ്ങളുടെ സ്വന്തം ഫ്രെയിംവർക്ക് നടപ്പിലാക്കും. ആധുനിക ന്യൂറൽ നെറ്റ്വർക്കുകൾ എങ്ങനെ പ്രവർത്തിക്കുന്നുവെന്ന് വിശദമായി കാണാൻ കഴിയും.
|
||||
|
||||
[OwnFramework](OwnFramework.ipynb) നോട്ട്ബുക്ക് തുറന്ന് അതിലൂടെ പ്രവർത്തിക്കുക.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/8)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
ബാക്ക്പ്രൊപ്പഗേഷൻ AI, ML-ൽ സാധാരണ ഉപയോഗിക്കുന്ന ആൽഗോരിതമാണ്, [കൂടുതൽ വിശദമായി](https://wikipedia.org/wiki/Backpropagation) പഠിക്കാൻ ഉചിതമാണ്.
|
||||
|
||||
## [അസൈൻമെന്റ്](lab/README.md)
|
||||
|
||||
ഈ ലാബിൽ, നിങ്ങൾ ഈ പാഠത്തിൽ നിർമ്മിച്ച ഫ്രെയിംവർക്ക് ഉപയോഗിച്ച് MNIST ഹാൻഡ്റിറ്റൻ ഡിജിറ്റ് ക്ലാസിഫിക്കേഷൻ പരിഹരിക്കണം.
|
||||
|
||||
* [നിർദ്ദേശങ്ങൾ](lab/README.md)
|
||||
* [നോട്ട്ബുക്ക്](lab/MyFW_MNIST.ipynb)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,136 +1,136 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "ddd216f558a255260a9374008002c971",
|
||||
"translation_date": "2025-11-25T21:47:34+00:00",
|
||||
"source_file": "lessons/3-NeuralNetworks/05-Frameworks/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ന്യൂറൽ നെറ്റ്വർക്ക് ഫ്രെയിംവർക്കുകൾ
|
||||
|
||||
നാം ഇതിനകം പഠിച്ചതുപോലെ, ന്യൂറൽ നെറ്റ്വർക്ക് ഫലപ്രദമായി പരിശീലിപ്പിക്കാൻ രണ്ട് കാര്യങ്ങൾ ചെയ്യേണ്ടതുണ്ട്:
|
||||
|
||||
* ടെൻസറുകളിൽ പ്രവർത്തിക്കുക, ഉദാ: ഗുണനം, കൂട്ടൽ, സിഗ്മോയിഡ് അല്ലെങ്കിൽ സോഫ്റ്റ്മാക്സ് പോലുള്ള ചില ഫംഗ്ഷനുകൾ കണക്കാക്കുക
|
||||
* ഗ്രേഡിയന്റുകൾ കണക്കാക്കുക, ഗ്രേഡിയന്റ് ഡിസെന്റ് ഓപ്റ്റിമൈസേഷൻ നടത്താൻ
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/9)
|
||||
|
||||
`numpy` ലൈബ്രറി ആദ്യ ഭാഗം ചെയ്യാൻ കഴിയും, പക്ഷേ ഗ്രേഡിയന്റുകൾ കണക്കാക്കാൻ ഒരു സംവിധാനം വേണം. [നമ്മുടെ ഫ്രെയിംവർക്കിൽ](../04-OwnFramework/OwnFramework.ipynb) മുമ്പത്തെ സെക്ഷനിൽ വികസിപ്പിച്ചപ്പോൾ, `backward` മെത്തഡിനുള്ളിൽ എല്ലാ ഡെറിവേറ്റീവ് ഫംഗ്ഷനുകളും കൈയോടെ പ്രോഗ്രാം ചെയ്യേണ്ടി വന്നു, അത് ബാക്ക്പ്രൊപ്പഗേഷൻ ചെയ്യുന്നു.理想മായി, ഒരു ഫ്രെയിംവർക്ക് നമുക്ക് നിർവചിക്കാവുന്ന *ഏതെങ്കിലും പ്രകടനത്തിന്റെ* ഗ്രേഡിയന്റുകൾ കണക്കാക്കാനുള്ള അവസരം നൽകണം.
|
||||
|
||||
മറ്റൊരു പ്രധാന കാര്യം GPU പോലുള്ള പ്രത്യേക കംപ്യൂട്ട് യൂണിറ്റുകളിൽ കണക്കുകൾ നടത്താൻ കഴിയണം, ഉദാ: [TPU](https://en.wikipedia.org/wiki/Tensor_Processing_Unit). ഡീപ്പ് ന്യൂറൽ നെറ്റ്വർക്ക് പരിശീലനം *വളരെ* കണക്കുകൾ ആവശ്യപ്പെടുന്നു, അതിനാൽ GPU-കളിൽ കണക്കുകൾ പാരലലൈസ് ചെയ്യാൻ കഴിയുന്നത് വളരെ പ്രധാനമാണ്.
|
||||
|
||||
> ✅ 'പാരലലൈസ്' എന്ന പദം കണക്കുകൾ പല ഉപകരണങ്ങളിലായി വിതരണം ചെയ്യുക എന്നർത്ഥം.
|
||||
|
||||
ഇപ്പോൾ ഏറ്റവും ജനപ്രിയമായ രണ്ട് ന്യൂറൽ ഫ്രെയിംവർക്കുകൾ: [TensorFlow](http://TensorFlow.org)യും [PyTorch](https://pytorch.org/)ഉം. ഇരുവരും CPU-യിലും GPU-യിലും ടെൻസറുകളുമായി പ്രവർത്തിക്കാൻ ലോ-ലെവൽ API നൽകുന്നു. ലോ-ലെവൽ API-യുടെ മുകളിൽ, ഉയർന്ന-ലെവൽ API-കളും ഉണ്ട്, അവയാണ് [Keras](https://keras.io/)യും [PyTorch Lightning](https://pytorchlightning.ai/)യും.
|
||||
|
||||
ലോ-ലെവൽ API | [TensorFlow](http://TensorFlow.org) | [PyTorch](https://pytorch.org/)
|
||||
--------------|-------------------------------------|--------------------------------
|
||||
ഉയർന്ന-ലെവൽ API| [Keras](https://keras.io/) | [PyTorch Lightning](https://pytorchlightning.ai/)
|
||||
|
||||
**ലോ-ലെവൽ APIകൾ** ഇരുവിധ ഫ്രെയിംവർക്കുകളിലും **കമ്പ്യൂട്ടേഷണൽ ഗ്രാഫുകൾ** നിർമ്മിക്കാൻ അനുവദിക്കുന്നു. ഈ ഗ്രാഫ് നൽകിയ ഇൻപുട്ട് പാരാമീറ്ററുകളുമായി ഔട്ട്പുട്ട് (സാധാരണ ലോസ്സ് ഫംഗ്ഷൻ) എങ്ങനെ കണക്കാക്കാമെന്ന് നിർവചിക്കുന്നു, GPU ലഭ്യമെങ്കിൽ അവിടെ കണക്കാക്കാൻ പുഷ് ചെയ്യാം. ഈ കമ്പ്യൂട്ടേഷണൽ ഗ്രാഫ് വ്യത്യാസപ്പെടുത്താനും ഗ്രേഡിയന്റുകൾ കണക്കാക്കാനും ഫംഗ്ഷനുകൾ ഉണ്ട്, അവ മോഡൽ പാരാമീറ്ററുകൾ ഓപ്റ്റിമൈസ് ചെയ്യാൻ ഉപയോഗിക്കാം.
|
||||
|
||||
**ഉയർന്ന-ലെവൽ APIകൾ** ന്യൂറൽ നെറ്റ്വർക്ക്കളെ **ലെയറുകളുടെ ശ്രേണി** ആയി പരിഗണിച്ച്, പല ന്യൂറൽ നെറ്റ്വർക്ക് നിർമ്മാണം വളരെ എളുപ്പമാക്കുന്നു. മോഡൽ പരിശീലിപ്പിക്കാൻ സാധാരണയായി ഡാറ്റ തയ്യാറാക്കി `fit` ഫംഗ്ഷൻ വിളിക്കണം.
|
||||
|
||||
ഉയർന്ന-ലെവൽ API സാധാരണ ന്യൂറൽ നെറ്റ്വർക്ക്കൾ വേഗത്തിൽ നിർമ്മിക്കാൻ സഹായിക്കുന്നു, പല വിശദാംശങ്ങൾക്കായി ആശങ്കപ്പെടേണ്ടതില്ല. അതേസമയം, ലോ-ലെവൽ API പരിശീലന പ്രക്രിയയിൽ കൂടുതൽ നിയന്ത്രണം നൽകുന്നു, അതുകൊണ്ട് ഗവേഷണത്തിൽ പുതിയ ന്യൂറൽ നെറ്റ്വർക്ക് ആർക്കിടെക്ചറുകളുമായി പ്രവർത്തിക്കുമ്പോൾ ഇത് ഉപയോഗിക്കുന്നു.
|
||||
|
||||
രണ്ടു APIകളും ചേർന്ന് ഉപയോഗിക്കാമെന്ന് മനസ്സിലാക്കുന്നത് പ്രധാനമാണ്, ഉദാ: ലോ-ലെവൽ API ഉപയോഗിച്ച് നിങ്ങളുടെ സ്വന്തം ലെയർ ആർക്കിടെക്ചർ വികസിപ്പിച്ച്, അത് ഉയർന്ന-ലെവൽ API ഉപയോഗിച്ച് നിർമ്മിച്ച വലിയ നെറ്റ്വർക്കിൽ ഉൾപ്പെടുത്താം. അല്ലെങ്കിൽ, ഉയർന്ന-ലെവൽ API ഉപയോഗിച്ച് ലെയറുകളുടെ ശ്രേണി നിർവചിച്ച്, നിങ്ങളുടെ സ്വന്തം ലോ-ലെവൽ ട്രെയിനിംഗ് ലൂപ്പ് ഉപയോഗിച്ച് ഓപ്റ്റിമൈസേഷൻ നടത്താം. ഇരുവരും അടിസ്ഥാന ആശയങ്ങൾ പങ്കുവെക്കുന്നു, കൂടെ നല്ല രീതിയിൽ പ്രവർത്തിക്കാൻ രൂപകൽപ്പന ചെയ്തിരിക്കുന്നു.
|
||||
|
||||
## പഠനം
|
||||
|
||||
ഈ കോഴ്സിൽ, PyTorchക്കും TensorFlowക്കും വേണ്ടിയുള്ള ഉള്ളടക്കം കൂടുതലായി നൽകുന്നു. നിങ്ങൾക്ക് ഇഷ്ടമുള്ള ഫ്രെയിംവർക്ക് തിരഞ്ഞെടുക്കാം, അതിന്റെ നോട്ട്ബുക്കുകൾ മാത്രം പഠിക്കാം. ഏത് ഫ്രെയിംവർക്ക് തിരഞ്ഞെടുക്കണമെന്ന് ഉറപ്പില്ലെങ്കിൽ, ഇന്റർനെറ്റിൽ **PyTorch vs. TensorFlow** സംബന്ധിച്ച ചർച്ചകൾ വായിക്കുക. രണ്ടും നോക്കി മനസ്സിലാക്കാനും കഴിയും.
|
||||
|
||||
സാധ്യമായിടത്ത്, എളുപ്പത്തിനായി ഉയർന്ന-ലെവൽ APIകൾ ഉപയോഗിക്കും. എന്നാൽ, ന്യൂറൽ നെറ്റ്വർക്ക് അടിസ്ഥാനത്തിൽ എങ്ങനെ പ്രവർത്തിക്കുന്നുവെന്ന് മനസ്സിലാക്കുന്നത് പ്രധാനമാണെന്ന് ഞങ്ങൾ വിശ്വസിക്കുന്നു, അതിനാൽ തുടക്കത്തിൽ ലോ-ലെവൽ APIയും ടെൻസറുകളും ഉപയോഗിച്ച് തുടങ്ങുന്നു. എന്നാൽ വേഗത്തിൽ തുടങ്ങാൻ ആഗ്രഹിക്കുന്നവർക്ക് ഈ വിശദാംശങ്ങൾ ഒഴിവാക്കി ഉയർന്ന-ലെവൽ API നോട്ട്ബുക്കുകളിലേക്ക് നേരിട്ട് പോകാം.
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: ഫ്രെയിംവർക്കുകൾ
|
||||
|
||||
താഴെ കൊടുത്ത നോട്ട്ബുക്കുകളിൽ പഠനം തുടരുക:
|
||||
|
||||
ലോ-ലെവൽ API | [TensorFlow+Keras നോട്ട്ബുക്ക്](IntroKerasTF.ipynb) | [PyTorch](IntroPyTorch.ipynb)
|
||||
--------------|-------------------------------------|--------------------------------
|
||||
ഉയർന്ന-ലെവൽ API| [Keras](IntroKeras.ipynb) | *PyTorch Lightning*
|
||||
|
||||
ഫ്രെയിംവർക്കുകൾ നന്നായി പഠിച്ച ശേഷം, ഓവർഫിറ്റിങ്ങിന്റെ ആശയം വീണ്ടും പരിശോധിക്കാം.
|
||||
|
||||
# ഓവർഫിറ്റിംഗ്
|
||||
|
||||
ഓവർഫിറ്റിംഗ് മെഷീൻ ലേണിങ്ങിൽ വളരെ പ്രധാനപ്പെട്ട ആശയമാണ്, ശരിയായി മനസ്സിലാക്കുന്നത് അത്യന്താപേക്ഷിതമാണ്!
|
||||
|
||||
5 പോയിന്റുകൾ (ഗ്രാഫുകളിൽ `x` ആയി പ്രതിനിധീകരിച്ചിരിക്കുന്നു) ഏകീകരിക്കുന്ന പ്രശ്നം പരിഗണിക്കൂ:
|
||||
|
||||
 | 
|
||||
-------------------------|--------------------------
|
||||
**രേഖീയ മോഡൽ, 2 പാരാമീറ്ററുകൾ** | **അരേഖീയ മോഡൽ, 7 പാരാമീറ്ററുകൾ**
|
||||
പരിശീലന പിശക് = 5.3 | പരിശീലന പിശക് = 0
|
||||
വാലിഡേഷൻ പിശക് = 5.1 | വാലിഡേഷൻ പിശക് = 20
|
||||
|
||||
* ഇടത്തരം, നല്ല നേരിയ രേഖ ഏകീകരണം കാണാം. പാരാമീറ്ററുകളുടെ എണ്ണം യോജിച്ചതിനാൽ, മോഡൽ പോയിന്റുകളുടെ വിതരണത്തിന്റെ ആശയം ശരിയായി പിടിച്ചെടുത്തു.
|
||||
* വലത്തരം, മോഡൽ വളരെ ശക്തമാണ്. 5 പോയിന്റുകൾ മാത്രമുള്ളപ്പോൾ 7 പാരാമീറ്ററുള്ള മോഡൽ എല്ലാ പോയിന്റുകളും കടക്കാൻ ക്രമീകരിക്കാം, അതിനാൽ പരിശീലന പിശക് 0 ആകുന്നു. എന്നാൽ ഇത് ഡാറ്റയുടെ ശരിയായ പാറ്റേൺ മനസ്സിലാക്കാൻ തടസ്സമാകുന്നു, അതുകൊണ്ട് വാലിഡേഷൻ പിശക് വളരെ ഉയർന്നതാണ്.
|
||||
|
||||
മോഡലിന്റെ സമൃദ്ധിയും (പാരാമീറ്ററുകളുടെ എണ്ണം) പരിശീലന സാമ്പിളുകളുടെ എണ്ണവും ശരിയായ ബാലൻസ് കണ്ടെത്തുന്നത് വളരെ പ്രധാനമാണ്.
|
||||
|
||||
## ഓവർഫിറ്റിംഗ് സംഭവിക്കുന്ന കാരണങ്ങൾ
|
||||
|
||||
* പരിശീലന ഡാറ്റ കുറവായിരിക്കുക
|
||||
* മോഡൽ വളരെ ശക്തമായിരിക്കുക
|
||||
* ഇൻപുട്ട് ഡാറ്റയിൽ ശബ്ദം (നോയിസ്) കൂടുതലായിരിക്കുക
|
||||
|
||||
## ഓവർഫിറ്റിംഗ് കണ്ടെത്താനുള്ള മാർഗങ്ങൾ
|
||||
|
||||
മുകളിൽ കാണിച്ച ഗ്രാഫിൽ നിന്ന്, ഓവർഫിറ്റിംഗ് വളരെ കുറഞ്ഞ പരിശീലന പിശക്, കൂടിയ വാലിഡേഷൻ പിശക് എന്നിവയാൽ കണ്ടെത്താം. സാധാരണയായി പരിശീലന സമയത്ത് പരിശീലനവും വാലിഡേഷനും പിശകുകൾ കുറയാൻ തുടങ്ങും, പിന്നീട് വാലിഡേഷൻ പിശക് കുറയുന്നത് നിർത്തി ഉയരാൻ തുടങ്ങും. ഇത് ഓവർഫിറ്റിംഗിന്റെ സൂചനയാണ്, ഈ ഘട്ടത്തിൽ പരിശീലനം നിർത്തേണ്ടതായിരിക്കും (അല്ലെങ്കിൽ മോഡലിന്റെ സ്നാപ്ഷോട്ട് എടുക്കാം).
|
||||
|
||||

|
||||
|
||||
## ഓവർഫിറ്റിംഗ് തടയാനുള്ള മാർഗങ്ങൾ
|
||||
|
||||
ഓവർഫിറ്റിംഗ് സംഭവിക്കുന്നതായി കാണുമ്പോൾ, താഴെ പറയുന്നവയിൽ ഒന്നോ അതിലധികമോ ചെയ്യാം:
|
||||
|
||||
* പരിശീലന ഡാറ്റയുടെ അളവ് വർദ്ധിപ്പിക്കുക
|
||||
* മോഡലിന്റെ സങ്കീർണ്ണത കുറയ്ക്കുക
|
||||
* [റഗുലറൈസേഷൻ സാങ്കേതികവിദ്യ](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md)കൾ ഉപയോഗിക്കുക, ഉദാ: [ഡ്രോപ്പൗട്ട്](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md#Dropout), പിന്നീട് പരിഗണിക്കും.
|
||||
|
||||
## ഓവർഫിറ്റിംഗ്, ബയാസ്-വേറിയൻസ് ട്രേഡ്-ഓഫ്
|
||||
|
||||
ഓവർഫിറ്റിംഗ് സ്റ്റാറ്റിസ്റ്റിക്സിലെ ഒരു പൊതുവായ പ്രശ്നമായ [ബയാസ്-വേറിയൻസ് ട്രേഡ്-ഓഫ്](https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff)യുടെ ഒരു ഉദാഹരണമാണ്. മോഡലിലെ പിശകുകളുടെ സ്രോതസ്സുകൾ പരിഗണിക്കുമ്പോൾ, രണ്ട് തരത്തിലുള്ള പിശകുകൾ കാണാം:
|
||||
|
||||
* **ബയാസ് പിശകുകൾ**: പരിശീലന ഡാറ്റയുടെ ബന്ധം മോഡൽ ശരിയായി പിടിച്ചെടുക്കാൻ കഴിയാത്തതിനാൽ ഉണ്ടാകുന്നു. ഇത് മോഡൽ ശക്തിയില്ലാത്തതിനാലാകാം (**അണ്ടർഫിറ്റിംഗ്**).
|
||||
* **വേറിയൻസ് പിശകുകൾ**: മോഡൽ ഇൻപുട്ടിലെ ശബ്ദം പകരം അർത്ഥമുള്ള ബന്ധം പകരാൻ ശ്രമിക്കുന്നതിനാൽ ഉണ്ടാകുന്നു (**ഓവർഫിറ്റിംഗ്**).
|
||||
|
||||
പരിശീലന സമയത്ത്, ബയാസ് പിശക് കുറയുകയും (മോഡൽ ഡാറ്റ ഏകീകരിക്കാൻ പഠിക്കുന്നു), വേറിയൻസ് പിശക് ഉയരുകയും ചെയ്യും. ഓവർഫിറ്റിംഗ് തടയാൻ പരിശീലനം നിർത്തുന്നത് (മാനുവലായി അല്ലെങ്കിൽ റഗുലറൈസേഷൻ കൊണ്ടു) പ്രധാനമാണ്.
|
||||
|
||||
## സംക്ഷേപം
|
||||
|
||||
ഈ പാഠത്തിൽ, TensorFlow, PyTorch എന്നീ രണ്ട് ജനപ്രിയ AI ഫ്രെയിംവർക്കുകളുടെ വിവിധ APIകളുടെ വ്യത്യാസങ്ങൾ പഠിച്ചു. കൂടാതെ, വളരെ പ്രധാനപ്പെട്ട ഒരു വിഷയം, ഓവർഫിറ്റിംഗ്, മനസ്സിലാക്കി.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
സഹായക നോട്ട്ബുക്കുകളിൽ താഴെ 'ടാസ്കുകൾ' കാണാം; നോട്ട്ബുക്കുകൾ വഴി പഠനം തുടരുകയും ടാസ്കുകൾ പൂർത്തിയാക്കുകയും ചെയ്യുക.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/10)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
താഴെ പറയുന്ന വിഷയങ്ങളിൽ കുറച്ച് റിസർച്ച് ചെയ്യുക:
|
||||
|
||||
- TensorFlow
|
||||
- PyTorch
|
||||
- ഓവർഫിറ്റിംഗ്
|
||||
|
||||
താഴെ പറയുന്ന ചോദ്യങ്ങൾ സ്വയം ചോദിക്കുക:
|
||||
|
||||
- TensorFlow-നും PyTorch-നും ഇടയിലുള്ള വ്യത്യാസം എന്താണ്?
|
||||
- ഓവർഫിറ്റിംഗും അണ്ടർഫിറ്റിംഗും തമ്മിലുള്ള വ്യത്യാസം എന്താണ്?
|
||||
|
||||
## [അസൈൻമെന്റ്](lab/README.md)
|
||||
|
||||
ഈ ലാബിൽ, PyTorch അല്ലെങ്കിൽ TensorFlow ഉപയോഗിച്ച് സിംഗിൾ-ലെയർ, മൾട്ടി-ലെയർ ഫുൾ-കണക്ടഡ് നെറ്റ്വർക്ക് ഉപയോഗിച്ച് രണ്ട് ക്ലാസിഫിക്കേഷൻ പ്രശ്നങ്ങൾ പരിഹരിക്കാൻ ആവശ്യപ്പെടുന്നു.
|
||||
|
||||
* [നിർദ്ദേശങ്ങൾ](lab/README.md)
|
||||
* [നോട്ട്ബുക്ക്](lab/LabFrameworks.ipynb)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "ddd216f558a255260a9374008002c971",
|
||||
"translation_date": "2025-11-25T21:47:34+00:00",
|
||||
"source_file": "lessons/3-NeuralNetworks/05-Frameworks/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ന്യൂറൽ നെറ്റ്വർക്ക് ഫ്രെയിംവർക്കുകൾ
|
||||
|
||||
നാം ഇതിനകം പഠിച്ചതുപോലെ, ന്യൂറൽ നെറ്റ്വർക്ക് ഫലപ്രദമായി പരിശീലിപ്പിക്കാൻ രണ്ട് കാര്യങ്ങൾ ചെയ്യേണ്ടതുണ്ട്:
|
||||
|
||||
* ടെൻസറുകളിൽ പ്രവർത്തിക്കുക, ഉദാ: ഗുണനം, കൂട്ടൽ, സിഗ്മോയിഡ് അല്ലെങ്കിൽ സോഫ്റ്റ്മാക്സ് പോലുള്ള ചില ഫംഗ്ഷനുകൾ കണക്കാക്കുക
|
||||
* ഗ്രേഡിയന്റുകൾ കണക്കാക്കുക, ഗ്രേഡിയന്റ് ഡിസെന്റ് ഓപ്റ്റിമൈസേഷൻ നടത്താൻ
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/9)
|
||||
|
||||
`numpy` ലൈബ്രറി ആദ്യ ഭാഗം ചെയ്യാൻ കഴിയും, പക്ഷേ ഗ്രേഡിയന്റുകൾ കണക്കാക്കാൻ ഒരു സംവിധാനം വേണം. [നമ്മുടെ ഫ്രെയിംവർക്കിൽ](../04-OwnFramework/OwnFramework.ipynb) മുമ്പത്തെ സെക്ഷനിൽ വികസിപ്പിച്ചപ്പോൾ, `backward` മെത്തഡിനുള്ളിൽ എല്ലാ ഡെറിവേറ്റീവ് ഫംഗ്ഷനുകളും കൈയോടെ പ്രോഗ്രാം ചെയ്യേണ്ടി വന്നു, അത് ബാക്ക്പ്രൊപ്പഗേഷൻ ചെയ്യുന്നു.理想മായി, ഒരു ഫ്രെയിംവർക്ക് നമുക്ക് നിർവചിക്കാവുന്ന *ഏതെങ്കിലും പ്രകടനത്തിന്റെ* ഗ്രേഡിയന്റുകൾ കണക്കാക്കാനുള്ള അവസരം നൽകണം.
|
||||
|
||||
മറ്റൊരു പ്രധാന കാര്യം GPU പോലുള്ള പ്രത്യേക കംപ്യൂട്ട് യൂണിറ്റുകളിൽ കണക്കുകൾ നടത്താൻ കഴിയണം, ഉദാ: [TPU](https://en.wikipedia.org/wiki/Tensor_Processing_Unit). ഡീപ്പ് ന്യൂറൽ നെറ്റ്വർക്ക് പരിശീലനം *വളരെ* കണക്കുകൾ ആവശ്യപ്പെടുന്നു, അതിനാൽ GPU-കളിൽ കണക്കുകൾ പാരലലൈസ് ചെയ്യാൻ കഴിയുന്നത് വളരെ പ്രധാനമാണ്.
|
||||
|
||||
> ✅ 'പാരലലൈസ്' എന്ന പദം കണക്കുകൾ പല ഉപകരണങ്ങളിലായി വിതരണം ചെയ്യുക എന്നർത്ഥം.
|
||||
|
||||
ഇപ്പോൾ ഏറ്റവും ജനപ്രിയമായ രണ്ട് ന്യൂറൽ ഫ്രെയിംവർക്കുകൾ: [TensorFlow](http://TensorFlow.org)യും [PyTorch](https://pytorch.org/)ഉം. ഇരുവരും CPU-യിലും GPU-യിലും ടെൻസറുകളുമായി പ്രവർത്തിക്കാൻ ലോ-ലെവൽ API നൽകുന്നു. ലോ-ലെവൽ API-യുടെ മുകളിൽ, ഉയർന്ന-ലെവൽ API-കളും ഉണ്ട്, അവയാണ് [Keras](https://keras.io/)യും [PyTorch Lightning](https://pytorchlightning.ai/)യും.
|
||||
|
||||
ലോ-ലെവൽ API | [TensorFlow](http://TensorFlow.org) | [PyTorch](https://pytorch.org/)
|
||||
--------------|-------------------------------------|--------------------------------
|
||||
ഉയർന്ന-ലെവൽ API| [Keras](https://keras.io/) | [PyTorch Lightning](https://pytorchlightning.ai/)
|
||||
|
||||
**ലോ-ലെവൽ APIകൾ** ഇരുവിധ ഫ്രെയിംവർക്കുകളിലും **കമ്പ്യൂട്ടേഷണൽ ഗ്രാഫുകൾ** നിർമ്മിക്കാൻ അനുവദിക്കുന്നു. ഈ ഗ്രാഫ് നൽകിയ ഇൻപുട്ട് പാരാമീറ്ററുകളുമായി ഔട്ട്പുട്ട് (സാധാരണ ലോസ്സ് ഫംഗ്ഷൻ) എങ്ങനെ കണക്കാക്കാമെന്ന് നിർവചിക്കുന്നു, GPU ലഭ്യമെങ്കിൽ അവിടെ കണക്കാക്കാൻ പുഷ് ചെയ്യാം. ഈ കമ്പ്യൂട്ടേഷണൽ ഗ്രാഫ് വ്യത്യാസപ്പെടുത്താനും ഗ്രേഡിയന്റുകൾ കണക്കാക്കാനും ഫംഗ്ഷനുകൾ ഉണ്ട്, അവ മോഡൽ പാരാമീറ്ററുകൾ ഓപ്റ്റിമൈസ് ചെയ്യാൻ ഉപയോഗിക്കാം.
|
||||
|
||||
**ഉയർന്ന-ലെവൽ APIകൾ** ന്യൂറൽ നെറ്റ്വർക്ക്കളെ **ലെയറുകളുടെ ശ്രേണി** ആയി പരിഗണിച്ച്, പല ന്യൂറൽ നെറ്റ്വർക്ക് നിർമ്മാണം വളരെ എളുപ്പമാക്കുന്നു. മോഡൽ പരിശീലിപ്പിക്കാൻ സാധാരണയായി ഡാറ്റ തയ്യാറാക്കി `fit` ഫംഗ്ഷൻ വിളിക്കണം.
|
||||
|
||||
ഉയർന്ന-ലെവൽ API സാധാരണ ന്യൂറൽ നെറ്റ്വർക്ക്കൾ വേഗത്തിൽ നിർമ്മിക്കാൻ സഹായിക്കുന്നു, പല വിശദാംശങ്ങൾക്കായി ആശങ്കപ്പെടേണ്ടതില്ല. അതേസമയം, ലോ-ലെവൽ API പരിശീലന പ്രക്രിയയിൽ കൂടുതൽ നിയന്ത്രണം നൽകുന്നു, അതുകൊണ്ട് ഗവേഷണത്തിൽ പുതിയ ന്യൂറൽ നെറ്റ്വർക്ക് ആർക്കിടെക്ചറുകളുമായി പ്രവർത്തിക്കുമ്പോൾ ഇത് ഉപയോഗിക്കുന്നു.
|
||||
|
||||
രണ്ടു APIകളും ചേർന്ന് ഉപയോഗിക്കാമെന്ന് മനസ്സിലാക്കുന്നത് പ്രധാനമാണ്, ഉദാ: ലോ-ലെവൽ API ഉപയോഗിച്ച് നിങ്ങളുടെ സ്വന്തം ലെയർ ആർക്കിടെക്ചർ വികസിപ്പിച്ച്, അത് ഉയർന്ന-ലെവൽ API ഉപയോഗിച്ച് നിർമ്മിച്ച വലിയ നെറ്റ്വർക്കിൽ ഉൾപ്പെടുത്താം. അല്ലെങ്കിൽ, ഉയർന്ന-ലെവൽ API ഉപയോഗിച്ച് ലെയറുകളുടെ ശ്രേണി നിർവചിച്ച്, നിങ്ങളുടെ സ്വന്തം ലോ-ലെവൽ ട്രെയിനിംഗ് ലൂപ്പ് ഉപയോഗിച്ച് ഓപ്റ്റിമൈസേഷൻ നടത്താം. ഇരുവരും അടിസ്ഥാന ആശയങ്ങൾ പങ്കുവെക്കുന്നു, കൂടെ നല്ല രീതിയിൽ പ്രവർത്തിക്കാൻ രൂപകൽപ്പന ചെയ്തിരിക്കുന്നു.
|
||||
|
||||
## പഠനം
|
||||
|
||||
ഈ കോഴ്സിൽ, PyTorchക്കും TensorFlowക്കും വേണ്ടിയുള്ള ഉള്ളടക്കം കൂടുതലായി നൽകുന്നു. നിങ്ങൾക്ക് ഇഷ്ടമുള്ള ഫ്രെയിംവർക്ക് തിരഞ്ഞെടുക്കാം, അതിന്റെ നോട്ട്ബുക്കുകൾ മാത്രം പഠിക്കാം. ഏത് ഫ്രെയിംവർക്ക് തിരഞ്ഞെടുക്കണമെന്ന് ഉറപ്പില്ലെങ്കിൽ, ഇന്റർനെറ്റിൽ **PyTorch vs. TensorFlow** സംബന്ധിച്ച ചർച്ചകൾ വായിക്കുക. രണ്ടും നോക്കി മനസ്സിലാക്കാനും കഴിയും.
|
||||
|
||||
സാധ്യമായിടത്ത്, എളുപ്പത്തിനായി ഉയർന്ന-ലെവൽ APIകൾ ഉപയോഗിക്കും. എന്നാൽ, ന്യൂറൽ നെറ്റ്വർക്ക് അടിസ്ഥാനത്തിൽ എങ്ങനെ പ്രവർത്തിക്കുന്നുവെന്ന് മനസ്സിലാക്കുന്നത് പ്രധാനമാണെന്ന് ഞങ്ങൾ വിശ്വസിക്കുന്നു, അതിനാൽ തുടക്കത്തിൽ ലോ-ലെവൽ APIയും ടെൻസറുകളും ഉപയോഗിച്ച് തുടങ്ങുന്നു. എന്നാൽ വേഗത്തിൽ തുടങ്ങാൻ ആഗ്രഹിക്കുന്നവർക്ക് ഈ വിശദാംശങ്ങൾ ഒഴിവാക്കി ഉയർന്ന-ലെവൽ API നോട്ട്ബുക്കുകളിലേക്ക് നേരിട്ട് പോകാം.
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: ഫ്രെയിംവർക്കുകൾ
|
||||
|
||||
താഴെ കൊടുത്ത നോട്ട്ബുക്കുകളിൽ പഠനം തുടരുക:
|
||||
|
||||
ലോ-ലെവൽ API | [TensorFlow+Keras നോട്ട്ബുക്ക്](IntroKerasTF.ipynb) | [PyTorch](IntroPyTorch.ipynb)
|
||||
--------------|-------------------------------------|--------------------------------
|
||||
ഉയർന്ന-ലെവൽ API| [Keras](IntroKeras.ipynb) | *PyTorch Lightning*
|
||||
|
||||
ഫ്രെയിംവർക്കുകൾ നന്നായി പഠിച്ച ശേഷം, ഓവർഫിറ്റിങ്ങിന്റെ ആശയം വീണ്ടും പരിശോധിക്കാം.
|
||||
|
||||
# ഓവർഫിറ്റിംഗ്
|
||||
|
||||
ഓവർഫിറ്റിംഗ് മെഷീൻ ലേണിങ്ങിൽ വളരെ പ്രധാനപ്പെട്ട ആശയമാണ്, ശരിയായി മനസ്സിലാക്കുന്നത് അത്യന്താപേക്ഷിതമാണ്!
|
||||
|
||||
5 പോയിന്റുകൾ (ഗ്രാഫുകളിൽ `x` ആയി പ്രതിനിധീകരിച്ചിരിക്കുന്നു) ഏകീകരിക്കുന്ന പ്രശ്നം പരിഗണിക്കൂ:
|
||||
|
||||
 | 
|
||||
-------------------------|--------------------------
|
||||
**രേഖീയ മോഡൽ, 2 പാരാമീറ്ററുകൾ** | **അരേഖീയ മോഡൽ, 7 പാരാമീറ്ററുകൾ**
|
||||
പരിശീലന പിശക് = 5.3 | പരിശീലന പിശക് = 0
|
||||
വാലിഡേഷൻ പിശക് = 5.1 | വാലിഡേഷൻ പിശക് = 20
|
||||
|
||||
* ഇടത്തരം, നല്ല നേരിയ രേഖ ഏകീകരണം കാണാം. പാരാമീറ്ററുകളുടെ എണ്ണം യോജിച്ചതിനാൽ, മോഡൽ പോയിന്റുകളുടെ വിതരണത്തിന്റെ ആശയം ശരിയായി പിടിച്ചെടുത്തു.
|
||||
* വലത്തരം, മോഡൽ വളരെ ശക്തമാണ്. 5 പോയിന്റുകൾ മാത്രമുള്ളപ്പോൾ 7 പാരാമീറ്ററുള്ള മോഡൽ എല്ലാ പോയിന്റുകളും കടക്കാൻ ക്രമീകരിക്കാം, അതിനാൽ പരിശീലന പിശക് 0 ആകുന്നു. എന്നാൽ ഇത് ഡാറ്റയുടെ ശരിയായ പാറ്റേൺ മനസ്സിലാക്കാൻ തടസ്സമാകുന്നു, അതുകൊണ്ട് വാലിഡേഷൻ പിശക് വളരെ ഉയർന്നതാണ്.
|
||||
|
||||
മോഡലിന്റെ സമൃദ്ധിയും (പാരാമീറ്ററുകളുടെ എണ്ണം) പരിശീലന സാമ്പിളുകളുടെ എണ്ണവും ശരിയായ ബാലൻസ് കണ്ടെത്തുന്നത് വളരെ പ്രധാനമാണ്.
|
||||
|
||||
## ഓവർഫിറ്റിംഗ് സംഭവിക്കുന്ന കാരണങ്ങൾ
|
||||
|
||||
* പരിശീലന ഡാറ്റ കുറവായിരിക്കുക
|
||||
* മോഡൽ വളരെ ശക്തമായിരിക്കുക
|
||||
* ഇൻപുട്ട് ഡാറ്റയിൽ ശബ്ദം (നോയിസ്) കൂടുതലായിരിക്കുക
|
||||
|
||||
## ഓവർഫിറ്റിംഗ് കണ്ടെത്താനുള്ള മാർഗങ്ങൾ
|
||||
|
||||
മുകളിൽ കാണിച്ച ഗ്രാഫിൽ നിന്ന്, ഓവർഫിറ്റിംഗ് വളരെ കുറഞ്ഞ പരിശീലന പിശക്, കൂടിയ വാലിഡേഷൻ പിശക് എന്നിവയാൽ കണ്ടെത്താം. സാധാരണയായി പരിശീലന സമയത്ത് പരിശീലനവും വാലിഡേഷനും പിശകുകൾ കുറയാൻ തുടങ്ങും, പിന്നീട് വാലിഡേഷൻ പിശക് കുറയുന്നത് നിർത്തി ഉയരാൻ തുടങ്ങും. ഇത് ഓവർഫിറ്റിംഗിന്റെ സൂചനയാണ്, ഈ ഘട്ടത്തിൽ പരിശീലനം നിർത്തേണ്ടതായിരിക്കും (അല്ലെങ്കിൽ മോഡലിന്റെ സ്നാപ്ഷോട്ട് എടുക്കാം).
|
||||
|
||||

|
||||
|
||||
## ഓവർഫിറ്റിംഗ് തടയാനുള്ള മാർഗങ്ങൾ
|
||||
|
||||
ഓവർഫിറ്റിംഗ് സംഭവിക്കുന്നതായി കാണുമ്പോൾ, താഴെ പറയുന്നവയിൽ ഒന്നോ അതിലധികമോ ചെയ്യാം:
|
||||
|
||||
* പരിശീലന ഡാറ്റയുടെ അളവ് വർദ്ധിപ്പിക്കുക
|
||||
* മോഡലിന്റെ സങ്കീർണ്ണത കുറയ്ക്കുക
|
||||
* [റഗുലറൈസേഷൻ സാങ്കേതികവിദ്യ](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md)കൾ ഉപയോഗിക്കുക, ഉദാ: [ഡ്രോപ്പൗട്ട്](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md#Dropout), പിന്നീട് പരിഗണിക്കും.
|
||||
|
||||
## ഓവർഫിറ്റിംഗ്, ബയാസ്-വേറിയൻസ് ട്രേഡ്-ഓഫ്
|
||||
|
||||
ഓവർഫിറ്റിംഗ് സ്റ്റാറ്റിസ്റ്റിക്സിലെ ഒരു പൊതുവായ പ്രശ്നമായ [ബയാസ്-വേറിയൻസ് ട്രേഡ്-ഓഫ്](https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff)യുടെ ഒരു ഉദാഹരണമാണ്. മോഡലിലെ പിശകുകളുടെ സ്രോതസ്സുകൾ പരിഗണിക്കുമ്പോൾ, രണ്ട് തരത്തിലുള്ള പിശകുകൾ കാണാം:
|
||||
|
||||
* **ബയാസ് പിശകുകൾ**: പരിശീലന ഡാറ്റയുടെ ബന്ധം മോഡൽ ശരിയായി പിടിച്ചെടുക്കാൻ കഴിയാത്തതിനാൽ ഉണ്ടാകുന്നു. ഇത് മോഡൽ ശക്തിയില്ലാത്തതിനാലാകാം (**അണ്ടർഫിറ്റിംഗ്**).
|
||||
* **വേറിയൻസ് പിശകുകൾ**: മോഡൽ ഇൻപുട്ടിലെ ശബ്ദം പകരം അർത്ഥമുള്ള ബന്ധം പകരാൻ ശ്രമിക്കുന്നതിനാൽ ഉണ്ടാകുന്നു (**ഓവർഫിറ്റിംഗ്**).
|
||||
|
||||
പരിശീലന സമയത്ത്, ബയാസ് പിശക് കുറയുകയും (മോഡൽ ഡാറ്റ ഏകീകരിക്കാൻ പഠിക്കുന്നു), വേറിയൻസ് പിശക് ഉയരുകയും ചെയ്യും. ഓവർഫിറ്റിംഗ് തടയാൻ പരിശീലനം നിർത്തുന്നത് (മാനുവലായി അല്ലെങ്കിൽ റഗുലറൈസേഷൻ കൊണ്ടു) പ്രധാനമാണ്.
|
||||
|
||||
## സംക്ഷേപം
|
||||
|
||||
ഈ പാഠത്തിൽ, TensorFlow, PyTorch എന്നീ രണ്ട് ജനപ്രിയ AI ഫ്രെയിംവർക്കുകളുടെ വിവിധ APIകളുടെ വ്യത്യാസങ്ങൾ പഠിച്ചു. കൂടാതെ, വളരെ പ്രധാനപ്പെട്ട ഒരു വിഷയം, ഓവർഫിറ്റിംഗ്, മനസ്സിലാക്കി.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
സഹായക നോട്ട്ബുക്കുകളിൽ താഴെ 'ടാസ്കുകൾ' കാണാം; നോട്ട്ബുക്കുകൾ വഴി പഠനം തുടരുകയും ടാസ്കുകൾ പൂർത്തിയാക്കുകയും ചെയ്യുക.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/10)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
താഴെ പറയുന്ന വിഷയങ്ങളിൽ കുറച്ച് റിസർച്ച് ചെയ്യുക:
|
||||
|
||||
- TensorFlow
|
||||
- PyTorch
|
||||
- ഓവർഫിറ്റിംഗ്
|
||||
|
||||
താഴെ പറയുന്ന ചോദ്യങ്ങൾ സ്വയം ചോദിക്കുക:
|
||||
|
||||
- TensorFlow-നും PyTorch-നും ഇടയിലുള്ള വ്യത്യാസം എന്താണ്?
|
||||
- ഓവർഫിറ്റിംഗും അണ്ടർഫിറ്റിംഗും തമ്മിലുള്ള വ്യത്യാസം എന്താണ്?
|
||||
|
||||
## [അസൈൻമെന്റ്](lab/README.md)
|
||||
|
||||
ഈ ലാബിൽ, PyTorch അല്ലെങ്കിൽ TensorFlow ഉപയോഗിച്ച് സിംഗിൾ-ലെയർ, മൾട്ടി-ലെയർ ഫുൾ-കണക്ടഡ് നെറ്റ്വർക്ക് ഉപയോഗിച്ച് രണ്ട് ക്ലാസിഫിക്കേഷൻ പ്രശ്നങ്ങൾ പരിഹരിക്കാൻ ആവശ്യപ്പെടുന്നു.
|
||||
|
||||
* [നിർദ്ദേശങ്ങൾ](lab/README.md)
|
||||
* [നോട്ട്ബുക്ക്](lab/LabFrameworks.ipynb)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,64 +1,64 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "f862a99d88088163df12270e2f2ad6c3",
|
||||
"translation_date": "2025-11-25T21:08:13+00:00",
|
||||
"source_file": "lessons/3-NeuralNetworks/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ന്യൂറൽ നെറ്റ്വർക്കുകളിലേക്ക് പരിചയം
|
||||
|
||||

|
||||
|
||||
പരിചയത്തിൽ ചർച്ച ചെയ്തതുപോലെ, ബുദ്ധിമുട്ട് നേടാനുള്ള ഒരു മാർഗം **കമ്പ്യൂട്ടർ മോഡൽ** അല്ലെങ്കിൽ **കൃത്രിമ മസ്തിഷ്കം** പരിശീലിപ്പിക്കുകയാണ്. 20-ആം നൂറ്റാണ്ടിന്റെ മധ്യത്തിൽ നിന്ന് ഗവേഷകർ വിവിധ ഗണിത മോഡലുകൾ പരീക്ഷിച്ചു, അടുത്തിടെ ഈ ദിശ വളരെ വിജയകരമായി തെളിഞ്ഞു. മസ്തിഷ്കത്തിന്റെ ഇത്തരം ഗണിത മോഡലുകൾ **ന്യൂറൽ നെറ്റ്വർക്കുകൾ** എന്ന് വിളിക്കുന്നു.
|
||||
|
||||
> ചിലപ്പോൾ ന്യൂറൽ നെറ്റ്വർക്കുകൾ *കൃത്രിമ ന്യൂറൽ നെറ്റ്വർക്കുകൾ* (Artificial Neural Networks, ANNs) എന്ന് വിളിക്കുന്നത്, നാം യഥാർത്ഥ ന്യൂറോണുകളുടെ നെറ്റ്വർക്കുകൾ അല്ല, മോഡലുകൾ മാത്രമാണ് പറയുന്നത് എന്ന് സൂചിപ്പിക്കാൻ.
|
||||
|
||||
## മെഷീൻ ലേണിംഗ്
|
||||
|
||||
ന്യൂറൽ നെറ്റ്വർക്കുകൾ **മെഷീൻ ലേണിംഗ്** എന്ന വലിയ ശാസ്ത്രശാഖയുടെ ഭാഗമാണ്, ഇതിന്റെ ലക്ഷ്യം ഡാറ്റ ഉപയോഗിച്ച് പ്രശ്നങ്ങൾ പരിഹരിക്കാൻ കഴിയുന്ന കമ്പ്യൂട്ടർ മോഡലുകൾ പരിശീലിപ്പിക്കുകയാണ്. മെഷീൻ ലേണിംഗ് കൃത്രിമ ബുദ്ധിമുട്ടിന്റെ വലിയൊരു ഭാഗമാണ്, എന്നാൽ ഈ പാഠ്യപദ്ധതിയിൽ ക്ലാസിക്കൽ മെഷീൻ ലേണിംഗ് ഉൾപ്പെടുത്തിയിട്ടില്ല.
|
||||
|
||||
> ക്ലാസിക്കൽ മെഷീൻ ലേണിംഗ് കൂടുതൽ പഠിക്കാൻ, ഞങ്ങളുടെ പ്രത്യേക **[Machine Learning for Beginners](http://github.com/microsoft/ml-for-beginners)** പാഠ്യപദ്ധതി സന്ദർശിക്കുക.
|
||||
|
||||
മെഷീൻ ലേണിംഗിൽ, നമുക്ക് ചില ഉദാഹരണങ്ങളുടെ ഡാറ്റാസെറ്റ് **X** ഉണ്ട്, അതിനോടനുബന്ധിച്ച ഔട്ട്പുട്ട് മൂല്യങ്ങൾ **Y** ഉണ്ട് എന്ന് فرضിക്കുന്നു. ഉദാഹരണങ്ങൾ സാധാരണയായി N-ഡൈമെൻഷണൽ വെക്ടറുകളാണ്, അവ **ഫീച്ചറുകൾ** അടങ്ങിയിരിക്കുന്നു, ഔട്ട്പുട്ടുകൾ **ലേബലുകൾ** എന്ന് വിളിക്കുന്നു.
|
||||
|
||||
നാം രണ്ട് സാധാരണ മെഷീൻ ലേണിംഗ് പ്രശ്നങ്ങൾ പരിഗണിക്കും:
|
||||
|
||||
* **ക്ലാസിഫിക്കേഷൻ**, ഇവിടെ ഒരു ഇൻപുട്ട് വസ്തുവിനെ രണ്ട് അല്ലെങ്കിൽ അതിലധികം ക്ലാസുകളിലേക്കു വേർതിരിക്കണം.
|
||||
* **റെഗ്രഷൻ**, ഇവിടെ ഓരോ ഇൻപുട്ട് സാമ്പിളിനും ഒരു സംഖ്യാനുപാതം പ്രവചിക്കണം.
|
||||
|
||||
> ഇൻപുട്ടുകളും ഔട്ട്പുട്ടുകളും ടെൻസറുകളായി പ്രതിനിധീകരിക്കുമ്പോൾ, ഇൻപുട്ട് ഡാറ്റാസെറ്റ് M×N വലുപ്പമുള്ള ഒരു മാട്രിക്സാണ്, ഇവിടെ M സാമ്പിളുകളുടെ എണ്ണം, N ഫീച്ചറുകളുടെ എണ്ണം. ഔട്ട്പുട്ട് ലേബലുകൾ Y M വലുപ്പമുള്ള വെക്ടറാണ്.
|
||||
|
||||
ഈ പാഠ്യപദ്ധതിയിൽ, നാം ന്യൂറൽ നെറ്റ്വർക്കുകൾ മാത്രമേ പരിഗണിക്കൂ.
|
||||
|
||||
## ഒരു ന്യൂറോണിന്റെ മോഡൽ
|
||||
|
||||
ജീവശാസ്ത്രത്തിൽനിന്ന്, നമ്മുടെ മസ്തിഷ്കം ന്യൂറൽ സെല്ലുകൾ (ന്യൂറോണുകൾ) കൊണ്ട് നിർമ്മിതമാണ്, ഓരോന്നിനും നിരവധി "ഇൻപുട്ടുകൾ" (ഡെൻഡ്രൈറ്റുകൾ) ഉണ്ട്, ഒറ്റ "ഔട്ട്പുട്ട്" (ആക്സൺ) ഉണ്ട്. ഡെൻഡ്രൈറ്റുകളും ആക്സണുകളും വൈദ്യുത സിഗ്നലുകൾ കൈമാറാൻ കഴിയും, അവ തമ്മിലുള്ള ബന്ധങ്ങൾ — സിനാപ്സുകൾ എന്ന് അറിയപ്പെടുന്നു — വൈദ്യുത ചാലകതയുടെ വ്യത്യസ്ത നിലകൾ കാണിക്കുന്നു, ഇത് ന്യൂറോട്രാൻസ്മിറ്ററുകൾ നിയന്ത്രിക്കുന്നു.
|
||||
|
||||
 | 
|
||||
----|----
|
||||
യഥാർത്ഥ ന്യൂറോൺ *([ചിത്രം](https://en.wikipedia.org/wiki/Synapse#/media/File:SynapseSchematic_lines.svg) വിക്കിപീഡിയയിൽ നിന്നുള്ളത്)* | കൃത്രിമ ന്യൂറോൺ *(ചിത്രം രചയിതാവ്)*
|
||||
|
||||
അതിനാൽ, ഒരു ന്യൂറോണിന്റെ ഏറ്റവും ലളിതമായ ഗണിത മോഡൽ X<sub>1</sub>, ..., X<sub>N</sub> എന്ന നിരവധി ഇൻപുട്ടുകളും Y എന്ന ഔട്ട്പുട്ടും, W<sub>1</sub>, ..., W<sub>N</sub> എന്ന ഭാരങ്ങൾ ഉൾക്കൊള്ളുന്നു. ഔട്ട്പുട്ട് കണക്കാക്കുന്നത്:
|
||||
|
||||
<img src="../../../../translated_images/netout.1eb15eb76fd767313e067719f400cec4b0e5090239c3e997c29f6789d4c3c263.ml.png" alt="Y = f\left(\sum_{i=1}^N X_iW_i\right)" width="131" height="53" align="center"/>
|
||||
|
||||
ഇവിടെ f ഒരു നോൺ-ലിനിയർ **ആക്ടിവേഷൻ ഫംഗ്ഷൻ** ആണ്.
|
||||
|
||||
> ന്യൂറോണിന്റെ പ്രാരംഭ മോഡലുകൾ 1943-ൽ വാറൻ മക്കുലോക്ക്, വാൾട്ടർ പിറ്റ്സ് എഴുതിയ ക്ലാസിക്കൽ പേപ്പർ [A logical calculus of the ideas immanent in nervous activity](https://www.cs.cmu.edu/~./epxing/Class/10715/reading/McCulloch.and.Pitts.pdf) ൽ വിവരിച്ചിട്ടുണ്ട്. ഡൊണാൾഡ് ഹെബ് തന്റെ പുസ്തകം "[The Organization of Behavior: A Neuropsychological Theory](https://books.google.com/books?id=VNetYrB8EBoC)" ൽ ആ നെറ്റ്വർക്കുകൾ എങ്ങനെ പരിശീലിപ്പിക്കാമെന്ന് നിർദ്ദേശിച്ചു.
|
||||
|
||||
## ഈ വിഭാഗത്തിൽ
|
||||
|
||||
ഈ വിഭാഗത്തിൽ നാം പഠിക്കാനിരിക്കുന്നവ:
|
||||
* [പേഴ്സെപ്ട്രോൺ](03-Perceptron/README.md), രണ്ട് ക്ലാസ് ക്ലാസിഫിക്കേഷനുള്ള ആദ്യകാല ന്യൂറൽ നെറ്റ്വർക്ക് മോഡലുകളിൽ ഒന്ന്
|
||||
* [മൾട്ടി-ലെയർഡ് നെറ്റ്വർക്കുകൾ](04-OwnFramework/README.md) കൂടാതെ [സ്വന്തം ഫ്രെയിംവർക്ക് നിർമ്മിക്കുന്ന വിധം](04-OwnFramework/OwnFramework.ipynb) എന്ന നോട്ട്ബുക്ക്
|
||||
* [ന്യൂറൽ നെറ്റ്വർക്ക് ഫ്രെയിംവർക്ക്ಗಳು](05-Frameworks/README.md), ഇതിൽ നോട്ട്ബുക്കുകൾ: [PyTorch](05-Frameworks/IntroPyTorch.ipynb) & [Keras/Tensorflow](05-Frameworks/IntroKerasTF.ipynb)
|
||||
* [ഓവർഫിറ്റിംഗ്](../../../../lessons/3-NeuralNetworks/05-Frameworks)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "f862a99d88088163df12270e2f2ad6c3",
|
||||
"translation_date": "2025-11-25T21:08:13+00:00",
|
||||
"source_file": "lessons/3-NeuralNetworks/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ന്യൂറൽ നെറ്റ്വർക്കുകളിലേക്ക് പരിചയം
|
||||
|
||||

|
||||
|
||||
പരിചയത്തിൽ ചർച്ച ചെയ്തതുപോലെ, ബുദ്ധിമുട്ട് നേടാനുള്ള ഒരു മാർഗം **കമ്പ്യൂട്ടർ മോഡൽ** അല്ലെങ്കിൽ **കൃത്രിമ മസ്തിഷ്കം** പരിശീലിപ്പിക്കുകയാണ്. 20-ആം നൂറ്റാണ്ടിന്റെ മധ്യത്തിൽ നിന്ന് ഗവേഷകർ വിവിധ ഗണിത മോഡലുകൾ പരീക്ഷിച്ചു, അടുത്തിടെ ഈ ദിശ വളരെ വിജയകരമായി തെളിഞ്ഞു. മസ്തിഷ്കത്തിന്റെ ഇത്തരം ഗണിത മോഡലുകൾ **ന്യൂറൽ നെറ്റ്വർക്കുകൾ** എന്ന് വിളിക്കുന്നു.
|
||||
|
||||
> ചിലപ്പോൾ ന്യൂറൽ നെറ്റ്വർക്കുകൾ *കൃത്രിമ ന്യൂറൽ നെറ്റ്വർക്കുകൾ* (Artificial Neural Networks, ANNs) എന്ന് വിളിക്കുന്നത്, നാം യഥാർത്ഥ ന്യൂറോണുകളുടെ നെറ്റ്വർക്കുകൾ അല്ല, മോഡലുകൾ മാത്രമാണ് പറയുന്നത് എന്ന് സൂചിപ്പിക്കാൻ.
|
||||
|
||||
## മെഷീൻ ലേണിംഗ്
|
||||
|
||||
ന്യൂറൽ നെറ്റ്വർക്കുകൾ **മെഷീൻ ലേണിംഗ്** എന്ന വലിയ ശാസ്ത്രശാഖയുടെ ഭാഗമാണ്, ഇതിന്റെ ലക്ഷ്യം ഡാറ്റ ഉപയോഗിച്ച് പ്രശ്നങ്ങൾ പരിഹരിക്കാൻ കഴിയുന്ന കമ്പ്യൂട്ടർ മോഡലുകൾ പരിശീലിപ്പിക്കുകയാണ്. മെഷീൻ ലേണിംഗ് കൃത്രിമ ബുദ്ധിമുട്ടിന്റെ വലിയൊരു ഭാഗമാണ്, എന്നാൽ ഈ പാഠ്യപദ്ധതിയിൽ ക്ലാസിക്കൽ മെഷീൻ ലേണിംഗ് ഉൾപ്പെടുത്തിയിട്ടില്ല.
|
||||
|
||||
> ക്ലാസിക്കൽ മെഷീൻ ലേണിംഗ് കൂടുതൽ പഠിക്കാൻ, ഞങ്ങളുടെ പ്രത്യേക **[Machine Learning for Beginners](http://github.com/microsoft/ml-for-beginners)** പാഠ്യപദ്ധതി സന്ദർശിക്കുക.
|
||||
|
||||
മെഷീൻ ലേണിംഗിൽ, നമുക്ക് ചില ഉദാഹരണങ്ങളുടെ ഡാറ്റാസെറ്റ് **X** ഉണ്ട്, അതിനോടനുബന്ധിച്ച ഔട്ട്പുട്ട് മൂല്യങ്ങൾ **Y** ഉണ്ട് എന്ന് فرضിക്കുന്നു. ഉദാഹരണങ്ങൾ സാധാരണയായി N-ഡൈമെൻഷണൽ വെക്ടറുകളാണ്, അവ **ഫീച്ചറുകൾ** അടങ്ങിയിരിക്കുന്നു, ഔട്ട്പുട്ടുകൾ **ലേബലുകൾ** എന്ന് വിളിക്കുന്നു.
|
||||
|
||||
നാം രണ്ട് സാധാരണ മെഷീൻ ലേണിംഗ് പ്രശ്നങ്ങൾ പരിഗണിക്കും:
|
||||
|
||||
* **ക്ലാസിഫിക്കേഷൻ**, ഇവിടെ ഒരു ഇൻപുട്ട് വസ്തുവിനെ രണ്ട് അല്ലെങ്കിൽ അതിലധികം ക്ലാസുകളിലേക്കു വേർതിരിക്കണം.
|
||||
* **റെഗ്രഷൻ**, ഇവിടെ ഓരോ ഇൻപുട്ട് സാമ്പിളിനും ഒരു സംഖ്യാനുപാതം പ്രവചിക്കണം.
|
||||
|
||||
> ഇൻപുട്ടുകളും ഔട്ട്പുട്ടുകളും ടെൻസറുകളായി പ്രതിനിധീകരിക്കുമ്പോൾ, ഇൻപുട്ട് ഡാറ്റാസെറ്റ് M×N വലുപ്പമുള്ള ഒരു മാട്രിക്സാണ്, ഇവിടെ M സാമ്പിളുകളുടെ എണ്ണം, N ഫീച്ചറുകളുടെ എണ്ണം. ഔട്ട്പുട്ട് ലേബലുകൾ Y M വലുപ്പമുള്ള വെക്ടറാണ്.
|
||||
|
||||
ഈ പാഠ്യപദ്ധതിയിൽ, നാം ന്യൂറൽ നെറ്റ്വർക്കുകൾ മാത്രമേ പരിഗണിക്കൂ.
|
||||
|
||||
## ഒരു ന്യൂറോണിന്റെ മോഡൽ
|
||||
|
||||
ജീവശാസ്ത്രത്തിൽനിന്ന്, നമ്മുടെ മസ്തിഷ്കം ന്യൂറൽ സെല്ലുകൾ (ന്യൂറോണുകൾ) കൊണ്ട് നിർമ്മിതമാണ്, ഓരോന്നിനും നിരവധി "ഇൻപുട്ടുകൾ" (ഡെൻഡ്രൈറ്റുകൾ) ഉണ്ട്, ഒറ്റ "ഔട്ട്പുട്ട്" (ആക്സൺ) ഉണ്ട്. ഡെൻഡ്രൈറ്റുകളും ആക്സണുകളും വൈദ്യുത സിഗ്നലുകൾ കൈമാറാൻ കഴിയും, അവ തമ്മിലുള്ള ബന്ധങ്ങൾ — സിനാപ്സുകൾ എന്ന് അറിയപ്പെടുന്നു — വൈദ്യുത ചാലകതയുടെ വ്യത്യസ്ത നിലകൾ കാണിക്കുന്നു, ഇത് ന്യൂറോട്രാൻസ്മിറ്ററുകൾ നിയന്ത്രിക്കുന്നു.
|
||||
|
||||
 | 
|
||||
----|----
|
||||
യഥാർത്ഥ ന്യൂറോൺ *([ചിത്രം](https://en.wikipedia.org/wiki/Synapse#/media/File:SynapseSchematic_lines.svg) വിക്കിപീഡിയയിൽ നിന്നുള്ളത്)* | കൃത്രിമ ന്യൂറോൺ *(ചിത്രം രചയിതാവ്)*
|
||||
|
||||
അതിനാൽ, ഒരു ന്യൂറോണിന്റെ ഏറ്റവും ലളിതമായ ഗണിത മോഡൽ X<sub>1</sub>, ..., X<sub>N</sub> എന്ന നിരവധി ഇൻപുട്ടുകളും Y എന്ന ഔട്ട്പുട്ടും, W<sub>1</sub>, ..., W<sub>N</sub> എന്ന ഭാരങ്ങൾ ഉൾക്കൊള്ളുന്നു. ഔട്ട്പുട്ട് കണക്കാക്കുന്നത്:
|
||||
|
||||
<img src="../../../../translated_images/netout.1eb15eb76fd76731.ml.png" alt="Y = f\left(\sum_{i=1}^N X_iW_i\right)" width="131" height="53" align="center"/>
|
||||
|
||||
ഇവിടെ f ഒരു നോൺ-ലിനിയർ **ആക്ടിവേഷൻ ഫംഗ്ഷൻ** ആണ്.
|
||||
|
||||
> ന്യൂറോണിന്റെ പ്രാരംഭ മോഡലുകൾ 1943-ൽ വാറൻ മക്കുലോക്ക്, വാൾട്ടർ പിറ്റ്സ് എഴുതിയ ക്ലാസിക്കൽ പേപ്പർ [A logical calculus of the ideas immanent in nervous activity](https://www.cs.cmu.edu/~./epxing/Class/10715/reading/McCulloch.and.Pitts.pdf) ൽ വിവരിച്ചിട്ടുണ്ട്. ഡൊണാൾഡ് ഹെബ് തന്റെ പുസ്തകം "[The Organization of Behavior: A Neuropsychological Theory](https://books.google.com/books?id=VNetYrB8EBoC)" ൽ ആ നെറ്റ്വർക്കുകൾ എങ്ങനെ പരിശീലിപ്പിക്കാമെന്ന് നിർദ്ദേശിച്ചു.
|
||||
|
||||
## ഈ വിഭാഗത്തിൽ
|
||||
|
||||
ഈ വിഭാഗത്തിൽ നാം പഠിക്കാനിരിക്കുന്നവ:
|
||||
* [പേഴ്സെപ്ട്രോൺ](03-Perceptron/README.md), രണ്ട് ക്ലാസ് ക്ലാസിഫിക്കേഷനുള്ള ആദ്യകാല ന്യൂറൽ നെറ്റ്വർക്ക് മോഡലുകളിൽ ഒന്ന്
|
||||
* [മൾട്ടി-ലെയർഡ് നെറ്റ്വർക്കുകൾ](04-OwnFramework/README.md) കൂടാതെ [സ്വന്തം ഫ്രെയിംവർക്ക് നിർമ്മിക്കുന്ന വിധം](04-OwnFramework/OwnFramework.ipynb) എന്ന നോട്ട്ബുക്ക്
|
||||
* [ന്യൂറൽ നെറ്റ്വർക്ക് ഫ്രെയിംവർക്ക്ಗಳು](05-Frameworks/README.md), ഇതിൽ നോട്ട്ബുക്കുകൾ: [PyTorch](05-Frameworks/IntroPyTorch.ipynb) & [Keras/Tensorflow](05-Frameworks/IntroKerasTF.ipynb)
|
||||
* [ഓവർഫിറ്റിംഗ്](../../../../lessons/3-NeuralNetworks/05-Frameworks)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,127 +1,127 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "feeca98225cb420afc89415f24f63d92",
|
||||
"translation_date": "2025-11-25T21:57:58+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/06-IntroCV/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# കമ്പ്യൂട്ടർ വിഷൻ പരിചയം
|
||||
|
||||
[കമ്പ്യൂട്ടർ വിഷൻ](https://wikipedia.org/wiki/Computer_vision) എന്നത് ഡിജിറ്റൽ ചിത്രങ്ങളെക്കുറിച്ച് ഉയർന്ന തലത്തിലുള്ള ബോധം കമ്പ്യൂട്ടറുകൾക്ക് നൽകാനുള്ള ശാസ്ത്രശാഖയാണ്. ഇത് വളരെ വ്യാപകമായ ഒരു നിർവചനമാണ്, കാരണം *ബോധം* എന്നത് പലവിധം അർത്ഥമാക്കാം, ഉദാഹരണത്തിന് ഒരു ചിത്രത്തിൽ ഒരു വസ്തു കണ്ടെത്തൽ (**object detection**), സംഭവങ്ങൾ മനസ്സിലാക്കൽ (**event detection**), ചിത്രത്തെ വാചകത്തിൽ വിവരണം ചെയ്യൽ, അല്ലെങ്കിൽ ഒരു ദൃശ്യത്തെ 3D ആയി പുനർനിർമ്മാണം ചെയ്യൽ. മനുഷ്യ ചിത്രങ്ങളുമായി ബന്ധപ്പെട്ട പ്രത്യേക ജോലികളും ഉണ്ട്: പ്രായവും വികാരവും കണക്കാക്കൽ, മുഖം കണ്ടെത്തൽ, തിരിച്ചറിയൽ, 3D പൊസ് എസ്റ്റിമേഷൻ എന്നിവ.
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/11)
|
||||
|
||||
കമ്പ്യൂട്ടർ വിഷനിലെ ഏറ്റവും ലളിതമായ ജോലികളിൽ ഒന്നാണ് **ചിത്ര വർഗ്ഗീകരണം**.
|
||||
|
||||
കമ്പ്യൂട്ടർ വിഷൻ സാധാരണയായി AI-യുടെ ഒരു ശാഖയായി കണക്കാക്കപ്പെടുന്നു. ഇന്നത്തെ കാലത്ത്, കമ്പ്യൂട്ടർ വിഷൻ ജോലികളുടെ ഭൂരിഭാഗവും ന്യൂറൽ നെറ്റ്വർക്കുകൾ ഉപയോഗിച്ച് പരിഹരിക്കുന്നു. ഈ വിഭാഗത്തിൽ, കമ്പ്യൂട്ടർ വിഷനിൽ ഉപയോഗിക്കുന്ന പ്രത്യേക തരം ന്യൂറൽ നെറ്റ്വർക്കുകൾ ആയ [കോൺവല്യൂഷണൽ ന്യൂറൽ നെറ്റ്വർക്കുകൾ](../07-ConvNets/README.md) കുറിച്ച് കൂടുതൽ പഠിക്കും.
|
||||
|
||||
എങ്കിലും, ഒരു ചിത്രം ന്യൂറൽ നെറ്റ്വർക്കിലേക്ക് നൽകുന്നതിന് മുമ്പ്, പലപ്പോഴും ചിത്രത്തെ മെച്ചപ്പെടുത്താൻ ചില ആൽഗോരിതമിക് സാങ്കേതിക വിദ്യകൾ ഉപയോഗിക്കുന്നത് ഉചിതമാണ്.
|
||||
|
||||
ചിത്ര പ്രോസസ്സിംഗിനായി പല Python ലൈബ്രറികളും ലഭ്യമാണ്:
|
||||
|
||||
* **[imageio](https://imageio.readthedocs.io/en/stable/)** വിവിധ ചിത്ര ഫോർമാറ്റുകൾ വായിക്കാനും എഴുതാനും ഉപയോഗിക്കാം. വീഡിയോ ഫ്രെയിമുകൾ ചിത്രങ്ങളായി മാറ്റാൻ സഹായിക്കുന്ന ffmpeg-ഉം ഇത് പിന്തുണയ്ക്കുന്നു.
|
||||
* **[Pillow](https://pillow.readthedocs.io/en/stable/index.html)** (PIL എന്നും അറിയപ്പെടുന്നു) കൂടുതൽ ശക്തമായ ഒരു ലൈബ്രറിയാണ്, ചിത്ര മോർഫിംഗ്, പാൽറ്റ് ക്രമീകരണങ്ങൾ തുടങ്ങിയ ചില ചിത്ര മാനിപ്പുലേഷൻ പിന്തുണയ്ക്കുന്നു.
|
||||
* **[OpenCV](https://opencv.org/)** C++-ൽ എഴുതിയ ശക്തമായ ഒരു ചിത്ര പ്രോസസ്സിംഗ് ലൈബ്രറിയാണ്, ഇത് ചിത്ര പ്രോസസ്സിംഗിനുള്ള *de facto* സ്റ്റാൻഡേർഡായി മാറിയിട്ടുണ്ട്. Python ഇന്റർഫേസ് സൗകര്യപ്രദമാണ്.
|
||||
* **[dlib](http://dlib.net/)** C++ ലൈബ്രറിയാണ്, ഇത് പല മെഷീൻ ലേണിംഗ് ആൽഗോരിതങ്ങൾ ഉൾക്കൊള്ളുന്നു, അതിൽ ചിലത് കമ്പ്യൂട്ടർ വിഷൻ ആൽഗോരിതങ്ങളുമാണ്. Python ഇന്റർഫേസ് ഉണ്ട്, മുഖം കണ്ടെത്തൽ, മുഖഭാഗങ്ങളുടെ ലാൻഡ്മാർക്ക് കണ്ടെത്തൽ പോലുള്ള സങ്കീർണ്ണ ജോലികൾക്കായി ഉപയോഗിക്കാം.
|
||||
|
||||
## OpenCV
|
||||
|
||||
[OpenCV](https://opencv.org/) ചിത്ര പ്രോസസ്സിംഗിനുള്ള *de facto* സ്റ്റാൻഡേർഡായി കണക്കാക്കപ്പെടുന്നു. ഇത് C++-ൽ നടപ്പിലാക്കിയ നിരവധി ഉപകാരപ്രദമായ ആൽഗോരിതങ്ങൾ ഉൾക്കൊള്ളുന്നു. Python-ൽ നിന്നും OpenCV വിളിക്കാം.
|
||||
|
||||
OpenCV പഠിക്കാൻ നല്ല ഒരു സ്ഥലം [ഈ Learn OpenCV കോഴ്സ്](https://learnopencv.com/getting-started-with-opencv/) ആണ്. നമ്മുടെ പാഠ്യപദ്ധതിയിൽ, OpenCV പഠിക്കുകയാണ് ലക്ഷ്യം അല്ല, എങ്കിലും ഇത് എപ്പോൾ എങ്ങനെ ഉപയോഗിക്കാമെന്ന് കാണിക്കുകയാണ്.
|
||||
|
||||
### ചിത്രങ്ങൾ ലോഡ് ചെയ്യൽ
|
||||
|
||||
Python-ൽ ചിത്രങ്ങൾ NumPy അറേകൾ ആയി സുഖപ്രദമായി പ്രതിനിധീകരിക്കാം. ഉദാഹരണത്തിന്, 320x200 പിക്സൽ വലുപ്പമുള്ള ഗ്രേസ്കെയിൽ ചിത്രങ്ങൾ 200x320 അറേയിൽ സൂക്ഷിക്കും, അതേ വലുപ്പമുള്ള നിറമുള്ള ചിത്രങ്ങൾക്ക് 200x320x3 (3 നിറ ചാനലുകൾക്കായി) ആകൃതി ഉണ്ടാകും. ഒരു ചിത്രം ലോഡ് ചെയ്യാൻ താഴെ കൊടുത്ത കോഡ് ഉപയോഗിക്കാം:
|
||||
|
||||
```python
|
||||
import cv2
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
im = cv2.imread('image.jpeg')
|
||||
plt.imshow(im)
|
||||
```
|
||||
|
||||
|
||||
പരമ്പരാഗതമായി, OpenCV നിറമുള്ള ചിത്രങ്ങൾക്ക് BGR (ബ്ലൂ-ഗ്രീൻ-റെഡ്) എൻകോഡിംഗ് ഉപയോഗിക്കുന്നു, Python-ലെ മറ്റു ടൂളുകൾ ഉപയോഗിക്കുന്നത് RGB (റെഡ്-ഗ്രീൻ-ബ്ലൂ) ആണ്. ചിത്രത്തിന് ശരിയായ രൂപം ലഭിക്കാൻ, NumPy അറേയിൽ ഡൈമെൻഷനുകൾ മാറ്റി അല്ലെങ്കിൽ OpenCV ഫംഗ്ഷൻ വിളിച്ച് RGB കളർ സ്പേസിലേക്ക് മാറ്റണം:
|
||||
|
||||
```python
|
||||
im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
|
||||
```
|
||||
|
||||
|
||||
`cvtColor` ഫംഗ്ഷൻ ഉപയോഗിച്ച് ചിത്രത്തെ ഗ്രേസ്കെയിലിലേക്ക് അല്ലെങ്കിൽ HSV (ഹ്യൂ-സാച്ചുറേഷൻ-വാല്യൂ) കളർ സ്പേസിലേക്ക് മാറ്റാനും കഴിയും.
|
||||
|
||||
OpenCV ഉപയോഗിച്ച് വീഡിയോ ഫ്രെയിമുകൾ ഫ്രെയിം-ബൈ-ഫ്രെയിം ലോഡ് ചെയ്യാനും കഴിയും - ഉദാഹരണം [OpenCV Notebook](OpenCV.ipynb) ല് കാണാം.
|
||||
|
||||
### ചിത്ര പ്രോസസ്സിംഗ്
|
||||
|
||||
ചിത്രം ന്യൂറൽ നെറ്റ്വർക്കിലേക്ക് നൽകുന്നതിന് മുമ്പ്, ചില പ്രീ-പ്രോസസ്സിംഗ് ഘട്ടങ്ങൾ പ്രയോഗിക്കാം. OpenCV പല കാര്യങ്ങളും ചെയ്യാൻ കഴിയും, ഉദാഹരണത്തിന്:
|
||||
|
||||
* `im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS)` ഉപയോഗിച്ച് ചിത്രത്തിന്റെ വലുപ്പം മാറ്റൽ
|
||||
* `im = cv2.medianBlur(im,3)` അല്ലെങ്കിൽ `im = cv2.GaussianBlur(im, (3,3), 0)` ഉപയോഗിച്ച് ചിത്രത്തെ ബ്ലർ ചെയ്യൽ
|
||||
* ചിത്രത്തിന്റെ **പ്രകാശവും കോൺട്രാസ്റ്റും** മാറ്റാൻ NumPy അറേ മാനിപ്പുലേഷനുകൾ ഉപയോഗിക്കാം, [ഈ Stackoverflow കുറിപ്പിൽ](https://stackoverflow.com/questions/39308030/how-do-i-increase-the-contrast-of-an-image-in-python-opencv) വിശദീകരിച്ചിരിക്കുന്നു.
|
||||
* `cv2.threshold`/`cv2.adaptiveThreshold` ഫംഗ്ഷനുകൾ വിളിച്ച് [thresholding](https://docs.opencv.org/4.x/d7/d4d/tutorial_py_thresholding.html) പ്രയോഗിക്കാം, ഇത് പ്രകാശം അല്ലെങ്കിൽ കോൺട്രാസ്റ്റ് ക്രമീകരിക്കുന്നതിനേക്കാൾ നല്ലതായിരിക്കും.
|
||||
* ചിത്രത്തിൽ വിവിധ [പരിവർത്തനങ്ങൾ](https://docs.opencv.org/4.5.5/da/d6e/tutorial_py_geometric_transformations.html) പ്രയോഗിക്കുക:
|
||||
- **[Affine transformations](https://docs.opencv.org/4.5.5/d4/d61/tutorial_warp_affine.html)** ചിത്രത്തിൽ റൊട്ടേഷൻ, വലുപ്പം മാറ്റൽ, സ്ക്യൂ ചെയ്യൽ എന്നിവ സംയോജിപ്പിക്കേണ്ടതുണ്ടെങ്കിൽ, ചിത്രത്തിലെ മൂന്ന് പോയിന്റുകളുടെ ഉറവിടവും ലക്ഷ്യസ്ഥലവും അറിയാമെങ്കിൽ ഉപകാരപ്രദമാണ്. Affine പരിവർത്തനങ്ങൾ സമാന്തരരേഖകൾ സമാന്തരമായി നിലനിർത്തും.
|
||||
- **[Perspective transformations](https://medium.com/analytics-vidhya/opencv-perspective-transformation-9edffefb2143)** ചിത്രത്തിലെ നാല് പോയിന്റുകളുടെ ഉറവിടവും ലക്ഷ്യസ്ഥലവും അറിയാമെങ്കിൽ ഉപകാരപ്രദമാണ്. ഉദാഹരണത്തിന്, ഒരു സ്മാർട്ട്ഫോൺ ക്യാമറ ഉപയോഗിച്ച് ഒരു കോണിൽ നിന്ന് ഒരു ചതുരശ്ര രേഖാമൂലം പടം എടുക്കുമ്പോൾ, രേഖാമൂലം തന്നെ ചതുരശ്ര രൂപത്തിൽ മാറ്റാൻ.
|
||||
* **[optical flow](https://docs.opencv.org/4.5.5/d4/dee/tutorial_optical_flow.html)** ഉപയോഗിച്ച് ചിത്രത്തിനുള്ളിലെ ചലനം മനസ്സിലാക്കൽ.
|
||||
|
||||
## കമ്പ്യൂട്ടർ വിഷൻ ഉപയോഗിക്കുന്ന ഉദാഹരണങ്ങൾ
|
||||
|
||||
നമ്മുടെ [OpenCV Notebook](OpenCV.ipynb) ല്, കമ്പ്യൂട്ടർ വിഷൻ പ്രത്യേക ജോലികൾ ചെയ്യാൻ എപ്പോൾ ഉപയോഗിക്കാമെന്ന് ചില ഉദാഹരണങ്ങൾ കൊടുക്കുന്നു:
|
||||
|
||||
* **ബ്രെയിൽ പുസ്തകത്തിന്റെ ഫോട്ടോ പ്രീ-പ്രോസസ്സിംഗ്**. thresholding, ഫീച്ചർ കണ്ടെത്തൽ, perspective transformation, NumPy മാനിപ്പുലേഷനുകൾ ഉപയോഗിച്ച് വ്യക്തിഗത ബ്രെയിൽ ചിഹ്നങ്ങൾ വേർതിരിച്ച് പിന്നീട് ന്യൂറൽ നെറ്റ്വർക്കിൽ വർഗ്ഗീകരിക്കാൻ തയ്യാറാക്കൽ.
|
||||
|
||||
 |  | 
|
||||
----|-----|-----
|
||||
|
||||
> ചിത്രം [OpenCV.ipynb](OpenCV.ipynb) നിന്നാണ്
|
||||
|
||||
* **ഫ്രെയിം വ്യത്യാസം ഉപയോഗിച്ച് വീഡിയോയിൽ ചലനം കണ്ടെത്തൽ**. ക്യാമറ സ്ഥിരമാണെങ്കിൽ, ക്യാമറ ഫീഡിലെ ഫ്രെയിമുകൾ തമ്മിൽ വളരെ സമാനമായിരിക്കും. ഫ്രെയിമുകൾ അറേകളായി പ്രതിനിധീകരിക്കപ്പെടുന്നതിനാൽ, രണ്ട് തുടർച്ചയായ ഫ്രെയിമുകളുടെ അറേകൾ തമ്മിൽ വ്യത്യാസം എടുത്താൽ പിക്സൽ വ്യത്യാസം കിട്ടും, ഇത് സ്ഥിരമായ ഫ്രെയിമുകൾക്കായി കുറവായിരിക്കും, ചിത്രത്തിൽ വലിയ ചലനം ഉണ്ടാകുമ്പോൾ ഉയരും.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [OpenCV.ipynb](OpenCV.ipynb) നിന്നാണ്
|
||||
|
||||
* **Optical Flow ഉപയോഗിച്ച് ചലനം കണ്ടെത്തൽ**. [Optical flow](https://docs.opencv.org/3.4/d4/dee/tutorial_optical_flow.html) വീഡിയോ ഫ്രെയിമിലെ ഓരോ പിക്സലും എങ്ങനെ ചലിക്കുന്നു എന്ന് മനസ്സിലാക്കാൻ സഹായിക്കുന്നു. Optical flow-ന് രണ്ട് തരം ഉണ്ട്:
|
||||
|
||||
- **Dense Optical Flow** ഓരോ പിക്സലും എവിടെ പോകുന്നു എന്ന് കാണിക്കുന്ന വെക്ടർ ഫീൽഡ് കണക്കാക്കുന്നു
|
||||
- **Sparse Optical Flow** ചിത്രത്തിലെ ചില വ്യത്യസ്തമായ ഫീച്ചറുകൾ (ഉദാ: അരികുകൾ) എടുത്ത്, അവയുടെ ട്രാജക്ടറി ഫ്രെയിമിൽ നിന്ന് ഫ്രെയിമിലേക്ക് നിർമ്മിക്കുന്നു.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [OpenCV.ipynb](OpenCV.ipynb) നിന്നാണ്
|
||||
|
||||
## ✍️ ഉദാഹരണ നോട്ട്ബുക്കുകൾ: OpenCV [OpenCV in Action പരീക്ഷിക്കുക](OpenCV.ipynb)
|
||||
|
||||
[OpenCV Notebook](OpenCV.ipynb) പരിശോധിച്ച് OpenCV-യുമായി ചില പരീക്ഷണങ്ങൾ നടത്താം.
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ചലനം കണ്ടെത്തൽ, വിരൽടിപ്പിന്റെ സ്ഥാനം കണ്ടെത്തൽ പോലുള്ള ചില സങ്കീർണ്ണ ജോലികൾ കമ്പ്യൂട്ടർ വിഷൻ മാത്രം ഉപയോഗിച്ച് പരിഹരിക്കാനാകും. അതിനാൽ, കമ്പ്യൂട്ടർ വിഷന്റെ അടിസ്ഥാന സാങ്കേതിക വിദ്യകൾ അറിയുകയും OpenCV പോലുള്ള ലൈബ്രറികൾ എന്തെല്ലാം ചെയ്യാൻ കഴിയുന്നുവെന്ന് മനസ്സിലാക്കുകയും ചെയ്യുന്നത് വളരെ സഹായകരമാണ്.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
AI ഷോയിൽ നിന്നുള്ള [ഈ വീഡിയോ](https://docs.microsoft.com/shows/ai-show/ai-show--2021-opencv-ai-competition--grand-prize-winners--cortic-tigers--episode-32?WT.mc_id=academic-77998-cacaste) കാണുക, Cortic Tigers പ്രോജക്ട് എങ്ങനെ കമ്പ്യൂട്ടർ വിഷൻ ജോലികൾ റോബോട്ടിലൂടെ ജനങ്ങളിലേക്ക് എത്തിക്കാൻ ബ്ലോക്ക് അടിസ്ഥാനത്തിലുള്ള പരിഹാരം നിർമ്മിച്ചുവെന്ന് പഠിക്കുക. ഈ മേഖലയിലേക്ക് പുതിയ പഠിതാക്കളെ കൊണ്ടുവരാൻ സഹായിക്കുന്ന മറ്റ് പ്രോജക്ടുകൾക്കുറിച്ച് ഗവേഷണം നടത്തുക.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/12)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
[ഈ മികച്ച ട്യൂട്ടോറിയലിൽ](https://learnopencv.com/optical-flow-in-opencv/) optical flow-യെ കുറിച്ച് കൂടുതൽ വായിക്കുക.
|
||||
|
||||
## [അസൈൻമെന്റ്](lab/README.md)
|
||||
|
||||
ഈ ലാബിൽ, ലളിതമായ ജെസ്റ്ററുകളുള്ള ഒരു വീഡിയോ എടുത്ത്, optical flow ഉപയോഗിച്ച് മുകളിൽ/താഴെ/ഇടത്തേക്ക്/വലത്തേക്ക് ചലനങ്ങൾ കണ്ടെത്തുക.
|
||||
|
||||
<img src="../../../../../translated_images/palm-movement.341495f0e9c47da39cc1f99626822a1d20203aa33ff89a86a068f14bea133e84.ml.png" width="30%" alt="Palm Movement Frame"/>
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "feeca98225cb420afc89415f24f63d92",
|
||||
"translation_date": "2025-11-25T21:57:58+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/06-IntroCV/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# കമ്പ്യൂട്ടർ വിഷൻ പരിചയം
|
||||
|
||||
[കമ്പ്യൂട്ടർ വിഷൻ](https://wikipedia.org/wiki/Computer_vision) എന്നത് ഡിജിറ്റൽ ചിത്രങ്ങളെക്കുറിച്ച് ഉയർന്ന തലത്തിലുള്ള ബോധം കമ്പ്യൂട്ടറുകൾക്ക് നൽകാനുള്ള ശാസ്ത്രശാഖയാണ്. ഇത് വളരെ വ്യാപകമായ ഒരു നിർവചനമാണ്, കാരണം *ബോധം* എന്നത് പലവിധം അർത്ഥമാക്കാം, ഉദാഹരണത്തിന് ഒരു ചിത്രത്തിൽ ഒരു വസ്തു കണ്ടെത്തൽ (**object detection**), സംഭവങ്ങൾ മനസ്സിലാക്കൽ (**event detection**), ചിത്രത്തെ വാചകത്തിൽ വിവരണം ചെയ്യൽ, അല്ലെങ്കിൽ ഒരു ദൃശ്യത്തെ 3D ആയി പുനർനിർമ്മാണം ചെയ്യൽ. മനുഷ്യ ചിത്രങ്ങളുമായി ബന്ധപ്പെട്ട പ്രത്യേക ജോലികളും ഉണ്ട്: പ്രായവും വികാരവും കണക്കാക്കൽ, മുഖം കണ്ടെത്തൽ, തിരിച്ചറിയൽ, 3D പൊസ് എസ്റ്റിമേഷൻ എന്നിവ.
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/11)
|
||||
|
||||
കമ്പ്യൂട്ടർ വിഷനിലെ ഏറ്റവും ലളിതമായ ജോലികളിൽ ഒന്നാണ് **ചിത്ര വർഗ്ഗീകരണം**.
|
||||
|
||||
കമ്പ്യൂട്ടർ വിഷൻ സാധാരണയായി AI-യുടെ ഒരു ശാഖയായി കണക്കാക്കപ്പെടുന്നു. ഇന്നത്തെ കാലത്ത്, കമ്പ്യൂട്ടർ വിഷൻ ജോലികളുടെ ഭൂരിഭാഗവും ന്യൂറൽ നെറ്റ്വർക്കുകൾ ഉപയോഗിച്ച് പരിഹരിക്കുന്നു. ഈ വിഭാഗത്തിൽ, കമ്പ്യൂട്ടർ വിഷനിൽ ഉപയോഗിക്കുന്ന പ്രത്യേക തരം ന്യൂറൽ നെറ്റ്വർക്കുകൾ ആയ [കോൺവല്യൂഷണൽ ന്യൂറൽ നെറ്റ്വർക്കുകൾ](../07-ConvNets/README.md) കുറിച്ച് കൂടുതൽ പഠിക്കും.
|
||||
|
||||
എങ്കിലും, ഒരു ചിത്രം ന്യൂറൽ നെറ്റ്വർക്കിലേക്ക് നൽകുന്നതിന് മുമ്പ്, പലപ്പോഴും ചിത്രത്തെ മെച്ചപ്പെടുത്താൻ ചില ആൽഗോരിതമിക് സാങ്കേതിക വിദ്യകൾ ഉപയോഗിക്കുന്നത് ഉചിതമാണ്.
|
||||
|
||||
ചിത്ര പ്രോസസ്സിംഗിനായി പല Python ലൈബ്രറികളും ലഭ്യമാണ്:
|
||||
|
||||
* **[imageio](https://imageio.readthedocs.io/en/stable/)** വിവിധ ചിത്ര ഫോർമാറ്റുകൾ വായിക്കാനും എഴുതാനും ഉപയോഗിക്കാം. വീഡിയോ ഫ്രെയിമുകൾ ചിത്രങ്ങളായി മാറ്റാൻ സഹായിക്കുന്ന ffmpeg-ഉം ഇത് പിന്തുണയ്ക്കുന്നു.
|
||||
* **[Pillow](https://pillow.readthedocs.io/en/stable/index.html)** (PIL എന്നും അറിയപ്പെടുന്നു) കൂടുതൽ ശക്തമായ ഒരു ലൈബ്രറിയാണ്, ചിത്ര മോർഫിംഗ്, പാൽറ്റ് ക്രമീകരണങ്ങൾ തുടങ്ങിയ ചില ചിത്ര മാനിപ്പുലേഷൻ പിന്തുണയ്ക്കുന്നു.
|
||||
* **[OpenCV](https://opencv.org/)** C++-ൽ എഴുതിയ ശക്തമായ ഒരു ചിത്ര പ്രോസസ്സിംഗ് ലൈബ്രറിയാണ്, ഇത് ചിത്ര പ്രോസസ്സിംഗിനുള്ള *de facto* സ്റ്റാൻഡേർഡായി മാറിയിട്ടുണ്ട്. Python ഇന്റർഫേസ് സൗകര്യപ്രദമാണ്.
|
||||
* **[dlib](http://dlib.net/)** C++ ലൈബ്രറിയാണ്, ഇത് പല മെഷീൻ ലേണിംഗ് ആൽഗോരിതങ്ങൾ ഉൾക്കൊള്ളുന്നു, അതിൽ ചിലത് കമ്പ്യൂട്ടർ വിഷൻ ആൽഗോരിതങ്ങളുമാണ്. Python ഇന്റർഫേസ് ഉണ്ട്, മുഖം കണ്ടെത്തൽ, മുഖഭാഗങ്ങളുടെ ലാൻഡ്മാർക്ക് കണ്ടെത്തൽ പോലുള്ള സങ്കീർണ്ണ ജോലികൾക്കായി ഉപയോഗിക്കാം.
|
||||
|
||||
## OpenCV
|
||||
|
||||
[OpenCV](https://opencv.org/) ചിത്ര പ്രോസസ്സിംഗിനുള്ള *de facto* സ്റ്റാൻഡേർഡായി കണക്കാക്കപ്പെടുന്നു. ഇത് C++-ൽ നടപ്പിലാക്കിയ നിരവധി ഉപകാരപ്രദമായ ആൽഗോരിതങ്ങൾ ഉൾക്കൊള്ളുന്നു. Python-ൽ നിന്നും OpenCV വിളിക്കാം.
|
||||
|
||||
OpenCV പഠിക്കാൻ നല്ല ഒരു സ്ഥലം [ഈ Learn OpenCV കോഴ്സ്](https://learnopencv.com/getting-started-with-opencv/) ആണ്. നമ്മുടെ പാഠ്യപദ്ധതിയിൽ, OpenCV പഠിക്കുകയാണ് ലക്ഷ്യം അല്ല, എങ്കിലും ഇത് എപ്പോൾ എങ്ങനെ ഉപയോഗിക്കാമെന്ന് കാണിക്കുകയാണ്.
|
||||
|
||||
### ചിത്രങ്ങൾ ലോഡ് ചെയ്യൽ
|
||||
|
||||
Python-ൽ ചിത്രങ്ങൾ NumPy അറേകൾ ആയി സുഖപ്രദമായി പ്രതിനിധീകരിക്കാം. ഉദാഹരണത്തിന്, 320x200 പിക്സൽ വലുപ്പമുള്ള ഗ്രേസ്കെയിൽ ചിത്രങ്ങൾ 200x320 അറേയിൽ സൂക്ഷിക്കും, അതേ വലുപ്പമുള്ള നിറമുള്ള ചിത്രങ്ങൾക്ക് 200x320x3 (3 നിറ ചാനലുകൾക്കായി) ആകൃതി ഉണ്ടാകും. ഒരു ചിത്രം ലോഡ് ചെയ്യാൻ താഴെ കൊടുത്ത കോഡ് ഉപയോഗിക്കാം:
|
||||
|
||||
```python
|
||||
import cv2
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
im = cv2.imread('image.jpeg')
|
||||
plt.imshow(im)
|
||||
```
|
||||
|
||||
|
||||
പരമ്പരാഗതമായി, OpenCV നിറമുള്ള ചിത്രങ്ങൾക്ക് BGR (ബ്ലൂ-ഗ്രീൻ-റെഡ്) എൻകോഡിംഗ് ഉപയോഗിക്കുന്നു, Python-ലെ മറ്റു ടൂളുകൾ ഉപയോഗിക്കുന്നത് RGB (റെഡ്-ഗ്രീൻ-ബ്ലൂ) ആണ്. ചിത്രത്തിന് ശരിയായ രൂപം ലഭിക്കാൻ, NumPy അറേയിൽ ഡൈമെൻഷനുകൾ മാറ്റി അല്ലെങ്കിൽ OpenCV ഫംഗ്ഷൻ വിളിച്ച് RGB കളർ സ്പേസിലേക്ക് മാറ്റണം:
|
||||
|
||||
```python
|
||||
im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
|
||||
```
|
||||
|
||||
|
||||
`cvtColor` ഫംഗ്ഷൻ ഉപയോഗിച്ച് ചിത്രത്തെ ഗ്രേസ്കെയിലിലേക്ക് അല്ലെങ്കിൽ HSV (ഹ്യൂ-സാച്ചുറേഷൻ-വാല്യൂ) കളർ സ്പേസിലേക്ക് മാറ്റാനും കഴിയും.
|
||||
|
||||
OpenCV ഉപയോഗിച്ച് വീഡിയോ ഫ്രെയിമുകൾ ഫ്രെയിം-ബൈ-ഫ്രെയിം ലോഡ് ചെയ്യാനും കഴിയും - ഉദാഹരണം [OpenCV Notebook](OpenCV.ipynb) ല് കാണാം.
|
||||
|
||||
### ചിത്ര പ്രോസസ്സിംഗ്
|
||||
|
||||
ചിത്രം ന്യൂറൽ നെറ്റ്വർക്കിലേക്ക് നൽകുന്നതിന് മുമ്പ്, ചില പ്രീ-പ്രോസസ്സിംഗ് ഘട്ടങ്ങൾ പ്രയോഗിക്കാം. OpenCV പല കാര്യങ്ങളും ചെയ്യാൻ കഴിയും, ഉദാഹരണത്തിന്:
|
||||
|
||||
* `im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS)` ഉപയോഗിച്ച് ചിത്രത്തിന്റെ വലുപ്പം മാറ്റൽ
|
||||
* `im = cv2.medianBlur(im,3)` അല്ലെങ്കിൽ `im = cv2.GaussianBlur(im, (3,3), 0)` ഉപയോഗിച്ച് ചിത്രത്തെ ബ്ലർ ചെയ്യൽ
|
||||
* ചിത്രത്തിന്റെ **പ്രകാശവും കോൺട്രാസ്റ്റും** മാറ്റാൻ NumPy അറേ മാനിപ്പുലേഷനുകൾ ഉപയോഗിക്കാം, [ഈ Stackoverflow കുറിപ്പിൽ](https://stackoverflow.com/questions/39308030/how-do-i-increase-the-contrast-of-an-image-in-python-opencv) വിശദീകരിച്ചിരിക്കുന്നു.
|
||||
* `cv2.threshold`/`cv2.adaptiveThreshold` ഫംഗ്ഷനുകൾ വിളിച്ച് [thresholding](https://docs.opencv.org/4.x/d7/d4d/tutorial_py_thresholding.html) പ്രയോഗിക്കാം, ഇത് പ്രകാശം അല്ലെങ്കിൽ കോൺട്രാസ്റ്റ് ക്രമീകരിക്കുന്നതിനേക്കാൾ നല്ലതായിരിക്കും.
|
||||
* ചിത്രത്തിൽ വിവിധ [പരിവർത്തനങ്ങൾ](https://docs.opencv.org/4.5.5/da/d6e/tutorial_py_geometric_transformations.html) പ്രയോഗിക്കുക:
|
||||
- **[Affine transformations](https://docs.opencv.org/4.5.5/d4/d61/tutorial_warp_affine.html)** ചിത്രത്തിൽ റൊട്ടേഷൻ, വലുപ്പം മാറ്റൽ, സ്ക്യൂ ചെയ്യൽ എന്നിവ സംയോജിപ്പിക്കേണ്ടതുണ്ടെങ്കിൽ, ചിത്രത്തിലെ മൂന്ന് പോയിന്റുകളുടെ ഉറവിടവും ലക്ഷ്യസ്ഥലവും അറിയാമെങ്കിൽ ഉപകാരപ്രദമാണ്. Affine പരിവർത്തനങ്ങൾ സമാന്തരരേഖകൾ സമാന്തരമായി നിലനിർത്തും.
|
||||
- **[Perspective transformations](https://medium.com/analytics-vidhya/opencv-perspective-transformation-9edffefb2143)** ചിത്രത്തിലെ നാല് പോയിന്റുകളുടെ ഉറവിടവും ലക്ഷ്യസ്ഥലവും അറിയാമെങ്കിൽ ഉപകാരപ്രദമാണ്. ഉദാഹരണത്തിന്, ഒരു സ്മാർട്ട്ഫോൺ ക്യാമറ ഉപയോഗിച്ച് ഒരു കോണിൽ നിന്ന് ഒരു ചതുരശ്ര രേഖാമൂലം പടം എടുക്കുമ്പോൾ, രേഖാമൂലം തന്നെ ചതുരശ്ര രൂപത്തിൽ മാറ്റാൻ.
|
||||
* **[optical flow](https://docs.opencv.org/4.5.5/d4/dee/tutorial_optical_flow.html)** ഉപയോഗിച്ച് ചിത്രത്തിനുള്ളിലെ ചലനം മനസ്സിലാക്കൽ.
|
||||
|
||||
## കമ്പ്യൂട്ടർ വിഷൻ ഉപയോഗിക്കുന്ന ഉദാഹരണങ്ങൾ
|
||||
|
||||
നമ്മുടെ [OpenCV Notebook](OpenCV.ipynb) ല്, കമ്പ്യൂട്ടർ വിഷൻ പ്രത്യേക ജോലികൾ ചെയ്യാൻ എപ്പോൾ ഉപയോഗിക്കാമെന്ന് ചില ഉദാഹരണങ്ങൾ കൊടുക്കുന്നു:
|
||||
|
||||
* **ബ്രെയിൽ പുസ്തകത്തിന്റെ ഫോട്ടോ പ്രീ-പ്രോസസ്സിംഗ്**. thresholding, ഫീച്ചർ കണ്ടെത്തൽ, perspective transformation, NumPy മാനിപ്പുലേഷനുകൾ ഉപയോഗിച്ച് വ്യക്തിഗത ബ്രെയിൽ ചിഹ്നങ്ങൾ വേർതിരിച്ച് പിന്നീട് ന്യൂറൽ നെറ്റ്വർക്കിൽ വർഗ്ഗീകരിക്കാൻ തയ്യാറാക്കൽ.
|
||||
|
||||
 |  | 
|
||||
----|-----|-----
|
||||
|
||||
> ചിത്രം [OpenCV.ipynb](OpenCV.ipynb) നിന്നാണ്
|
||||
|
||||
* **ഫ്രെയിം വ്യത്യാസം ഉപയോഗിച്ച് വീഡിയോയിൽ ചലനം കണ്ടെത്തൽ**. ക്യാമറ സ്ഥിരമാണെങ്കിൽ, ക്യാമറ ഫീഡിലെ ഫ്രെയിമുകൾ തമ്മിൽ വളരെ സമാനമായിരിക്കും. ഫ്രെയിമുകൾ അറേകളായി പ്രതിനിധീകരിക്കപ്പെടുന്നതിനാൽ, രണ്ട് തുടർച്ചയായ ഫ്രെയിമുകളുടെ അറേകൾ തമ്മിൽ വ്യത്യാസം എടുത്താൽ പിക്സൽ വ്യത്യാസം കിട്ടും, ഇത് സ്ഥിരമായ ഫ്രെയിമുകൾക്കായി കുറവായിരിക്കും, ചിത്രത്തിൽ വലിയ ചലനം ഉണ്ടാകുമ്പോൾ ഉയരും.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [OpenCV.ipynb](OpenCV.ipynb) നിന്നാണ്
|
||||
|
||||
* **Optical Flow ഉപയോഗിച്ച് ചലനം കണ്ടെത്തൽ**. [Optical flow](https://docs.opencv.org/3.4/d4/dee/tutorial_optical_flow.html) വീഡിയോ ഫ്രെയിമിലെ ഓരോ പിക്സലും എങ്ങനെ ചലിക്കുന്നു എന്ന് മനസ്സിലാക്കാൻ സഹായിക്കുന്നു. Optical flow-ന് രണ്ട് തരം ഉണ്ട്:
|
||||
|
||||
- **Dense Optical Flow** ഓരോ പിക്സലും എവിടെ പോകുന്നു എന്ന് കാണിക്കുന്ന വെക്ടർ ഫീൽഡ് കണക്കാക്കുന്നു
|
||||
- **Sparse Optical Flow** ചിത്രത്തിലെ ചില വ്യത്യസ്തമായ ഫീച്ചറുകൾ (ഉദാ: അരികുകൾ) എടുത്ത്, അവയുടെ ട്രാജക്ടറി ഫ്രെയിമിൽ നിന്ന് ഫ്രെയിമിലേക്ക് നിർമ്മിക്കുന്നു.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [OpenCV.ipynb](OpenCV.ipynb) നിന്നാണ്
|
||||
|
||||
## ✍️ ഉദാഹരണ നോട്ട്ബുക്കുകൾ: OpenCV [OpenCV in Action പരീക്ഷിക്കുക](OpenCV.ipynb)
|
||||
|
||||
[OpenCV Notebook](OpenCV.ipynb) പരിശോധിച്ച് OpenCV-യുമായി ചില പരീക്ഷണങ്ങൾ നടത്താം.
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ചലനം കണ്ടെത്തൽ, വിരൽടിപ്പിന്റെ സ്ഥാനം കണ്ടെത്തൽ പോലുള്ള ചില സങ്കീർണ്ണ ജോലികൾ കമ്പ്യൂട്ടർ വിഷൻ മാത്രം ഉപയോഗിച്ച് പരിഹരിക്കാനാകും. അതിനാൽ, കമ്പ്യൂട്ടർ വിഷന്റെ അടിസ്ഥാന സാങ്കേതിക വിദ്യകൾ അറിയുകയും OpenCV പോലുള്ള ലൈബ്രറികൾ എന്തെല്ലാം ചെയ്യാൻ കഴിയുന്നുവെന്ന് മനസ്സിലാക്കുകയും ചെയ്യുന്നത് വളരെ സഹായകരമാണ്.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
AI ഷോയിൽ നിന്നുള്ള [ഈ വീഡിയോ](https://docs.microsoft.com/shows/ai-show/ai-show--2021-opencv-ai-competition--grand-prize-winners--cortic-tigers--episode-32?WT.mc_id=academic-77998-cacaste) കാണുക, Cortic Tigers പ്രോജക്ട് എങ്ങനെ കമ്പ്യൂട്ടർ വിഷൻ ജോലികൾ റോബോട്ടിലൂടെ ജനങ്ങളിലേക്ക് എത്തിക്കാൻ ബ്ലോക്ക് അടിസ്ഥാനത്തിലുള്ള പരിഹാരം നിർമ്മിച്ചുവെന്ന് പഠിക്കുക. ഈ മേഖലയിലേക്ക് പുതിയ പഠിതാക്കളെ കൊണ്ടുവരാൻ സഹായിക്കുന്ന മറ്റ് പ്രോജക്ടുകൾക്കുറിച്ച് ഗവേഷണം നടത്തുക.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/12)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
[ഈ മികച്ച ട്യൂട്ടോറിയലിൽ](https://learnopencv.com/optical-flow-in-opencv/) optical flow-യെ കുറിച്ച് കൂടുതൽ വായിക്കുക.
|
||||
|
||||
## [അസൈൻമെന്റ്](lab/README.md)
|
||||
|
||||
ഈ ലാബിൽ, ലളിതമായ ജെസ്റ്ററുകളുള്ള ഒരു വീഡിയോ എടുത്ത്, optical flow ഉപയോഗിച്ച് മുകളിൽ/താഴെ/ഇടത്തേക്ക്/വലത്തേക്ക് ചലനങ്ങൾ കണ്ടെത്തുക.
|
||||
|
||||
<img src="../../../../../translated_images/palm-movement.341495f0e9c47da3.ml.png" width="30%" alt="Palm Movement Frame"/>
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,110 +1,110 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## ഓപ്റ്റിക്കൽ ഫ്ലോ ഉപയോഗിച്ച് കൈവിരൽ ചലനം കണ്ടെത്തൽ\n",
|
||||
"\n",
|
||||
"ഈ ലാബ് [AI for Beginners Curriculum](http://aka.ms/ai-beginners) എന്ന കോഴ്സിന്റെ ഭാഗമാണ്.\n",
|
||||
"\n",
|
||||
"ഒരു വ്യക്തിയുടെ കൈവിരൽ സ്ഥിരമായ പശ്ചാത്തലത്തിൽ ഇടത്തേക്ക്/വലത്തേക്ക്/മുകളിലേക്ക്/താഴേക്ക് ചലിക്കുന്ന [ഈ വീഡിയോ](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/palm-movement.mp4) പരിഗണിക്കുക.\n",
|
||||
"\n",
|
||||
"<img src=\"../../../../../../translated_images/palm-movement.341495f0e9c47da39cc1f99626822a1d20203aa33ff89a86a068f14bea133e84.ml.png\" width=\"30%\" alt=\"Palm Movement Frame\"/>\n",
|
||||
"\n",
|
||||
"**നിങ്ങളുടെ ലക്ഷ്യം** ഓപ്റ്റിക്കൽ ഫ്ലോ ഉപയോഗിച്ച് വീഡിയോയിലെ ഏത് ഭാഗങ്ങളിൽ മുകളിലേക്ക്/താഴേക്ക്/ഇടത്തേക്ക്/വലത്തേക്ക് ചലനങ്ങൾ ഉണ്ടെന്ന് കണ്ടെത്തുക എന്നതാണ്.\n",
|
||||
"\n",
|
||||
"ലക്ചറിൽ വിവരിച്ച പോലെ വീഡിയോ ഫ്രെയിമുകൾ എടുക്കുന്നതിൽ നിന്ന് ആരംഭിക്കുക:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Code here"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഇപ്പോൾ, ലക്ചറിൽ വിവരിച്ച പ്രകാരം ഡെൻസ് ഓപ്റ്റിക്കൽ ഫ്ലോ ഫ്രെയിമുകൾ കണക്കാക്കുക, പിന്നീട് ഡെൻസ് ഓപ്റ്റിക്കൽ ഫ്ലോ പോളാർ കോർഡിനേറ്റുകളിലേക്ക് മാറ്റുക:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Code here"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഓപ്റ്റിക്കൽ ഫ്ലോ ഫ്രെയിമിലെ ഓരോ ദിശയ്ക്കും ഹിസ്റ്റോഗ്രാം നിർമ്മിക്കുക. ഒരു ഹിസ്റ്റോഗ്രാം ഒരു ബിനിൽ എത്ര വെക്ടറുകൾപ്പെടുന്നുവെന്ന് കാണിക്കുന്നു, കൂടാതെ ഫ്രെയിമിലെ വ്യത്യസ്ത ചലന ദിശകൾ വേർതിരിക്കണം.\n",
|
||||
"\n",
|
||||
"> ചില വെക്ടറുകളുടെ മാഗ്നിറ്റ്യൂഡ് ഒരു നിശ്ചിത പരിധിക്കു താഴെയാണെങ്കിൽ അവയെ സീറോ ആക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കാം. ഇത് കണ്ണുകളും തലയും പോലുള്ള ചെറിയ അധിക ചലനങ്ങൾ വീഡിയോയിൽ നിന്ന് ഒഴിവാക്കാൻ സഹായിക്കും.\n",
|
||||
"\n",
|
||||
"ചില ഫ്രെയിമുകളുടെ ഹിസ്റ്റോഗ്രാമുകൾ പ്ലോട്ട് ചെയ്യുക.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Code here"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഹിസ്റ്റോഗ്രാമുകൾ നോക്കുമ്പോൾ, ചലനത്തിന്റെ ദിശ നിർണ്ണയിക്കുന്നത് വളരെ സുലഭമാണ്. ഉയരുന്ന/താഴെ പോകുന്ന/ഇടത്തേക്ക്/വലത്തേക്ക് ദിശകളുമായി ബന്ധപ്പെട്ട ബിൻസുകൾ തിരഞ്ഞെടുക്കണം, കൂടാതെ അവ ഒരു നിശ്ചിത പരിധി മുകളിൽ ഉണ്ടായിരിക്കണം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Code here"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"അഭിനന്ദനങ്ങൾ! മുകളിൽ നൽകിയ എല്ലാ ഘട്ടങ്ങളും നിങ്ങൾ പൂർത്തിയാക്കിയെങ്കിൽ, നിങ്ങൾ ലാബ് പൂർത്തിയാക്കിയിട്ടുണ്ട്!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**അസൂയാ**: \nഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് പരിഗണിക്കേണ്ടതാണ്. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"language_info": {
|
||||
"name": "python"
|
||||
},
|
||||
"orig_nbformat": 4,
|
||||
"coopTranslator": {
|
||||
"original_hash": "153d9e417e079bf62f8f693002d0deaf",
|
||||
"translation_date": "2025-11-26T01:26:12+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/06-IntroCV/lab/MovementDetection.ipynb",
|
||||
"language_code": "ml"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## ഓപ്റ്റിക്കൽ ഫ്ലോ ഉപയോഗിച്ച് കൈവിരൽ ചലനം കണ്ടെത്തൽ\n",
|
||||
"\n",
|
||||
"ഈ ലാബ് [AI for Beginners Curriculum](http://aka.ms/ai-beginners) എന്ന കോഴ്സിന്റെ ഭാഗമാണ്.\n",
|
||||
"\n",
|
||||
"ഒരു വ്യക്തിയുടെ കൈവിരൽ സ്ഥിരമായ പശ്ചാത്തലത്തിൽ ഇടത്തേക്ക്/വലത്തേക്ക്/മുകളിലേക്ക്/താഴേക്ക് ചലിക്കുന്ന [ഈ വീഡിയോ](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/palm-movement.mp4) പരിഗണിക്കുക.\n",
|
||||
"\n",
|
||||
"<img src=\"../../../../../../translated_images/palm-movement.341495f0e9c47da3.ml.png\" width=\"30%\" alt=\"Palm Movement Frame\"/>\n",
|
||||
"\n",
|
||||
"**നിങ്ങളുടെ ലക്ഷ്യം** ഓപ്റ്റിക്കൽ ഫ്ലോ ഉപയോഗിച്ച് വീഡിയോയിലെ ഏത് ഭാഗങ്ങളിൽ മുകളിലേക്ക്/താഴേക്ക്/ഇടത്തേക്ക്/വലത്തേക്ക് ചലനങ്ങൾ ഉണ്ടെന്ന് കണ്ടെത്തുക എന്നതാണ്.\n",
|
||||
"\n",
|
||||
"ലക്ചറിൽ വിവരിച്ച പോലെ വീഡിയോ ഫ്രെയിമുകൾ എടുക്കുന്നതിൽ നിന്ന് ആരംഭിക്കുക:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Code here"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഇപ്പോൾ, ലക്ചറിൽ വിവരിച്ച പ്രകാരം ഡെൻസ് ഓപ്റ്റിക്കൽ ഫ്ലോ ഫ്രെയിമുകൾ കണക്കാക്കുക, പിന്നീട് ഡെൻസ് ഓപ്റ്റിക്കൽ ഫ്ലോ പോളാർ കോർഡിനേറ്റുകളിലേക്ക് മാറ്റുക:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Code here"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഓപ്റ്റിക്കൽ ഫ്ലോ ഫ്രെയിമിലെ ഓരോ ദിശയ്ക്കും ഹിസ്റ്റോഗ്രാം നിർമ്മിക്കുക. ഒരു ഹിസ്റ്റോഗ്രാം ഒരു ബിനിൽ എത്ര വെക്ടറുകൾപ്പെടുന്നുവെന്ന് കാണിക്കുന്നു, കൂടാതെ ഫ്രെയിമിലെ വ്യത്യസ്ത ചലന ദിശകൾ വേർതിരിക്കണം.\n",
|
||||
"\n",
|
||||
"> ചില വെക്ടറുകളുടെ മാഗ്നിറ്റ്യൂഡ് ഒരു നിശ്ചിത പരിധിക്കു താഴെയാണെങ്കിൽ അവയെ സീറോ ആക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കാം. ഇത് കണ്ണുകളും തലയും പോലുള്ള ചെറിയ അധിക ചലനങ്ങൾ വീഡിയോയിൽ നിന്ന് ഒഴിവാക്കാൻ സഹായിക്കും.\n",
|
||||
"\n",
|
||||
"ചില ഫ്രെയിമുകളുടെ ഹിസ്റ്റോഗ്രാമുകൾ പ്ലോട്ട് ചെയ്യുക.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Code here"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഹിസ്റ്റോഗ്രാമുകൾ നോക്കുമ്പോൾ, ചലനത്തിന്റെ ദിശ നിർണ്ണയിക്കുന്നത് വളരെ സുലഭമാണ്. ഉയരുന്ന/താഴെ പോകുന്ന/ഇടത്തേക്ക്/വലത്തേക്ക് ദിശകളുമായി ബന്ധപ്പെട്ട ബിൻസുകൾ തിരഞ്ഞെടുക്കണം, കൂടാതെ അവ ഒരു നിശ്ചിത പരിധി മുകളിൽ ഉണ്ടായിരിക്കണം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Code here"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"അഭിനന്ദനങ്ങൾ! മുകളിൽ നൽകിയ എല്ലാ ഘട്ടങ്ങളും നിങ്ങൾ പൂർത്തിയാക്കിയെങ്കിൽ, നിങ്ങൾ ലാബ് പൂർത്തിയാക്കിയിട്ടുണ്ട്!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**അസൂയാ**: \nഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് പരിഗണിക്കേണ്ടതാണ്. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"language_info": {
|
||||
"name": "python"
|
||||
},
|
||||
"orig_nbformat": 4,
|
||||
"coopTranslator": {
|
||||
"original_hash": "153d9e417e079bf62f8f693002d0deaf",
|
||||
"translation_date": "2025-11-26T01:26:12+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/06-IntroCV/lab/MovementDetection.ipynb",
|
||||
"language_code": "ml"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
|
|
@ -1,37 +1,37 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "3d53d6409f80970f7281a45dee35328a",
|
||||
"translation_date": "2025-11-25T22:41:02+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/06-IntroCV/lab/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ഓപ്റ്റിക്കൽ ഫ്ലോ ഉപയോഗിച്ച് ചലനങ്ങൾ കണ്ടെത്തൽ
|
||||
|
||||
[AI for Beginners Curriculum](https://aka.ms/ai-beginners) ലാബ് അസൈൻമെന്റ്.
|
||||
|
||||
## ടാസ്ക്
|
||||
|
||||
ഒരു വ്യക്തിയുടെ കൈവിരൽ സ്ഥിരമായ പശ്ചാത്തലത്തിൽ ഇടത്തേക്ക്/വലത്തേക്ക്/മുകളിലേക്ക്/താഴേക്ക് ചലിക്കുന്ന [ഈ വീഡിയോ](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/palm-movement.mp4) പരിഗണിക്കുക.
|
||||
|
||||
<img src="../../../../../../translated_images/palm-movement.341495f0e9c47da39cc1f99626822a1d20203aa33ff89a86a068f14bea133e84.ml.png" width="30%" alt="Palm Movement Frame"/>
|
||||
|
||||
**നിങ്ങളുടെ ലക്ഷ്യം** ഓപ്റ്റിക്കൽ ഫ്ലോ ഉപയോഗിച്ച് വീഡിയോയിലെ ഏത് ഭാഗങ്ങളിൽ മുകളിലേക്ക്/താഴേക്ക്/ഇടത്തേക്ക്/വലത്തേക്ക് ചലനങ്ങൾ ഉണ്ടെന്ന് കണ്ടെത്താൻ കഴിയുക എന്നതാണ്.
|
||||
|
||||
**വിപുലീകരണ ലക്ഷ്യം** ചർമ്മത്തിന്റെ നിറം ഉപയോഗിച്ച് കൈവിരൽ/വിരൽ ചലനം ട്രാക്ക് ചെയ്യുക, [ഈ ബ്ലോഗ് പോസ്റ്റിൽ](https://dev.to/amarlearning/finger-detection-and-tracking-using-opencv-and-python-586m) അല്ലെങ്കിൽ [ഇവിടെ](http://www.benmeline.com/finger-tracking-with-opencv-and-python/) വിവരിച്ചിരിക്കുന്നതുപോലെ.
|
||||
|
||||
## ആരംഭിക്കുന്ന നോട്ട്ബുക്ക്
|
||||
|
||||
[MovementDetection.ipynb](MovementDetection.ipynb) തുറന്ന് ലാബ് ആരംഭിക്കുക
|
||||
|
||||
## പ്രധാനപ്പെട്ട കാര്യങ്ങൾ
|
||||
|
||||
ചലന കണ്ടെത്തൽ അല്ലെങ്കിൽ വിരൽച punta കണ്ടെത്തൽ പോലുള്ള ചില സങ്കീർണ്ണമായ ടാസ്കുകൾ കമ്പ്യൂട്ടർ വിഷൻ മാത്രം ഉപയോഗിച്ച് പരിഹരിക്കാനാകും. അതിനാൽ OpenCV പോലുള്ള ലൈബ്രറികൾ എന്തെല്ലാം ചെയ്യാൻ കഴിയുമെന്ന് അറിയുന്നത് വളരെ ഉപകാരപ്രദമാണ്.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "3d53d6409f80970f7281a45dee35328a",
|
||||
"translation_date": "2025-11-25T22:41:02+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/06-IntroCV/lab/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ഓപ്റ്റിക്കൽ ഫ്ലോ ഉപയോഗിച്ച് ചലനങ്ങൾ കണ്ടെത്തൽ
|
||||
|
||||
[AI for Beginners Curriculum](https://aka.ms/ai-beginners) ലാബ് അസൈൻമെന്റ്.
|
||||
|
||||
## ടാസ്ക്
|
||||
|
||||
ഒരു വ്യക്തിയുടെ കൈവിരൽ സ്ഥിരമായ പശ്ചാത്തലത്തിൽ ഇടത്തേക്ക്/വലത്തേക്ക്/മുകളിലേക്ക്/താഴേക്ക് ചലിക്കുന്ന [ഈ വീഡിയോ](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/palm-movement.mp4) പരിഗണിക്കുക.
|
||||
|
||||
<img src="../../../../../../translated_images/palm-movement.341495f0e9c47da3.ml.png" width="30%" alt="Palm Movement Frame"/>
|
||||
|
||||
**നിങ്ങളുടെ ലക്ഷ്യം** ഓപ്റ്റിക്കൽ ഫ്ലോ ഉപയോഗിച്ച് വീഡിയോയിലെ ഏത് ഭാഗങ്ങളിൽ മുകളിലേക്ക്/താഴേക്ക്/ഇടത്തേക്ക്/വലത്തേക്ക് ചലനങ്ങൾ ഉണ്ടെന്ന് കണ്ടെത്താൻ കഴിയുക എന്നതാണ്.
|
||||
|
||||
**വിപുലീകരണ ലക്ഷ്യം** ചർമ്മത്തിന്റെ നിറം ഉപയോഗിച്ച് കൈവിരൽ/വിരൽ ചലനം ട്രാക്ക് ചെയ്യുക, [ഈ ബ്ലോഗ് പോസ്റ്റിൽ](https://dev.to/amarlearning/finger-detection-and-tracking-using-opencv-and-python-586m) അല്ലെങ്കിൽ [ഇവിടെ](http://www.benmeline.com/finger-tracking-with-opencv-and-python/) വിവരിച്ചിരിക്കുന്നതുപോലെ.
|
||||
|
||||
## ആരംഭിക്കുന്ന നോട്ട്ബുക്ക്
|
||||
|
||||
[MovementDetection.ipynb](MovementDetection.ipynb) തുറന്ന് ലാബ് ആരംഭിക്കുക
|
||||
|
||||
## പ്രധാനപ്പെട്ട കാര്യങ്ങൾ
|
||||
|
||||
ചലന കണ്ടെത്തൽ അല്ലെങ്കിൽ വിരൽച punta കണ്ടെത്തൽ പോലുള്ള ചില സങ്കീർണ്ണമായ ടാസ്കുകൾ കമ്പ്യൂട്ടർ വിഷൻ മാത്രം ഉപയോഗിച്ച് പരിഹരിക്കാനാകും. അതിനാൽ OpenCV പോലുള്ള ലൈബ്രറികൾ എന്തെല്ലാം ചെയ്യാൻ കഴിയുമെന്ന് അറിയുന്നത് വളരെ ഉപകാരപ്രദമാണ്.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,77 +1,77 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "53faab85adfcebd8c10bcd71dc2fa557",
|
||||
"translation_date": "2025-11-25T22:03:30+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# പ്രശസ്തമായ CNN ആർക്കിടെക്ചറുകൾ
|
||||
|
||||
### VGG-16
|
||||
|
||||
VGG-16 2014-ൽ ImageNet ടോപ്പ്-5 ക്ലാസിഫിക്കേഷനിൽ 92.7% കൃത്യത നേടിയ ഒരു നെറ്റ്വർക്കാണ്. ഇതിന് താഴെ പറയുന്ന ലെയർ ഘടനയുണ്ട്:
|
||||
|
||||

|
||||
|
||||
നിങ്ങൾക്ക് കാണാമല്ലോ, VGG പരമ്പരാഗത പിരമിഡ് ആർക്കിടെക്ചർ പിന്തുടരുന്നു, convolution-pooling ലെയറുകളുടെ ഒരു ശ്രേണിയാണ് ഇത്.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [Researchgate](https://www.researchgate.net/figure/Vgg16-model-structure-To-get-the-VGG-NIN-model-we-replace-the-2-nd-4-th-6-th-7-th_fig2_335194493) നിന്നാണ്
|
||||
|
||||
### ResNet
|
||||
|
||||
ResNet മൈക്രോസോഫ്റ്റ് റിസർച്ച് 2015-ൽ നിർദ്ദേശിച്ച മോഡലുകളുടെ ഒരു കുടുംബമാണ്. ResNet-ന്റെ പ്രധാന ആശയം **residual blocks** ഉപയോഗിക്കുകയാണ്:
|
||||
|
||||
<img src="../../../../../translated_images/resnet-block.aba4ccbcc094443477d7bee189d44fed695c852d710a702462d6b809155d959a.ml.png" width="300"/>
|
||||
|
||||
> ചിത്രം [ഈ പേപ്പർ](https://arxiv.org/pdf/1512.03385.pdf) നിന്നാണ്
|
||||
|
||||
ഐഡന്റിറ്റി പാസ്-ത്രൂ ഉപയോഗിക്കുന്നതിന്റെ കാരണം, ഒരു ലെയർ മുൻ ലെയറിന്റെ ഫലവും residual block-ന്റെ ഔട്ട്പുട്ടും തമ്മിലുള്ള **വ്യത്യാസം** പ്രവചിക്കാനാണ് - അതുകൊണ്ടാണ് *residual* എന്ന് പേരിട്ടിരിക്കുന്നത്. ആ ബ്ലോക്കുകൾ പരിശീലിപ്പിക്കാൻ വളരെ എളുപ്പമാണ്, കൂടാതെ നൂറുകണക്കിന് ബ്ലോക്കുകൾ ഉപയോഗിച്ച് നെറ്റ്വർക്ക് നിർമ്മിക്കാം (സാധാരണ വേർഷനുകൾ ResNet-52, ResNet-101, ResNet-152 എന്നിവയാണ്).
|
||||
|
||||
ഈ നെറ്റ്വർക്ക് dataset-നുസരിച്ച് അതിന്റെ സങ്കീർണ്ണത ക്രമീകരിക്കാൻ കഴിയും എന്നും നിങ്ങൾ കരുതാം. തുടക്കത്തിൽ, നെറ്റ്വർക്ക് പരിശീലനം ആരംഭിക്കുമ്പോൾ, വെയ്റ്റുകൾ ചെറുതായിരിക്കും, സിഗ്നലിന്റെ ഭൂരിഭാഗവും ഐഡന്റിറ്റി പാസ്-ത്രൂ ലെയറുകൾ വഴി പോകും. പരിശീലനം പുരോഗമിക്കുമ്പോൾ വെയ്റ്റുകൾ വലുതാകുകയും, നെറ്റ്വർക്ക് പാരാമീറ്ററുകളുടെ പ്രാധാന്യം വർദ്ധിക്കുകയും, ആവശ്യമായ പ്രകടന ശേഷി ലഭിക്കാൻ നെറ്റ്വർക്ക് ക്രമീകരിക്കപ്പെടുകയും ചെയ്യും.
|
||||
|
||||
### Google Inception
|
||||
|
||||
Google Inception ആർക്കിടെക്ചർ ഈ ആശയം ഒരു പടി മുന്നോട്ട് കൊണ്ടുപോകുന്നു, ഓരോ നെറ്റ്വർക്ക് ലെയറും പല വ്യത്യസ്ത പാതകളുടെ സംയോജനം ആയി നിർമ്മിക്കുന്നു:
|
||||
|
||||
<img src="../../../../../translated_images/inception.a6605b85bcbc6f52490ec55e68109dd41924cba9d7e1007453b4cdf554199c8d.ml.png" width="400"/>
|
||||
|
||||
> ചിത്രം [Researchgate](https://www.researchgate.net/figure/Inception-module-with-dimension-reductions-left-and-schema-for-Inception-ResNet-v1_fig2_355547454) നിന്നാണ്
|
||||
|
||||
ഇവിടെ, 1x1 convolution-ന്റെ പങ്ക് പ്രത്യേകിച്ച് ശ്രദ്ധിക്കണം, കാരണം ആദ്യം അത് അർത്ഥമാക്കാൻ ബുദ്ധിമുട്ടാകും. 1x1 ഫിൽട്ടർ ഉപയോഗിച്ച് ഇമേജിലൂടെ പോകേണ്ടതെന്തിന്? എന്നാൽ convolution ഫിൽട്ടറുകൾ പല ഡെപ്ത് ചാനലുകളുമായി (ആദ്യത്തേത് RGB നിറങ്ങൾ, പിന്നീട് വിവിധ ഫിൽട്ടറുകൾക്കുള്ള ചാനലുകൾ) പ്രവർത്തിക്കുന്നുവെന്ന് ഓർക്കണം, 1x1 convolution ആ ഇൻപുട്ട് ചാനലുകൾ വ്യത്യസ്ത ട്രെയിനബിൾ വെയ്റ്റുകൾ ഉപയോഗിച്ച് മിശ്രിതമാക്കാൻ ഉപയോഗിക്കുന്നു. ഇത് ചാനൽ ഡൈമെൻഷനിൽ ഡൗൺസാമ്പ്ലിംഗ് (pooling) ആയി കാണാം.
|
||||
|
||||
ഈ വിഷയത്തിൽ [ഒരു നല്ല ബ്ലോഗ് പോസ്റ്റ്](https://medium.com/analytics-vidhya/talented-mr-1x1-comprehensive-look-at-1x1-convolution-in-deep-learning-f6b355825578) ഉണ്ട്, കൂടാതെ [അസൽ പേപ്പർ](https://arxiv.org/pdf/1312.4400.pdf) വായിക്കാം.
|
||||
|
||||
### MobileNet
|
||||
|
||||
MobileNet മൊബൈൽ ഉപകരണങ്ങൾക്ക് അനുയോജ്യമായ, വലുപ്പം കുറച്ച മോഡലുകളുടെ ഒരു കുടുംബമാണ്. നിങ്ങൾക്ക് റിസോഴ്സുകൾ കുറവാണെങ്കിൽ, കുറച്ച് കൃത്യത ത്യജിക്കാമെങ്കിൽ ഇവ ഉപയോഗിക്കാം. ഇവയുടെ പ്രധാന ആശയം **depthwise separable convolution** ആണ്, spatial convolution-കളും 1x1 convolution-ഉം ഡെപ്ത് ചാനലുകളിൽ ചേർത്ത് convolution ഫിൽട്ടറുകൾ പ്രതിനിധാനം ചെയ്യാൻ ഇത് സഹായിക്കുന്നു. ഇതു പാരാമീറ്ററുകളുടെ എണ്ണം വളരെ കുറയ്ക്കുന്നു, നെറ്റ്വർക്ക് വലുപ്പം ചെറുതാക്കുകയും കുറവ് ഡാറ്റ ഉപയോഗിച്ച് പരിശീലിപ്പിക്കാൻ എളുപ്പമാക്കുകയും ചെയ്യുന്നു.
|
||||
|
||||
MobileNet-നെക്കുറിച്ച് [ഒരു നല്ല ബ്ലോഗ് പോസ്റ്റ്](https://medium.com/analytics-vidhya/image-classification-with-mobilenet-cc6fbb2cd470) ഇവിടെ കാണാം.
|
||||
|
||||
## നിഗമനം
|
||||
|
||||
ഈ യൂണിറ്റിൽ, നിങ്ങൾ കമ്പ്യൂട്ടർ വിഷൻ ന്യൂറൽ നെറ്റ്വർക്കുകളുടെ പ്രധാന ആശയം - convolutional networks - പഠിച്ചു. ചിത്ര ക്ലാസിഫിക്കേഷൻ, ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ, ചിത്ര സൃഷ്ടി നെറ്റ്വർക്കുകൾ എല്ലാം CNN-കളിൽ അടിസ്ഥാനമാക്കിയുള്ളവയാണ്, കൂടുതൽ ലെയറുകളും ചില അധിക പരിശീലന തന്ത്രങ്ങളും ചേർത്ത്.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
സഹായക നോട്ട്ബുക്കുകളിൽ, കൂടുതൽ കൃത്യത നേടാനുള്ള കുറിപ്പുകൾ അടിക്കുറിപ്പായി നൽകിയിട്ടുണ്ട്. നിങ്ങൾക്ക് കൂടുതൽ കൃത്യത നേടാൻ കഴിയുന്നുണ്ടോ എന്ന് പരീക്ഷണങ്ങൾ നടത്തുക.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/14)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
CNN-കൾ സാധാരണയായി കമ്പ്യൂട്ടർ വിഷൻ ടാസ്കുകൾക്കാണ് ഉപയോഗിക്കുന്നത്, എന്നാൽ അവ സ്ഥിരമായ വലിപ്പത്തിലുള്ള പാറ്റേണുകൾ കണ്ടെത്താൻ പൊതുവെ നല്ലതാണ്. ഉദാഹരണത്തിന്, ശബ്ദവുമായി ബന്ധപ്പെട്ട്, ഓഡിയോ സിഗ്നലിൽ ചില പ്രത്യേക പാറ്റേണുകൾ കണ്ടെത്താൻ CNN-കൾ ഉപയോഗിക്കാം - അപ്പോൾ ഫിൽട്ടറുകൾ 1-ഡൈമെൻഷണൽ ആയിരിക്കും (ഇത്തരം CNN-നെ 1D-CNN എന്ന് വിളിക്കും). കൂടാതെ, ചിലപ്പോൾ 3D-CNN ഉപയോഗിച്ച് മൾട്ടി-ഡൈമെൻഷണൽ സ്പേസിൽ ഫീച്ചറുകൾ എടുക്കുന്നു, ഉദാഹരണത്തിന് വീഡിയോയിൽ സംഭവിക്കുന്ന ചില സംഭവങ്ങൾ - CNN സമയം അനുസരിച്ച് ഫീച്ചറുകളുടെ മാറ്റം പാറ്റേണുകൾ പിടികൂടാൻ കഴിയും. CNN-കൾ ഉപയോഗിച്ച് ചെയ്യാവുന്ന മറ്റ് ടാസ്കുകൾക്കായി അവലോകനം ചെയ്ത് സ്വയം പഠനം നടത്തുക.
|
||||
|
||||
## [അസൈൻമെന്റ്](lab/README.md)
|
||||
|
||||
ഈ ലാബിൽ, നിങ്ങൾക്ക് വ്യത്യസ്ത പൂച്ചയും നായയും ഇനങ്ങൾ ക്ലാസിഫൈ ചെയ്യേണ്ടതാണ്. ഈ ചിത്രങ്ങൾ MNIST ഡാറ്റാസെറ്റിനേക്കാൾ കൂടുതൽ സങ്കീർണ്ണവും ഉയർന്ന ഡൈമെൻഷനുകളുള്ളതും ആണ്, കൂടാതെ 10-ലധികം ക്ലാസുകൾ ഉണ്ട്.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "53faab85adfcebd8c10bcd71dc2fa557",
|
||||
"translation_date": "2025-11-25T22:03:30+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# പ്രശസ്തമായ CNN ആർക്കിടെക്ചറുകൾ
|
||||
|
||||
### VGG-16
|
||||
|
||||
VGG-16 2014-ൽ ImageNet ടോപ്പ്-5 ക്ലാസിഫിക്കേഷനിൽ 92.7% കൃത്യത നേടിയ ഒരു നെറ്റ്വർക്കാണ്. ഇതിന് താഴെ പറയുന്ന ലെയർ ഘടനയുണ്ട്:
|
||||
|
||||

|
||||
|
||||
നിങ്ങൾക്ക് കാണാമല്ലോ, VGG പരമ്പരാഗത പിരമിഡ് ആർക്കിടെക്ചർ പിന്തുടരുന്നു, convolution-pooling ലെയറുകളുടെ ഒരു ശ്രേണിയാണ് ഇത്.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [Researchgate](https://www.researchgate.net/figure/Vgg16-model-structure-To-get-the-VGG-NIN-model-we-replace-the-2-nd-4-th-6-th-7-th_fig2_335194493) നിന്നാണ്
|
||||
|
||||
### ResNet
|
||||
|
||||
ResNet മൈക്രോസോഫ്റ്റ് റിസർച്ച് 2015-ൽ നിർദ്ദേശിച്ച മോഡലുകളുടെ ഒരു കുടുംബമാണ്. ResNet-ന്റെ പ്രധാന ആശയം **residual blocks** ഉപയോഗിക്കുകയാണ്:
|
||||
|
||||
<img src="../../../../../translated_images/resnet-block.aba4ccbcc0944434.ml.png" width="300"/>
|
||||
|
||||
> ചിത്രം [ഈ പേപ്പർ](https://arxiv.org/pdf/1512.03385.pdf) നിന്നാണ്
|
||||
|
||||
ഐഡന്റിറ്റി പാസ്-ത്രൂ ഉപയോഗിക്കുന്നതിന്റെ കാരണം, ഒരു ലെയർ മുൻ ലെയറിന്റെ ഫലവും residual block-ന്റെ ഔട്ട്പുട്ടും തമ്മിലുള്ള **വ്യത്യാസം** പ്രവചിക്കാനാണ് - അതുകൊണ്ടാണ് *residual* എന്ന് പേരിട്ടിരിക്കുന്നത്. ആ ബ്ലോക്കുകൾ പരിശീലിപ്പിക്കാൻ വളരെ എളുപ്പമാണ്, കൂടാതെ നൂറുകണക്കിന് ബ്ലോക്കുകൾ ഉപയോഗിച്ച് നെറ്റ്വർക്ക് നിർമ്മിക്കാം (സാധാരണ വേർഷനുകൾ ResNet-52, ResNet-101, ResNet-152 എന്നിവയാണ്).
|
||||
|
||||
ഈ നെറ്റ്വർക്ക് dataset-നുസരിച്ച് അതിന്റെ സങ്കീർണ്ണത ക്രമീകരിക്കാൻ കഴിയും എന്നും നിങ്ങൾ കരുതാം. തുടക്കത്തിൽ, നെറ്റ്വർക്ക് പരിശീലനം ആരംഭിക്കുമ്പോൾ, വെയ്റ്റുകൾ ചെറുതായിരിക്കും, സിഗ്നലിന്റെ ഭൂരിഭാഗവും ഐഡന്റിറ്റി പാസ്-ത്രൂ ലെയറുകൾ വഴി പോകും. പരിശീലനം പുരോഗമിക്കുമ്പോൾ വെയ്റ്റുകൾ വലുതാകുകയും, നെറ്റ്വർക്ക് പാരാമീറ്ററുകളുടെ പ്രാധാന്യം വർദ്ധിക്കുകയും, ആവശ്യമായ പ്രകടന ശേഷി ലഭിക്കാൻ നെറ്റ്വർക്ക് ക്രമീകരിക്കപ്പെടുകയും ചെയ്യും.
|
||||
|
||||
### Google Inception
|
||||
|
||||
Google Inception ആർക്കിടെക്ചർ ഈ ആശയം ഒരു പടി മുന്നോട്ട് കൊണ്ടുപോകുന്നു, ഓരോ നെറ്റ്വർക്ക് ലെയറും പല വ്യത്യസ്ത പാതകളുടെ സംയോജനം ആയി നിർമ്മിക്കുന്നു:
|
||||
|
||||
<img src="../../../../../translated_images/inception.a6605b85bcbc6f52.ml.png" width="400"/>
|
||||
|
||||
> ചിത്രം [Researchgate](https://www.researchgate.net/figure/Inception-module-with-dimension-reductions-left-and-schema-for-Inception-ResNet-v1_fig2_355547454) നിന്നാണ്
|
||||
|
||||
ഇവിടെ, 1x1 convolution-ന്റെ പങ്ക് പ്രത്യേകിച്ച് ശ്രദ്ധിക്കണം, കാരണം ആദ്യം അത് അർത്ഥമാക്കാൻ ബുദ്ധിമുട്ടാകും. 1x1 ഫിൽട്ടർ ഉപയോഗിച്ച് ഇമേജിലൂടെ പോകേണ്ടതെന്തിന്? എന്നാൽ convolution ഫിൽട്ടറുകൾ പല ഡെപ്ത് ചാനലുകളുമായി (ആദ്യത്തേത് RGB നിറങ്ങൾ, പിന്നീട് വിവിധ ഫിൽട്ടറുകൾക്കുള്ള ചാനലുകൾ) പ്രവർത്തിക്കുന്നുവെന്ന് ഓർക്കണം, 1x1 convolution ആ ഇൻപുട്ട് ചാനലുകൾ വ്യത്യസ്ത ട്രെയിനബിൾ വെയ്റ്റുകൾ ഉപയോഗിച്ച് മിശ്രിതമാക്കാൻ ഉപയോഗിക്കുന്നു. ഇത് ചാനൽ ഡൈമെൻഷനിൽ ഡൗൺസാമ്പ്ലിംഗ് (pooling) ആയി കാണാം.
|
||||
|
||||
ഈ വിഷയത്തിൽ [ഒരു നല്ല ബ്ലോഗ് പോസ്റ്റ്](https://medium.com/analytics-vidhya/talented-mr-1x1-comprehensive-look-at-1x1-convolution-in-deep-learning-f6b355825578) ഉണ്ട്, കൂടാതെ [അസൽ പേപ്പർ](https://arxiv.org/pdf/1312.4400.pdf) വായിക്കാം.
|
||||
|
||||
### MobileNet
|
||||
|
||||
MobileNet മൊബൈൽ ഉപകരണങ്ങൾക്ക് അനുയോജ്യമായ, വലുപ്പം കുറച്ച മോഡലുകളുടെ ഒരു കുടുംബമാണ്. നിങ്ങൾക്ക് റിസോഴ്സുകൾ കുറവാണെങ്കിൽ, കുറച്ച് കൃത്യത ത്യജിക്കാമെങ്കിൽ ഇവ ഉപയോഗിക്കാം. ഇവയുടെ പ്രധാന ആശയം **depthwise separable convolution** ആണ്, spatial convolution-കളും 1x1 convolution-ഉം ഡെപ്ത് ചാനലുകളിൽ ചേർത്ത് convolution ഫിൽട്ടറുകൾ പ്രതിനിധാനം ചെയ്യാൻ ഇത് സഹായിക്കുന്നു. ഇതു പാരാമീറ്ററുകളുടെ എണ്ണം വളരെ കുറയ്ക്കുന്നു, നെറ്റ്വർക്ക് വലുപ്പം ചെറുതാക്കുകയും കുറവ് ഡാറ്റ ഉപയോഗിച്ച് പരിശീലിപ്പിക്കാൻ എളുപ്പമാക്കുകയും ചെയ്യുന്നു.
|
||||
|
||||
MobileNet-നെക്കുറിച്ച് [ഒരു നല്ല ബ്ലോഗ് പോസ്റ്റ്](https://medium.com/analytics-vidhya/image-classification-with-mobilenet-cc6fbb2cd470) ഇവിടെ കാണാം.
|
||||
|
||||
## നിഗമനം
|
||||
|
||||
ഈ യൂണിറ്റിൽ, നിങ്ങൾ കമ്പ്യൂട്ടർ വിഷൻ ന്യൂറൽ നെറ്റ്വർക്കുകളുടെ പ്രധാന ആശയം - convolutional networks - പഠിച്ചു. ചിത്ര ക്ലാസിഫിക്കേഷൻ, ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ, ചിത്ര സൃഷ്ടി നെറ്റ്വർക്കുകൾ എല്ലാം CNN-കളിൽ അടിസ്ഥാനമാക്കിയുള്ളവയാണ്, കൂടുതൽ ലെയറുകളും ചില അധിക പരിശീലന തന്ത്രങ്ങളും ചേർത്ത്.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
സഹായക നോട്ട്ബുക്കുകളിൽ, കൂടുതൽ കൃത്യത നേടാനുള്ള കുറിപ്പുകൾ അടിക്കുറിപ്പായി നൽകിയിട്ടുണ്ട്. നിങ്ങൾക്ക് കൂടുതൽ കൃത്യത നേടാൻ കഴിയുന്നുണ്ടോ എന്ന് പരീക്ഷണങ്ങൾ നടത്തുക.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/14)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
CNN-കൾ സാധാരണയായി കമ്പ്യൂട്ടർ വിഷൻ ടാസ്കുകൾക്കാണ് ഉപയോഗിക്കുന്നത്, എന്നാൽ അവ സ്ഥിരമായ വലിപ്പത്തിലുള്ള പാറ്റേണുകൾ കണ്ടെത്താൻ പൊതുവെ നല്ലതാണ്. ഉദാഹരണത്തിന്, ശബ്ദവുമായി ബന്ധപ്പെട്ട്, ഓഡിയോ സിഗ്നലിൽ ചില പ്രത്യേക പാറ്റേണുകൾ കണ്ടെത്താൻ CNN-കൾ ഉപയോഗിക്കാം - അപ്പോൾ ഫിൽട്ടറുകൾ 1-ഡൈമെൻഷണൽ ആയിരിക്കും (ഇത്തരം CNN-നെ 1D-CNN എന്ന് വിളിക്കും). കൂടാതെ, ചിലപ്പോൾ 3D-CNN ഉപയോഗിച്ച് മൾട്ടി-ഡൈമെൻഷണൽ സ്പേസിൽ ഫീച്ചറുകൾ എടുക്കുന്നു, ഉദാഹരണത്തിന് വീഡിയോയിൽ സംഭവിക്കുന്ന ചില സംഭവങ്ങൾ - CNN സമയം അനുസരിച്ച് ഫീച്ചറുകളുടെ മാറ്റം പാറ്റേണുകൾ പിടികൂടാൻ കഴിയും. CNN-കൾ ഉപയോഗിച്ച് ചെയ്യാവുന്ന മറ്റ് ടാസ്കുകൾക്കായി അവലോകനം ചെയ്ത് സ്വയം പഠനം നടത്തുക.
|
||||
|
||||
## [അസൈൻമെന്റ്](lab/README.md)
|
||||
|
||||
ഈ ലാബിൽ, നിങ്ങൾക്ക് വ്യത്യസ്ത പൂച്ചയും നായയും ഇനങ്ങൾ ക്ലാസിഫൈ ചെയ്യേണ്ടതാണ്. ഈ ചിത്രങ്ങൾ MNIST ഡാറ്റാസെറ്റിനേക്കാൾ കൂടുതൽ സങ്കീർണ്ണവും ഉയർന്ന ഡൈമെൻഷനുകളുള്ളതും ആണ്, കൂടാതെ 10-ലധികം ക്ലാസുകൾ ഉണ്ട്.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,73 +1,73 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "a560d5b845962cf33dc102266e409568",
|
||||
"translation_date": "2025-11-25T22:06:14+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/07-ConvNets/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# കോൺവല്യൂഷണൽ ന്യൂറൽ നെറ്റ്വർക്കുകൾ
|
||||
|
||||
നാം മുമ്പ് കണ്ടതുപോലെ, ന്യൂറൽ നെറ്റ്വർക്കുകൾ ചിത്രങ്ങൾ കൈകാര്യം ചെയ്യുന്നതിൽ വളരെ നല്ലതാണ്, ഒറ്റ ലെയർ പെർസെപ്ട്രോൺ പോലും MNIST ഡാറ്റാസെറ്റിൽ നിന്നുള്ള കൈയെഴുത്ത് അക്കങ്ങൾ യുക്തിസഹമായ കൃത്യതയോടെ തിരിച്ചറിയാൻ കഴിയും. എന്നാൽ, MNIST ഡാറ്റാസെറ്റ് വളരെ പ്രത്യേകമാണ്, എല്ലാ അക്കങ്ങളും ചിത്രത്തിന്റെ മദ്ധ്യത്തിൽ സജ്ജീകരിച്ചിരിക്കുന്നു, ഇത് ജോലി എളുപ്പമാക്കുന്നു.
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/13)
|
||||
|
||||
യഥാർത്ഥ ജീവിതത്തിൽ, ചിത്രത്തിൽ ഒരു വസ്തുവിന്റെ കൃത്യമായ സ്ഥാനം എന്തായാലും അതിനെ തിരിച്ചറിയാൻ കഴിയണം. കമ്പ്യൂട്ടർ വിഷൻ സാധാരണ ക്ലാസിഫിക്കേഷനിൽ നിന്ന് വ്യത്യസ്തമാണ്, കാരണം നാം ഒരു പ്രത്യേക വസ്തു ചിത്രത്തിൽ കണ്ടെത്താൻ ശ്രമിക്കുമ്പോൾ, നാം ചിത്രത്തിൽ ചില പ്രത്യേക **പാറ്റേണുകൾ** അവയുടെ സംയോജനങ്ങളോടുകൂടി തിരയുകയാണ്. ഉദാഹരണത്തിന്, ഒരു പൂച്ചയെ കണ്ടെത്താൻ, ആദ്യം നാം ഹോരിസോണ്ടൽ ലൈനുകൾ തിരയാം, അവ തുമ്പുകൾ ആകാം, പിന്നെ തുമ്പുകളുടെ ഒരു പ്രത്യേക സംയോജനം അത് യഥാർത്ഥത്തിൽ പൂച്ചയുടെ ചിത്രം ആണെന്ന് പറയാം. സാപേക്ഷ സ്ഥാനം, ചില പാറ്റേണുകളുടെ സാന്നിധ്യം പ്രധാനമാണ്, ചിത്രത്തിലെ കൃത്യമായ സ്ഥാനം അല്ല.
|
||||
|
||||
പാറ്റേണുകൾ എടുക്കാൻ, നാം **കോൺവല്യൂഷണൽ ഫിൽട്ടറുകൾ** എന്ന ആശയം ഉപയോഗിക്കും. നിങ്ങൾക്ക് അറിയാമല്ലോ, ഒരു ചിത്രം 2D-മാട്രിക്സ് അല്ലെങ്കിൽ നിറത്തിന്റെ ആഴമുള്ള 3D-ടെൻസർ ആയി പ്രതിനിധീകരിക്കപ്പെടുന്നു. ഒരു ഫിൽട്ടർ പ്രയോഗിക്കുന്നത് അർത്ഥമാക്കുന്നത്, നാം ചെറിയ **ഫിൽട്ടർ കർണൽ** മാട്രിക്സ് എടുത്ത്, യഥാർത്ഥ ചിത്രത്തിലെ ഓരോ പിക്സലിനും സമീപമുള്ള പോയിന്റുകളുമായി ഭാരിത ശരാശരി കണക്കാക്കുകയാണ്. ഇത് ഒരു ചെറിയ വിൻഡോ മുഴുവൻ ചിത്രത്തിലൂടെ സ്ലൈഡ് ചെയ്യുന്നതുപോലെ കാണാം, ഫിൽട്ടർ കർണൽ മാട്രിക്സിലെ ഭാരങ്ങൾ അനുസരിച്ച് എല്ലാ പിക്സലുകളും ശരാശരി ചെയ്യുന്നു.
|
||||
|
||||
 | 
|
||||
----|----
|
||||
|
||||
> ചിത്രം: Dmitry Soshnikov
|
||||
|
||||
ഉദാഹരണത്തിന്, 3x3 വെർട്ടിക്കൽ എഡ്ജ്, ഹോരിസോണ്ടൽ എഡ്ജ് ഫിൽട്ടറുകൾ MNIST അക്കങ്ങളിൽ പ്രയോഗിച്ചാൽ, യഥാർത്ഥ ചിത്രത്തിലെ വെർട്ടിക്കൽ, ഹോരിസോണ്ടൽ എഡ്ജുകൾ ഉള്ള സ്ഥലങ്ങളിൽ ഹൈലൈറ്റുകൾ (ഉയർന്ന മൂല്യങ്ങൾ) ലഭിക്കും. അതിനാൽ ആ രണ്ട് ഫിൽട്ടറുകൾ എഡ്ജുകൾ "തിരയാൻ" ഉപയോഗിക്കാം. അതുപോലെ, നാം മറ്റ് താഴ്ന്ന തലത്തിലുള്ള പാറ്റേണുകൾ കണ്ടെത്താൻ വ്യത്യസ്ത ഫിൽട്ടറുകൾ രൂപകൽപ്പന ചെയ്യാം:
|
||||
|
||||
<img src="../../../../../translated_images/lmfilters.ea9e4868a82cf74cdca05121b1128f0122297cf2879501cd06956beb88ff96a2.ml.jpg" width="500" align="center"/>
|
||||
|
||||
> [Leung-Malik Filter Bank](https://www.robots.ox.ac.uk/~vgg/research/texclass/filters.html) ചിത്രം
|
||||
|
||||
എങ്കിലും, നാം ചില പാറ്റേണുകൾ കൈമാറി എടുക്കാൻ ഫിൽട്ടറുകൾ രൂപകൽപ്പന ചെയ്യാമെങ്കിലും, നെറ്റ്വർക്ക് സ്വയം പാറ്റേണുകൾ പഠിക്കുമെന്ന രീതിയിൽ രൂപകൽപ്പന ചെയ്യാനും കഴിയും. ഇത് CNN-ന്റെ പ്രധാന ആശയങ്ങളിൽ ഒന്നാണ്.
|
||||
|
||||
## CNN-ന്റെ പ്രധാന ആശയങ്ങൾ
|
||||
|
||||
CNN-കൾ പ്രവർത്തിക്കുന്നത് താഴെപ്പറയുന്ന പ്രധാന ആശയങ്ങളിലാണ് അടിസ്ഥാനമാക്കുന്നത്:
|
||||
|
||||
* കോൺവല്യൂഷണൽ ഫിൽട്ടറുകൾ പാറ്റേണുകൾ എടുക്കാൻ കഴിയും
|
||||
* ഫിൽട്ടറുകൾ സ്വയം പരിശീലിക്കപ്പെടുന്ന വിധത്തിൽ നെറ്റ്വർക്ക് രൂപകൽപ്പന ചെയ്യാം
|
||||
* നാം ഈ സമീപനം ഉപയോഗിച്ച് ഉയർന്ന തലത്തിലുള്ള ഫീച്ചറുകളിലും പാറ്റേണുകൾ കണ്ടെത്താം, യഥാർത്ഥ ചിത്രത്തിൽ മാത്രമല്ല. അതായത് CNN ഫീച്ചർ എക്സ്ട്രാക്ഷൻ പിക്സൽ സംയോജനങ്ങളിൽ നിന്നാരംഭിച്ച് ചിത്രഭാഗങ്ങളുടെ ഉയർന്ന തലത്തിലുള്ള സംയോജനങ്ങളിലേക്കുള്ള ഫീച്ചറുകളുടെ ഹയർആർക്കിയിൽ പ്രവർത്തിക്കുന്നു.
|
||||
|
||||

|
||||
|
||||
> [Hislop-Lynch](https://www.semanticscholar.org/paper/Computer-vision-based-pedestrian-trajectory-Hislop-Lynch/26e6f74853fc9bbb7487b06dc2cf095d36c9021d) എന്ന പേപ്പറിൽ നിന്നുള്ള ചിത്രം, അവരുടെ [ഗവേഷണത്തെ അടിസ്ഥാനമാക്കി](https://dl.acm.org/doi/abs/10.1145/1553374.1553453)
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: കോൺവല്യൂഷണൽ ന്യൂറൽ നെറ്റ്വർക്കുകൾ
|
||||
|
||||
കോൺവല്യൂഷണൽ ന്യൂറൽ നെറ്റ്വർക്കുകൾ എങ്ങനെ പ്രവർത്തിക്കുന്നു, ഫിൽട്ടറുകൾ എങ്ങനെ പരിശീലിക്കാവുന്നതാണ് എന്നത് നോക്കാം, അനുബന്ധ നോട്ട്ബുക്കുകൾ വഴി:
|
||||
|
||||
* [കോൺവല്യൂഷണൽ ന്യൂറൽ നെറ്റ്വർക്കുകൾ - PyTorch](ConvNetsPyTorch.ipynb)
|
||||
* [കോൺവല്യൂഷണൽ ന്യൂറൽ നെറ്റ്വർക്കുകൾ - TensorFlow](ConvNetsTF.ipynb)
|
||||
|
||||
## പിരമിഡ് ആർക്കിടെക്ചർ
|
||||
|
||||
ചിത്ര പ്രോസസ്സിംഗിനായി ഉപയോഗിക്കുന്ന മിക്ക CNN-കളും പിരമിഡ് ആർക്കിടെക്ചർ എന്ന രീതിയെ പിന്തുടരുന്നു. യഥാർത്ഥ ചിത്രങ്ങളിൽ പ്രയോഗിക്കുന്ന ആദ്യ കോൺവല്യൂഷണൽ ലെയർ സാധാരണയായി കുറച്ച് ഫിൽട്ടറുകൾ (8-16) ഉപയോഗിക്കുന്നു, അവ ഹോരിസോണ്ടൽ/വെർട്ടിക്കൽ ലൈനുകൾ പോലുള്ള വ്യത്യസ്ത പിക്സൽ സംയോജനങ്ങളെ പ്രതിനിധീകരിക്കുന്നു. അടുത്ത ലെയറിൽ, നെറ്റ്വർക്ക് സ്പേഷ്യൽ ഡൈമെൻഷൻ കുറയ്ക്കുകയും, ഫിൽട്ടറുകളുടെ എണ്ണം വർദ്ധിപ്പിക്കുകയും ചെയ്യുന്നു, ഇത് ലളിതമായ ഫീച്ചറുകളുടെ കൂടുതൽ സംയോജനങ്ങൾക്കു വഴിയൊരുക്കുന്നു. ഓരോ ലെയറിലും, അവസാന ക്ലാസിഫയറിലേക്കു നീങ്ങുമ്പോൾ, ചിത്രത്തിന്റെ സ്പേഷ്യൽ ഡൈമെൻഷൻ കുറയുകയും, ഫിൽട്ടറുകളുടെ എണ്ണം വർദ്ധിക്കുകയും ചെയ്യുന്നു.
|
||||
|
||||
ഉദാഹരണമായി, 2014-ൽ ImageNet ടോപ്പ്-5 ക്ലാസിഫിക്കേഷനിൽ 92.7% കൃത്യത നേടിയ VGG-16 നെറ്റ്വർക്ക് ആർക്കിടെക്ചർ നോക്കാം:
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
> [Researchgate](https://www.researchgate.net/figure/Vgg16-model-structure-To-get-the-VGG-NIN-model-we-replace-the-2-nd-4-th-6-th-7-th_fig2_335194493) നിന്നുള്ള ചിത്രം
|
||||
|
||||
## പ്രശസ്തമായ CNN ആർക്കിടെക്ചറുകൾ
|
||||
|
||||
[പ്രശസ്തമായ CNN ആർക്കിടെക്ചറുകൾക്കുറിച്ച് പഠനം തുടരുക](CNN_Architectures.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "a560d5b845962cf33dc102266e409568",
|
||||
"translation_date": "2025-11-25T22:06:14+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/07-ConvNets/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# കോൺവല്യൂഷണൽ ന്യൂറൽ നെറ്റ്വർക്കുകൾ
|
||||
|
||||
നാം മുമ്പ് കണ്ടതുപോലെ, ന്യൂറൽ നെറ്റ്വർക്കുകൾ ചിത്രങ്ങൾ കൈകാര്യം ചെയ്യുന്നതിൽ വളരെ നല്ലതാണ്, ഒറ്റ ലെയർ പെർസെപ്ട്രോൺ പോലും MNIST ഡാറ്റാസെറ്റിൽ നിന്നുള്ള കൈയെഴുത്ത് അക്കങ്ങൾ യുക്തിസഹമായ കൃത്യതയോടെ തിരിച്ചറിയാൻ കഴിയും. എന്നാൽ, MNIST ഡാറ്റാസെറ്റ് വളരെ പ്രത്യേകമാണ്, എല്ലാ അക്കങ്ങളും ചിത്രത്തിന്റെ മദ്ധ്യത്തിൽ സജ്ജീകരിച്ചിരിക്കുന്നു, ഇത് ജോലി എളുപ്പമാക്കുന്നു.
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/13)
|
||||
|
||||
യഥാർത്ഥ ജീവിതത്തിൽ, ചിത്രത്തിൽ ഒരു വസ്തുവിന്റെ കൃത്യമായ സ്ഥാനം എന്തായാലും അതിനെ തിരിച്ചറിയാൻ കഴിയണം. കമ്പ്യൂട്ടർ വിഷൻ സാധാരണ ക്ലാസിഫിക്കേഷനിൽ നിന്ന് വ്യത്യസ്തമാണ്, കാരണം നാം ഒരു പ്രത്യേക വസ്തു ചിത്രത്തിൽ കണ്ടെത്താൻ ശ്രമിക്കുമ്പോൾ, നാം ചിത്രത്തിൽ ചില പ്രത്യേക **പാറ്റേണുകൾ** അവയുടെ സംയോജനങ്ങളോടുകൂടി തിരയുകയാണ്. ഉദാഹരണത്തിന്, ഒരു പൂച്ചയെ കണ്ടെത്താൻ, ആദ്യം നാം ഹോരിസോണ്ടൽ ലൈനുകൾ തിരയാം, അവ തുമ്പുകൾ ആകാം, പിന്നെ തുമ്പുകളുടെ ഒരു പ്രത്യേക സംയോജനം അത് യഥാർത്ഥത്തിൽ പൂച്ചയുടെ ചിത്രം ആണെന്ന് പറയാം. സാപേക്ഷ സ്ഥാനം, ചില പാറ്റേണുകളുടെ സാന്നിധ്യം പ്രധാനമാണ്, ചിത്രത്തിലെ കൃത്യമായ സ്ഥാനം അല്ല.
|
||||
|
||||
പാറ്റേണുകൾ എടുക്കാൻ, നാം **കോൺവല്യൂഷണൽ ഫിൽട്ടറുകൾ** എന്ന ആശയം ഉപയോഗിക്കും. നിങ്ങൾക്ക് അറിയാമല്ലോ, ഒരു ചിത്രം 2D-മാട്രിക്സ് അല്ലെങ്കിൽ നിറത്തിന്റെ ആഴമുള്ള 3D-ടെൻസർ ആയി പ്രതിനിധീകരിക്കപ്പെടുന്നു. ഒരു ഫിൽട്ടർ പ്രയോഗിക്കുന്നത് അർത്ഥമാക്കുന്നത്, നാം ചെറിയ **ഫിൽട്ടർ കർണൽ** മാട്രിക്സ് എടുത്ത്, യഥാർത്ഥ ചിത്രത്തിലെ ഓരോ പിക്സലിനും സമീപമുള്ള പോയിന്റുകളുമായി ഭാരിത ശരാശരി കണക്കാക്കുകയാണ്. ഇത് ഒരു ചെറിയ വിൻഡോ മുഴുവൻ ചിത്രത്തിലൂടെ സ്ലൈഡ് ചെയ്യുന്നതുപോലെ കാണാം, ഫിൽട്ടർ കർണൽ മാട്രിക്സിലെ ഭാരങ്ങൾ അനുസരിച്ച് എല്ലാ പിക്സലുകളും ശരാശരി ചെയ്യുന്നു.
|
||||
|
||||
 | 
|
||||
----|----
|
||||
|
||||
> ചിത്രം: Dmitry Soshnikov
|
||||
|
||||
ഉദാഹരണത്തിന്, 3x3 വെർട്ടിക്കൽ എഡ്ജ്, ഹോരിസോണ്ടൽ എഡ്ജ് ഫിൽട്ടറുകൾ MNIST അക്കങ്ങളിൽ പ്രയോഗിച്ചാൽ, യഥാർത്ഥ ചിത്രത്തിലെ വെർട്ടിക്കൽ, ഹോരിസോണ്ടൽ എഡ്ജുകൾ ഉള്ള സ്ഥലങ്ങളിൽ ഹൈലൈറ്റുകൾ (ഉയർന്ന മൂല്യങ്ങൾ) ലഭിക്കും. അതിനാൽ ആ രണ്ട് ഫിൽട്ടറുകൾ എഡ്ജുകൾ "തിരയാൻ" ഉപയോഗിക്കാം. അതുപോലെ, നാം മറ്റ് താഴ്ന്ന തലത്തിലുള്ള പാറ്റേണുകൾ കണ്ടെത്താൻ വ്യത്യസ്ത ഫിൽട്ടറുകൾ രൂപകൽപ്പന ചെയ്യാം:
|
||||
|
||||
<img src="../../../../../translated_images/lmfilters.ea9e4868a82cf74c.ml.jpg" width="500" align="center"/>
|
||||
|
||||
> [Leung-Malik Filter Bank](https://www.robots.ox.ac.uk/~vgg/research/texclass/filters.html) ചിത്രം
|
||||
|
||||
എങ്കിലും, നാം ചില പാറ്റേണുകൾ കൈമാറി എടുക്കാൻ ഫിൽട്ടറുകൾ രൂപകൽപ്പന ചെയ്യാമെങ്കിലും, നെറ്റ്വർക്ക് സ്വയം പാറ്റേണുകൾ പഠിക്കുമെന്ന രീതിയിൽ രൂപകൽപ്പന ചെയ്യാനും കഴിയും. ഇത് CNN-ന്റെ പ്രധാന ആശയങ്ങളിൽ ഒന്നാണ്.
|
||||
|
||||
## CNN-ന്റെ പ്രധാന ആശയങ്ങൾ
|
||||
|
||||
CNN-കൾ പ്രവർത്തിക്കുന്നത് താഴെപ്പറയുന്ന പ്രധാന ആശയങ്ങളിലാണ് അടിസ്ഥാനമാക്കുന്നത്:
|
||||
|
||||
* കോൺവല്യൂഷണൽ ഫിൽട്ടറുകൾ പാറ്റേണുകൾ എടുക്കാൻ കഴിയും
|
||||
* ഫിൽട്ടറുകൾ സ്വയം പരിശീലിക്കപ്പെടുന്ന വിധത്തിൽ നെറ്റ്വർക്ക് രൂപകൽപ്പന ചെയ്യാം
|
||||
* നാം ഈ സമീപനം ഉപയോഗിച്ച് ഉയർന്ന തലത്തിലുള്ള ഫീച്ചറുകളിലും പാറ്റേണുകൾ കണ്ടെത്താം, യഥാർത്ഥ ചിത്രത്തിൽ മാത്രമല്ല. അതായത് CNN ഫീച്ചർ എക്സ്ട്രാക്ഷൻ പിക്സൽ സംയോജനങ്ങളിൽ നിന്നാരംഭിച്ച് ചിത്രഭാഗങ്ങളുടെ ഉയർന്ന തലത്തിലുള്ള സംയോജനങ്ങളിലേക്കുള്ള ഫീച്ചറുകളുടെ ഹയർആർക്കിയിൽ പ്രവർത്തിക്കുന്നു.
|
||||
|
||||

|
||||
|
||||
> [Hislop-Lynch](https://www.semanticscholar.org/paper/Computer-vision-based-pedestrian-trajectory-Hislop-Lynch/26e6f74853fc9bbb7487b06dc2cf095d36c9021d) എന്ന പേപ്പറിൽ നിന്നുള്ള ചിത്രം, അവരുടെ [ഗവേഷണത്തെ അടിസ്ഥാനമാക്കി](https://dl.acm.org/doi/abs/10.1145/1553374.1553453)
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: കോൺവല്യൂഷണൽ ന്യൂറൽ നെറ്റ്വർക്കുകൾ
|
||||
|
||||
കോൺവല്യൂഷണൽ ന്യൂറൽ നെറ്റ്വർക്കുകൾ എങ്ങനെ പ്രവർത്തിക്കുന്നു, ഫിൽട്ടറുകൾ എങ്ങനെ പരിശീലിക്കാവുന്നതാണ് എന്നത് നോക്കാം, അനുബന്ധ നോട്ട്ബുക്കുകൾ വഴി:
|
||||
|
||||
* [കോൺവല്യൂഷണൽ ന്യൂറൽ നെറ്റ്വർക്കുകൾ - PyTorch](ConvNetsPyTorch.ipynb)
|
||||
* [കോൺവല്യൂഷണൽ ന്യൂറൽ നെറ്റ്വർക്കുകൾ - TensorFlow](ConvNetsTF.ipynb)
|
||||
|
||||
## പിരമിഡ് ആർക്കിടെക്ചർ
|
||||
|
||||
ചിത്ര പ്രോസസ്സിംഗിനായി ഉപയോഗിക്കുന്ന മിക്ക CNN-കളും പിരമിഡ് ആർക്കിടെക്ചർ എന്ന രീതിയെ പിന്തുടരുന്നു. യഥാർത്ഥ ചിത്രങ്ങളിൽ പ്രയോഗിക്കുന്ന ആദ്യ കോൺവല്യൂഷണൽ ലെയർ സാധാരണയായി കുറച്ച് ഫിൽട്ടറുകൾ (8-16) ഉപയോഗിക്കുന്നു, അവ ഹോരിസോണ്ടൽ/വെർട്ടിക്കൽ ലൈനുകൾ പോലുള്ള വ്യത്യസ്ത പിക്സൽ സംയോജനങ്ങളെ പ്രതിനിധീകരിക്കുന്നു. അടുത്ത ലെയറിൽ, നെറ്റ്വർക്ക് സ്പേഷ്യൽ ഡൈമെൻഷൻ കുറയ്ക്കുകയും, ഫിൽട്ടറുകളുടെ എണ്ണം വർദ്ധിപ്പിക്കുകയും ചെയ്യുന്നു, ഇത് ലളിതമായ ഫീച്ചറുകളുടെ കൂടുതൽ സംയോജനങ്ങൾക്കു വഴിയൊരുക്കുന്നു. ഓരോ ലെയറിലും, അവസാന ക്ലാസിഫയറിലേക്കു നീങ്ങുമ്പോൾ, ചിത്രത്തിന്റെ സ്പേഷ്യൽ ഡൈമെൻഷൻ കുറയുകയും, ഫിൽട്ടറുകളുടെ എണ്ണം വർദ്ധിക്കുകയും ചെയ്യുന്നു.
|
||||
|
||||
ഉദാഹരണമായി, 2014-ൽ ImageNet ടോപ്പ്-5 ക്ലാസിഫിക്കേഷനിൽ 92.7% കൃത്യത നേടിയ VGG-16 നെറ്റ്വർക്ക് ആർക്കിടെക്ചർ നോക്കാം:
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
> [Researchgate](https://www.researchgate.net/figure/Vgg16-model-structure-To-get-the-VGG-NIN-model-we-replace-the-2-nd-4-th-6-th-7-th_fig2_335194493) നിന്നുള്ള ചിത്രം
|
||||
|
||||
## പ്രശസ്തമായ CNN ആർക്കിടെക്ചറുകൾ
|
||||
|
||||
[പ്രശസ്തമായ CNN ആർക്കിടെക്ചറുകൾക്കുറിച്ച് പഠനം തുടരുക](CNN_Architectures.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,49 +1,49 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "b70fcf7fcee862990f848c679090943f",
|
||||
"translation_date": "2025-11-25T22:42:24+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/07-ConvNets/lab/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# മൃഗങ്ങളുടെ മുഖങ്ങളുടെ വർഗ്ഗീകരണം
|
||||
|
||||
[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) ലെ ലാബ് അസൈൻമെന്റ്.
|
||||
|
||||
## ടാസ്ക്
|
||||
|
||||
ഒരു മൃഗശാലയ്ക്ക് എല്ലാ മൃഗങ്ങളും കാറ്റലോഗ് ചെയ്യാനുള്ള ഒരു ആപ്ലിക്കേഷൻ വികസിപ്പിക്കേണ്ടതായി നിങ്ങൾക്ക് ധരിക്കാം. അത്തരത്തിലുള്ള ഒരു ആപ്ലിക്കേഷന്റെ മികച്ച സവിശേഷതകളിലൊന്ന് ഫോട്ടോഗ്രാഫിൽ നിന്ന് സ്വയം ജാതി കണ്ടെത്തുക എന്നതാണ്. ഇത് ന്യുറൽ നെറ്റ്വർക്കുകൾ ഉപയോഗിച്ച് വിജയകരമായി ചെയ്യാം.
|
||||
|
||||
**Pet Faces** ഡാറ്റാസെറ്റ് ഉപയോഗിച്ച് വിവിധ പൂച്ചകളും നായകളും ജാതികൾ വർഗ്ഗീകരിക്കാൻ നിങ്ങൾ ഒരു കോൺവല്യൂഷണൽ ന്യുറൽ നെറ്റ്വർക്ക് പരിശീലിപ്പിക്കേണ്ടതാണ്.
|
||||
|
||||
## ഡാറ്റാസെറ്റ്
|
||||
|
||||
നാം ഉപയോഗിക്കുന്നത് [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) ആണ്, ഇതിൽ 37 വ്യത്യസ്ത നായയും പൂച്ചയും ജാതികളുടെ ചിത്രങ്ങൾ ഉൾപ്പെടുന്നു.
|
||||
|
||||

|
||||
|
||||
ഡാറ്റാസെറ്റ് ഡൗൺലോഡ് ചെയ്യാൻ, ഈ കോഡ് സ്നിപ്പെറ്റ് ഉപയോഗിക്കുക:
|
||||
|
||||
```python
|
||||
!wget https://thor.robots.ox.ac.uk/~vgg/data/pets/images.tar.gz
|
||||
!tar xfz images.tar.gz
|
||||
!rm images.tar.gz
|
||||
```
|
||||
|
||||
**കുറിപ്പ്:** Oxford-IIIT Pet Dataset ചിത്രങ്ങൾ ഫയൽനാമുകൾ പ്രകാരം ക്രമീകരിച്ചിരിക്കുന്നു (ഉദാ., `Abyssinian_1.jpg`, `Bengal_2.jpg`). ഈ നോട്ട്ബുക്കിൽ ഈ ചിത്രങ്ങൾ ജാതി-പ്രത്യേക സബ്ഡയറക്ടറികളിലേക്ക് ക്രമീകരിക്കുന്ന കോഡ് ഉൾപ്പെടുത്തിയിട്ടുണ്ട്, ഇത് വർഗ്ഗീകരണം എളുപ്പമാക്കുന്നു.
|
||||
|
||||
## സ്റ്റാർട്ടിംഗ് നോട്ട്ബുക്ക്
|
||||
|
||||
ലാബ് ആരംഭിക്കാൻ [PetFaces.ipynb](PetFaces.ipynb) തുറക്കുക
|
||||
|
||||
## പഠിപ്പുകൾ
|
||||
|
||||
നിങ്ങൾ ഒരു സങ്കീർണ്ണമായ ഇമേജ് വർഗ്ഗീകരണ പ്രശ്നം തുടക്കത്തിൽ നിന്ന് പരിഹരിച്ചു! ക്ലാസുകൾ വളരെ കൂടുതലായിരുന്നു, എന്നാൽ നിങ്ങൾക്ക് യുക്തിസഹമായ കൃത്യത നേടാൻ കഴിഞ്ഞു! ചില ക്ലാസുകൾ മനുഷ്യർക്കും വ്യക്തമായി വ്യത്യസ്തമല്ലാത്തതിനാൽ, ടോപ്പ്-k കൃത്യത അളക്കുന്നത് ബുദ്ധിമുട്ടുള്ള ക്ലാസുകൾ തമ്മിൽ തെറ്റിദ്ധരിക്കപ്പെടുന്നത് കുറയ്ക്കാൻ സഹായിക്കുന്നു.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് പരിഗണിക്കേണ്ടതാണ്. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "b70fcf7fcee862990f848c679090943f",
|
||||
"translation_date": "2025-11-25T22:42:24+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/07-ConvNets/lab/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# മൃഗങ്ങളുടെ മുഖങ്ങളുടെ വർഗ്ഗീകരണം
|
||||
|
||||
[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) ലെ ലാബ് അസൈൻമെന്റ്.
|
||||
|
||||
## ടാസ്ക്
|
||||
|
||||
ഒരു മൃഗശാലയ്ക്ക് എല്ലാ മൃഗങ്ങളും കാറ്റലോഗ് ചെയ്യാനുള്ള ഒരു ആപ്ലിക്കേഷൻ വികസിപ്പിക്കേണ്ടതായി നിങ്ങൾക്ക് ധരിക്കാം. അത്തരത്തിലുള്ള ഒരു ആപ്ലിക്കേഷന്റെ മികച്ച സവിശേഷതകളിലൊന്ന് ഫോട്ടോഗ്രാഫിൽ നിന്ന് സ്വയം ജാതി കണ്ടെത്തുക എന്നതാണ്. ഇത് ന്യുറൽ നെറ്റ്വർക്കുകൾ ഉപയോഗിച്ച് വിജയകരമായി ചെയ്യാം.
|
||||
|
||||
**Pet Faces** ഡാറ്റാസെറ്റ് ഉപയോഗിച്ച് വിവിധ പൂച്ചകളും നായകളും ജാതികൾ വർഗ്ഗീകരിക്കാൻ നിങ്ങൾ ഒരു കോൺവല്യൂഷണൽ ന്യുറൽ നെറ്റ്വർക്ക് പരിശീലിപ്പിക്കേണ്ടതാണ്.
|
||||
|
||||
## ഡാറ്റാസെറ്റ്
|
||||
|
||||
നാം ഉപയോഗിക്കുന്നത് [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) ആണ്, ഇതിൽ 37 വ്യത്യസ്ത നായയും പൂച്ചയും ജാതികളുടെ ചിത്രങ്ങൾ ഉൾപ്പെടുന്നു.
|
||||
|
||||

|
||||
|
||||
ഡാറ്റാസെറ്റ് ഡൗൺലോഡ് ചെയ്യാൻ, ഈ കോഡ് സ്നിപ്പെറ്റ് ഉപയോഗിക്കുക:
|
||||
|
||||
```python
|
||||
!wget https://thor.robots.ox.ac.uk/~vgg/data/pets/images.tar.gz
|
||||
!tar xfz images.tar.gz
|
||||
!rm images.tar.gz
|
||||
```
|
||||
|
||||
**കുറിപ്പ്:** Oxford-IIIT Pet Dataset ചിത്രങ്ങൾ ഫയൽനാമുകൾ പ്രകാരം ക്രമീകരിച്ചിരിക്കുന്നു (ഉദാ., `Abyssinian_1.jpg`, `Bengal_2.jpg`). ഈ നോട്ട്ബുക്കിൽ ഈ ചിത്രങ്ങൾ ജാതി-പ്രത്യേക സബ്ഡയറക്ടറികളിലേക്ക് ക്രമീകരിക്കുന്ന കോഡ് ഉൾപ്പെടുത്തിയിട്ടുണ്ട്, ഇത് വർഗ്ഗീകരണം എളുപ്പമാക്കുന്നു.
|
||||
|
||||
## സ്റ്റാർട്ടിംഗ് നോട്ട്ബുക്ക്
|
||||
|
||||
ലാബ് ആരംഭിക്കാൻ [PetFaces.ipynb](PetFaces.ipynb) തുറക്കുക
|
||||
|
||||
## പഠിപ്പുകൾ
|
||||
|
||||
നിങ്ങൾ ഒരു സങ്കീർണ്ണമായ ഇമേജ് വർഗ്ഗീകരണ പ്രശ്നം തുടക്കത്തിൽ നിന്ന് പരിഹരിച്ചു! ക്ലാസുകൾ വളരെ കൂടുതലായിരുന്നു, എന്നാൽ നിങ്ങൾക്ക് യുക്തിസഹമായ കൃത്യത നേടാൻ കഴിഞ്ഞു! ചില ക്ലാസുകൾ മനുഷ്യർക്കും വ്യക്തമായി വ്യത്യസ്തമല്ലാത്തതിനാൽ, ടോപ്പ്-k കൃത്യത അളക്കുന്നത് ബുദ്ധിമുട്ടുള്ള ക്ലാസുകൾ തമ്മിൽ തെറ്റിദ്ധരിക്കപ്പെടുന്നത് കുറയ്ക്കാൻ സഹായിക്കുന്നു.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് പരിഗണിക്കേണ്ടതാണ്. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1,94 +1,94 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "178c0b5ee5395733eb18aec51e71a0a9",
|
||||
"translation_date": "2025-11-25T22:10:22+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/08-TransferLearning/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# മുൻപരിചയമുള്ള നെറ്റ്വർക്കുകളും ട്രാൻസ്ഫർ ലേണിംഗും
|
||||
|
||||
CNN-കൾ പരിശീലിപ്പിക്കാൻ വളരെ സമയം വേണ്ടിവരും, കൂടാതെ അതിനായി വലിയ ഡാറ്റ ആവശ്യമാണ്. എന്നാൽ, ഒരു നെറ്റ്വർക്ക് ചിത്രങ്ങളിൽ നിന്നുള്ള പാറ്റേണുകൾ എടുക്കാൻ ഉപയോഗിക്കുന്ന മികച്ച ലോ-ലെവൽ ഫിൽട്ടറുകൾ പഠിക്കുന്നതിൽ കൂടുതലായാണ് സമയം ചെലവഴിക്കുന്നത്. ഒരു സ്വാഭാവിക ചോദ്യമാണ് - ഒരു ഡാറ്റാസെറ്റിൽ പരിശീലിപ്പിച്ച ഒരു ന്യൂറൽ നെറ്റ്വർക്ക് ഉപയോഗിച്ച്, പൂർണ്ണ പരിശീലന പ്രക്രിയ ആവശ്യമില്ലാതെ വ്യത്യസ്ത ചിത്രങ്ങൾ വർഗ്ഗീകരിക്കാൻ അതിനെ അനുയോജ്യമായി മാറ്റാമോ?
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/15)
|
||||
|
||||
ഈ സമീപനം **ട്രാൻസ്ഫർ ലേണിംഗ്** എന്ന് വിളിക്കുന്നു, കാരണം ഒരു ന്യൂറൽ നെറ്റ്വർക്ക് മോഡലിൽ നിന്നുള്ള ചില അറിവ് മറ്റൊരു മോഡലിലേക്ക് മാറ്റുന്നു. ട്രാൻസ്ഫർ ലേണിംഗിൽ, സാധാരണയായി, വലിയ ചിത്ര ഡാറ്റാസെറ്റിൽ പരിശീലിപ്പിച്ച ഒരു മുൻപരിചയമുള്ള മോഡലിൽ നിന്ന് ആരംഭിക്കുന്നു, ഉദാഹരണത്തിന് **ImageNet**. ആ മോഡലുകൾ സാധാരണ ചിത്രങ്ങളിൽ നിന്നുള്ള വിവിധ ഫീച്ചറുകൾ എടുക്കുന്നതിൽ നല്ല പ്രകടനം കാണിക്കുന്നു, പലപ്പോഴും ആ ഫീച്ചറുകളുടെ മുകളിൽ ഒരു ക്ലാസിഫയർ നിർമ്മിക്കുന്നത് നല്ല ഫലം നൽകുന്നു.
|
||||
|
||||
> ✅ ട്രാൻസ്ഫർ ലേണിംഗ് എന്ന പദം വിദ്യാഭ്യാസം പോലുള്ള മറ്റ് അക്കാദമിക് മേഖലകളിലും കാണപ്പെടുന്നു. ഇത് ഒരു ഡൊമെയ്നിൽ നിന്നുള്ള അറിവ് മറ്റൊരു ഡൊമെയ്നിൽ പ്രയോഗിക്കുന്ന പ്രക്രിയയെ സൂചിപ്പിക്കുന്നു.
|
||||
|
||||
## മുൻപരിചയമുള്ള മോഡലുകൾ ഫീച്ചർ എക്സ്ട്രാക്ടറുകളായി
|
||||
|
||||
മുൻവകുപ്പിൽ ചർച്ച ചെയ്ത കോൺവല്യൂഷണൽ നെറ്റ്വർക്ക് പല ലെയറുകൾ അടങ്ങിയിരുന്നു, ഓരോ ലെയറും ചിത്രത്തിൽ നിന്നുള്ള ചില ഫീച്ചറുകൾ എടുക്കാൻ ഉദ്ദേശിച്ചിരിക്കുന്നു, താഴ്ന്ന തലത്തിലുള്ള പിക്സൽ കോമ്പിനേഷനുകളിൽ നിന്ന് (ഉദാഹരണത്തിന്, ഹോരിസോണ്ടൽ/വെർട്ടിക്കൽ ലൈൻ അല്ലെങ്കിൽ സ്ട്രോക്ക്) തുടങ്ങി ഉയർന്ന തലത്തിലുള്ള ഫീച്ചറുകളുടെ കോമ്പിനേഷനുകൾ വരെ, ഉദാഹരണത്തിന്, ഒരു ജ്വാലയുടെ കണ്ണ് പോലുള്ളവ. സാധാരണയും വൈവിധ്യമാർന്ന വലിയ ഡാറ്റാസെറ്റിൽ CNN പരിശീലിപ്പിച്ചാൽ, നെറ്റ്വർക്ക് ആ പൊതുവായ ഫീച്ചറുകൾ എടുക്കാൻ പഠിക്കും.
|
||||
|
||||
Keras-നും PyTorch-നും ImageNet ചിത്രങ്ങളിൽ പരിശീലിപ്പിച്ച ചില സാധാരണ ആർക്കിടെക്ചറുകൾക്കായി മുൻപരിചയമുള്ള ന്യൂറൽ നെറ്റ്വർക്ക് വെയ്റ്റുകൾ എളുപ്പത്തിൽ ലോഡ് ചെയ്യാനുള്ള ഫംഗ്ഷനുകൾ ഉണ്ട്. മുൻപത്തെ പാഠത്തിലെ [CNN ആർക്കിടെക്ചറുകൾ](../07-ConvNets/CNN_Architectures.md) പേജിൽ ഏറ്റവും സാധാരണ ഉപയോഗിക്കുന്നവ വിശദീകരിച്ചിരിക്കുന്നു. പ്രത്യേകിച്ച്, താഴെ പറയുന്നവയിൽ ഒന്നോ അതിലധികമോ ഉപയോഗിക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കാം:
|
||||
|
||||
* **VGG-16/VGG-19** - സാദാരണമായ മോഡലുകൾ ആയിട്ടും നല്ല കൃത്യത നൽകുന്നു. ട്രാൻസ്ഫർ ലേണിംഗ് എങ്ങനെ പ്രവർത്തിക്കുന്നു എന്ന് കാണാൻ ആദ്യ ശ്രമമായി VGG ഉപയോഗിക്കുന്നത് നല്ല തിരഞ്ഞെടുപ്പാണ്.
|
||||
* **ResNet** - 2015-ൽ Microsoft Research നിർദ്ദേശിച്ച മോഡലുകളുടെ കുടുംബം. കൂടുതൽ ലെയറുകൾ ഉള്ളതിനാൽ കൂടുതൽ റിസോഴ്സുകൾ ആവശ്യമാണ്.
|
||||
* **MobileNet** - ചെറുതായ മോഡലുകളുടെ കുടുംബം, മൊബൈൽ ഉപകരണങ്ങൾക്ക് അനുയോജ്യം. റിസോഴ്സുകൾ കുറവാണെങ്കിൽ, കുറച്ച് കൃത്യത ത്യജിച്ച് ഇവ ഉപയോഗിക്കാം.
|
||||
|
||||
ഇവിടെ VGG-16 നെറ്റ്വർക്ക് ഒരു പൂച്ചയുടെ ചിത്രത്തിൽ നിന്നെടുത്ത ഫീച്ചറുകളുടെ ഉദാഹരണം കാണാം:
|
||||
|
||||

|
||||
|
||||
## പൂച്ചകളും നായകളും ഡാറ്റാസെറ്റ്
|
||||
|
||||
ഈ ഉദാഹരണത്തിൽ, നാം [പൂച്ചകളും നായകളും](https://www.microsoft.com/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste) എന്ന ഡാറ്റാസെറ്റ് ഉപയോഗിക്കും, ഇത് യാഥാർത്ഥ്യ ചിത്ര വർഗ്ഗീകരണ സാഹചര്യത്തിന് വളരെ അടുത്തതാണ്.
|
||||
|
||||
## ✍️ അഭ്യാസം: ട്രാൻസ്ഫർ ലേണിംഗ്
|
||||
|
||||
ട്രാൻസ്ഫർ ലേണിംഗ് പ്രവർത്തനത്തിൽ കാണാം അനുബന്ധ നോട്ട്ബുക്കുകളിൽ:
|
||||
|
||||
* [ട്രാൻസ്ഫർ ലേണിംഗ് - PyTorch](TransferLearningPyTorch.ipynb)
|
||||
* [ട്രാൻസ്ഫർ ലേണിംഗ് - TensorFlow](TransferLearningTF.ipynb)
|
||||
|
||||
## എതിരാളി പൂച്ചയുടെ ദൃശ്യവൽക്കരണം
|
||||
|
||||
മുൻപരിചയമുള്ള ന്യൂറൽ നെറ്റ്വർക്ക് അതിന്റെ *ബ്രെയിനിൽ* വിവിധ പാറ്റേണുകൾ ഉൾക്കൊള്ളുന്നു, അതിൽ **ആദർശ പൂച്ച** (പൂച്ച, നായ, സീബ്ര തുടങ്ങിയവയുടെ ആദർശം) എന്ന ആശയങ്ങളും ഉൾപ്പെടുന്നു. ഈ ചിത്രം **ദൃശ്യവൽക്കരിക്കുക** എന്നത് രസകരമായിരിക്കും. എന്നാൽ ഇത് എളുപ്പമല്ല, കാരണം പാറ്റേണുകൾ നെറ്റ്വർക്ക് വെയ്റ്റുകളിൽ വ്യാപിച്ചിരിക്കുന്നു, കൂടാതെ അവ ഒരു ഹയർആർക്കിക്കൽ ഘടനയിലും ക്രമീകരിച്ചിരിക്കുന്നു.
|
||||
|
||||
ഒരു സമീപനം, ഒരു യാദൃച്ഛിക ചിത്രം കൊണ്ട് ആരംഭിച്ച്, **ഗ്രേഡിയന്റ് ഡിസെന്റ് ഓപ്റ്റിമൈസേഷൻ** സാങ്കേതിക വിദ്യ ഉപയോഗിച്ച് ആ ചിത്രം അങ്ങനെ ക്രമീകരിക്കാൻ ശ്രമിക്കുക എന്നതാണ്, നെറ്റ്വർക്ക് അത് പൂച്ചയാണെന്ന് കരുതാൻ തുടങ്ങും വിധം.
|
||||
|
||||

|
||||
|
||||
എങ്കിലും, ഇത് ചെയ്താൽ, നമുക്ക് യാദൃച്ഛിക ശബ്ദം പോലുള്ള ഒന്നാണ് ലഭിക്കുന്നത്. കാരണം *നെറ്റ്വർക്ക് ഇൻപുട്ട് ചിത്രം പൂച്ചയാണെന്ന് കരുതാൻ നിരവധി മാർഗ്ഗങ്ങൾ ഉണ്ട്*, ചിലത് ദൃശ്യമായി അർത്ഥവത്തല്ലാത്തവയും. ആ ചിത്രങ്ങളിൽ പൂച്ചയ്ക്ക് സാധാരണമായ പല പാറ്റേണുകളും ഉണ്ടെങ്കിലും, അവ ദൃശ്യമായി വ്യത്യസ്തമാകാൻ യാതൊരു നിയന്ത്രണവും ഇല്ല.
|
||||
|
||||
ഫലം മെച്ചപ്പെടുത്താൻ, നാം നഷ്ട ഫംഗ്ഷനിൽ മറ്റൊരു പദം ചേർക്കാം, അത് **വേരിയേഷൻ ലോസ്** എന്ന് വിളിക്കുന്നു. ഇത് ചിത്രത്തിലെ സമീപമുള്ള പിക്സലുകൾ എത്രത്തോളം സമാനമാണെന്ന് കാണിക്കുന്ന ഒരു മെട്രിക് ആണ്. വേരിയേഷൻ ലോസ് കുറയ്ക്കുന്നത് ചിത്രം മൃദുവാക്കുകയും ശബ്ദം നീക്കം ചെയ്യുകയും ചെയ്യുന്നു - അതിലൂടെ കൂടുതൽ ദൃശ്യപരമായി ആകർഷകമായ പാറ്റേണുകൾ വെളിപ്പെടുത്തുന്നു. താഴെ "ആദർശ" ചിത്രങ്ങളുടെ ഉദാഹരണം കാണാം, പൂച്ചയും സീബ്രയും ഉയർന്ന സാധ്യതയോടെ വർഗ്ഗീകരിക്കപ്പെട്ടവ:
|
||||
|
||||
 | 
|
||||
-----|-----
|
||||
*ആദർശ പൂച്ച* | *ആദർശ സീബ്ര*
|
||||
|
||||
ഇത്തരത്തിലുള്ള സമീപനം ന്യൂറൽ നെറ്റ്വർക്കിൽ **എതിരാളി ആക്രമണങ്ങൾ** നടത്താനും ഉപയോഗിക്കാം. ഒരു നായയെ പൂച്ചയെന്നു തോന്നിക്കാൻ നമുക്ക് ആഗ്രഹമുണ്ടെന്ന് കരുതുക. ഒരു നായയുടെ ചിത്രം, നെറ്റ്വർക്ക് നായയെന്നു തിരിച്ചറിയുന്ന ചിത്രം, നാം ഗ്രേഡിയന്റ് ഡിസെന്റ് ഓപ്റ്റിമൈസേഷൻ ഉപയോഗിച്ച് ചെറിയ മാറ്റങ്ങൾ വരുത്തി, നെറ്റ്വർക്ക് അത് പൂച്ചയെന്നു തിരിച്ചറിയാൻ തുടങ്ങും വരെ ക്രമീകരിക്കാം:
|
||||
|
||||
 | 
|
||||
-----|-----
|
||||
*നായയുടെ യഥാർത്ഥ ചിത്രം* | *പൂച്ചയെന്നു തിരിച്ചറിയപ്പെട്ട നായയുടെ ചിത്രം*
|
||||
|
||||
മുകളിൽ കാണിച്ച ഫലങ്ങൾ പുനരുത്പാദിപ്പിക്കാൻ കോഡ് താഴെ കാണുന്ന നോട്ട്ബുക്കിൽ ലഭ്യമാണ്:
|
||||
|
||||
* [ആദർശവും എതിരാളി പൂച്ചയും - TensorFlow](AdversarialCat_TF.ipynb)
|
||||
|
||||
## സംഗ്രഹം
|
||||
|
||||
ട്രാൻസ്ഫർ ലേണിംഗ് ഉപയോഗിച്ച്, നിങ്ങൾക്ക് ഒരു കസ്റ്റം ഒബ്ജക്റ്റ് ക്ലാസിഫിക്കേഷൻ ടാസ്കിനായി ക്ലാസിഫയർ വേഗത്തിൽ നിർമ്മിച്ച് ഉയർന്ന കൃത്യത നേടാം. ഇപ്പോൾ നാം പരിഹരിക്കുന്ന കൂടുതൽ സങ്കീർണ്ണമായ ടാസ്കുകൾക്ക് ഉയർന്ന കംപ്യൂട്ടേഷൻ ശക്തി ആവശ്യമാണ്, CPU-യിൽ എളുപ്പത്തിൽ പരിഹരിക്കാൻ കഴിയില്ല. അടുത്ത യൂണിറ്റിൽ, കുറവ് കംപ്യൂട്ടേഷൻ റിസോഴ്സുകൾ ഉപയോഗിച്ച് സമാന മോഡൽ പരിശീലിപ്പിക്കാൻ ഒരു ലഘുവായ ഇംപ്ലിമെന്റേഷൻ ഉപയോഗിച്ച് ശ്രമിക്കും, അതിന്റെ ഫലം കുറച്ച് താഴ്ന്ന കൃത്യത മാത്രമാണ്.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
അനുബന്ധ നോട്ട്ബുക്കുകളിൽ, ട്രാൻസ്ഫർ അറിവ് ഏറ്റവും നല്ലത് സമാനമായ പരിശീലന ഡാറ്റ ഉപയോഗിക്കുമ്പോഴാണെന്ന് താഴെ കുറിപ്പുകൾ ഉണ്ട് (പുതിയ ഒരു മൃഗം പോലുള്ളത്). പൂർണ്ണമായും പുതിയ തരത്തിലുള്ള ചിത്രങ്ങളുമായി പരീക്ഷണം നടത്തുക, നിങ്ങളുടെ ട്രാൻസ്ഫർ അറിവ് മോഡലുകൾ എത്രത്തോളം നല്ലതോ അല്ലയോ എന്ന് കാണാൻ.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/16)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
നിങ്ങളുടെ മോഡലുകൾ പരിശീലിപ്പിക്കുന്ന മറ്റ് ചില മാർഗ്ഗങ്ങളെക്കുറിച്ച് കൂടുതൽ അറിവ് നേടാൻ [TrainingTricks.md](TrainingTricks.md) വായിക്കുക.
|
||||
|
||||
## [അസൈൻമെന്റ്](lab/README.md)
|
||||
|
||||
ഈ ലാബിൽ, നാം യഥാർത്ഥ [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) പെട്ട് ഡാറ്റാസെറ്റ് ഉപയോഗിച്ച് 35 ഇനങ്ങളുള്ള പൂച്ചകളും നായകളും ഉൾക്കൊള്ളുന്ന ഡാറ്റാസെറ്റ് ഉപയോഗിച്ച് ട്രാൻസ്ഫർ ലേണിംഗ് ക്ലാസിഫയർ നിർമ്മിക്കും.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "178c0b5ee5395733eb18aec51e71a0a9",
|
||||
"translation_date": "2025-11-25T22:10:22+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/08-TransferLearning/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# മുൻപരിചയമുള്ള നെറ്റ്വർക്കുകളും ട്രാൻസ്ഫർ ലേണിംഗും
|
||||
|
||||
CNN-കൾ പരിശീലിപ്പിക്കാൻ വളരെ സമയം വേണ്ടിവരും, കൂടാതെ അതിനായി വലിയ ഡാറ്റ ആവശ്യമാണ്. എന്നാൽ, ഒരു നെറ്റ്വർക്ക് ചിത്രങ്ങളിൽ നിന്നുള്ള പാറ്റേണുകൾ എടുക്കാൻ ഉപയോഗിക്കുന്ന മികച്ച ലോ-ലെവൽ ഫിൽട്ടറുകൾ പഠിക്കുന്നതിൽ കൂടുതലായാണ് സമയം ചെലവഴിക്കുന്നത്. ഒരു സ്വാഭാവിക ചോദ്യമാണ് - ഒരു ഡാറ്റാസെറ്റിൽ പരിശീലിപ്പിച്ച ഒരു ന്യൂറൽ നെറ്റ്വർക്ക് ഉപയോഗിച്ച്, പൂർണ്ണ പരിശീലന പ്രക്രിയ ആവശ്യമില്ലാതെ വ്യത്യസ്ത ചിത്രങ്ങൾ വർഗ്ഗീകരിക്കാൻ അതിനെ അനുയോജ്യമായി മാറ്റാമോ?
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/15)
|
||||
|
||||
ഈ സമീപനം **ട്രാൻസ്ഫർ ലേണിംഗ്** എന്ന് വിളിക്കുന്നു, കാരണം ഒരു ന്യൂറൽ നെറ്റ്വർക്ക് മോഡലിൽ നിന്നുള്ള ചില അറിവ് മറ്റൊരു മോഡലിലേക്ക് മാറ്റുന്നു. ട്രാൻസ്ഫർ ലേണിംഗിൽ, സാധാരണയായി, വലിയ ചിത്ര ഡാറ്റാസെറ്റിൽ പരിശീലിപ്പിച്ച ഒരു മുൻപരിചയമുള്ള മോഡലിൽ നിന്ന് ആരംഭിക്കുന്നു, ഉദാഹരണത്തിന് **ImageNet**. ആ മോഡലുകൾ സാധാരണ ചിത്രങ്ങളിൽ നിന്നുള്ള വിവിധ ഫീച്ചറുകൾ എടുക്കുന്നതിൽ നല്ല പ്രകടനം കാണിക്കുന്നു, പലപ്പോഴും ആ ഫീച്ചറുകളുടെ മുകളിൽ ഒരു ക്ലാസിഫയർ നിർമ്മിക്കുന്നത് നല്ല ഫലം നൽകുന്നു.
|
||||
|
||||
> ✅ ട്രാൻസ്ഫർ ലേണിംഗ് എന്ന പദം വിദ്യാഭ്യാസം പോലുള്ള മറ്റ് അക്കാദമിക് മേഖലകളിലും കാണപ്പെടുന്നു. ഇത് ഒരു ഡൊമെയ്നിൽ നിന്നുള്ള അറിവ് മറ്റൊരു ഡൊമെയ്നിൽ പ്രയോഗിക്കുന്ന പ്രക്രിയയെ സൂചിപ്പിക്കുന്നു.
|
||||
|
||||
## മുൻപരിചയമുള്ള മോഡലുകൾ ഫീച്ചർ എക്സ്ട്രാക്ടറുകളായി
|
||||
|
||||
മുൻവകുപ്പിൽ ചർച്ച ചെയ്ത കോൺവല്യൂഷണൽ നെറ്റ്വർക്ക് പല ലെയറുകൾ അടങ്ങിയിരുന്നു, ഓരോ ലെയറും ചിത്രത്തിൽ നിന്നുള്ള ചില ഫീച്ചറുകൾ എടുക്കാൻ ഉദ്ദേശിച്ചിരിക്കുന്നു, താഴ്ന്ന തലത്തിലുള്ള പിക്സൽ കോമ്പിനേഷനുകളിൽ നിന്ന് (ഉദാഹരണത്തിന്, ഹോരിസോണ്ടൽ/വെർട്ടിക്കൽ ലൈൻ അല്ലെങ്കിൽ സ്ട്രോക്ക്) തുടങ്ങി ഉയർന്ന തലത്തിലുള്ള ഫീച്ചറുകളുടെ കോമ്പിനേഷനുകൾ വരെ, ഉദാഹരണത്തിന്, ഒരു ജ്വാലയുടെ കണ്ണ് പോലുള്ളവ. സാധാരണയും വൈവിധ്യമാർന്ന വലിയ ഡാറ്റാസെറ്റിൽ CNN പരിശീലിപ്പിച്ചാൽ, നെറ്റ്വർക്ക് ആ പൊതുവായ ഫീച്ചറുകൾ എടുക്കാൻ പഠിക്കും.
|
||||
|
||||
Keras-നും PyTorch-നും ImageNet ചിത്രങ്ങളിൽ പരിശീലിപ്പിച്ച ചില സാധാരണ ആർക്കിടെക്ചറുകൾക്കായി മുൻപരിചയമുള്ള ന്യൂറൽ നെറ്റ്വർക്ക് വെയ്റ്റുകൾ എളുപ്പത്തിൽ ലോഡ് ചെയ്യാനുള്ള ഫംഗ്ഷനുകൾ ഉണ്ട്. മുൻപത്തെ പാഠത്തിലെ [CNN ആർക്കിടെക്ചറുകൾ](../07-ConvNets/CNN_Architectures.md) പേജിൽ ഏറ്റവും സാധാരണ ഉപയോഗിക്കുന്നവ വിശദീകരിച്ചിരിക്കുന്നു. പ്രത്യേകിച്ച്, താഴെ പറയുന്നവയിൽ ഒന്നോ അതിലധികമോ ഉപയോഗിക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കാം:
|
||||
|
||||
* **VGG-16/VGG-19** - സാദാരണമായ മോഡലുകൾ ആയിട്ടും നല്ല കൃത്യത നൽകുന്നു. ട്രാൻസ്ഫർ ലേണിംഗ് എങ്ങനെ പ്രവർത്തിക്കുന്നു എന്ന് കാണാൻ ആദ്യ ശ്രമമായി VGG ഉപയോഗിക്കുന്നത് നല്ല തിരഞ്ഞെടുപ്പാണ്.
|
||||
* **ResNet** - 2015-ൽ Microsoft Research നിർദ്ദേശിച്ച മോഡലുകളുടെ കുടുംബം. കൂടുതൽ ലെയറുകൾ ഉള്ളതിനാൽ കൂടുതൽ റിസോഴ്സുകൾ ആവശ്യമാണ്.
|
||||
* **MobileNet** - ചെറുതായ മോഡലുകളുടെ കുടുംബം, മൊബൈൽ ഉപകരണങ്ങൾക്ക് അനുയോജ്യം. റിസോഴ്സുകൾ കുറവാണെങ്കിൽ, കുറച്ച് കൃത്യത ത്യജിച്ച് ഇവ ഉപയോഗിക്കാം.
|
||||
|
||||
ഇവിടെ VGG-16 നെറ്റ്വർക്ക് ഒരു പൂച്ചയുടെ ചിത്രത്തിൽ നിന്നെടുത്ത ഫീച്ചറുകളുടെ ഉദാഹരണം കാണാം:
|
||||
|
||||

|
||||
|
||||
## പൂച്ചകളും നായകളും ഡാറ്റാസെറ്റ്
|
||||
|
||||
ഈ ഉദാഹരണത്തിൽ, നാം [പൂച്ചകളും നായകളും](https://www.microsoft.com/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste) എന്ന ഡാറ്റാസെറ്റ് ഉപയോഗിക്കും, ഇത് യാഥാർത്ഥ്യ ചിത്ര വർഗ്ഗീകരണ സാഹചര്യത്തിന് വളരെ അടുത്തതാണ്.
|
||||
|
||||
## ✍️ അഭ്യാസം: ട്രാൻസ്ഫർ ലേണിംഗ്
|
||||
|
||||
ട്രാൻസ്ഫർ ലേണിംഗ് പ്രവർത്തനത്തിൽ കാണാം അനുബന്ധ നോട്ട്ബുക്കുകളിൽ:
|
||||
|
||||
* [ട്രാൻസ്ഫർ ലേണിംഗ് - PyTorch](TransferLearningPyTorch.ipynb)
|
||||
* [ട്രാൻസ്ഫർ ലേണിംഗ് - TensorFlow](TransferLearningTF.ipynb)
|
||||
|
||||
## എതിരാളി പൂച്ചയുടെ ദൃശ്യവൽക്കരണം
|
||||
|
||||
മുൻപരിചയമുള്ള ന്യൂറൽ നെറ്റ്വർക്ക് അതിന്റെ *ബ്രെയിനിൽ* വിവിധ പാറ്റേണുകൾ ഉൾക്കൊള്ളുന്നു, അതിൽ **ആദർശ പൂച്ച** (പൂച്ച, നായ, സീബ്ര തുടങ്ങിയവയുടെ ആദർശം) എന്ന ആശയങ്ങളും ഉൾപ്പെടുന്നു. ഈ ചിത്രം **ദൃശ്യവൽക്കരിക്കുക** എന്നത് രസകരമായിരിക്കും. എന്നാൽ ഇത് എളുപ്പമല്ല, കാരണം പാറ്റേണുകൾ നെറ്റ്വർക്ക് വെയ്റ്റുകളിൽ വ്യാപിച്ചിരിക്കുന്നു, കൂടാതെ അവ ഒരു ഹയർആർക്കിക്കൽ ഘടനയിലും ക്രമീകരിച്ചിരിക്കുന്നു.
|
||||
|
||||
ഒരു സമീപനം, ഒരു യാദൃച്ഛിക ചിത്രം കൊണ്ട് ആരംഭിച്ച്, **ഗ്രേഡിയന്റ് ഡിസെന്റ് ഓപ്റ്റിമൈസേഷൻ** സാങ്കേതിക വിദ്യ ഉപയോഗിച്ച് ആ ചിത്രം അങ്ങനെ ക്രമീകരിക്കാൻ ശ്രമിക്കുക എന്നതാണ്, നെറ്റ്വർക്ക് അത് പൂച്ചയാണെന്ന് കരുതാൻ തുടങ്ങും വിധം.
|
||||
|
||||

|
||||
|
||||
എങ്കിലും, ഇത് ചെയ്താൽ, നമുക്ക് യാദൃച്ഛിക ശബ്ദം പോലുള്ള ഒന്നാണ് ലഭിക്കുന്നത്. കാരണം *നെറ്റ്വർക്ക് ഇൻപുട്ട് ചിത്രം പൂച്ചയാണെന്ന് കരുതാൻ നിരവധി മാർഗ്ഗങ്ങൾ ഉണ്ട്*, ചിലത് ദൃശ്യമായി അർത്ഥവത്തല്ലാത്തവയും. ആ ചിത്രങ്ങളിൽ പൂച്ചയ്ക്ക് സാധാരണമായ പല പാറ്റേണുകളും ഉണ്ടെങ്കിലും, അവ ദൃശ്യമായി വ്യത്യസ്തമാകാൻ യാതൊരു നിയന്ത്രണവും ഇല്ല.
|
||||
|
||||
ഫലം മെച്ചപ്പെടുത്താൻ, നാം നഷ്ട ഫംഗ്ഷനിൽ മറ്റൊരു പദം ചേർക്കാം, അത് **വേരിയേഷൻ ലോസ്** എന്ന് വിളിക്കുന്നു. ഇത് ചിത്രത്തിലെ സമീപമുള്ള പിക്സലുകൾ എത്രത്തോളം സമാനമാണെന്ന് കാണിക്കുന്ന ഒരു മെട്രിക് ആണ്. വേരിയേഷൻ ലോസ് കുറയ്ക്കുന്നത് ചിത്രം മൃദുവാക്കുകയും ശബ്ദം നീക്കം ചെയ്യുകയും ചെയ്യുന്നു - അതിലൂടെ കൂടുതൽ ദൃശ്യപരമായി ആകർഷകമായ പാറ്റേണുകൾ വെളിപ്പെടുത്തുന്നു. താഴെ "ആദർശ" ചിത്രങ്ങളുടെ ഉദാഹരണം കാണാം, പൂച്ചയും സീബ്രയും ഉയർന്ന സാധ്യതയോടെ വർഗ്ഗീകരിക്കപ്പെട്ടവ:
|
||||
|
||||
 | 
|
||||
-----|-----
|
||||
*ആദർശ പൂച്ച* | *ആദർശ സീബ്ര*
|
||||
|
||||
ഇത്തരത്തിലുള്ള സമീപനം ന്യൂറൽ നെറ്റ്വർക്കിൽ **എതിരാളി ആക്രമണങ്ങൾ** നടത്താനും ഉപയോഗിക്കാം. ഒരു നായയെ പൂച്ചയെന്നു തോന്നിക്കാൻ നമുക്ക് ആഗ്രഹമുണ്ടെന്ന് കരുതുക. ഒരു നായയുടെ ചിത്രം, നെറ്റ്വർക്ക് നായയെന്നു തിരിച്ചറിയുന്ന ചിത്രം, നാം ഗ്രേഡിയന്റ് ഡിസെന്റ് ഓപ്റ്റിമൈസേഷൻ ഉപയോഗിച്ച് ചെറിയ മാറ്റങ്ങൾ വരുത്തി, നെറ്റ്വർക്ക് അത് പൂച്ചയെന്നു തിരിച്ചറിയാൻ തുടങ്ങും വരെ ക്രമീകരിക്കാം:
|
||||
|
||||
 | 
|
||||
-----|-----
|
||||
*നായയുടെ യഥാർത്ഥ ചിത്രം* | *പൂച്ചയെന്നു തിരിച്ചറിയപ്പെട്ട നായയുടെ ചിത്രം*
|
||||
|
||||
മുകളിൽ കാണിച്ച ഫലങ്ങൾ പുനരുത്പാദിപ്പിക്കാൻ കോഡ് താഴെ കാണുന്ന നോട്ട്ബുക്കിൽ ലഭ്യമാണ്:
|
||||
|
||||
* [ആദർശവും എതിരാളി പൂച്ചയും - TensorFlow](AdversarialCat_TF.ipynb)
|
||||
|
||||
## സംഗ്രഹം
|
||||
|
||||
ട്രാൻസ്ഫർ ലേണിംഗ് ഉപയോഗിച്ച്, നിങ്ങൾക്ക് ഒരു കസ്റ്റം ഒബ്ജക്റ്റ് ക്ലാസിഫിക്കേഷൻ ടാസ്കിനായി ക്ലാസിഫയർ വേഗത്തിൽ നിർമ്മിച്ച് ഉയർന്ന കൃത്യത നേടാം. ഇപ്പോൾ നാം പരിഹരിക്കുന്ന കൂടുതൽ സങ്കീർണ്ണമായ ടാസ്കുകൾക്ക് ഉയർന്ന കംപ്യൂട്ടേഷൻ ശക്തി ആവശ്യമാണ്, CPU-യിൽ എളുപ്പത്തിൽ പരിഹരിക്കാൻ കഴിയില്ല. അടുത്ത യൂണിറ്റിൽ, കുറവ് കംപ്യൂട്ടേഷൻ റിസോഴ്സുകൾ ഉപയോഗിച്ച് സമാന മോഡൽ പരിശീലിപ്പിക്കാൻ ഒരു ലഘുവായ ഇംപ്ലിമെന്റേഷൻ ഉപയോഗിച്ച് ശ്രമിക്കും, അതിന്റെ ഫലം കുറച്ച് താഴ്ന്ന കൃത്യത മാത്രമാണ്.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
അനുബന്ധ നോട്ട്ബുക്കുകളിൽ, ട്രാൻസ്ഫർ അറിവ് ഏറ്റവും നല്ലത് സമാനമായ പരിശീലന ഡാറ്റ ഉപയോഗിക്കുമ്പോഴാണെന്ന് താഴെ കുറിപ്പുകൾ ഉണ്ട് (പുതിയ ഒരു മൃഗം പോലുള്ളത്). പൂർണ്ണമായും പുതിയ തരത്തിലുള്ള ചിത്രങ്ങളുമായി പരീക്ഷണം നടത്തുക, നിങ്ങളുടെ ട്രാൻസ്ഫർ അറിവ് മോഡലുകൾ എത്രത്തോളം നല്ലതോ അല്ലയോ എന്ന് കാണാൻ.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/16)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
നിങ്ങളുടെ മോഡലുകൾ പരിശീലിപ്പിക്കുന്ന മറ്റ് ചില മാർഗ്ഗങ്ങളെക്കുറിച്ച് കൂടുതൽ അറിവ് നേടാൻ [TrainingTricks.md](TrainingTricks.md) വായിക്കുക.
|
||||
|
||||
## [അസൈൻമെന്റ്](lab/README.md)
|
||||
|
||||
ഈ ലാബിൽ, നാം യഥാർത്ഥ [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) പെട്ട് ഡാറ്റാസെറ്റ് ഉപയോഗിച്ച് 35 ഇനങ്ങളുള്ള പൂച്ചകളും നായകളും ഉൾക്കൊള്ളുന്ന ഡാറ്റാസെറ്റ് ഉപയോഗിച്ച് ട്രാൻസ്ഫർ ലേണിംഗ് ക്ലാസിഫയർ നിർമ്മിക്കും.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,113 +1,113 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "1b8d9e1b3a6f1daa864b1ff3dfc3076d",
|
||||
"translation_date": "2025-11-25T22:24:14+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/09-Autoencoders/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ഓട്ടോഎൻകോഡറുകൾ
|
||||
|
||||
CNN-കൾ പരിശീലിപ്പിക്കുമ്പോൾ, ഒരു പ്രശ്നം നമ്മൾക്ക് വളരെ ലേബൽ ചെയ്ത ഡാറ്റ ആവശ്യമുള്ളതാണ്. ചിത്ര വർഗ്ഗീകരണത്തിന്റെ കാര്യത്തിൽ, ചിത്രങ്ങളെ വ്യത്യസ്ത ക്ലാസുകളായി വേർതിരിക്കേണ്ടതുണ്ട്, ഇത് ഒരു മാനുവൽ ശ്രമമാണ്.
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/17)
|
||||
|
||||
എങ്കിലും, നാം റോ (ലേബൽ ചെയ്യാത്ത) ഡാറ്റ ഉപയോഗിച്ച് CNN ഫീച്ചർ എക്സ്ട്രാക്ടറുകൾ പരിശീലിപ്പിക്കാൻ ആഗ്രഹിക്കാം, ഇതിനെ **സ്വയം-പരിശീലന പഠനം** (self-supervised learning) എന്ന് വിളിക്കുന്നു. ലേബലുകൾക്ക് പകരം, പരിശീലന ചിത്രങ്ങളെ നെറ്റ്വർക്കിന്റെ ഇൻപുട്ടും ഔട്ട്പുട്ടും ആയി ഉപയോഗിക്കും. **ഓട്ടോഎൻകോഡറിന്റെ** പ്രധാന ആശയം, ഒരു **എൻകോഡർ നെറ്റ്വർക്ക്** ഉപയോഗിച്ച് ഇൻപുട്ട് ചിത്രം ഒരു **ലാറ്റന്റ് സ്പേസിലേക്ക്** (സാധാരണയായി ചെറിയ വലുപ്പമുള്ള വെക്ടർ) മാറ്റുകയും, പിന്നീട് **ഡീകോഡർ നെറ്റ്വർക്ക്** ഉപയോഗിച്ച് ആ യഥാർത്ഥ ചിത്രം പുനഃസൃഷ്ടിക്കുകയുമാണ്.
|
||||
|
||||
> ✅ ഒരു [ഓട്ടോഎൻകോഡർ](https://wikipedia.org/wiki/Autoencoder) "ലേബൽ ചെയ്യാത്ത ഡാറ്റയുടെ കാര്യക്ഷമമായ കോഡിങ്ങുകൾ പഠിക്കാൻ ഉപയോഗിക്കുന്ന ഒരു തരം ആർട്ടിഫിഷ്യൽ ന്യൂറൽ നെറ്റ്വർക്ക് ആണ്."
|
||||
|
||||
യഥാർത്ഥ ചിത്രത്തിൽ നിന്നുള്ള വിവരങ്ങൾ പൂർണ്ണമായി പിടിച്ചുപറ്റി കൃത്യമായി പുനഃസൃഷ്ടിക്കാൻ ഓട്ടോഎൻകോഡർ പരിശീലിപ്പിക്കുമ്പോൾ, നെറ്റ്വർക്ക് ഇൻപുട്ട് ചിത്രങ്ങളുടെ അർത്ഥം പിടിച്ചുപറ്റാൻ മികച്ച **എംബെഡ്ഡിംഗ്** കണ്ടെത്താൻ ശ്രമിക്കുന്നു.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [Keras ബ്ലോഗിൽ നിന്നുള്ളത്](https://blog.keras.io/building-autoencoders-in-keras.html)
|
||||
|
||||
## ഓട്ടോഎൻകോഡറുകൾ ഉപയോഗിക്കുന്ന സാഹചര്യങ്ങൾ
|
||||
|
||||
യഥാർത്ഥ ചിത്രങ്ങൾ പുനഃസൃഷ്ടിക്കുന്നത് സ്വയം പ്രയോജനകരമല്ലാത്തതുപോലെയാണ് തോന്നിയാലും, ചില സാഹചര്യങ്ങളിൽ ഓട്ടോഎൻകോഡറുകൾ പ്രത്യേകിച്ച് പ്രയോജനകരമാണ്:
|
||||
|
||||
* **ദൃശ്യവൽക്കരണത്തിനായി ചിത്രങ്ങളുടെ ഡൈമെൻഷൻ കുറയ്ക്കൽ** അല്ലെങ്കിൽ **ചിത്ര എംബെഡ്ഡിംഗുകൾ പരിശീലിപ്പിക്കൽ**. സാധാരണ PCA-യേക്കാൾ ഓട്ടോഎൻകോഡറുകൾ മികച്ച ഫലങ്ങൾ നൽകുന്നു, കാരണം ഇത് ചിത്രങ്ങളുടെ സ്ഥലംപരമായ സ്വഭാവവും ഹയർആർക്കിക്കൽ ഫീച്ചറുകളും പരിഗണിക്കുന്നു.
|
||||
* **ഡിനോയിസിംഗ്**, അഥവാ ചിത്രത്തിൽ നിന്നുള്ള ശബ്ദം നീക്കം ചെയ്യൽ. ശബ്ദം അനാവശ്യ വിവരങ്ങൾ ധാരാളം അടങ്ങിയതിനാൽ, ഓട്ടോഎൻകോഡർ അതെല്ലാം ചെറിയ ലാറ്റന്റ് സ്പേസിൽ ഉൾപ്പെടുത്താൻ കഴിയാതെ, ചിത്രത്തിന്റെ പ്രധാന ഭാഗം മാത്രമേ പിടിച്ചുപറ്റൂ. ഡിനോയിസർ പരിശീലിപ്പിക്കുമ്പോൾ, യഥാർത്ഥ ചിത്രങ്ങൾ ഉപയോഗിച്ച് ആരംഭിച്ച്, കൃത്രിമമായി ശബ്ദം ചേർത്ത ചിത്രങ്ങളെ ഇൻപുട്ടായി ഉപയോഗിക്കുന്നു.
|
||||
* **സൂപ്പർ-റിസൊല്യൂഷൻ**, ചിത്രത്തിന്റെ റെസല്യൂഷൻ വർദ്ധിപ്പിക്കൽ. ഉയർന്ന റെസല്യൂഷൻ ചിത്രങ്ങൾ ഉപയോഗിച്ച് ആരംഭിച്ച്, കുറവുള്ള റെസല്യൂഷൻ ഉള്ള ചിത്രം ഓട്ടോഎൻകോഡറിന്റെ ഇൻപുട്ടായി ഉപയോഗിക്കുന്നു.
|
||||
* **ജനറേറ്റീവ് മോഡലുകൾ**. ഓട്ടോഎൻകോഡർ പരിശീലിപ്പിച്ചതിനു ശേഷം, ഡീകോഡർ ഭാഗം റാൻഡം ലാറ്റന്റ് വെക്ടറുകളിൽ നിന്നു പുതിയ ഒബ്ജക്റ്റുകൾ സൃഷ്ടിക്കാൻ ഉപയോഗിക്കാം.
|
||||
|
||||
## വേരിയേഷണൽ ഓട്ടോഎൻകോഡറുകൾ (VAE)
|
||||
|
||||
പരമ്പരാഗത ഓട്ടോഎൻകോഡറുകൾ ഇൻപുട്ട് ഡാറ്റയുടെ ഡൈമെൻഷൻ കുറയ്ക്കുന്നു, ഇൻപുട്ട് ചിത്രങ്ങളുടെ പ്രധാന ഫീച്ചറുകൾ കണ്ടെത്തുന്നു. എന്നാൽ, ലാറ്റന്റ് വെക്ടറുകൾ പലപ്പോഴും അർത്ഥം നൽകുന്നില്ല. ഉദാഹരണത്തിന്, MNIST ഡാറ്റാസെറ്റ് എടുത്താൽ, വ്യത്യസ്ത ലാറ്റന്റ് വെക്ടറുകൾക്ക് ഏത് അക്കങ്ങൾ അനുയോജ്യമാണ് എന്ന് കണ്ടെത്തുന്നത് എളുപ്പമല്ല, കാരണം അടുത്തുള്ള ലാറ്റന്റ് വെക്ടറുകൾ ഒരേ അക്കങ്ങൾക്കു വേണ്ടിയല്ലായിരിക്കും.
|
||||
|
||||
മറ്റുവശത്ത്, *ജനറേറ്റീവ്* മോഡലുകൾ പരിശീലിപ്പിക്കാൻ ലാറ്റന്റ് സ്പേസ് കുറച്ച് മനസ്സിലാക്കുന്നത് നല്ലതാണ്. ഈ ആശയം നമുക്ക് **വേരിയേഷണൽ ഓട്ടോഎൻകോഡർ** (VAE) എന്നതിലേക്ക് നയിക്കുന്നു.
|
||||
|
||||
VAE ഒരു ഓട്ടോഎൻകോഡറാണ്, അത് ലാറ്റന്റ് പാരാമീറ്ററുകളുടെ *സांഖ്യിക വിതരണ*ം, അഥവാ **ലാറ്റന്റ് വിതരണ**ം പ്രവചിക്കാൻ പഠിക്കുന്നു. ഉദാഹരണത്തിന്, നാം ലാറ്റന്റ് വെക്ടറുകൾ സാധാരണ വിതരണത്തിൽ (normal distribution) z<sub>mean</sub> എന്ന ശരാശരി, z<sub>sigma</sub> എന്ന സ്റ്റാൻഡേർഡ് ഡിവിയേഷൻ (രണ്ടും d-ഡൈമെൻഷണൽ വെക്ടറുകൾ) ഉള്ളതായി ആഗ്രഹിക്കാം. VAE-യിലെ എൻകോഡർ ആ പാരാമീറ്ററുകൾ പ്രവചിക്കാൻ പഠിക്കുന്നു, പിന്നീട് ഡീകോഡർ ആ വിതരണത്തിൽ നിന്നുള്ള ഒരു റാൻഡം വെക്ടർ എടുത്ത് ഒബ്ജക്റ്റ് പുനഃസൃഷ്ടിക്കുന്നു.
|
||||
|
||||
സംക്ഷേപത്തിൽ:
|
||||
|
||||
* ഇൻപുട്ട് വെക്ടറിൽ നിന്ന് `z_mean` ഉം `z_log_sigma` ഉം പ്രവചിക്കുന്നു (`z_log_sigma` സ്റ്റാൻഡേർഡ് ഡിവിയേഷന്റെ ലോഗാരിതമാണ്)
|
||||
* N(z<sub>mean</sub>, exp(z<sub>log_sigma</sub>)) എന്ന വിതരണത്തിൽ നിന്ന് ഒരു `sample` വെക്ടർ സാമ്പിൾ ചെയ്യുന്നു
|
||||
* ഡീകോഡർ `sample` ഉപയോഗിച്ച് യഥാർത്ഥ ചിത്രം പുനഃസൃഷ്ടിക്കാൻ ശ്രമിക്കുന്നു
|
||||
|
||||
<img src="../../../../../translated_images/vae.464c465a5b6a9e253be65a8cb3be1724832cbde57ece3912ddc962b199472a89.ml.png" width="50%">
|
||||
|
||||
> ചിത്രം [ഈ ബ്ലോഗ് പോസ്റ്റിൽ നിന്നുള്ളത്](https://ijdykeman.github.io/ml/2016/12/21/cvae.html) - Isaak Dykeman
|
||||
|
||||
വേരിയേഷണൽ ഓട്ടോഎൻകോഡറുകൾ രണ്ട് ഭാഗങ്ങളുള്ള സങ്കീർണ്ണമായ ലോസ് ഫംഗ്ഷൻ ഉപയോഗിക്കുന്നു:
|
||||
|
||||
* **പുനഃസൃഷ്ടി ലോസ്** (Reconstruction loss) - പുനഃസൃഷ്ടിച്ച ചിത്രം ലക്ഷ്യ ചിത്രത്തിന് എത്രത്തോളം അടുത്താണെന്ന് കാണിക്കുന്ന ലോസ് ഫംഗ്ഷൻ (Mean Squared Error, MSE ആയിരിക്കാം). ഇത് സാധാരണ ഓട്ടോഎൻകോഡറുകളിലെ പോലെ തന്നെയാണ്.
|
||||
* **KL ലോസ്** - ലാറ്റന്റ് വേരിയബിൾ വിതരണങ്ങൾ സാധാരണ വിതരണത്തിന് അടുത്തിരിക്കണമെന്ന് ഉറപ്പാക്കുന്നു. ഇത് [കുൾബാക്ക്-ലൈബ്ലർ വ്യത്യാസം](https://www.countbayesie.com/blog/2017/5/9/kullback-leibler-divergence-explained) എന്ന ആശയത്തെ അടിസ്ഥാനമാക്കിയുള്ളതാണ് - രണ്ട് സാംഖ്യിക വിതരണങ്ങൾ എത്രത്തോളം സമാനമാണെന്ന് അളക്കാനുള്ള മെട്രിക്.
|
||||
|
||||
VAE-കളുടെ പ്രധാന ഗുണം, നാം ലാറ്റന്റ് വെക്ടറുകൾ സാമ്പിൾ ചെയ്യേണ്ട വിതരണത്തെ അറിയുന്നതിനാൽ, പുതിയ ചിത്രങ്ങൾ സൃഷ്ടിക്കുന്നത് എളുപ്പമാണ്. ഉദാഹരണത്തിന്, 2D ലാറ്റന്റ് വെക്ടർ ഉപയോഗിച്ച് MNIST-ൽ VAE പരിശീലിപ്പിച്ചാൽ, ലാറ്റന്റ് വെക്ടറിന്റെ ഘടകങ്ങൾ മാറ്റി വ്യത്യസ്ത അക്കങ്ങൾ ലഭിക്കാം:
|
||||
|
||||
<img alt="vaemnist" src="../../../../../translated_images/vaemnist.cab9e602dc08dc5066ce14e005889d6b53ca5bcaf16e35c28dbf8cd40c304de1.ml.png" width="50%"/>
|
||||
|
||||
> ചിത്രം [Dmitry Soshnikov](http://soshnikov.com) എന്നവന്റെ
|
||||
|
||||
ലാറ്റന്റ് പാരാമീറ്റർ സ്പേസിന്റെ വ്യത്യസ്ത ഭാഗങ്ങളിൽ നിന്നുള്ള ലാറ്റന്റ് വെക്ടറുകൾ ഉപയോഗിച്ച് ചിത്രങ്ങൾ എങ്ങനെ പരസ്പരം മിശ്രിതമാകുന്നു എന്ന് ശ്രദ്ധിക്കുക. നാം ഈ സ്പേസ് 2D-ൽ ദൃശ്യവൽക്കരിക്കാനും കഴിയും:
|
||||
|
||||
<img alt="vaemnist cluster" src="../../../../../translated_images/vaemnist-diag.694315f775d5d666b02fb54f8fc7c64db65a9d126a16c2fdb8683cf9726f9ff5.ml.png" width="50%"/>
|
||||
|
||||
> ചിത്രം [Dmitry Soshnikov](http://soshnikov.com) എന്നവന്റെ
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: ഓട്ടോഎൻകോഡറുകൾ
|
||||
|
||||
ഈ അനുബന്ധ നോട്ട്ബുക്കുകളിൽ ഓട്ടോഎൻകോഡറുകൾ കുറിച്ച് കൂടുതൽ പഠിക്കാം:
|
||||
|
||||
* [TensorFlow-ൽ ഓട്ടോഎൻകോഡറുകൾ](AutoencodersTF.ipynb)
|
||||
* [PyTorch-ൽ ഓട്ടോഎൻകോഡറുകൾ](AutoEncodersPyTorch.ipynb)
|
||||
|
||||
## ഓട്ടോഎൻകോഡറുകളുടെ ഗുണങ്ങൾ
|
||||
|
||||
* **ഡാറ്റാ സ്പെസിഫിക്** - അവർ പരിശീലിപ്പിച്ച ചിത്രങ്ങളുമായി മാത്രമേ നല്ല ഫലം നൽകൂ. ഉദാഹരണത്തിന്, പൂക്കൾക്കായി സൂപ്പർ-റിസൊല്യൂഷൻ നെറ്റ്വർക്ക് പരിശീലിപ്പിച്ചാൽ, അത് പോർട്രെയിറ്റുകളിൽ നല്ല ഫലം നൽകില്ല. കാരണം, നെറ്റ്വർക്ക് പരിശീലന ഡാറ്റാസെറ്റിൽ നിന്നുള്ള ഫീച്ചറുകളിൽ നിന്നുള്ള സൂക്ഷ്മ വിവരങ്ങൾ ഉപയോഗിച്ച് ഉയർന്ന റെസല്യൂഷൻ ചിത്രം സൃഷ്ടിക്കുന്നു.
|
||||
* **ലോസി** - പുനഃസൃഷ്ടിച്ച ചിത്രം യഥാർത്ഥ ചിത്രത്തോട് സമാനമല്ല. നഷ്ടത്തിന്റെ സ്വഭാവം പരിശീലന സമയത്ത് ഉപയോഗിക്കുന്ന *ലോസ് ഫംഗ്ഷൻ* നിർണ്ണയിക്കുന്നു.
|
||||
* **ലേബൽ ചെയ്യാത്ത ഡാറ്റയിൽ പ്രവർത്തിക്കുന്നു**
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/18)
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ഈ പാഠത്തിൽ, AI ശാസ്ത്രജ്ഞർക്ക് ലഭ്യമായ വിവിധ തരം ഓട്ടോഎൻകോഡറുകൾക്കുറിച്ച് പഠിച്ചു. അവ എങ്ങനെ നിർമ്മിക്കാമെന്നും, ചിത്രങ്ങൾ പുനഃസൃഷ്ടിക്കാൻ അവ എങ്ങനെ ഉപയോഗിക്കാമെന്നും മനസ്സിലാക്കി. കൂടാതെ VAE-യും അതുപയോഗിച്ച് പുതിയ ചിത്രങ്ങൾ എങ്ങനെ സൃഷ്ടിക്കാമെന്നും പഠിച്ചു.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
ഈ പാഠത്തിൽ, ചിത്രങ്ങൾക്ക് ഓട്ടോഎൻകോഡറുകൾ ഉപയോഗിക്കുന്നതിനെക്കുറിച്ച് പഠിച്ചു. പക്ഷേ, അവ സംഗീതത്തിനും ഉപയോഗിക്കാം! Magenta പ്രോജക്ടിന്റെ [MusicVAE](https://magenta.tensorflow.org/music-vae) പ്രോജക്ട് പരിശോധിക്കുക, ഇത് ഓട്ടോഎൻകോഡറുകൾ ഉപയോഗിച്ച് സംഗീതം പുനഃസൃഷ്ടിക്കാൻ പഠിക്കുന്നു. ഈ ലൈബ്രറിയുമായി ചില [പരീക്ഷണങ്ങൾ](https://colab.research.google.com/github/magenta/magenta-demos/blob/master/colab-notebooks/Multitrack_MusicVAE.ipynb) നടത്തുക, നിങ്ങൾ എന്ത് സൃഷ്ടിക്കാമെന്ന് കാണാൻ.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/16)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
റഫറൻസിനായി, ഓട്ടോഎൻകോഡറുകൾക്കുറിച്ച് കൂടുതൽ വായിക്കാം:
|
||||
|
||||
* [Keras-ൽ ഓട്ടോഎൻകോഡറുകൾ നിർമ്മിക്കൽ](https://blog.keras.io/building-autoencoders-in-keras.html)
|
||||
* [NeuroHive-ലെ ബ്ലോഗ് പോസ്റ്റ്](https://neurohive.io/ru/osnovy-data-science/variacionnyj-avtojenkoder-vae/)
|
||||
* [വേരിയേഷണൽ ഓട്ടോഎൻകോഡറുകൾ വിശദീകരണം](https://kvfrans.com/variational-autoencoders-explained/)
|
||||
* [കണ്ടീഷണൽ വേരിയേഷണൽ ഓട്ടോഎൻകോഡറുകൾ](https://ijdykeman.github.io/ml/2016/12/21/cvae.html)
|
||||
|
||||
## അസൈൻമെന്റ്
|
||||
|
||||
[TensorFlow ഉപയോഗിക്കുന്ന ഈ നോട്ട്ബുക്കിന്റെ](AutoencodersTF.ipynb) അവസാനം, നിങ്ങൾക്ക് ഒരു 'ടാസ്ക്' കാണാം - അതിനെ നിങ്ങളുടെ അസൈൻമെന്റായി ഉപയോഗിക്കുക.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "1b8d9e1b3a6f1daa864b1ff3dfc3076d",
|
||||
"translation_date": "2025-11-25T22:24:14+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/09-Autoencoders/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ഓട്ടോഎൻകോഡറുകൾ
|
||||
|
||||
CNN-കൾ പരിശീലിപ്പിക്കുമ്പോൾ, ഒരു പ്രശ്നം നമ്മൾക്ക് വളരെ ലേബൽ ചെയ്ത ഡാറ്റ ആവശ്യമുള്ളതാണ്. ചിത്ര വർഗ്ഗീകരണത്തിന്റെ കാര്യത്തിൽ, ചിത്രങ്ങളെ വ്യത്യസ്ത ക്ലാസുകളായി വേർതിരിക്കേണ്ടതുണ്ട്, ഇത് ഒരു മാനുവൽ ശ്രമമാണ്.
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/17)
|
||||
|
||||
എങ്കിലും, നാം റോ (ലേബൽ ചെയ്യാത്ത) ഡാറ്റ ഉപയോഗിച്ച് CNN ഫീച്ചർ എക്സ്ട്രാക്ടറുകൾ പരിശീലിപ്പിക്കാൻ ആഗ്രഹിക്കാം, ഇതിനെ **സ്വയം-പരിശീലന പഠനം** (self-supervised learning) എന്ന് വിളിക്കുന്നു. ലേബലുകൾക്ക് പകരം, പരിശീലന ചിത്രങ്ങളെ നെറ്റ്വർക്കിന്റെ ഇൻപുട്ടും ഔട്ട്പുട്ടും ആയി ഉപയോഗിക്കും. **ഓട്ടോഎൻകോഡറിന്റെ** പ്രധാന ആശയം, ഒരു **എൻകോഡർ നെറ്റ്വർക്ക്** ഉപയോഗിച്ച് ഇൻപുട്ട് ചിത്രം ഒരു **ലാറ്റന്റ് സ്പേസിലേക്ക്** (സാധാരണയായി ചെറിയ വലുപ്പമുള്ള വെക്ടർ) മാറ്റുകയും, പിന്നീട് **ഡീകോഡർ നെറ്റ്വർക്ക്** ഉപയോഗിച്ച് ആ യഥാർത്ഥ ചിത്രം പുനഃസൃഷ്ടിക്കുകയുമാണ്.
|
||||
|
||||
> ✅ ഒരു [ഓട്ടോഎൻകോഡർ](https://wikipedia.org/wiki/Autoencoder) "ലേബൽ ചെയ്യാത്ത ഡാറ്റയുടെ കാര്യക്ഷമമായ കോഡിങ്ങുകൾ പഠിക്കാൻ ഉപയോഗിക്കുന്ന ഒരു തരം ആർട്ടിഫിഷ്യൽ ന്യൂറൽ നെറ്റ്വർക്ക് ആണ്."
|
||||
|
||||
യഥാർത്ഥ ചിത്രത്തിൽ നിന്നുള്ള വിവരങ്ങൾ പൂർണ്ണമായി പിടിച്ചുപറ്റി കൃത്യമായി പുനഃസൃഷ്ടിക്കാൻ ഓട്ടോഎൻകോഡർ പരിശീലിപ്പിക്കുമ്പോൾ, നെറ്റ്വർക്ക് ഇൻപുട്ട് ചിത്രങ്ങളുടെ അർത്ഥം പിടിച്ചുപറ്റാൻ മികച്ച **എംബെഡ്ഡിംഗ്** കണ്ടെത്താൻ ശ്രമിക്കുന്നു.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [Keras ബ്ലോഗിൽ നിന്നുള്ളത്](https://blog.keras.io/building-autoencoders-in-keras.html)
|
||||
|
||||
## ഓട്ടോഎൻകോഡറുകൾ ഉപയോഗിക്കുന്ന സാഹചര്യങ്ങൾ
|
||||
|
||||
യഥാർത്ഥ ചിത്രങ്ങൾ പുനഃസൃഷ്ടിക്കുന്നത് സ്വയം പ്രയോജനകരമല്ലാത്തതുപോലെയാണ് തോന്നിയാലും, ചില സാഹചര്യങ്ങളിൽ ഓട്ടോഎൻകോഡറുകൾ പ്രത്യേകിച്ച് പ്രയോജനകരമാണ്:
|
||||
|
||||
* **ദൃശ്യവൽക്കരണത്തിനായി ചിത്രങ്ങളുടെ ഡൈമെൻഷൻ കുറയ്ക്കൽ** അല്ലെങ്കിൽ **ചിത്ര എംബെഡ്ഡിംഗുകൾ പരിശീലിപ്പിക്കൽ**. സാധാരണ PCA-യേക്കാൾ ഓട്ടോഎൻകോഡറുകൾ മികച്ച ഫലങ്ങൾ നൽകുന്നു, കാരണം ഇത് ചിത്രങ്ങളുടെ സ്ഥലംപരമായ സ്വഭാവവും ഹയർആർക്കിക്കൽ ഫീച്ചറുകളും പരിഗണിക്കുന്നു.
|
||||
* **ഡിനോയിസിംഗ്**, അഥവാ ചിത്രത്തിൽ നിന്നുള്ള ശബ്ദം നീക്കം ചെയ്യൽ. ശബ്ദം അനാവശ്യ വിവരങ്ങൾ ധാരാളം അടങ്ങിയതിനാൽ, ഓട്ടോഎൻകോഡർ അതെല്ലാം ചെറിയ ലാറ്റന്റ് സ്പേസിൽ ഉൾപ്പെടുത്താൻ കഴിയാതെ, ചിത്രത്തിന്റെ പ്രധാന ഭാഗം മാത്രമേ പിടിച്ചുപറ്റൂ. ഡിനോയിസർ പരിശീലിപ്പിക്കുമ്പോൾ, യഥാർത്ഥ ചിത്രങ്ങൾ ഉപയോഗിച്ച് ആരംഭിച്ച്, കൃത്രിമമായി ശബ്ദം ചേർത്ത ചിത്രങ്ങളെ ഇൻപുട്ടായി ഉപയോഗിക്കുന്നു.
|
||||
* **സൂപ്പർ-റിസൊല്യൂഷൻ**, ചിത്രത്തിന്റെ റെസല്യൂഷൻ വർദ്ധിപ്പിക്കൽ. ഉയർന്ന റെസല്യൂഷൻ ചിത്രങ്ങൾ ഉപയോഗിച്ച് ആരംഭിച്ച്, കുറവുള്ള റെസല്യൂഷൻ ഉള്ള ചിത്രം ഓട്ടോഎൻകോഡറിന്റെ ഇൻപുട്ടായി ഉപയോഗിക്കുന്നു.
|
||||
* **ജനറേറ്റീവ് മോഡലുകൾ**. ഓട്ടോഎൻകോഡർ പരിശീലിപ്പിച്ചതിനു ശേഷം, ഡീകോഡർ ഭാഗം റാൻഡം ലാറ്റന്റ് വെക്ടറുകളിൽ നിന്നു പുതിയ ഒബ്ജക്റ്റുകൾ സൃഷ്ടിക്കാൻ ഉപയോഗിക്കാം.
|
||||
|
||||
## വേരിയേഷണൽ ഓട്ടോഎൻകോഡറുകൾ (VAE)
|
||||
|
||||
പരമ്പരാഗത ഓട്ടോഎൻകോഡറുകൾ ഇൻപുട്ട് ഡാറ്റയുടെ ഡൈമെൻഷൻ കുറയ്ക്കുന്നു, ഇൻപുട്ട് ചിത്രങ്ങളുടെ പ്രധാന ഫീച്ചറുകൾ കണ്ടെത്തുന്നു. എന്നാൽ, ലാറ്റന്റ് വെക്ടറുകൾ പലപ്പോഴും അർത്ഥം നൽകുന്നില്ല. ഉദാഹരണത്തിന്, MNIST ഡാറ്റാസെറ്റ് എടുത്താൽ, വ്യത്യസ്ത ലാറ്റന്റ് വെക്ടറുകൾക്ക് ഏത് അക്കങ്ങൾ അനുയോജ്യമാണ് എന്ന് കണ്ടെത്തുന്നത് എളുപ്പമല്ല, കാരണം അടുത്തുള്ള ലാറ്റന്റ് വെക്ടറുകൾ ഒരേ അക്കങ്ങൾക്കു വേണ്ടിയല്ലായിരിക്കും.
|
||||
|
||||
മറ്റുവശത്ത്, *ജനറേറ്റീവ്* മോഡലുകൾ പരിശീലിപ്പിക്കാൻ ലാറ്റന്റ് സ്പേസ് കുറച്ച് മനസ്സിലാക്കുന്നത് നല്ലതാണ്. ഈ ആശയം നമുക്ക് **വേരിയേഷണൽ ഓട്ടോഎൻകോഡർ** (VAE) എന്നതിലേക്ക് നയിക്കുന്നു.
|
||||
|
||||
VAE ഒരു ഓട്ടോഎൻകോഡറാണ്, അത് ലാറ്റന്റ് പാരാമീറ്ററുകളുടെ *സांഖ്യിക വിതരണ*ം, അഥവാ **ലാറ്റന്റ് വിതരണ**ം പ്രവചിക്കാൻ പഠിക്കുന്നു. ഉദാഹരണത്തിന്, നാം ലാറ്റന്റ് വെക്ടറുകൾ സാധാരണ വിതരണത്തിൽ (normal distribution) z<sub>mean</sub> എന്ന ശരാശരി, z<sub>sigma</sub> എന്ന സ്റ്റാൻഡേർഡ് ഡിവിയേഷൻ (രണ്ടും d-ഡൈമെൻഷണൽ വെക്ടറുകൾ) ഉള്ളതായി ആഗ്രഹിക്കാം. VAE-യിലെ എൻകോഡർ ആ പാരാമീറ്ററുകൾ പ്രവചിക്കാൻ പഠിക്കുന്നു, പിന്നീട് ഡീകോഡർ ആ വിതരണത്തിൽ നിന്നുള്ള ഒരു റാൻഡം വെക്ടർ എടുത്ത് ഒബ്ജക്റ്റ് പുനഃസൃഷ്ടിക്കുന്നു.
|
||||
|
||||
സംക്ഷേപത്തിൽ:
|
||||
|
||||
* ഇൻപുട്ട് വെക്ടറിൽ നിന്ന് `z_mean` ഉം `z_log_sigma` ഉം പ്രവചിക്കുന്നു (`z_log_sigma` സ്റ്റാൻഡേർഡ് ഡിവിയേഷന്റെ ലോഗാരിതമാണ്)
|
||||
* N(z<sub>mean</sub>, exp(z<sub>log_sigma</sub>)) എന്ന വിതരണത്തിൽ നിന്ന് ഒരു `sample` വെക്ടർ സാമ്പിൾ ചെയ്യുന്നു
|
||||
* ഡീകോഡർ `sample` ഉപയോഗിച്ച് യഥാർത്ഥ ചിത്രം പുനഃസൃഷ്ടിക്കാൻ ശ്രമിക്കുന്നു
|
||||
|
||||
<img src="../../../../../translated_images/vae.464c465a5b6a9e25.ml.png" width="50%">
|
||||
|
||||
> ചിത്രം [ഈ ബ്ലോഗ് പോസ്റ്റിൽ നിന്നുള്ളത്](https://ijdykeman.github.io/ml/2016/12/21/cvae.html) - Isaak Dykeman
|
||||
|
||||
വേരിയേഷണൽ ഓട്ടോഎൻകോഡറുകൾ രണ്ട് ഭാഗങ്ങളുള്ള സങ്കീർണ്ണമായ ലോസ് ഫംഗ്ഷൻ ഉപയോഗിക്കുന്നു:
|
||||
|
||||
* **പുനഃസൃഷ്ടി ലോസ്** (Reconstruction loss) - പുനഃസൃഷ്ടിച്ച ചിത്രം ലക്ഷ്യ ചിത്രത്തിന് എത്രത്തോളം അടുത്താണെന്ന് കാണിക്കുന്ന ലോസ് ഫംഗ്ഷൻ (Mean Squared Error, MSE ആയിരിക്കാം). ഇത് സാധാരണ ഓട്ടോഎൻകോഡറുകളിലെ പോലെ തന്നെയാണ്.
|
||||
* **KL ലോസ്** - ലാറ്റന്റ് വേരിയബിൾ വിതരണങ്ങൾ സാധാരണ വിതരണത്തിന് അടുത്തിരിക്കണമെന്ന് ഉറപ്പാക്കുന്നു. ഇത് [കുൾബാക്ക്-ലൈബ്ലർ വ്യത്യാസം](https://www.countbayesie.com/blog/2017/5/9/kullback-leibler-divergence-explained) എന്ന ആശയത്തെ അടിസ്ഥാനമാക്കിയുള്ളതാണ് - രണ്ട് സാംഖ്യിക വിതരണങ്ങൾ എത്രത്തോളം സമാനമാണെന്ന് അളക്കാനുള്ള മെട്രിക്.
|
||||
|
||||
VAE-കളുടെ പ്രധാന ഗുണം, നാം ലാറ്റന്റ് വെക്ടറുകൾ സാമ്പിൾ ചെയ്യേണ്ട വിതരണത്തെ അറിയുന്നതിനാൽ, പുതിയ ചിത്രങ്ങൾ സൃഷ്ടിക്കുന്നത് എളുപ്പമാണ്. ഉദാഹരണത്തിന്, 2D ലാറ്റന്റ് വെക്ടർ ഉപയോഗിച്ച് MNIST-ൽ VAE പരിശീലിപ്പിച്ചാൽ, ലാറ്റന്റ് വെക്ടറിന്റെ ഘടകങ്ങൾ മാറ്റി വ്യത്യസ്ത അക്കങ്ങൾ ലഭിക്കാം:
|
||||
|
||||
<img alt="vaemnist" src="../../../../../translated_images/vaemnist.cab9e602dc08dc50.ml.png" width="50%"/>
|
||||
|
||||
> ചിത്രം [Dmitry Soshnikov](http://soshnikov.com) എന്നവന്റെ
|
||||
|
||||
ലാറ്റന്റ് പാരാമീറ്റർ സ്പേസിന്റെ വ്യത്യസ്ത ഭാഗങ്ങളിൽ നിന്നുള്ള ലാറ്റന്റ് വെക്ടറുകൾ ഉപയോഗിച്ച് ചിത്രങ്ങൾ എങ്ങനെ പരസ്പരം മിശ്രിതമാകുന്നു എന്ന് ശ്രദ്ധിക്കുക. നാം ഈ സ്പേസ് 2D-ൽ ദൃശ്യവൽക്കരിക്കാനും കഴിയും:
|
||||
|
||||
<img alt="vaemnist cluster" src="../../../../../translated_images/vaemnist-diag.694315f775d5d666.ml.png" width="50%"/>
|
||||
|
||||
> ചിത്രം [Dmitry Soshnikov](http://soshnikov.com) എന്നവന്റെ
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: ഓട്ടോഎൻകോഡറുകൾ
|
||||
|
||||
ഈ അനുബന്ധ നോട്ട്ബുക്കുകളിൽ ഓട്ടോഎൻകോഡറുകൾ കുറിച്ച് കൂടുതൽ പഠിക്കാം:
|
||||
|
||||
* [TensorFlow-ൽ ഓട്ടോഎൻകോഡറുകൾ](AutoencodersTF.ipynb)
|
||||
* [PyTorch-ൽ ഓട്ടോഎൻകോഡറുകൾ](AutoEncodersPyTorch.ipynb)
|
||||
|
||||
## ഓട്ടോഎൻകോഡറുകളുടെ ഗുണങ്ങൾ
|
||||
|
||||
* **ഡാറ്റാ സ്പെസിഫിക്** - അവർ പരിശീലിപ്പിച്ച ചിത്രങ്ങളുമായി മാത്രമേ നല്ല ഫലം നൽകൂ. ഉദാഹരണത്തിന്, പൂക്കൾക്കായി സൂപ്പർ-റിസൊല്യൂഷൻ നെറ്റ്വർക്ക് പരിശീലിപ്പിച്ചാൽ, അത് പോർട്രെയിറ്റുകളിൽ നല്ല ഫലം നൽകില്ല. കാരണം, നെറ്റ്വർക്ക് പരിശീലന ഡാറ്റാസെറ്റിൽ നിന്നുള്ള ഫീച്ചറുകളിൽ നിന്നുള്ള സൂക്ഷ്മ വിവരങ്ങൾ ഉപയോഗിച്ച് ഉയർന്ന റെസല്യൂഷൻ ചിത്രം സൃഷ്ടിക്കുന്നു.
|
||||
* **ലോസി** - പുനഃസൃഷ്ടിച്ച ചിത്രം യഥാർത്ഥ ചിത്രത്തോട് സമാനമല്ല. നഷ്ടത്തിന്റെ സ്വഭാവം പരിശീലന സമയത്ത് ഉപയോഗിക്കുന്ന *ലോസ് ഫംഗ്ഷൻ* നിർണ്ണയിക്കുന്നു.
|
||||
* **ലേബൽ ചെയ്യാത്ത ഡാറ്റയിൽ പ്രവർത്തിക്കുന്നു**
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/18)
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ഈ പാഠത്തിൽ, AI ശാസ്ത്രജ്ഞർക്ക് ലഭ്യമായ വിവിധ തരം ഓട്ടോഎൻകോഡറുകൾക്കുറിച്ച് പഠിച്ചു. അവ എങ്ങനെ നിർമ്മിക്കാമെന്നും, ചിത്രങ്ങൾ പുനഃസൃഷ്ടിക്കാൻ അവ എങ്ങനെ ഉപയോഗിക്കാമെന്നും മനസ്സിലാക്കി. കൂടാതെ VAE-യും അതുപയോഗിച്ച് പുതിയ ചിത്രങ്ങൾ എങ്ങനെ സൃഷ്ടിക്കാമെന്നും പഠിച്ചു.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
ഈ പാഠത്തിൽ, ചിത്രങ്ങൾക്ക് ഓട്ടോഎൻകോഡറുകൾ ഉപയോഗിക്കുന്നതിനെക്കുറിച്ച് പഠിച്ചു. പക്ഷേ, അവ സംഗീതത്തിനും ഉപയോഗിക്കാം! Magenta പ്രോജക്ടിന്റെ [MusicVAE](https://magenta.tensorflow.org/music-vae) പ്രോജക്ട് പരിശോധിക്കുക, ഇത് ഓട്ടോഎൻകോഡറുകൾ ഉപയോഗിച്ച് സംഗീതം പുനഃസൃഷ്ടിക്കാൻ പഠിക്കുന്നു. ഈ ലൈബ്രറിയുമായി ചില [പരീക്ഷണങ്ങൾ](https://colab.research.google.com/github/magenta/magenta-demos/blob/master/colab-notebooks/Multitrack_MusicVAE.ipynb) നടത്തുക, നിങ്ങൾ എന്ത് സൃഷ്ടിക്കാമെന്ന് കാണാൻ.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/16)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
റഫറൻസിനായി, ഓട്ടോഎൻകോഡറുകൾക്കുറിച്ച് കൂടുതൽ വായിക്കാം:
|
||||
|
||||
* [Keras-ൽ ഓട്ടോഎൻകോഡറുകൾ നിർമ്മിക്കൽ](https://blog.keras.io/building-autoencoders-in-keras.html)
|
||||
* [NeuroHive-ലെ ബ്ലോഗ് പോസ്റ്റ്](https://neurohive.io/ru/osnovy-data-science/variacionnyj-avtojenkoder-vae/)
|
||||
* [വേരിയേഷണൽ ഓട്ടോഎൻകോഡറുകൾ വിശദീകരണം](https://kvfrans.com/variational-autoencoders-explained/)
|
||||
* [കണ്ടീഷണൽ വേരിയേഷണൽ ഓട്ടോഎൻകോഡറുകൾ](https://ijdykeman.github.io/ml/2016/12/21/cvae.html)
|
||||
|
||||
## അസൈൻമെന്റ്
|
||||
|
||||
[TensorFlow ഉപയോഗിക്കുന്ന ഈ നോട്ട്ബുക്കിന്റെ](AutoencodersTF.ipynb) അവസാനം, നിങ്ങൾക്ക് ഒരു 'ടാസ്ക്' കാണാം - അതിനെ നിങ്ങളുടെ അസൈൻമെന്റായി ഉപയോഗിക്കുക.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,115 +1,115 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "0ff65b4da07b23697235de2beb2a3c25",
|
||||
"translation_date": "2025-11-25T22:30:04+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/10-GANs/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ജനറേറ്റീവ് അഡ്വേഴ്സറിയൽ നെറ്റ്വർക്കുകൾ
|
||||
|
||||
മുൻവകുപ്പിൽ, നാം **ജനറേറ്റീവ് മോഡലുകൾ** എന്നതിനെക്കുറിച്ച് പഠിച്ചു: പരിശീലന ഡാറ്റാസെറ്റിലുള്ള ചിത്രങ്ങളോട് സമാനമായ പുതിയ ചിത്രങ്ങൾ സൃഷ്ടിക്കാൻ കഴിയുന്ന മോഡലുകൾ. VAE ഒരു നല്ല ഉദാഹരണമായിരുന്നു.
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/19)
|
||||
|
||||
എങ്കിലും, VAE ഉപയോഗിച്ച് യഥാർത്ഥത്തിൽ അർത്ഥവത്തായ, യുക്തിസഹമായ റെസല്യൂഷനിലുള്ള ഒരു പെയിന്റിംഗ് പോലുള്ള ഒന്നിനെ സൃഷ്ടിക്കാൻ ശ്രമിച്ചാൽ, പരിശീലനം നന്നായി സമാപിക്കാത്തതായി കാണും. ഈ ഉപയോഗത്തിനായി, പ്രത്യേകിച്ച് ജനറേറ്റീവ് മോഡലുകൾക്കായി ലക്ഷ്യമിട്ട മറ്റൊരു ആർക്കിടെക്ചർ പഠിക്കേണ്ടതാണ് - **ജനറേറ്റീവ് അഡ്വേഴ്സറിയൽ നെറ്റ്വർക്കുകൾ**, അല്ലെങ്കിൽ GANs.
|
||||
|
||||
GAN-ന്റെ പ്രധാന ആശയം രണ്ട് ന്യൂറൽ നെറ്റ്വർക്കുകൾ തമ്മിൽ പരസ്പരം മത്സരിച്ച് പരിശീലിക്കപ്പെടുക എന്നതാണ്:
|
||||
|
||||
<img src="../../../../../translated_images/gan_architecture.8f3a5ab62b8d5d698a91f7668017d8e09b81c5d8e7cc99bdb23979d90a0c475e.ml.png" width="70%"/>
|
||||
|
||||
> ചിത്രം: [Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
> ✅ ചെറിയ വാക്കുകൾ:
|
||||
> * **ജനറേറ്റർ** ഒരു റാൻഡം വെക്ടർ സ്വീകരിച്ച്, ഫലമായി ചിത്രം സൃഷ്ടിക്കുന്ന നെറ്റ്വർക്കാണ്
|
||||
> * **ഡിസ്ക്രിമിനേറ്റർ** ഒരു ചിത്രം സ്വീകരിച്ച് അത് യഥാർത്ഥ ചിത്രം (പരിശീലന ഡാറ്റാസെറ്റിൽ നിന്നുള്ളത്) ആണോ, ജനറേറ്റർ സൃഷ്ടിച്ചവയാണോ എന്ന് പറയേണ്ട നെറ്റ്വർക്കാണ്. ഇത് അടിസ്ഥാനപരമായി ഒരു ചിത്രം ക്ലാസിഫയർ ആണ്.
|
||||
|
||||
### ഡിസ്ക്രിമിനേറ്റർ
|
||||
|
||||
ഡിസ്ക്രിമിനേറ്ററിന്റെ ആർക്കിടെക്ചർ സാധാരണ ചിത്ര ക്ലാസിഫിക്കേഷൻ നെറ്റ്വർക്കിൽ നിന്ന് വ്യത്യസ്തമല്ല. ഏറ്റവും ലളിതമായ സാഹചര്യത്തിൽ ഇത് ഫുൾ-കണക്ടഡ് ക്ലാസിഫയർ ആയിരിക്കാം, പക്ഷേ സാധാരണയായി ഇത് [കോൺവല്യൂഷണൽ നെറ്റ്വർക്കായിരിക്കും](../07-ConvNets/README.md).
|
||||
|
||||
> ✅ കോൺവല്യൂഷണൽ നെറ്റ്വർക്കുകൾ അടിസ്ഥാനമാക്കിയ GAN-നെ [DCGAN](https://arxiv.org/pdf/1511.06434.pdf) എന്ന് വിളിക്കുന്നു
|
||||
|
||||
CNN ഡിസ്ക്രിമിനേറ്റർ താഴെപ്പറയുന്ന ലെയറുകൾ ഉൾക്കൊള്ളുന്നു: കുറയുന്ന സ്ഥലം വലുപ്പത്തോടെ നിരവധി കോൺവല്യൂഷനുകളും പൂളിംഗുകളും, തുടർന്ന് "ഫീച്ചർ വെക്ടർ" ലഭിക്കാൻ ഒരു അല്ലെങ്കിൽ കൂടുതൽ ഫുൾ-കണക്ടഡ് ലെയറുകൾ, ഒടുവിൽ ബൈനറി ക്ലാസിഫയർ.
|
||||
|
||||
> ✅ ഈ സാഹചര്യത്തിൽ 'പൂളിംഗ്' എന്നത് ചിത്രത്തിന്റെ വലുപ്പം കുറയ്ക്കുന്ന സാങ്കേതിക വിദ്യയാണ്. "പൂളിംഗ് ലെയറുകൾ ഒരു ലെയറിലെ ന്യൂറോൺ ക്ലസ്റ്ററുകളുടെ ഔട്ട്പുട്ടുകൾ അടുത്ത ലെയറിലെ ഒരു ന്യൂറോണായി സംയോജിപ്പിച്ച് ഡാറ്റയുടെ അളവുകൾ കുറയ്ക്കുന്നു." - [സ്രോതസ്സ്](https://wikipedia.org/wiki/Convolutional_neural_network#Pooling_layers)
|
||||
|
||||
### ജനറേറ്റർ
|
||||
|
||||
ജനറേറ്റർ കുറച്ച് കൂടുതൽ സങ്കീർണ്ണമാണ്. ഇത് ഒരു റിവേഴ്സഡ് ഡിസ്ക്രിമിനേറ്ററായി പരിഗണിക്കാം. latent വെക്ടറിൽ നിന്ന് (ഫീച്ചർ വെക്ടറിന്റെ പകരം), ആവശ്യമായ വലുപ്പത്തിലേക്ക് മാറ്റാൻ ഒരു ഫുൾ-കണക്ടഡ് ലെയർ ഉണ്ട്, തുടർന്ന് ഡീകോൺവല്യൂഷനുകളും അപ്സ്കെയ്ലിംഗും. ഇത് [ഓട്ടോഎൻകോഡർ](../09-Autoencoders/README.md)യുടെ *ഡീകോഡർ* ഭാഗത്തോട് സമാനമാണ്.
|
||||
|
||||
> ✅ കോൺവല്യൂഷൻ ലെയർ ചിത്രം താണ്ടുന്ന ലീനിയർ ഫിൽട്ടറായതിനാൽ, ഡീകോൺവല്യൂഷൻ അടിസ്ഥാനപരമായി കോൺവല്യൂഷനോട് സമാനമാണ്, അതേ ലെയർ ലജിക് ഉപയോഗിച്ച് നടപ്പിലാക്കാം.
|
||||
|
||||
<img src="../../../../../translated_images/gan_arch_detail.46b95fd366f8e543170264fe07e516683ac3e5bb699392c35449e99590a11063.ml.png" width="70%"/>
|
||||
|
||||
> ചിത്രം: [Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
### GAN പരിശീലനം
|
||||
|
||||
GAN-കൾ **അഡ്വേഴ്സറിയൽ** എന്ന് വിളിക്കുന്നത് ജനറേറ്ററും ഡിസ്ക്രിമിനേറ്ററും തമ്മിൽ സ്ഥിരമായ മത്സരം ഉണ്ടാകുന്നതിനാലാണ്. ഈ മത്സരത്തിൽ, ഇരുവരും മെച്ചപ്പെടുന്നു, അതിനാൽ നെറ്റ്വർക്ക് മെച്ചപ്പെട്ട ചിത്രങ്ങൾ സൃഷ്ടിക്കാൻ പഠിക്കുന്നു.
|
||||
|
||||
പരിശീലനം രണ്ട് ഘട്ടങ്ങളിൽ നടക്കുന്നു:
|
||||
|
||||
* **ഡിസ്ക്രിമിനേറ്റർ പരിശീലനം**. ഇത് വളരെ നേരിയതാണ്: ജനറേറ്റർ ഉപയോഗിച്ച് ഒരു ബാച്ച് ചിത്രം സൃഷ്ടിച്ച് അവയ്ക്ക് 0 (കൃത്രിമ ചിത്രം) എന്ന ലേബൽ നൽകുന്നു, കൂടാതെ ഇൻപുട്ട് ഡാറ്റാസെറ്റിൽ നിന്നുള്ള യഥാർത്ഥ ചിത്രങ്ങളുടെ ബാച്ച് (ലേബൽ 1) എടുത്ത് *ഡിസ്ക്രിമിനേറ്റർ ലോസ്* ലഭിച്ച് ബാക്ക്പ്രൊപ്പഗേഷൻ നടത്തുന്നു.
|
||||
* **ജനറേറ്റർ പരിശീലനം**. ഇത് കുറച്ച് സങ്കീർണ്ണമാണ്, കാരണം ജനറേറ്ററിന് നേരിട്ട് പ്രതീക്ഷിക്കുന്ന ഔട്ട്പുട്ട് അറിയില്ല. ജനറേറ്റർ-ഡിസ്ക്രിമിനേറ്റർ ചേർന്ന GAN നെറ്റ്വർക്ക് എടുത്ത്, റാൻഡം വെക്ടറുകൾ നൽകുകയും ഫലം 1 (യഥാർത്ഥ ചിത്രങ്ങൾക്കു സമാനമായ) ആകണമെന്ന് പ്രതീക്ഷിക്കുകയും ചെയ്യുന്നു. പിന്നീട് ഡിസ്ക്രിമിനേറ്ററിന്റെ പാരാമീറ്ററുകൾ ഫ്രീസ് ചെയ്ത് (ഈ ഘട്ടത്തിൽ അത് പരിശീലിക്കരുത്), ബാക്ക്പ്രൊപ്പഗേഷൻ നടത്തുന്നു.
|
||||
|
||||
ഈ പ്രക്രിയയിൽ, ജനറേറ്ററും ഡിസ്ക്രിമിനേറ്ററും ലോസ്സുകൾ വളരെ കുറയാതെ മാറുന്നു.理想的な状況では、両方のネットワークの性能が向上することに対応して、振動するはずです。
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: GANs
|
||||
|
||||
* [TensorFlow/Keras-ൽ GAN നോട്ട്ബുക്ക്](GANTF.ipynb)
|
||||
* [PyTorch-ൽ GAN നോട്ട്ബുക്ക്](GANPyTorch.ipynb)
|
||||
|
||||
### GAN പരിശീലനത്തിലെ പ്രശ്നങ്ങൾ
|
||||
|
||||
GAN-കൾ പരിശീലിപ്പിക്കാൻ പ്രത്യേകിച്ച് ബുദ്ധിമുട്ടുള്ളവയാണ്. ചില പ്രശ്നങ്ങൾ:
|
||||
|
||||
* **മോഡ് കോളാപ്സ്**. ഇതിന്റെ അർത്ഥം ജനറേറ്റർ ഒരു വിജയകരമായ ഒരു ചിത്രം മാത്രമാണ് സൃഷ്ടിക്കുന്നത്, പലവിധ ചിത്രങ്ങൾ അല്ല.
|
||||
* **ഹൈപ്പർപാരാമീറ്ററുകളോട് സენსിറ്റിവിറ്റി**. GAN ഒരിക്കലും സമാപിക്കാത്തതായി കാണാം, പിന്നീട് ലേണിംഗ് റേറ്റ് കുറയുമ്പോൾ സമാപനം സംഭവിക്കുന്നു.
|
||||
* ജനറേറ്ററും ഡിസ്ക്രിമിനേറ്ററും തമ്മിൽ **സമതുല്യത** നിലനിർത്തൽ. പലപ്പോഴും ഡിസ്ക്രിമിനേറ്റർ ലോസ് വേഗത്തിൽ 0-വരെയെത്തും, ഇത് ജനറേറ്റർക്ക് കൂടുതൽ പരിശീലനം നടത്താൻ കഴിയാതെ പോകും. ഇതിന് പരിഹാരമായി, ജനറേറ്ററിനും ഡിസ്ക്രിമിനേറ്ററിനും വ്യത്യസ്ത ലേണിംഗ് റേറ്റുകൾ നൽകാം, അല്ലെങ്കിൽ ലോസ് വളരെ കുറവായാൽ ഡിസ്ക്രിമിനേറ്റർ പരിശീലനം ഒഴിവാക്കാം.
|
||||
* **ഉയർന്ന റെസല്യൂഷനിൽ** പരിശീലനം. ഓട്ടോഎൻകോഡറുകളിലെ പ്രശ്നം പോലെ, കോൺവല്യൂഷണൽ നെറ്റ്വർക്കിന്റെ അനേകം ലെയറുകൾ പുനർനിർമ്മിക്കുന്നത് ആർട്ടിഫാക്ടുകൾ ഉണ്ടാക്കുന്നു. ഇത് സാധാരണയായി **പ്രോഗ്രസീവ് ഗ്രോയിംഗ്** ഉപയോഗിച്ച് പരിഹരിക്കുന്നു, ആദ്യം കുറച്ച് ലെയറുകൾ കുറഞ്ഞ റെസല്യൂഷനിൽ പരിശീലിപ്പിച്ച്, പിന്നീട് ലെയറുകൾ "അൺബ്ലോക്ക്" ചെയ്യുകയോ ചേർക്കുകയോ ചെയ്യുന്നു. മറ്റൊരു പരിഹാരമായി ലെയറുകൾക്കിടയിൽ അധിക ബന്ധങ്ങൾ ചേർത്ത് ഒരേസമയം പല റെസല്യൂഷനുകളിലും പരിശീലനം നടത്താം - വിശദാംശങ്ങൾക്ക് ഈ [മൾട്ടി-സ്കെയിൽ ഗ്രേഡിയന്റ് GANs പേപ്പർ](https://arxiv.org/abs/1903.06048) കാണുക.
|
||||
|
||||
## സ്റ്റൈൽ ട്രാൻസ്ഫർ
|
||||
|
||||
GAN-കൾ കലാപരമായ ചിത്രങ്ങൾ സൃഷ്ടിക്കാൻ മികച്ച മാർഗമാണ്. മറ്റൊരു രസകരമായ സാങ്കേതിക വിദ്യ **സ്റ്റൈൽ ട്രാൻസ്ഫർ** ആണ്, ഇത് ഒരു **കണ്ടന്റ് ചിത്രം** എടുത്ത്, അതിനെ വ്യത്യസ്ത സ്റ്റൈലിൽ പുനരാഖ്യാനം ചെയ്യുന്നു, **സ്റ്റൈൽ ചിത്രം** നിന്നുള്ള ഫിൽട്ടറുകൾ പ്രയോഗിച്ച്.
|
||||
|
||||
ഇത് പ്രവർത്തിക്കുന്നത് ഇങ്ങനെ:
|
||||
|
||||
* നാം ഒരു റാൻഡം നോയിസ് ചിത്രം (അല്ലെങ്കിൽ കണ്ടന്റ് ചിത്രം, പക്ഷേ മനസ്സിലാക്കാൻ റാൻഡം നോയിസ് തുടങ്ങുന്നത് എളുപ്പമാണ്) ഉപയോഗിച്ച് തുടങ്ങുന്നു
|
||||
* ലക്ഷ്യം ഇങ്ങനെ ഒരു ചിത്രം സൃഷ്ടിക്കുക എന്നതാണ്, അത് കണ്ടന്റ് ചിത്രത്തിനും സ്റ്റൈൽ ചിത്രത്തിനും അടുത്തതായിരിക്കും. ഇത് രണ്ട് ലോസ് ഫംഗ്ഷനുകൾ ഉപയോഗിച്ച് നിർണ്ണയിക്കും:
|
||||
- **കണ്ടന്റ് ലോസ്** നിലവിലെ ചിത്രം, കണ്ടന്റ് ചിത്രം എന്നിവയിൽ നിന്നുള്ള CNN-ൽ ചില ലെയറുകളിൽ നിന്നുള്ള ഫീച്ചറുകൾ അടിസ്ഥാനമാക്കി കണക്കാക്കുന്നു
|
||||
- **സ്റ്റൈൽ ലോസ്** നിലവിലെ ചിത്രം, സ്റ്റൈൽ ചിത്രം എന്നിവയിൽ ഗ്രാം മാട്രിസുകൾ ഉപയോഗിച്ച് ബുദ്ധിമുട്ടുള്ള രീതിയിൽ കണക്കാക്കുന്നു (കൂടുതൽ വിശദാംശങ്ങൾ [ഉദാഹരണ നോട്ട്ബുക്കിൽ](StyleTransfer.ipynb))
|
||||
* ചിത്രം മൃദുവാക്കാനും നോയിസ് നീക്കാനും, **വേരിയേഷൻ ലോസ്** പരിചയപ്പെടുത്തുന്നു, ഇത് സമീപമുള്ള പിക്സലുകൾ തമ്മിലുള്ള ശരാശരി ദൂരം കണക്കാക്കുന്നു
|
||||
* പ്രധാന ഓപ്റ്റിമൈസേഷൻ ലൂപ്പ് ഗ്രേഡിയന്റ് ഡിസെന്റ് (അല്ലെങ്കിൽ മറ്റേതെങ്കിലും ഓപ്റ്റിമൈസേഷൻ ആൽഗോരിതം) ഉപയോഗിച്ച് നിലവിലെ ചിത്രം ക്രമീകരിച്ച് മൊത്തം ലോസ് (മൂന്ന് ലോസുകളുടെ ഭാരിത സംയോജനം) കുറയ്ക്കുന്നു.
|
||||
|
||||
## ✍️ ഉദാഹരണം: [സ്റ്റൈൽ ട്രാൻസ്ഫർ](StyleTransfer.ipynb)
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/20)
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ഈ പാഠത്തിൽ, നിങ്ങൾ GANs-നെക്കുറിച്ച് പഠിച്ചു, അവയെ എങ്ങനെ പരിശീലിപ്പിക്കാമെന്ന് മനസ്സിലാക്കി. ഈ തരം ന്യൂറൽ നെറ്റ്വർക്കുകൾ നേരിടുന്ന പ്രത്യേക വെല്ലുവിളികളും അവ മറികടക്കാനുള്ള ചില തന്ത്രങ്ങളും നിങ്ങൾക്ക് അറിയാം.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
നിങ്ങളുടെ സ്വന്തം ചിത്രങ്ങൾ ഉപയോഗിച്ച് [സ്റ്റൈൽ ട്രാൻസ്ഫർ നോട്ട്ബുക്ക്](StyleTransfer.ipynb) പ്രവർത്തിപ്പിക്കുക.
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
റഫറൻസിനായി, GANs-നെക്കുറിച്ച് കൂടുതൽ വായിക്കുക:
|
||||
|
||||
* Marco Pasini, [10 Lessons I Learned Training GANs for one Year](https://towardsdatascience.com/10-lessons-i-learned-training-generative-adversarial-networks-gans-for-a-year-c9071159628)
|
||||
* [StyleGAN](https://en.wikipedia.org/wiki/StyleGAN), പരിഗണിക്കേണ്ട ഒരു *de facto* GAN ആർക്കിടെക്ചർ
|
||||
* [Azure ML-ൽ GANs ഉപയോഗിച്ച് ജനറേറ്റീവ് ആർട്ട് സൃഷ്ടിക്കൽ](https://soshnikov.com/scienceart/creating-generative-art-using-gan-on-azureml/)
|
||||
|
||||
## അസൈൻമെന്റ്
|
||||
|
||||
ഈ പാഠവുമായി ബന്ധപ്പെട്ട രണ്ട് നോട്ട്ബുക്കുകളിൽ ഒന്നിൽ തിരിച്ച് പോയി GAN നിങ്ങളുടെ സ്വന്തം ചിത്രങ്ങളിൽ വീണ്ടും പരിശീലിപ്പിക്കുക. നിങ്ങൾ എന്ത് സൃഷ്ടിക്കാനാകും?
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് പരിഗണിക്കേണ്ടതാണ്. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "0ff65b4da07b23697235de2beb2a3c25",
|
||||
"translation_date": "2025-11-25T22:30:04+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/10-GANs/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ജനറേറ്റീവ് അഡ്വേഴ്സറിയൽ നെറ്റ്വർക്കുകൾ
|
||||
|
||||
മുൻവകുപ്പിൽ, നാം **ജനറേറ്റീവ് മോഡലുകൾ** എന്നതിനെക്കുറിച്ച് പഠിച്ചു: പരിശീലന ഡാറ്റാസെറ്റിലുള്ള ചിത്രങ്ങളോട് സമാനമായ പുതിയ ചിത്രങ്ങൾ സൃഷ്ടിക്കാൻ കഴിയുന്ന മോഡലുകൾ. VAE ഒരു നല്ല ഉദാഹരണമായിരുന്നു.
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/19)
|
||||
|
||||
എങ്കിലും, VAE ഉപയോഗിച്ച് യഥാർത്ഥത്തിൽ അർത്ഥവത്തായ, യുക്തിസഹമായ റെസല്യൂഷനിലുള്ള ഒരു പെയിന്റിംഗ് പോലുള്ള ഒന്നിനെ സൃഷ്ടിക്കാൻ ശ്രമിച്ചാൽ, പരിശീലനം നന്നായി സമാപിക്കാത്തതായി കാണും. ഈ ഉപയോഗത്തിനായി, പ്രത്യേകിച്ച് ജനറേറ്റീവ് മോഡലുകൾക്കായി ലക്ഷ്യമിട്ട മറ്റൊരു ആർക്കിടെക്ചർ പഠിക്കേണ്ടതാണ് - **ജനറേറ്റീവ് അഡ്വേഴ്സറിയൽ നെറ്റ്വർക്കുകൾ**, അല്ലെങ്കിൽ GANs.
|
||||
|
||||
GAN-ന്റെ പ്രധാന ആശയം രണ്ട് ന്യൂറൽ നെറ്റ്വർക്കുകൾ തമ്മിൽ പരസ്പരം മത്സരിച്ച് പരിശീലിക്കപ്പെടുക എന്നതാണ്:
|
||||
|
||||
<img src="../../../../../translated_images/gan_architecture.8f3a5ab62b8d5d69.ml.png" width="70%"/>
|
||||
|
||||
> ചിത്രം: [Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
> ✅ ചെറിയ വാക്കുകൾ:
|
||||
> * **ജനറേറ്റർ** ഒരു റാൻഡം വെക്ടർ സ്വീകരിച്ച്, ഫലമായി ചിത്രം സൃഷ്ടിക്കുന്ന നെറ്റ്വർക്കാണ്
|
||||
> * **ഡിസ്ക്രിമിനേറ്റർ** ഒരു ചിത്രം സ്വീകരിച്ച് അത് യഥാർത്ഥ ചിത്രം (പരിശീലന ഡാറ്റാസെറ്റിൽ നിന്നുള്ളത്) ആണോ, ജനറേറ്റർ സൃഷ്ടിച്ചവയാണോ എന്ന് പറയേണ്ട നെറ്റ്വർക്കാണ്. ഇത് അടിസ്ഥാനപരമായി ഒരു ചിത്രം ക്ലാസിഫയർ ആണ്.
|
||||
|
||||
### ഡിസ്ക്രിമിനേറ്റർ
|
||||
|
||||
ഡിസ്ക്രിമിനേറ്ററിന്റെ ആർക്കിടെക്ചർ സാധാരണ ചിത്ര ക്ലാസിഫിക്കേഷൻ നെറ്റ്വർക്കിൽ നിന്ന് വ്യത്യസ്തമല്ല. ഏറ്റവും ലളിതമായ സാഹചര്യത്തിൽ ഇത് ഫുൾ-കണക്ടഡ് ക്ലാസിഫയർ ആയിരിക്കാം, പക്ഷേ സാധാരണയായി ഇത് [കോൺവല്യൂഷണൽ നെറ്റ്വർക്കായിരിക്കും](../07-ConvNets/README.md).
|
||||
|
||||
> ✅ കോൺവല്യൂഷണൽ നെറ്റ്വർക്കുകൾ അടിസ്ഥാനമാക്കിയ GAN-നെ [DCGAN](https://arxiv.org/pdf/1511.06434.pdf) എന്ന് വിളിക്കുന്നു
|
||||
|
||||
CNN ഡിസ്ക്രിമിനേറ്റർ താഴെപ്പറയുന്ന ലെയറുകൾ ഉൾക്കൊള്ളുന്നു: കുറയുന്ന സ്ഥലം വലുപ്പത്തോടെ നിരവധി കോൺവല്യൂഷനുകളും പൂളിംഗുകളും, തുടർന്ന് "ഫീച്ചർ വെക്ടർ" ലഭിക്കാൻ ഒരു അല്ലെങ്കിൽ കൂടുതൽ ഫുൾ-കണക്ടഡ് ലെയറുകൾ, ഒടുവിൽ ബൈനറി ക്ലാസിഫയർ.
|
||||
|
||||
> ✅ ഈ സാഹചര്യത്തിൽ 'പൂളിംഗ്' എന്നത് ചിത്രത്തിന്റെ വലുപ്പം കുറയ്ക്കുന്ന സാങ്കേതിക വിദ്യയാണ്. "പൂളിംഗ് ലെയറുകൾ ഒരു ലെയറിലെ ന്യൂറോൺ ക്ലസ്റ്ററുകളുടെ ഔട്ട്പുട്ടുകൾ അടുത്ത ലെയറിലെ ഒരു ന്യൂറോണായി സംയോജിപ്പിച്ച് ഡാറ്റയുടെ അളവുകൾ കുറയ്ക്കുന്നു." - [സ്രോതസ്സ്](https://wikipedia.org/wiki/Convolutional_neural_network#Pooling_layers)
|
||||
|
||||
### ജനറേറ്റർ
|
||||
|
||||
ജനറേറ്റർ കുറച്ച് കൂടുതൽ സങ്കീർണ്ണമാണ്. ഇത് ഒരു റിവേഴ്സഡ് ഡിസ്ക്രിമിനേറ്ററായി പരിഗണിക്കാം. latent വെക്ടറിൽ നിന്ന് (ഫീച്ചർ വെക്ടറിന്റെ പകരം), ആവശ്യമായ വലുപ്പത്തിലേക്ക് മാറ്റാൻ ഒരു ഫുൾ-കണക്ടഡ് ലെയർ ഉണ്ട്, തുടർന്ന് ഡീകോൺവല്യൂഷനുകളും അപ്സ്കെയ്ലിംഗും. ഇത് [ഓട്ടോഎൻകോഡർ](../09-Autoencoders/README.md)യുടെ *ഡീകോഡർ* ഭാഗത്തോട് സമാനമാണ്.
|
||||
|
||||
> ✅ കോൺവല്യൂഷൻ ലെയർ ചിത്രം താണ്ടുന്ന ലീനിയർ ഫിൽട്ടറായതിനാൽ, ഡീകോൺവല്യൂഷൻ അടിസ്ഥാനപരമായി കോൺവല്യൂഷനോട് സമാനമാണ്, അതേ ലെയർ ലജിക് ഉപയോഗിച്ച് നടപ്പിലാക്കാം.
|
||||
|
||||
<img src="../../../../../translated_images/gan_arch_detail.46b95fd366f8e543.ml.png" width="70%"/>
|
||||
|
||||
> ചിത്രം: [Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
### GAN പരിശീലനം
|
||||
|
||||
GAN-കൾ **അഡ്വേഴ്സറിയൽ** എന്ന് വിളിക്കുന്നത് ജനറേറ്ററും ഡിസ്ക്രിമിനേറ്ററും തമ്മിൽ സ്ഥിരമായ മത്സരം ഉണ്ടാകുന്നതിനാലാണ്. ഈ മത്സരത്തിൽ, ഇരുവരും മെച്ചപ്പെടുന്നു, അതിനാൽ നെറ്റ്വർക്ക് മെച്ചപ്പെട്ട ചിത്രങ്ങൾ സൃഷ്ടിക്കാൻ പഠിക്കുന്നു.
|
||||
|
||||
പരിശീലനം രണ്ട് ഘട്ടങ്ങളിൽ നടക്കുന്നു:
|
||||
|
||||
* **ഡിസ്ക്രിമിനേറ്റർ പരിശീലനം**. ഇത് വളരെ നേരിയതാണ്: ജനറേറ്റർ ഉപയോഗിച്ച് ഒരു ബാച്ച് ചിത്രം സൃഷ്ടിച്ച് അവയ്ക്ക് 0 (കൃത്രിമ ചിത്രം) എന്ന ലേബൽ നൽകുന്നു, കൂടാതെ ഇൻപുട്ട് ഡാറ്റാസെറ്റിൽ നിന്നുള്ള യഥാർത്ഥ ചിത്രങ്ങളുടെ ബാച്ച് (ലേബൽ 1) എടുത്ത് *ഡിസ്ക്രിമിനേറ്റർ ലോസ്* ലഭിച്ച് ബാക്ക്പ്രൊപ്പഗേഷൻ നടത്തുന്നു.
|
||||
* **ജനറേറ്റർ പരിശീലനം**. ഇത് കുറച്ച് സങ്കീർണ്ണമാണ്, കാരണം ജനറേറ്ററിന് നേരിട്ട് പ്രതീക്ഷിക്കുന്ന ഔട്ട്പുട്ട് അറിയില്ല. ജനറേറ്റർ-ഡിസ്ക്രിമിനേറ്റർ ചേർന്ന GAN നെറ്റ്വർക്ക് എടുത്ത്, റാൻഡം വെക്ടറുകൾ നൽകുകയും ഫലം 1 (യഥാർത്ഥ ചിത്രങ്ങൾക്കു സമാനമായ) ആകണമെന്ന് പ്രതീക്ഷിക്കുകയും ചെയ്യുന്നു. പിന്നീട് ഡിസ്ക്രിമിനേറ്ററിന്റെ പാരാമീറ്ററുകൾ ഫ്രീസ് ചെയ്ത് (ഈ ഘട്ടത്തിൽ അത് പരിശീലിക്കരുത്), ബാക്ക്പ്രൊപ്പഗേഷൻ നടത്തുന്നു.
|
||||
|
||||
ഈ പ്രക്രിയയിൽ, ജനറേറ്ററും ഡിസ്ക്രിമിനേറ്ററും ലോസ്സുകൾ വളരെ കുറയാതെ മാറുന്നു.理想的な状況では、両方のネットワークの性能が向上することに対応して、振動するはずです。
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: GANs
|
||||
|
||||
* [TensorFlow/Keras-ൽ GAN നോട്ട്ബുക്ക്](GANTF.ipynb)
|
||||
* [PyTorch-ൽ GAN നോട്ട്ബുക്ക്](GANPyTorch.ipynb)
|
||||
|
||||
### GAN പരിശീലനത്തിലെ പ്രശ്നങ്ങൾ
|
||||
|
||||
GAN-കൾ പരിശീലിപ്പിക്കാൻ പ്രത്യേകിച്ച് ബുദ്ധിമുട്ടുള്ളവയാണ്. ചില പ്രശ്നങ്ങൾ:
|
||||
|
||||
* **മോഡ് കോളാപ്സ്**. ഇതിന്റെ അർത്ഥം ജനറേറ്റർ ഒരു വിജയകരമായ ഒരു ചിത്രം മാത്രമാണ് സൃഷ്ടിക്കുന്നത്, പലവിധ ചിത്രങ്ങൾ അല്ല.
|
||||
* **ഹൈപ്പർപാരാമീറ്ററുകളോട് സენსിറ്റിവിറ്റി**. GAN ഒരിക്കലും സമാപിക്കാത്തതായി കാണാം, പിന്നീട് ലേണിംഗ് റേറ്റ് കുറയുമ്പോൾ സമാപനം സംഭവിക്കുന്നു.
|
||||
* ജനറേറ്ററും ഡിസ്ക്രിമിനേറ്ററും തമ്മിൽ **സമതുല്യത** നിലനിർത്തൽ. പലപ്പോഴും ഡിസ്ക്രിമിനേറ്റർ ലോസ് വേഗത്തിൽ 0-വരെയെത്തും, ഇത് ജനറേറ്റർക്ക് കൂടുതൽ പരിശീലനം നടത്താൻ കഴിയാതെ പോകും. ഇതിന് പരിഹാരമായി, ജനറേറ്ററിനും ഡിസ്ക്രിമിനേറ്ററിനും വ്യത്യസ്ത ലേണിംഗ് റേറ്റുകൾ നൽകാം, അല്ലെങ്കിൽ ലോസ് വളരെ കുറവായാൽ ഡിസ്ക്രിമിനേറ്റർ പരിശീലനം ഒഴിവാക്കാം.
|
||||
* **ഉയർന്ന റെസല്യൂഷനിൽ** പരിശീലനം. ഓട്ടോഎൻകോഡറുകളിലെ പ്രശ്നം പോലെ, കോൺവല്യൂഷണൽ നെറ്റ്വർക്കിന്റെ അനേകം ലെയറുകൾ പുനർനിർമ്മിക്കുന്നത് ആർട്ടിഫാക്ടുകൾ ഉണ്ടാക്കുന്നു. ഇത് സാധാരണയായി **പ്രോഗ്രസീവ് ഗ്രോയിംഗ്** ഉപയോഗിച്ച് പരിഹരിക്കുന്നു, ആദ്യം കുറച്ച് ലെയറുകൾ കുറഞ്ഞ റെസല്യൂഷനിൽ പരിശീലിപ്പിച്ച്, പിന്നീട് ലെയറുകൾ "അൺബ്ലോക്ക്" ചെയ്യുകയോ ചേർക്കുകയോ ചെയ്യുന്നു. മറ്റൊരു പരിഹാരമായി ലെയറുകൾക്കിടയിൽ അധിക ബന്ധങ്ങൾ ചേർത്ത് ഒരേസമയം പല റെസല്യൂഷനുകളിലും പരിശീലനം നടത്താം - വിശദാംശങ്ങൾക്ക് ഈ [മൾട്ടി-സ്കെയിൽ ഗ്രേഡിയന്റ് GANs പേപ്പർ](https://arxiv.org/abs/1903.06048) കാണുക.
|
||||
|
||||
## സ്റ്റൈൽ ട്രാൻസ്ഫർ
|
||||
|
||||
GAN-കൾ കലാപരമായ ചിത്രങ്ങൾ സൃഷ്ടിക്കാൻ മികച്ച മാർഗമാണ്. മറ്റൊരു രസകരമായ സാങ്കേതിക വിദ്യ **സ്റ്റൈൽ ട്രാൻസ്ഫർ** ആണ്, ഇത് ഒരു **കണ്ടന്റ് ചിത്രം** എടുത്ത്, അതിനെ വ്യത്യസ്ത സ്റ്റൈലിൽ പുനരാഖ്യാനം ചെയ്യുന്നു, **സ്റ്റൈൽ ചിത്രം** നിന്നുള്ള ഫിൽട്ടറുകൾ പ്രയോഗിച്ച്.
|
||||
|
||||
ഇത് പ്രവർത്തിക്കുന്നത് ഇങ്ങനെ:
|
||||
|
||||
* നാം ഒരു റാൻഡം നോയിസ് ചിത്രം (അല്ലെങ്കിൽ കണ്ടന്റ് ചിത്രം, പക്ഷേ മനസ്സിലാക്കാൻ റാൻഡം നോയിസ് തുടങ്ങുന്നത് എളുപ്പമാണ്) ഉപയോഗിച്ച് തുടങ്ങുന്നു
|
||||
* ലക്ഷ്യം ഇങ്ങനെ ഒരു ചിത്രം സൃഷ്ടിക്കുക എന്നതാണ്, അത് കണ്ടന്റ് ചിത്രത്തിനും സ്റ്റൈൽ ചിത്രത്തിനും അടുത്തതായിരിക്കും. ഇത് രണ്ട് ലോസ് ഫംഗ്ഷനുകൾ ഉപയോഗിച്ച് നിർണ്ണയിക്കും:
|
||||
- **കണ്ടന്റ് ലോസ്** നിലവിലെ ചിത്രം, കണ്ടന്റ് ചിത്രം എന്നിവയിൽ നിന്നുള്ള CNN-ൽ ചില ലെയറുകളിൽ നിന്നുള്ള ഫീച്ചറുകൾ അടിസ്ഥാനമാക്കി കണക്കാക്കുന്നു
|
||||
- **സ്റ്റൈൽ ലോസ്** നിലവിലെ ചിത്രം, സ്റ്റൈൽ ചിത്രം എന്നിവയിൽ ഗ്രാം മാട്രിസുകൾ ഉപയോഗിച്ച് ബുദ്ധിമുട്ടുള്ള രീതിയിൽ കണക്കാക്കുന്നു (കൂടുതൽ വിശദാംശങ്ങൾ [ഉദാഹരണ നോട്ട്ബുക്കിൽ](StyleTransfer.ipynb))
|
||||
* ചിത്രം മൃദുവാക്കാനും നോയിസ് നീക്കാനും, **വേരിയേഷൻ ലോസ്** പരിചയപ്പെടുത്തുന്നു, ഇത് സമീപമുള്ള പിക്സലുകൾ തമ്മിലുള്ള ശരാശരി ദൂരം കണക്കാക്കുന്നു
|
||||
* പ്രധാന ഓപ്റ്റിമൈസേഷൻ ലൂപ്പ് ഗ്രേഡിയന്റ് ഡിസെന്റ് (അല്ലെങ്കിൽ മറ്റേതെങ്കിലും ഓപ്റ്റിമൈസേഷൻ ആൽഗോരിതം) ഉപയോഗിച്ച് നിലവിലെ ചിത്രം ക്രമീകരിച്ച് മൊത്തം ലോസ് (മൂന്ന് ലോസുകളുടെ ഭാരിത സംയോജനം) കുറയ്ക്കുന്നു.
|
||||
|
||||
## ✍️ ഉദാഹരണം: [സ്റ്റൈൽ ട്രാൻസ്ഫർ](StyleTransfer.ipynb)
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/20)
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ഈ പാഠത്തിൽ, നിങ്ങൾ GANs-നെക്കുറിച്ച് പഠിച്ചു, അവയെ എങ്ങനെ പരിശീലിപ്പിക്കാമെന്ന് മനസ്സിലാക്കി. ഈ തരം ന്യൂറൽ നെറ്റ്വർക്കുകൾ നേരിടുന്ന പ്രത്യേക വെല്ലുവിളികളും അവ മറികടക്കാനുള്ള ചില തന്ത്രങ്ങളും നിങ്ങൾക്ക് അറിയാം.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
നിങ്ങളുടെ സ്വന്തം ചിത്രങ്ങൾ ഉപയോഗിച്ച് [സ്റ്റൈൽ ട്രാൻസ്ഫർ നോട്ട്ബുക്ക്](StyleTransfer.ipynb) പ്രവർത്തിപ്പിക്കുക.
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
റഫറൻസിനായി, GANs-നെക്കുറിച്ച് കൂടുതൽ വായിക്കുക:
|
||||
|
||||
* Marco Pasini, [10 Lessons I Learned Training GANs for one Year](https://towardsdatascience.com/10-lessons-i-learned-training-generative-adversarial-networks-gans-for-a-year-c9071159628)
|
||||
* [StyleGAN](https://en.wikipedia.org/wiki/StyleGAN), പരിഗണിക്കേണ്ട ഒരു *de facto* GAN ആർക്കിടെക്ചർ
|
||||
* [Azure ML-ൽ GANs ഉപയോഗിച്ച് ജനറേറ്റീവ് ആർട്ട് സൃഷ്ടിക്കൽ](https://soshnikov.com/scienceart/creating-generative-art-using-gan-on-azureml/)
|
||||
|
||||
## അസൈൻമെന്റ്
|
||||
|
||||
ഈ പാഠവുമായി ബന്ധപ്പെട്ട രണ്ട് നോട്ട്ബുക്കുകളിൽ ഒന്നിൽ തിരിച്ച് പോയി GAN നിങ്ങളുടെ സ്വന്തം ചിത്രങ്ങളിൽ വീണ്ടും പരിശീലിപ്പിക്കുക. നിങ്ങൾ എന്ത് സൃഷ്ടിക്കാനാകും?
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് പരിഗണിക്കേണ്ടതാണ്. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,191 +1,191 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "d76a7eda28de5210c8b1ba50a6216c69",
|
||||
"translation_date": "2025-11-25T22:34:12+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/11-ObjectDetection/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ
|
||||
|
||||
ഇതുവരെ കൈകാര്യം ചെയ്ത ഇമേജ് ക്ലാസിഫിക്കേഷൻ മോഡലുകൾ ഒരു ചിത്രം എടുത്ത് ഒരു വർഗ്ഗീയ ഫലം ഉത്പാദിപ്പിച്ചിരുന്നു, ഉദാഹരണത്തിന് MNIST പ്രശ്നത്തിലെ 'നമ്പർ' ക്ലാസ്. എന്നാൽ പലപ്പോഴും ഒരു ചിത്രത്തിൽ വസ്തുക്കൾ കാണപ്പെടുന്നുവെന്ന് അറിയുന്നതിൽ മാത്രമല്ല, അവയുടെ കൃത്യമായ സ്ഥാനം കണ്ടെത്താൻ ആഗ്രഹിക്കുന്നു. ഇതാണ് **ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ** എന്നതിന്റെ പ്രധാന ലക്ഷ്യം.
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/21)
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [YOLO v2 വെബ്സൈറ്റ്](https://pjreddie.com/darknet/yolov2/) നിന്നാണ്
|
||||
|
||||
## ഒബ്ജക്റ്റ് ഡിറ്റക്ഷനിലേക്കുള്ള ഒരു ലളിതമായ സമീപനം
|
||||
|
||||
ഒരു ചിത്രത്തിൽ പൂച്ച കണ്ടെത്തണമെന്ന് കരുതുമ്പോൾ, ഒബ്ജക്റ്റ് ഡിറ്റക്ഷനിലേക്കുള്ള വളരെ ലളിതമായ ഒരു സമീപനം ഇതാണ്:
|
||||
|
||||
1. ചിത്രത്തെ പല ടൈലുകളായി വിഭജിക്കുക
|
||||
2. ഓരോ ടൈലിലും ഇമേജ് ക്ലാസിഫിക്കേഷൻ നടത്തുക
|
||||
3. ഉയർന്ന ആക്ടിവേഷൻ ലഭിക്കുന്ന ടൈലുകൾ ആ വസ്തു അടങ്ങിയതായി കരുതാം
|
||||
|
||||

|
||||
|
||||
> *ചിത്രം [Exercise Notebook](ObjectDetection-TF.ipynb) നിന്നാണ്*
|
||||
|
||||
എങ്കിലും, ഈ സമീപനം വളരെ കൃത്യമായ ബൗണ്ടിംഗ് ബോക്സ് സ്ഥാനം കണ്ടെത്താൻ കഴിയാത്തതിനാൽ അനുയോജ്യമല്ല. കൂടുതൽ കൃത്യമായ സ്ഥാനം കണ്ടെത്താൻ, ബൗണ്ടിംഗ് ബോക്സുകളുടെ കോഓർഡിനേറ്റുകൾ പ്രവചിക്കാൻ ഒരു തരത്തിലുള്ള **റെഗ്രഷൻ** നടത്തേണ്ടതുണ്ട് - അതിനായി പ്രത്യേക ഡാറ്റാസെറ്റുകൾ ആവശ്യമാണ്.
|
||||
|
||||
## ഒബ്ജക്റ്റ് ഡിറ്റക്ഷനിലേക്കുള്ള റെഗ്രഷൻ
|
||||
|
||||
[ഈ ബ്ലോഗ് പോസ്റ്റ്](https://towardsdatascience.com/object-detection-with-neural-networks-a4e2c46b4491) ആകൃതികൾ കണ്ടെത്തുന്നതിന് ഒരു സൗമ്യമായ പരിചയം നൽകുന്നു.
|
||||
|
||||
## ഒബ്ജക്റ്റ് ഡിറ്റക്ഷനുള്ള ഡാറ്റാസെറ്റുകൾ
|
||||
|
||||
ഈ ടാസ്കിനായി നിങ്ങൾക്ക് താഴെപ്പറയുന്ന ഡാറ്റാസെറ്റുകൾ കാണാം:
|
||||
|
||||
* [PASCAL VOC](http://host.robots.ox.ac.uk/pascal/VOC/) - 20 ക്ലാസുകൾ
|
||||
* [COCO](http://cocodataset.org/#home) - Common Objects in Context. 80 ക്ലാസുകൾ, ബൗണ്ടിംഗ് ബോക്സുകളും സെഗ്മെന്റേഷൻ മാസ്കുകളും
|
||||
|
||||

|
||||
|
||||
## ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ മെട്രിക്സ്
|
||||
|
||||
### Intersection over Union
|
||||
|
||||
ഇമേജ് ക്ലാസിഫിക്കേഷനിൽ ആൽഗോരിതത്തിന്റെ പ്രകടനം എളുപ്പത്തിൽ അളക്കാമെങ്കിലും, ഒബ്ജക്റ്റ് ഡിറ്റക്ഷനിൽ ക്ലാസിന്റെ ശരിതത്വവും ബൗണ്ടിംഗ് ബോക്സിന്റെ കൃത്യതയും അളക്കേണ്ടതുണ്ട്. ഇതിന് **Intersection over Union** (IoU) ഉപയോഗിക്കുന്നു, ഇത് രണ്ട് ബോക്സുകൾ (അഥവാ രണ്ട് ഏരിയകൾ) എത്രമാത്രം ഒതുക്കപ്പെടുന്നുവെന്ന് അളക്കുന്നു.
|
||||
|
||||

|
||||
|
||||
> *ചിത്രം [ഈ മികച്ച ബ്ലോഗ് പോസ്റ്റ്](https://pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/) നിന്നാണ്*
|
||||
|
||||
സങ്കൽപ്പം ലളിതമാണ് - രണ്ട് ആകൃതികളുടെ മധ്യേ ഉള്ള ഒത്തുചേരുന്ന പ്രദേശത്തിന്റെ വിസ്തീർണ്ണം അവരുടെ സംയോജിത വിസ്തീർണ്ണം കൊണ്ട് വിഭജിക്കുന്നു. രണ്ട് സമാനമായ പ്രദേശങ്ങൾക്ക് IoU 1 ആകും, പൂർണ്ണമായും വേർപിരിഞ്ഞ പ്രദേശങ്ങൾക്ക് 0 ആകും. മറ്റ് സാഹചര്യങ്ങളിൽ ഇത് 0 മുതൽ 1 വരെ വ്യത്യാസപ്പെടും. സാധാരണയായി IoU ഒരു നിശ്ചിത മൂല്യത്തിന് മുകളിൽ ഉള്ള ബൗണ്ടിംഗ് ബോക്സുകൾ മാത്രം പരിഗണിക്കുന്നു.
|
||||
|
||||
### ശരാശരി പ്രിസിഷൻ
|
||||
|
||||
ഒരു ക്ലാസ് $C$ എത്രമാത്രം ശരിയായി തിരിച്ചറിയപ്പെടുന്നുവെന്ന് അളക്കാൻ **Average Precision** ഉപയോഗിക്കുന്നു, ഇത് ഇങ്ങനെ കണക്കാക്കുന്നു:
|
||||
|
||||
1. Precision-Recall വളവ് ഒരു ഡിറ്റക്ഷൻ ത്രെഷോൾഡ് മൂല്യത്തിന്റെ (0 മുതൽ 1 വരെ) അടിസ്ഥാനത്തിൽ കൃത്യത കാണിക്കുന്നു.
|
||||
2. ത്രെഷോൾഡ് അനുസരിച്ച് ചിത്രത്തിൽ കണ്ടെത്തുന്ന വസ്തുക്കളുടെ എണ്ണം, പ്രിസിഷനും റീക്കോളും വ്യത്യാസപ്പെടും.
|
||||
3. വളവ് ഇങ്ങനെ കാണപ്പെടും:
|
||||
|
||||
<img src="https://github.com/shwars/NeuroWorkshop/raw/master/images/ObjDetectionPrecisionRecall.png"/>
|
||||
|
||||
> *ചിത്രം [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop) നിന്നാണ്*
|
||||
|
||||
ക്ലാസ് $C$ നുള്ള ശരാശരി പ്രിസിഷൻ ഈ വളവിന്റെ കീഴിലുള്ള വിസ്തീർണ്ണമാണ്. കൂടുതൽ കൃത്യമായി, Recall അക്ഷം സാധാരണയായി 10 ഭാഗങ്ങളായി വിഭജിച്ച്, ആ പോയിന്റുകളിൽ പ്രിസിഷൻ ശരാശരി എടുക്കുന്നു:
|
||||
|
||||
$$
|
||||
AP = {1\over11}\sum_{i=0}^{10}\mbox{Precision}(\mbox{Recall}={i\over10})
|
||||
$$
|
||||
|
||||
### APയും IoUയും
|
||||
|
||||
IoU ഒരു നിശ്ചിത മൂല്യത്തിന് മുകളിൽ ഉള്ള ഡിറ്റക്ഷനുകൾ മാത്രം പരിഗണിക്കും. ഉദാഹരണത്തിന്, PASCAL VOC ഡാറ്റാസെറ്റിൽ സാധാരണയായി $\mbox{IoU Threshold} = 0.5$ ആണ് ഉപയോഗിക്കുന്നത്, COCOയിൽ AP വ്യത്യസ്ത IoU ത്രെഷോൾഡുകൾക്കായി അളക്കുന്നു.
|
||||
|
||||
<img src="https://github.com/shwars/NeuroWorkshop/raw/master/images/ObjDetectionPrecisionRecallIoU.png"/>
|
||||
|
||||
> *ചിത്രം [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop) നിന്നാണ്*
|
||||
|
||||
### ശരാശരി ശരാശരി പ്രിസിഷൻ - mAP
|
||||
|
||||
ഒബ്ജക്റ്റ് ഡിറ്റക്ഷനിലെ പ്രധാന മെട്രിക് **Mean Average Precision** അല്ലെങ്കിൽ **mAP** ആണ്. ഇത് എല്ലാ വസ്തു ക്ലാസുകളിലെയും ശരാശരി പ്രിസിഷന്റെ ശരാശരിയാണ്, ചിലപ്പോൾ IoU ത്രെഷോൾഡുകൾക്കുമപ്പുറം ശരാശരി എടുക്കുന്നു. കൂടുതൽ വിശദമായി, **mAP** കണക്കാക്കുന്ന പ്രക്രിയ [ഈ ബ്ലോഗ് പോസ്റ്റ്](https://medium.com/@timothycarlen/understanding-the-map-evaluation-metric-for-object-detection-a07fe6962cf3)) ൽ വിവരിച്ചിരിക്കുന്നു, കൂടാതെ [ഇവിടെ കോഡ് സാമ്പിളുകളോടൊപ്പം](https://gist.github.com/tarlen5/008809c3decf19313de216b9208f3734) കാണാം.
|
||||
|
||||
## വ്യത്യസ്ത ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ സമീപനങ്ങൾ
|
||||
|
||||
ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ ആൽഗോരിതങ്ങൾ രണ്ട് പ്രധാന വിഭാഗങ്ങളിലായി വേർതിരിക്കാം:
|
||||
|
||||
* **Region Proposal Networks** (R-CNN, Fast R-CNN, Faster R-CNN). പ്രധാന ആശയം **Regions of Interests** (ROI) സൃഷ്ടിച്ച് അവയിൽ CNN ഓടിച്ച് പരമാവധി ആക്ടിവേഷൻ കണ്ടെത്തുക എന്നതാണ്. ലളിതമായ സമീപനത്തോട് സാമ്യമുണ്ട്, പക്ഷേ ROIകൾ കൂടുതൽ ബുദ്ധിമുട്ടുള്ള രീതിയിൽ സൃഷ്ടിക്കുന്നു. ഈ രീതികളുടെ പ്രധാന ദോഷം സ്ലോ ആയിരിക്കുക ആണ്, കാരണം ചിത്രത്തിൽ CNN ക്ലാസിഫയർ പല തവണ ഓടിക്കേണ്ടിവരും.
|
||||
* **One-pass** (YOLO, SSD, RetinaNet) രീതികൾ. ഈ ആർക്കിടെക്ചറുകളിൽ ക്ലാസുകളും ROIകളും ഒരേ പാസ്സിൽ പ്രവചിക്കാൻ നെറ്റ്വർക്ക് രൂപകൽപ്പന ചെയ്യുന്നു.
|
||||
|
||||
### R-CNN: Region-Based CNN
|
||||
|
||||
[R-CNN](http://islab.ulsan.ac.kr/files/announcement/513/rcnn_pami.pdf) [Selective Search](http://www.huppelen.nl/publications/selectiveSearchDraft.pdf) ഉപയോഗിച്ച് ROI പ്രദേശങ്ങളുടെ ഹയർആർക്കിക്കൽ ഘടന സൃഷ്ടിക്കുന്നു, പിന്നീട് CNN ഫീച്ചർ എക്സ്ട്രാക്ടറുകളും SVM ക്ലാസിഫയറുകളും ഉപയോഗിച്ച് വസ്തു ക്ലാസ് നിർണയിക്കുന്നു, ലീനിയർ റെഗ്രഷൻ ഉപയോഗിച്ച് *ബൗണ്ടിംഗ് ബോക്സ്* കോഓർഡിനേറ്റുകൾ കണ്ടെത്തുന്നു. [അധികൃത പേപ്പർ](https://arxiv.org/pdf/1506.01497v1.pdf)
|
||||
|
||||

|
||||
|
||||
> *ചിത്രം van de Sande et al. ICCV’11*
|
||||
|
||||

|
||||
|
||||
> *ചിത്രങ്ങൾ [ഈ ബ്ലോഗ്](https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e) നിന്നാണ്*
|
||||
|
||||
### F-RCNN - ഫാസ്റ്റ് R-CNN
|
||||
|
||||
R-CNN പോലെയാണ്, പക്ഷേ പ്രദേശങ്ങൾ കോൺവല്യൂഷൻ ലെയറുകൾ പ്രയോഗിച്ചതിന് ശേഷം നിർവചിക്കുന്നു.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [അധികൃത പേപ്പർ](https://www.cv-foundation.org/openaccess/content_iccv_2015/papers/Girshick_Fast_R-CNN_ICCV_2015_paper.pdf), [arXiv](https://arxiv.org/pdf/1504.08083.pdf), 2015
|
||||
|
||||
### Faster R-CNN
|
||||
|
||||
ഈ സമീപനത്തിന്റെ പ്രധാന ആശയം ROIകൾ പ്രവചിക്കാൻ ഒരു ന്യൂറൽ നെറ്റ്വർക്ക് ഉപയോഗിക്കുക എന്നതാണ് - ഇതാണ് *Region Proposal Network*. [പേപ്പർ](https://arxiv.org/pdf/1506.01497.pdf), 2016
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [അധികൃത പേപ്പർ](https://arxiv.org/pdf/1506.01497.pdf)
|
||||
|
||||
### R-FCN: Region-Based Fully Convolutional Network
|
||||
|
||||
Faster R-CNN-നേക്കാൾ വേഗത്തിൽ പ്രവർത്തിക്കുന്ന ആൽഗോരിതമാണ് ഇത്. പ്രധാന ആശയം:
|
||||
|
||||
1. ResNet-101 ഉപയോഗിച്ച് ഫീച്ചറുകൾ എടുക്കുന്നു
|
||||
2. ഫീച്ചറുകൾ **Position-Sensitive Score Map** ഉപയോഗിച്ച് പ്രോസസ്സ് ചെയ്യുന്നു. $C$ ക്ലാസുകളിലുള്ള ഓരോ വസ്തുവും $k\times k$ പ്രദേശങ്ങളായി വിഭജിച്ച്, വസ്തുവിന്റെ ഭാഗങ്ങൾ പ്രവചിക്കാൻ പരിശീലനം നൽകുന്നു.
|
||||
3. $k\times k$ പ്രദേശങ്ങളിലെ ഓരോ ഭാഗത്തിനും എല്ലാ നെറ്റ്വർക്കുകളും വസ്തു ക്ലാസുകൾക്ക് വോട്ട് ചെയ്യുന്നു, പരമാവധി വോട്ട് ലഭിച്ച ക്ലാസ് തിരഞ്ഞെടുക്കുന്നു.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [അധികൃത പേപ്പർ](https://arxiv.org/abs/1605.06409)
|
||||
|
||||
### YOLO - You Only Look Once
|
||||
|
||||
YOLO ഒരു റിയൽടൈം ഒന്ന്-പാസ്സ് ആൽഗോരിതമാണ്. പ്രധാന ആശയം:
|
||||
|
||||
* ചിത്രം $S\times S$ പ്രദേശങ്ങളായി വിഭജിക്കുന്നു
|
||||
* ഓരോ പ്രദേശത്തിനും **CNN** $n$ സാധ്യതയുള്ള വസ്തുക്കൾ, *ബൗണ്ടിംഗ് ബോക്സ്* കോഓർഡിനേറ്റുകൾ, *confidence*=*probability* * IoU പ്രവചിക്കുന്നു.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [അധികൃത പേപ്പർ](https://arxiv.org/abs/1506.02640)
|
||||
|
||||
### മറ്റ് ആൽഗോരിതങ്ങൾ
|
||||
|
||||
* RetinaNet: [അധികൃത പേപ്പർ](https://arxiv.org/abs/1708.02002)
|
||||
- [PyTorch ഇംപ്ലിമെന്റേഷൻ Torchvision-ൽ](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html)
|
||||
- [Keras ഇംപ്ലിമെന്റേഷൻ](https://github.com/fizyr/keras-retinanet)
|
||||
- [RetinaNet ഉപയോഗിച്ച് ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ](https://keras.io/examples/vision/retinanet/) Keras സാമ്പിളുകളിൽ
|
||||
* SSD (Single Shot Detector): [അധികൃത പേപ്പർ](https://arxiv.org/abs/1512.02325)
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ
|
||||
|
||||
താഴെപ്പറയുന്ന നോട്ട്ബുക്കിൽ നിങ്ങളുടെ പഠനം തുടരുക:
|
||||
|
||||
[ObjectDetection.ipynb](ObjectDetection.ipynb)
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ഈ പാഠത്തിൽ ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ സാധ്യമാക്കാനുള്ള വിവിധ മാർഗങ്ങൾ നിങ്ങൾക്ക് ഒരു സംക്ഷിപ്ത അവലോകനം ലഭിച്ചു!
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
YOLO-യെക്കുറിച്ചുള്ള ഈ ലേഖനങ്ങളും നോട്ട്ബുക്കുകളും വായിച്ച് സ്വയം പരീക്ഷിച്ച് നോക്കൂ
|
||||
|
||||
* [YOLO വിശദീകരിക്കുന്ന നല്ല ബ്ലോഗ് പോസ്റ്റ്](https://www.analyticsvidhya.com/blog/2018/12/practical-guide-object-detection-yolo-framewor-python/)
|
||||
* [അധികൃത സൈറ്റ്](https://pjreddie.com/darknet/yolo/)
|
||||
* YOLO: [Keras ഇംപ്ലിമെന്റേഷൻ](https://github.com/experiencor/keras-yolo2), [പടി-പടി നോട്ട്ബുക്ക്](https://github.com/experiencor/basic-yolo-keras/blob/master/Yolo%20Step-by-Step.ipynb)
|
||||
* YOLO v2: [Keras ഇംപ്ലിമെന്റേഷൻ](https://github.com/experiencor/keras-yolo2), [പടി-പടി നോട്ട്ബുക്ക്](https://github.com/experiencor/keras-yolo2/blob/master/Yolo%20Step-by-Step.ipynb)
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/22)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
* [ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ](https://tjmachinelearning.com/lectures/1718/obj/) - നിഖിൽ സർദാന
|
||||
* [ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ ആൽഗോരിതങ്ങളുടെ നല്ല താരതമ്യം](https://lilianweng.github.io/lil-log/2018/12/27/object-detection-part-4.html)
|
||||
* [ഒബ്ജക്റ്റ് ഡിറ്റക്ഷനുള്ള ഡീപ് ലേണിംഗ് ആൽഗോരിതങ്ങളുടെ അവലോകനം](https://medium.com/comet-app/review-of-deep-learning-algorithms-for-object-detection-c1f3d437b852)
|
||||
* [അടിസ്ഥാന ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ ആൽഗോരിതങ്ങളിലേക്കുള്ള പടി-പടി പരിചയം](https://www.analyticsvidhya.com/blog/2018/10/a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1/)
|
||||
* [Python-ൽ Faster R-CNN ഇംപ്ലിമെന്റേഷൻ ഒബ്ജക്റ്റ് ഡിറ്റക്ഷനായി](https://www.analyticsvidhya.com/blog/2018/11/implementation-faster-r-cnn-python-object-detection/)
|
||||
|
||||
## [അസൈൻമെന്റ്: ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ](lab/README.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് പരിഗണിക്കേണ്ടതാണ്. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "d76a7eda28de5210c8b1ba50a6216c69",
|
||||
"translation_date": "2025-11-25T22:34:12+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/11-ObjectDetection/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ
|
||||
|
||||
ഇതുവരെ കൈകാര്യം ചെയ്ത ഇമേജ് ക്ലാസിഫിക്കേഷൻ മോഡലുകൾ ഒരു ചിത്രം എടുത്ത് ഒരു വർഗ്ഗീയ ഫലം ഉത്പാദിപ്പിച്ചിരുന്നു, ഉദാഹരണത്തിന് MNIST പ്രശ്നത്തിലെ 'നമ്പർ' ക്ലാസ്. എന്നാൽ പലപ്പോഴും ഒരു ചിത്രത്തിൽ വസ്തുക്കൾ കാണപ്പെടുന്നുവെന്ന് അറിയുന്നതിൽ മാത്രമല്ല, അവയുടെ കൃത്യമായ സ്ഥാനം കണ്ടെത്താൻ ആഗ്രഹിക്കുന്നു. ഇതാണ് **ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ** എന്നതിന്റെ പ്രധാന ലക്ഷ്യം.
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/21)
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [YOLO v2 വെബ്സൈറ്റ്](https://pjreddie.com/darknet/yolov2/) നിന്നാണ്
|
||||
|
||||
## ഒബ്ജക്റ്റ് ഡിറ്റക്ഷനിലേക്കുള്ള ഒരു ലളിതമായ സമീപനം
|
||||
|
||||
ഒരു ചിത്രത്തിൽ പൂച്ച കണ്ടെത്തണമെന്ന് കരുതുമ്പോൾ, ഒബ്ജക്റ്റ് ഡിറ്റക്ഷനിലേക്കുള്ള വളരെ ലളിതമായ ഒരു സമീപനം ഇതാണ്:
|
||||
|
||||
1. ചിത്രത്തെ പല ടൈലുകളായി വിഭജിക്കുക
|
||||
2. ഓരോ ടൈലിലും ഇമേജ് ക്ലാസിഫിക്കേഷൻ നടത്തുക
|
||||
3. ഉയർന്ന ആക്ടിവേഷൻ ലഭിക്കുന്ന ടൈലുകൾ ആ വസ്തു അടങ്ങിയതായി കരുതാം
|
||||
|
||||

|
||||
|
||||
> *ചിത്രം [Exercise Notebook](ObjectDetection-TF.ipynb) നിന്നാണ്*
|
||||
|
||||
എങ്കിലും, ഈ സമീപനം വളരെ കൃത്യമായ ബൗണ്ടിംഗ് ബോക്സ് സ്ഥാനം കണ്ടെത്താൻ കഴിയാത്തതിനാൽ അനുയോജ്യമല്ല. കൂടുതൽ കൃത്യമായ സ്ഥാനം കണ്ടെത്താൻ, ബൗണ്ടിംഗ് ബോക്സുകളുടെ കോഓർഡിനേറ്റുകൾ പ്രവചിക്കാൻ ഒരു തരത്തിലുള്ള **റെഗ്രഷൻ** നടത്തേണ്ടതുണ്ട് - അതിനായി പ്രത്യേക ഡാറ്റാസെറ്റുകൾ ആവശ്യമാണ്.
|
||||
|
||||
## ഒബ്ജക്റ്റ് ഡിറ്റക്ഷനിലേക്കുള്ള റെഗ്രഷൻ
|
||||
|
||||
[ഈ ബ്ലോഗ് പോസ്റ്റ്](https://towardsdatascience.com/object-detection-with-neural-networks-a4e2c46b4491) ആകൃതികൾ കണ്ടെത്തുന്നതിന് ഒരു സൗമ്യമായ പരിചയം നൽകുന്നു.
|
||||
|
||||
## ഒബ്ജക്റ്റ് ഡിറ്റക്ഷനുള്ള ഡാറ്റാസെറ്റുകൾ
|
||||
|
||||
ഈ ടാസ്കിനായി നിങ്ങൾക്ക് താഴെപ്പറയുന്ന ഡാറ്റാസെറ്റുകൾ കാണാം:
|
||||
|
||||
* [PASCAL VOC](http://host.robots.ox.ac.uk/pascal/VOC/) - 20 ക്ലാസുകൾ
|
||||
* [COCO](http://cocodataset.org/#home) - Common Objects in Context. 80 ക്ലാസുകൾ, ബൗണ്ടിംഗ് ബോക്സുകളും സെഗ്മെന്റേഷൻ മാസ്കുകളും
|
||||
|
||||

|
||||
|
||||
## ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ മെട്രിക്സ്
|
||||
|
||||
### Intersection over Union
|
||||
|
||||
ഇമേജ് ക്ലാസിഫിക്കേഷനിൽ ആൽഗോരിതത്തിന്റെ പ്രകടനം എളുപ്പത്തിൽ അളക്കാമെങ്കിലും, ഒബ്ജക്റ്റ് ഡിറ്റക്ഷനിൽ ക്ലാസിന്റെ ശരിതത്വവും ബൗണ്ടിംഗ് ബോക്സിന്റെ കൃത്യതയും അളക്കേണ്ടതുണ്ട്. ഇതിന് **Intersection over Union** (IoU) ഉപയോഗിക്കുന്നു, ഇത് രണ്ട് ബോക്സുകൾ (അഥവാ രണ്ട് ഏരിയകൾ) എത്രമാത്രം ഒതുക്കപ്പെടുന്നുവെന്ന് അളക്കുന്നു.
|
||||
|
||||

|
||||
|
||||
> *ചിത്രം [ഈ മികച്ച ബ്ലോഗ് പോസ്റ്റ്](https://pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/) നിന്നാണ്*
|
||||
|
||||
സങ്കൽപ്പം ലളിതമാണ് - രണ്ട് ആകൃതികളുടെ മധ്യേ ഉള്ള ഒത്തുചേരുന്ന പ്രദേശത്തിന്റെ വിസ്തീർണ്ണം അവരുടെ സംയോജിത വിസ്തീർണ്ണം കൊണ്ട് വിഭജിക്കുന്നു. രണ്ട് സമാനമായ പ്രദേശങ്ങൾക്ക് IoU 1 ആകും, പൂർണ്ണമായും വേർപിരിഞ്ഞ പ്രദേശങ്ങൾക്ക് 0 ആകും. മറ്റ് സാഹചര്യങ്ങളിൽ ഇത് 0 മുതൽ 1 വരെ വ്യത്യാസപ്പെടും. സാധാരണയായി IoU ഒരു നിശ്ചിത മൂല്യത്തിന് മുകളിൽ ഉള്ള ബൗണ്ടിംഗ് ബോക്സുകൾ മാത്രം പരിഗണിക്കുന്നു.
|
||||
|
||||
### ശരാശരി പ്രിസിഷൻ
|
||||
|
||||
ഒരു ക്ലാസ് $C$ എത്രമാത്രം ശരിയായി തിരിച്ചറിയപ്പെടുന്നുവെന്ന് അളക്കാൻ **Average Precision** ഉപയോഗിക്കുന്നു, ഇത് ഇങ്ങനെ കണക്കാക്കുന്നു:
|
||||
|
||||
1. Precision-Recall വളവ് ഒരു ഡിറ്റക്ഷൻ ത്രെഷോൾഡ് മൂല്യത്തിന്റെ (0 മുതൽ 1 വരെ) അടിസ്ഥാനത്തിൽ കൃത്യത കാണിക്കുന്നു.
|
||||
2. ത്രെഷോൾഡ് അനുസരിച്ച് ചിത്രത്തിൽ കണ്ടെത്തുന്ന വസ്തുക്കളുടെ എണ്ണം, പ്രിസിഷനും റീക്കോളും വ്യത്യാസപ്പെടും.
|
||||
3. വളവ് ഇങ്ങനെ കാണപ്പെടും:
|
||||
|
||||
<img src="https://github.com/shwars/NeuroWorkshop/raw/master/images/ObjDetectionPrecisionRecall.png"/>
|
||||
|
||||
> *ചിത്രം [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop) നിന്നാണ്*
|
||||
|
||||
ക്ലാസ് $C$ നുള്ള ശരാശരി പ്രിസിഷൻ ഈ വളവിന്റെ കീഴിലുള്ള വിസ്തീർണ്ണമാണ്. കൂടുതൽ കൃത്യമായി, Recall അക്ഷം സാധാരണയായി 10 ഭാഗങ്ങളായി വിഭജിച്ച്, ആ പോയിന്റുകളിൽ പ്രിസിഷൻ ശരാശരി എടുക്കുന്നു:
|
||||
|
||||
$$
|
||||
AP = {1\over11}\sum_{i=0}^{10}\mbox{Precision}(\mbox{Recall}={i\over10})
|
||||
$$
|
||||
|
||||
### APയും IoUയും
|
||||
|
||||
IoU ഒരു നിശ്ചിത മൂല്യത്തിന് മുകളിൽ ഉള്ള ഡിറ്റക്ഷനുകൾ മാത്രം പരിഗണിക്കും. ഉദാഹരണത്തിന്, PASCAL VOC ഡാറ്റാസെറ്റിൽ സാധാരണയായി $\mbox{IoU Threshold} = 0.5$ ആണ് ഉപയോഗിക്കുന്നത്, COCOയിൽ AP വ്യത്യസ്ത IoU ത്രെഷോൾഡുകൾക്കായി അളക്കുന്നു.
|
||||
|
||||
<img src="https://github.com/shwars/NeuroWorkshop/raw/master/images/ObjDetectionPrecisionRecallIoU.png"/>
|
||||
|
||||
> *ചിത്രം [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop) നിന്നാണ്*
|
||||
|
||||
### ശരാശരി ശരാശരി പ്രിസിഷൻ - mAP
|
||||
|
||||
ഒബ്ജക്റ്റ് ഡിറ്റക്ഷനിലെ പ്രധാന മെട്രിക് **Mean Average Precision** അല്ലെങ്കിൽ **mAP** ആണ്. ഇത് എല്ലാ വസ്തു ക്ലാസുകളിലെയും ശരാശരി പ്രിസിഷന്റെ ശരാശരിയാണ്, ചിലപ്പോൾ IoU ത്രെഷോൾഡുകൾക്കുമപ്പുറം ശരാശരി എടുക്കുന്നു. കൂടുതൽ വിശദമായി, **mAP** കണക്കാക്കുന്ന പ്രക്രിയ [ഈ ബ്ലോഗ് പോസ്റ്റ്](https://medium.com/@timothycarlen/understanding-the-map-evaluation-metric-for-object-detection-a07fe6962cf3)) ൽ വിവരിച്ചിരിക്കുന്നു, കൂടാതെ [ഇവിടെ കോഡ് സാമ്പിളുകളോടൊപ്പം](https://gist.github.com/tarlen5/008809c3decf19313de216b9208f3734) കാണാം.
|
||||
|
||||
## വ്യത്യസ്ത ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ സമീപനങ്ങൾ
|
||||
|
||||
ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ ആൽഗോരിതങ്ങൾ രണ്ട് പ്രധാന വിഭാഗങ്ങളിലായി വേർതിരിക്കാം:
|
||||
|
||||
* **Region Proposal Networks** (R-CNN, Fast R-CNN, Faster R-CNN). പ്രധാന ആശയം **Regions of Interests** (ROI) സൃഷ്ടിച്ച് അവയിൽ CNN ഓടിച്ച് പരമാവധി ആക്ടിവേഷൻ കണ്ടെത്തുക എന്നതാണ്. ലളിതമായ സമീപനത്തോട് സാമ്യമുണ്ട്, പക്ഷേ ROIകൾ കൂടുതൽ ബുദ്ധിമുട്ടുള്ള രീതിയിൽ സൃഷ്ടിക്കുന്നു. ഈ രീതികളുടെ പ്രധാന ദോഷം സ്ലോ ആയിരിക്കുക ആണ്, കാരണം ചിത്രത്തിൽ CNN ക്ലാസിഫയർ പല തവണ ഓടിക്കേണ്ടിവരും.
|
||||
* **One-pass** (YOLO, SSD, RetinaNet) രീതികൾ. ഈ ആർക്കിടെക്ചറുകളിൽ ക്ലാസുകളും ROIകളും ഒരേ പാസ്സിൽ പ്രവചിക്കാൻ നെറ്റ്വർക്ക് രൂപകൽപ്പന ചെയ്യുന്നു.
|
||||
|
||||
### R-CNN: Region-Based CNN
|
||||
|
||||
[R-CNN](http://islab.ulsan.ac.kr/files/announcement/513/rcnn_pami.pdf) [Selective Search](http://www.huppelen.nl/publications/selectiveSearchDraft.pdf) ഉപയോഗിച്ച് ROI പ്രദേശങ്ങളുടെ ഹയർആർക്കിക്കൽ ഘടന സൃഷ്ടിക്കുന്നു, പിന്നീട് CNN ഫീച്ചർ എക്സ്ട്രാക്ടറുകളും SVM ക്ലാസിഫയറുകളും ഉപയോഗിച്ച് വസ്തു ക്ലാസ് നിർണയിക്കുന്നു, ലീനിയർ റെഗ്രഷൻ ഉപയോഗിച്ച് *ബൗണ്ടിംഗ് ബോക്സ്* കോഓർഡിനേറ്റുകൾ കണ്ടെത്തുന്നു. [അധികൃത പേപ്പർ](https://arxiv.org/pdf/1506.01497v1.pdf)
|
||||
|
||||

|
||||
|
||||
> *ചിത്രം van de Sande et al. ICCV’11*
|
||||
|
||||

|
||||
|
||||
> *ചിത്രങ്ങൾ [ഈ ബ്ലോഗ്](https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e) നിന്നാണ്*
|
||||
|
||||
### F-RCNN - ഫാസ്റ്റ് R-CNN
|
||||
|
||||
R-CNN പോലെയാണ്, പക്ഷേ പ്രദേശങ്ങൾ കോൺവല്യൂഷൻ ലെയറുകൾ പ്രയോഗിച്ചതിന് ശേഷം നിർവചിക്കുന്നു.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [അധികൃത പേപ്പർ](https://www.cv-foundation.org/openaccess/content_iccv_2015/papers/Girshick_Fast_R-CNN_ICCV_2015_paper.pdf), [arXiv](https://arxiv.org/pdf/1504.08083.pdf), 2015
|
||||
|
||||
### Faster R-CNN
|
||||
|
||||
ഈ സമീപനത്തിന്റെ പ്രധാന ആശയം ROIകൾ പ്രവചിക്കാൻ ഒരു ന്യൂറൽ നെറ്റ്വർക്ക് ഉപയോഗിക്കുക എന്നതാണ് - ഇതാണ് *Region Proposal Network*. [പേപ്പർ](https://arxiv.org/pdf/1506.01497.pdf), 2016
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [അധികൃത പേപ്പർ](https://arxiv.org/pdf/1506.01497.pdf)
|
||||
|
||||
### R-FCN: Region-Based Fully Convolutional Network
|
||||
|
||||
Faster R-CNN-നേക്കാൾ വേഗത്തിൽ പ്രവർത്തിക്കുന്ന ആൽഗോരിതമാണ് ഇത്. പ്രധാന ആശയം:
|
||||
|
||||
1. ResNet-101 ഉപയോഗിച്ച് ഫീച്ചറുകൾ എടുക്കുന്നു
|
||||
2. ഫീച്ചറുകൾ **Position-Sensitive Score Map** ഉപയോഗിച്ച് പ്രോസസ്സ് ചെയ്യുന്നു. $C$ ക്ലാസുകളിലുള്ള ഓരോ വസ്തുവും $k\times k$ പ്രദേശങ്ങളായി വിഭജിച്ച്, വസ്തുവിന്റെ ഭാഗങ്ങൾ പ്രവചിക്കാൻ പരിശീലനം നൽകുന്നു.
|
||||
3. $k\times k$ പ്രദേശങ്ങളിലെ ഓരോ ഭാഗത്തിനും എല്ലാ നെറ്റ്വർക്കുകളും വസ്തു ക്ലാസുകൾക്ക് വോട്ട് ചെയ്യുന്നു, പരമാവധി വോട്ട് ലഭിച്ച ക്ലാസ് തിരഞ്ഞെടുക്കുന്നു.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [അധികൃത പേപ്പർ](https://arxiv.org/abs/1605.06409)
|
||||
|
||||
### YOLO - You Only Look Once
|
||||
|
||||
YOLO ഒരു റിയൽടൈം ഒന്ന്-പാസ്സ് ആൽഗോരിതമാണ്. പ്രധാന ആശയം:
|
||||
|
||||
* ചിത്രം $S\times S$ പ്രദേശങ്ങളായി വിഭജിക്കുന്നു
|
||||
* ഓരോ പ്രദേശത്തിനും **CNN** $n$ സാധ്യതയുള്ള വസ്തുക്കൾ, *ബൗണ്ടിംഗ് ബോക്സ്* കോഓർഡിനേറ്റുകൾ, *confidence*=*probability* * IoU പ്രവചിക്കുന്നു.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [അധികൃത പേപ്പർ](https://arxiv.org/abs/1506.02640)
|
||||
|
||||
### മറ്റ് ആൽഗോരിതങ്ങൾ
|
||||
|
||||
* RetinaNet: [അധികൃത പേപ്പർ](https://arxiv.org/abs/1708.02002)
|
||||
- [PyTorch ഇംപ്ലിമെന്റേഷൻ Torchvision-ൽ](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html)
|
||||
- [Keras ഇംപ്ലിമെന്റേഷൻ](https://github.com/fizyr/keras-retinanet)
|
||||
- [RetinaNet ഉപയോഗിച്ച് ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ](https://keras.io/examples/vision/retinanet/) Keras സാമ്പിളുകളിൽ
|
||||
* SSD (Single Shot Detector): [അധികൃത പേപ്പർ](https://arxiv.org/abs/1512.02325)
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ
|
||||
|
||||
താഴെപ്പറയുന്ന നോട്ട്ബുക്കിൽ നിങ്ങളുടെ പഠനം തുടരുക:
|
||||
|
||||
[ObjectDetection.ipynb](ObjectDetection.ipynb)
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ഈ പാഠത്തിൽ ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ സാധ്യമാക്കാനുള്ള വിവിധ മാർഗങ്ങൾ നിങ്ങൾക്ക് ഒരു സംക്ഷിപ്ത അവലോകനം ലഭിച്ചു!
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
YOLO-യെക്കുറിച്ചുള്ള ഈ ലേഖനങ്ങളും നോട്ട്ബുക്കുകളും വായിച്ച് സ്വയം പരീക്ഷിച്ച് നോക്കൂ
|
||||
|
||||
* [YOLO വിശദീകരിക്കുന്ന നല്ല ബ്ലോഗ് പോസ്റ്റ്](https://www.analyticsvidhya.com/blog/2018/12/practical-guide-object-detection-yolo-framewor-python/)
|
||||
* [അധികൃത സൈറ്റ്](https://pjreddie.com/darknet/yolo/)
|
||||
* YOLO: [Keras ഇംപ്ലിമെന്റേഷൻ](https://github.com/experiencor/keras-yolo2), [പടി-പടി നോട്ട്ബുക്ക്](https://github.com/experiencor/basic-yolo-keras/blob/master/Yolo%20Step-by-Step.ipynb)
|
||||
* YOLO v2: [Keras ഇംപ്ലിമെന്റേഷൻ](https://github.com/experiencor/keras-yolo2), [പടി-പടി നോട്ട്ബുക്ക്](https://github.com/experiencor/keras-yolo2/blob/master/Yolo%20Step-by-Step.ipynb)
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/22)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
* [ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ](https://tjmachinelearning.com/lectures/1718/obj/) - നിഖിൽ സർദാന
|
||||
* [ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ ആൽഗോരിതങ്ങളുടെ നല്ല താരതമ്യം](https://lilianweng.github.io/lil-log/2018/12/27/object-detection-part-4.html)
|
||||
* [ഒബ്ജക്റ്റ് ഡിറ്റക്ഷനുള്ള ഡീപ് ലേണിംഗ് ആൽഗോരിതങ്ങളുടെ അവലോകനം](https://medium.com/comet-app/review-of-deep-learning-algorithms-for-object-detection-c1f3d437b852)
|
||||
* [അടിസ്ഥാന ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ ആൽഗോരിതങ്ങളിലേക്കുള്ള പടി-പടി പരിചയം](https://www.analyticsvidhya.com/blog/2018/10/a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1/)
|
||||
* [Python-ൽ Faster R-CNN ഇംപ്ലിമെന്റേഷൻ ഒബ്ജക്റ്റ് ഡിറ്റക്ഷനായി](https://www.analyticsvidhya.com/blog/2018/11/implementation-faster-r-cnn-python-object-detection/)
|
||||
|
||||
## [അസൈൻമെന്റ്: ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ](lab/README.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് പരിഗണിക്കേണ്ടതാണ്. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,82 +1,82 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "6568aaae7e0e4afed4b5d74b5b223700",
|
||||
"translation_date": "2025-11-25T22:38:27+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/12-Segmentation/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# സെഗ്മെന്റേഷൻ
|
||||
|
||||
നാം മുമ്പ് ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ പഠിച്ചിരുന്നു, ഇത് ചിത്രത്തിൽ ഉള്ള വസ്തുക്കളുടെ *ബൗണ്ടിംഗ് ബോക്സുകൾ* പ്രവചിച്ച് അവ കണ്ടെത്താൻ സഹായിക്കുന്നു. എന്നാൽ ചില ജോലികൾക്ക് ബൗണ്ടിംഗ് ബോക്സുകൾ മാത്രമല്ല, കൂടുതൽ കൃത്യമായ വസ്തു സ്ഥിതിഗതികൾ ആവശ്യമുണ്ട്. ഈ ജോലിയാണ് **സെഗ്മെന്റേഷൻ** എന്ന് വിളിക്കുന്നത്.
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/23)
|
||||
|
||||
സെഗ്മെന്റേഷൻ **പിക്സൽ ക്ലാസിഫിക്കേഷൻ** എന്ന രീതിയിൽ കാണാം, ചിത്രത്തിലെ **ഓരോ** പിക്സലിനും അതിന്റെ ക്ലാസ് പ്രവചിക്കണം (*ബാക്ക്ഗ്രൗണ്ട്* ക്ലാസ്സുകളിൽ ഒന്നാണ്). പ്രധാനമായും രണ്ട് സെഗ്മെന്റേഷൻ ആൽഗോരിതങ്ങൾ ഉണ്ട്:
|
||||
|
||||
* **സെമാന്റിക് സെഗ്മെന്റേഷൻ** പിക്സലിന്റെ ക്ലാസ് മാത്രം പറയുന്നു, ഒരേ ക്ലാസ്സിലുള്ള വ്യത്യസ്ത വസ്തുക്കളെ വേർതിരിക്കില്ല
|
||||
* **ഇൻസ്റ്റൻസ് സെഗ്മെന്റേഷൻ** ക്ലാസ്സുകളെ വ്യത്യസ്ത ഇൻസ്റ്റൻസുകളായി വിഭജിക്കുന്നു.
|
||||
|
||||
ഇൻസ്റ്റൻസ് സെഗ്മെന്റേഷനിൽ, ഈ ആടുകൾ വ്യത്യസ്ത വസ്തുക്കളാണ്, എന്നാൽ സെമാന്റിക് സെഗ്മെന്റേഷനിൽ എല്ലാ ആടുകളും ഒരേ ക്ലാസ്സായി പ്രതിനിധീകരിക്കുന്നു.
|
||||
|
||||
<img src="../../../../../translated_images/instance_vs_semantic.eee9812bebf8cd450cdef4caaed2d4dd9c6c3b671e0c65d8aef312758ebb7b89.ml.jpeg" width="50%">
|
||||
|
||||
> ചിത്രം [ഈ ബ്ലോഗ് പോസ്റ്റ്](https://nirmalamurali.medium.com/image-classification-vs-semantic-segmentation-vs-instance-segmentation-625c33a08d50) നിന്നാണ്
|
||||
|
||||
സെഗ്മെന്റേഷനിനായി വിവിധ ന്യൂറൽ ആർക്കിടെക്ചറുകൾ ഉണ്ട്, എന്നാൽ അവയ്ക്ക് ഒരേ ഘടനയുണ്ട്. ഒരു വിധത്തിൽ, ഇത് മുമ്പ് പഠിച്ച ഓട്ടോഎൻകോഡറിനെപ്പോലെ തന്നെയാണ്, പക്ഷേ ഒറിജിനൽ ചിത്രം പിളർത്തുന്നതിന് പകരം, ഞങ്ങളുടെ ലക്ഷ്യം ഒരു **മാസ്ക്** പിളർത്തുകയാണ്. അതിനാൽ, ഒരു സെഗ്മെന്റേഷൻ നെറ്റ്വർക്ക് താഴെപ്പറയുന്ന ഭാഗങ്ങൾ ഉൾക്കൊള്ളുന്നു:
|
||||
|
||||
* **എൻകോഡർ** ഇൻപുട്ട് ചിത്രത്തിൽ നിന്ന് ഫീച്ചറുകൾ എടുക്കുന്നു
|
||||
* **ഡികോഡർ** ആ ഫീച്ചറുകൾ **മാസ്ക് ചിത്രം** ആക്കുന്നു, അതിന്റെ വലിപ്പവും ചാനലുകളുടെ എണ്ണം ക്ലാസുകളുടെ എണ്ണം അനുസരിച്ചുള്ളതാണ്.
|
||||
|
||||
<img src="../../../../../translated_images/segm.92442f2cb42ff4fa650fee858a3a02f55cf46825d9602115130e9e95a52a8526.ml.png" width="80%">
|
||||
|
||||
> ചിത്രം [ഈ പ്രസിദ്ധീകരണം](https://arxiv.org/pdf/2001.05566.pdf) നിന്നാണ്
|
||||
|
||||
സെഗ്മെന്റേഷനിൽ ഉപയോഗിക്കുന്ന ലോസ് ഫംഗ്ഷൻ പ്രത്യേകമായി പറയേണ്ടതാണ്. ക്ലാസിക്കൽ ഓട്ടോഎൻകോഡറുകൾ ഉപയോഗിക്കുമ്പോൾ, രണ്ട് ചിത്രങ്ങൾ തമ്മിലുള്ള സമാനത അളക്കാൻ മീൻ സ്ക്വയർ എറർ (MSE) ഉപയോഗിക്കാം. സെഗ്മെന്റേഷനിൽ, ലക്ഷ്യ മാസ്ക് ചിത്രത്തിലെ ഓരോ പിക്സലും ക്ലാസ് നമ്പർ (മൂന്നാം ഡൈമെൻഷനിൽ വൺ-ഹോട്ട് എൻകോഡിംഗ്) പ്രതിനിധീകരിക്കുന്നതിനാൽ, ക്ലാസിഫിക്കേഷനിനുള്ള പ്രത്യേക ലോസ് ഫംഗ്ഷനുകൾ ഉപയോഗിക്കണം - ക്രോസ്-എൻട്രോപി ലോസ്, എല്ലാ പിക്സലുകളിലെയും ശരാശരി. മാസ്ക് ബൈനറി ആണെങ്കിൽ - **ബൈനറി ക്രോസ്-എൻട്രോപി ലോസ്** (BCE) ഉപയോഗിക്കുന്നു.
|
||||
|
||||
> ✅ വൺ-ഹോട്ട് എൻകോഡിംഗ് എന്നത് ക്ലാസ് ലേബൽ ക്ലാസുകളുടെ എണ്ണം തുല്യമായ വക്ടറിലേക്ക് എൻകോഡ് ചെയ്യാനുള്ള ഒരു മാർഗമാണ്. ഈ സാങ്കേതികവിദ്യയെക്കുറിച്ച് കൂടുതൽ അറിയാൻ [ഈ ലേഖനം](https://datagy.io/sklearn-one-hot-encode/) കാണുക.
|
||||
|
||||
## മെഡിക്കൽ ഇമേജിംഗിനുള്ള സെഗ്മെന്റേഷൻ
|
||||
|
||||
ഈ പാഠത്തിൽ, നാം സെഗ്മെന്റേഷൻ പ്രയോഗത്തിൽ കാണും, മെഡിക്കൽ ചിത്രങ്ങളിൽ മനുഷ്യന്റെ നെവി (മോൾസ് എന്നും അറിയപ്പെടുന്നു) തിരിച്ചറിയാൻ നെറ്റ്വർക്ക് പരിശീലിപ്പിച്ച്. ചിത്ര സ്രോതസ്സായി <a href="https://www.fc.up.pt/addi/ph2%20database.html">PH<sup>2</sup> ഡാറ്റാബേസ്</a> ഉപയോഗിക്കും. ഈ ഡാറ്റാസെറ്റിൽ മൂന്ന് ക്ലാസ്സുകളുള്ള 200 ചിത്രങ്ങളുണ്ട്: ടിപ്പിക്കൽ നെവി, അറ്റിപ്പിക്കൽ നെവി, മെലാനോമ. എല്ലാ ചിത്രങ്ങൾക്കും അനുബന്ധമായ **മാസ്ക്** ഉണ്ട്, അത് നെവി രേഖപ്പെടുത്തുന്നു.
|
||||
|
||||
> ✅ ഈ സാങ്കേതികവിദ്യ ഈ തരത്തിലുള്ള മെഡിക്കൽ ഇമേജിംഗിന് പ്രത്യേകിച്ച് അനുയോജ്യമാണ്, എന്നാൽ മറ്റേതെങ്കിലും യാഥാർത്ഥ്യപ്രയോഗങ്ങൾ നിങ്ങൾക്ക് കാണാമോ?
|
||||
|
||||
<img alt="navi" src="../../../../../translated_images/navi.2f20b727910110ea593fa03a2491f2ba1b25c62c97b33c692bcf01917a1f333f.ml.png"/>
|
||||
|
||||
> ചിത്രം PH<sup>2</sup> ഡാറ്റാബേസിൽ നിന്നാണ്
|
||||
|
||||
നാം ഒരു മോഡൽ പരിശീലിപ്പിക്കും, ഏതെങ്കിലും നെവി അതിന്റെ പശ്ചാത്തലത്തിൽ നിന്ന് സെഗ്മെന്റ് ചെയ്യാൻ.
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: സെമാന്റിക് സെഗ്മെന്റേഷൻ
|
||||
|
||||
താഴെ കൊടുത്തിരിക്കുന്ന നോട്ട്ബുക്കുകൾ തുറന്ന് വ്യത്യസ്ത സെമാന്റിക് സെഗ്മെന്റേഷൻ ആർക്കിടെക്ചറുകൾ കുറിച്ച് കൂടുതൽ പഠിക്കാം, അവ ഉപയോഗിച്ച് പ്രാക്ടീസ് ചെയ്യാം, പ്രവർത്തനത്തിൽ കാണാം.
|
||||
|
||||
* [സെമാന്റിക് സെഗ്മെന്റേഷൻ പൈടോർച്ച്](SemanticSegmentationPytorch.ipynb)
|
||||
* [സെമാന്റിക് സെഗ്മെന്റേഷൻ ടെൻസർഫ്ലോ](SemanticSegmentationTF.ipynb)
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/24)
|
||||
|
||||
## സമാപനം
|
||||
|
||||
സെഗ്മെന്റേഷൻ ബൗണ്ടിംഗ് ബോക്സുകൾക്കപ്പുറം പോയി പിക്സൽ തലത്തിലുള്ള ക്ലാസിഫിക്കേഷൻ നൽകുന്ന വളരെ ശക്തമായ സാങ്കേതിക വിദ്യയാണ്. ഇത് മെഡിക്കൽ ഇമേജിംഗിൽ ഉൾപ്പെടെ പല പ്രയോഗങ്ങളിലും ഉപയോഗിക്കുന്നു.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
ബോഡി സെഗ്മെന്റേഷൻ മനുഷ്യരുടെ ചിത്രങ്ങളിൽ ചെയ്യാവുന്ന സാധാരണ ജോലികളിൽ ഒന്നാണ്. മറ്റൊരു പ്രധാന ജോലികൾ **സ്കെലറ്റൺ ഡിറ്റക്ഷൻ**യും **പോസ് ഡിറ്റക്ഷൻ**ഉം ആണ്. പോസ് ഡിറ്റക്ഷൻ എങ്ങനെ ഉപയോഗിക്കാമെന്ന് കാണാൻ [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose) ലൈബ്രറി പരീക്ഷിക്കൂ.
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
ഈ [വിക്കിപീഡിയ ലേഖനം](https://wikipedia.org/wiki/Image_segmentation) ഈ സാങ്കേതികവിദ്യയുടെ വിവിധ പ്രയോഗങ്ങളെക്കുറിച്ച് നല്ല അവലോകനം നൽകുന്നു. ഇൻസ്റ്റൻസ് സെഗ്മെന്റേഷൻ, പാനോപ്റ്റിക് സെഗ്മെന്റേഷൻ എന്നിവയുടെ ഉപവിഭാഗങ്ങളെക്കുറിച്ച് സ്വയം കൂടുതൽ പഠിക്കുക.
|
||||
|
||||
## [അസൈൻമെന്റ്](lab/README.md)
|
||||
|
||||
ഈ ലാബിൽ, [Segmentation Full Body MADS Dataset](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset) ഉപയോഗിച്ച് **മനുഷ്യ ശരീര സെഗ്മെന്റേഷൻ** പരീക്ഷിക്കൂ.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, യന്ത്രം ചെയ്ത വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ പ്രാമാണികമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ വ്യാഖ്യാനക്കേടുകൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "6568aaae7e0e4afed4b5d74b5b223700",
|
||||
"translation_date": "2025-11-25T22:38:27+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/12-Segmentation/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# സെഗ്മെന്റേഷൻ
|
||||
|
||||
നാം മുമ്പ് ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ പഠിച്ചിരുന്നു, ഇത് ചിത്രത്തിൽ ഉള്ള വസ്തുക്കളുടെ *ബൗണ്ടിംഗ് ബോക്സുകൾ* പ്രവചിച്ച് അവ കണ്ടെത്താൻ സഹായിക്കുന്നു. എന്നാൽ ചില ജോലികൾക്ക് ബൗണ്ടിംഗ് ബോക്സുകൾ മാത്രമല്ല, കൂടുതൽ കൃത്യമായ വസ്തു സ്ഥിതിഗതികൾ ആവശ്യമുണ്ട്. ഈ ജോലിയാണ് **സെഗ്മെന്റേഷൻ** എന്ന് വിളിക്കുന്നത്.
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/23)
|
||||
|
||||
സെഗ്മെന്റേഷൻ **പിക്സൽ ക്ലാസിഫിക്കേഷൻ** എന്ന രീതിയിൽ കാണാം, ചിത്രത്തിലെ **ഓരോ** പിക്സലിനും അതിന്റെ ക്ലാസ് പ്രവചിക്കണം (*ബാക്ക്ഗ്രൗണ്ട്* ക്ലാസ്സുകളിൽ ഒന്നാണ്). പ്രധാനമായും രണ്ട് സെഗ്മെന്റേഷൻ ആൽഗോരിതങ്ങൾ ഉണ്ട്:
|
||||
|
||||
* **സെമാന്റിക് സെഗ്മെന്റേഷൻ** പിക്സലിന്റെ ക്ലാസ് മാത്രം പറയുന്നു, ഒരേ ക്ലാസ്സിലുള്ള വ്യത്യസ്ത വസ്തുക്കളെ വേർതിരിക്കില്ല
|
||||
* **ഇൻസ്റ്റൻസ് സെഗ്മെന്റേഷൻ** ക്ലാസ്സുകളെ വ്യത്യസ്ത ഇൻസ്റ്റൻസുകളായി വിഭജിക്കുന്നു.
|
||||
|
||||
ഇൻസ്റ്റൻസ് സെഗ്മെന്റേഷനിൽ, ഈ ആടുകൾ വ്യത്യസ്ത വസ്തുക്കളാണ്, എന്നാൽ സെമാന്റിക് സെഗ്മെന്റേഷനിൽ എല്ലാ ആടുകളും ഒരേ ക്ലാസ്സായി പ്രതിനിധീകരിക്കുന്നു.
|
||||
|
||||
<img src="../../../../../translated_images/instance_vs_semantic.eee9812bebf8cd45.ml.jpeg" width="50%">
|
||||
|
||||
> ചിത്രം [ഈ ബ്ലോഗ് പോസ്റ്റ്](https://nirmalamurali.medium.com/image-classification-vs-semantic-segmentation-vs-instance-segmentation-625c33a08d50) നിന്നാണ്
|
||||
|
||||
സെഗ്മെന്റേഷനിനായി വിവിധ ന്യൂറൽ ആർക്കിടെക്ചറുകൾ ഉണ്ട്, എന്നാൽ അവയ്ക്ക് ഒരേ ഘടനയുണ്ട്. ഒരു വിധത്തിൽ, ഇത് മുമ്പ് പഠിച്ച ഓട്ടോഎൻകോഡറിനെപ്പോലെ തന്നെയാണ്, പക്ഷേ ഒറിജിനൽ ചിത്രം പിളർത്തുന്നതിന് പകരം, ഞങ്ങളുടെ ലക്ഷ്യം ഒരു **മാസ്ക്** പിളർത്തുകയാണ്. അതിനാൽ, ഒരു സെഗ്മെന്റേഷൻ നെറ്റ്വർക്ക് താഴെപ്പറയുന്ന ഭാഗങ്ങൾ ഉൾക്കൊള്ളുന്നു:
|
||||
|
||||
* **എൻകോഡർ** ഇൻപുട്ട് ചിത്രത്തിൽ നിന്ന് ഫീച്ചറുകൾ എടുക്കുന്നു
|
||||
* **ഡികോഡർ** ആ ഫീച്ചറുകൾ **മാസ്ക് ചിത്രം** ആക്കുന്നു, അതിന്റെ വലിപ്പവും ചാനലുകളുടെ എണ്ണം ക്ലാസുകളുടെ എണ്ണം അനുസരിച്ചുള്ളതാണ്.
|
||||
|
||||
<img src="../../../../../translated_images/segm.92442f2cb42ff4fa.ml.png" width="80%">
|
||||
|
||||
> ചിത്രം [ഈ പ്രസിദ്ധീകരണം](https://arxiv.org/pdf/2001.05566.pdf) നിന്നാണ്
|
||||
|
||||
സെഗ്മെന്റേഷനിൽ ഉപയോഗിക്കുന്ന ലോസ് ഫംഗ്ഷൻ പ്രത്യേകമായി പറയേണ്ടതാണ്. ക്ലാസിക്കൽ ഓട്ടോഎൻകോഡറുകൾ ഉപയോഗിക്കുമ്പോൾ, രണ്ട് ചിത്രങ്ങൾ തമ്മിലുള്ള സമാനത അളക്കാൻ മീൻ സ്ക്വയർ എറർ (MSE) ഉപയോഗിക്കാം. സെഗ്മെന്റേഷനിൽ, ലക്ഷ്യ മാസ്ക് ചിത്രത്തിലെ ഓരോ പിക്സലും ക്ലാസ് നമ്പർ (മൂന്നാം ഡൈമെൻഷനിൽ വൺ-ഹോട്ട് എൻകോഡിംഗ്) പ്രതിനിധീകരിക്കുന്നതിനാൽ, ക്ലാസിഫിക്കേഷനിനുള്ള പ്രത്യേക ലോസ് ഫംഗ്ഷനുകൾ ഉപയോഗിക്കണം - ക്രോസ്-എൻട്രോപി ലോസ്, എല്ലാ പിക്സലുകളിലെയും ശരാശരി. മാസ്ക് ബൈനറി ആണെങ്കിൽ - **ബൈനറി ക്രോസ്-എൻട്രോപി ലോസ്** (BCE) ഉപയോഗിക്കുന്നു.
|
||||
|
||||
> ✅ വൺ-ഹോട്ട് എൻകോഡിംഗ് എന്നത് ക്ലാസ് ലേബൽ ക്ലാസുകളുടെ എണ്ണം തുല്യമായ വക്ടറിലേക്ക് എൻകോഡ് ചെയ്യാനുള്ള ഒരു മാർഗമാണ്. ഈ സാങ്കേതികവിദ്യയെക്കുറിച്ച് കൂടുതൽ അറിയാൻ [ഈ ലേഖനം](https://datagy.io/sklearn-one-hot-encode/) കാണുക.
|
||||
|
||||
## മെഡിക്കൽ ഇമേജിംഗിനുള്ള സെഗ്മെന്റേഷൻ
|
||||
|
||||
ഈ പാഠത്തിൽ, നാം സെഗ്മെന്റേഷൻ പ്രയോഗത്തിൽ കാണും, മെഡിക്കൽ ചിത്രങ്ങളിൽ മനുഷ്യന്റെ നെവി (മോൾസ് എന്നും അറിയപ്പെടുന്നു) തിരിച്ചറിയാൻ നെറ്റ്വർക്ക് പരിശീലിപ്പിച്ച്. ചിത്ര സ്രോതസ്സായി <a href="https://www.fc.up.pt/addi/ph2%20database.html">PH<sup>2</sup> ഡാറ്റാബേസ്</a> ഉപയോഗിക്കും. ഈ ഡാറ്റാസെറ്റിൽ മൂന്ന് ക്ലാസ്സുകളുള്ള 200 ചിത്രങ്ങളുണ്ട്: ടിപ്പിക്കൽ നെവി, അറ്റിപ്പിക്കൽ നെവി, മെലാനോമ. എല്ലാ ചിത്രങ്ങൾക്കും അനുബന്ധമായ **മാസ്ക്** ഉണ്ട്, അത് നെവി രേഖപ്പെടുത്തുന്നു.
|
||||
|
||||
> ✅ ഈ സാങ്കേതികവിദ്യ ഈ തരത്തിലുള്ള മെഡിക്കൽ ഇമേജിംഗിന് പ്രത്യേകിച്ച് അനുയോജ്യമാണ്, എന്നാൽ മറ്റേതെങ്കിലും യാഥാർത്ഥ്യപ്രയോഗങ്ങൾ നിങ്ങൾക്ക് കാണാമോ?
|
||||
|
||||
<img alt="navi" src="../../../../../translated_images/navi.2f20b727910110ea.ml.png"/>
|
||||
|
||||
> ചിത്രം PH<sup>2</sup> ഡാറ്റാബേസിൽ നിന്നാണ്
|
||||
|
||||
നാം ഒരു മോഡൽ പരിശീലിപ്പിക്കും, ഏതെങ്കിലും നെവി അതിന്റെ പശ്ചാത്തലത്തിൽ നിന്ന് സെഗ്മെന്റ് ചെയ്യാൻ.
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: സെമാന്റിക് സെഗ്മെന്റേഷൻ
|
||||
|
||||
താഴെ കൊടുത്തിരിക്കുന്ന നോട്ട്ബുക്കുകൾ തുറന്ന് വ്യത്യസ്ത സെമാന്റിക് സെഗ്മെന്റേഷൻ ആർക്കിടെക്ചറുകൾ കുറിച്ച് കൂടുതൽ പഠിക്കാം, അവ ഉപയോഗിച്ച് പ്രാക്ടീസ് ചെയ്യാം, പ്രവർത്തനത്തിൽ കാണാം.
|
||||
|
||||
* [സെമാന്റിക് സെഗ്മെന്റേഷൻ പൈടോർച്ച്](SemanticSegmentationPytorch.ipynb)
|
||||
* [സെമാന്റിക് സെഗ്മെന്റേഷൻ ടെൻസർഫ്ലോ](SemanticSegmentationTF.ipynb)
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/24)
|
||||
|
||||
## സമാപനം
|
||||
|
||||
സെഗ്മെന്റേഷൻ ബൗണ്ടിംഗ് ബോക്സുകൾക്കപ്പുറം പോയി പിക്സൽ തലത്തിലുള്ള ക്ലാസിഫിക്കേഷൻ നൽകുന്ന വളരെ ശക്തമായ സാങ്കേതിക വിദ്യയാണ്. ഇത് മെഡിക്കൽ ഇമേജിംഗിൽ ഉൾപ്പെടെ പല പ്രയോഗങ്ങളിലും ഉപയോഗിക്കുന്നു.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
ബോഡി സെഗ്മെന്റേഷൻ മനുഷ്യരുടെ ചിത്രങ്ങളിൽ ചെയ്യാവുന്ന സാധാരണ ജോലികളിൽ ഒന്നാണ്. മറ്റൊരു പ്രധാന ജോലികൾ **സ്കെലറ്റൺ ഡിറ്റക്ഷൻ**യും **പോസ് ഡിറ്റക്ഷൻ**ഉം ആണ്. പോസ് ഡിറ്റക്ഷൻ എങ്ങനെ ഉപയോഗിക്കാമെന്ന് കാണാൻ [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose) ലൈബ്രറി പരീക്ഷിക്കൂ.
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
ഈ [വിക്കിപീഡിയ ലേഖനം](https://wikipedia.org/wiki/Image_segmentation) ഈ സാങ്കേതികവിദ്യയുടെ വിവിധ പ്രയോഗങ്ങളെക്കുറിച്ച് നല്ല അവലോകനം നൽകുന്നു. ഇൻസ്റ്റൻസ് സെഗ്മെന്റേഷൻ, പാനോപ്റ്റിക് സെഗ്മെന്റേഷൻ എന്നിവയുടെ ഉപവിഭാഗങ്ങളെക്കുറിച്ച് സ്വയം കൂടുതൽ പഠിക്കുക.
|
||||
|
||||
## [അസൈൻമെന്റ്](lab/README.md)
|
||||
|
||||
ഈ ലാബിൽ, [Segmentation Full Body MADS Dataset](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset) ഉപയോഗിച്ച് **മനുഷ്യ ശരീര സെഗ്മെന്റേഷൻ** പരീക്ഷിക്കൂ.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, യന്ത്രം ചെയ്ത വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ പ്രാമാണികമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ വ്യാഖ്യാനക്കേടുകൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,29 +1,29 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "58a52f000089c1d8906a4daa4ab1169b",
|
||||
"translation_date": "2025-11-25T21:10:58+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# കമ്പ്യൂട്ടർ വിഷൻ
|
||||
|
||||

|
||||
|
||||
ഈ വിഭാഗത്തിൽ നാം പഠിക്കാനിരിക്കുന്നവ:
|
||||
|
||||
* [കമ്പ്യൂട്ടർ വിഷനും OpenCV യും പരിചയം](06-IntroCV/README.md)
|
||||
* [കോൺവല്യൂഷണൽ ന്യൂറൽ നെറ്റ്വർക്കുകൾ](07-ConvNets/README.md)
|
||||
* [പ്രീ-ട്രെയിൻ ചെയ്ത നെറ്റ്വർക്കുകളും ട്രാൻസ്ഫർ ലേണിങ്ങും](08-TransferLearning/README.md)
|
||||
* [ഓട്ടോഎൻകോഡറുകൾ](09-Autoencoders/README.md)
|
||||
* [ജനറേറ്റീവ് അഡ്വേഴ്സറിയൽ നെറ്റ്വർക്കുകൾ](10-GANs/README.md)
|
||||
* [ഓബ്ജക്റ്റ് ഡിറ്റക്ഷൻ](11-ObjectDetection/README.md)
|
||||
* [സെമാന്റിക് സെഗ്മെന്റേഷൻ](12-Segmentation/README.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "58a52f000089c1d8906a4daa4ab1169b",
|
||||
"translation_date": "2025-11-25T21:10:58+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# കമ്പ്യൂട്ടർ വിഷൻ
|
||||
|
||||

|
||||
|
||||
ഈ വിഭാഗത്തിൽ നാം പഠിക്കാനിരിക്കുന്നവ:
|
||||
|
||||
* [കമ്പ്യൂട്ടർ വിഷനും OpenCV യും പരിചയം](06-IntroCV/README.md)
|
||||
* [കോൺവല്യൂഷണൽ ന്യൂറൽ നെറ്റ്വർക്കുകൾ](07-ConvNets/README.md)
|
||||
* [പ്രീ-ട്രെയിൻ ചെയ്ത നെറ്റ്വർക്കുകളും ട്രാൻസ്ഫർ ലേണിങ്ങും](08-TransferLearning/README.md)
|
||||
* [ഓട്ടോഎൻകോഡറുകൾ](09-Autoencoders/README.md)
|
||||
* [ജനറേറ്റീവ് അഡ്വേഴ്സറിയൽ നെറ്റ്വർക്കുകൾ](10-GANs/README.md)
|
||||
* [ഓബ്ജക്റ്റ് ഡിറ്റക്ഷൻ](11-ObjectDetection/README.md)
|
||||
* [സെമാന്റിക് സെഗ്മെന്റേഷൻ](12-Segmentation/README.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,89 +1,89 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "dbd3f73e4139f030ecb2e20387d70fee",
|
||||
"translation_date": "2025-11-25T22:51:25+00:00",
|
||||
"source_file": "lessons/5-NLP/13-TextRep/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ടെക്സ്റ്റ് ടെൻസറുകളായി പ്രതിനിധാനം ചെയ്യൽ
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/25)
|
||||
|
||||
## ടെക്സ്റ്റ് ക്ലാസിഫിക്കേഷൻ
|
||||
|
||||
ഈ വിഭാഗത്തിന്റെ ആദ്യഭാഗം മുഴുവൻ, നാം **ടെക്സ്റ്റ് ക്ലാസിഫിക്കേഷൻ** ടാസ്കിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കും. നാം ഉപയോഗിക്കുന്നത് [AG News](https://www.kaggle.com/amananandrai/ag-news-classification-dataset) ഡാറ്റാസെറ്റ് ആണ്, ഇതിൽ താഴെപറയുന്ന പോലുള്ള വാർത്താ ലേഖനങ്ങൾ ഉൾപ്പെടുന്നു:
|
||||
|
||||
* വിഭാഗം: സയൻസ്/ടെക്
|
||||
* തലക്കെട്ട്: Ky. കമ്പനി പേപ്റ്റൈഡുകൾ പഠിക്കാൻ ഗ്രാന്റ് നേടി (AP)
|
||||
* ഉള്ളടക്കം: AP - ലൂയിസ്വിൽ സർവകലാശാലയിലെ രാസ ശാസ്ത്ര ഗവേഷകനായ ഒരാൾ സ്ഥാപിച്ച കമ്പനി വികസിപ്പിക്കാൻ ഗ്രാന്റ് നേടി...
|
||||
|
||||
നമ്മുടെ ലക്ഷ്യം ടെക്സ്റ്റ് അടിസ്ഥാനമാക്കി വാർത്താ വസ്തുവിനെ ഒരു വിഭാഗത്തിലേക്ക് ക്ലാസിഫൈ ചെയ്യുക എന്നതാണ്.
|
||||
|
||||
## ടെക്സ്റ്റ് പ്രതിനിധാനം ചെയ്യൽ
|
||||
|
||||
നാചുറൽ ലാംഗ്വേജ് പ്രോസസ്സിംഗ് (NLP) ടാസ്കുകൾ ന്യൂറൽ നെറ്റ്വർക്കുകളിലൂടെ പരിഹരിക്കാൻ, ടെക്സ്റ്റ് ടെൻസറുകളായി പ്രതിനിധാനം ചെയ്യാനുള്ള മാർഗ്ഗം വേണം. കമ്പ്യൂട്ടറുകൾ ഇതിനകം തന്നെ ASCII അല്ലെങ്കിൽ UTF-8 പോലുള്ള എൻകോഡിങ്ങുകൾ ഉപയോഗിച്ച് സ്ക്രീനിലെ ഫോണ്ടുകളുമായി മാപ്പ് ചെയ്യുന്ന സംഖ്യകളായി ടെക്സ്റ്റ് അക്ഷരങ്ങളെ പ്രതിനിധാനം ചെയ്യുന്നു.
|
||||
|
||||
<img alt="ഒരു അക്ഷരത്തെ ASCII, ബൈനറി പ്രതിനിധാനങ്ങളായി മാപ്പ് ചെയ്യുന്ന ഡയഗ്രാം കാണിക്കുന്ന ചിത്രം" src="../../../../../translated_images/ascii-character-map.18ed6aa7f3b0a7ffeb29db95be05a245b6a20712bb2c3a9963c1ec7e9df70358.ml.png" width="50%"/>
|
||||
|
||||
> [ചിത്രം സ്രോതസ്സ്](https://www.seobility.net/en/wiki/ASCII)
|
||||
|
||||
മനുഷ്യരായി, ഓരോ അക്ഷരവും എന്ത് **പ്രതിനിധാനം** ചെയ്യുന്നു എന്നും, എല്ലാ അക്ഷരങ്ങളും ചേർന്ന് വാക്യത്തിലെ വാക്കുകൾ എങ്ങനെ രൂപപ്പെടുന്നു എന്നും നാം മനസ്സിലാക്കുന്നു. എന്നാൽ, കമ്പ്യൂട്ടറുകൾക്ക് സ്വയം ഇത്തരത്തിലുള്ള ബോധം ഇല്ല, ന്യൂറൽ നെറ്റ്വർക്ക് പരിശീലന സമയത്ത് അർത്ഥം പഠിക്കേണ്ടതുണ്ട്.
|
||||
|
||||
അതിനാൽ, ടെക്സ്റ്റ് പ്രതിനിധാനം ചെയ്യുമ്പോൾ നാം വിവിധ സമീപനങ്ങൾ ഉപയോഗിക്കാം:
|
||||
|
||||
* **അക്ഷര-നില പ്രതിനിധാനം**: ഓരോ അക്ഷരത്തെയും ഒരു സംഖ്യയായി പരിഗണിച്ച് ടെക്സ്റ്റ് പ്രതിനിധാനം ചെയ്യുന്നത്. ടെക്സ്റ്റ് കോർപ്പസിൽ *C* വ്യത്യസ്ത അക്ഷരങ്ങൾ ഉണ്ടെങ്കിൽ, *Hello* എന്ന വാക്ക് 5x*C* ടെൻസറായിരിക്കും. ഓരോ അക്ഷരവും ഒന്ന്-ഹോട്ട് എൻകോഡിങ്ങിൽ ടെൻസറിന്റെ ഒരു കോളമായി പ്രതിനിധാനം ചെയ്യും.
|
||||
* **വാക്ക്-നില പ്രതിനിധാനം**: ടെക്സ്റ്റിലെ എല്ലാ വാക്കുകളുടെയും **വോകാബുലറി** സൃഷ്ടിച്ച്, വാക്കുകൾ ഒന്ന്-ഹോട്ട് എൻകോഡിങ്ങിൽ പ്രതിനിധാനം ചെയ്യുന്നു. ഈ സമീപനം കുറച്ച് മെച്ചമാണ്, കാരണം ഓരോ അക്ഷരത്തിനും സ്വതന്ത്രമായി വലിയ അർത്ഥമില്ല, അതിനാൽ ഉയർന്ന തലത്തിലുള്ള സാംവേദനാത്മക ആശയങ്ങളായ വാക്കുകൾ ഉപയോഗിച്ച് ന്യൂറൽ നെറ്റ്വർക്കിന് ടാസ്ക് ലളിതമാക്കാം. എന്നാൽ, വാക്കുകളുടെ വലിയ നിഘണ്ടു വലുപ്പം കാരണം ഉയർന്ന-ഡൈമെൻഷണൽ സ്പാർസ് ടെൻസറുകളുമായി കൈകാര്യം ചെയ്യേണ്ടിവരും.
|
||||
|
||||
പ്രതിനിധാനം ഏതായാലും, ആദ്യം ടെക്സ്റ്റ് **ടോക്കണുകളുടെ** ഒരു ശ്രേണിയാക്കി മാറ്റണം, ഓരോ ടോക്കനും അക്ഷരം, വാക്ക്, അല്ലെങ്കിൽ ചിലപ്പോൾ വാക്കിന്റെ ഭാഗമായിരിക്കും. തുടർന്ന്, ടോക്കൺ ഒരു സംഖ്യയാക്കി മാറ്റുന്നു, സാധാരണയായി **വോകാബുലറി** ഉപയോഗിച്ച്, ഈ സംഖ്യ ഒന്ന്-ഹോട്ട് എൻകോഡിങ്ങിൽ ന്യൂറൽ നെറ്റ്വർക്കിലേക്ക് നൽകാം.
|
||||
|
||||
## എൻ-ഗ്രാമുകൾ
|
||||
|
||||
സ്വാഭാവിക ഭാഷയിൽ, വാക്കുകളുടെ കൃത്യമായ അർത്ഥം സാന്ദർഭ്യത്തിൽ മാത്രമേ നിർണയിക്കാനാകൂ. ഉദാഹരണത്തിന്, *ന്യൂറൽ നെറ്റ്വർക്ക്* ഉം *ഫിഷിംഗ് നെറ്റ്വർക്ക്* ഉം പൂർണ്ണമായും വ്യത്യസ്ത അർത്ഥങ്ങളാണ്. ഇതു പരിഗണിക്കാൻ ഒരു മാർഗ്ഗം വാക്കുകളുടെ ജോഡികളിൽ അടിസ്ഥാനമാക്കി മോഡൽ നിർമ്മിക്കുക, വാക്കു ജോഡികളെ വേറെ വോകാബുലറി ടോക്കണുകളായി കണക്കാക്കുക എന്നതാണ്. ഈ രീതിയിൽ, *I like to go fishing* എന്ന വാക്യം താഴെപറയുന്ന ടോക്കൺ ശ്രേണിയായി പ്രതിനിധാനം ചെയ്യും: *I like*, *like to*, *to go*, *go fishing*. ഈ സമീപനത്തിലെ പ്രശ്നം നിഘണ്ടു വലുപ്പം വളരെ വലുതാകുക മാത്രമല്ല, *go fishing* ഉം *go shopping* ഉം പോലുള്ള സംയോജിതങ്ങൾ വ്യത്യസ്ത ടോക്കണുകളായി പ്രതിനിധാനം ചെയ്യപ്പെടുന്നു, അവയ്ക്ക് ഒരേ ക്രിയാപദമുണ്ടെങ്കിലും സാംവേദനാത്മക സമാനത ഇല്ല.
|
||||
|
||||
ചിലപ്പോൾ, മൂന്ന് വാക്കുകളുടെ സംയോജിതമായ ട്രൈ-ഗ്രാമുകളും പരിഗണിക്കാം. ഈ സമീപനം സാധാരണയായി **എൻ-ഗ്രാമുകൾ** എന്ന് വിളിക്കുന്നു. കൂടാതെ, അക്ഷര-നില പ്രതിനിധാനത്തോടൊപ്പം എൻ-ഗ്രാമുകൾ ഉപയോഗിക്കുന്നത് യുക്തിയുള്ളതാണ്, അപ്പോൾ എൻ-ഗ്രാമുകൾ ഏകദേശം വ്യത്യസ്ത സ്വരഭാഗങ്ങളായി കാണാം.
|
||||
|
||||
## ബാഗ്-ഓഫ്-വേർഡ്സ് (BoW) & TF/IDF
|
||||
|
||||
ടെക്സ്റ്റ് ക്ലാസിഫിക്കേഷൻ പോലുള്ള ടാസ്കുകൾ പരിഹരിക്കുമ്പോൾ, ടെക്സ്റ്റ് ഒരു സ്ഥിരമായ വലിപ്പമുള്ള വെക്ടറായി പ്രതിനിധാനം ചെയ്യാൻ കഴിയണം, ഇത് ഫൈനൽ ഡെൻസ് ക്ലാസിഫയറിലേക്ക് ഇൻപുട്ടായി ഉപയോഗിക്കും. ഏറ്റവും ലളിതമായ മാർഗ്ഗങ്ങളിൽ ഒന്ന് എല്ലാ വ്യക്തിഗത വാക്കുകളുടെ പ്രതിനിധാനങ്ങൾ ചേർക്കലാണ്. ഓരോ വാക്കിന്റെയും ഒന്ന്-ഹോട്ട് എൻകോഡിങ്ങുകൾ ചേർത്താൽ, ഓരോ വാക്കും ടെക്സ്റ്റിൽ എത്ര തവണ വന്നുവെന്ന് കാണിക്കുന്ന ഫ്രീക്വൻസി വെക്ടർ ലഭിക്കും. ഈ ടെക്സ്റ്റ് പ്രതിനിധാനം **ബാഗ് ഓഫ് വേർഡ്സ്** (BoW) എന്ന് വിളിക്കുന്നു.
|
||||
|
||||
<img src="../../../../../translated_images/bow.3811869cff59368d951c7a765ed20ebeaf7d10680eb602ea7c5312fb22f7b7ad.ml.png" width="90%"/>
|
||||
|
||||
> ചിത്രകാരൻ: ലേഖകൻ
|
||||
|
||||
BoW അടിസ്ഥാനത്തിൽ ടെക്സ്റ്റിൽ ഏത് വാക്കുകൾ എത്രത്തോളം ഉണ്ടെന്ന് പ്രതിനിധാനം ചെയ്യുന്നു, ഇത് ടെക്സ്റ്റിന്റെ വിഷയം എന്താണെന്ന് സൂചിപ്പിക്കാൻ നല്ല മാർഗ്ഗമാണ്. ഉദാഹരണത്തിന്, രാഷ്ട്രീയ വാർത്താ ലേഖനത്തിൽ *president* (പ്രസിഡന്റ്), *country* (രാജ്യം) പോലുള്ള വാക്കുകൾ കൂടുതലായിരിക്കും, ശാസ്ത്രീയ പ്രസിദ്ധീകരണത്തിൽ *collider*, *discovered* പോലുള്ള വാക്കുകൾ കാണാം. അതിനാൽ, വാക്കുകളുടെ ആവൃത്തി പലപ്പോഴും ടെക്സ്റ്റിന്റെ ഉള്ളടക്കത്തെ സൂചിപ്പിക്കുന്നു.
|
||||
|
||||
BoW-യുടെ പ്രശ്നം ചില സാധാരണ വാക്കുകൾ, ഉദാഹരണത്തിന് *and*, *is* തുടങ്ങിയവ, പല ടെക്സ്റ്റുകളിലും കൂടുതലായി വരികയും, അതിനാൽ പ്രധാനപ്പെട്ട വാക്കുകൾ മറയ്ക്കപ്പെടുകയും ചെയ്യുന്നു. ഈ വാക്കുകളുടെ പ്രാധാന്യം കുറയ്ക്കാൻ, വാക്കുകൾ മുഴുവൻ ഡോക്യുമെന്റ് ശേഖരത്തിൽ എത്രത്തോളം വരുന്നു എന്നത് പരിഗണിക്കാം. ഇതാണ് TF/IDF സമീപനത്തിന്റെ മുഖ്യ ആശയം, ഇത് ഈ പാഠഭാഗത്തോടൊപ്പം നൽകിയ നോട്ട്ബുക്കുകളിൽ കൂടുതൽ വിശദമായി പഠിക്കാം.
|
||||
|
||||
എന്നാൽ, ഈ സമീപനങ്ങളിൽ ഒന്നും ടെക്സ്റ്റിന്റെ **സാംവേദനാത്മക അർത്ഥം** പൂർണ്ണമായി പരിഗണിക്കാൻ കഴിയില്ല. ഇതിന് കൂടുതൽ ശക്തമായ ന്യൂറൽ നെറ്റ്വർക്ക് മോഡലുകൾ ആവശ്യമുണ്ട്, അവയെക്കുറിച്ച് ഈ വിഭാഗത്തിൽ പിന്നീട് പഠിക്കും.
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: ടെക്സ്റ്റ് പ്രതിനിധാനം
|
||||
|
||||
താഴെപ്പറയുന്ന നോട്ട്ബുക്കുകളിൽ നിങ്ങളുടെ പഠനം തുടരുക:
|
||||
|
||||
* [PyTorch ഉപയോഗിച്ച് ടെക്സ്റ്റ് പ്രതിനിധാനം](TextRepresentationPyTorch.ipynb)
|
||||
* [TensorFlow ഉപയോഗിച്ച് ടെക്സ്റ്റ് പ്രതിനിധാനം](TextRepresentationTF.ipynb)
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ഇതുവരെ, നാം വ്യത്യസ്ത വാക്കുകൾക്ക് ആവൃത്തി ഭാരങ്ങൾ ചേർക്കുന്ന സാങ്കേതിക വിദ്യകൾ പഠിച്ചു. എന്നാൽ, അവ അർത്ഥം അല്ലെങ്കിൽ ക്രമം പ്രതിനിധാനം ചെയ്യാൻ കഴിയുന്നില്ല. പ്രശസ്ത ഭാഷാശാസ്ത്രജ്ഞൻ J. R. Firth 1935-ൽ പറഞ്ഞതുപോലെ, "ഒരു വാക്കിന്റെ പൂർണ്ണ അർത്ഥം എപ്പോഴും സാന്ദർഭ്യപരമാണ്, സാന്ദർഭ്യത്തിന് പുറമേ അർത്ഥ പഠനം ഗൗരവത്തോടെ എടുക്കാനാകില്ല." നാം കോഴ്സിന്റെ പിന്നീട് ഭാഗങ്ങളിൽ ഭാഷാ മോഡലിംഗ് ഉപയോഗിച്ച് ടെക്സ്റ്റിൽ നിന്നുള്ള സാന്ദർഭ്യ വിവരങ്ങൾ എങ്ങനെ പിടിച്ചെടുക്കാമെന്ന് പഠിക്കും.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
ബാഗ്-ഓഫ്-വേർഡ്സ് ഉപയോഗിച്ച് മറ്റ് അഭ്യാസങ്ങൾ പരീക്ഷിക്കുക, വ്യത്യസ്ത ഡാറ്റ മോഡലുകളും പരീക്ഷിക്കാം. ഈ [കാഗിൾ മത്സരം](https://www.kaggle.com/competitions/word2vec-nlp-tutorial/overview/part-1-for-beginners-bag-of-words) നിങ്ങൾക്ക് പ്രചോദനമായേക്കാം.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/26)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
ടെക്സ്റ്റ് എംബെഡിംഗുകളും ബാഗ്-ഓഫ്-വേർഡ്സ് സാങ്കേതിക വിദ്യകളും പ്രാക്ടീസ് ചെയ്യാൻ [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) സന്ദർശിക്കുക.
|
||||
|
||||
## [അസൈൻമെന്റ്: നോട്ട്ബുക്കുകൾ](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "dbd3f73e4139f030ecb2e20387d70fee",
|
||||
"translation_date": "2025-11-25T22:51:25+00:00",
|
||||
"source_file": "lessons/5-NLP/13-TextRep/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ടെക്സ്റ്റ് ടെൻസറുകളായി പ്രതിനിധാനം ചെയ്യൽ
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/25)
|
||||
|
||||
## ടെക്സ്റ്റ് ക്ലാസിഫിക്കേഷൻ
|
||||
|
||||
ഈ വിഭാഗത്തിന്റെ ആദ്യഭാഗം മുഴുവൻ, നാം **ടെക്സ്റ്റ് ക്ലാസിഫിക്കേഷൻ** ടാസ്കിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കും. നാം ഉപയോഗിക്കുന്നത് [AG News](https://www.kaggle.com/amananandrai/ag-news-classification-dataset) ഡാറ്റാസെറ്റ് ആണ്, ഇതിൽ താഴെപറയുന്ന പോലുള്ള വാർത്താ ലേഖനങ്ങൾ ഉൾപ്പെടുന്നു:
|
||||
|
||||
* വിഭാഗം: സയൻസ്/ടെക്
|
||||
* തലക്കെട്ട്: Ky. കമ്പനി പേപ്റ്റൈഡുകൾ പഠിക്കാൻ ഗ്രാന്റ് നേടി (AP)
|
||||
* ഉള്ളടക്കം: AP - ലൂയിസ്വിൽ സർവകലാശാലയിലെ രാസ ശാസ്ത്ര ഗവേഷകനായ ഒരാൾ സ്ഥാപിച്ച കമ്പനി വികസിപ്പിക്കാൻ ഗ്രാന്റ് നേടി...
|
||||
|
||||
നമ്മുടെ ലക്ഷ്യം ടെക്സ്റ്റ് അടിസ്ഥാനമാക്കി വാർത്താ വസ്തുവിനെ ഒരു വിഭാഗത്തിലേക്ക് ക്ലാസിഫൈ ചെയ്യുക എന്നതാണ്.
|
||||
|
||||
## ടെക്സ്റ്റ് പ്രതിനിധാനം ചെയ്യൽ
|
||||
|
||||
നാചുറൽ ലാംഗ്വേജ് പ്രോസസ്സിംഗ് (NLP) ടാസ്കുകൾ ന്യൂറൽ നെറ്റ്വർക്കുകളിലൂടെ പരിഹരിക്കാൻ, ടെക്സ്റ്റ് ടെൻസറുകളായി പ്രതിനിധാനം ചെയ്യാനുള്ള മാർഗ്ഗം വേണം. കമ്പ്യൂട്ടറുകൾ ഇതിനകം തന്നെ ASCII അല്ലെങ്കിൽ UTF-8 പോലുള്ള എൻകോഡിങ്ങുകൾ ഉപയോഗിച്ച് സ്ക്രീനിലെ ഫോണ്ടുകളുമായി മാപ്പ് ചെയ്യുന്ന സംഖ്യകളായി ടെക്സ്റ്റ് അക്ഷരങ്ങളെ പ്രതിനിധാനം ചെയ്യുന്നു.
|
||||
|
||||
<img alt="ഒരു അക്ഷരത്തെ ASCII, ബൈനറി പ്രതിനിധാനങ്ങളായി മാപ്പ് ചെയ്യുന്ന ഡയഗ്രാം കാണിക്കുന്ന ചിത്രം" src="../../../../../translated_images/ascii-character-map.18ed6aa7f3b0a7ff.ml.png" width="50%"/>
|
||||
|
||||
> [ചിത്രം സ്രോതസ്സ്](https://www.seobility.net/en/wiki/ASCII)
|
||||
|
||||
മനുഷ്യരായി, ഓരോ അക്ഷരവും എന്ത് **പ്രതിനിധാനം** ചെയ്യുന്നു എന്നും, എല്ലാ അക്ഷരങ്ങളും ചേർന്ന് വാക്യത്തിലെ വാക്കുകൾ എങ്ങനെ രൂപപ്പെടുന്നു എന്നും നാം മനസ്സിലാക്കുന്നു. എന്നാൽ, കമ്പ്യൂട്ടറുകൾക്ക് സ്വയം ഇത്തരത്തിലുള്ള ബോധം ഇല്ല, ന്യൂറൽ നെറ്റ്വർക്ക് പരിശീലന സമയത്ത് അർത്ഥം പഠിക്കേണ്ടതുണ്ട്.
|
||||
|
||||
അതിനാൽ, ടെക്സ്റ്റ് പ്രതിനിധാനം ചെയ്യുമ്പോൾ നാം വിവിധ സമീപനങ്ങൾ ഉപയോഗിക്കാം:
|
||||
|
||||
* **അക്ഷര-നില പ്രതിനിധാനം**: ഓരോ അക്ഷരത്തെയും ഒരു സംഖ്യയായി പരിഗണിച്ച് ടെക്സ്റ്റ് പ്രതിനിധാനം ചെയ്യുന്നത്. ടെക്സ്റ്റ് കോർപ്പസിൽ *C* വ്യത്യസ്ത അക്ഷരങ്ങൾ ഉണ്ടെങ്കിൽ, *Hello* എന്ന വാക്ക് 5x*C* ടെൻസറായിരിക്കും. ഓരോ അക്ഷരവും ഒന്ന്-ഹോട്ട് എൻകോഡിങ്ങിൽ ടെൻസറിന്റെ ഒരു കോളമായി പ്രതിനിധാനം ചെയ്യും.
|
||||
* **വാക്ക്-നില പ്രതിനിധാനം**: ടെക്സ്റ്റിലെ എല്ലാ വാക്കുകളുടെയും **വോകാബുലറി** സൃഷ്ടിച്ച്, വാക്കുകൾ ഒന്ന്-ഹോട്ട് എൻകോഡിങ്ങിൽ പ്രതിനിധാനം ചെയ്യുന്നു. ഈ സമീപനം കുറച്ച് മെച്ചമാണ്, കാരണം ഓരോ അക്ഷരത്തിനും സ്വതന്ത്രമായി വലിയ അർത്ഥമില്ല, അതിനാൽ ഉയർന്ന തലത്തിലുള്ള സാംവേദനാത്മക ആശയങ്ങളായ വാക്കുകൾ ഉപയോഗിച്ച് ന്യൂറൽ നെറ്റ്വർക്കിന് ടാസ്ക് ലളിതമാക്കാം. എന്നാൽ, വാക്കുകളുടെ വലിയ നിഘണ്ടു വലുപ്പം കാരണം ഉയർന്ന-ഡൈമെൻഷണൽ സ്പാർസ് ടെൻസറുകളുമായി കൈകാര്യം ചെയ്യേണ്ടിവരും.
|
||||
|
||||
പ്രതിനിധാനം ഏതായാലും, ആദ്യം ടെക്സ്റ്റ് **ടോക്കണുകളുടെ** ഒരു ശ്രേണിയാക്കി മാറ്റണം, ഓരോ ടോക്കനും അക്ഷരം, വാക്ക്, അല്ലെങ്കിൽ ചിലപ്പോൾ വാക്കിന്റെ ഭാഗമായിരിക്കും. തുടർന്ന്, ടോക്കൺ ഒരു സംഖ്യയാക്കി മാറ്റുന്നു, സാധാരണയായി **വോകാബുലറി** ഉപയോഗിച്ച്, ഈ സംഖ്യ ഒന്ന്-ഹോട്ട് എൻകോഡിങ്ങിൽ ന്യൂറൽ നെറ്റ്വർക്കിലേക്ക് നൽകാം.
|
||||
|
||||
## എൻ-ഗ്രാമുകൾ
|
||||
|
||||
സ്വാഭാവിക ഭാഷയിൽ, വാക്കുകളുടെ കൃത്യമായ അർത്ഥം സാന്ദർഭ്യത്തിൽ മാത്രമേ നിർണയിക്കാനാകൂ. ഉദാഹരണത്തിന്, *ന്യൂറൽ നെറ്റ്വർക്ക്* ഉം *ഫിഷിംഗ് നെറ്റ്വർക്ക്* ഉം പൂർണ്ണമായും വ്യത്യസ്ത അർത്ഥങ്ങളാണ്. ഇതു പരിഗണിക്കാൻ ഒരു മാർഗ്ഗം വാക്കുകളുടെ ജോഡികളിൽ അടിസ്ഥാനമാക്കി മോഡൽ നിർമ്മിക്കുക, വാക്കു ജോഡികളെ വേറെ വോകാബുലറി ടോക്കണുകളായി കണക്കാക്കുക എന്നതാണ്. ഈ രീതിയിൽ, *I like to go fishing* എന്ന വാക്യം താഴെപറയുന്ന ടോക്കൺ ശ്രേണിയായി പ്രതിനിധാനം ചെയ്യും: *I like*, *like to*, *to go*, *go fishing*. ഈ സമീപനത്തിലെ പ്രശ്നം നിഘണ്ടു വലുപ്പം വളരെ വലുതാകുക മാത്രമല്ല, *go fishing* ഉം *go shopping* ഉം പോലുള്ള സംയോജിതങ്ങൾ വ്യത്യസ്ത ടോക്കണുകളായി പ്രതിനിധാനം ചെയ്യപ്പെടുന്നു, അവയ്ക്ക് ഒരേ ക്രിയാപദമുണ്ടെങ്കിലും സാംവേദനാത്മക സമാനത ഇല്ല.
|
||||
|
||||
ചിലപ്പോൾ, മൂന്ന് വാക്കുകളുടെ സംയോജിതമായ ട്രൈ-ഗ്രാമുകളും പരിഗണിക്കാം. ഈ സമീപനം സാധാരണയായി **എൻ-ഗ്രാമുകൾ** എന്ന് വിളിക്കുന്നു. കൂടാതെ, അക്ഷര-നില പ്രതിനിധാനത്തോടൊപ്പം എൻ-ഗ്രാമുകൾ ഉപയോഗിക്കുന്നത് യുക്തിയുള്ളതാണ്, അപ്പോൾ എൻ-ഗ്രാമുകൾ ഏകദേശം വ്യത്യസ്ത സ്വരഭാഗങ്ങളായി കാണാം.
|
||||
|
||||
## ബാഗ്-ഓഫ്-വേർഡ്സ് (BoW) & TF/IDF
|
||||
|
||||
ടെക്സ്റ്റ് ക്ലാസിഫിക്കേഷൻ പോലുള്ള ടാസ്കുകൾ പരിഹരിക്കുമ്പോൾ, ടെക്സ്റ്റ് ഒരു സ്ഥിരമായ വലിപ്പമുള്ള വെക്ടറായി പ്രതിനിധാനം ചെയ്യാൻ കഴിയണം, ഇത് ഫൈനൽ ഡെൻസ് ക്ലാസിഫയറിലേക്ക് ഇൻപുട്ടായി ഉപയോഗിക്കും. ഏറ്റവും ലളിതമായ മാർഗ്ഗങ്ങളിൽ ഒന്ന് എല്ലാ വ്യക്തിഗത വാക്കുകളുടെ പ്രതിനിധാനങ്ങൾ ചേർക്കലാണ്. ഓരോ വാക്കിന്റെയും ഒന്ന്-ഹോട്ട് എൻകോഡിങ്ങുകൾ ചേർത്താൽ, ഓരോ വാക്കും ടെക്സ്റ്റിൽ എത്ര തവണ വന്നുവെന്ന് കാണിക്കുന്ന ഫ്രീക്വൻസി വെക്ടർ ലഭിക്കും. ഈ ടെക്സ്റ്റ് പ്രതിനിധാനം **ബാഗ് ഓഫ് വേർഡ്സ്** (BoW) എന്ന് വിളിക്കുന്നു.
|
||||
|
||||
<img src="../../../../../translated_images/bow.3811869cff59368d.ml.png" width="90%"/>
|
||||
|
||||
> ചിത്രകാരൻ: ലേഖകൻ
|
||||
|
||||
BoW അടിസ്ഥാനത്തിൽ ടെക്സ്റ്റിൽ ഏത് വാക്കുകൾ എത്രത്തോളം ഉണ്ടെന്ന് പ്രതിനിധാനം ചെയ്യുന്നു, ഇത് ടെക്സ്റ്റിന്റെ വിഷയം എന്താണെന്ന് സൂചിപ്പിക്കാൻ നല്ല മാർഗ്ഗമാണ്. ഉദാഹരണത്തിന്, രാഷ്ട്രീയ വാർത്താ ലേഖനത്തിൽ *president* (പ്രസിഡന്റ്), *country* (രാജ്യം) പോലുള്ള വാക്കുകൾ കൂടുതലായിരിക്കും, ശാസ്ത്രീയ പ്രസിദ്ധീകരണത്തിൽ *collider*, *discovered* പോലുള്ള വാക്കുകൾ കാണാം. അതിനാൽ, വാക്കുകളുടെ ആവൃത്തി പലപ്പോഴും ടെക്സ്റ്റിന്റെ ഉള്ളടക്കത്തെ സൂചിപ്പിക്കുന്നു.
|
||||
|
||||
BoW-യുടെ പ്രശ്നം ചില സാധാരണ വാക്കുകൾ, ഉദാഹരണത്തിന് *and*, *is* തുടങ്ങിയവ, പല ടെക്സ്റ്റുകളിലും കൂടുതലായി വരികയും, അതിനാൽ പ്രധാനപ്പെട്ട വാക്കുകൾ മറയ്ക്കപ്പെടുകയും ചെയ്യുന്നു. ഈ വാക്കുകളുടെ പ്രാധാന്യം കുറയ്ക്കാൻ, വാക്കുകൾ മുഴുവൻ ഡോക്യുമെന്റ് ശേഖരത്തിൽ എത്രത്തോളം വരുന്നു എന്നത് പരിഗണിക്കാം. ഇതാണ് TF/IDF സമീപനത്തിന്റെ മുഖ്യ ആശയം, ഇത് ഈ പാഠഭാഗത്തോടൊപ്പം നൽകിയ നോട്ട്ബുക്കുകളിൽ കൂടുതൽ വിശദമായി പഠിക്കാം.
|
||||
|
||||
എന്നാൽ, ഈ സമീപനങ്ങളിൽ ഒന്നും ടെക്സ്റ്റിന്റെ **സാംവേദനാത്മക അർത്ഥം** പൂർണ്ണമായി പരിഗണിക്കാൻ കഴിയില്ല. ഇതിന് കൂടുതൽ ശക്തമായ ന്യൂറൽ നെറ്റ്വർക്ക് മോഡലുകൾ ആവശ്യമുണ്ട്, അവയെക്കുറിച്ച് ഈ വിഭാഗത്തിൽ പിന്നീട് പഠിക്കും.
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: ടെക്സ്റ്റ് പ്രതിനിധാനം
|
||||
|
||||
താഴെപ്പറയുന്ന നോട്ട്ബുക്കുകളിൽ നിങ്ങളുടെ പഠനം തുടരുക:
|
||||
|
||||
* [PyTorch ഉപയോഗിച്ച് ടെക്സ്റ്റ് പ്രതിനിധാനം](TextRepresentationPyTorch.ipynb)
|
||||
* [TensorFlow ഉപയോഗിച്ച് ടെക്സ്റ്റ് പ്രതിനിധാനം](TextRepresentationTF.ipynb)
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ഇതുവരെ, നാം വ്യത്യസ്ത വാക്കുകൾക്ക് ആവൃത്തി ഭാരങ്ങൾ ചേർക്കുന്ന സാങ്കേതിക വിദ്യകൾ പഠിച്ചു. എന്നാൽ, അവ അർത്ഥം അല്ലെങ്കിൽ ക്രമം പ്രതിനിധാനം ചെയ്യാൻ കഴിയുന്നില്ല. പ്രശസ്ത ഭാഷാശാസ്ത്രജ്ഞൻ J. R. Firth 1935-ൽ പറഞ്ഞതുപോലെ, "ഒരു വാക്കിന്റെ പൂർണ്ണ അർത്ഥം എപ്പോഴും സാന്ദർഭ്യപരമാണ്, സാന്ദർഭ്യത്തിന് പുറമേ അർത്ഥ പഠനം ഗൗരവത്തോടെ എടുക്കാനാകില്ല." നാം കോഴ്സിന്റെ പിന്നീട് ഭാഗങ്ങളിൽ ഭാഷാ മോഡലിംഗ് ഉപയോഗിച്ച് ടെക്സ്റ്റിൽ നിന്നുള്ള സാന്ദർഭ്യ വിവരങ്ങൾ എങ്ങനെ പിടിച്ചെടുക്കാമെന്ന് പഠിക്കും.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
ബാഗ്-ഓഫ്-വേർഡ്സ് ഉപയോഗിച്ച് മറ്റ് അഭ്യാസങ്ങൾ പരീക്ഷിക്കുക, വ്യത്യസ്ത ഡാറ്റ മോഡലുകളും പരീക്ഷിക്കാം. ഈ [കാഗിൾ മത്സരം](https://www.kaggle.com/competitions/word2vec-nlp-tutorial/overview/part-1-for-beginners-bag-of-words) നിങ്ങൾക്ക് പ്രചോദനമായേക്കാം.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/26)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
ടെക്സ്റ്റ് എംബെഡിംഗുകളും ബാഗ്-ഓഫ്-വേർഡ്സ് സാങ്കേതിക വിദ്യകളും പ്രാക്ടീസ് ചെയ്യാൻ [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) സന്ദർശിക്കുക.
|
||||
|
||||
## [അസൈൻമെന്റ്: നോട്ട്ബുക്കുകൾ](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -1,81 +1,81 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "b708c9b85b833864c73c6281f1e6b96e",
|
||||
"translation_date": "2025-11-25T22:56:39+00:00",
|
||||
"source_file": "lessons/5-NLP/14-Embeddings/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# എംബെഡിംഗുകൾ
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/27)
|
||||
|
||||
BoW അല്ലെങ്കിൽ TF/IDF അടിസ്ഥാനമാക്കിയുള്ള ക്ലാസിഫയർസ് പരിശീലിപ്പിക്കുമ്പോൾ, നാം `vocab_size` നീളമുള്ള ഉയർന്ന-ഡൈമെൻഷണൽ ബാഗ്-ഓഫ്-വേർഡ്സ് വെക്ടറുകളിൽ പ്രവർത്തിച്ചിരുന്നു, കൂടാതെ നാം താഴ്ന്ന-ഡൈമെൻഷണൽ പൊസിഷണൽ പ്രതിനിധാന വെക്ടറുകളിൽ നിന്ന് സ്പാർസ് വൺ-ഹോട്ട് പ്രതിനിധാനത്തിലേക്ക് വ്യക്തമായി മാറ്റം വരുത്തുകയായിരുന്നു. എന്നാൽ ഈ വൺ-ഹോട്ട് പ്രതിനിധാനം മെമ്മറി കാര്യക്ഷമമല്ല. കൂടാതെ, ഓരോ വാക്കും പരസ്പരം സ്വതന്ത്രമായി പരിഗണിക്കപ്പെടുന്നു, അതായത് വൺ-ഹോട്ട് എൻകോഡുചെയ്ത വെക്ടറുകൾ വാക്കുകൾക്കിടയിലെ സാംസാരിക സമാനതയെ പ്രകടിപ്പിക്കുന്നില്ല.
|
||||
|
||||
**എംബെഡിംഗ്** എന്ന ആശയം വാക്കുകളെ താഴ്ന്ന-ഡൈമെൻഷണൽ സാന്ദ്ര വെക്ടറുകളായി പ്രതിനിധീകരിക്കുകയാണ്, അവ ഏതെങ്കിലും വിധത്തിൽ വാക്കിന്റെ സാംസാരിക അർത്ഥം പ്രതിഫലിപ്പിക്കുന്നു. നാം പിന്നീട് അർത്ഥപൂർണ്ണമായ വാക്ക് എംബെഡിംഗുകൾ എങ്ങനെ നിർമ്മിക്കാമെന്ന് ചർച്ച ചെയ്യും, എന്നാൽ ഇപ്പോൾ എംബെഡിംഗുകൾ വാക്ക് വെക്ടറിന്റെ ഡൈമെൻഷൻ കുറയ്ക്കാനുള്ള ഒരു മാർഗമായി മാത്രം കരുതാം.
|
||||
|
||||
അതിനാൽ, എംബെഡിംഗ് ലെയർ ഒരു വാക്ക് ഇൻപുട്ടായി സ്വീകരിച്ച് നിർദ്ദിഷ്ട `embedding_size` ഉള്ള ഔട്ട്പുട്ട് വെക്ടർ ഉത്പാദിപ്പിക്കും. ഒരു അർത്ഥത്തിൽ, ഇത് `Linear` ലെയറിനോട് വളരെ സമാനമാണ്, പക്ഷേ വൺ-ഹോട്ട് എൻകോഡുചെയ്ത വെക്ടർ സ്വീകരിക്കുന്നതിന് പകരം, വാക്കിന്റെ നമ്പർ ഇൻപുട്ടായി സ്വീകരിക്കാൻ കഴിയും, ഇതിലൂടെ വലിയ വൺ-ഹോട്ട് എൻകോഡുചെയ്ത വെക്ടറുകൾ സൃഷ്ടിക്കേണ്ടതില്ല.
|
||||
|
||||
ക്ലാസിഫയർ നെറ്റ്വർക്കിലെ ആദ്യ ലെയറായി എംബെഡിംഗ് ലെയർ ഉപയോഗിച്ച്, നാം ബാഗ്-ഓഫ്-വേർഡിൽ നിന്ന് **എംബെഡിംഗ് ബാഗ്** മോഡലിലേക്ക് മാറാം, ഇവിടെ ആദ്യം ടെക്സ്റ്റിലെ ഓരോ വാക്കും അനുയോജ്യമായ എംബെഡിംഗിലേക്ക് മാറ്റുകയും, പിന്നീട് ആ എംബെഡിംഗുകളുടെ മേൽ `sum`, `average` അല്ലെങ്കിൽ `max` പോലുള്ള ഒരു സംഗ്രഹ ഫംഗ്ഷൻ കണക്കാക്കുകയും ചെയ്യും.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം: രചയിതാവ്
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: എംബെഡിംഗുകൾ
|
||||
|
||||
താഴെ കൊടുത്തിരിക്കുന്ന നോട്ട്ബുക്കുകളിൽ നിങ്ങളുടെ പഠനം തുടരുക:
|
||||
* [PyTorch ഉപയോഗിച്ച് എംബെഡിംഗുകൾ](EmbeddingsPyTorch.ipynb)
|
||||
* [TensorFlow ഉപയോഗിച്ച് എംബെഡിംഗുകൾ](EmbeddingsTF.ipynb)
|
||||
|
||||
## സാംസാരിക എംബെഡിംഗുകൾ: Word2Vec
|
||||
|
||||
എംബെഡിംഗ് ലെയർ വാക്കുകളെ വെക്ടർ പ്രതിനിധാനത്തിലേക്ക് മാപ്പ് ചെയ്യാൻ പഠിച്ചിരുന്നെങ്കിലും, ഈ പ്രതിനിധാനം അനിവാര്യമായി സാംസാരിക അർത്ഥം ധരിക്കുന്നതല്ല. സമാനമായ വാക്കുകൾ അല്ലെങ്കിൽ പദസമാനാർത്ഥികൾ തമ്മിലുള്ള വെക്ടർ ദൂരത്തിൽ (ഉദാ. യൂക്ലിഡിയൻ ദൂരം) അടുത്തുള്ള വെക്ടറുകൾ ഉണ്ടാകുന്ന വിധം ഒരു വെക്ടർ പ്രതിനിധാനം പഠിക്കാനാകും.
|
||||
|
||||
അതിനായി, നാം ഒരു വലിയ ടെക്സ്റ്റ് ശേഖരത്തിൽ പ്രത്യേക രീതിയിൽ എംബെഡിംഗ് മോഡൽ പ്രീ-ട്രെയിൻ ചെയ്യേണ്ടതാണ്. സാംസാരിക എംബെഡിംഗുകൾ പരിശീലിപ്പിക്കുന്ന ഒരു മാർഗം [Word2Vec](https://en.wikipedia.org/wiki/Word2vec) എന്നാണ് അറിയപ്പെടുന്നത്. ഇത് വാക്കുകളുടെ വിതരണ പ്രതിനിധാനം സൃഷ്ടിക്കാൻ ഉപയോഗിക്കുന്ന രണ്ട് പ്രധാന ആർക്കിടെക്ചറുകളെ അടിസ്ഥാനമാക്കുന്നു:
|
||||
|
||||
- **Continuous bag-of-words** (CBoW) — ഈ ആർക്കിടെക്ചറിൽ, നാം മോഡലിനെ ചുറ്റുപാടിലുള്ള കോൺടെക്സ്റ്റിൽ നിന്നൊരു വാക്ക് പ്രവചിക്കാൻ പരിശീലിപ്പിക്കുന്നു. n-ഗ്രാം $(W_{-2},W_{-1},W_0,W_1,W_2)$ നൽകിയാൽ, മോഡലിന്റെ ലക്ഷ്യം $W_0$ നെ $(W_{-2},W_{-1},W_1,W_2)$ ൽ നിന്നു പ്രവചിക്കുക എന്നതാണ്.
|
||||
- **Continuous skip-gram** CBoW ന്റെ വിപരീതമാണ്. മോഡൽ നിലവിലെ വാക്ക് പ്രവചിക്കാൻ ചുറ്റുപാടിലുള്ള കോൺടെക്സ്റ്റ് വാക്കുകൾ ഉപയോഗിക്കുന്നു.
|
||||
|
||||
CBoW വേഗത്തിൽ പ്രവർത്തിക്കുന്നു, എന്നാൽ സ്കിപ്പ്-ഗ്രാം മന്ദഗതിയിലാണ്, പക്ഷേ അപൂർവമായ വാക്കുകൾ പ്രതിനിധീകരിക്കുന്നതിൽ മികച്ചതാണ്.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം ഈ [പേപ്പറിൽ](https://arxiv.org/pdf/1301.3781.pdf) നിന്നാണ്
|
||||
|
||||
Word2Vec പ്രീ-ട്രെയിൻ ചെയ്ത എംബെഡിംഗുകൾ (GloVe പോലുള്ള മറ്റ് സമാന മോഡലുകളും) ന്യൂറൽ നെറ്റ്വർക്കിലെ എംബെഡിംഗ് ലെയറിന്റെ പകരമായി ഉപയോഗിക്കാം. എന്നാൽ, വാക്കുകളുടെ ശേഖരങ്ങൾ കൈകാര്യം ചെയ്യേണ്ടതുണ്ട്, കാരണം Word2Vec/GloVe പ്രീ-ട്രെയിനിംഗിന് ഉപയോഗിച്ച വാക്കുകളുടെ ശേഖരം നമ്മുടെ ടെക്സ്റ്റ് കോർപ്പസിലെ വാക്കുകളുടെ ശേഖരത്തിൽ നിന്ന് വ്യത്യസ്തമായിരിക്കാം. ഈ പ്രശ്നം എങ്ങനെ പരിഹരിക്കാമെന്ന് മുകളിൽ കൊടുത്ത നോട്ട്ബുക്കുകളിൽ നോക്കാം.
|
||||
|
||||
## കോൺടെക്സ്ച്വൽ എംബെഡിംഗുകൾ
|
||||
|
||||
Word2Vec പോലുള്ള പരമ്പരാഗത പ്രീ-ട്രെയിൻ ചെയ്ത എംബെഡിംഗ് പ്രതിനിധാനങ്ങളുടെ ഒരു പ്രധാന പരിമിതിയാണ് വാക്കിന്റെ അർത്ഥ വ്യത്യാസം തിരിച്ചറിയൽ പ്രശ്നം. പ്രീ-ട്രെയിൻ ചെയ്ത എംബെഡിംഗുകൾ കോൺടെക്സ്റ്റിൽ വാക്കുകളുടെ ചില അർത്ഥങ്ങൾ പിടിച്ചുപറ്റാമെങ്കിലും, ഒരു വാക്കിന്റെ എല്ലാ സാധ്യതയുള്ള അർത്ഥങ്ങളും ഒരേ എംബെഡിംഗിൽ എൻകോഡ് ചെയ്യപ്പെടുന്നു. ഇത് ഡൗൺസ്ട്രീം മോഡലുകളിൽ പ്രശ്നങ്ങൾ സൃഷ്ടിക്കാം, കാരണം 'play' പോലുള്ള പല വാക്കുകൾ ഉപയോഗിക്കുന്ന കോൺടെക്സ്റ്റ് അനുസരിച്ച് വ്യത്യസ്ത അർത്ഥങ്ങൾ ഉണ്ട്.
|
||||
|
||||
ഉദാഹരണത്തിന്, 'play' എന്ന വാക്ക് ഈ രണ്ട് വ്യത്യസ്ത വാചകങ്ങളിൽ വളരെ വ്യത്യസ്ത അർത്ഥം നൽകുന്നു:
|
||||
|
||||
- ഞാൻ തിയേറ്ററിൽ ഒരു **play** കാണാൻ പോയി.
|
||||
- ജോൺ തന്റെ സുഹൃത്തുക്കളുമായി **play** ചെയ്യാൻ ആഗ്രഹിക്കുന്നു.
|
||||
|
||||
മുകളിൽ പറഞ്ഞ പ്രീ-ട്രെയിൻ ചെയ്ത എംബെഡിംഗുകൾ ഈ രണ്ട് അർത്ഥങ്ങളും ഒരേ എംബെഡിംഗിൽ പ്രതിനിധീകരിക്കുന്നു. ഈ പരിമിതിയെ മറികടക്കാൻ, നാം **ഭാഷാ മോഡൽ** അടിസ്ഥാനമാക്കിയുള്ള എംബെഡിംഗുകൾ നിർമ്മിക്കേണ്ടതാണ്, ഇത് വലിയ ടെക്സ്റ്റ് കോർപ്പസിൽ പരിശീലിപ്പിച്ചിരിക്കുന്നു, വാക്കുകൾ വ്യത്യസ്ത കോൺടെക്സ്റ്റുകളിൽ എങ്ങനെ ചേർക്കാമെന്ന് *അറിയുന്നു*. കോൺടെക്സ്ച്വൽ എംബെഡിംഗുകൾ ചർച്ച ചെയ്യുന്നത് ഈ ട്യൂട്ടോറിയലിന്റെ പരിധിയിൽ ഇല്ല, പക്ഷേ കോഴ്സിന്റെ പിന്നീട് ഭാഗങ്ങളിൽ ഭാഷാ മോഡലുകൾ ചർച്ച ചെയ്യുമ്പോൾ അവയെക്കുറിച്ച് വീണ്ടും വരാം.
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ഈ പാഠത്തിൽ, വാക്കുകളുടെ സാംസാരിക അർത്ഥങ്ങൾ മെച്ചപ്പെടുത്താൻ TensorFlow, Pytorch എന്നിവയിൽ എംബെഡിംഗ് ലെയറുകൾ എങ്ങനെ നിർമ്മിച്ച് ഉപയോഗിക്കാമെന്ന് നിങ്ങൾ പഠിച്ചു.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
Word2Vec ചില രസകരമായ പ്രയോഗങ്ങൾക്ക് ഉപയോഗിച്ചിട്ടുണ്ട്, അതിൽ പാട്ട് വരികൾ, കവിതകൾ സൃഷ്ടിക്കൽ ഉൾപ്പെടുന്നു. [ഈ ലേഖനം](https://www.politetype.com/blog/word2vec-color-poems) നോക്കുക, ഇവിടെ രചയിതാവ് Word2Vec ഉപയോഗിച്ച് കവിത സൃഷ്ടിക്കുന്ന വിധം വിശദീകരിക്കുന്നു. [Dan Shiffmann ന്റെ ഈ വീഡിയോ](https://www.youtube.com/watch?v=LSS_bos_TPI&ab_channel=TheCodingTrain) കാണുക, ഈ സാങ്കേതിക വിദ്യയുടെ മറ്റൊരു വ്യാഖ്യാനം കണ്ടെത്താൻ. തുടർന്ന്, ഈ സാങ്കേതിക വിദ്യകൾ നിങ്ങളുടെ സ്വന്തം ടെക്സ്റ്റ് കോർപ്പസിൽ, ഉദാഹരണത്തിന് Kaggle-ൽ നിന്നുള്ളവയിൽ, പ്രയോഗിക്കാൻ ശ്രമിക്കുക.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/28)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
Word2Vec-നെക്കുറിച്ചുള്ള ഈ പേപ്പർ വായിക്കുക: [Efficient Estimation of Word Representations in Vector Space](https://arxiv.org/pdf/1301.3781.pdf)
|
||||
|
||||
## [അസൈൻമെന്റ്: നോട്ട്ബുക്കുകൾ](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "b708c9b85b833864c73c6281f1e6b96e",
|
||||
"translation_date": "2025-11-25T22:56:39+00:00",
|
||||
"source_file": "lessons/5-NLP/14-Embeddings/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# എംബെഡിംഗുകൾ
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/27)
|
||||
|
||||
BoW അല്ലെങ്കിൽ TF/IDF അടിസ്ഥാനമാക്കിയുള്ള ക്ലാസിഫയർസ് പരിശീലിപ്പിക്കുമ്പോൾ, നാം `vocab_size` നീളമുള്ള ഉയർന്ന-ഡൈമെൻഷണൽ ബാഗ്-ഓഫ്-വേർഡ്സ് വെക്ടറുകളിൽ പ്രവർത്തിച്ചിരുന്നു, കൂടാതെ നാം താഴ്ന്ന-ഡൈമെൻഷണൽ പൊസിഷണൽ പ്രതിനിധാന വെക്ടറുകളിൽ നിന്ന് സ്പാർസ് വൺ-ഹോട്ട് പ്രതിനിധാനത്തിലേക്ക് വ്യക്തമായി മാറ്റം വരുത്തുകയായിരുന്നു. എന്നാൽ ഈ വൺ-ഹോട്ട് പ്രതിനിധാനം മെമ്മറി കാര്യക്ഷമമല്ല. കൂടാതെ, ഓരോ വാക്കും പരസ്പരം സ്വതന്ത്രമായി പരിഗണിക്കപ്പെടുന്നു, അതായത് വൺ-ഹോട്ട് എൻകോഡുചെയ്ത വെക്ടറുകൾ വാക്കുകൾക്കിടയിലെ സാംസാരിക സമാനതയെ പ്രകടിപ്പിക്കുന്നില്ല.
|
||||
|
||||
**എംബെഡിംഗ്** എന്ന ആശയം വാക്കുകളെ താഴ്ന്ന-ഡൈമെൻഷണൽ സാന്ദ്ര വെക്ടറുകളായി പ്രതിനിധീകരിക്കുകയാണ്, അവ ഏതെങ്കിലും വിധത്തിൽ വാക്കിന്റെ സാംസാരിക അർത്ഥം പ്രതിഫലിപ്പിക്കുന്നു. നാം പിന്നീട് അർത്ഥപൂർണ്ണമായ വാക്ക് എംബെഡിംഗുകൾ എങ്ങനെ നിർമ്മിക്കാമെന്ന് ചർച്ച ചെയ്യും, എന്നാൽ ഇപ്പോൾ എംബെഡിംഗുകൾ വാക്ക് വെക്ടറിന്റെ ഡൈമെൻഷൻ കുറയ്ക്കാനുള്ള ഒരു മാർഗമായി മാത്രം കരുതാം.
|
||||
|
||||
അതിനാൽ, എംബെഡിംഗ് ലെയർ ഒരു വാക്ക് ഇൻപുട്ടായി സ്വീകരിച്ച് നിർദ്ദിഷ്ട `embedding_size` ഉള്ള ഔട്ട്പുട്ട് വെക്ടർ ഉത്പാദിപ്പിക്കും. ഒരു അർത്ഥത്തിൽ, ഇത് `Linear` ലെയറിനോട് വളരെ സമാനമാണ്, പക്ഷേ വൺ-ഹോട്ട് എൻകോഡുചെയ്ത വെക്ടർ സ്വീകരിക്കുന്നതിന് പകരം, വാക്കിന്റെ നമ്പർ ഇൻപുട്ടായി സ്വീകരിക്കാൻ കഴിയും, ഇതിലൂടെ വലിയ വൺ-ഹോട്ട് എൻകോഡുചെയ്ത വെക്ടറുകൾ സൃഷ്ടിക്കേണ്ടതില്ല.
|
||||
|
||||
ക്ലാസിഫയർ നെറ്റ്വർക്കിലെ ആദ്യ ലെയറായി എംബെഡിംഗ് ലെയർ ഉപയോഗിച്ച്, നാം ബാഗ്-ഓഫ്-വേർഡിൽ നിന്ന് **എംബെഡിംഗ് ബാഗ്** മോഡലിലേക്ക് മാറാം, ഇവിടെ ആദ്യം ടെക്സ്റ്റിലെ ഓരോ വാക്കും അനുയോജ്യമായ എംബെഡിംഗിലേക്ക് മാറ്റുകയും, പിന്നീട് ആ എംബെഡിംഗുകളുടെ മേൽ `sum`, `average` അല്ലെങ്കിൽ `max` പോലുള്ള ഒരു സംഗ്രഹ ഫംഗ്ഷൻ കണക്കാക്കുകയും ചെയ്യും.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം: രചയിതാവ്
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: എംബെഡിംഗുകൾ
|
||||
|
||||
താഴെ കൊടുത്തിരിക്കുന്ന നോട്ട്ബുക്കുകളിൽ നിങ്ങളുടെ പഠനം തുടരുക:
|
||||
* [PyTorch ഉപയോഗിച്ച് എംബെഡിംഗുകൾ](EmbeddingsPyTorch.ipynb)
|
||||
* [TensorFlow ഉപയോഗിച്ച് എംബെഡിംഗുകൾ](EmbeddingsTF.ipynb)
|
||||
|
||||
## സാംസാരിക എംബെഡിംഗുകൾ: Word2Vec
|
||||
|
||||
എംബെഡിംഗ് ലെയർ വാക്കുകളെ വെക്ടർ പ്രതിനിധാനത്തിലേക്ക് മാപ്പ് ചെയ്യാൻ പഠിച്ചിരുന്നെങ്കിലും, ഈ പ്രതിനിധാനം അനിവാര്യമായി സാംസാരിക അർത്ഥം ധരിക്കുന്നതല്ല. സമാനമായ വാക്കുകൾ അല്ലെങ്കിൽ പദസമാനാർത്ഥികൾ തമ്മിലുള്ള വെക്ടർ ദൂരത്തിൽ (ഉദാ. യൂക്ലിഡിയൻ ദൂരം) അടുത്തുള്ള വെക്ടറുകൾ ഉണ്ടാകുന്ന വിധം ഒരു വെക്ടർ പ്രതിനിധാനം പഠിക്കാനാകും.
|
||||
|
||||
അതിനായി, നാം ഒരു വലിയ ടെക്സ്റ്റ് ശേഖരത്തിൽ പ്രത്യേക രീതിയിൽ എംബെഡിംഗ് മോഡൽ പ്രീ-ട്രെയിൻ ചെയ്യേണ്ടതാണ്. സാംസാരിക എംബെഡിംഗുകൾ പരിശീലിപ്പിക്കുന്ന ഒരു മാർഗം [Word2Vec](https://en.wikipedia.org/wiki/Word2vec) എന്നാണ് അറിയപ്പെടുന്നത്. ഇത് വാക്കുകളുടെ വിതരണ പ്രതിനിധാനം സൃഷ്ടിക്കാൻ ഉപയോഗിക്കുന്ന രണ്ട് പ്രധാന ആർക്കിടെക്ചറുകളെ അടിസ്ഥാനമാക്കുന്നു:
|
||||
|
||||
- **Continuous bag-of-words** (CBoW) — ഈ ആർക്കിടെക്ചറിൽ, നാം മോഡലിനെ ചുറ്റുപാടിലുള്ള കോൺടെക്സ്റ്റിൽ നിന്നൊരു വാക്ക് പ്രവചിക്കാൻ പരിശീലിപ്പിക്കുന്നു. n-ഗ്രാം $(W_{-2},W_{-1},W_0,W_1,W_2)$ നൽകിയാൽ, മോഡലിന്റെ ലക്ഷ്യം $W_0$ നെ $(W_{-2},W_{-1},W_1,W_2)$ ൽ നിന്നു പ്രവചിക്കുക എന്നതാണ്.
|
||||
- **Continuous skip-gram** CBoW ന്റെ വിപരീതമാണ്. മോഡൽ നിലവിലെ വാക്ക് പ്രവചിക്കാൻ ചുറ്റുപാടിലുള്ള കോൺടെക്സ്റ്റ് വാക്കുകൾ ഉപയോഗിക്കുന്നു.
|
||||
|
||||
CBoW വേഗത്തിൽ പ്രവർത്തിക്കുന്നു, എന്നാൽ സ്കിപ്പ്-ഗ്രാം മന്ദഗതിയിലാണ്, പക്ഷേ അപൂർവമായ വാക്കുകൾ പ്രതിനിധീകരിക്കുന്നതിൽ മികച്ചതാണ്.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം ഈ [പേപ്പറിൽ](https://arxiv.org/pdf/1301.3781.pdf) നിന്നാണ്
|
||||
|
||||
Word2Vec പ്രീ-ട്രെയിൻ ചെയ്ത എംബെഡിംഗുകൾ (GloVe പോലുള്ള മറ്റ് സമാന മോഡലുകളും) ന്യൂറൽ നെറ്റ്വർക്കിലെ എംബെഡിംഗ് ലെയറിന്റെ പകരമായി ഉപയോഗിക്കാം. എന്നാൽ, വാക്കുകളുടെ ശേഖരങ്ങൾ കൈകാര്യം ചെയ്യേണ്ടതുണ്ട്, കാരണം Word2Vec/GloVe പ്രീ-ട്രെയിനിംഗിന് ഉപയോഗിച്ച വാക്കുകളുടെ ശേഖരം നമ്മുടെ ടെക്സ്റ്റ് കോർപ്പസിലെ വാക്കുകളുടെ ശേഖരത്തിൽ നിന്ന് വ്യത്യസ്തമായിരിക്കാം. ഈ പ്രശ്നം എങ്ങനെ പരിഹരിക്കാമെന്ന് മുകളിൽ കൊടുത്ത നോട്ട്ബുക്കുകളിൽ നോക്കാം.
|
||||
|
||||
## കോൺടെക്സ്ച്വൽ എംബെഡിംഗുകൾ
|
||||
|
||||
Word2Vec പോലുള്ള പരമ്പരാഗത പ്രീ-ട്രെയിൻ ചെയ്ത എംബെഡിംഗ് പ്രതിനിധാനങ്ങളുടെ ഒരു പ്രധാന പരിമിതിയാണ് വാക്കിന്റെ അർത്ഥ വ്യത്യാസം തിരിച്ചറിയൽ പ്രശ്നം. പ്രീ-ട്രെയിൻ ചെയ്ത എംബെഡിംഗുകൾ കോൺടെക്സ്റ്റിൽ വാക്കുകളുടെ ചില അർത്ഥങ്ങൾ പിടിച്ചുപറ്റാമെങ്കിലും, ഒരു വാക്കിന്റെ എല്ലാ സാധ്യതയുള്ള അർത്ഥങ്ങളും ഒരേ എംബെഡിംഗിൽ എൻകോഡ് ചെയ്യപ്പെടുന്നു. ഇത് ഡൗൺസ്ട്രീം മോഡലുകളിൽ പ്രശ്നങ്ങൾ സൃഷ്ടിക്കാം, കാരണം 'play' പോലുള്ള പല വാക്കുകൾ ഉപയോഗിക്കുന്ന കോൺടെക്സ്റ്റ് അനുസരിച്ച് വ്യത്യസ്ത അർത്ഥങ്ങൾ ഉണ്ട്.
|
||||
|
||||
ഉദാഹരണത്തിന്, 'play' എന്ന വാക്ക് ഈ രണ്ട് വ്യത്യസ്ത വാചകങ്ങളിൽ വളരെ വ്യത്യസ്ത അർത്ഥം നൽകുന്നു:
|
||||
|
||||
- ഞാൻ തിയേറ്ററിൽ ഒരു **play** കാണാൻ പോയി.
|
||||
- ജോൺ തന്റെ സുഹൃത്തുക്കളുമായി **play** ചെയ്യാൻ ആഗ്രഹിക്കുന്നു.
|
||||
|
||||
മുകളിൽ പറഞ്ഞ പ്രീ-ട്രെയിൻ ചെയ്ത എംബെഡിംഗുകൾ ഈ രണ്ട് അർത്ഥങ്ങളും ഒരേ എംബെഡിംഗിൽ പ്രതിനിധീകരിക്കുന്നു. ഈ പരിമിതിയെ മറികടക്കാൻ, നാം **ഭാഷാ മോഡൽ** അടിസ്ഥാനമാക്കിയുള്ള എംബെഡിംഗുകൾ നിർമ്മിക്കേണ്ടതാണ്, ഇത് വലിയ ടെക്സ്റ്റ് കോർപ്പസിൽ പരിശീലിപ്പിച്ചിരിക്കുന്നു, വാക്കുകൾ വ്യത്യസ്ത കോൺടെക്സ്റ്റുകളിൽ എങ്ങനെ ചേർക്കാമെന്ന് *അറിയുന്നു*. കോൺടെക്സ്ച്വൽ എംബെഡിംഗുകൾ ചർച്ച ചെയ്യുന്നത് ഈ ട്യൂട്ടോറിയലിന്റെ പരിധിയിൽ ഇല്ല, പക്ഷേ കോഴ്സിന്റെ പിന്നീട് ഭാഗങ്ങളിൽ ഭാഷാ മോഡലുകൾ ചർച്ച ചെയ്യുമ്പോൾ അവയെക്കുറിച്ച് വീണ്ടും വരാം.
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ഈ പാഠത്തിൽ, വാക്കുകളുടെ സാംസാരിക അർത്ഥങ്ങൾ മെച്ചപ്പെടുത്താൻ TensorFlow, Pytorch എന്നിവയിൽ എംബെഡിംഗ് ലെയറുകൾ എങ്ങനെ നിർമ്മിച്ച് ഉപയോഗിക്കാമെന്ന് നിങ്ങൾ പഠിച്ചു.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
Word2Vec ചില രസകരമായ പ്രയോഗങ്ങൾക്ക് ഉപയോഗിച്ചിട്ടുണ്ട്, അതിൽ പാട്ട് വരികൾ, കവിതകൾ സൃഷ്ടിക്കൽ ഉൾപ്പെടുന്നു. [ഈ ലേഖനം](https://www.politetype.com/blog/word2vec-color-poems) നോക്കുക, ഇവിടെ രചയിതാവ് Word2Vec ഉപയോഗിച്ച് കവിത സൃഷ്ടിക്കുന്ന വിധം വിശദീകരിക്കുന്നു. [Dan Shiffmann ന്റെ ഈ വീഡിയോ](https://www.youtube.com/watch?v=LSS_bos_TPI&ab_channel=TheCodingTrain) കാണുക, ഈ സാങ്കേതിക വിദ്യയുടെ മറ്റൊരു വ്യാഖ്യാനം കണ്ടെത്താൻ. തുടർന്ന്, ഈ സാങ്കേതിക വിദ്യകൾ നിങ്ങളുടെ സ്വന്തം ടെക്സ്റ്റ് കോർപ്പസിൽ, ഉദാഹരണത്തിന് Kaggle-ൽ നിന്നുള്ളവയിൽ, പ്രയോഗിക്കാൻ ശ്രമിക്കുക.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/28)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
Word2Vec-നെക്കുറിച്ചുള്ള ഈ പേപ്പർ വായിക്കുക: [Efficient Estimation of Word Representations in Vector Space](https://arxiv.org/pdf/1301.3781.pdf)
|
||||
|
||||
## [അസൈൻമെന്റ്: നോട്ട്ബുക്കുകൾ](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,58 +1,58 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "7ba20f54a5bfcd6521018cdfb17c7c57",
|
||||
"translation_date": "2025-11-25T22:59:08+00:00",
|
||||
"source_file": "lessons/5-NLP/15-LanguageModeling/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ഭാഷാ മോഡലിംഗ്
|
||||
|
||||
വാക്കുകളുടെ അർത്ഥപരമായ എംബെഡിംഗുകൾ, ഉദാഹരണത്തിന് Word2Vec, GloVe എന്നിവ, വാസ്തവത്തിൽ **ഭാഷാ മോഡലിംഗ്** എന്നതിനുള്ള ആദ്യപടി ആണ് - ഭാഷയുടെ സ്വഭാവം ഏതെങ്കിലും വിധത്തിൽ *അർത്ഥമാക്കുന്ന* (അഥവാ *പ്രതിനിധാനം ചെയ്യുന്ന*) മോഡലുകൾ സൃഷ്ടിക്കുക.
|
||||
|
||||
## [പഠനത്തിന് മുമ്പുള്ള ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/29)
|
||||
|
||||
ഭാഷാ മോഡലിംഗിന്റെ പ്രധാന ആശയം unlabeled ഡാറ്റാസെറ്റുകളിൽ unsupervised രീതിയിൽ പരിശീലനം നൽകുകയാണ്. ഇത് പ്രധാനമാണ്, കാരണം നമുക്ക് വലിയ തോതിൽ unlabeled ടെക്സ്റ്റ് ലഭ്യമാണ്, എന്നാൽ ലേബൽ ചെയ്ത ടെക്സ്റ്റിന്റെ അളവ് ലേബലിംഗിന് ചെലവഴിക്കുന്ന ശ്രമത്തിന്റെ പരിധിയാൽ എപ്പോഴും പരിമിതമായിരിക്കും. സാധാരണയായി, നാം ടെക്സ്റ്റിൽ നഷ്ടപ്പെട്ട വാക്കുകൾ **കാണിച്ച് പ്രവചിക്കാൻ** കഴിയുന്ന ഭാഷാ മോഡലുകൾ നിർമ്മിക്കാം, കാരണം ടെക്സ്റ്റിൽ ഒരു യാദൃച്ഛിക വാക്ക് മറയ്ക്കുകയും അതിനെ പരിശീലന സാമ്പിളായി ഉപയോഗിക്കുകയുമാണ് എളുപ്പം.
|
||||
|
||||
## എംബെഡിംഗുകൾ പരിശീലിപ്പിക്കൽ
|
||||
|
||||
മുൻ ഉദാഹരണങ്ങളിൽ, നാം മുൻകൂട്ടി പരിശീലിപ്പിച്ച അർത്ഥപരമായ എംബെഡിംഗുകൾ ഉപയോഗിച്ചു, പക്ഷേ ആ എംബെഡിംഗുകൾ എങ്ങനെ പരിശീലിപ്പിക്കാമെന്ന് കാണുന്നത് രസകരമാണ്. ഉപയോഗിക്കാവുന്ന ചില ആശയങ്ങൾ:
|
||||
|
||||
* **N-ഗ്രാം** ഭാഷാ മോഡലിംഗ്, ഇവിടെ N മുൻവരുന്ന ടോക്കണുകൾ നോക്കി ഒരു ടോക്കൺ പ്രവചിക്കുന്നു (N-ഗ്രാം)
|
||||
* **കണ്ടിന്യൂവസ് ബാഗ്-ഓഫ്-വേർഡ്സ്** (CBoW), ടോക്കൺ ശ്രേണിയിൽ മധ്യത്തിലുള്ള ടോക്കൺ $W_0$ പ്രവചിക്കുന്നത്, $W_{-N}$, ..., $W_N$.
|
||||
* **സ്കിപ്പ്-ഗ്രാം**, മധ്യത്തിലുള്ള ടോക്കൺ $W_0$ ഉപയോഗിച്ച് സമീപവരുന്ന ടോക്കണുകളുടെ സെറ്റ് {$W_{-N},\dots, W_{-1}, W_1,\dots, W_N$} പ്രവചിക്കുന്നത്.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [ഈ പത്രത്തിൽ നിന്നുള്ളത്](https://arxiv.org/pdf/1301.3781.pdf)
|
||||
|
||||
## ✍️ ഉദാഹരണ നോട്ട്ബുക്കുകൾ: CBoW മോഡൽ പരിശീലനം
|
||||
|
||||
താഴെ കൊടുത്ത നോട്ട്ബുക്കുകളിൽ നിങ്ങളുടെ പഠനം തുടരുക:
|
||||
|
||||
* [TensorFlow ഉപയോഗിച്ച് CBoW Word2Vec പരിശീലനം](CBoW-TF.ipynb)
|
||||
* [PyTorch ഉപയോഗിച്ച് CBoW Word2Vec പരിശീലനം](CBoW-PyTorch.ipynb)
|
||||
|
||||
## നിഗമനം
|
||||
|
||||
മുൻപത്തെ പാഠത്തിൽ നാം കണ്ടത് വാക്കുകളുടെ എംബെഡിംഗുകൾ അത്ഭുതം പോലെ പ്രവർത്തിക്കുന്നു എന്നതാണ്! ഇപ്പോൾ നമുക്ക് അറിയാം വാക്ക് എംബെഡിംഗുകൾ പരിശീലിപ്പിക്കുന്നത് വളരെ സങ്കീർണ്ണമായ കാര്യമല്ല, ആവശ്യമായാൽ നാം ഡൊമെയ്ൻ പ്രത്യേക ടെക്സ്റ്റിനായി നമ്മുടെ സ്വന്തം വാക്ക് എംബെഡിംഗുകൾ പരിശീലിപ്പിക്കാനും കഴിയും.
|
||||
|
||||
## [പഠനത്തിന് ശേഷമുള്ള ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/30)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
* [ഭാഷാ മോഡലിംഗിനുള്ള ഔദ്യോഗിക PyTorch ട്യൂട്ടോറിയൽ](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html).
|
||||
* [Word2Vec മോഡൽ പരിശീലനത്തിനുള്ള ഔദ്യോഗിക TensorFlow ട്യൂട്ടോറിയൽ](https://www.TensorFlow.org/tutorials/text/word2vec).
|
||||
* **gensim** ഫ്രെയിംവർക്ക് ഉപയോഗിച്ച് ഏറ്റവും സാധാരണമായി ഉപയോഗിക്കുന്ന എംബെഡിംഗുകൾ കുറച്ച് കോഡ് വരികളിൽ പരിശീലിപ്പിക്കുന്നതിനെക്കുറിച്ച് [ഈ ഡോക്യുമെന്റേഷനിൽ](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html) വിവരിച്ചിരിക്കുന്നു.
|
||||
|
||||
## 🚀 [അസൈൻമെന്റ്: സ്കിപ്പ്-ഗ്രാം മോഡൽ പരിശീലനം](lab/README.md)
|
||||
|
||||
ലാബിൽ, ഈ പാഠത്തിലെ കോഡ് മാറ്റി CBoW പകരം സ്കിപ്പ്-ഗ്രാം മോഡൽ പരിശീലിപ്പിക്കാൻ നിങ്ങളെ വെല്ലുവിളിക്കുന്നു. [വിശദാംശങ്ങൾ വായിക്കുക](lab/README.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് പരിഗണിക്കേണ്ടതാണ്. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "7ba20f54a5bfcd6521018cdfb17c7c57",
|
||||
"translation_date": "2025-11-25T22:59:08+00:00",
|
||||
"source_file": "lessons/5-NLP/15-LanguageModeling/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ഭാഷാ മോഡലിംഗ്
|
||||
|
||||
വാക്കുകളുടെ അർത്ഥപരമായ എംബെഡിംഗുകൾ, ഉദാഹരണത്തിന് Word2Vec, GloVe എന്നിവ, വാസ്തവത്തിൽ **ഭാഷാ മോഡലിംഗ്** എന്നതിനുള്ള ആദ്യപടി ആണ് - ഭാഷയുടെ സ്വഭാവം ഏതെങ്കിലും വിധത്തിൽ *അർത്ഥമാക്കുന്ന* (അഥവാ *പ്രതിനിധാനം ചെയ്യുന്ന*) മോഡലുകൾ സൃഷ്ടിക്കുക.
|
||||
|
||||
## [പഠനത്തിന് മുമ്പുള്ള ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/29)
|
||||
|
||||
ഭാഷാ മോഡലിംഗിന്റെ പ്രധാന ആശയം unlabeled ഡാറ്റാസെറ്റുകളിൽ unsupervised രീതിയിൽ പരിശീലനം നൽകുകയാണ്. ഇത് പ്രധാനമാണ്, കാരണം നമുക്ക് വലിയ തോതിൽ unlabeled ടെക്സ്റ്റ് ലഭ്യമാണ്, എന്നാൽ ലേബൽ ചെയ്ത ടെക്സ്റ്റിന്റെ അളവ് ലേബലിംഗിന് ചെലവഴിക്കുന്ന ശ്രമത്തിന്റെ പരിധിയാൽ എപ്പോഴും പരിമിതമായിരിക്കും. സാധാരണയായി, നാം ടെക്സ്റ്റിൽ നഷ്ടപ്പെട്ട വാക്കുകൾ **കാണിച്ച് പ്രവചിക്കാൻ** കഴിയുന്ന ഭാഷാ മോഡലുകൾ നിർമ്മിക്കാം, കാരണം ടെക്സ്റ്റിൽ ഒരു യാദൃച്ഛിക വാക്ക് മറയ്ക്കുകയും അതിനെ പരിശീലന സാമ്പിളായി ഉപയോഗിക്കുകയുമാണ് എളുപ്പം.
|
||||
|
||||
## എംബെഡിംഗുകൾ പരിശീലിപ്പിക്കൽ
|
||||
|
||||
മുൻ ഉദാഹരണങ്ങളിൽ, നാം മുൻകൂട്ടി പരിശീലിപ്പിച്ച അർത്ഥപരമായ എംബെഡിംഗുകൾ ഉപയോഗിച്ചു, പക്ഷേ ആ എംബെഡിംഗുകൾ എങ്ങനെ പരിശീലിപ്പിക്കാമെന്ന് കാണുന്നത് രസകരമാണ്. ഉപയോഗിക്കാവുന്ന ചില ആശയങ്ങൾ:
|
||||
|
||||
* **N-ഗ്രാം** ഭാഷാ മോഡലിംഗ്, ഇവിടെ N മുൻവരുന്ന ടോക്കണുകൾ നോക്കി ഒരു ടോക്കൺ പ്രവചിക്കുന്നു (N-ഗ്രാം)
|
||||
* **കണ്ടിന്യൂവസ് ബാഗ്-ഓഫ്-വേർഡ്സ്** (CBoW), ടോക്കൺ ശ്രേണിയിൽ മധ്യത്തിലുള്ള ടോക്കൺ $W_0$ പ്രവചിക്കുന്നത്, $W_{-N}$, ..., $W_N$.
|
||||
* **സ്കിപ്പ്-ഗ്രാം**, മധ്യത്തിലുള്ള ടോക്കൺ $W_0$ ഉപയോഗിച്ച് സമീപവരുന്ന ടോക്കണുകളുടെ സെറ്റ് {$W_{-N},\dots, W_{-1}, W_1,\dots, W_N$} പ്രവചിക്കുന്നത്.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [ഈ പത്രത്തിൽ നിന്നുള്ളത്](https://arxiv.org/pdf/1301.3781.pdf)
|
||||
|
||||
## ✍️ ഉദാഹരണ നോട്ട്ബുക്കുകൾ: CBoW മോഡൽ പരിശീലനം
|
||||
|
||||
താഴെ കൊടുത്ത നോട്ട്ബുക്കുകളിൽ നിങ്ങളുടെ പഠനം തുടരുക:
|
||||
|
||||
* [TensorFlow ഉപയോഗിച്ച് CBoW Word2Vec പരിശീലനം](CBoW-TF.ipynb)
|
||||
* [PyTorch ഉപയോഗിച്ച് CBoW Word2Vec പരിശീലനം](CBoW-PyTorch.ipynb)
|
||||
|
||||
## നിഗമനം
|
||||
|
||||
മുൻപത്തെ പാഠത്തിൽ നാം കണ്ടത് വാക്കുകളുടെ എംബെഡിംഗുകൾ അത്ഭുതം പോലെ പ്രവർത്തിക്കുന്നു എന്നതാണ്! ഇപ്പോൾ നമുക്ക് അറിയാം വാക്ക് എംബെഡിംഗുകൾ പരിശീലിപ്പിക്കുന്നത് വളരെ സങ്കീർണ്ണമായ കാര്യമല്ല, ആവശ്യമായാൽ നാം ഡൊമെയ്ൻ പ്രത്യേക ടെക്സ്റ്റിനായി നമ്മുടെ സ്വന്തം വാക്ക് എംബെഡിംഗുകൾ പരിശീലിപ്പിക്കാനും കഴിയും.
|
||||
|
||||
## [പഠനത്തിന് ശേഷമുള്ള ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/30)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
* [ഭാഷാ മോഡലിംഗിനുള്ള ഔദ്യോഗിക PyTorch ട്യൂട്ടോറിയൽ](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html).
|
||||
* [Word2Vec മോഡൽ പരിശീലനത്തിനുള്ള ഔദ്യോഗിക TensorFlow ട്യൂട്ടോറിയൽ](https://www.TensorFlow.org/tutorials/text/word2vec).
|
||||
* **gensim** ഫ്രെയിംവർക്ക് ഉപയോഗിച്ച് ഏറ്റവും സാധാരണമായി ഉപയോഗിക്കുന്ന എംബെഡിംഗുകൾ കുറച്ച് കോഡ് വരികളിൽ പരിശീലിപ്പിക്കുന്നതിനെക്കുറിച്ച് [ഈ ഡോക്യുമെന്റേഷനിൽ](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html) വിവരിച്ചിരിക്കുന്നു.
|
||||
|
||||
## 🚀 [അസൈൻമെന്റ്: സ്കിപ്പ്-ഗ്രാം മോഡൽ പരിശീലനം](lab/README.md)
|
||||
|
||||
ലാബിൽ, ഈ പാഠത്തിലെ കോഡ് മാറ്റി CBoW പകരം സ്കിപ്പ്-ഗ്രാം മോഡൽ പരിശീലിപ്പിക്കാൻ നിങ്ങളെ വെല്ലുവിളിക്കുന്നു. [വിശദാംശങ്ങൾ വായിക്കുക](lab/README.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് പരിഗണിക്കേണ്ടതാണ്. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,99 +1,99 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "e2273cc150380a5e191903cea858f021",
|
||||
"translation_date": "2025-11-25T23:02:18+00:00",
|
||||
"source_file": "lessons/5-NLP/16-RNN/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# റികറന്റ് ന്യൂറൽ നെറ്റ്വർക്കുകൾ
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/31)
|
||||
|
||||
മുൻവശങ്ങളിൽ, നാം ടെക്സ്റ്റിന്റെ സമ്പന്നമായ സീമാന്റിക് പ്രതിനിധാനങ്ങളും എംബെഡിംഗുകളുടെ മുകളിൽ ലളിതമായ ലീനിയർ ക്ലാസിഫയർ ഉപയോഗിച്ചിരിക്കുന്നു. ഈ ആർക്കിടെക്ചർ ചെയ്യുന്നത് ഒരു വാക്യത്തിലെ വാക്കുകളുടെ സംയുക്ത അർത്ഥം പിടികൂടുകയാണ്, പക്ഷേ വാക്കുകളുടെ **ക്രമം** പരിഗണിക്കുന്നില്ല, കാരണം എംബെഡിംഗുകളുടെ മുകളിൽ സംയോജനം ഓപ്പറേഷൻ ഈ വിവരങ്ങൾ യഥാർത്ഥ ടെക്സ്റ്റിൽ നിന്ന് നീക്കം ചെയ്തിരിക്കുന്നു. ഈ മോഡലുകൾ വാക്കുകളുടെ ക്രമീകരണം മോഡൽ ചെയ്യാൻ കഴിയാത്തതിനാൽ, ടെക്സ്റ്റ് ജനറേഷൻ അല്ലെങ്കിൽ ചോദ്യോത്തരങ്ങൾ പോലുള്ള കൂടുതൽ സങ്കീർണ്ണമായ അല്ലെങ്കിൽ സംശയാസ്പദമായ പ്രവർത്തനങ്ങൾ പരിഹരിക്കാൻ കഴിയില്ല.
|
||||
|
||||
ടെക്സ്റ്റ് സീക്വൻസിന്റെ അർത്ഥം പിടികൂടാൻ, നമുക്ക് മറ്റൊരു ന്യൂറൽ നെറ്റ്വർക്ക് ആർക്കിടെക്ചർ ഉപയോഗിക്കേണ്ടതുണ്ട്, അതാണ് **റികറന്റ് ന്യൂറൽ നെറ്റ്വർക്ക്** അല്ലെങ്കിൽ RNN. RNN-ൽ, നാം വാക്യം ഒരു സിംബോളായി ഒരു സമയം നെറ്റ്വർക്കിലൂടെ കടത്തുന്നു, നെറ്റ്വർക്ക് ചില **സ്റ്റേറ്റ്** ഉൽപ്പാദിപ്പിക്കുന്നു, അത് പിന്നീട് അടുത്ത സിംബോളിനൊപ്പം വീണ്ടും നെറ്റ്വർക്കിലേക്ക് കടത്തുന്നു.
|
||||
|
||||

|
||||
|
||||
> ചിത്രകാരൻ: ലേഖകൻ
|
||||
|
||||
ഇൻപുട്ട് സീക്വൻസ് ടോക്കണുകൾ X<sub>0</sub>,...,X<sub>n</sub> നൽകിയാൽ, RNN ഒരു ന്യൂറൽ നെറ്റ്വർക്ക് ബ്ലോക്കുകളുടെ സീക്വൻസ് സൃഷ്ടിക്കുകയും, ബാക്ക്പ്രൊപ്പഗേഷൻ ഉപയോഗിച്ച് ഈ സീക്വൻസ് എന്റു-ടു-എൻഡ് ട്രെയിൻ ചെയ്യുകയും ചെയ്യുന്നു. ഓരോ നെറ്റ്വർക്ക് ബ്ലോക്കും (X<sub>i</sub>,S<sub>i</sub>) എന്ന ജോഡി ഇൻപുട്ടായി സ്വീകരിച്ച് S<sub>i+1</sub> ഉൽപ്പാദിപ്പിക്കുന്നു. അവസാന സ്റ്റേറ്റ് S<sub>n</sub> അല്ലെങ്കിൽ (ഔട്ട്പുട്ട് Y<sub>n</sub>) ലീനിയർ ക്ലാസിഫയറിലേക്ക് പോകുന്നു ഫലം ഉൽപ്പാദിപ്പിക്കാൻ. എല്ലാ നെറ്റ്വർക്ക് ബ്ലോക്കുകളും ഒരേ വെയ്റ്റുകൾ പങ്കുവെക്കുന്നു, ഒറ്റ ബാക്ക്പ്രൊപ്പഗേഷൻ പാസിലൂടെ എന്റു-ടു-എൻഡ് ട്രെയിൻ ചെയ്യുന്നു.
|
||||
|
||||
സ്റ്റേറ്റ് വെക്ടറുകൾ S<sub>0</sub>,...,S<sub>n</sub> നെറ്റ്വർക്കിലൂടെ കടത്തപ്പെടുന്നതിനാൽ, വാക്കുകൾ തമ്മിലുള്ള അനുക്രമ ആശ്രിതത്വങ്ങൾ പഠിക്കാൻ ഇത് കഴിയും. ഉദാഹരണത്തിന്, സീക്വൻസിൽ *not* എന്ന വാക്ക് എവിടെയെങ്കിലും വന്നാൽ, സ്റ്റേറ്റ് വെക്ടറിലെ ചില ഘടകങ്ങളെ നിഷേധിക്കാൻ പഠിക്കാം, അതിലൂടെ നിഷേധം സാദ്ധ്യമാകും.
|
||||
|
||||
> ✅ മുകളിൽ ചിത്രത്തിൽ എല്ലാ RNN ബ്ലോക്കുകളുടെ വെയ്റ്റുകളും പങ്കുവെക്കപ്പെടുന്നതിനാൽ, ഒരേ ചിത്രം ഒരു ബ്ലോക്കായി (വലതുവശം) പ്രതിനിധീകരിക്കാം, അതിൽ റികറന്റ് ഫീഡ്ബാക്ക് ലൂപ്പ് ഉണ്ട്, ഇത് നെറ്റ്വർക്ക് ഔട്ട്പുട്ട് സ്റ്റേറ്റ് ഇൻപുട്ടിലേക്ക് തിരികെ കടത്തുന്നു.
|
||||
|
||||
## RNN സെല്ലിന്റെ ഘടന
|
||||
|
||||
ഒരു ലളിതമായ RNN സെൽ എങ്ങനെ ക്രമീകരിച്ചിരിക്കുന്നുവെന്ന് നോക്കാം. ഇത് മുൻ സ്റ്റേറ്റ് S<sub>i-1</sub>യും നിലവിലെ സിംബോളായ X<sub>i</sub>യും ഇൻപുട്ടായി സ്വീകരിച്ച് ഔട്ട്പുട്ട് സ്റ്റേറ്റ് S<sub>i</sub> (കഴിഞ്ഞപ്പോൾ ചിലപ്പോൾ മറ്റ് ഔട്ട്പുട്ട് Y<sub>i</sub>യും) ഉൽപ്പാദിപ്പിക്കണം.
|
||||
|
||||
ഒരു ലളിതമായ RNN സെലിൽ രണ്ട് വെയ്റ്റ് മാട്രിസുകൾ ഉണ്ട്: ഒന്ന് ഇൻപുട്ട് സിംബോളിനെ മാറ്റുന്നു (W എന്ന് വിളിക്കാം), മറ്റൊന്ന് ഇൻപുട്ട് സ്റ്റേറ്റ് മാറ്റുന്നു (H). ഈ സാഹചര്യത്തിൽ, നെറ്റ്വർക്ക് ഔട്ട്പുട്ട് σ(W×X<sub>i</sub>+H×S<sub>i-1</sub>+b) ആയി കണക്കാക്കുന്നു, ഇവിടെ σ ആക്ടിവേഷൻ ഫംഗ്ഷനും b അധിക ബയാസും ആണ്.
|
||||
|
||||
<img alt="RNN Cell Anatomy" src="../../../../../translated_images/rnn-anatomy.79ee3f3920b3294bd52e9543ef36102dbca3cecf6d4d78d8c63bf0bbc95fdc90.ml.png" width="50%"/>
|
||||
|
||||
> ചിത്രകാരൻ: ലേഖകൻ
|
||||
|
||||
പലപ്പോഴും, ഇൻപുട്ട് ടോക്കണുകൾ RNN-ലേക്ക് പ്രവേശിക്കുന്നതിന് മുമ്പ് എംബെഡിംഗ് ലെയറിലൂടെ കടക്കുന്നു, ഇത് ഡൈമെൻഷണാലിറ്റി കുറയ്ക്കാൻ സഹായിക്കുന്നു. ഈ സാഹചര്യത്തിൽ, ഇൻപുട്ട് വെക്ടറുകളുടെ ഡൈമെൻഷൻ *emb_size* ആണെങ്കിൽ, സ്റ്റേറ്റ് വെക്ടർ *hid_size* ആണെങ്കിൽ - Wയുടെ വലുപ്പം *emb_size*×*hid_size* ആണ്, Hയുടെ വലുപ്പം *hid_size*×*hid_size* ആണ്.
|
||||
|
||||
## ലോങ് ഷോർട്ട് ടേം മെമ്മറി (LSTM)
|
||||
|
||||
ക്ലാസിക്കൽ RNN-കളുടെ പ്രധാന പ്രശ്നങ്ങളിൽ ഒന്ന് **വാനിഷിംഗ് ഗ്രേഡിയന്റ്സ്** പ്രശ്നമാണ്. RNN-കൾ ഒറ്റ ബാക്ക്പ്രൊപ്പഗേഷൻ പാസിൽ എന്റു-ടു-എൻഡ് ട്രെയിൻ ചെയ്യപ്പെടുന്നതിനാൽ, നെറ്റ്വർക്കിന്റെ ആദ്യ ലെയറുകളിലേക്ക് പിശക് പ്രചരിപ്പിക്കാൻ ബുദ്ധിമുട്ട് ഉണ്ടാകുന്നു, അതിനാൽ ദൂരെയുള്ള ടോക്കണുകൾ തമ്മിലുള്ള ബന്ധങ്ങൾ പഠിക്കാൻ കഴിയുന്നില്ല. ഈ പ്രശ്നം ഒഴിവാക്കാൻ ഒരു മാർഗം **സ്പഷ്ടമായ സ്റ്റേറ്റ് മാനേജ്മെന്റ്** അവതരിപ്പിക്കുന്നതാണ്, അതിന് **ഗേറ്റുകൾ** ഉപയോഗിക്കുന്നു. ഇതിന്റെ രണ്ട് പ്രശസ്തമായ ആർക്കിടെക്ചറുകൾ ഉണ്ട്: **ലോങ് ഷോർട്ട് ടേം മെമ്മറി** (LSTM)യും **ഗേറ്റഡ് റീലേ യൂണിറ്റ്** (GRU)യും.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം ഉറവിടം TBD
|
||||
|
||||
LSTM നെറ്റ്വർക്ക് RNN-നെപ്പോലെ ക്രമീകരിച്ചിരിക്കുന്നു, പക്ഷേ രണ്ട് സ്റ്റേറ്റുകൾ ലെയർ മുതൽ ലെയർ വരെ കടത്തുന്നു: യഥാർത്ഥ സ്റ്റേറ്റ് C, ഒപ്പം ഹിഡൻ വെക്ടർ H. ഓരോ യൂണിറ്റിലും, ഹിഡൻ വെക്ടർ H<sub>i</sub> ഇൻപുട്ട് X<sub>i</sub>യുമായി ചേർത്ത്, **ഗേറ്റുകൾ** വഴി സ്റ്റേറ്റ് C-യിൽ എന്ത് സംഭവിക്കുമെന്ന് നിയന്ത്രിക്കുന്നു. ഓരോ ഗേറ്റും സിഗ്മോയിഡ് ആക്ടിവേഷൻ ഉള്ള ഒരു ന്യൂറൽ നെറ്റ്വർക്ക് ആണ് (ഔട്ട്പുട്ട് [0,1] പരിധിയിൽ), ഇത് സ്റ്റേറ്റ് വെക്ടറുമായി ഗുണിക്കുമ്പോൾ ബിറ്റ്വൈസ് മാസ്ക് പോലെ കരുതാം. താഴെപ്പറയുന്ന ഗേറ്റുകൾ ഉണ്ട് (ചിത്രത്തിൽ ഇടത്തുനിന്ന് വലത്തേക്ക്):
|
||||
|
||||
* **ഫോർഗറ്റ് ഗേറ്റ്** ഹിഡൻ വെക്ടർ സ്വീകരിച്ച് സ്റ്റേറ്റ് C-യിലെ ഏതെല്ലാം ഘടകങ്ങൾ മറക്കണം, ഏതെല്ലാം കടത്തണം എന്ന് നിർണ്ണയിക്കുന്നു.
|
||||
* **ഇൻപുട്ട് ഗേറ്റ്** ഇൻപുട്ട്, ഹിഡൻ വെക്ടറുകളിൽ നിന്നുള്ള ചില വിവരങ്ങൾ സ്റ്റേറ്റിലേക്ക് ചേർക്കുന്നു.
|
||||
* **ഔട്ട്പുട്ട് ഗേറ്റ്** സ്റ്റേറ്റ് ഒരു ലീനിയർ ലെയർ വഴി *tanh* ആക്ടിവേഷൻ ഉപയോഗിച്ച് മാറ്റുന്നു, പിന്നീട് ഹിഡൻ വെക്ടർ H<sub>i</sub> ഉപയോഗിച്ച് ചില ഘടകങ്ങൾ തിരഞ്ഞെടുക്കുന്നു, പുതിയ സ്റ്റേറ്റ് C<sub>i+1</sub> ഉൽപ്പാദിപ്പിക്കാൻ.
|
||||
|
||||
സ്റ്റേറ്റ് C-യുടെ ഘടകങ്ങൾ ചില ഫ്ലാഗുകൾ പോലെ കരുതാം, അവ ഓണോ ഓഫ് ആക്കാം. ഉദാഹരണത്തിന്, സീക്വൻസിൽ *Alice* എന്ന പേര് വന്നാൽ, അത് ഒരു സ്ത്രീ കഥാപാത്രത്തെ സൂചിപ്പിക്കുന്നതായി കരുതാം, അതിനാൽ സ്റ്റേറ്റിൽ സ്ത്രീ ലിംഗമുള്ള നാമം ഉള്ള ഫ്ലാഗ് ഉയർത്താം. പിന്നീട് *and Tom* എന്ന വാചകം വന്നാൽ, ബഹുവചന നാമം ഉള്ള ഫ്ലാഗ് ഉയർത്തും. ഇങ്ങനെ സ്റ്റേറ്റ് മാനിപ്പുലേറ്റ് ചെയ്ത് വാക്യഭാഗങ്ങളുടെ വ്യാകരണ ഗുണങ്ങൾ ട്രാക്ക് ചെയ്യാം.
|
||||
|
||||
> ✅ LSTM-യുടെ ആന്തരിക ഘടന മനസ്സിലാക്കാൻ മികച്ച സ്രോതസ്സ് ആണ് ക്രിസ്റ്റോഫർ ഒലാഹിന്റെ [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) എന്ന ലേഖനം.
|
||||
|
||||
## ബൈഡയറക്ഷണൽ, മൾട്ടിലെയർ RNNകൾ
|
||||
|
||||
നാം ഒരു ദിശയിൽ പ്രവർത്തിക്കുന്ന റികറന്റ് നെറ്റ്വർക്കുകൾ ചർച്ച ചെയ്തു, സീക്വൻസിന്റെ തുടക്കം മുതൽ അവസാനം വരെ. ഇത് സ്വാഭാവികമാണ്, കാരണം നാം വായിക്കുമ്പോഴും സംസാരമൊഴി കേൾക്കുമ്പോഴും ഇങ്ങനെ ചെയ്യുന്നു. എന്നാൽ, പല പ്രായോഗിക സാഹചര്യങ്ങളിലും ഇൻപുട്ട് സീക്വൻസിലേക്ക് റാൻഡം ആക്സസ് ഉള്ളതിനാൽ, റികറന്റ് കംപ്യൂട്ടേഷൻ ഇരുവശത്തും നടത്തുന്നത് ഉചിതമാണ്. ഇത്തരം നെറ്റ്വർക്കുകൾ **ബൈഡയറക്ഷണൽ** RNNകൾ എന്ന് വിളിക്കുന്നു. ബൈഡയറക്ഷണൽ നെറ്റ്വർക്കിൽ, ഓരോ ദിശയ്ക്കും ഒരു ഹിഡൻ സ്റ്റേറ്റ് വെക്ടർ വേണം.
|
||||
|
||||
ഒരു റികറന്റ് നെറ്റ്വർക്ക്, ഒരോ ദിശയിലായാലും, സീക്വൻസിൽ ചില പാറ്റേണുകൾ പിടികൂടുകയും അവ സ്റ്റേറ്റ് വെക്ടറിലോ ഔട്ട്പുട്ടിലോ സൂക്ഷിക്കുകയും ചെയ്യുന്നു. കോൺവല്യൂഷണൽ നെറ്റ്വർക്കുകളെപ്പോലെ, നാം ആദ്യ ലെയറിന്റെ ഔട്ട്പുട്ട് അടുത്ത ലെയറിന്റെ ഇൻപുട്ടായി ഉപയോഗിച്ച് ഉയർന്ന തലത്തിലുള്ള പാറ്റേണുകൾ പിടികൂടാൻ മറ്റൊരു റികറന്റ് ലെയർ നിർമ്മിക്കാം. ഇതാണ് **മൾട്ടി-ലെയർ RNN** എന്ന ആശയം, ഇത് രണ്ട് അല്ലെങ്കിൽ കൂടുതൽ റികറന്റ് നെറ്റ്വർക്കുകൾ ഉൾക്കൊള്ളുന്നു, മുൻ ലെയറിന്റെ ഔട്ട്പുട്ട് അടുത്ത ലെയറിന്റെ ഇൻപുട്ടായി കടത്തുന്നു.
|
||||
|
||||

|
||||
|
||||
*ചിത്രം Fernando López-ന്റെ [ഈ മനോഹരമായ പോസ്റ്റ്](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3) നിന്നാണ്*
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: എംബെഡിംഗുകൾ
|
||||
|
||||
താഴെപ്പറയുന്ന നോട്ട്ബുക്കുകളിൽ നിങ്ങളുടെ പഠനം തുടരുക:
|
||||
|
||||
* [PyTorch ഉപയോഗിച്ച് RNNകൾ](RNNPyTorch.ipynb)
|
||||
* [TensorFlow ഉപയോഗിച്ച് RNNകൾ](RNNTF.ipynb)
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ഈ യൂണിറ്റിൽ, RNNകൾ സീക്വൻസ് ക്ലാസിഫിക്കേഷനിൽ ഉപയോഗിക്കാമെന്ന് കണ്ടു, പക്ഷേ അവ വാസ്തവത്തിൽ ടെക്സ്റ്റ് ജനറേഷൻ, മെഷീൻ ട്രാൻസ്ലേഷൻ തുടങ്ങിയ നിരവധി മറ്റ് പ്രവർത്തനങ്ങളും കൈകാര്യം ചെയ്യാൻ കഴിയും. അടുത്ത യൂണിറ്റിൽ ആ പ്രവർത്തനങ്ങൾ പരിഗണിക്കും.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
LSTM-കളെക്കുറിച്ച് ചില സാഹിത്യം വായിച്ച് അവയുടെ പ്രയോഗങ്ങൾ പരിഗണിക്കുക:
|
||||
|
||||
- [Grid Long Short-Term Memory](https://arxiv.org/pdf/1507.01526v1.pdf)
|
||||
- [Show, Attend and Tell: Neural Image Caption Generation with Visual Attention](https://arxiv.org/pdf/1502.03044v2.pdf)
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/32)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
- ക്രിസ്റ്റോഫർ ഒലാഹിന്റെ [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) ലേഖനം.
|
||||
|
||||
## [അസൈൻമെന്റ്: നോട്ട്ബുക്കുകൾ](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "e2273cc150380a5e191903cea858f021",
|
||||
"translation_date": "2025-11-25T23:02:18+00:00",
|
||||
"source_file": "lessons/5-NLP/16-RNN/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# റികറന്റ് ന്യൂറൽ നെറ്റ്വർക്കുകൾ
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/31)
|
||||
|
||||
മുൻവശങ്ങളിൽ, നാം ടെക്സ്റ്റിന്റെ സമ്പന്നമായ സീമാന്റിക് പ്രതിനിധാനങ്ങളും എംബെഡിംഗുകളുടെ മുകളിൽ ലളിതമായ ലീനിയർ ക്ലാസിഫയർ ഉപയോഗിച്ചിരിക്കുന്നു. ഈ ആർക്കിടെക്ചർ ചെയ്യുന്നത് ഒരു വാക്യത്തിലെ വാക്കുകളുടെ സംയുക്ത അർത്ഥം പിടികൂടുകയാണ്, പക്ഷേ വാക്കുകളുടെ **ക്രമം** പരിഗണിക്കുന്നില്ല, കാരണം എംബെഡിംഗുകളുടെ മുകളിൽ സംയോജനം ഓപ്പറേഷൻ ഈ വിവരങ്ങൾ യഥാർത്ഥ ടെക്സ്റ്റിൽ നിന്ന് നീക്കം ചെയ്തിരിക്കുന്നു. ഈ മോഡലുകൾ വാക്കുകളുടെ ക്രമീകരണം മോഡൽ ചെയ്യാൻ കഴിയാത്തതിനാൽ, ടെക്സ്റ്റ് ജനറേഷൻ അല്ലെങ്കിൽ ചോദ്യോത്തരങ്ങൾ പോലുള്ള കൂടുതൽ സങ്കീർണ്ണമായ അല്ലെങ്കിൽ സംശയാസ്പദമായ പ്രവർത്തനങ്ങൾ പരിഹരിക്കാൻ കഴിയില്ല.
|
||||
|
||||
ടെക്സ്റ്റ് സീക്വൻസിന്റെ അർത്ഥം പിടികൂടാൻ, നമുക്ക് മറ്റൊരു ന്യൂറൽ നെറ്റ്വർക്ക് ആർക്കിടെക്ചർ ഉപയോഗിക്കേണ്ടതുണ്ട്, അതാണ് **റികറന്റ് ന്യൂറൽ നെറ്റ്വർക്ക്** അല്ലെങ്കിൽ RNN. RNN-ൽ, നാം വാക്യം ഒരു സിംബോളായി ഒരു സമയം നെറ്റ്വർക്കിലൂടെ കടത്തുന്നു, നെറ്റ്വർക്ക് ചില **സ്റ്റേറ്റ്** ഉൽപ്പാദിപ്പിക്കുന്നു, അത് പിന്നീട് അടുത്ത സിംബോളിനൊപ്പം വീണ്ടും നെറ്റ്വർക്കിലേക്ക് കടത്തുന്നു.
|
||||
|
||||

|
||||
|
||||
> ചിത്രകാരൻ: ലേഖകൻ
|
||||
|
||||
ഇൻപുട്ട് സീക്വൻസ് ടോക്കണുകൾ X<sub>0</sub>,...,X<sub>n</sub> നൽകിയാൽ, RNN ഒരു ന്യൂറൽ നെറ്റ്വർക്ക് ബ്ലോക്കുകളുടെ സീക്വൻസ് സൃഷ്ടിക്കുകയും, ബാക്ക്പ്രൊപ്പഗേഷൻ ഉപയോഗിച്ച് ഈ സീക്വൻസ് എന്റു-ടു-എൻഡ് ട്രെയിൻ ചെയ്യുകയും ചെയ്യുന്നു. ഓരോ നെറ്റ്വർക്ക് ബ്ലോക്കും (X<sub>i</sub>,S<sub>i</sub>) എന്ന ജോഡി ഇൻപുട്ടായി സ്വീകരിച്ച് S<sub>i+1</sub> ഉൽപ്പാദിപ്പിക്കുന്നു. അവസാന സ്റ്റേറ്റ് S<sub>n</sub> അല്ലെങ്കിൽ (ഔട്ട്പുട്ട് Y<sub>n</sub>) ലീനിയർ ക്ലാസിഫയറിലേക്ക് പോകുന്നു ഫലം ഉൽപ്പാദിപ്പിക്കാൻ. എല്ലാ നെറ്റ്വർക്ക് ബ്ലോക്കുകളും ഒരേ വെയ്റ്റുകൾ പങ്കുവെക്കുന്നു, ഒറ്റ ബാക്ക്പ്രൊപ്പഗേഷൻ പാസിലൂടെ എന്റു-ടു-എൻഡ് ട്രെയിൻ ചെയ്യുന്നു.
|
||||
|
||||
സ്റ്റേറ്റ് വെക്ടറുകൾ S<sub>0</sub>,...,S<sub>n</sub> നെറ്റ്വർക്കിലൂടെ കടത്തപ്പെടുന്നതിനാൽ, വാക്കുകൾ തമ്മിലുള്ള അനുക്രമ ആശ്രിതത്വങ്ങൾ പഠിക്കാൻ ഇത് കഴിയും. ഉദാഹരണത്തിന്, സീക്വൻസിൽ *not* എന്ന വാക്ക് എവിടെയെങ്കിലും വന്നാൽ, സ്റ്റേറ്റ് വെക്ടറിലെ ചില ഘടകങ്ങളെ നിഷേധിക്കാൻ പഠിക്കാം, അതിലൂടെ നിഷേധം സാദ്ധ്യമാകും.
|
||||
|
||||
> ✅ മുകളിൽ ചിത്രത്തിൽ എല്ലാ RNN ബ്ലോക്കുകളുടെ വെയ്റ്റുകളും പങ്കുവെക്കപ്പെടുന്നതിനാൽ, ഒരേ ചിത്രം ഒരു ബ്ലോക്കായി (വലതുവശം) പ്രതിനിധീകരിക്കാം, അതിൽ റികറന്റ് ഫീഡ്ബാക്ക് ലൂപ്പ് ഉണ്ട്, ഇത് നെറ്റ്വർക്ക് ഔട്ട്പുട്ട് സ്റ്റേറ്റ് ഇൻപുട്ടിലേക്ക് തിരികെ കടത്തുന്നു.
|
||||
|
||||
## RNN സെല്ലിന്റെ ഘടന
|
||||
|
||||
ഒരു ലളിതമായ RNN സെൽ എങ്ങനെ ക്രമീകരിച്ചിരിക്കുന്നുവെന്ന് നോക്കാം. ഇത് മുൻ സ്റ്റേറ്റ് S<sub>i-1</sub>യും നിലവിലെ സിംബോളായ X<sub>i</sub>യും ഇൻപുട്ടായി സ്വീകരിച്ച് ഔട്ട്പുട്ട് സ്റ്റേറ്റ് S<sub>i</sub> (കഴിഞ്ഞപ്പോൾ ചിലപ്പോൾ മറ്റ് ഔട്ട്പുട്ട് Y<sub>i</sub>യും) ഉൽപ്പാദിപ്പിക്കണം.
|
||||
|
||||
ഒരു ലളിതമായ RNN സെലിൽ രണ്ട് വെയ്റ്റ് മാട്രിസുകൾ ഉണ്ട്: ഒന്ന് ഇൻപുട്ട് സിംബോളിനെ മാറ്റുന്നു (W എന്ന് വിളിക്കാം), മറ്റൊന്ന് ഇൻപുട്ട് സ്റ്റേറ്റ് മാറ്റുന്നു (H). ഈ സാഹചര്യത്തിൽ, നെറ്റ്വർക്ക് ഔട്ട്പുട്ട് σ(W×X<sub>i</sub>+H×S<sub>i-1</sub>+b) ആയി കണക്കാക്കുന്നു, ഇവിടെ σ ആക്ടിവേഷൻ ഫംഗ്ഷനും b അധിക ബയാസും ആണ്.
|
||||
|
||||
<img alt="RNN Cell Anatomy" src="../../../../../translated_images/rnn-anatomy.79ee3f3920b3294b.ml.png" width="50%"/>
|
||||
|
||||
> ചിത്രകാരൻ: ലേഖകൻ
|
||||
|
||||
പലപ്പോഴും, ഇൻപുട്ട് ടോക്കണുകൾ RNN-ലേക്ക് പ്രവേശിക്കുന്നതിന് മുമ്പ് എംബെഡിംഗ് ലെയറിലൂടെ കടക്കുന്നു, ഇത് ഡൈമെൻഷണാലിറ്റി കുറയ്ക്കാൻ സഹായിക്കുന്നു. ഈ സാഹചര്യത്തിൽ, ഇൻപുട്ട് വെക്ടറുകളുടെ ഡൈമെൻഷൻ *emb_size* ആണെങ്കിൽ, സ്റ്റേറ്റ് വെക്ടർ *hid_size* ആണെങ്കിൽ - Wയുടെ വലുപ്പം *emb_size*×*hid_size* ആണ്, Hയുടെ വലുപ്പം *hid_size*×*hid_size* ആണ്.
|
||||
|
||||
## ലോങ് ഷോർട്ട് ടേം മെമ്മറി (LSTM)
|
||||
|
||||
ക്ലാസിക്കൽ RNN-കളുടെ പ്രധാന പ്രശ്നങ്ങളിൽ ഒന്ന് **വാനിഷിംഗ് ഗ്രേഡിയന്റ്സ്** പ്രശ്നമാണ്. RNN-കൾ ഒറ്റ ബാക്ക്പ്രൊപ്പഗേഷൻ പാസിൽ എന്റു-ടു-എൻഡ് ട്രെയിൻ ചെയ്യപ്പെടുന്നതിനാൽ, നെറ്റ്വർക്കിന്റെ ആദ്യ ലെയറുകളിലേക്ക് പിശക് പ്രചരിപ്പിക്കാൻ ബുദ്ധിമുട്ട് ഉണ്ടാകുന്നു, അതിനാൽ ദൂരെയുള്ള ടോക്കണുകൾ തമ്മിലുള്ള ബന്ധങ്ങൾ പഠിക്കാൻ കഴിയുന്നില്ല. ഈ പ്രശ്നം ഒഴിവാക്കാൻ ഒരു മാർഗം **സ്പഷ്ടമായ സ്റ്റേറ്റ് മാനേജ്മെന്റ്** അവതരിപ്പിക്കുന്നതാണ്, അതിന് **ഗേറ്റുകൾ** ഉപയോഗിക്കുന്നു. ഇതിന്റെ രണ്ട് പ്രശസ്തമായ ആർക്കിടെക്ചറുകൾ ഉണ്ട്: **ലോങ് ഷോർട്ട് ടേം മെമ്മറി** (LSTM)യും **ഗേറ്റഡ് റീലേ യൂണിറ്റ്** (GRU)യും.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം ഉറവിടം TBD
|
||||
|
||||
LSTM നെറ്റ്വർക്ക് RNN-നെപ്പോലെ ക്രമീകരിച്ചിരിക്കുന്നു, പക്ഷേ രണ്ട് സ്റ്റേറ്റുകൾ ലെയർ മുതൽ ലെയർ വരെ കടത്തുന്നു: യഥാർത്ഥ സ്റ്റേറ്റ് C, ഒപ്പം ഹിഡൻ വെക്ടർ H. ഓരോ യൂണിറ്റിലും, ഹിഡൻ വെക്ടർ H<sub>i</sub> ഇൻപുട്ട് X<sub>i</sub>യുമായി ചേർത്ത്, **ഗേറ്റുകൾ** വഴി സ്റ്റേറ്റ് C-യിൽ എന്ത് സംഭവിക്കുമെന്ന് നിയന്ത്രിക്കുന്നു. ഓരോ ഗേറ്റും സിഗ്മോയിഡ് ആക്ടിവേഷൻ ഉള്ള ഒരു ന്യൂറൽ നെറ്റ്വർക്ക് ആണ് (ഔട്ട്പുട്ട് [0,1] പരിധിയിൽ), ഇത് സ്റ്റേറ്റ് വെക്ടറുമായി ഗുണിക്കുമ്പോൾ ബിറ്റ്വൈസ് മാസ്ക് പോലെ കരുതാം. താഴെപ്പറയുന്ന ഗേറ്റുകൾ ഉണ്ട് (ചിത്രത്തിൽ ഇടത്തുനിന്ന് വലത്തേക്ക്):
|
||||
|
||||
* **ഫോർഗറ്റ് ഗേറ്റ്** ഹിഡൻ വെക്ടർ സ്വീകരിച്ച് സ്റ്റേറ്റ് C-യിലെ ഏതെല്ലാം ഘടകങ്ങൾ മറക്കണം, ഏതെല്ലാം കടത്തണം എന്ന് നിർണ്ണയിക്കുന്നു.
|
||||
* **ഇൻപുട്ട് ഗേറ്റ്** ഇൻപുട്ട്, ഹിഡൻ വെക്ടറുകളിൽ നിന്നുള്ള ചില വിവരങ്ങൾ സ്റ്റേറ്റിലേക്ക് ചേർക്കുന്നു.
|
||||
* **ഔട്ട്പുട്ട് ഗേറ്റ്** സ്റ്റേറ്റ് ഒരു ലീനിയർ ലെയർ വഴി *tanh* ആക്ടിവേഷൻ ഉപയോഗിച്ച് മാറ്റുന്നു, പിന്നീട് ഹിഡൻ വെക്ടർ H<sub>i</sub> ഉപയോഗിച്ച് ചില ഘടകങ്ങൾ തിരഞ്ഞെടുക്കുന്നു, പുതിയ സ്റ്റേറ്റ് C<sub>i+1</sub> ഉൽപ്പാദിപ്പിക്കാൻ.
|
||||
|
||||
സ്റ്റേറ്റ് C-യുടെ ഘടകങ്ങൾ ചില ഫ്ലാഗുകൾ പോലെ കരുതാം, അവ ഓണോ ഓഫ് ആക്കാം. ഉദാഹരണത്തിന്, സീക്വൻസിൽ *Alice* എന്ന പേര് വന്നാൽ, അത് ഒരു സ്ത്രീ കഥാപാത്രത്തെ സൂചിപ്പിക്കുന്നതായി കരുതാം, അതിനാൽ സ്റ്റേറ്റിൽ സ്ത്രീ ലിംഗമുള്ള നാമം ഉള്ള ഫ്ലാഗ് ഉയർത്താം. പിന്നീട് *and Tom* എന്ന വാചകം വന്നാൽ, ബഹുവചന നാമം ഉള്ള ഫ്ലാഗ് ഉയർത്തും. ഇങ്ങനെ സ്റ്റേറ്റ് മാനിപ്പുലേറ്റ് ചെയ്ത് വാക്യഭാഗങ്ങളുടെ വ്യാകരണ ഗുണങ്ങൾ ട്രാക്ക് ചെയ്യാം.
|
||||
|
||||
> ✅ LSTM-യുടെ ആന്തരിക ഘടന മനസ്സിലാക്കാൻ മികച്ച സ്രോതസ്സ് ആണ് ക്രിസ്റ്റോഫർ ഒലാഹിന്റെ [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) എന്ന ലേഖനം.
|
||||
|
||||
## ബൈഡയറക്ഷണൽ, മൾട്ടിലെയർ RNNകൾ
|
||||
|
||||
നാം ഒരു ദിശയിൽ പ്രവർത്തിക്കുന്ന റികറന്റ് നെറ്റ്വർക്കുകൾ ചർച്ച ചെയ്തു, സീക്വൻസിന്റെ തുടക്കം മുതൽ അവസാനം വരെ. ഇത് സ്വാഭാവികമാണ്, കാരണം നാം വായിക്കുമ്പോഴും സംസാരമൊഴി കേൾക്കുമ്പോഴും ഇങ്ങനെ ചെയ്യുന്നു. എന്നാൽ, പല പ്രായോഗിക സാഹചര്യങ്ങളിലും ഇൻപുട്ട് സീക്വൻസിലേക്ക് റാൻഡം ആക്സസ് ഉള്ളതിനാൽ, റികറന്റ് കംപ്യൂട്ടേഷൻ ഇരുവശത്തും നടത്തുന്നത് ഉചിതമാണ്. ഇത്തരം നെറ്റ്വർക്കുകൾ **ബൈഡയറക്ഷണൽ** RNNകൾ എന്ന് വിളിക്കുന്നു. ബൈഡയറക്ഷണൽ നെറ്റ്വർക്കിൽ, ഓരോ ദിശയ്ക്കും ഒരു ഹിഡൻ സ്റ്റേറ്റ് വെക്ടർ വേണം.
|
||||
|
||||
ഒരു റികറന്റ് നെറ്റ്വർക്ക്, ഒരോ ദിശയിലായാലും, സീക്വൻസിൽ ചില പാറ്റേണുകൾ പിടികൂടുകയും അവ സ്റ്റേറ്റ് വെക്ടറിലോ ഔട്ട്പുട്ടിലോ സൂക്ഷിക്കുകയും ചെയ്യുന്നു. കോൺവല്യൂഷണൽ നെറ്റ്വർക്കുകളെപ്പോലെ, നാം ആദ്യ ലെയറിന്റെ ഔട്ട്പുട്ട് അടുത്ത ലെയറിന്റെ ഇൻപുട്ടായി ഉപയോഗിച്ച് ഉയർന്ന തലത്തിലുള്ള പാറ്റേണുകൾ പിടികൂടാൻ മറ്റൊരു റികറന്റ് ലെയർ നിർമ്മിക്കാം. ഇതാണ് **മൾട്ടി-ലെയർ RNN** എന്ന ആശയം, ഇത് രണ്ട് അല്ലെങ്കിൽ കൂടുതൽ റികറന്റ് നെറ്റ്വർക്കുകൾ ഉൾക്കൊള്ളുന്നു, മുൻ ലെയറിന്റെ ഔട്ട്പുട്ട് അടുത്ത ലെയറിന്റെ ഇൻപുട്ടായി കടത്തുന്നു.
|
||||
|
||||

|
||||
|
||||
*ചിത്രം Fernando López-ന്റെ [ഈ മനോഹരമായ പോസ്റ്റ്](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3) നിന്നാണ്*
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: എംബെഡിംഗുകൾ
|
||||
|
||||
താഴെപ്പറയുന്ന നോട്ട്ബുക്കുകളിൽ നിങ്ങളുടെ പഠനം തുടരുക:
|
||||
|
||||
* [PyTorch ഉപയോഗിച്ച് RNNകൾ](RNNPyTorch.ipynb)
|
||||
* [TensorFlow ഉപയോഗിച്ച് RNNകൾ](RNNTF.ipynb)
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ഈ യൂണിറ്റിൽ, RNNകൾ സീക്വൻസ് ക്ലാസിഫിക്കേഷനിൽ ഉപയോഗിക്കാമെന്ന് കണ്ടു, പക്ഷേ അവ വാസ്തവത്തിൽ ടെക്സ്റ്റ് ജനറേഷൻ, മെഷീൻ ട്രാൻസ്ലേഷൻ തുടങ്ങിയ നിരവധി മറ്റ് പ്രവർത്തനങ്ങളും കൈകാര്യം ചെയ്യാൻ കഴിയും. അടുത്ത യൂണിറ്റിൽ ആ പ്രവർത്തനങ്ങൾ പരിഗണിക്കും.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
LSTM-കളെക്കുറിച്ച് ചില സാഹിത്യം വായിച്ച് അവയുടെ പ്രയോഗങ്ങൾ പരിഗണിക്കുക:
|
||||
|
||||
- [Grid Long Short-Term Memory](https://arxiv.org/pdf/1507.01526v1.pdf)
|
||||
- [Show, Attend and Tell: Neural Image Caption Generation with Visual Attention](https://arxiv.org/pdf/1502.03044v2.pdf)
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/32)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
- ക്രിസ്റ്റോഫർ ഒലാഹിന്റെ [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) ലേഖനം.
|
||||
|
||||
## [അസൈൻമെന്റ്: നോട്ട്ബുക്കുകൾ](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,485 +1,485 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# പുനരാവർത്തന ന്യൂറൽ നെറ്റ്വർക്കുകൾ\n",
|
||||
"\n",
|
||||
"മുൻ മോഡ്യൂളിൽ, നാം ടെക്സ്റ്റിന്റെ സമ്പന്നമായ സാംവേദനാത്മക പ്രതിനിധാനങ്ങൾ ഉപയോഗിച്ച്, എംബെഡിംഗുകളുടെ മുകളിൽ ഒരു ലളിതമായ ലീനിയർ ക്ലാസിഫയർ ഉപയോഗിച്ചിരുന്നു. ഈ ആർക്കിടെക്ചർ ചെയ്യുന്നത് ഒരു വാക്യത്തിലെ വാക്കുകളുടെ സംയുക്ത അർത്ഥം പിടിച്ചുപറ്റുകയാണ്, പക്ഷേ വാക്കുകളുടെ **ക്രമം** പരിഗണിക്കുന്നില്ല, കാരണം എംബെഡിംഗുകളുടെ മുകളിൽAggregation പ്രവർത്തനം ഈ വിവരങ്ങൾ യഥാർത്ഥ ടെക്സ്റ്റിൽ നിന്ന് നീക്കം ചെയ്യുന്നു. ഈ മോഡലുകൾ വാക്കുകളുടെ ക്രമീകരണം മോഡൽ ചെയ്യാൻ കഴിയാത്തതിനാൽ, ടെക്സ്റ്റ് ജനറേഷൻ അല്ലെങ്കിൽ ചോദ്യോത്തരങ്ങൾ പോലുള്ള കൂടുതൽ സങ്കീർണ്ണമായ അല്ലെങ്കിൽ സംശയാസ്പദമായ പ്രവർത്തനങ്ങൾ പരിഹരിക്കാൻ കഴിയില്ല.\n",
|
||||
"\n",
|
||||
"ടെക്സ്റ്റ് സീക്വൻസിന്റെ അർത്ഥം പിടിച്ചുപറ്റാൻ, നാം മറ്റൊരു ന്യൂറൽ നെറ്റ്വർക്ക് ആർക്കിടെക്ചർ ഉപയോഗിക്കേണ്ടതുണ്ട്, അതാണ് **പുനരാവർത്തന ന്യൂറൽ നെറ്റ്വർക്ക്** അല്ലെങ്കിൽ RNN. RNN-ൽ, നാം നമ്മുടെ വാക്യം ഒരു സിംബോളായി ഓരോ തവണയും നെറ്റ്വർക്കിലൂടെ കടത്തുന്നു, നെറ്റ്വർക്ക് ചില **സ്റ്റേറ്റ്** ഉൽപ്പാദിപ്പിക്കുന്നു, അത് പിന്നീട് അടുത്ത സിംബോളിനൊപ്പം വീണ്ടും നെറ്റ്വർക്കിലേക്ക് നൽകുന്നു.\n",
|
||||
"\n",
|
||||
"<img alt=\"RNN\" src=\"../../../../../translated_images/rnn.27f5c29c53d727b546ad3961637a267f0fe9ec5ab01f2a26a853c92fcefbb574.ml.png\" width=\"60%\"/>\n",
|
||||
"\n",
|
||||
"ഇൻപുട്ട് ടോക്കൺ സീക്വൻസ് $X_0,\\dots,X_n$ നൽകിയാൽ, RNN ഒരു ന്യൂറൽ നെറ്റ്വർക്ക് ബ്ലോക്കുകളുടെ സീക്വൻസ് സൃഷ്ടിക്കുന്നു, ഈ സീക്വൻസ് എന്റു-ടു-എൻഡ് ബാക്ക് പ്രൊപ്പഗേഷൻ ഉപയോഗിച്ച് പരിശീലിപ്പിക്കുന്നു. ഓരോ നെറ്റ്വർക്ക് ബ്ലോക്കും ഒരു ജോഡി $(X_i,S_i)$ ഇൻപുട്ടായി സ്വീകരിച്ച്, $S_{i+1}$ ഫലമായി ഉൽപ്പാദിപ്പിക്കുന്നു. അന്തിമ സ്റ്റേറ്റ് $S_n$ അല്ലെങ്കിൽ ഔട്ട്പുട്ട് $X_n$ ഒരു ലീനിയർ ക്ലാസിഫയറിലേക്ക് പോകുന്നു ഫലം ഉൽപ്പാദിപ്പിക്കാൻ. എല്ലാ നെറ്റ്വർക്ക് ബ്ലോക്കുകളും ഒരേ വെയ്റ്റുകൾ പങ്കുവെക്കുന്നു, ഒറ്റ ബാക്ക് പ്രൊപ്പഗേഷൻ പാസിലൂടെ എന്റു-ടു-എൻഡ് പരിശീലനം നടത്തുന്നു.\n",
|
||||
"\n",
|
||||
"സ്റ്റേറ്റ് വെക്ടറുകൾ $S_0,\\dots,S_n$ നെറ്റ്വർക്കിലൂടെ കടത്തപ്പെടുന്നതിനാൽ, വാക്കുകൾ തമ്മിലുള്ള അനുക്രമപരമായ ആശ്രിതത്വങ്ങൾ പഠിക്കാൻ ഇത് കഴിയും. ഉദാഹരണത്തിന്, സീക്വൻസിൽ *not* എന്ന വാക്ക് എവിടെയെങ്കിലും വന്നാൽ, സ്റ്റേറ്റ് വെക്ടറിലെ ചില ഘടകങ്ങളെ നിഷേധിക്കാൻ പഠിക്കാം, അതിലൂടെ നിഷേധം സൃഷ്ടിക്കുന്നു.\n",
|
||||
"\n",
|
||||
"> ചിത്രത്തിലെ എല്ലാ RNN ബ്ലോക്കുകളുടെ വെയ്റ്റുകളും പങ്കുവെക്കപ്പെടുന്നതിനാൽ, ഒരേ ചിത്രം ഒരു ബ്ലോക്കായി (വലതുവശത്ത്) പ്രതിനിധീകരിക്കാം, അതിൽ പുനരാവർത്തന ഫീഡ്ബാക്ക് ലൂപ്പ് ഉണ്ട്, ഇത് നെറ്റ്വർക്കിന്റെ ഔട്ട്പുട്ട് സ്റ്റേറ്റ് ഇൻപുട്ടിലേക്ക് തിരികെ നൽകുന്നു.\n",
|
||||
"\n",
|
||||
"പുനരാവർത്തന ന്യൂറൽ നെറ്റ്വർക്കുകൾ നമ്മുടെ വാർത്താ ഡാറ്റാസെറ്റ് ക്ലാസിഫൈ ചെയ്യുന്നതിൽ എങ്ങനെ സഹായിക്കാമെന്ന് നോക്കാം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Loading dataset...\n",
|
||||
"Building vocab...\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import torch\n",
|
||||
"import torchtext\n",
|
||||
"from torchnlp import *\n",
|
||||
"train_dataset, test_dataset, classes, vocab = load_dataset()\n",
|
||||
"vocab_size = len(vocab)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## ലളിതമായ RNN ക്ലാസിഫയർ\n",
|
||||
"\n",
|
||||
"ലളിതമായ RNN-ൽ, ഓരോ റികറന്റ് യൂണിറ്റും ഒരു ലളിതമായ ലീനിയർ നെറ്റ്വർക്കാണ്, ഇത് ചേർത്തിട്ടുള്ള ഇൻപുട്ട് വെക്ടറും സ്റ്റേറ്റ് വെക്ടറും സ്വീകരിച്ച് പുതിയ സ്റ്റേറ്റ് വെക്ടർ ഉത്പാദിപ്പിക്കുന്നു. PyTorch ഈ യൂണിറ്റ് `RNNCell` ക്ലാസ്സായി പ്രതിനിധീകരിക്കുന്നു, ഇത്തരത്തിലുള്ള സെല്ലുകളുടെ നെറ്റ്വർക്ക് `RNN` ലെയർ ആയി.\n",
|
||||
"\n",
|
||||
"ഒരു RNN ക്ലാസിഫയർ നിർവചിക്കാൻ, ആദ്യം ഇൻപുട്ട് വാക്കുകളുടെ ഡൈമെൻഷണാലിറ്റി കുറയ്ക്കാൻ ഒരു എംബെഡ്ഡിംഗ് ലെയർ പ്രയോഗിച്ച്, അതിന്റെ മുകളിൽ RNN ലെയർ ഉപയോഗിക്കും:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class RNNClassifier(torch.nn.Module):\n",
|
||||
" def __init__(self, vocab_size, embed_dim, hidden_dim, num_class):\n",
|
||||
" super().__init__()\n",
|
||||
" self.hidden_dim = hidden_dim\n",
|
||||
" self.embedding = torch.nn.Embedding(vocab_size, embed_dim)\n",
|
||||
" self.rnn = torch.nn.RNN(embed_dim,hidden_dim,batch_first=True)\n",
|
||||
" self.fc = torch.nn.Linear(hidden_dim, num_class)\n",
|
||||
"\n",
|
||||
" def forward(self, x):\n",
|
||||
" batch_size = x.size(0)\n",
|
||||
" x = self.embedding(x)\n",
|
||||
" x,h = self.rnn(x)\n",
|
||||
" return self.fc(x.mean(dim=1))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **കുറിപ്പ്:** ലളിതത്വത്തിനായി ഇവിടെ ഞങ്ങൾ പരിശീലനമില്ലാത്ത embedding ലെയർ ഉപയോഗിക്കുന്നു, എന്നാൽ മുൻവശം യൂണിറ്റിൽ വിവരിച്ച പോലെ Word2Vec അല്ലെങ്കിൽ GloVe embeddings ഉപയോഗിച്ച് മുൻപരിചയമുള്ള embedding ലെയർ ഉപയോഗിച്ചാൽ കൂടുതൽ മികച്ച ഫലങ്ങൾ ലഭിക്കും. കൂടുതൽ മനസ്സിലാക്കാൻ, നിങ്ങൾക്ക് ഈ കോഡ് മുൻപരിചയമുള്ള embeddings ഉപയോഗിച്ച് പ്രവർത്തിക്കാൻ മാറ്റാം.\n",
|
||||
"\n",
|
||||
"നമ്മുടെ കേസിൽ, നാം പാഡഡ് ഡാറ്റ ലോഡർ ഉപയോഗിക്കും, അതിനാൽ ഓരോ ബാച്ചിലും ഒരേ നീളമുള്ള പാഡഡ് സീക്വൻസുകളുടെ എണ്ണം ഉണ്ടാകും. RNN ലെയർ embedding ടെൻസറുകളുടെ സീക്വൻസ് സ്വീകരിച്ച് രണ്ട് ഔട്ട്പുട്ടുകൾ നൽകും: \n",
|
||||
"* $x$ ഓരോ ഘട്ടത്തിലും RNN സെൽ ഔട്ട്പുട്ടുകളുടെ സീക്വൻസ് ആണ് \n",
|
||||
"* $h$ സീക്വൻസിന്റെ അവസാന ഘടകത്തിനുള്ള അന്തിമ ഹിഡൻ സ്റ്റേറ്റ് ആണ് \n",
|
||||
"\n",
|
||||
"അതിനുശേഷം, ക്ലാസുകളുടെ എണ്ണം ലഭിക്കാൻ ഒരു ഫുൾലി-കണക്ടഡ് ലീനിയർ ക്ലാസിഫയർ പ്രയോഗിക്കും.\n",
|
||||
"\n",
|
||||
"> **കുറിപ്പ്:** RNN-കൾ പരിശീലിപ്പിക്കാൻ വളരെ ബുദ്ധിമുട്ടാണ്, കാരണം RNN സെലുകൾ സീക്വൻസ് നീളത്തോട് ചേർന്ന് അനറോൾ ചെയ്തപ്പോൾ, ബാക്ക് പ്രൊപ്പഗേഷനിൽ ഉൾപ്പെടുന്ന ലെയറുകളുടെ എണ്ണം വളരെ കൂടുതലാകും. അതിനാൽ ചെറിയ ലേണിംഗ് റേറ്റ് തിരഞ്ഞെടുക്കേണ്ടതുണ്ട്, കൂടാതെ നല്ല ഫലങ്ങൾ ലഭിക്കാൻ വലിയ ഡാറ്റാസെറ്റിൽ നെറ്റ്വർക്ക് പരിശീലിപ്പിക്കണം. ഇത് വളരെ സമയം എടുക്കാം, അതിനാൽ GPU ഉപയോഗിക്കുന്നത് മുൻഗണനയുള്ളതാണ്.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.3090625\n",
|
||||
"6400: acc=0.38921875\n",
|
||||
"9600: acc=0.4590625\n",
|
||||
"12800: acc=0.511953125\n",
|
||||
"16000: acc=0.5506875\n",
|
||||
"19200: acc=0.57921875\n",
|
||||
"22400: acc=0.6070089285714285\n",
|
||||
"25600: acc=0.6304296875\n",
|
||||
"28800: acc=0.6484027777777778\n",
|
||||
"32000: acc=0.66509375\n",
|
||||
"35200: acc=0.6790056818181818\n",
|
||||
"38400: acc=0.6929166666666666\n",
|
||||
"41600: acc=0.7035817307692308\n",
|
||||
"44800: acc=0.7137276785714286\n",
|
||||
"48000: acc=0.72225\n",
|
||||
"51200: acc=0.73001953125\n",
|
||||
"54400: acc=0.7372794117647059\n",
|
||||
"57600: acc=0.7436631944444444\n",
|
||||
"60800: acc=0.7503947368421052\n",
|
||||
"64000: acc=0.75634375\n",
|
||||
"67200: acc=0.7615773809523809\n",
|
||||
"70400: acc=0.7662642045454545\n",
|
||||
"73600: acc=0.7708423913043478\n",
|
||||
"76800: acc=0.7751822916666666\n",
|
||||
"80000: acc=0.7790625\n",
|
||||
"83200: acc=0.7825\n",
|
||||
"86400: acc=0.7858564814814815\n",
|
||||
"89600: acc=0.7890513392857142\n",
|
||||
"92800: acc=0.7920474137931034\n",
|
||||
"96000: acc=0.7952708333333334\n",
|
||||
"99200: acc=0.7982258064516129\n",
|
||||
"102400: acc=0.80099609375\n",
|
||||
"105600: acc=0.8037594696969697\n",
|
||||
"108800: acc=0.8060569852941176\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=16, collate_fn=padify, shuffle=True)\n",
|
||||
"net = RNNClassifier(vocab_size,64,32,len(classes)).to(device)\n",
|
||||
"train_epoch(net,train_loader, lr=0.001)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## ലോങ് ഷോർട്ട് ടേം മെമ്മറി (LSTM)\n",
|
||||
"\n",
|
||||
"ക്ലാസിക്കൽ RNN-കളുടെ പ്രധാന പ്രശ്നങ്ങളിൽ ഒന്നാണ്所谓 **വാനിഷിംഗ് ഗ്രേഡിയന്റ്സ്** പ്രശ്നം. RNN-കൾ ഒരു ബാക്ക്-പ്രൊപ്പഗേഷൻ പാസിൽ എന്റു-ടു-എൻഡ് പരിശീലിപ്പിക്കപ്പെടുന്നതിനാൽ, നെറ്റ്വർക്കിന്റെ ആദ്യ ലെയറുകളിലേക്ക് പിശക് പ്രചരിപ്പിക്കാൻ ബുദ്ധിമുട്ട് അനുഭവപ്പെടുന്നു, അതിനാൽ ദൂരെയുള്ള ടോക്കണുകൾ തമ്മിലുള്ള ബന്ധങ്ങൾ നെറ്റ്വർക്ക് പഠിക്കാൻ കഴിയുന്നില്ല. ഈ പ്രശ്നം ഒഴിവാക്കാനുള്ള മാർഗങ്ങളിൽ ഒന്നാണ്所谓 **സ്പഷ്ടമായ സ്റ്റേറ്റ് മാനേജ്മെന്റ്** പരിചയപ്പെടുത്തുക, അതായത്所谓 **ഗേറ്റുകൾ** ഉപയോഗിക്കുക. ഇതിന്റെ രണ്ട് ഏറ്റവും പ്രശസ്തമായ ആർക്കിടെക്ചറുകൾ: **ലോങ് ഷോർട്ട് ടേം മെമ്മറി** (LSTM)യും **ഗേറ്റഡ് റീലേ യൂണിറ്റ്** (GRU)യും ആണ്.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"LSTM നെറ്റ്വർക്ക് RNN-നെപ്പോലെ ക്രമീകരിച്ചിരിക്കുന്നു, പക്ഷേ രണ്ട് സ്റ്റേറ്റുകൾ ലെയർ മുതൽ ലെയർ വരെ കൈമാറപ്പെടുന്നു: യഥാർത്ഥ സ്റ്റേറ്റ് $c$, ഒപ്പം ഹിഡൻ വെക്ടർ $h$. ഓരോ യൂണിറ്റിലും, ഹിഡൻ വെക്ടർ $h_i$ ഇൻപുട്ട് $x_i$-യുമായി ചേർത്ത്, **ഗേറ്റുകൾ** വഴി സ്റ്റേറ്റ് $c$-വിൽ എന്ത് സംഭവിക്കുമെന്ന് നിയന്ത്രിക്കുന്നു. ഓരോ ഗേറ്റും സിഗ്മോയ്ഡ് ആക്ടിവേഷൻ ഉള്ള ഒരു ന്യൂറൽ നെറ്റ്വർക്ക് ആണ് (ഔട്ട്പുട്ട് $[0,1]$ പരിധിയിൽ), ഇത് സ്റ്റേറ്റ് വെക്ടറുമായി ഗുണിക്കുമ്പോൾ ബിറ്റ്വൈസ് മാസ്ക് പോലെ കരുതാം. ചിത്രത്തിൽ ഇടത്തുനിന്ന് വലത്തേക്ക് താഴെപ്പറയുന്ന ഗേറ്റുകൾ ഉണ്ട്:\n",
|
||||
"* **ഫോർഗറ്റ് ഗേറ്റ്** ഹിഡൻ വെക്ടർ എടുത്ത്, സ്റ്റേറ്റ് വെക്ടർ $c$-യിലെ ഏത് ഘടകങ്ങൾ മറക്കണം, ഏത് കടത്തിക്കയറ്റണം എന്ന് നിർണ്ണയിക്കുന്നു.\n",
|
||||
"* **ഇൻപുട്ട് ഗേറ്റ്** ഇൻപുട്ടിൽ നിന്നും ഹിഡൻ വെക്ടറിൽ നിന്നും ചില വിവരങ്ങൾ എടുത്ത് സ്റ്റേറ്റിൽ ചേർക്കുന്നു.\n",
|
||||
"* **ഔട്ട്പുട്ട് ഗേറ്റ്** സ്റ്റേറ്റ് ഒരു ലീനിയർ ലെയർ വഴി $\\tanh$ ആക്ടിവേഷൻ ഉപയോഗിച്ച് മാറ്റി, പിന്നീട് ഹിഡൻ വെക്ടർ $h_i$ ഉപയോഗിച്ച് അതിന്റെ ചില ഘടകങ്ങൾ തിരഞ്ഞെടുക്കുന്നു, പുതിയ സ്റ്റേറ്റ് $c_{i+1}$ ഉൽപ്പാദിപ്പിക്കാൻ.\n",
|
||||
"\n",
|
||||
"സ്റ്റേറ്റ് $c$-യുടെ ഘടകങ്ങളെ ഓൺ-ഓഫ് ചെയ്യാവുന്ന ഫ്ലാഗുകളായി കരുതാം. ഉദാഹരണത്തിന്, സീക്വൻസിൽ *Alice* എന്ന പേര് കണ്ടപ്പോൾ, അത് സ്ത്രീപേരായ കഥാപാത്രത്തെ സൂചിപ്പിക്കുന്നതായി കരുതാൻ ആഗ്രഹിക്കാം, അതിനാൽ വാചകത്തിൽ സ്ത്രീപേരുള്ളതായി സ്റ്റേറ്റിൽ ഫ്ലാഗ് ഉയർത്താം. പിന്നീട് *and Tom* എന്ന വാചകങ്ങൾ കണ്ടപ്പോൾ, ബഹുവചന നാമം ഉള്ളതായി ഫ്ലാഗ് ഉയർത്തും. അതിനാൽ സ്റ്റേറ്റ് നിയന്ത്രിച്ച് വാചകഭാഗങ്ങളുടെ വ്യാകരണ ഗുണങ്ങൾ ട്രാക്ക് ചെയ്യാൻ കഴിയും.\n",
|
||||
"\n",
|
||||
"> **Note**: LSTM-യുടെ ആന്തരിക ഘടന മനസ്സിലാക്കാൻ മികച്ച ഒരു വിഭവം Christopher Olah എഴുതിയ [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) എന്ന ലേഖനമാണ്.\n",
|
||||
"\n",
|
||||
"LSTM സെല്ലിന്റെ ആന്തരിക ഘടന സങ്കീർണ്ണമായിരിക്കാം, പക്ഷേ PyTorch `LSTMCell` ക്ലാസ്സിൽ ഈ ഇംപ്ലിമെന്റേഷൻ മറച്ചുവെക്കുന്നു, കൂടാതെ മുഴുവൻ LSTM ലെയർ പ്രതിനിധീകരിക്കാൻ `LSTM` ഒബ്ജക്റ്റ് നൽകുന്നു. അതിനാൽ, LSTM ക്ലാസിഫയർ ഇംപ്ലിമെന്റേഷൻ മുകളിൽ കാണിച്ച ലളിതമായ RNN-നെപ്പോലെ തന്നെ ആയിരിക്കും:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class LSTMClassifier(torch.nn.Module):\n",
|
||||
" def __init__(self, vocab_size, embed_dim, hidden_dim, num_class):\n",
|
||||
" super().__init__()\n",
|
||||
" self.hidden_dim = hidden_dim\n",
|
||||
" self.embedding = torch.nn.Embedding(vocab_size, embed_dim)\n",
|
||||
" self.embedding.weight.data = torch.randn_like(self.embedding.weight.data)-0.5\n",
|
||||
" self.rnn = torch.nn.LSTM(embed_dim,hidden_dim,batch_first=True)\n",
|
||||
" self.fc = torch.nn.Linear(hidden_dim, num_class)\n",
|
||||
"\n",
|
||||
" def forward(self, x):\n",
|
||||
" batch_size = x.size(0)\n",
|
||||
" x = self.embedding(x)\n",
|
||||
" x,(h,c) = self.rnn(x)\n",
|
||||
" return self.fc(h[-1])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഇപ്പോൾ നമുക്ക് നമ്മുടെ നെറ്റ്വർക്ക് പരിശീലിപ്പിക്കാം. LSTM പരിശീലിപ്പിക്കുന്നത് വളരെ മന്ദഗതിയിലാണ് എന്നതും ശ്രദ്ധിക്കുക, പരിശീലനത്തിന്റെ തുടക്കത്തിൽ കൃത്യതയിൽ വലിയ വർദ്ധനവ് കാണാനാകില്ല. കൂടാതെ, യുക്തിസഹമായ പരിശീലന വേഗത ലഭിക്കുന്നതിനും മെമ്മറി വൃത്തിയാക്കൽ ഒഴിവാക്കുന്നതിനും `lr` ലേണിംഗ് റേറ്റ് പാരാമീറ്ററുമായി പരീക്ഷണം നടത്തേണ്ടതുണ്ടാകും.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.259375\n",
|
||||
"6400: acc=0.25859375\n",
|
||||
"9600: acc=0.26177083333333334\n",
|
||||
"12800: acc=0.2784375\n",
|
||||
"16000: acc=0.313\n",
|
||||
"19200: acc=0.3528645833333333\n",
|
||||
"22400: acc=0.3965625\n",
|
||||
"25600: acc=0.4385546875\n",
|
||||
"28800: acc=0.4752777777777778\n",
|
||||
"32000: acc=0.505375\n",
|
||||
"35200: acc=0.5326704545454546\n",
|
||||
"38400: acc=0.5557552083333334\n",
|
||||
"41600: acc=0.5760817307692307\n",
|
||||
"44800: acc=0.5954910714285714\n",
|
||||
"48000: acc=0.6118333333333333\n",
|
||||
"51200: acc=0.62681640625\n",
|
||||
"54400: acc=0.6404779411764706\n",
|
||||
"57600: acc=0.6520138888888889\n",
|
||||
"60800: acc=0.662828947368421\n",
|
||||
"64000: acc=0.673546875\n",
|
||||
"67200: acc=0.6831547619047619\n",
|
||||
"70400: acc=0.6917897727272727\n",
|
||||
"73600: acc=0.6997146739130434\n",
|
||||
"76800: acc=0.707109375\n",
|
||||
"80000: acc=0.714075\n",
|
||||
"83200: acc=0.7209134615384616\n",
|
||||
"86400: acc=0.727037037037037\n",
|
||||
"89600: acc=0.7326674107142858\n",
|
||||
"92800: acc=0.7379633620689655\n",
|
||||
"96000: acc=0.7433645833333333\n",
|
||||
"99200: acc=0.7479032258064516\n",
|
||||
"102400: acc=0.752119140625\n",
|
||||
"105600: acc=0.7562405303030303\n",
|
||||
"108800: acc=0.76015625\n",
|
||||
"112000: acc=0.7641339285714286\n",
|
||||
"115200: acc=0.7677777777777778\n",
|
||||
"118400: acc=0.7711233108108108\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(0.03487814127604167, 0.7728)"
|
||||
]
|
||||
},
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"net = LSTMClassifier(vocab_size,64,32,len(classes)).to(device)\n",
|
||||
"train_epoch(net,train_loader, lr=0.001)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## പാക്ക് ചെയ്ത സീക്വൻസുകൾ\n",
|
||||
"\n",
|
||||
"നമ്മുടെ ഉദാഹരണത്തിൽ, മിനിബാച്ചിലെ എല്ലാ സീക്വൻസുകളും സീറോ വെക്ടറുകളാൽ പാഡ് ചെയ്യേണ്ടിവന്നു. ഇത് ചില മെമ്മറി വൃത്തിയാക്കലുകൾ ഉണ്ടാക്കുമ്പോഴും, RNN-കളിൽ പാഡ് ചെയ്ത ഇൻപുട്ട് ഐറ്റങ്ങൾക്കായി അധിക RNN സെല്ലുകൾ സൃഷ്ടിക്കപ്പെടുന്നത് കൂടുതൽ പ്രശ്നമാണ്, അവ പരിശീലനത്തിൽ പങ്കാളികളാകുന്നു, എന്നാൽ പ്രധാനപ്പെട്ട ഇൻപുട്ട് വിവരങ്ങൾ കൈമാറുന്നില്ല. യഥാർത്ഥ സീക്വൻസിന്റെ വലുപ്പം മാത്രം RNN-നെ പരിശീലിപ്പിക്കുന്നത് വളരെ നല്ലതാണ്.\n",
|
||||
"\n",
|
||||
"അത് ചെയ്യാൻ, PyTorch-ൽ പാഡ് ചെയ്ത സീക്വൻസുകൾ സൂക്ഷിക്കുന്ന പ്രത്യേക ഫോർമാറ്റ് പരിചയപ്പെടുത്തി. നമുക്ക് പാഡ് ചെയ്ത മിനിബാച്ച് ഇങ്ങനെ ഉണ്ടെന്ന് കരുതുക:\n",
|
||||
"```\n",
|
||||
"[[1,2,3,4,5],\n",
|
||||
" [6,7,8,0,0],\n",
|
||||
" [9,0,0,0,0]]\n",
|
||||
"```\n",
|
||||
"ഇവിടെ 0 പാഡ് ചെയ്ത മൂല്യങ്ങളെ പ്രതിനിധീകരിക്കുന്നു, ഇൻപുട്ട് സീക്വൻസുകളുടെ യഥാർത്ഥ നീളം `[5,3,1]` ആണ്.\n",
|
||||
"\n",
|
||||
"പാഡ് ചെയ്ത സീക്വൻസുമായി ഫലപ്രദമായി RNN പരിശീലിപ്പിക്കാൻ, ആദ്യം വലിയ മിനിബാച്ച് (`[1,6,9]`) ഉപയോഗിച്ച് RNN സെല്ലുകളുടെ ആദ്യ ഗ്രൂപ്പ് പരിശീലിപ്പിക്കാൻ ആഗ്രഹിക്കുന്നു, പിന്നീട് മൂന്നാം സീക്വൻസിന്റെ പ്രോസസ്സിംഗ് അവസാനിപ്പിച്ച്, ചെറുതായ മിനിബാച്ചുകളുമായി (`[2,7]`, `[3,8]`) പരിശീലനം തുടരുക, ഇങ്ങനെ തുടരും. അതിനാൽ, പാക്ക് ചെയ്ത സീക്വൻസ് ഒരു വെക്ടറായി പ്രതിനിധീകരിക്കുന്നു - നമ്മുടെ ഉദാഹരണത്തിൽ `[1,6,9,2,7,3,8,4,5]`, കൂടാതെ നീളം വെക്ടർ (`[5,3,1]`), ഇതിൽ നിന്ന് നമുക്ക് യഥാർത്ഥ പാഡ് ചെയ്ത മിനിബാച്ച് പുനഃസംഘടിപ്പിക്കാൻ കഴിയും.\n",
|
||||
"\n",
|
||||
"പാക്ക് ചെയ്ത സീക്വൻസ് ഉണ്ടാക്കാൻ, `torch.nn.utils.rnn.pack_padded_sequence` ഫംഗ്ഷൻ ഉപയോഗിക്കാം. RNN, LSTM, GRU ഉൾപ്പെടെയുള്ള എല്ലാ റിക്കറന്റ് ലെയറുകളും പാക്ക് ചെയ്ത സീക്വൻസുകൾ ഇൻപുട്ടായി സ്വീകരിക്കുകയും പാക്ക് ചെയ്ത ഔട്ട്പുട്ട് നൽകുകയും ചെയ്യുന്നു, അത് `torch.nn.utils.rnn.pad_packed_sequence` ഉപയോഗിച്ച് ഡീകോഡ് ചെയ്യാം.\n",
|
||||
"\n",
|
||||
"പാക്ക് ചെയ്ത സീക്വൻസ് ഉണ്ടാക്കാൻ, നീളം വെക്ടർ നെറ്റ്വർക്കിലേക്ക് പാസ്സ് ചെയ്യേണ്ടതുണ്ട്, അതിനാൽ മിനിബാച്ചുകൾ തയ്യാറാക്കാൻ വ്യത്യസ്തമായ ഫംഗ്ഷൻ ആവശ്യമുണ്ട്:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def pad_length(b):\n",
|
||||
" # build vectorized sequence\n",
|
||||
" v = [encode(x[1]) for x in b]\n",
|
||||
" # compute max length of a sequence in this minibatch and length sequence itself\n",
|
||||
" len_seq = list(map(len,v))\n",
|
||||
" l = max(len_seq)\n",
|
||||
" return ( # tuple of three tensors - labels, padded features, length sequence\n",
|
||||
" torch.LongTensor([t[0]-1 for t in b]),\n",
|
||||
" torch.stack([torch.nn.functional.pad(torch.tensor(t),(0,l-len(t)),mode='constant',value=0) for t in v]),\n",
|
||||
" torch.tensor(len_seq)\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
"train_loader_len = torch.utils.data.DataLoader(train_dataset, batch_size=16, collate_fn=pad_length, shuffle=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"യഥാർത്ഥ നെറ്റ്വർക്ക് മുകളിൽ കാണിച്ച `LSTMClassifier`-നെപ്പോലെ തന്നെ ആയിരിക്കും, പക്ഷേ `forward` പാസ് പാഡുചെയ്ത മിനിബാച്ചും സീക്വൻസ് നീളങ്ങളുടെ വെക്ടറും സ്വീകരിക്കും. എംബെഡിംഗ് കണക്കാക്കിയ ശേഷം, പാക്ക് ചെയ്ത സീക്വൻസ് കണക്കാക്കി, അത് LSTM ലെയറിലേക്ക് അയച്ച്, പിന്നീട് ഫലം വീണ്ടും അൺപാക്ക് ചെയ്യും.\n",
|
||||
"\n",
|
||||
"> **Note**: നാം യഥാർത്ഥത്തിൽ അൺപാക്ക് ചെയ്ത ഫലം `x` ഉപയോഗിക്കുന്നില്ല, കാരണം നാം ഹിഡൻ ലെയറുകളിൽ നിന്നുള്ള ഔട്ട്പുട്ട് അടുത്ത കണക്കുകളിൽ ഉപയോഗിക്കുന്നു. അതിനാൽ, ഈ കോഡിൽ നിന്ന് അൺപാക്കിംഗ് പൂർണ്ണമായും നീക്കം ചെയ്യാം. ഇത് ഇവിടെ ഉൾപ്പെടുത്തിയിരിക്കുന്നത്, നിങ്ങൾക്ക് ഈ കോഡ് എളുപ്പത്തിൽ മാറ്റാൻ കഴിയുന്ന വിധം ആണ്, നെറ്റ്വർക്ക് ഔട്ട്പുട്ട് പിന്നീട് കണക്കുകളിൽ ഉപയോഗിക്കേണ്ടിവന്നാൽ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class LSTMPackClassifier(torch.nn.Module):\n",
|
||||
" def __init__(self, vocab_size, embed_dim, hidden_dim, num_class):\n",
|
||||
" super().__init__()\n",
|
||||
" self.hidden_dim = hidden_dim\n",
|
||||
" self.embedding = torch.nn.Embedding(vocab_size, embed_dim)\n",
|
||||
" self.embedding.weight.data = torch.randn_like(self.embedding.weight.data)-0.5\n",
|
||||
" self.rnn = torch.nn.LSTM(embed_dim,hidden_dim,batch_first=True)\n",
|
||||
" self.fc = torch.nn.Linear(hidden_dim, num_class)\n",
|
||||
"\n",
|
||||
" def forward(self, x, lengths):\n",
|
||||
" batch_size = x.size(0)\n",
|
||||
" x = self.embedding(x)\n",
|
||||
" pad_x = torch.nn.utils.rnn.pack_padded_sequence(x,lengths,batch_first=True,enforce_sorted=False)\n",
|
||||
" pad_x,(h,c) = self.rnn(pad_x)\n",
|
||||
" x, _ = torch.nn.utils.rnn.pad_packed_sequence(pad_x,batch_first=True)\n",
|
||||
" return self.fc(h[-1])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഇപ്പോൾ പരിശീലനം നടത്താം:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.285625\n",
|
||||
"6400: acc=0.33359375\n",
|
||||
"9600: acc=0.3876041666666667\n",
|
||||
"12800: acc=0.44078125\n",
|
||||
"16000: acc=0.4825\n",
|
||||
"19200: acc=0.5235416666666667\n",
|
||||
"22400: acc=0.5559821428571429\n",
|
||||
"25600: acc=0.58609375\n",
|
||||
"28800: acc=0.6116666666666667\n",
|
||||
"32000: acc=0.63340625\n",
|
||||
"35200: acc=0.6525284090909091\n",
|
||||
"38400: acc=0.668515625\n",
|
||||
"41600: acc=0.6822596153846154\n",
|
||||
"44800: acc=0.6948214285714286\n",
|
||||
"48000: acc=0.7052708333333333\n",
|
||||
"51200: acc=0.71521484375\n",
|
||||
"54400: acc=0.7239889705882353\n",
|
||||
"57600: acc=0.7315277777777778\n",
|
||||
"60800: acc=0.7388486842105263\n",
|
||||
"64000: acc=0.74571875\n",
|
||||
"67200: acc=0.7518303571428572\n",
|
||||
"70400: acc=0.7576988636363636\n",
|
||||
"73600: acc=0.7628940217391305\n",
|
||||
"76800: acc=0.7681510416666667\n",
|
||||
"80000: acc=0.7728125\n",
|
||||
"83200: acc=0.7772235576923077\n",
|
||||
"86400: acc=0.7815393518518519\n",
|
||||
"89600: acc=0.7857700892857142\n",
|
||||
"92800: acc=0.7895043103448276\n",
|
||||
"96000: acc=0.7930520833333333\n",
|
||||
"99200: acc=0.7959072580645161\n",
|
||||
"102400: acc=0.798994140625\n",
|
||||
"105600: acc=0.802064393939394\n",
|
||||
"108800: acc=0.8051378676470589\n",
|
||||
"112000: acc=0.8077857142857143\n",
|
||||
"115200: acc=0.8104600694444445\n",
|
||||
"118400: acc=0.8128293918918919\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(0.029785829671223958, 0.8138166666666666)"
|
||||
]
|
||||
},
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"net = LSTMPackClassifier(vocab_size,64,32,len(classes)).to(device)\n",
|
||||
"train_epoch_emb(net,train_loader_len, lr=0.001,use_pack_sequence=True)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **കുറിപ്പ്:** നാം ട്രെയിനിംഗ് ഫംഗ്ഷനിലേക്ക് പാസ്സ് ചെയ്യുന്ന `use_pack_sequence` പാരാമീറ്റർ നിങ്ങൾ ശ്രദ്ധിച്ചിരിക്കാം. നിലവിൽ, `pack_padded_sequence` ഫംഗ്ഷന് length sequence ടെൻസർ CPU ഡിവൈസിൽ വേണം, അതിനാൽ ട്രെയിനിംഗ് ഫംഗ്ഷൻ length sequence ഡാറ്റ GPU-യിലേക്ക് മാറ്റുന്നത് ഒഴിവാക്കണം. നിങ്ങൾക്ക് [`torchnlp.py`](../../../../../lessons/5-NLP/16-RNN/torchnlp.py) ഫയലിലെ `train_emb` ഫംഗ്ഷന്റെ ഇംപ്ലിമെന്റേഷൻ പരിശോധിക്കാം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## ദ്വിദിശയും ബഹുസ്തര RNN-കളും\n",
|
||||
"\n",
|
||||
"നമ്മുടെ ഉദാഹരണങ്ങളിൽ, എല്ലാ റികറന്റ് നെറ്റ്വർക്കുകളും ഒരു ദിശയിൽ പ്രവർത്തിച്ചിരുന്നു, ഒരു സീക്വൻസിന്റെ തുടക്കത്തിൽ നിന്ന് അവസാനം വരെ. ഇത് സ്വാഭാവികമാണ്, കാരണം ഇത് നാം വായിക്കുകയും സംസാരശ്രവണം നടത്തുകയും ചെയ്യുന്ന രീതിയെ അനുകരിക്കുന്നു. എന്നാൽ, പല പ്രായോഗിക സാഹചര്യങ്ങളിലും നമുക്ക് ഇൻപുട്ട് സീക്വൻസിലേക്ക് യാദൃച്ഛിക ആക്സസ് ലഭിക്കുന്നതിനാൽ, റികറന്റ് കണക്കുകൂട്ടൽ ഇരുവശത്തും നടത്തുന്നത് ബുദ്ധിമുട്ടില്ല. ഇത്തരം നെറ്റ്വർക്കുകൾ **ദ്വിദിശ RNN-കൾ** എന്ന് വിളിക്കപ്പെടുന്നു, അവ RNN/LSTM/GRU കൺസ്ട്രക്ടറിലേക്ക് `bidirectional=True` പാരാമീറ്റർ നൽകി സൃഷ്ടിക്കാം.\n",
|
||||
"\n",
|
||||
"ദ്വിദിശ നെറ്റ്വർക്കുമായി ഇടപഴകുമ്പോൾ, ഓരോ ദിശയ്ക്കും ഒരു ഹിഡൻ സ്റ്റേറ്റ് വെക്ടർ വേണം. PyTorch ആ വെക്ടറുകൾ ഇരട്ട വലുപ്പമുള്ള ഒരു വെക്ടറായി കോഡുചെയ്യുന്നു, ഇത് വളരെ സൗകര്യപ്രദമാണ്, കാരണം സാധാരണയായി നിങ്ങൾ ഫലമായ ഹിഡൻ സ്റ്റേറ്റ് ഫുൾ-കണക്ടഡ് ലിനിയർ ലെയറിലേക്ക് പാസ്സ് ചെയ്യുക, അതിനാൽ ലെയർ സൃഷ്ടിക്കുമ്പോൾ ഈ വലുപ്പ വർദ്ധനവ് പരിഗണിക്കേണ്ടതുണ്ട്.\n",
|
||||
"\n",
|
||||
"റികറന്റ് നെറ്റ്വർക്ക്, ഒരുദിശയിലോ ദ്വിദിശയിലോ, ഒരു സീക്വൻസിനുള്ളിൽ ചില പാറ്റേണുകൾ പിടിച്ചുപറ്റുകയും അവ സ്റ്റേറ്റ് വെക്ടറിലോ ഔട്ട്പുട്ടിലോ സൂക്ഷിക്കുകയും ചെയ്യുന്നു. കോൺവല്യൂഷണൽ നെറ്റ്വർക്കുകളെപ്പോലെ, നാം ആദ്യ ലെയറിന്റെ മുകളിൽ മറ്റൊരു റികറന്റ് ലെയർ നിർമ്മിച്ച് ഉയർന്ന തലത്തിലുള്ള പാറ്റേണുകൾ പിടിച്ചുപറ്റാം, ആദ്യ ലെയർ കണ്ടെത്തിയ താഴ്ന്ന തലത്തിലുള്ള പാറ്റേണുകളിൽ നിന്നാണ് ഇത് നിർമ്മിക്കുന്നത്. ഇതാണ് **ബഹുസ്തര RNN** എന്ന ആശയം, ഇത് രണ്ട് അല്ലെങ്കിൽ അതിലധികം റികറന്റ് നെറ്റ്വർക്കുകൾ ഉൾക്കൊള്ളുന്നു, മുൻ ലെയറിന്റെ ഔട്ട്പുട്ട് അടുത്ത ലെയറിന്റെ ഇൻപുട്ടായി പാസ്സ് ചെയ്യപ്പെടുന്നു.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*ഫെർണാണ്ടോ ലോപ്പസ് എഴുതിയ [ഈ മനോഹരമായ പോസ്റ്റ്](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3) നിന്നുള്ള ചിത്രം*\n",
|
||||
"\n",
|
||||
"PyTorch ഇത്തരത്തിലുള്ള നെറ്റ്വർക്കുകൾ നിർമ്മിക്കുന്നത് എളുപ്പമാണ്, കാരണം RNN/LSTM/GRU കൺസ്ട്രക്ടറിലേക്ക് `num_layers` പാരാമീറ്റർ പാസ്സ് ചെയ്താൽ സ്വയം പല ലെയറുകളുള്ള റികറൻസ് നിർമ്മിക്കും. ഇതിന്റെ ഫലമായി ഹിഡൻ/സ്റ്റേറ്റ് വെക്ടറിന്റെ വലുപ്പം അനുപാതമായി വർദ്ധിക്കും, അതിനാൽ റികറന്റ് ലെയറുകളുടെ ഔട്ട്പുട്ട് കൈകാര്യം ചെയ്യുമ്പോൾ ഇത് പരിഗണിക്കേണ്ടതുണ്ട്.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## മറ്റ് ജോലികൾക്കുള്ള RNNകൾ\n",
|
||||
"\n",
|
||||
"ഈ യൂണിറ്റിൽ, RNNകൾ ക്രമം തിരിച്ചറിയലിനായി ഉപയോഗിക്കാമെന്ന് നാം കണ്ടു, എന്നാൽ യഥാർത്ഥത്തിൽ, അവ ടെക്സ്റ്റ് ജനറേഷൻ, മെഷീൻ വിവർത്തനം തുടങ്ങിയ നിരവധി ജോലികൾ കൈകാര്യം ചെയ്യാൻ കഴിയും. ആ ജോലികൾ അടുത്ത യൂണിറ്റിൽ നാം പരിഗണിക്കും.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**അസൂയാ**: \nഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.12 ('py38')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.8.12"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "522ee52ae3d5ae933e283286254e9a55",
|
||||
"translation_date": "2025-11-26T02:01:47+00:00",
|
||||
"source_file": "lessons/5-NLP/16-RNN/RNNPyTorch.ipynb",
|
||||
"language_code": "ml"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# പുനരാവർത്തന ന്യൂറൽ നെറ്റ്വർക്കുകൾ\n",
|
||||
"\n",
|
||||
"മുൻ മോഡ്യൂളിൽ, നാം ടെക്സ്റ്റിന്റെ സമ്പന്നമായ സാംവേദനാത്മക പ്രതിനിധാനങ്ങൾ ഉപയോഗിച്ച്, എംബെഡിംഗുകളുടെ മുകളിൽ ഒരു ലളിതമായ ലീനിയർ ക്ലാസിഫയർ ഉപയോഗിച്ചിരുന്നു. ഈ ആർക്കിടെക്ചർ ചെയ്യുന്നത് ഒരു വാക്യത്തിലെ വാക്കുകളുടെ സംയുക്ത അർത്ഥം പിടിച്ചുപറ്റുകയാണ്, പക്ഷേ വാക്കുകളുടെ **ക്രമം** പരിഗണിക്കുന്നില്ല, കാരണം എംബെഡിംഗുകളുടെ മുകളിൽAggregation പ്രവർത്തനം ഈ വിവരങ്ങൾ യഥാർത്ഥ ടെക്സ്റ്റിൽ നിന്ന് നീക്കം ചെയ്യുന്നു. ഈ മോഡലുകൾ വാക്കുകളുടെ ക്രമീകരണം മോഡൽ ചെയ്യാൻ കഴിയാത്തതിനാൽ, ടെക്സ്റ്റ് ജനറേഷൻ അല്ലെങ്കിൽ ചോദ്യോത്തരങ്ങൾ പോലുള്ള കൂടുതൽ സങ്കീർണ്ണമായ അല്ലെങ്കിൽ സംശയാസ്പദമായ പ്രവർത്തനങ്ങൾ പരിഹരിക്കാൻ കഴിയില്ല.\n",
|
||||
"\n",
|
||||
"ടെക്സ്റ്റ് സീക്വൻസിന്റെ അർത്ഥം പിടിച്ചുപറ്റാൻ, നാം മറ്റൊരു ന്യൂറൽ നെറ്റ്വർക്ക് ആർക്കിടെക്ചർ ഉപയോഗിക്കേണ്ടതുണ്ട്, അതാണ് **പുനരാവർത്തന ന്യൂറൽ നെറ്റ്വർക്ക്** അല്ലെങ്കിൽ RNN. RNN-ൽ, നാം നമ്മുടെ വാക്യം ഒരു സിംബോളായി ഓരോ തവണയും നെറ്റ്വർക്കിലൂടെ കടത്തുന്നു, നെറ്റ്വർക്ക് ചില **സ്റ്റേറ്റ്** ഉൽപ്പാദിപ്പിക്കുന്നു, അത് പിന്നീട് അടുത്ത സിംബോളിനൊപ്പം വീണ്ടും നെറ്റ്വർക്കിലേക്ക് നൽകുന്നു.\n",
|
||||
"\n",
|
||||
"<img alt=\"RNN\" src=\"../../../../../translated_images/rnn.27f5c29c53d727b5.ml.png\" width=\"60%\"/>\n",
|
||||
"\n",
|
||||
"ഇൻപുട്ട് ടോക്കൺ സീക്വൻസ് $X_0,\\dots,X_n$ നൽകിയാൽ, RNN ഒരു ന്യൂറൽ നെറ്റ്വർക്ക് ബ്ലോക്കുകളുടെ സീക്വൻസ് സൃഷ്ടിക്കുന്നു, ഈ സീക്വൻസ് എന്റു-ടു-എൻഡ് ബാക്ക് പ്രൊപ്പഗേഷൻ ഉപയോഗിച്ച് പരിശീലിപ്പിക്കുന്നു. ഓരോ നെറ്റ്വർക്ക് ബ്ലോക്കും ഒരു ജോഡി $(X_i,S_i)$ ഇൻപുട്ടായി സ്വീകരിച്ച്, $S_{i+1}$ ഫലമായി ഉൽപ്പാദിപ്പിക്കുന്നു. അന്തിമ സ്റ്റേറ്റ് $S_n$ അല്ലെങ്കിൽ ഔട്ട്പുട്ട് $X_n$ ഒരു ലീനിയർ ക്ലാസിഫയറിലേക്ക് പോകുന്നു ഫലം ഉൽപ്പാദിപ്പിക്കാൻ. എല്ലാ നെറ്റ്വർക്ക് ബ്ലോക്കുകളും ഒരേ വെയ്റ്റുകൾ പങ്കുവെക്കുന്നു, ഒറ്റ ബാക്ക് പ്രൊപ്പഗേഷൻ പാസിലൂടെ എന്റു-ടു-എൻഡ് പരിശീലനം നടത്തുന്നു.\n",
|
||||
"\n",
|
||||
"സ്റ്റേറ്റ് വെക്ടറുകൾ $S_0,\\dots,S_n$ നെറ്റ്വർക്കിലൂടെ കടത്തപ്പെടുന്നതിനാൽ, വാക്കുകൾ തമ്മിലുള്ള അനുക്രമപരമായ ആശ്രിതത്വങ്ങൾ പഠിക്കാൻ ഇത് കഴിയും. ഉദാഹരണത്തിന്, സീക്വൻസിൽ *not* എന്ന വാക്ക് എവിടെയെങ്കിലും വന്നാൽ, സ്റ്റേറ്റ് വെക്ടറിലെ ചില ഘടകങ്ങളെ നിഷേധിക്കാൻ പഠിക്കാം, അതിലൂടെ നിഷേധം സൃഷ്ടിക്കുന്നു.\n",
|
||||
"\n",
|
||||
"> ചിത്രത്തിലെ എല്ലാ RNN ബ്ലോക്കുകളുടെ വെയ്റ്റുകളും പങ്കുവെക്കപ്പെടുന്നതിനാൽ, ഒരേ ചിത്രം ഒരു ബ്ലോക്കായി (വലതുവശത്ത്) പ്രതിനിധീകരിക്കാം, അതിൽ പുനരാവർത്തന ഫീഡ്ബാക്ക് ലൂപ്പ് ഉണ്ട്, ഇത് നെറ്റ്വർക്കിന്റെ ഔട്ട്പുട്ട് സ്റ്റേറ്റ് ഇൻപുട്ടിലേക്ക് തിരികെ നൽകുന്നു.\n",
|
||||
"\n",
|
||||
"പുനരാവർത്തന ന്യൂറൽ നെറ്റ്വർക്കുകൾ നമ്മുടെ വാർത്താ ഡാറ്റാസെറ്റ് ക്ലാസിഫൈ ചെയ്യുന്നതിൽ എങ്ങനെ സഹായിക്കാമെന്ന് നോക്കാം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Loading dataset...\n",
|
||||
"Building vocab...\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import torch\n",
|
||||
"import torchtext\n",
|
||||
"from torchnlp import *\n",
|
||||
"train_dataset, test_dataset, classes, vocab = load_dataset()\n",
|
||||
"vocab_size = len(vocab)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## ലളിതമായ RNN ക്ലാസിഫയർ\n",
|
||||
"\n",
|
||||
"ലളിതമായ RNN-ൽ, ഓരോ റികറന്റ് യൂണിറ്റും ഒരു ലളിതമായ ലീനിയർ നെറ്റ്വർക്കാണ്, ഇത് ചേർത്തിട്ടുള്ള ഇൻപുട്ട് വെക്ടറും സ്റ്റേറ്റ് വെക്ടറും സ്വീകരിച്ച് പുതിയ സ്റ്റേറ്റ് വെക്ടർ ഉത്പാദിപ്പിക്കുന്നു. PyTorch ഈ യൂണിറ്റ് `RNNCell` ക്ലാസ്സായി പ്രതിനിധീകരിക്കുന്നു, ഇത്തരത്തിലുള്ള സെല്ലുകളുടെ നെറ്റ്വർക്ക് `RNN` ലെയർ ആയി.\n",
|
||||
"\n",
|
||||
"ഒരു RNN ക്ലാസിഫയർ നിർവചിക്കാൻ, ആദ്യം ഇൻപുട്ട് വാക്കുകളുടെ ഡൈമെൻഷണാലിറ്റി കുറയ്ക്കാൻ ഒരു എംബെഡ്ഡിംഗ് ലെയർ പ്രയോഗിച്ച്, അതിന്റെ മുകളിൽ RNN ലെയർ ഉപയോഗിക്കും:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class RNNClassifier(torch.nn.Module):\n",
|
||||
" def __init__(self, vocab_size, embed_dim, hidden_dim, num_class):\n",
|
||||
" super().__init__()\n",
|
||||
" self.hidden_dim = hidden_dim\n",
|
||||
" self.embedding = torch.nn.Embedding(vocab_size, embed_dim)\n",
|
||||
" self.rnn = torch.nn.RNN(embed_dim,hidden_dim,batch_first=True)\n",
|
||||
" self.fc = torch.nn.Linear(hidden_dim, num_class)\n",
|
||||
"\n",
|
||||
" def forward(self, x):\n",
|
||||
" batch_size = x.size(0)\n",
|
||||
" x = self.embedding(x)\n",
|
||||
" x,h = self.rnn(x)\n",
|
||||
" return self.fc(x.mean(dim=1))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **കുറിപ്പ്:** ലളിതത്വത്തിനായി ഇവിടെ ഞങ്ങൾ പരിശീലനമില്ലാത്ത embedding ലെയർ ഉപയോഗിക്കുന്നു, എന്നാൽ മുൻവശം യൂണിറ്റിൽ വിവരിച്ച പോലെ Word2Vec അല്ലെങ്കിൽ GloVe embeddings ഉപയോഗിച്ച് മുൻപരിചയമുള്ള embedding ലെയർ ഉപയോഗിച്ചാൽ കൂടുതൽ മികച്ച ഫലങ്ങൾ ലഭിക്കും. കൂടുതൽ മനസ്സിലാക്കാൻ, നിങ്ങൾക്ക് ഈ കോഡ് മുൻപരിചയമുള്ള embeddings ഉപയോഗിച്ച് പ്രവർത്തിക്കാൻ മാറ്റാം.\n",
|
||||
"\n",
|
||||
"നമ്മുടെ കേസിൽ, നാം പാഡഡ് ഡാറ്റ ലോഡർ ഉപയോഗിക്കും, അതിനാൽ ഓരോ ബാച്ചിലും ഒരേ നീളമുള്ള പാഡഡ് സീക്വൻസുകളുടെ എണ്ണം ഉണ്ടാകും. RNN ലെയർ embedding ടെൻസറുകളുടെ സീക്വൻസ് സ്വീകരിച്ച് രണ്ട് ഔട്ട്പുട്ടുകൾ നൽകും: \n",
|
||||
"* $x$ ഓരോ ഘട്ടത്തിലും RNN സെൽ ഔട്ട്പുട്ടുകളുടെ സീക്വൻസ് ആണ് \n",
|
||||
"* $h$ സീക്വൻസിന്റെ അവസാന ഘടകത്തിനുള്ള അന്തിമ ഹിഡൻ സ്റ്റേറ്റ് ആണ് \n",
|
||||
"\n",
|
||||
"അതിനുശേഷം, ക്ലാസുകളുടെ എണ്ണം ലഭിക്കാൻ ഒരു ഫുൾലി-കണക്ടഡ് ലീനിയർ ക്ലാസിഫയർ പ്രയോഗിക്കും.\n",
|
||||
"\n",
|
||||
"> **കുറിപ്പ്:** RNN-കൾ പരിശീലിപ്പിക്കാൻ വളരെ ബുദ്ധിമുട്ടാണ്, കാരണം RNN സെലുകൾ സീക്വൻസ് നീളത്തോട് ചേർന്ന് അനറോൾ ചെയ്തപ്പോൾ, ബാക്ക് പ്രൊപ്പഗേഷനിൽ ഉൾപ്പെടുന്ന ലെയറുകളുടെ എണ്ണം വളരെ കൂടുതലാകും. അതിനാൽ ചെറിയ ലേണിംഗ് റേറ്റ് തിരഞ്ഞെടുക്കേണ്ടതുണ്ട്, കൂടാതെ നല്ല ഫലങ്ങൾ ലഭിക്കാൻ വലിയ ഡാറ്റാസെറ്റിൽ നെറ്റ്വർക്ക് പരിശീലിപ്പിക്കണം. ഇത് വളരെ സമയം എടുക്കാം, അതിനാൽ GPU ഉപയോഗിക്കുന്നത് മുൻഗണനയുള്ളതാണ്.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.3090625\n",
|
||||
"6400: acc=0.38921875\n",
|
||||
"9600: acc=0.4590625\n",
|
||||
"12800: acc=0.511953125\n",
|
||||
"16000: acc=0.5506875\n",
|
||||
"19200: acc=0.57921875\n",
|
||||
"22400: acc=0.6070089285714285\n",
|
||||
"25600: acc=0.6304296875\n",
|
||||
"28800: acc=0.6484027777777778\n",
|
||||
"32000: acc=0.66509375\n",
|
||||
"35200: acc=0.6790056818181818\n",
|
||||
"38400: acc=0.6929166666666666\n",
|
||||
"41600: acc=0.7035817307692308\n",
|
||||
"44800: acc=0.7137276785714286\n",
|
||||
"48000: acc=0.72225\n",
|
||||
"51200: acc=0.73001953125\n",
|
||||
"54400: acc=0.7372794117647059\n",
|
||||
"57600: acc=0.7436631944444444\n",
|
||||
"60800: acc=0.7503947368421052\n",
|
||||
"64000: acc=0.75634375\n",
|
||||
"67200: acc=0.7615773809523809\n",
|
||||
"70400: acc=0.7662642045454545\n",
|
||||
"73600: acc=0.7708423913043478\n",
|
||||
"76800: acc=0.7751822916666666\n",
|
||||
"80000: acc=0.7790625\n",
|
||||
"83200: acc=0.7825\n",
|
||||
"86400: acc=0.7858564814814815\n",
|
||||
"89600: acc=0.7890513392857142\n",
|
||||
"92800: acc=0.7920474137931034\n",
|
||||
"96000: acc=0.7952708333333334\n",
|
||||
"99200: acc=0.7982258064516129\n",
|
||||
"102400: acc=0.80099609375\n",
|
||||
"105600: acc=0.8037594696969697\n",
|
||||
"108800: acc=0.8060569852941176\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=16, collate_fn=padify, shuffle=True)\n",
|
||||
"net = RNNClassifier(vocab_size,64,32,len(classes)).to(device)\n",
|
||||
"train_epoch(net,train_loader, lr=0.001)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## ലോങ് ഷോർട്ട് ടേം മെമ്മറി (LSTM)\n",
|
||||
"\n",
|
||||
"ക്ലാസിക്കൽ RNN-കളുടെ പ്രധാന പ്രശ്നങ്ങളിൽ ഒന്നാണ്所谓 **വാനിഷിംഗ് ഗ്രേഡിയന്റ്സ്** പ്രശ്നം. RNN-കൾ ഒരു ബാക്ക്-പ്രൊപ്പഗേഷൻ പാസിൽ എന്റു-ടു-എൻഡ് പരിശീലിപ്പിക്കപ്പെടുന്നതിനാൽ, നെറ്റ്വർക്കിന്റെ ആദ്യ ലെയറുകളിലേക്ക് പിശക് പ്രചരിപ്പിക്കാൻ ബുദ്ധിമുട്ട് അനുഭവപ്പെടുന്നു, അതിനാൽ ദൂരെയുള്ള ടോക്കണുകൾ തമ്മിലുള്ള ബന്ധങ്ങൾ നെറ്റ്വർക്ക് പഠിക്കാൻ കഴിയുന്നില്ല. ഈ പ്രശ്നം ഒഴിവാക്കാനുള്ള മാർഗങ്ങളിൽ ഒന്നാണ്所谓 **സ്പഷ്ടമായ സ്റ്റേറ്റ് മാനേജ്മെന്റ്** പരിചയപ്പെടുത്തുക, അതായത്所谓 **ഗേറ്റുകൾ** ഉപയോഗിക്കുക. ഇതിന്റെ രണ്ട് ഏറ്റവും പ്രശസ്തമായ ആർക്കിടെക്ചറുകൾ: **ലോങ് ഷോർട്ട് ടേം മെമ്മറി** (LSTM)യും **ഗേറ്റഡ് റീലേ യൂണിറ്റ്** (GRU)യും ആണ്.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"LSTM നെറ്റ്വർക്ക് RNN-നെപ്പോലെ ക്രമീകരിച്ചിരിക്കുന്നു, പക്ഷേ രണ്ട് സ്റ്റേറ്റുകൾ ലെയർ മുതൽ ലെയർ വരെ കൈമാറപ്പെടുന്നു: യഥാർത്ഥ സ്റ്റേറ്റ് $c$, ഒപ്പം ഹിഡൻ വെക്ടർ $h$. ഓരോ യൂണിറ്റിലും, ഹിഡൻ വെക്ടർ $h_i$ ഇൻപുട്ട് $x_i$-യുമായി ചേർത്ത്, **ഗേറ്റുകൾ** വഴി സ്റ്റേറ്റ് $c$-വിൽ എന്ത് സംഭവിക്കുമെന്ന് നിയന്ത്രിക്കുന്നു. ഓരോ ഗേറ്റും സിഗ്മോയ്ഡ് ആക്ടിവേഷൻ ഉള്ള ഒരു ന്യൂറൽ നെറ്റ്വർക്ക് ആണ് (ഔട്ട്പുട്ട് $[0,1]$ പരിധിയിൽ), ഇത് സ്റ്റേറ്റ് വെക്ടറുമായി ഗുണിക്കുമ്പോൾ ബിറ്റ്വൈസ് മാസ്ക് പോലെ കരുതാം. ചിത്രത്തിൽ ഇടത്തുനിന്ന് വലത്തേക്ക് താഴെപ്പറയുന്ന ഗേറ്റുകൾ ഉണ്ട്:\n",
|
||||
"* **ഫോർഗറ്റ് ഗേറ്റ്** ഹിഡൻ വെക്ടർ എടുത്ത്, സ്റ്റേറ്റ് വെക്ടർ $c$-യിലെ ഏത് ഘടകങ്ങൾ മറക്കണം, ഏത് കടത്തിക്കയറ്റണം എന്ന് നിർണ്ണയിക്കുന്നു.\n",
|
||||
"* **ഇൻപുട്ട് ഗേറ്റ്** ഇൻപുട്ടിൽ നിന്നും ഹിഡൻ വെക്ടറിൽ നിന്നും ചില വിവരങ്ങൾ എടുത്ത് സ്റ്റേറ്റിൽ ചേർക്കുന്നു.\n",
|
||||
"* **ഔട്ട്പുട്ട് ഗേറ്റ്** സ്റ്റേറ്റ് ഒരു ലീനിയർ ലെയർ വഴി $\\tanh$ ആക്ടിവേഷൻ ഉപയോഗിച്ച് മാറ്റി, പിന്നീട് ഹിഡൻ വെക്ടർ $h_i$ ഉപയോഗിച്ച് അതിന്റെ ചില ഘടകങ്ങൾ തിരഞ്ഞെടുക്കുന്നു, പുതിയ സ്റ്റേറ്റ് $c_{i+1}$ ഉൽപ്പാദിപ്പിക്കാൻ.\n",
|
||||
"\n",
|
||||
"സ്റ്റേറ്റ് $c$-യുടെ ഘടകങ്ങളെ ഓൺ-ഓഫ് ചെയ്യാവുന്ന ഫ്ലാഗുകളായി കരുതാം. ഉദാഹരണത്തിന്, സീക്വൻസിൽ *Alice* എന്ന പേര് കണ്ടപ്പോൾ, അത് സ്ത്രീപേരായ കഥാപാത്രത്തെ സൂചിപ്പിക്കുന്നതായി കരുതാൻ ആഗ്രഹിക്കാം, അതിനാൽ വാചകത്തിൽ സ്ത്രീപേരുള്ളതായി സ്റ്റേറ്റിൽ ഫ്ലാഗ് ഉയർത്താം. പിന്നീട് *and Tom* എന്ന വാചകങ്ങൾ കണ്ടപ്പോൾ, ബഹുവചന നാമം ഉള്ളതായി ഫ്ലാഗ് ഉയർത്തും. അതിനാൽ സ്റ്റേറ്റ് നിയന്ത്രിച്ച് വാചകഭാഗങ്ങളുടെ വ്യാകരണ ഗുണങ്ങൾ ട്രാക്ക് ചെയ്യാൻ കഴിയും.\n",
|
||||
"\n",
|
||||
"> **Note**: LSTM-യുടെ ആന്തരിക ഘടന മനസ്സിലാക്കാൻ മികച്ച ഒരു വിഭവം Christopher Olah എഴുതിയ [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) എന്ന ലേഖനമാണ്.\n",
|
||||
"\n",
|
||||
"LSTM സെല്ലിന്റെ ആന്തരിക ഘടന സങ്കീർണ്ണമായിരിക്കാം, പക്ഷേ PyTorch `LSTMCell` ക്ലാസ്സിൽ ഈ ഇംപ്ലിമെന്റേഷൻ മറച്ചുവെക്കുന്നു, കൂടാതെ മുഴുവൻ LSTM ലെയർ പ്രതിനിധീകരിക്കാൻ `LSTM` ഒബ്ജക്റ്റ് നൽകുന്നു. അതിനാൽ, LSTM ക്ലാസിഫയർ ഇംപ്ലിമെന്റേഷൻ മുകളിൽ കാണിച്ച ലളിതമായ RNN-നെപ്പോലെ തന്നെ ആയിരിക്കും:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class LSTMClassifier(torch.nn.Module):\n",
|
||||
" def __init__(self, vocab_size, embed_dim, hidden_dim, num_class):\n",
|
||||
" super().__init__()\n",
|
||||
" self.hidden_dim = hidden_dim\n",
|
||||
" self.embedding = torch.nn.Embedding(vocab_size, embed_dim)\n",
|
||||
" self.embedding.weight.data = torch.randn_like(self.embedding.weight.data)-0.5\n",
|
||||
" self.rnn = torch.nn.LSTM(embed_dim,hidden_dim,batch_first=True)\n",
|
||||
" self.fc = torch.nn.Linear(hidden_dim, num_class)\n",
|
||||
"\n",
|
||||
" def forward(self, x):\n",
|
||||
" batch_size = x.size(0)\n",
|
||||
" x = self.embedding(x)\n",
|
||||
" x,(h,c) = self.rnn(x)\n",
|
||||
" return self.fc(h[-1])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഇപ്പോൾ നമുക്ക് നമ്മുടെ നെറ്റ്വർക്ക് പരിശീലിപ്പിക്കാം. LSTM പരിശീലിപ്പിക്കുന്നത് വളരെ മന്ദഗതിയിലാണ് എന്നതും ശ്രദ്ധിക്കുക, പരിശീലനത്തിന്റെ തുടക്കത്തിൽ കൃത്യതയിൽ വലിയ വർദ്ധനവ് കാണാനാകില്ല. കൂടാതെ, യുക്തിസഹമായ പരിശീലന വേഗത ലഭിക്കുന്നതിനും മെമ്മറി വൃത്തിയാക്കൽ ഒഴിവാക്കുന്നതിനും `lr` ലേണിംഗ് റേറ്റ് പാരാമീറ്ററുമായി പരീക്ഷണം നടത്തേണ്ടതുണ്ടാകും.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.259375\n",
|
||||
"6400: acc=0.25859375\n",
|
||||
"9600: acc=0.26177083333333334\n",
|
||||
"12800: acc=0.2784375\n",
|
||||
"16000: acc=0.313\n",
|
||||
"19200: acc=0.3528645833333333\n",
|
||||
"22400: acc=0.3965625\n",
|
||||
"25600: acc=0.4385546875\n",
|
||||
"28800: acc=0.4752777777777778\n",
|
||||
"32000: acc=0.505375\n",
|
||||
"35200: acc=0.5326704545454546\n",
|
||||
"38400: acc=0.5557552083333334\n",
|
||||
"41600: acc=0.5760817307692307\n",
|
||||
"44800: acc=0.5954910714285714\n",
|
||||
"48000: acc=0.6118333333333333\n",
|
||||
"51200: acc=0.62681640625\n",
|
||||
"54400: acc=0.6404779411764706\n",
|
||||
"57600: acc=0.6520138888888889\n",
|
||||
"60800: acc=0.662828947368421\n",
|
||||
"64000: acc=0.673546875\n",
|
||||
"67200: acc=0.6831547619047619\n",
|
||||
"70400: acc=0.6917897727272727\n",
|
||||
"73600: acc=0.6997146739130434\n",
|
||||
"76800: acc=0.707109375\n",
|
||||
"80000: acc=0.714075\n",
|
||||
"83200: acc=0.7209134615384616\n",
|
||||
"86400: acc=0.727037037037037\n",
|
||||
"89600: acc=0.7326674107142858\n",
|
||||
"92800: acc=0.7379633620689655\n",
|
||||
"96000: acc=0.7433645833333333\n",
|
||||
"99200: acc=0.7479032258064516\n",
|
||||
"102400: acc=0.752119140625\n",
|
||||
"105600: acc=0.7562405303030303\n",
|
||||
"108800: acc=0.76015625\n",
|
||||
"112000: acc=0.7641339285714286\n",
|
||||
"115200: acc=0.7677777777777778\n",
|
||||
"118400: acc=0.7711233108108108\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(0.03487814127604167, 0.7728)"
|
||||
]
|
||||
},
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"net = LSTMClassifier(vocab_size,64,32,len(classes)).to(device)\n",
|
||||
"train_epoch(net,train_loader, lr=0.001)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## പാക്ക് ചെയ്ത സീക്വൻസുകൾ\n",
|
||||
"\n",
|
||||
"നമ്മുടെ ഉദാഹരണത്തിൽ, മിനിബാച്ചിലെ എല്ലാ സീക്വൻസുകളും സീറോ വെക്ടറുകളാൽ പാഡ് ചെയ്യേണ്ടിവന്നു. ഇത് ചില മെമ്മറി വൃത്തിയാക്കലുകൾ ഉണ്ടാക്കുമ്പോഴും, RNN-കളിൽ പാഡ് ചെയ്ത ഇൻപുട്ട് ഐറ്റങ്ങൾക്കായി അധിക RNN സെല്ലുകൾ സൃഷ്ടിക്കപ്പെടുന്നത് കൂടുതൽ പ്രശ്നമാണ്, അവ പരിശീലനത്തിൽ പങ്കാളികളാകുന്നു, എന്നാൽ പ്രധാനപ്പെട്ട ഇൻപുട്ട് വിവരങ്ങൾ കൈമാറുന്നില്ല. യഥാർത്ഥ സീക്വൻസിന്റെ വലുപ്പം മാത്രം RNN-നെ പരിശീലിപ്പിക്കുന്നത് വളരെ നല്ലതാണ്.\n",
|
||||
"\n",
|
||||
"അത് ചെയ്യാൻ, PyTorch-ൽ പാഡ് ചെയ്ത സീക്വൻസുകൾ സൂക്ഷിക്കുന്ന പ്രത്യേക ഫോർമാറ്റ് പരിചയപ്പെടുത്തി. നമുക്ക് പാഡ് ചെയ്ത മിനിബാച്ച് ഇങ്ങനെ ഉണ്ടെന്ന് കരുതുക:\n",
|
||||
"```\n",
|
||||
"[[1,2,3,4,5],\n",
|
||||
" [6,7,8,0,0],\n",
|
||||
" [9,0,0,0,0]]\n",
|
||||
"```\n",
|
||||
"ഇവിടെ 0 പാഡ് ചെയ്ത മൂല്യങ്ങളെ പ്രതിനിധീകരിക്കുന്നു, ഇൻപുട്ട് സീക്വൻസുകളുടെ യഥാർത്ഥ നീളം `[5,3,1]` ആണ്.\n",
|
||||
"\n",
|
||||
"പാഡ് ചെയ്ത സീക്വൻസുമായി ഫലപ്രദമായി RNN പരിശീലിപ്പിക്കാൻ, ആദ്യം വലിയ മിനിബാച്ച് (`[1,6,9]`) ഉപയോഗിച്ച് RNN സെല്ലുകളുടെ ആദ്യ ഗ്രൂപ്പ് പരിശീലിപ്പിക്കാൻ ആഗ്രഹിക്കുന്നു, പിന്നീട് മൂന്നാം സീക്വൻസിന്റെ പ്രോസസ്സിംഗ് അവസാനിപ്പിച്ച്, ചെറുതായ മിനിബാച്ചുകളുമായി (`[2,7]`, `[3,8]`) പരിശീലനം തുടരുക, ഇങ്ങനെ തുടരും. അതിനാൽ, പാക്ക് ചെയ്ത സീക്വൻസ് ഒരു വെക്ടറായി പ്രതിനിധീകരിക്കുന്നു - നമ്മുടെ ഉദാഹരണത്തിൽ `[1,6,9,2,7,3,8,4,5]`, കൂടാതെ നീളം വെക്ടർ (`[5,3,1]`), ഇതിൽ നിന്ന് നമുക്ക് യഥാർത്ഥ പാഡ് ചെയ്ത മിനിബാച്ച് പുനഃസംഘടിപ്പിക്കാൻ കഴിയും.\n",
|
||||
"\n",
|
||||
"പാക്ക് ചെയ്ത സീക്വൻസ് ഉണ്ടാക്കാൻ, `torch.nn.utils.rnn.pack_padded_sequence` ഫംഗ്ഷൻ ഉപയോഗിക്കാം. RNN, LSTM, GRU ഉൾപ്പെടെയുള്ള എല്ലാ റിക്കറന്റ് ലെയറുകളും പാക്ക് ചെയ്ത സീക്വൻസുകൾ ഇൻപുട്ടായി സ്വീകരിക്കുകയും പാക്ക് ചെയ്ത ഔട്ട്പുട്ട് നൽകുകയും ചെയ്യുന്നു, അത് `torch.nn.utils.rnn.pad_packed_sequence` ഉപയോഗിച്ച് ഡീകോഡ് ചെയ്യാം.\n",
|
||||
"\n",
|
||||
"പാക്ക് ചെയ്ത സീക്വൻസ് ഉണ്ടാക്കാൻ, നീളം വെക്ടർ നെറ്റ്വർക്കിലേക്ക് പാസ്സ് ചെയ്യേണ്ടതുണ്ട്, അതിനാൽ മിനിബാച്ചുകൾ തയ്യാറാക്കാൻ വ്യത്യസ്തമായ ഫംഗ്ഷൻ ആവശ്യമുണ്ട്:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def pad_length(b):\n",
|
||||
" # build vectorized sequence\n",
|
||||
" v = [encode(x[1]) for x in b]\n",
|
||||
" # compute max length of a sequence in this minibatch and length sequence itself\n",
|
||||
" len_seq = list(map(len,v))\n",
|
||||
" l = max(len_seq)\n",
|
||||
" return ( # tuple of three tensors - labels, padded features, length sequence\n",
|
||||
" torch.LongTensor([t[0]-1 for t in b]),\n",
|
||||
" torch.stack([torch.nn.functional.pad(torch.tensor(t),(0,l-len(t)),mode='constant',value=0) for t in v]),\n",
|
||||
" torch.tensor(len_seq)\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
"train_loader_len = torch.utils.data.DataLoader(train_dataset, batch_size=16, collate_fn=pad_length, shuffle=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"യഥാർത്ഥ നെറ്റ്വർക്ക് മുകളിൽ കാണിച്ച `LSTMClassifier`-നെപ്പോലെ തന്നെ ആയിരിക്കും, പക്ഷേ `forward` പാസ് പാഡുചെയ്ത മിനിബാച്ചും സീക്വൻസ് നീളങ്ങളുടെ വെക്ടറും സ്വീകരിക്കും. എംബെഡിംഗ് കണക്കാക്കിയ ശേഷം, പാക്ക് ചെയ്ത സീക്വൻസ് കണക്കാക്കി, അത് LSTM ലെയറിലേക്ക് അയച്ച്, പിന്നീട് ഫലം വീണ്ടും അൺപാക്ക് ചെയ്യും.\n",
|
||||
"\n",
|
||||
"> **Note**: നാം യഥാർത്ഥത്തിൽ അൺപാക്ക് ചെയ്ത ഫലം `x` ഉപയോഗിക്കുന്നില്ല, കാരണം നാം ഹിഡൻ ലെയറുകളിൽ നിന്നുള്ള ഔട്ട്പുട്ട് അടുത്ത കണക്കുകളിൽ ഉപയോഗിക്കുന്നു. അതിനാൽ, ഈ കോഡിൽ നിന്ന് അൺപാക്കിംഗ് പൂർണ്ണമായും നീക്കം ചെയ്യാം. ഇത് ഇവിടെ ഉൾപ്പെടുത്തിയിരിക്കുന്നത്, നിങ്ങൾക്ക് ഈ കോഡ് എളുപ്പത്തിൽ മാറ്റാൻ കഴിയുന്ന വിധം ആണ്, നെറ്റ്വർക്ക് ഔട്ട്പുട്ട് പിന്നീട് കണക്കുകളിൽ ഉപയോഗിക്കേണ്ടിവന്നാൽ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class LSTMPackClassifier(torch.nn.Module):\n",
|
||||
" def __init__(self, vocab_size, embed_dim, hidden_dim, num_class):\n",
|
||||
" super().__init__()\n",
|
||||
" self.hidden_dim = hidden_dim\n",
|
||||
" self.embedding = torch.nn.Embedding(vocab_size, embed_dim)\n",
|
||||
" self.embedding.weight.data = torch.randn_like(self.embedding.weight.data)-0.5\n",
|
||||
" self.rnn = torch.nn.LSTM(embed_dim,hidden_dim,batch_first=True)\n",
|
||||
" self.fc = torch.nn.Linear(hidden_dim, num_class)\n",
|
||||
"\n",
|
||||
" def forward(self, x, lengths):\n",
|
||||
" batch_size = x.size(0)\n",
|
||||
" x = self.embedding(x)\n",
|
||||
" pad_x = torch.nn.utils.rnn.pack_padded_sequence(x,lengths,batch_first=True,enforce_sorted=False)\n",
|
||||
" pad_x,(h,c) = self.rnn(pad_x)\n",
|
||||
" x, _ = torch.nn.utils.rnn.pad_packed_sequence(pad_x,batch_first=True)\n",
|
||||
" return self.fc(h[-1])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഇപ്പോൾ പരിശീലനം നടത്താം:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.285625\n",
|
||||
"6400: acc=0.33359375\n",
|
||||
"9600: acc=0.3876041666666667\n",
|
||||
"12800: acc=0.44078125\n",
|
||||
"16000: acc=0.4825\n",
|
||||
"19200: acc=0.5235416666666667\n",
|
||||
"22400: acc=0.5559821428571429\n",
|
||||
"25600: acc=0.58609375\n",
|
||||
"28800: acc=0.6116666666666667\n",
|
||||
"32000: acc=0.63340625\n",
|
||||
"35200: acc=0.6525284090909091\n",
|
||||
"38400: acc=0.668515625\n",
|
||||
"41600: acc=0.6822596153846154\n",
|
||||
"44800: acc=0.6948214285714286\n",
|
||||
"48000: acc=0.7052708333333333\n",
|
||||
"51200: acc=0.71521484375\n",
|
||||
"54400: acc=0.7239889705882353\n",
|
||||
"57600: acc=0.7315277777777778\n",
|
||||
"60800: acc=0.7388486842105263\n",
|
||||
"64000: acc=0.74571875\n",
|
||||
"67200: acc=0.7518303571428572\n",
|
||||
"70400: acc=0.7576988636363636\n",
|
||||
"73600: acc=0.7628940217391305\n",
|
||||
"76800: acc=0.7681510416666667\n",
|
||||
"80000: acc=0.7728125\n",
|
||||
"83200: acc=0.7772235576923077\n",
|
||||
"86400: acc=0.7815393518518519\n",
|
||||
"89600: acc=0.7857700892857142\n",
|
||||
"92800: acc=0.7895043103448276\n",
|
||||
"96000: acc=0.7930520833333333\n",
|
||||
"99200: acc=0.7959072580645161\n",
|
||||
"102400: acc=0.798994140625\n",
|
||||
"105600: acc=0.802064393939394\n",
|
||||
"108800: acc=0.8051378676470589\n",
|
||||
"112000: acc=0.8077857142857143\n",
|
||||
"115200: acc=0.8104600694444445\n",
|
||||
"118400: acc=0.8128293918918919\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(0.029785829671223958, 0.8138166666666666)"
|
||||
]
|
||||
},
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"net = LSTMPackClassifier(vocab_size,64,32,len(classes)).to(device)\n",
|
||||
"train_epoch_emb(net,train_loader_len, lr=0.001,use_pack_sequence=True)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **കുറിപ്പ്:** നാം ട്രെയിനിംഗ് ഫംഗ്ഷനിലേക്ക് പാസ്സ് ചെയ്യുന്ന `use_pack_sequence` പാരാമീറ്റർ നിങ്ങൾ ശ്രദ്ധിച്ചിരിക്കാം. നിലവിൽ, `pack_padded_sequence` ഫംഗ്ഷന് length sequence ടെൻസർ CPU ഡിവൈസിൽ വേണം, അതിനാൽ ട്രെയിനിംഗ് ഫംഗ്ഷൻ length sequence ഡാറ്റ GPU-യിലേക്ക് മാറ്റുന്നത് ഒഴിവാക്കണം. നിങ്ങൾക്ക് [`torchnlp.py`](../../../../../lessons/5-NLP/16-RNN/torchnlp.py) ഫയലിലെ `train_emb` ഫംഗ്ഷന്റെ ഇംപ്ലിമെന്റേഷൻ പരിശോധിക്കാം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## ദ്വിദിശയും ബഹുസ്തര RNN-കളും\n",
|
||||
"\n",
|
||||
"നമ്മുടെ ഉദാഹരണങ്ങളിൽ, എല്ലാ റികറന്റ് നെറ്റ്വർക്കുകളും ഒരു ദിശയിൽ പ്രവർത്തിച്ചിരുന്നു, ഒരു സീക്വൻസിന്റെ തുടക്കത്തിൽ നിന്ന് അവസാനം വരെ. ഇത് സ്വാഭാവികമാണ്, കാരണം ഇത് നാം വായിക്കുകയും സംസാരശ്രവണം നടത്തുകയും ചെയ്യുന്ന രീതിയെ അനുകരിക്കുന്നു. എന്നാൽ, പല പ്രായോഗിക സാഹചര്യങ്ങളിലും നമുക്ക് ഇൻപുട്ട് സീക്വൻസിലേക്ക് യാദൃച്ഛിക ആക്സസ് ലഭിക്കുന്നതിനാൽ, റികറന്റ് കണക്കുകൂട്ടൽ ഇരുവശത്തും നടത്തുന്നത് ബുദ്ധിമുട്ടില്ല. ഇത്തരം നെറ്റ്വർക്കുകൾ **ദ്വിദിശ RNN-കൾ** എന്ന് വിളിക്കപ്പെടുന്നു, അവ RNN/LSTM/GRU കൺസ്ട്രക്ടറിലേക്ക് `bidirectional=True` പാരാമീറ്റർ നൽകി സൃഷ്ടിക്കാം.\n",
|
||||
"\n",
|
||||
"ദ്വിദിശ നെറ്റ്വർക്കുമായി ഇടപഴകുമ്പോൾ, ഓരോ ദിശയ്ക്കും ഒരു ഹിഡൻ സ്റ്റേറ്റ് വെക്ടർ വേണം. PyTorch ആ വെക്ടറുകൾ ഇരട്ട വലുപ്പമുള്ള ഒരു വെക്ടറായി കോഡുചെയ്യുന്നു, ഇത് വളരെ സൗകര്യപ്രദമാണ്, കാരണം സാധാരണയായി നിങ്ങൾ ഫലമായ ഹിഡൻ സ്റ്റേറ്റ് ഫുൾ-കണക്ടഡ് ലിനിയർ ലെയറിലേക്ക് പാസ്സ് ചെയ്യുക, അതിനാൽ ലെയർ സൃഷ്ടിക്കുമ്പോൾ ഈ വലുപ്പ വർദ്ധനവ് പരിഗണിക്കേണ്ടതുണ്ട്.\n",
|
||||
"\n",
|
||||
"റികറന്റ് നെറ്റ്വർക്ക്, ഒരുദിശയിലോ ദ്വിദിശയിലോ, ഒരു സീക്വൻസിനുള്ളിൽ ചില പാറ്റേണുകൾ പിടിച്ചുപറ്റുകയും അവ സ്റ്റേറ്റ് വെക്ടറിലോ ഔട്ട്പുട്ടിലോ സൂക്ഷിക്കുകയും ചെയ്യുന്നു. കോൺവല്യൂഷണൽ നെറ്റ്വർക്കുകളെപ്പോലെ, നാം ആദ്യ ലെയറിന്റെ മുകളിൽ മറ്റൊരു റികറന്റ് ലെയർ നിർമ്മിച്ച് ഉയർന്ന തലത്തിലുള്ള പാറ്റേണുകൾ പിടിച്ചുപറ്റാം, ആദ്യ ലെയർ കണ്ടെത്തിയ താഴ്ന്ന തലത്തിലുള്ള പാറ്റേണുകളിൽ നിന്നാണ് ഇത് നിർമ്മിക്കുന്നത്. ഇതാണ് **ബഹുസ്തര RNN** എന്ന ആശയം, ഇത് രണ്ട് അല്ലെങ്കിൽ അതിലധികം റികറന്റ് നെറ്റ്വർക്കുകൾ ഉൾക്കൊള്ളുന്നു, മുൻ ലെയറിന്റെ ഔട്ട്പുട്ട് അടുത്ത ലെയറിന്റെ ഇൻപുട്ടായി പാസ്സ് ചെയ്യപ്പെടുന്നു.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*ഫെർണാണ്ടോ ലോപ്പസ് എഴുതിയ [ഈ മനോഹരമായ പോസ്റ്റ്](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3) നിന്നുള്ള ചിത്രം*\n",
|
||||
"\n",
|
||||
"PyTorch ഇത്തരത്തിലുള്ള നെറ്റ്വർക്കുകൾ നിർമ്മിക്കുന്നത് എളുപ്പമാണ്, കാരണം RNN/LSTM/GRU കൺസ്ട്രക്ടറിലേക്ക് `num_layers` പാരാമീറ്റർ പാസ്സ് ചെയ്താൽ സ്വയം പല ലെയറുകളുള്ള റികറൻസ് നിർമ്മിക്കും. ഇതിന്റെ ഫലമായി ഹിഡൻ/സ്റ്റേറ്റ് വെക്ടറിന്റെ വലുപ്പം അനുപാതമായി വർദ്ധിക്കും, അതിനാൽ റികറന്റ് ലെയറുകളുടെ ഔട്ട്പുട്ട് കൈകാര്യം ചെയ്യുമ്പോൾ ഇത് പരിഗണിക്കേണ്ടതുണ്ട്.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## മറ്റ് ജോലികൾക്കുള്ള RNNകൾ\n",
|
||||
"\n",
|
||||
"ഈ യൂണിറ്റിൽ, RNNകൾ ക്രമം തിരിച്ചറിയലിനായി ഉപയോഗിക്കാമെന്ന് നാം കണ്ടു, എന്നാൽ യഥാർത്ഥത്തിൽ, അവ ടെക്സ്റ്റ് ജനറേഷൻ, മെഷീൻ വിവർത്തനം തുടങ്ങിയ നിരവധി ജോലികൾ കൈകാര്യം ചെയ്യാൻ കഴിയും. ആ ജോലികൾ അടുത്ത യൂണിറ്റിൽ നാം പരിഗണിക്കും.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**അസൂയാ**: \nഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.12 ('py38')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.8.12"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "522ee52ae3d5ae933e283286254e9a55",
|
||||
"translation_date": "2025-11-26T02:01:47+00:00",
|
||||
"source_file": "lessons/5-NLP/16-RNN/RNNPyTorch.ipynb",
|
||||
"language_code": "ml"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
|
|
@ -1,462 +1,462 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# പുനരാവർത്തിത ന്യൂറൽ നെറ്റ്വർക്കുകൾ\n",
|
||||
"\n",
|
||||
"മുൻ മോഡ്യൂളിൽ, നാം വാചകത്തിന്റെ സമൃദ്ധമായ സാംവേദനാത്മക പ്രതിനിധാനങ്ങൾ പഠിച്ചു. നാം ഉപയോഗിച്ച ആർക്കിടെക്ചർ വാചകത്തിലെ വാക്കുകളുടെ സംയുക്ത അർത്ഥം പിടിച്ചുപറ്റുന്നു, പക്ഷേ വാക്കുകളുടെ **ക്രമം** പരിഗണിക്കുന്നില്ല, കാരണം എംബെഡിംഗുകൾക്ക് ശേഷം നടക്കുന്ന സംയോജനം ഈ വിവരങ്ങൾ മൊഴിയുടെ യഥാർത്ഥ രൂപത്തിൽ നിന്ന് നീക്കം ചെയ്യുന്നു. ഈ മോഡലുകൾ വാക്കുകളുടെ ക്രമീകരണം പ്രതിനിധാനം ചെയ്യാൻ കഴിയാത്തതിനാൽ, വാചക സൃഷ്ടി അല്ലെങ്കിൽ ചോദ്യോത്തരങ്ങൾ പോലുള്ള കൂടുതൽ സങ്കീർണ്ണമായ അല്ലെങ്കിൽ സംശയാസ്പദമായ പ്രവർത്തനങ്ങൾ പരിഹരിക്കാൻ കഴിയില്ല.\n",
|
||||
"\n",
|
||||
"ഒരു വാചക ശ്രേണിയുടെ അർത്ഥം പിടിച്ചുപറ്റാൻ, നാം **പുനരാവർത്തിത ന്യൂറൽ നെറ്റ്വർക്ക്** എന്നറിയപ്പെടുന്ന ഒരു ന്യൂറൽ നെറ്റ്വർക്ക് ആർക്കിടെക്ചർ ഉപയോഗിക്കും, അതായത് RNN. RNN ഉപയോഗിക്കുമ്പോൾ, നാം വാചകം ഓരോ ടോക്കണും ഒരിക്കൽ씩 നെറ്റ്വർക്കിലൂടെ കടത്തുന്നു, നെറ്റ്വർക്ക് ചില **സ്റ്റേറ്റ്** ഉൽപ്പാദിപ്പിക്കുന്നു, അത് പിന്നീട് അടുത്ത ടോക്കണുമായി വീണ്ടും നെറ്റ്വർക്കിലേക്ക് നൽകുന്നു.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"ഇൻപുട്ട് ടോക്കൺ ശ്രേണി $X_0,\\dots,X_n$ നൽകിയാൽ, RNN ന്യൂറൽ നെറ്റ്വർക്ക് ബ്ലോക്കുകളുടെ ഒരു ശ്രേണി സൃഷ്ടിക്കുന്നു, ഈ ശ്രേണി ബാക്ക്പ്രൊപ്പഗേഷൻ ഉപയോഗിച്ച് എന്റു-ടു-എൻഡ് പരിശീലിപ്പിക്കുന്നു. ഓരോ നെറ്റ്വർക്ക് ബ്ലോക്കും $(X_i,S_i)$ എന്ന ജോഡി ഇൻപുട്ടായി സ്വീകരിച്ച് $S_{i+1}$ എന്ന ഔട്ട്പുട്ട് നൽകുന്നു. അവസാന സ്റ്റേറ്റ് $S_n$ അല്ലെങ്കിൽ ഔട്ട്പുട്ട് $Y_n$ ഒരു ലീനിയർ ക്ലാസിഫയറിലേക്ക് പോകുന്നു ഫലം ഉൽപ്പാദിപ്പിക്കാൻ. എല്ലാ നെറ്റ്വർക്ക് ബ്ലോക്കുകളും ഒരേ ഭാരങ്ങൾ പങ്കുവെക്കുന്നു, ഒറ്റ ബാക്ക്പ്രൊപ്പഗേഷൻ പാസിലൂടെ എന്റു-ടു-എൻഡ് പരിശീലിപ്പിക്കുന്നു.\n",
|
||||
"\n",
|
||||
"> മുകളിൽ കാണുന്ന ചിത്രം പുനരാവർത്തിത ന്യൂറൽ നെറ്റ്വർക്ക് അനറോൾഡ് രൂപത്തിൽ (ഇടത്തരം) കൂടാതെ കൂടുതൽ സംക്ഷിപ്തമായ പുനരാവർത്തിത പ്രതിനിധാനത്തിൽ (വലത്തരം) കാണിക്കുന്നു. എല്ലാ RNN സെല്ലുകൾക്കും ഒരേ **പങ്കിടാവുന്ന ഭാരങ്ങൾ** ഉണ്ടെന്ന് മനസ്സിലാക്കുന്നത് പ്രധാനമാണ്.\n",
|
||||
"\n",
|
||||
"സ്റ്റേറ്റ് വെക്ടറുകൾ $S_0,\\dots,S_n$ നെറ്റ്വർക്കിലൂടെ കടത്തപ്പെടുന്നതിനാൽ, RNN വാക്കുകൾ തമ്മിലുള്ള അനുക്രമപരമായ ആശ്രിതത്വങ്ങൾ പഠിക്കാൻ കഴിയും. ഉദാഹരണത്തിന്, *not* എന്ന വാക്ക് ശ്രേണിയിൽ എവിടെയെങ്കിലും വന്നാൽ, അത് സ്റ്റേറ്റ് വെക്ടറിലെ ചില ഘടകങ്ങളെ നിഷേധിക്കാൻ പഠിക്കാം.\n",
|
||||
"\n",
|
||||
"ഓരോ RNN സെല്ലിനുള്ളിൽ രണ്ട് ഭാര മാട്രിസുകൾ ഉണ്ട്: $W_H$യും $W_I$യും, കൂടാതെ ബയാസ് $b$. ഓരോ RNN ഘട്ടത്തിലും, ഇൻപുട്ട് $X_i$യും ഇൻപുട്ട് സ്റ്റേറ്റ് $S_i$യും നൽകിയാൽ, ഔട്ട്പുട്ട് സ്റ്റേറ്റ് $S_{i+1} = f(W_H\\times S_i + W_I\\times X_i+b)$ എന്നിങ്ങനെ കണക്കാക്കുന്നു, ഇവിടെ $f$ ഒരു ആക്ടിവേഷൻ ഫംഗ്ഷനാണ് (സാധാരണയായി $\\tanh$).\n",
|
||||
"\n",
|
||||
"> വാചക സൃഷ്ടി പോലുള്ള പ്രശ്നങ്ങൾക്കായി (അടുത്ത യൂണിറ്റിൽ നാം പഠിക്കും) അല്ലെങ്കിൽ മെഷീൻ വിവർത്തനത്തിനായി, ഓരോ RNN ഘട്ടത്തിലും ചില ഔട്ട്പുട്ട് മൂല്യവും ലഭിക്കണം. ഈ സാഹചര്യത്തിൽ, മറ്റൊരു മാട്രിക്സ് $W_O$ ഉണ്ട്, ഔട്ട്പുട്ട് $Y_i=f(W_O\\times S_i+b_O)$ എന്നിങ്ങനെ കണക്കാക്കുന്നു.\n",
|
||||
"\n",
|
||||
"പുനരാവർത്തിത ന്യൂറൽ നെറ്റ്വർക്കുകൾ നമ്മുടെ വാർത്താ ഡാറ്റാസെറ്റ് ക്ലാസിഫൈ ചെയ്യുന്നതിൽ എങ്ങനെ സഹായിക്കാമെന്ന് നോക്കാം.\n",
|
||||
"\n",
|
||||
"> സാൻഡ്ബോക്സ് പരിസ്ഥിതിക്കായി, ആവശ്യമായ ലൈബ്രറി ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ടെന്ന് ഉറപ്പാക്കാനും ഡാറ്റ പ്രിഫെച്ച് ചെയ്യാനും താഴെ കാണുന്ന സെൽ പ്രവർത്തിപ്പിക്കേണ്ടതാണ്. നിങ്ങൾ ലോക്കലായി പ്രവർത്തിപ്പിക്കുന്നുവെങ്കിൽ, താഴെ കാണുന്ന സെൽ ഒഴിവാക്കാം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import sys\n",
|
||||
"!{sys.executable} -m pip install --quiet tensorflow_datasets==4.4.0\n",
|
||||
"!cd ~ && wget -q -O - https://mslearntensorflowlp.blob.core.windows.net/data/tfds-ag-news.tgz | tar xz"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import tensorflow as tf\n",
|
||||
"from tensorflow import keras\n",
|
||||
"import tensorflow_datasets as tfds\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"# We are going to be training pretty large models. In order not to face errors, we need\n",
|
||||
"# to set tensorflow option to grow GPU memory allocation when required\n",
|
||||
"physical_devices = tf.config.list_physical_devices('GPU') \n",
|
||||
"if len(physical_devices)>0:\n",
|
||||
" tf.config.experimental.set_memory_growth(physical_devices[0], True)\n",
|
||||
"\n",
|
||||
"ds_train, ds_test = tfds.load('ag_news_subset').values()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"nteract": {
|
||||
"transient": {
|
||||
"deleting": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"വലിയ മോഡലുകൾ പരിശീലിപ്പിക്കുമ്പോൾ, GPU മെമ്മറി അലോക്കേഷൻ പ്രശ്നമായി മാറാം. ഡാറ്റ GPU മെമ്മറിയിൽ ഫിറ്റ് ആകുകയും പരിശീലനം വേഗത്തിൽ നടക്കുകയും ചെയ്യാൻ, വ്യത്യസ്ത മിനിബാച്ച് വലുപ്പങ്ങൾ പരീക്ഷിക്കേണ്ടതുണ്ടാകാം. നിങ്ങൾ ഈ കോഡ് നിങ്ങളുടെ സ്വന്തം GPU യന്ത്രത്തിൽ ഓടിക്കുന്നുവെങ്കിൽ, പരിശീലനം വേഗത്തിലാക്കാൻ മിനിബാച്ച് വലുപ്പം ക്രമീകരിച്ച് പരീക്ഷിക്കാം.\n",
|
||||
"\n",
|
||||
"> **Note**: NVidia ഡ്രൈവർസിന്റെ ചില പതിപ്പുകൾ മോഡൽ പരിശീലനത്തിന് ശേഷം മെമ്മറി റിലീസ് ചെയ്യാത്തതായി അറിയപ്പെടുന്നു. ഈ നോട്ട്ബുക്കിൽ നാം പല ഉദാഹരണങ്ങളും ഓടിക്കുന്നതിനാൽ, പ്രത്യേകിച്ച് നിങ്ങൾ ഈ നോട്ട്ബുക്കിന്റെ ഭാഗമായുള്ള പരീക്ഷണങ്ങൾ നടത്തുമ്പോൾ, ചില സജ്ജീകരണങ്ങളിൽ മെമ്മറി തീരാൻ സാധ്യതയുണ്ട്. മോഡൽ പരിശീലനം ആരംഭിക്കുമ്പോൾ ചില അസാധാരണ പിശകുകൾ നേരിടുകയാണെങ്കിൽ, നോട്ട്ബുക്ക് കർണൽ പുനരാരംഭിക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കാം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"collapsed": true,
|
||||
"jupyter": {
|
||||
"outputs_hidden": false,
|
||||
"source_hidden": false
|
||||
},
|
||||
"nteract": {
|
||||
"transient": {
|
||||
"deleting": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"batch_size = 16\n",
|
||||
"embed_size = 64"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## ലളിതമായ RNN ക്ലാസിഫയർ\n",
|
||||
"\n",
|
||||
"ലളിതമായ RNN-ന്റെ കാര്യത്തിൽ, ഓരോ റിക്കറന്റ് യൂണിറ്റും ഒരു ലളിതമായ ലീനിയർ നെറ്റ്വർക്കാണ്, ഇത് ഒരു ഇൻപുട്ട് വെക്ടറും സ്റ്റേറ്റ് വെക്ടറും സ്വീകരിച്ച് പുതിയ സ്റ്റേറ്റ് വെക്ടർ ഉത്പാദിപ്പിക്കുന്നു. Keras-ൽ ഇത് `SimpleRNN` ലെയർ ഉപയോഗിച്ച് പ്രതിനിധീകരിക്കാം.\n",
|
||||
"\n",
|
||||
"RNN ലെയറിലേക്ക് നേരിട്ട് വൺ-ഹോട്ട് എൻകോഡഡ് ടോക്കണുകൾ നൽകാമെങ്കിലും, അവയുടെ ഉയർന്ന ഡൈമെൻഷണാലിറ്റിയുടെ കാരണം ഇത് നല്ല ആശയമല്ല. അതിനാൽ, വാക്കുകളുടെ വെക്ടറുകളുടെ ഡൈമെൻഷണാലിറ്റി കുറയ്ക്കാൻ ഒരു എംബെഡ്ഡിംഗ് ലെയർ ഉപയോഗിച്ച്, തുടർന്ന് RNN ലെയർ, ഒടുവിൽ `Dense` ക്ലാസിഫയർ ഉപയോഗിക്കും.\n",
|
||||
"\n",
|
||||
"> **Note**: ഡൈമെൻഷണാലിറ്റി അത്ര ഉയർന്നതല്ലാത്ത സാഹചര്യങ്ങളിൽ, ഉദാഹരണത്തിന് കറക്റ്റർ-ലെവൽ ടോക്കണൈസേഷൻ ഉപയോഗിക്കുമ്പോൾ, വൺ-ഹോട്ട് എൻകോഡഡ് ടോക്കണുകൾ നേരിട്ട് RNN സെല്ലിലേക്ക് നൽകുന്നത് യുക്തിയുള്ളതായിരിക്കാം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"sequential\"\n",
|
||||
"_________________________________________________________________\n",
|
||||
"Layer (type) Output Shape Param # \n",
|
||||
"=================================================================\n",
|
||||
"text_vectorization (TextVect (None, None) 0 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"embedding (Embedding) (None, None, 64) 1280000 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"simple_rnn (SimpleRNN) (None, 16) 1296 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"dense (Dense) (None, 4) 68 \n",
|
||||
"=================================================================\n",
|
||||
"Total params: 1,281,364\n",
|
||||
"Trainable params: 1,281,364\n",
|
||||
"Non-trainable params: 0\n",
|
||||
"_________________________________________________________________\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vocab_size = 20000\n",
|
||||
"\n",
|
||||
"vectorizer = keras.layers.experimental.preprocessing.TextVectorization(\n",
|
||||
" max_tokens=vocab_size,\n",
|
||||
" input_shape=(1,))\n",
|
||||
"\n",
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer,\n",
|
||||
" keras.layers.Embedding(vocab_size, embed_size),\n",
|
||||
" keras.layers.SimpleRNN(16),\n",
|
||||
" keras.layers.Dense(4,activation='softmax')\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.summary()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **കുറിപ്പ്:** എളുപ്പത്തിനായി ഇവിടെ ഒരു പരിശീലനമില്ലാത്ത എംബെഡിംഗ് ലെയർ ഉപയോഗിക്കുന്നു, പക്ഷേ മുൻവശം യൂണിറ്റിൽ വിവരിച്ച പോലെ Word2Vec ഉപയോഗിച്ച് പരിശീലനമേറ്റ എംബെഡിംഗ് ലെയർ ഉപയോഗിക്കുന്നത് മികച്ച ഫലങ്ങൾ നൽകും. ഈ കോഡ് pretrained embeddings ഉപയോഗിച്ച് പ്രവർത്തിക്കാൻ നിങ്ങൾക്ക് മാറ്റി ഉപയോഗിക്കുന്നത് നല്ല അഭ്യാസമായിരിക്കും.\n",
|
||||
"\n",
|
||||
"ഇപ്പോൾ നമുക്ക് RNN പരിശീലിപ്പിക്കാം. സാധാരണയായി RNNകൾ പരിശീലിപ്പിക്കുന്നത് വളരെ ബുദ്ധിമുട്ടാണ്, കാരണം RNN സെല്ലുകൾ സീക്വൻസ് നീളത്തിന് അനുസരിച്ച് അനറോൾ ചെയ്താൽ, ബാക്ക്പ്രൊപ്പഗേഷനിൽ ഉൾപ്പെടുന്ന ലെയറുകളുടെ എണ്ണം വളരെ കൂടുതലാകും. അതിനാൽ ചെറിയ ലേണിംഗ് റേറ്റ് തിരഞ്ഞെടുക്കുകയും നല്ല ഫലങ്ങൾ ലഭിക്കാൻ വലിയ ഡാറ്റാസെറ്റിൽ നെറ്റ്വർക്ക് പരിശീലിപ്പിക്കേണ്ടതുണ്ട്. ഇത് വളരെ സമയം എടുക്കാം, അതിനാൽ GPU ഉപയോഗിക്കുന്നത് മുൻഗണനയുള്ളതാണ്.\n",
|
||||
"\n",
|
||||
"വേഗത വർദ്ധിപ്പിക്കാൻ, നാം RNN മോഡൽ വാർത്താ തലക്കെട്ടുകളിൽ മാത്രം പരിശീലിപ്പിക്കും, വിവരണം ഒഴിവാക്കും. നിങ്ങൾ വിവരണത്തോടെ പരിശീലിപ്പിക്കാൻ ശ്രമിച്ച് മോഡൽ പരിശീലിപ്പിക്കാൻ കഴിയുന്നുണ്ടോ എന്ന് നോക്കാം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Training vectorizer\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def extract_title(x):\n",
|
||||
" return x['title']\n",
|
||||
"\n",
|
||||
"def tupelize_title(x):\n",
|
||||
" return (extract_title(x),x['label'])\n",
|
||||
"\n",
|
||||
"print('Training vectorizer')\n",
|
||||
"vectorizer.adapt(ds_train.take(2000).map(extract_title))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"7500/7500 [==============================] - 82s 11ms/step - loss: 0.6629 - acc: 0.7623 - val_loss: 0.5559 - val_acc: 0.7995\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7f3e0030d350>"
|
||||
]
|
||||
},
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer='adam')\n",
|
||||
"model.fit(ds_train.map(tupelize_title).batch(batch_size),validation_data=ds_test.map(tupelize_title).batch(batch_size))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"nteract": {
|
||||
"transient": {
|
||||
"deleting": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"> **കുറിപ്പ്** ഇവിടെ കൃത്യത കുറവായിരിക്കാം, കാരണം നാം വാർത്താ തലക്കെട്ടുകളിൽ മാത്രമേ പരിശീലനം നടത്തുകയുള്ളൂ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## വ്യത്യസ്ത നീളമുള്ള സീക്വൻസുകൾ വീണ്ടും പരിശോധിക്കൽ\n",
|
||||
"\n",
|
||||
"`TextVectorization` ലെയർ സ്വയം മിനിബാച്ചിലെ വ്യത്യസ്ത നീളമുള്ള സീക്വൻസുകൾ പാഡ് ടോക്കണുകളാൽ പാഡ് ചെയ്യുമെന്ന് ഓർക്കുക. ആ ടോക്കണുകളും പരിശീലനത്തിൽ പങ്കാളികളാകുന്നു, അതിനാൽ മോഡലിന്റെ കോൺവെർജൻസ് സങ്കീർണ്ണമാക്കാം.\n",
|
||||
"\n",
|
||||
"പാഡിംഗിന്റെ അളവ് കുറയ്ക്കാൻ നാം പല മാർഗ്ഗങ്ങളും സ്വീകരിക്കാം. അവയിൽ ഒന്നാണ് ഡാറ്റാസെറ്റ് സീക്വൻസ് നീളത്തിന്റെ അടിസ്ഥാനത്തിൽ പുനഃക്രമീകരിച്ച് എല്ലാ സീക്വൻസുകളും വലുപ്പം അനുസരിച്ച് ഗ്രൂപ്പുചെയ്യുക. ഇത് `tf.data.experimental.bucket_by_sequence_length` ഫംഗ്ഷൻ ഉപയോഗിച്ച് ചെയ്യാം (കാണുക [ഡോക്യുമെന്റേഷൻ](https://www.tensorflow.org/api_docs/python/tf/data/experimental/bucket_by_sequence_length)).\n",
|
||||
"\n",
|
||||
"മറ്റൊരു മാർഗ്ഗം **മാസ്കിംഗ്** ഉപയോഗിക്കുകയാണ്. Keras-ൽ ചില ലെയറുകൾ പരിശീലനത്തിൽ ഏത് ടോക്കണുകൾ പരിഗണിക്കണമെന്ന് കാണിക്കുന്ന അധിക ഇൻപുട്ട് പിന്തുണയ്ക്കുന്നു. മാസ്കിംഗ് നമ്മുടെ മോഡലിൽ ഉൾപ്പെടുത്താൻ, നാം വേർതിരിച്ച `Masking` ലെയർ ([ഡോക്സ്](https://keras.io/api/layers/core_layers/masking/)) ചേർക്കാം, അല്ലെങ്കിൽ `Embedding` ലെയറിന്റെ `mask_zero=True` പാരാമീറ്റർ നിർദ്ദേശിക്കാം.\n",
|
||||
"\n",
|
||||
"> **Note**: ഈ പരിശീലനം മുഴുവൻ ഡാറ്റാസെറ്റിൽ ഒരു എപ്പോക്ക് പൂർത്തിയാക്കാൻ ഏകദേശം 5 മിനിറ്റ് എടുക്കും. ക്ഷമത കുറഞ്ഞാൽ 언제든 പരിശീലനം നിർത്താം. നിങ്ങൾക്ക് ചെയ്യാവുന്നത് `.take(...)` ക്ലോസ് `ds_train` ഉം `ds_test` datasets-ഉം ശേഷം ചേർത്ത് പരിശീലനത്തിനുള്ള ഡാറ്റയുടെ അളവ് പരിമിതപ്പെടുത്തലും ആണ്.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"7500/7500 [==============================] - 371s 49ms/step - loss: 0.5401 - acc: 0.8079 - val_loss: 0.3780 - val_acc: 0.8822\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7f3dec118850>"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def extract_text(x):\n",
|
||||
" return x['title']+' '+x['description']\n",
|
||||
"\n",
|
||||
"def tupelize(x):\n",
|
||||
" return (extract_text(x),x['label'])\n",
|
||||
"\n",
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer,\n",
|
||||
" keras.layers.Embedding(vocab_size,embed_size,mask_zero=True),\n",
|
||||
" keras.layers.SimpleRNN(16),\n",
|
||||
" keras.layers.Dense(4,activation='softmax')\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer='adam')\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(batch_size),validation_data=ds_test.map(tupelize).batch(batch_size))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഇപ്പോൾ നാം മാസ്കിംഗ് ഉപയോഗിക്കുന്നതിനാൽ, തലക്കെട്ടുകളും വിവരണങ്ങളും ഉൾപ്പെടുന്ന മുഴുവൻ ഡാറ്റാസെറ്റിലും മോഡൽ പരിശീലിപ്പിക്കാം.\n",
|
||||
"\n",
|
||||
"> **Note**: നാം വാർത്താ തലക്കെട്ടുകളിൽ പരിശീലിപ്പിച്ച വെക്ടറൈസർ ഉപയോഗിക്കുന്നുണ്ടെന്ന് നിങ്ങൾ ശ്രദ്ധിച്ചിട്ടുണ്ടോ, ലേഖനത്തിന്റെ മുഴുവൻ ഉള്ളടക്കമല്ല? ഇതു ചില ടോക്കണുകൾ അവഗണിക്കപ്പെടാൻ കാരണമാകാം, അതിനാൽ വെക്ടറൈസർ വീണ്ടും പരിശീലിപ്പിക്കുന്നത് നല്ലതാണ്. എങ്കിലും, ഇതിന് വളരെ ചെറിയ ഫലമുണ്ടാകാമെന്ന് തോന്നുന്നു, അതുകൊണ്ട് ലളിതത്വത്തിനായി മുമ്പത്തെ പ്രീ-ട്രെയിൻ ചെയ്ത വെക്ടറൈസറിനോടെയാണ് നാം തുടരുന്നത്.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## LSTM: ദീർഘകാല ചെറുകാല സ്മൃതി\n",
|
||||
"\n",
|
||||
"RNN-കളുടെ പ്രധാന പ്രശ്നങ്ങളിൽ ഒന്നാണ് **വാനിഷിംഗ് ഗ്രേഡിയന്റുകൾ**. RNN-കൾ വളരെ ദൈർഘ്യമേറിയതായിരിക്കാം, ബാക്ക്പ്രൊപ്പഗേഷൻ സമയത്ത് ഗ്രേഡിയന്റുകൾ നെറ്റ്വർക്കിന്റെ ആദ്യ ലെയറിലേക്ക് പൂർണ്ണമായി പ്രചരിപ്പിക്കാൻ ബുദ്ധിമുട്ട് ഉണ്ടാകാം. ഇതു സംഭവിക്കുമ്പോൾ, നെറ്റ്വർക്ക് ദൂരെയുള്ള ടോക്കണുകൾ തമ്മിലുള്ള ബന്ധങ്ങൾ പഠിക്കാൻ കഴിയില്ല. ഈ പ്രശ്നം ഒഴിവാക്കാനുള്ള ഒരു മാർഗം **ഗേറ്റുകൾ** ഉപയോഗിച്ച് **സ്പഷ്ടമായ സ്റ്റേറ്റ് മാനേജ്മെന്റ്** പരിചയപ്പെടുത്തുകയാണ്. ഗേറ്റുകൾ പരിചയപ്പെടുത്തുന്ന രണ്ട് സാധാരണ ആർക്കിടെക്ചറുകൾ **ലോങ് ഷോർട്ട്-ടേം മെമ്മറി** (LSTM)യും **ഗേറ്റഡ് റീലേ യൂണിറ്റ്** (GRU)യും ആണ്. ഇവിടെ നാം LSTM-കളെ പരിചയപ്പെടും.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"LSTM നെറ്റ്വർക്ക് RNN-നെപ്പോലെ ക്രമീകരിച്ചിരിക്കുന്നു, പക്ഷേ ലെയർ മുതൽ ലെയർ വരെ രണ്ട് സ്റ്റേറ്റുകൾ കൈമാറുന്നു: യഥാർത്ഥ സ്റ്റേറ്റ് $c$, കൂടാതെ ഹിഡൻ വെക്ടർ $h$. ഓരോ യൂണിറ്റിലും, ഹിഡൻ വെക്ടർ $h_{t-1}$ ഇൻപുട്ട് $x_t$-നൊപ്പം ചേർത്ത്, **ഗേറ്റുകൾ** വഴി സ്റ്റേറ്റ് $c_t$-ക്കും ഔട്ട്പുട്ട് $h_t$-ക്കും എന്ത് സംഭവിക്കുമെന്ന് നിയന്ത്രിക്കുന്നു. ഓരോ ഗേറ്റിനും സിഗ്മോയിഡ് ആക്ടിവേഷൻ ഉണ്ട് (ഔട്ട്പുട്ട് $[0,1]$ പരിധിയിൽ), ഇത് സ്റ്റേറ്റ് വെക്ടറുമായി ഗുണിക്കുമ്പോൾ ബിറ്റ്വൈസ് മാസ്ക് പോലെ കരുതാം. LSTM-കൾക്ക് താഴെപ്പറയുന്ന ഗേറ്റുകൾ ഉണ്ട് (മുകളിൽ ചിത്രത്തിൽ ഇടത്തുനിന്ന് വലത്തേക്ക്):\n",
|
||||
"* **ഫോർഗറ്റ് ഗേറ്റ്**: വെക്ടർ $c_{t-1}$-ന്റെ ഏത് ഘടകങ്ങൾ മറക്കണം, ഏത് കടത്തിക്കളയണം എന്ന് നിർണ്ണയിക്കുന്നു.\n",
|
||||
"* **ഇൻപുട്ട് ഗേറ്റ്**: ഇൻപുട്ട് വെക്ടറും മുൻ ഹിഡൻ വെക്ടറും സ്റ്റേറ്റ് വെക്ടറിലേക്ക് എത്രമാത്രം വിവരങ്ങൾ ഉൾപ്പെടുത്തണം എന്ന് നിർണ്ണയിക്കുന്നു.\n",
|
||||
"* **ഔട്ട്പുട്ട് ഗേറ്റ്**: പുതിയ സ്റ്റേറ്റ് വെക്ടർ എടുത്ത് അതിന്റെ ഏത് ഘടകങ്ങൾ പുതിയ ഹിഡൻ വെക്ടർ $h_t$ സൃഷ്ടിക്കാൻ ഉപയോഗിക്കുമെന്ന് തീരുമാനിക്കുന്നു.\n",
|
||||
"\n",
|
||||
"സ്റ്റേറ്റ് $c$-യുടെ ഘടകങ്ങളെ ഓൺ-ഓഫ് ചെയ്യാവുന്ന ഫ്ലാഗുകളായി കരുതാം. ഉദാഹരണത്തിന്, സീക്വൻസിൽ *Alice* എന്ന പേര് കണ്ടപ്പോൾ, അത് ഒരു സ്ത്രീയെ സൂചിപ്പിക്കുന്നതായി നാം കരുതുകയും, വാചകത്തിൽ സ്ത്രീലിംഗ നാമം ഉണ്ടെന്ന് സൂചിപ്പിക്കുന്ന ഫ്ലാഗ് സ്റ്റേറ്റിൽ ഉയർത്തുകയും ചെയ്യും. പിന്നീട് *and Tom* എന്ന വാക്കുകൾ കണ്ടപ്പോൾ, ബഹുവചന നാമം ഉണ്ടെന്ന് സൂചിപ്പിക്കുന്ന ഫ്ലാഗ് ഉയർത്തും. ഇങ്ങനെ സ്റ്റേറ്റ് നിയന്ത്രിച്ച് വാചകത്തിന്റെ വ്യാകരണ ഗുണങ്ങൾ ട്രാക്ക് ചെയ്യാം.\n",
|
||||
"\n",
|
||||
"> **Note**: LSTM-കളുടെ ആന്തരിക ഘടന മനസ്സിലാക്കാൻ മികച്ച ഒരു വിഭവം: [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) ക്രിസ്റ്റഫർ ഒലാഹ് എഴുതിയത്.\n",
|
||||
"\n",
|
||||
"LSTM സെല്ലിന്റെ ആന്തരിക ഘടന സങ്കീർണ്ണമായിരിക്കാം, പക്ഷേ Keras ഈ നടപ്പാക്കൽ `LSTM` ലെയറിനുള്ളിൽ മറച്ചുവെക്കുന്നു, അതിനാൽ മുകളിൽ നൽകിയ ഉദാഹരണത്തിൽ നാം ചെയ്യേണ്ടത് റിക്കറന്റ് ലെയർ മാറ്റുക മാത്രമാണ്:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"15000/15000 [==============================] - 188s 13ms/step - loss: 0.5692 - acc: 0.7916 - val_loss: 0.3441 - val_acc: 0.8870\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7f3d6af5c350>"
|
||||
]
|
||||
},
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer,\n",
|
||||
" keras.layers.Embedding(vocab_size, embed_size),\n",
|
||||
" keras.layers.LSTM(8),\n",
|
||||
" keras.layers.Dense(4,activation='softmax')\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer='adam')\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(8),validation_data=ds_test.map(tupelize).batch(8))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **കുറിപ്പ്** LSTM-കൾ പരിശീലിപ്പിക്കുന്നത് വളരെ മന്ദഗതിയിലാണ്, പരിശീലനത്തിന്റെ തുടക്കത്തിൽ നിങ്ങൾക്ക് കൃത്യതയിൽ വലിയ വർദ്ധനവ് കാണാനാകില്ല. നല്ല കൃത്യത നേടാൻ കുറച്ച് സമയം പരിശീലനം തുടരേണ്ടതുണ്ടാകും.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## ദ്വിദിശയും ബഹുസ്തര RNN-കളും\n",
|
||||
"\n",
|
||||
"ഇതുവരെ ഞങ്ങളുടെ ഉദാഹരണങ്ങളിൽ, റികറന്റ് നെറ്റ്വർക്കുകൾ ഒരു സീക്വൻസിന്റെ തുടക്കം മുതൽ അവസാനം വരെ പ്രവർത്തിക്കുന്നു. ഇത് നമുക്ക് സ്വാഭാവികമായി തോന്നുന്നത്, കാരണം നാം വായിക്കുന്നതോ സംസാരിക്കുന്നതോ ചെയ്യുന്ന ദിശയിലേയ്ക്ക് ഇത് പ്രവർത്തിക്കുന്നു. എന്നാൽ, ഇൻപുട്ട് സീക്വൻസിൽ യാദൃച്ഛിക ആക്സസ് ആവശ്യമായ സാഹചര്യങ്ങളിൽ, റികറന്റ് കണക്കുകൂട്ടൽ ഇരുവശത്തും നടത്തുന്നത് കൂടുതൽ യുക്തിസഹമാണ്. ഇരുവശത്തും കണക്കുകൂട്ടലുകൾ അനുവദിക്കുന്ന RNN-കൾ **ദ്വിദിശ RNN-കൾ** എന്ന് വിളിക്കപ്പെടുന്നു, ഇവ ഒരു പ്രത്യേക `Bidirectional` ലെയർ ഉപയോഗിച്ച് റികറന്റ് ലെയർ ചുറ്റിപ്പറ്റി സൃഷ്ടിക്കാം.\n",
|
||||
"\n",
|
||||
"> **Note**: `Bidirectional` ലെയർ അതിനുള്ളിൽ ലെയറിന്റെ രണ്ട് പകർപ്പുകൾ ഉണ്ടാക്കുന്നു, അവയിൽ ഒന്നിന്റെ `go_backwards` പ്രോപ്പർട്ടി `True` ആയി സജ്ജമാക്കി, സീക്വൻസിന്റെ വിരുദ്ധ ദിശയിൽ പ്രവർത്തിക്കാൻ അനുവദിക്കുന്നു.\n",
|
||||
"\n",
|
||||
"യൂണിഡിരക്ഷണോ ദ്വിദിശ RNN-കളോ സീക്വൻസിനുള്ളിൽ പാറ്റേണുകൾ പിടിച്ചുപറ്റി അവയെ സ്റ്റേറ്റ് വെക്ടറുകളിലോ ഔട്ട്പുട്ടിലോ സൂക്ഷിക്കുന്നു. കോൺവല്യൂഷണൽ നെറ്റ്വർക്കുകളെപ്പോലെ, ആദ്യ ലെയറിന്റെ താഴ്ന്ന തലത്തിലുള്ള പാറ്റേണുകൾ പിടിച്ചുപറ്റി ഉയർന്ന തലത്തിലുള്ള പാറ്റേണുകൾ പിടിക്കാൻ മറ്റൊരു റികറന്റ് ലെയർ ചേർക്കാം. ഇതാണ് **ബഹുസ്തര RNN** എന്ന ആശയം, ഇത് രണ്ട് അല്ലെങ്കിൽ അതിലധികം റികറന്റ് നെറ്റ്വർക്കുകൾ ഉൾക്കൊള്ളുന്നു, മുൻ ലെയറിന്റെ ഔട്ട്പുട്ട് അടുത്ത ലെയറിന്റെ ഇൻപുട്ടായി നൽകുന്നു.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*ഫെർണാണ്ടോ ലോപ്പസ് എഴുതിയ [ഈ മനോഹരമായ പോസ്റ്റ്](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3) നിന്നുള്ള ചിത്രം.*\n",
|
||||
"\n",
|
||||
"കേരാസ് ഈ നെറ്റ്വർക്കുകൾ നിർമ്മിക്കുന്നത് എളുപ്പമാക്കുന്നു, കാരണം നിങ്ങൾക്ക് മോഡലിൽ കൂടുതൽ റികറന്റ് ലെയറുകൾ ചേർക്കേണ്ടതുണ്ട്. അവസാന ലെയർ ഒഴികെയുള്ള എല്ലാ ലെയറുകൾക്കും `return_sequences=True` പാരാമീറ്റർ നൽകണം, കാരണം റികറന്റ് കണക്കുകൂട്ടലിന്റെ അവസാന സ്റ്റേറ്റ് മാത്രമല്ല, ഇടക്കാല സ്റ്റേറ്റുകളും ലെയർ തിരികെ നൽകണം.\n",
|
||||
"\n",
|
||||
"നമ്മുടെ ക്ലാസിഫിക്കേഷൻ പ്രശ്നത്തിന് രണ്ട് ലെയർ ദ്വിദിശ LSTM നിർമ്മിക്കാം.\n",
|
||||
"\n",
|
||||
"> **Note** ഈ കോഡ് വീണ്ടും പൂർത്തിയാകാൻ കുറച്ച് സമയം എടുക്കും, പക്ഷേ ഇതുവരെ കണ്ട ഏറ്റവും ഉയർന്ന കൃത്യത നൽകുന്നു. അതിനാൽ ഫലം കാണാൻ കാത്തിരിക്കേണ്ടതുണ്ടെന്ന് തോന്നുന്നു.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"5044/7500 [===================>..........] - ETA: 2:33 - loss: 0.3709 - acc: 0.8706\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r5045/7500 [===================>..........] - ETA: 2:33 - loss: 0.3709 - acc: 0.8706"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer,\n",
|
||||
" keras.layers.Embedding(vocab_size, 128, mask_zero=True),\n",
|
||||
" keras.layers.Bidirectional(keras.layers.LSTM(64,return_sequences=True)),\n",
|
||||
" keras.layers.Bidirectional(keras.layers.LSTM(64)), \n",
|
||||
" keras.layers.Dense(4,activation='softmax')\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer='adam')\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(batch_size),\n",
|
||||
" validation_data=ds_test.map(tupelize).batch(batch_size))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## മറ്റ് ജോലികൾക്കുള്ള RNNകൾ\n",
|
||||
"\n",
|
||||
"ഇതുവരെ, നാം RNNകൾ ഉപയോഗിച്ച് ടെക്സ്റ്റ് സീക്വൻസുകൾ വർഗ്ഗീകരിക്കുന്നതിൽ ശ്രദ്ധ കേന്ദ്രീകരിച്ചിരുന്നു. എന്നാൽ അവക്ക് ടെക്സ്റ്റ് ജനറേഷൻ, മെഷീൻ ട്രാൻസ്ലേഷൻ പോലുള്ള നിരവധി മറ്റ് ജോലികളും കൈകാര്യം ചെയ്യാൻ കഴിയും — ആ ജോലികൾ അടുത്ത യൂണിറ്റിൽ പരിഗണിക്കും.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**അസൂയാ**: \nഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernel_info": {
|
||||
"name": "conda-env-py37_tensorflow-py"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "py37_tensorflow",
|
||||
"language": "python",
|
||||
"name": "conda-env-py37_tensorflow-py"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.7.9"
|
||||
},
|
||||
"nteract": {
|
||||
"version": "nteract-front-end@1.0.0"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "81351e61f619b432ff51010a4f993194",
|
||||
"translation_date": "2025-11-26T02:07:11+00:00",
|
||||
"source_file": "lessons/5-NLP/16-RNN/RNNTF.ipynb",
|
||||
"language_code": "ml"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# പുനരാവർത്തിത ന്യൂറൽ നെറ്റ്വർക്കുകൾ\n",
|
||||
"\n",
|
||||
"മുൻ മോഡ്യൂളിൽ, നാം വാചകത്തിന്റെ സമൃദ്ധമായ സാംവേദനാത്മക പ്രതിനിധാനങ്ങൾ പഠിച്ചു. നാം ഉപയോഗിച്ച ആർക്കിടെക്ചർ വാചകത്തിലെ വാക്കുകളുടെ സംയുക്ത അർത്ഥം പിടിച്ചുപറ്റുന്നു, പക്ഷേ വാക്കുകളുടെ **ക്രമം** പരിഗണിക്കുന്നില്ല, കാരണം എംബെഡിംഗുകൾക്ക് ശേഷം നടക്കുന്ന സംയോജനം ഈ വിവരങ്ങൾ മൊഴിയുടെ യഥാർത്ഥ രൂപത്തിൽ നിന്ന് നീക്കം ചെയ്യുന്നു. ഈ മോഡലുകൾ വാക്കുകളുടെ ക്രമീകരണം പ്രതിനിധാനം ചെയ്യാൻ കഴിയാത്തതിനാൽ, വാചക സൃഷ്ടി അല്ലെങ്കിൽ ചോദ്യോത്തരങ്ങൾ പോലുള്ള കൂടുതൽ സങ്കീർണ്ണമായ അല്ലെങ്കിൽ സംശയാസ്പദമായ പ്രവർത്തനങ്ങൾ പരിഹരിക്കാൻ കഴിയില്ല.\n",
|
||||
"\n",
|
||||
"ഒരു വാചക ശ്രേണിയുടെ അർത്ഥം പിടിച്ചുപറ്റാൻ, നാം **പുനരാവർത്തിത ന്യൂറൽ നെറ്റ്വർക്ക്** എന്നറിയപ്പെടുന്ന ഒരു ന്യൂറൽ നെറ്റ്വർക്ക് ആർക്കിടെക്ചർ ഉപയോഗിക്കും, അതായത് RNN. RNN ഉപയോഗിക്കുമ്പോൾ, നാം വാചകം ഓരോ ടോക്കണും ഒരിക്കൽ씩 നെറ്റ്വർക്കിലൂടെ കടത്തുന്നു, നെറ്റ്വർക്ക് ചില **സ്റ്റേറ്റ്** ഉൽപ്പാദിപ്പിക്കുന്നു, അത് പിന്നീട് അടുത്ത ടോക്കണുമായി വീണ്ടും നെറ്റ്വർക്കിലേക്ക് നൽകുന്നു.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"ഇൻപുട്ട് ടോക്കൺ ശ്രേണി $X_0,\\dots,X_n$ നൽകിയാൽ, RNN ന്യൂറൽ നെറ്റ്വർക്ക് ബ്ലോക്കുകളുടെ ഒരു ശ്രേണി സൃഷ്ടിക്കുന്നു, ഈ ശ്രേണി ബാക്ക്പ്രൊപ്പഗേഷൻ ഉപയോഗിച്ച് എന്റു-ടു-എൻഡ് പരിശീലിപ്പിക്കുന്നു. ഓരോ നെറ്റ്വർക്ക് ബ്ലോക്കും $(X_i,S_i)$ എന്ന ജോഡി ഇൻപുട്ടായി സ്വീകരിച്ച് $S_{i+1}$ എന്ന ഔട്ട്പുട്ട് നൽകുന്നു. അവസാന സ്റ്റേറ്റ് $S_n$ അല്ലെങ്കിൽ ഔട്ട്പുട്ട് $Y_n$ ഒരു ലീനിയർ ക്ലാസിഫയറിലേക്ക് പോകുന്നു ഫലം ഉൽപ്പാദിപ്പിക്കാൻ. എല്ലാ നെറ്റ്വർക്ക് ബ്ലോക്കുകളും ഒരേ ഭാരങ്ങൾ പങ്കുവെക്കുന്നു, ഒറ്റ ബാക്ക്പ്രൊപ്പഗേഷൻ പാസിലൂടെ എന്റു-ടു-എൻഡ് പരിശീലിപ്പിക്കുന്നു.\n",
|
||||
"\n",
|
||||
"> മുകളിൽ കാണുന്ന ചിത്രം പുനരാവർത്തിത ന്യൂറൽ നെറ്റ്വർക്ക് അനറോൾഡ് രൂപത്തിൽ (ഇടത്തരം) കൂടാതെ കൂടുതൽ സംക്ഷിപ്തമായ പുനരാവർത്തിത പ്രതിനിധാനത്തിൽ (വലത്തരം) കാണിക്കുന്നു. എല്ലാ RNN സെല്ലുകൾക്കും ഒരേ **പങ്കിടാവുന്ന ഭാരങ്ങൾ** ഉണ്ടെന്ന് മനസ്സിലാക്കുന്നത് പ്രധാനമാണ്.\n",
|
||||
"\n",
|
||||
"സ്റ്റേറ്റ് വെക്ടറുകൾ $S_0,\\dots,S_n$ നെറ്റ്വർക്കിലൂടെ കടത്തപ്പെടുന്നതിനാൽ, RNN വാക്കുകൾ തമ്മിലുള്ള അനുക്രമപരമായ ആശ്രിതത്വങ്ങൾ പഠിക്കാൻ കഴിയും. ഉദാഹരണത്തിന്, *not* എന്ന വാക്ക് ശ്രേണിയിൽ എവിടെയെങ്കിലും വന്നാൽ, അത് സ്റ്റേറ്റ് വെക്ടറിലെ ചില ഘടകങ്ങളെ നിഷേധിക്കാൻ പഠിക്കാം.\n",
|
||||
"\n",
|
||||
"ഓരോ RNN സെല്ലിനുള്ളിൽ രണ്ട് ഭാര മാട്രിസുകൾ ഉണ്ട്: $W_H$യും $W_I$യും, കൂടാതെ ബയാസ് $b$. ഓരോ RNN ഘട്ടത്തിലും, ഇൻപുട്ട് $X_i$യും ഇൻപുട്ട് സ്റ്റേറ്റ് $S_i$യും നൽകിയാൽ, ഔട്ട്പുട്ട് സ്റ്റേറ്റ് $S_{i+1} = f(W_H\\times S_i + W_I\\times X_i+b)$ എന്നിങ്ങനെ കണക്കാക്കുന്നു, ഇവിടെ $f$ ഒരു ആക്ടിവേഷൻ ഫംഗ്ഷനാണ് (സാധാരണയായി $\\tanh$).\n",
|
||||
"\n",
|
||||
"> വാചക സൃഷ്ടി പോലുള്ള പ്രശ്നങ്ങൾക്കായി (അടുത്ത യൂണിറ്റിൽ നാം പഠിക്കും) അല്ലെങ്കിൽ മെഷീൻ വിവർത്തനത്തിനായി, ഓരോ RNN ഘട്ടത്തിലും ചില ഔട്ട്പുട്ട് മൂല്യവും ലഭിക്കണം. ഈ സാഹചര്യത്തിൽ, മറ്റൊരു മാട്രിക്സ് $W_O$ ഉണ്ട്, ഔട്ട്പുട്ട് $Y_i=f(W_O\\times S_i+b_O)$ എന്നിങ്ങനെ കണക്കാക്കുന്നു.\n",
|
||||
"\n",
|
||||
"പുനരാവർത്തിത ന്യൂറൽ നെറ്റ്വർക്കുകൾ നമ്മുടെ വാർത്താ ഡാറ്റാസെറ്റ് ക്ലാസിഫൈ ചെയ്യുന്നതിൽ എങ്ങനെ സഹായിക്കാമെന്ന് നോക്കാം.\n",
|
||||
"\n",
|
||||
"> സാൻഡ്ബോക്സ് പരിസ്ഥിതിക്കായി, ആവശ്യമായ ലൈബ്രറി ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ടെന്ന് ഉറപ്പാക്കാനും ഡാറ്റ പ്രിഫെച്ച് ചെയ്യാനും താഴെ കാണുന്ന സെൽ പ്രവർത്തിപ്പിക്കേണ്ടതാണ്. നിങ്ങൾ ലോക്കലായി പ്രവർത്തിപ്പിക്കുന്നുവെങ്കിൽ, താഴെ കാണുന്ന സെൽ ഒഴിവാക്കാം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import sys\n",
|
||||
"!{sys.executable} -m pip install --quiet tensorflow_datasets==4.4.0\n",
|
||||
"!cd ~ && wget -q -O - https://mslearntensorflowlp.blob.core.windows.net/data/tfds-ag-news.tgz | tar xz"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import tensorflow as tf\n",
|
||||
"from tensorflow import keras\n",
|
||||
"import tensorflow_datasets as tfds\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"# We are going to be training pretty large models. In order not to face errors, we need\n",
|
||||
"# to set tensorflow option to grow GPU memory allocation when required\n",
|
||||
"physical_devices = tf.config.list_physical_devices('GPU') \n",
|
||||
"if len(physical_devices)>0:\n",
|
||||
" tf.config.experimental.set_memory_growth(physical_devices[0], True)\n",
|
||||
"\n",
|
||||
"ds_train, ds_test = tfds.load('ag_news_subset').values()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"nteract": {
|
||||
"transient": {
|
||||
"deleting": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"വലിയ മോഡലുകൾ പരിശീലിപ്പിക്കുമ്പോൾ, GPU മെമ്മറി അലോക്കേഷൻ പ്രശ്നമായി മാറാം. ഡാറ്റ GPU മെമ്മറിയിൽ ഫിറ്റ് ആകുകയും പരിശീലനം വേഗത്തിൽ നടക്കുകയും ചെയ്യാൻ, വ്യത്യസ്ത മിനിബാച്ച് വലുപ്പങ്ങൾ പരീക്ഷിക്കേണ്ടതുണ്ടാകാം. നിങ്ങൾ ഈ കോഡ് നിങ്ങളുടെ സ്വന്തം GPU യന്ത്രത്തിൽ ഓടിക്കുന്നുവെങ്കിൽ, പരിശീലനം വേഗത്തിലാക്കാൻ മിനിബാച്ച് വലുപ്പം ക്രമീകരിച്ച് പരീക്ഷിക്കാം.\n",
|
||||
"\n",
|
||||
"> **Note**: NVidia ഡ്രൈവർസിന്റെ ചില പതിപ്പുകൾ മോഡൽ പരിശീലനത്തിന് ശേഷം മെമ്മറി റിലീസ് ചെയ്യാത്തതായി അറിയപ്പെടുന്നു. ഈ നോട്ട്ബുക്കിൽ നാം പല ഉദാഹരണങ്ങളും ഓടിക്കുന്നതിനാൽ, പ്രത്യേകിച്ച് നിങ്ങൾ ഈ നോട്ട്ബുക്കിന്റെ ഭാഗമായുള്ള പരീക്ഷണങ്ങൾ നടത്തുമ്പോൾ, ചില സജ്ജീകരണങ്ങളിൽ മെമ്മറി തീരാൻ സാധ്യതയുണ്ട്. മോഡൽ പരിശീലനം ആരംഭിക്കുമ്പോൾ ചില അസാധാരണ പിശകുകൾ നേരിടുകയാണെങ്കിൽ, നോട്ട്ബുക്ക് കർണൽ പുനരാരംഭിക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കാം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"collapsed": true,
|
||||
"jupyter": {
|
||||
"outputs_hidden": false,
|
||||
"source_hidden": false
|
||||
},
|
||||
"nteract": {
|
||||
"transient": {
|
||||
"deleting": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"batch_size = 16\n",
|
||||
"embed_size = 64"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## ലളിതമായ RNN ക്ലാസിഫയർ\n",
|
||||
"\n",
|
||||
"ലളിതമായ RNN-ന്റെ കാര്യത്തിൽ, ഓരോ റിക്കറന്റ് യൂണിറ്റും ഒരു ലളിതമായ ലീനിയർ നെറ്റ്വർക്കാണ്, ഇത് ഒരു ഇൻപുട്ട് വെക്ടറും സ്റ്റേറ്റ് വെക്ടറും സ്വീകരിച്ച് പുതിയ സ്റ്റേറ്റ് വെക്ടർ ഉത്പാദിപ്പിക്കുന്നു. Keras-ൽ ഇത് `SimpleRNN` ലെയർ ഉപയോഗിച്ച് പ്രതിനിധീകരിക്കാം.\n",
|
||||
"\n",
|
||||
"RNN ലെയറിലേക്ക് നേരിട്ട് വൺ-ഹോട്ട് എൻകോഡഡ് ടോക്കണുകൾ നൽകാമെങ്കിലും, അവയുടെ ഉയർന്ന ഡൈമെൻഷണാലിറ്റിയുടെ കാരണം ഇത് നല്ല ആശയമല്ല. അതിനാൽ, വാക്കുകളുടെ വെക്ടറുകളുടെ ഡൈമെൻഷണാലിറ്റി കുറയ്ക്കാൻ ഒരു എംബെഡ്ഡിംഗ് ലെയർ ഉപയോഗിച്ച്, തുടർന്ന് RNN ലെയർ, ഒടുവിൽ `Dense` ക്ലാസിഫയർ ഉപയോഗിക്കും.\n",
|
||||
"\n",
|
||||
"> **Note**: ഡൈമെൻഷണാലിറ്റി അത്ര ഉയർന്നതല്ലാത്ത സാഹചര്യങ്ങളിൽ, ഉദാഹരണത്തിന് കറക്റ്റർ-ലെവൽ ടോക്കണൈസേഷൻ ഉപയോഗിക്കുമ്പോൾ, വൺ-ഹോട്ട് എൻകോഡഡ് ടോക്കണുകൾ നേരിട്ട് RNN സെല്ലിലേക്ക് നൽകുന്നത് യുക്തിയുള്ളതായിരിക്കാം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"sequential\"\n",
|
||||
"_________________________________________________________________\n",
|
||||
"Layer (type) Output Shape Param # \n",
|
||||
"=================================================================\n",
|
||||
"text_vectorization (TextVect (None, None) 0 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"embedding (Embedding) (None, None, 64) 1280000 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"simple_rnn (SimpleRNN) (None, 16) 1296 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"dense (Dense) (None, 4) 68 \n",
|
||||
"=================================================================\n",
|
||||
"Total params: 1,281,364\n",
|
||||
"Trainable params: 1,281,364\n",
|
||||
"Non-trainable params: 0\n",
|
||||
"_________________________________________________________________\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vocab_size = 20000\n",
|
||||
"\n",
|
||||
"vectorizer = keras.layers.experimental.preprocessing.TextVectorization(\n",
|
||||
" max_tokens=vocab_size,\n",
|
||||
" input_shape=(1,))\n",
|
||||
"\n",
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer,\n",
|
||||
" keras.layers.Embedding(vocab_size, embed_size),\n",
|
||||
" keras.layers.SimpleRNN(16),\n",
|
||||
" keras.layers.Dense(4,activation='softmax')\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.summary()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **കുറിപ്പ്:** എളുപ്പത്തിനായി ഇവിടെ ഒരു പരിശീലനമില്ലാത്ത എംബെഡിംഗ് ലെയർ ഉപയോഗിക്കുന്നു, പക്ഷേ മുൻവശം യൂണിറ്റിൽ വിവരിച്ച പോലെ Word2Vec ഉപയോഗിച്ച് പരിശീലനമേറ്റ എംബെഡിംഗ് ലെയർ ഉപയോഗിക്കുന്നത് മികച്ച ഫലങ്ങൾ നൽകും. ഈ കോഡ് pretrained embeddings ഉപയോഗിച്ച് പ്രവർത്തിക്കാൻ നിങ്ങൾക്ക് മാറ്റി ഉപയോഗിക്കുന്നത് നല്ല അഭ്യാസമായിരിക്കും.\n",
|
||||
"\n",
|
||||
"ഇപ്പോൾ നമുക്ക് RNN പരിശീലിപ്പിക്കാം. സാധാരണയായി RNNകൾ പരിശീലിപ്പിക്കുന്നത് വളരെ ബുദ്ധിമുട്ടാണ്, കാരണം RNN സെല്ലുകൾ സീക്വൻസ് നീളത്തിന് അനുസരിച്ച് അനറോൾ ചെയ്താൽ, ബാക്ക്പ്രൊപ്പഗേഷനിൽ ഉൾപ്പെടുന്ന ലെയറുകളുടെ എണ്ണം വളരെ കൂടുതലാകും. അതിനാൽ ചെറിയ ലേണിംഗ് റേറ്റ് തിരഞ്ഞെടുക്കുകയും നല്ല ഫലങ്ങൾ ലഭിക്കാൻ വലിയ ഡാറ്റാസെറ്റിൽ നെറ്റ്വർക്ക് പരിശീലിപ്പിക്കേണ്ടതുണ്ട്. ഇത് വളരെ സമയം എടുക്കാം, അതിനാൽ GPU ഉപയോഗിക്കുന്നത് മുൻഗണനയുള്ളതാണ്.\n",
|
||||
"\n",
|
||||
"വേഗത വർദ്ധിപ്പിക്കാൻ, നാം RNN മോഡൽ വാർത്താ തലക്കെട്ടുകളിൽ മാത്രം പരിശീലിപ്പിക്കും, വിവരണം ഒഴിവാക്കും. നിങ്ങൾ വിവരണത്തോടെ പരിശീലിപ്പിക്കാൻ ശ്രമിച്ച് മോഡൽ പരിശീലിപ്പിക്കാൻ കഴിയുന്നുണ്ടോ എന്ന് നോക്കാം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Training vectorizer\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def extract_title(x):\n",
|
||||
" return x['title']\n",
|
||||
"\n",
|
||||
"def tupelize_title(x):\n",
|
||||
" return (extract_title(x),x['label'])\n",
|
||||
"\n",
|
||||
"print('Training vectorizer')\n",
|
||||
"vectorizer.adapt(ds_train.take(2000).map(extract_title))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"7500/7500 [==============================] - 82s 11ms/step - loss: 0.6629 - acc: 0.7623 - val_loss: 0.5559 - val_acc: 0.7995\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7f3e0030d350>"
|
||||
]
|
||||
},
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer='adam')\n",
|
||||
"model.fit(ds_train.map(tupelize_title).batch(batch_size),validation_data=ds_test.map(tupelize_title).batch(batch_size))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"nteract": {
|
||||
"transient": {
|
||||
"deleting": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"> **കുറിപ്പ്** ഇവിടെ കൃത്യത കുറവായിരിക്കാം, കാരണം നാം വാർത്താ തലക്കെട്ടുകളിൽ മാത്രമേ പരിശീലനം നടത്തുകയുള്ളൂ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## വ്യത്യസ്ത നീളമുള്ള സീക്വൻസുകൾ വീണ്ടും പരിശോധിക്കൽ\n",
|
||||
"\n",
|
||||
"`TextVectorization` ലെയർ സ്വയം മിനിബാച്ചിലെ വ്യത്യസ്ത നീളമുള്ള സീക്വൻസുകൾ പാഡ് ടോക്കണുകളാൽ പാഡ് ചെയ്യുമെന്ന് ഓർക്കുക. ആ ടോക്കണുകളും പരിശീലനത്തിൽ പങ്കാളികളാകുന്നു, അതിനാൽ മോഡലിന്റെ കോൺവെർജൻസ് സങ്കീർണ്ണമാക്കാം.\n",
|
||||
"\n",
|
||||
"പാഡിംഗിന്റെ അളവ് കുറയ്ക്കാൻ നാം പല മാർഗ്ഗങ്ങളും സ്വീകരിക്കാം. അവയിൽ ഒന്നാണ് ഡാറ്റാസെറ്റ് സീക്വൻസ് നീളത്തിന്റെ അടിസ്ഥാനത്തിൽ പുനഃക്രമീകരിച്ച് എല്ലാ സീക്വൻസുകളും വലുപ്പം അനുസരിച്ച് ഗ്രൂപ്പുചെയ്യുക. ഇത് `tf.data.experimental.bucket_by_sequence_length` ഫംഗ്ഷൻ ഉപയോഗിച്ച് ചെയ്യാം (കാണുക [ഡോക്യുമെന്റേഷൻ](https://www.tensorflow.org/api_docs/python/tf/data/experimental/bucket_by_sequence_length)).\n",
|
||||
"\n",
|
||||
"മറ്റൊരു മാർഗ്ഗം **മാസ്കിംഗ്** ഉപയോഗിക്കുകയാണ്. Keras-ൽ ചില ലെയറുകൾ പരിശീലനത്തിൽ ഏത് ടോക്കണുകൾ പരിഗണിക്കണമെന്ന് കാണിക്കുന്ന അധിക ഇൻപുട്ട് പിന്തുണയ്ക്കുന്നു. മാസ്കിംഗ് നമ്മുടെ മോഡലിൽ ഉൾപ്പെടുത്താൻ, നാം വേർതിരിച്ച `Masking` ലെയർ ([ഡോക്സ്](https://keras.io/api/layers/core_layers/masking/)) ചേർക്കാം, അല്ലെങ്കിൽ `Embedding` ലെയറിന്റെ `mask_zero=True` പാരാമീറ്റർ നിർദ്ദേശിക്കാം.\n",
|
||||
"\n",
|
||||
"> **Note**: ഈ പരിശീലനം മുഴുവൻ ഡാറ്റാസെറ്റിൽ ഒരു എപ്പോക്ക് പൂർത്തിയാക്കാൻ ഏകദേശം 5 മിനിറ്റ് എടുക്കും. ക്ഷമത കുറഞ്ഞാൽ 언제든 പരിശീലനം നിർത്താം. നിങ്ങൾക്ക് ചെയ്യാവുന്നത് `.take(...)` ക്ലോസ് `ds_train` ഉം `ds_test` datasets-ഉം ശേഷം ചേർത്ത് പരിശീലനത്തിനുള്ള ഡാറ്റയുടെ അളവ് പരിമിതപ്പെടുത്തലും ആണ്.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"7500/7500 [==============================] - 371s 49ms/step - loss: 0.5401 - acc: 0.8079 - val_loss: 0.3780 - val_acc: 0.8822\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7f3dec118850>"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def extract_text(x):\n",
|
||||
" return x['title']+' '+x['description']\n",
|
||||
"\n",
|
||||
"def tupelize(x):\n",
|
||||
" return (extract_text(x),x['label'])\n",
|
||||
"\n",
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer,\n",
|
||||
" keras.layers.Embedding(vocab_size,embed_size,mask_zero=True),\n",
|
||||
" keras.layers.SimpleRNN(16),\n",
|
||||
" keras.layers.Dense(4,activation='softmax')\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer='adam')\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(batch_size),validation_data=ds_test.map(tupelize).batch(batch_size))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഇപ്പോൾ നാം മാസ്കിംഗ് ഉപയോഗിക്കുന്നതിനാൽ, തലക്കെട്ടുകളും വിവരണങ്ങളും ഉൾപ്പെടുന്ന മുഴുവൻ ഡാറ്റാസെറ്റിലും മോഡൽ പരിശീലിപ്പിക്കാം.\n",
|
||||
"\n",
|
||||
"> **Note**: നാം വാർത്താ തലക്കെട്ടുകളിൽ പരിശീലിപ്പിച്ച വെക്ടറൈസർ ഉപയോഗിക്കുന്നുണ്ടെന്ന് നിങ്ങൾ ശ്രദ്ധിച്ചിട്ടുണ്ടോ, ലേഖനത്തിന്റെ മുഴുവൻ ഉള്ളടക്കമല്ല? ഇതു ചില ടോക്കണുകൾ അവഗണിക്കപ്പെടാൻ കാരണമാകാം, അതിനാൽ വെക്ടറൈസർ വീണ്ടും പരിശീലിപ്പിക്കുന്നത് നല്ലതാണ്. എങ്കിലും, ഇതിന് വളരെ ചെറിയ ഫലമുണ്ടാകാമെന്ന് തോന്നുന്നു, അതുകൊണ്ട് ലളിതത്വത്തിനായി മുമ്പത്തെ പ്രീ-ട്രെയിൻ ചെയ്ത വെക്ടറൈസറിനോടെയാണ് നാം തുടരുന്നത്.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## LSTM: ദീർഘകാല ചെറുകാല സ്മൃതി\n",
|
||||
"\n",
|
||||
"RNN-കളുടെ പ്രധാന പ്രശ്നങ്ങളിൽ ഒന്നാണ് **വാനിഷിംഗ് ഗ്രേഡിയന്റുകൾ**. RNN-കൾ വളരെ ദൈർഘ്യമേറിയതായിരിക്കാം, ബാക്ക്പ്രൊപ്പഗേഷൻ സമയത്ത് ഗ്രേഡിയന്റുകൾ നെറ്റ്വർക്കിന്റെ ആദ്യ ലെയറിലേക്ക് പൂർണ്ണമായി പ്രചരിപ്പിക്കാൻ ബുദ്ധിമുട്ട് ഉണ്ടാകാം. ഇതു സംഭവിക്കുമ്പോൾ, നെറ്റ്വർക്ക് ദൂരെയുള്ള ടോക്കണുകൾ തമ്മിലുള്ള ബന്ധങ്ങൾ പഠിക്കാൻ കഴിയില്ല. ഈ പ്രശ്നം ഒഴിവാക്കാനുള്ള ഒരു മാർഗം **ഗേറ്റുകൾ** ഉപയോഗിച്ച് **സ്പഷ്ടമായ സ്റ്റേറ്റ് മാനേജ്മെന്റ്** പരിചയപ്പെടുത്തുകയാണ്. ഗേറ്റുകൾ പരിചയപ്പെടുത്തുന്ന രണ്ട് സാധാരണ ആർക്കിടെക്ചറുകൾ **ലോങ് ഷോർട്ട്-ടേം മെമ്മറി** (LSTM)യും **ഗേറ്റഡ് റീലേ യൂണിറ്റ്** (GRU)യും ആണ്. ഇവിടെ നാം LSTM-കളെ പരിചയപ്പെടും.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"LSTM നെറ്റ്വർക്ക് RNN-നെപ്പോലെ ക്രമീകരിച്ചിരിക്കുന്നു, പക്ഷേ ലെയർ മുതൽ ലെയർ വരെ രണ്ട് സ്റ്റേറ്റുകൾ കൈമാറുന്നു: യഥാർത്ഥ സ്റ്റേറ്റ് $c$, കൂടാതെ ഹിഡൻ വെക്ടർ $h$. ഓരോ യൂണിറ്റിലും, ഹിഡൻ വെക്ടർ $h_{t-1}$ ഇൻപുട്ട് $x_t$-നൊപ്പം ചേർത്ത്, **ഗേറ്റുകൾ** വഴി സ്റ്റേറ്റ് $c_t$-ക്കും ഔട്ട്പുട്ട് $h_t$-ക്കും എന്ത് സംഭവിക്കുമെന്ന് നിയന്ത്രിക്കുന്നു. ഓരോ ഗേറ്റിനും സിഗ്മോയിഡ് ആക്ടിവേഷൻ ഉണ്ട് (ഔട്ട്പുട്ട് $[0,1]$ പരിധിയിൽ), ഇത് സ്റ്റേറ്റ് വെക്ടറുമായി ഗുണിക്കുമ്പോൾ ബിറ്റ്വൈസ് മാസ്ക് പോലെ കരുതാം. LSTM-കൾക്ക് താഴെപ്പറയുന്ന ഗേറ്റുകൾ ഉണ്ട് (മുകളിൽ ചിത്രത്തിൽ ഇടത്തുനിന്ന് വലത്തേക്ക്):\n",
|
||||
"* **ഫോർഗറ്റ് ഗേറ്റ്**: വെക്ടർ $c_{t-1}$-ന്റെ ഏത് ഘടകങ്ങൾ മറക്കണം, ഏത് കടത്തിക്കളയണം എന്ന് നിർണ്ണയിക്കുന്നു.\n",
|
||||
"* **ഇൻപുട്ട് ഗേറ്റ്**: ഇൻപുട്ട് വെക്ടറും മുൻ ഹിഡൻ വെക്ടറും സ്റ്റേറ്റ് വെക്ടറിലേക്ക് എത്രമാത്രം വിവരങ്ങൾ ഉൾപ്പെടുത്തണം എന്ന് നിർണ്ണയിക്കുന്നു.\n",
|
||||
"* **ഔട്ട്പുട്ട് ഗേറ്റ്**: പുതിയ സ്റ്റേറ്റ് വെക്ടർ എടുത്ത് അതിന്റെ ഏത് ഘടകങ്ങൾ പുതിയ ഹിഡൻ വെക്ടർ $h_t$ സൃഷ്ടിക്കാൻ ഉപയോഗിക്കുമെന്ന് തീരുമാനിക്കുന്നു.\n",
|
||||
"\n",
|
||||
"സ്റ്റേറ്റ് $c$-യുടെ ഘടകങ്ങളെ ഓൺ-ഓഫ് ചെയ്യാവുന്ന ഫ്ലാഗുകളായി കരുതാം. ഉദാഹരണത്തിന്, സീക്വൻസിൽ *Alice* എന്ന പേര് കണ്ടപ്പോൾ, അത് ഒരു സ്ത്രീയെ സൂചിപ്പിക്കുന്നതായി നാം കരുതുകയും, വാചകത്തിൽ സ്ത്രീലിംഗ നാമം ഉണ്ടെന്ന് സൂചിപ്പിക്കുന്ന ഫ്ലാഗ് സ്റ്റേറ്റിൽ ഉയർത്തുകയും ചെയ്യും. പിന്നീട് *and Tom* എന്ന വാക്കുകൾ കണ്ടപ്പോൾ, ബഹുവചന നാമം ഉണ്ടെന്ന് സൂചിപ്പിക്കുന്ന ഫ്ലാഗ് ഉയർത്തും. ഇങ്ങനെ സ്റ്റേറ്റ് നിയന്ത്രിച്ച് വാചകത്തിന്റെ വ്യാകരണ ഗുണങ്ങൾ ട്രാക്ക് ചെയ്യാം.\n",
|
||||
"\n",
|
||||
"> **Note**: LSTM-കളുടെ ആന്തരിക ഘടന മനസ്സിലാക്കാൻ മികച്ച ഒരു വിഭവം: [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) ക്രിസ്റ്റഫർ ഒലാഹ് എഴുതിയത്.\n",
|
||||
"\n",
|
||||
"LSTM സെല്ലിന്റെ ആന്തരിക ഘടന സങ്കീർണ്ണമായിരിക്കാം, പക്ഷേ Keras ഈ നടപ്പാക്കൽ `LSTM` ലെയറിനുള്ളിൽ മറച്ചുവെക്കുന്നു, അതിനാൽ മുകളിൽ നൽകിയ ഉദാഹരണത്തിൽ നാം ചെയ്യേണ്ടത് റിക്കറന്റ് ലെയർ മാറ്റുക മാത്രമാണ്:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"15000/15000 [==============================] - 188s 13ms/step - loss: 0.5692 - acc: 0.7916 - val_loss: 0.3441 - val_acc: 0.8870\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7f3d6af5c350>"
|
||||
]
|
||||
},
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer,\n",
|
||||
" keras.layers.Embedding(vocab_size, embed_size),\n",
|
||||
" keras.layers.LSTM(8),\n",
|
||||
" keras.layers.Dense(4,activation='softmax')\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer='adam')\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(8),validation_data=ds_test.map(tupelize).batch(8))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **കുറിപ്പ്** LSTM-കൾ പരിശീലിപ്പിക്കുന്നത് വളരെ മന്ദഗതിയിലാണ്, പരിശീലനത്തിന്റെ തുടക്കത്തിൽ നിങ്ങൾക്ക് കൃത്യതയിൽ വലിയ വർദ്ധനവ് കാണാനാകില്ല. നല്ല കൃത്യത നേടാൻ കുറച്ച് സമയം പരിശീലനം തുടരേണ്ടതുണ്ടാകും.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## ദ്വിദിശയും ബഹുസ്തര RNN-കളും\n",
|
||||
"\n",
|
||||
"ഇതുവരെ ഞങ്ങളുടെ ഉദാഹരണങ്ങളിൽ, റികറന്റ് നെറ്റ്വർക്കുകൾ ഒരു സീക്വൻസിന്റെ തുടക്കം മുതൽ അവസാനം വരെ പ്രവർത്തിക്കുന്നു. ഇത് നമുക്ക് സ്വാഭാവികമായി തോന്നുന്നത്, കാരണം നാം വായിക്കുന്നതോ സംസാരിക്കുന്നതോ ചെയ്യുന്ന ദിശയിലേയ്ക്ക് ഇത് പ്രവർത്തിക്കുന്നു. എന്നാൽ, ഇൻപുട്ട് സീക്വൻസിൽ യാദൃച്ഛിക ആക്സസ് ആവശ്യമായ സാഹചര്യങ്ങളിൽ, റികറന്റ് കണക്കുകൂട്ടൽ ഇരുവശത്തും നടത്തുന്നത് കൂടുതൽ യുക്തിസഹമാണ്. ഇരുവശത്തും കണക്കുകൂട്ടലുകൾ അനുവദിക്കുന്ന RNN-കൾ **ദ്വിദിശ RNN-കൾ** എന്ന് വിളിക്കപ്പെടുന്നു, ഇവ ഒരു പ്രത്യേക `Bidirectional` ലെയർ ഉപയോഗിച്ച് റികറന്റ് ലെയർ ചുറ്റിപ്പറ്റി സൃഷ്ടിക്കാം.\n",
|
||||
"\n",
|
||||
"> **Note**: `Bidirectional` ലെയർ അതിനുള്ളിൽ ലെയറിന്റെ രണ്ട് പകർപ്പുകൾ ഉണ്ടാക്കുന്നു, അവയിൽ ഒന്നിന്റെ `go_backwards` പ്രോപ്പർട്ടി `True` ആയി സജ്ജമാക്കി, സീക്വൻസിന്റെ വിരുദ്ധ ദിശയിൽ പ്രവർത്തിക്കാൻ അനുവദിക്കുന്നു.\n",
|
||||
"\n",
|
||||
"യൂണിഡിരക്ഷണോ ദ്വിദിശ RNN-കളോ സീക്വൻസിനുള്ളിൽ പാറ്റേണുകൾ പിടിച്ചുപറ്റി അവയെ സ്റ്റേറ്റ് വെക്ടറുകളിലോ ഔട്ട്പുട്ടിലോ സൂക്ഷിക്കുന്നു. കോൺവല്യൂഷണൽ നെറ്റ്വർക്കുകളെപ്പോലെ, ആദ്യ ലെയറിന്റെ താഴ്ന്ന തലത്തിലുള്ള പാറ്റേണുകൾ പിടിച്ചുപറ്റി ഉയർന്ന തലത്തിലുള്ള പാറ്റേണുകൾ പിടിക്കാൻ മറ്റൊരു റികറന്റ് ലെയർ ചേർക്കാം. ഇതാണ് **ബഹുസ്തര RNN** എന്ന ആശയം, ഇത് രണ്ട് അല്ലെങ്കിൽ അതിലധികം റികറന്റ് നെറ്റ്വർക്കുകൾ ഉൾക്കൊള്ളുന്നു, മുൻ ലെയറിന്റെ ഔട്ട്പുട്ട് അടുത്ത ലെയറിന്റെ ഇൻപുട്ടായി നൽകുന്നു.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*ഫെർണാണ്ടോ ലോപ്പസ് എഴുതിയ [ഈ മനോഹരമായ പോസ്റ്റ്](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3) നിന്നുള്ള ചിത്രം.*\n",
|
||||
"\n",
|
||||
"കേരാസ് ഈ നെറ്റ്വർക്കുകൾ നിർമ്മിക്കുന്നത് എളുപ്പമാക്കുന്നു, കാരണം നിങ്ങൾക്ക് മോഡലിൽ കൂടുതൽ റികറന്റ് ലെയറുകൾ ചേർക്കേണ്ടതുണ്ട്. അവസാന ലെയർ ഒഴികെയുള്ള എല്ലാ ലെയറുകൾക്കും `return_sequences=True` പാരാമീറ്റർ നൽകണം, കാരണം റികറന്റ് കണക്കുകൂട്ടലിന്റെ അവസാന സ്റ്റേറ്റ് മാത്രമല്ല, ഇടക്കാല സ്റ്റേറ്റുകളും ലെയർ തിരികെ നൽകണം.\n",
|
||||
"\n",
|
||||
"നമ്മുടെ ക്ലാസിഫിക്കേഷൻ പ്രശ്നത്തിന് രണ്ട് ലെയർ ദ്വിദിശ LSTM നിർമ്മിക്കാം.\n",
|
||||
"\n",
|
||||
"> **Note** ഈ കോഡ് വീണ്ടും പൂർത്തിയാകാൻ കുറച്ച് സമയം എടുക്കും, പക്ഷേ ഇതുവരെ കണ്ട ഏറ്റവും ഉയർന്ന കൃത്യത നൽകുന്നു. അതിനാൽ ഫലം കാണാൻ കാത്തിരിക്കേണ്ടതുണ്ടെന്ന് തോന്നുന്നു.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"5044/7500 [===================>..........] - ETA: 2:33 - loss: 0.3709 - acc: 0.8706\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r5045/7500 [===================>..........] - ETA: 2:33 - loss: 0.3709 - acc: 0.8706"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer,\n",
|
||||
" keras.layers.Embedding(vocab_size, 128, mask_zero=True),\n",
|
||||
" keras.layers.Bidirectional(keras.layers.LSTM(64,return_sequences=True)),\n",
|
||||
" keras.layers.Bidirectional(keras.layers.LSTM(64)), \n",
|
||||
" keras.layers.Dense(4,activation='softmax')\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer='adam')\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(batch_size),\n",
|
||||
" validation_data=ds_test.map(tupelize).batch(batch_size))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## മറ്റ് ജോലികൾക്കുള്ള RNNകൾ\n",
|
||||
"\n",
|
||||
"ഇതുവരെ, നാം RNNകൾ ഉപയോഗിച്ച് ടെക്സ്റ്റ് സീക്വൻസുകൾ വർഗ്ഗീകരിക്കുന്നതിൽ ശ്രദ്ധ കേന്ദ്രീകരിച്ചിരുന്നു. എന്നാൽ അവക്ക് ടെക്സ്റ്റ് ജനറേഷൻ, മെഷീൻ ട്രാൻസ്ലേഷൻ പോലുള്ള നിരവധി മറ്റ് ജോലികളും കൈകാര്യം ചെയ്യാൻ കഴിയും — ആ ജോലികൾ അടുത്ത യൂണിറ്റിൽ പരിഗണിക്കും.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**അസൂയാ**: \nഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernel_info": {
|
||||
"name": "conda-env-py37_tensorflow-py"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "py37_tensorflow",
|
||||
"language": "python",
|
||||
"name": "conda-env-py37_tensorflow-py"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.7.9"
|
||||
},
|
||||
"nteract": {
|
||||
"version": "nteract-front-end@1.0.0"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "81351e61f619b432ff51010a4f993194",
|
||||
"translation_date": "2025-11-26T02:07:11+00:00",
|
||||
"source_file": "lessons/5-NLP/16-RNN/RNNTF.ipynb",
|
||||
"language_code": "ml"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
|
|
@ -1,411 +1,411 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# ജനറേറ്റീവ് നെറ്റ്വർക്കുകൾ\n",
|
||||
"\n",
|
||||
"റികറന്റ് ന്യൂറൽ നെറ്റ്വർക്കുകൾ (RNNs) மற்றும் അവയുടെ ഗേറ്റഡ് സെൽ വകഭേദങ്ങൾ, ഉദാഹരണത്തിന് ലോങ് ഷോർട്ട് ടേം മെമ്മറി സെലുകൾ (LSTMs) மற்றும் ഗേറ്റഡ് റികറന്റ് യൂണിറ്റുകൾ (GRUs), ഭാഷാ മോഡലിംഗിന് ഒരു സംവിധാനം നൽകുന്നു, അതായത് അവ വാക്കുകളുടെ ക്രമീകരണം പഠിച്ച് ഒരു സീക്വൻസിലെ അടുത്ത വാക്ക് പ്രവചിക്കാൻ കഴിയും. ഇതുവഴി RNN-കൾ **ജനറേറ്റീവ് ടാസ്കുകൾ**ക്കായി ഉപയോഗിക്കാം, ഉദാഹരണത്തിന് സാധാരണ ടെക്സ്റ്റ് ജനറേഷൻ, മെഷീൻ ട്രാൻസ്ലേഷൻ,甚至 ഇമേജ് ക്യാപ്ഷനിംഗ്.\n",
|
||||
"\n",
|
||||
"മുൻ യൂണിറ്റിൽ ചർച്ച ചെയ്ത RNN ആർക്കിടെക്ചറിൽ, ഓരോ RNN യൂണിറ്റും അടുത്ത ഹിഡൻ സ്റ്റേറ്റ് ഔട്ട്പുട്ടായി ഉൽപ്പാദിപ്പിച്ചിരുന്നു. എന്നാൽ, ഓരോ റികറന്റ് യൂണിറ്റിനും മറ്റൊരു ഔട്ട്പുട്ട് കൂടി ചേർക്കാം, ഇത് ഒരു **സീക്വൻസ്** (മൂല സീക്വൻസിന്റെ നീളത്തിന് തുല്യമായ) ഔട്ട്പുട്ട് നൽകാൻ സഹായിക്കും. കൂടാതെ, ഓരോ ഘട്ടത്തിലും ഇൻപുട്ട് സ്വീകരിക്കാത്ത RNN യൂണിറ്റുകൾ ഉപയോഗിച്ച്, ചില പ്രാരംഭ സ്റ്റേറ്റ് വെക്ടർ എടുത്ത്, തുടർന്ന് ഔട്ട്പുട്ടുകളുടെ ഒരു സീക്വൻസ് ഉൽപ്പാദിപ്പിക്കാം.\n",
|
||||
"\n",
|
||||
"ഈ നോട്ട്ബുക്കിൽ, നാം ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യാൻ സഹായിക്കുന്ന ലളിതമായ ജനറേറ്റീവ് മോഡലുകളെ കേന്ദ്രീകരിക്കും. ലളിതത്വത്തിനായി, നാം **ക്യാരക്ടർ-ലെവൽ നെറ്റ്വർക്ക്** നിർമ്മിക്കാം, ഇത് അക്ഷരമുതൽ അക്ഷരം ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യും. പരിശീലനത്തിനിടെ, നാം ഒരു ടെക്സ്റ്റ് കോർപ്പസ് എടുത്ത്, അത് അക്ഷര സീക്വൻസുകളായി വിഭജിക്കണം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Loading dataset...\n",
|
||||
"Building vocab...\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import torch\n",
|
||||
"import torchtext\n",
|
||||
"import numpy as np\n",
|
||||
"from torchnlp import *\n",
|
||||
"train_dataset,test_dataset,classes,vocab = load_dataset()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## അക്ഷര വാക്ക് നിർമ്മാണം\n",
|
||||
"\n",
|
||||
"അക്ഷരനിര അടിസ്ഥാനത്തിലുള്ള ജനറേറ്റീവ് നെറ്റ്വർക്ക് നിർമ്മിക്കാൻ, വാക്കുകൾക്ക് പകരം ടെക്സ്റ്റ് വ്യക്തിഗത അക്ഷരങ്ങളായി വിഭജിക്കണം. ഇത് സാധ്യമാക്കാൻ വ്യത്യസ്തമായ ഒരു ടോക്കനൈസർ നിർവചിക്കാം:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Vocabulary size = 82\n",
|
||||
"Encoding of 'a' is 1\n",
|
||||
"Character with code 13 is c\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def char_tokenizer(words):\n",
|
||||
" return list(words) #[word for word in words]\n",
|
||||
"\n",
|
||||
"counter = collections.Counter()\n",
|
||||
"for (label, line) in train_dataset:\n",
|
||||
" counter.update(char_tokenizer(line))\n",
|
||||
"vocab = torchtext.vocab.vocab(counter)\n",
|
||||
"\n",
|
||||
"vocab_size = len(vocab)\n",
|
||||
"print(f\"Vocabulary size = {vocab_size}\")\n",
|
||||
"print(f\"Encoding of 'a' is {vocab.get_stoi()['a']}\")\n",
|
||||
"print(f\"Character with code 13 is {vocab.get_itos()[13]}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"നമ്മുടെ ഡാറ്റാസെറ്റിൽ നിന്നുള്ള ടെക്സ്റ്റ് എങ്ങനെ എൻകോഡ് ചെയ്യാമെന്ന് ഒരു ഉദാഹരണം നോക്കാം:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"tensor([ 0, 1, 2, 2, 3, 4, 5, 6, 3, 7, 8, 1, 9, 10, 3, 11, 2, 1,\n",
|
||||
" 12, 3, 7, 1, 13, 14, 3, 15, 16, 5, 17, 3, 5, 18, 8, 3, 7, 2,\n",
|
||||
" 1, 13, 14, 3, 19, 20, 8, 21, 5, 8, 9, 10, 22, 3, 20, 8, 21, 5,\n",
|
||||
" 8, 9, 10, 3, 23, 3, 4, 18, 17, 9, 5, 23, 10, 8, 2, 2, 8, 9,\n",
|
||||
" 10, 24, 3, 0, 1, 2, 2, 3, 4, 5, 9, 8, 8, 5, 25, 10, 3, 26,\n",
|
||||
" 12, 27, 16, 26, 2, 27, 16, 28, 29, 30, 1, 16, 26, 3, 17, 31, 3, 21,\n",
|
||||
" 2, 5, 9, 1, 23, 13, 32, 16, 27, 13, 10, 24, 3, 1, 9, 8, 3, 10,\n",
|
||||
" 8, 8, 27, 16, 28, 3, 28, 9, 8, 8, 16, 3, 1, 28, 1, 27, 16, 6])"
|
||||
]
|
||||
},
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def enc(x):\n",
|
||||
" return torch.LongTensor(encode(x,voc=vocab,tokenizer=char_tokenizer))\n",
|
||||
"\n",
|
||||
"enc(train_dataset[0][1])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## ജനറേറ്റീവ് RNN പരിശീലനം\n",
|
||||
"\n",
|
||||
"RNN ഉപയോഗിച്ച് ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യാൻ നാം സ്വീകരിക്കുന്ന മാർഗം ഇപ്രകാരമാണ്. ഓരോ ഘട്ടത്തിലും, നീളം `nchars` ഉള്ള ഒരു അക്ഷരക്രമം എടുത്ത്, ഓരോ ഇൻപുട്ട് അക്ഷരത്തിനും അടുത്ത ഔട്ട്പുട്ട് അക്ഷരം ജനറേറ്റ് ചെയ്യാൻ നെറ്റ്വർക്ക് ആവശ്യപ്പെടും:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"യഥാർത്ഥ സാഹചര്യത്തെ ആശ്രയിച്ച്, *end-of-sequence* `<eos>` പോലുള്ള ചില പ്രത്യേക അക്ഷരങ്ങൾ ഉൾപ്പെടുത്തേണ്ടതുണ്ടാകാം. നമ്മുടെ കേസിൽ, നാം അനന്തമായ ടെക്സ്റ്റ് ജനറേഷനായി നെറ്റ്വർക്ക് പരിശീലിപ്പിക്കാനാണ് ഉദ്ദേശിക്കുന്നത്, അതിനാൽ ഓരോ സീക്വൻസിന്റെയും വലിപ്പം `nchars` ടോക്കണുകളായി നിശ്ചയിക്കും. അതിനാൽ, ഓരോ പരിശീലന ഉദാഹരണവും `nchars` ഇൻപുട്ടുകളും `nchars` ഔട്ട്പുട്ടുകളും (ഇൻപുട്ട് സീക്വൻസ് ഒരു സിംബോളിന് ഇടത്തേക്ക് ഷിഫ്റ്റ് ചെയ്തതും) ഉൾക്കൊള്ളും. മിനിബാച്ച് ഇത്തരത്തിലുള്ള നിരവധി സീക്വൻസുകൾ അടങ്ങിയിരിക്കും.\n",
|
||||
"\n",
|
||||
"മിനിബാച്ചുകൾ ജനറേറ്റ് ചെയ്യാനുള്ള മാർഗം, നീളം `l` ഉള്ള ഓരോ ന്യൂസ് ടെക്സ്റ്റും എടുത്ത് അതിൽ നിന്നുള്ള എല്ലാ സാധ്യമായ ഇൻപുട്ട്-ഔട്ട്പുട്ട് കോമ്പിനേഷനുകളും (ആകെ `l-nchars` കോമ്പിനേഷനുകൾ ഉണ്ടാകും) ജനറേറ്റ് ചെയ്യുകയാണ്. അവ ഒരു മിനിബാച്ച് രൂപപ്പെടും, കൂടാതെ ഓരോ പരിശീലന ഘട്ടത്തിലും മിനിബാച്ചുകളുടെ വലിപ്പം വ്യത്യസ്തമായിരിക്കും.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(tensor([[ 0, 1, 2, ..., 28, 29, 30],\n",
|
||||
" [ 1, 2, 2, ..., 29, 30, 1],\n",
|
||||
" [ 2, 2, 3, ..., 30, 1, 16],\n",
|
||||
" ...,\n",
|
||||
" [20, 8, 21, ..., 1, 28, 1],\n",
|
||||
" [ 8, 21, 5, ..., 28, 1, 27],\n",
|
||||
" [21, 5, 8, ..., 1, 27, 16]]),\n",
|
||||
" tensor([[ 1, 2, 2, ..., 29, 30, 1],\n",
|
||||
" [ 2, 2, 3, ..., 30, 1, 16],\n",
|
||||
" [ 2, 3, 4, ..., 1, 16, 26],\n",
|
||||
" ...,\n",
|
||||
" [ 8, 21, 5, ..., 28, 1, 27],\n",
|
||||
" [21, 5, 8, ..., 1, 27, 16],\n",
|
||||
" [ 5, 8, 9, ..., 27, 16, 6]]))"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"nchars = 100\n",
|
||||
"\n",
|
||||
"def get_batch(s,nchars=nchars):\n",
|
||||
" ins = torch.zeros(len(s)-nchars,nchars,dtype=torch.long,device=device)\n",
|
||||
" outs = torch.zeros(len(s)-nchars,nchars,dtype=torch.long,device=device)\n",
|
||||
" for i in range(len(s)-nchars):\n",
|
||||
" ins[i] = enc(s[i:i+nchars])\n",
|
||||
" outs[i] = enc(s[i+1:i+nchars+1])\n",
|
||||
" return ins,outs\n",
|
||||
"\n",
|
||||
"get_batch(train_dataset[0][1])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഇപ്പോൾ നമുക്ക് ജനറേറ്റർ നെറ്റ്വർക്ക് നിർവചിക്കാം. ഇത് മുൻവശം ചർച്ച ചെയ്ത ഏതെങ്കിലും റികറന്റ് സെല്ലിൽ അടിസ്ഥാനമാക്കാവുന്നതാണ് (സിംപിൾ, LSTM അല്ലെങ്കിൽ GRU). നമ്മുടെ ഉദാഹരണത്തിൽ നാം LSTM ഉപയോഗിക്കും.\n",
|
||||
"\n",
|
||||
"നെറ്റ്വർക്ക് അക്ഷരങ്ങളെ ഇൻപുട്ടായി സ്വീകരിക്കുന്നതിനാൽ, വാക്കുകളുടെ വലുപ്പം വളരെ ചെറുതാണ്, അതിനാൽ എമ്പെഡ്ഡിംഗ് ലെയർ ആവശ്യമില്ല, ഒന്ന്-ഹോട്ട് എൻകോഡഡ് ഇൻപുട്ട് നേരിട്ട് LSTM സെല്ലിലേക്ക് പോകാം. എന്നാൽ, അക്ഷരങ്ങളുടെ നമ്പറുകൾ ഇൻപുട്ടായി നൽകുന്നതിനാൽ, LSTM-ലേക്ക് നൽകുന്നതിന് മുമ്പ് അവ ഒന്ന്-ഹോട്ട് എൻകോഡ് ചെയ്യേണ്ടതുണ്ട്. ഇത് `forward` പാസ്സിൽ `one_hot` ഫംഗ്ഷൻ വിളിച്ച് ചെയ്യുന്നു. ഔട്ട്പുട്ട് എൻകോഡർ ഒരു ലീനിയർ ലെയർ ആയിരിക്കും, ഇത് ഹിഡൻ സ്റ്റേറ്റ് ഒന്ന്-ഹോട്ട് എൻകോഡഡ് ഔട്ട്പുട്ടായി മാറ്റും.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class LSTMGenerator(torch.nn.Module):\n",
|
||||
" def __init__(self, vocab_size, hidden_dim):\n",
|
||||
" super().__init__()\n",
|
||||
" self.rnn = torch.nn.LSTM(vocab_size,hidden_dim,batch_first=True)\n",
|
||||
" self.fc = torch.nn.Linear(hidden_dim, vocab_size)\n",
|
||||
"\n",
|
||||
" def forward(self, x, s=None):\n",
|
||||
" x = torch.nn.functional.one_hot(x,vocab_size).to(torch.float32)\n",
|
||||
" x,s = self.rnn(x,s)\n",
|
||||
" return self.fc(x),s"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"പരിശീലനത്തിനിടെ, നാം സൃഷ്ടിച്ച ടെക്സ്റ്റ് സാമ്പിൾ ചെയ്യാൻ ആഗ്രഹിക്കുന്നു. അതിനായി, നാം `generate` എന്ന ഫംഗ്ഷൻ നിർവചിക്കും, ഇത് ആരംഭിക്കുന്ന സ്ട്രിംഗ് `start` മുതൽ ആരംഭിച്ച് `size` നീളമുള്ള ഔട്ട്പുട്ട് സ്ട്രിംഗ് ഉത്പാദിപ്പിക്കും.\n",
|
||||
"\n",
|
||||
"ഇത് പ്രവർത്തിക്കുന്ന വിധം ഇപ്രകാരം ആണ്. ആദ്യം, നാം മുഴുവൻ സ്റ്റാർട്ട് സ്ട്രിംഗ് നെറ്റ്വർക്കിലൂടെ കടത്തും, പിന്നീട് ഔട്ട്പുട്ട് സ്റ്റേറ്റ് `s`യും അടുത്ത പ്രവചിച്ച അക്ഷരം `out`യും എടുക്കും. `out` ഒന്ന്-ഹോട്ട് എൻകോഡുചെയ്തതിനാൽ, നാം `argmax` ഉപയോഗിച്ച് വാക്ക്സഭയിലെ അക്ഷരത്തിന്റെ ഇൻഡക്സ് `nc` കണ്ടെത്തും, പിന്നീട് `itos` ഉപയോഗിച്ച് യഥാർത്ഥ അക്ഷരം കണ്ടെത്തി ഫലമായ അക്ഷരങ്ങളുടെ പട്ടികയായ `chars`-ലേക്ക് ചേർക്കും. ഒരു അക്ഷരം സൃഷ്ടിക്കുന്ന ഈ പ്രക്രിയ ആവശ്യമായ അക്ഷരങ്ങളുടെ എണ്ണം `size` തവണ ആവർത്തിക്കും.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def generate(net,size=100,start='today '):\n",
|
||||
" chars = list(start)\n",
|
||||
" out, s = net(enc(chars).view(1,-1).to(device))\n",
|
||||
" for i in range(size):\n",
|
||||
" nc = torch.argmax(out[0][-1])\n",
|
||||
" chars.append(vocab.get_itos()[nc])\n",
|
||||
" out, s = net(nc.view(1,-1),s)\n",
|
||||
" return ''.join(chars)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഇപ്പോൾ പരിശീലനം തുടങ്ങാം! പരിശീലന ലൂപ്പ് മുമ്പത്തെ എല്ലാ ഉദാഹരണങ്ങളിലെയും പോലെ തന്നെയാണ്, പക്ഷേ കൃത്യതയുടെ പകരം ഓരോ 1000 എപ്പോക്കിലും സാമ്പിൾ ചെയ്ത ജനറേറ്റഡ് ടെക്സ്റ്റ് പ്രിന്റ് ചെയ്യും.\n",
|
||||
"\n",
|
||||
"നഷ്ടം (loss) കണക്കാക്കുന്ന രീതിക്ക് പ്രത്യേക ശ്രദ്ധ നൽകേണ്ടതാണ്. ഔട്ട്പുട്ട് `out` ഒന്ന്-ഹോട്ട്-എൻകോഡഡ് ഫോർമാറ്റിലായിരിക്കണം, കൂടാതെ പ്രതീക്ഷിച്ച ടെക്സ്റ്റ് `text_out` അക്ഷരങ്ങളുടെ ഇൻഡക്സുകളുടെ ലിസ്റ്റായിരിക്കണം. ഭാഗ്യവശാൽ, `cross_entropy` ഫംഗ്ഷൻ ആദ്യ аргументായി അനനോർമലൈസ്ഡ് നെറ്റ്വർക്ക് ഔട്ട്പുട്ട്, രണ്ടാം аргументായി ക്ലാസ് നമ്പർ സ്വീകരിക്കുന്നു, ഇത് നമുക്ക് ആവശ്യമായതും തന്നെയാണ്. കൂടാതെ ഇത് മിനിബാച്ച് വലുപ്പം അനുസരിച്ച് സ്വയം ശരാശരി കണക്കാക്കും.\n",
|
||||
"\n",
|
||||
"പരിശീലനം വളരെ ദൈർഘ്യമാകാതിരിക്കാൻ `samples_to_train` സാമ്പിളുകൾ കൊണ്ട് പരിധി നിശ്ചയിച്ചിരിക്കുന്നു. നിങ്ങൾക്ക് കൂടുതൽ പരീക്ഷണങ്ങൾ നടത്താനും, ചില എപ്പോക്കുകൾക്കായി (അപ്പോൾ ഈ കോഡിന്റെ ചുറ്റും മറ്റൊരു ലൂപ്പ് സൃഷ്ടിക്കേണ്ടതുണ്ടാകും) ദൈർഘ്യമേറിയ പരിശീലനം നടത്താനും ഞങ്ങൾ പ്രോത്സാഹിപ്പിക്കുന്നു.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Current loss = 4.398899078369141\n",
|
||||
"today sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr s\n",
|
||||
"Current loss = 2.161320447921753\n",
|
||||
"today and to the tor to to the tor to to the tor to to the tor to to the tor to to the tor to to the tor t\n",
|
||||
"Current loss = 1.6722588539123535\n",
|
||||
"today and the court to the could to the could to the could to the could to the could to the could to the c\n",
|
||||
"Current loss = 2.423795223236084\n",
|
||||
"today and a second to the conternation of the conternation of the conternation of the conternation of the \n",
|
||||
"Current loss = 1.702607274055481\n",
|
||||
"today and the company to the company to the company to the company to the company to the company to the co\n",
|
||||
"Current loss = 1.692358136177063\n",
|
||||
"today and the company to the company to the company to the company to the company to the company to the co\n",
|
||||
"Current loss = 1.9722288846969604\n",
|
||||
"today and the control the control the control the control the control the control the control the control \n",
|
||||
"Current loss = 1.8705692291259766\n",
|
||||
"today and the second to the second to the second to the second to the second to the second to the second t\n",
|
||||
"Current loss = 1.7626899480819702\n",
|
||||
"today and a security and a security and a security and a security and a security and a security and a secu\n",
|
||||
"Current loss = 1.5574463605880737\n",
|
||||
"today and the company and the company and the company and the company and the company and the company and \n",
|
||||
"Current loss = 1.5620026588439941\n",
|
||||
"today and the be that the be the be that the be the be that the be the be that the be the be that the be t\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"net = LSTMGenerator(vocab_size,64).to(device)\n",
|
||||
"\n",
|
||||
"samples_to_train = 10000\n",
|
||||
"optimizer = torch.optim.Adam(net.parameters(),0.01)\n",
|
||||
"loss_fn = torch.nn.CrossEntropyLoss()\n",
|
||||
"net.train()\n",
|
||||
"for i,x in enumerate(train_dataset):\n",
|
||||
" # x[0] is class label, x[1] is text\n",
|
||||
" if len(x[1])-nchars<10:\n",
|
||||
" continue\n",
|
||||
" samples_to_train-=1\n",
|
||||
" if not samples_to_train: break\n",
|
||||
" text_in, text_out = get_batch(x[1])\n",
|
||||
" optimizer.zero_grad()\n",
|
||||
" out,s = net(text_in)\n",
|
||||
" loss = torch.nn.functional.cross_entropy(out.view(-1,vocab_size),text_out.flatten()) #cross_entropy(out,labels)\n",
|
||||
" loss.backward()\n",
|
||||
" optimizer.step()\n",
|
||||
" if i%1000==0:\n",
|
||||
" print(f\"Current loss = {loss.item()}\")\n",
|
||||
" print(generate(net))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഈ ഉദാഹരണം ഇതിനകം തന്നെ നല്ലൊരു ടെക്സ്റ്റ് സൃഷ്ടിക്കുന്നു, പക്ഷേ ഇത് പലവിധത്തിൽ മെച്ചപ്പെടുത്താൻ കഴിയും:\n",
|
||||
"* **മിനിബാച്ച് ജനറേഷൻ മെച്ചപ്പെടുത്തൽ**. പരിശീലനത്തിനായി ഡാറ്റ തയ്യാറാക്കിയത് ഓരോ സാമ്പിളിൽ നിന്നുമൊരു മിനിബാച്ച് സൃഷ്ടിക്കുന്ന രീതിയിലാണ്. ഇത് അനുയോജ്യമല്ല, കാരണം മിനിബാച്ചുകൾ എല്ലാം വ്യത്യസ്ത വലുപ്പത്തിലുള്ളവയാണ്, ചിലത് സൃഷ്ടിക്കാനാകാത്തതും ഉണ്ടാകാം, കാരണം ടെക്സ്റ്റ് `nchars`-നേക്കാൾ ചെറുതാണ്. കൂടാതെ, ചെറിയ മിനിബാച്ചുകൾ GPU-യെ മതിയായ തോതിൽ ലോഡ് ചെയ്യാറില്ല. എല്ലാ സാമ്പിളുകളിലെയും വലിയൊരു ടെക്സ്റ്റ് ചങ്ക് എടുത്ത്, എല്ലാ ഇൻപുട്ട്-ഔട്ട്പുട്ട് ജോഡികളും സൃഷ്ടിച്ച്, അവ ഷഫിൾ ചെയ്ത്, സമാന വലുപ്പത്തിലുള്ള മിനിബാച്ചുകൾ സൃഷ്ടിക്കുന്നത് ബുദ്ധിമുട്ടില്ല.\n",
|
||||
"* **മൾട്ടിലെയർ LSTM**. 2 അല്ലെങ്കിൽ 3 ലെയറുകളുടെ LSTM സെല്ലുകൾ പരീക്ഷിക്കുന്നത് ഉചിതമാണ്. മുൻ യൂണിറ്റിൽ പറഞ്ഞതുപോലെ, ഓരോ LSTM ലെയറും ടെക്സ്റ്റിൽ നിന്നുള്ള പ്രത്യേക പാറ്റേണുകൾ എടുക്കുന്നു, കറക്റ്റർ-ലെവൽ ജനറേറ്ററിന്റെ കാര്യത്തിൽ താഴത്തെ LSTM ലെയർ സില്ലബിളുകൾ എടുക്കുന്നതിന് ഉത്തരവാദിയാകും, മുകളിലെ ലെയറുകൾ വാക്കുകളും വാക്കുകളുടെ സംയോജനങ്ങളും എടുക്കുന്നതിന്. ഇത് LSTM കൺസ്ട്രക്ടറിലേക്ക് ലെയറുകളുടെ എണ്ണം പാരാമീറ്ററായി നൽകുന്നതിലൂടെ എളുപ്പത്തിൽ നടപ്പിലാക്കാം.\n",
|
||||
"* നിങ്ങൾക്ക് **GRU യൂണിറ്റുകൾ** ഉപയോഗിച്ച് പരീക്ഷണങ്ങൾ നടത്താനും, ഏത് മെച്ചമാണ് എന്ന് കാണാനും, കൂടാതെ **വിവിധ ഹിഡൻ ലെയർ വലുപ്പങ്ങൾ** പരീക്ഷിക്കാനും ആഗ്രഹിക്കാം. വളരെ വലിയ ഹിഡൻ ലെയർ ഓവർഫിറ്റിംഗിന് കാരണമാകാം (ഉദാ: നെറ്റ്വർക്ക് കൃത്യമായ ടെക്സ്റ്റ് പഠിക്കും), ചെറിയ വലുപ്പം നല്ല ഫലം നൽകാതിരിക്കാം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## സോഫ്റ്റ് ടെക്സ്റ്റ് ജനറേഷൻ ಮತ್ತು ടെംപറേച്ചർ\n",
|
||||
"\n",
|
||||
"മുൻപ് `generate` എന്ന നിർവചനത്തിൽ, നാം എപ്പോഴും ഏറ്റവും ഉയർന്ന സാധ്യതയുള്ള അക്ഷരത്തെ അടുത്ത അക്ഷരമായി എടുത്തിരുന്നു. ഇതിന്റെ ഫലമായി, ടെക്സ്റ്റ് പലപ്പോഴും ഒരേ അക്ഷരക്രമങ്ങൾ വീണ്ടും വീണ്ടും \"സൈക്ല്\" ചെയ്യുന്നതായി കാണപ്പെട്ടു, ഉദാഹരണത്തിന്:\n",
|
||||
"```\n",
|
||||
"today of the second the company and a second the company ...\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"എങ്കിലും, അടുത്ത അക്ഷരത്തിനുള്ള സാധ്യത വിതരണത്തെ നോക്കിയാൽ, ഏറ്റവും ഉയർന്ന ചില സാധ്യതകളുടെ വ്യത്യാസം വലിയതല്ലായിരിക്കാം, ഉദാഹരണത്തിന് ഒരു അക്ഷരത്തിന് 0.2 സാധ്യതയുണ്ടെങ്കിൽ, മറ്റൊന്ന് 0.19 ആയിരിക്കാം. ഉദാഹരണത്തിന് '*play*' എന്ന ക്രമത്തിൽ അടുത്ത അക്ഷരം സ്പേസ് ആകാമോ, അല്ലെങ്കിൽ **e** (പദമായ *player* ൽപോലെ) ആകാമോ എന്നത് സമാനമായ സാധ്യതയുള്ളതാണ്.\n",
|
||||
"\n",
|
||||
"ഇത് നമ്മെ ഈ നിഗമനത്തിലേക്ക് നയിക്കുന്നു: ഉയർന്ന സാധ്യതയുള്ള അക്ഷരം തിരഞ്ഞെടുക്കുന്നത് എപ്പോഴും \"ന്യായമായ\" കാര്യമല്ല, കാരണം രണ്ടാമത്തെ ഉയർന്ന സാധ്യതയുള്ള അക്ഷരം തിരഞ്ഞെടുക്കുന്നതും അർത്ഥവത്തായ ടെക്സ്റ്റിലേക്ക് നയിക്കാം. നെറ്റ്വർക്ക് ഔട്ട്പുട്ട് നൽകുന്ന സാധ്യത വിതരണത്തിൽ നിന്നാണ് അക്ഷരങ്ങൾ **സാമ്പിൾ** ചെയ്യുന്നത് കൂടുതൽ ബുദ്ധിമുട്ടുള്ളതും ഉചിതവുമാണ്.\n",
|
||||
"\n",
|
||||
"ഈ സാമ്പിളിംഗ് `multinomial` ഫംഗ്ഷൻ ഉപയോഗിച്ച് ചെയ്യാം, ഇത്所谓的 **മൾട്ടിനോമിയൽ വിതരണം** നടപ്പിലാക്കുന്നു. താഴെ ഈ **സോഫ്റ്റ്** ടെക്സ്റ്റ് ജനറേഷൻ നടപ്പിലാക്കുന്ന ഫംഗ്ഷൻ നിർവചിച്ചിരിക്കുന്നു:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"--- Temperature = 0.3\n",
|
||||
"Today and a company and complete an all the land the restrational the as a security and has provers the pay to and a report and the computer in the stand has filities and working the law the stations for a company and with the company and the final the first company and refight of the state and and workin\n",
|
||||
"\n",
|
||||
"--- Temperature = 0.8\n",
|
||||
"Today he oniis its first to Aus bomblaties the marmation a to manan boogot that pirate assaid a relaid their that goverfin the the Cappets Ecrotional Assonia Cition targets it annight the w scyments Blamity #39;s TVeer Diercheg Reserals fran envyuil that of ster said access what succers of Dour-provelith\n",
|
||||
"\n",
|
||||
"--- Temperature = 1.0\n",
|
||||
"Today holy they a 11 will meda a toket subsuaties, engins for Chanos, they's has stainger past to opening orital his thempting new Nattona was al innerforder advan-than #36;s night year his religuled talitatian what the but with Wednesday to Justment will wemen of Mark CCC Camp as Timed Nae wome a leaders\n",
|
||||
"\n",
|
||||
"--- Temperature = 1.3\n",
|
||||
"Today gpone 2.5 fech atcusion poor cocles toparsdorM.cht Line Pamage put 43 his calt lowed to the book, that has authh-the silia rruch ailing to'ory andhes beutirsimi- Aefffive heading offil an auf eacklets is charged evis, Gunymy oy) Mony has it after-sloythyor loveId out filme, the Natabl -Najuntaxiggs \n",
|
||||
"\n",
|
||||
"--- Temperature = 1.8\n",
|
||||
"Today plary, P.slan chly\\401 mardregationly #39;t 8.1Mide) closes ,filtcon alfly playin roven!\\grea.-QFBEP: Iss onfarchQ/itilia CCf Zivesigntwasta orce.-Peul-aw.uicrin of fuglinfsut aftaningwo, MIEX awayew Aice Woiduar Corvagiugge oppo esig ThusBratourid canthly-RyI.co lagitems\\eexciaishes.conBabntusmor I\n",
|
||||
"\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def generate_soft(net,size=100,start='today ',temperature=1.0):\n",
|
||||
" chars = list(start)\n",
|
||||
" out, s = net(enc(chars).view(1,-1).to(device))\n",
|
||||
" for i in range(size):\n",
|
||||
" #nc = torch.argmax(out[0][-1])\n",
|
||||
" out_dist = out[0][-1].div(temperature).exp()\n",
|
||||
" nc = torch.multinomial(out_dist,1)[0]\n",
|
||||
" chars.append(vocab.get_itos()[nc])\n",
|
||||
" out, s = net(nc.view(1,-1),s)\n",
|
||||
" return ''.join(chars)\n",
|
||||
" \n",
|
||||
"for i in [0.3,0.8,1.0,1.3,1.8]:\n",
|
||||
" print(f\"--- Temperature = {i}\\n{generate_soft(net,size=300,start='Today ',temperature=i)}\\n\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"നാം **temperature** എന്ന ഒരു പുതിയ പാരാമീറ്റർ പരിചയപ്പെടുത്തി, ഇത് ഏറ്റവും ഉയർന്ന സാധ്യതയോട് എത്രമാത്രം കർശനമായി പാലിക്കണമെന്ന് സൂചിപ്പിക്കാൻ ഉപയോഗിക്കുന്നു. temperature 1.0 ആണെങ്കിൽ, നാം ശരാശരി മൾട്ടിനോമിയൽ സാമ്പ്ലിംഗ് നടത്തുന്നു, temperature അനന്തതയിലേക്ക് പോകുമ്പോൾ - എല്ലാ സാധ്യതകളും സമാനമാകുന്നു, പിന്നെ നാം യാദൃച്ഛികമായി അടുത്ത അക്ഷരം തിരഞ്ഞെടുക്കുന്നു. താഴെ കൊടുത്ത ഉദാഹരണത്തിൽ temperature വളരെ കൂടുമ്പോൾ വാചകം അർത്ഥരഹിതമാകുന്നത് കാണാം, കൂടാതെ അത് 0-ന് അടുത്ത് പോകുമ്പോൾ \"cycled\" കർശനമായി സൃഷ്ടിച്ച വാചകത്തെപ്പോലെ തോന്നുന്നു.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**അസൂയാ**: \nഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.12 ('py38')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.8.12"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "7673cd150d96c74c6d6011460094efb4",
|
||||
"translation_date": "2025-11-26T02:11:44+00:00",
|
||||
"source_file": "lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.ipynb",
|
||||
"language_code": "ml"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# ജനറേറ്റീവ് നെറ്റ്വർക്കുകൾ\n",
|
||||
"\n",
|
||||
"റികറന്റ് ന്യൂറൽ നെറ്റ്വർക്കുകൾ (RNNs) மற்றும் അവയുടെ ഗേറ്റഡ് സെൽ വകഭേദങ്ങൾ, ഉദാഹരണത്തിന് ലോങ് ഷോർട്ട് ടേം മെമ്മറി സെലുകൾ (LSTMs) மற்றும் ഗേറ്റഡ് റികറന്റ് യൂണിറ്റുകൾ (GRUs), ഭാഷാ മോഡലിംഗിന് ഒരു സംവിധാനം നൽകുന്നു, അതായത് അവ വാക്കുകളുടെ ക്രമീകരണം പഠിച്ച് ഒരു സീക്വൻസിലെ അടുത്ത വാക്ക് പ്രവചിക്കാൻ കഴിയും. ഇതുവഴി RNN-കൾ **ജനറേറ്റീവ് ടാസ്കുകൾ**ക്കായി ഉപയോഗിക്കാം, ഉദാഹരണത്തിന് സാധാരണ ടെക്സ്റ്റ് ജനറേഷൻ, മെഷീൻ ട്രാൻസ്ലേഷൻ,甚至 ഇമേജ് ക്യാപ്ഷനിംഗ്.\n",
|
||||
"\n",
|
||||
"മുൻ യൂണിറ്റിൽ ചർച്ച ചെയ്ത RNN ആർക്കിടെക്ചറിൽ, ഓരോ RNN യൂണിറ്റും അടുത്ത ഹിഡൻ സ്റ്റേറ്റ് ഔട്ട്പുട്ടായി ഉൽപ്പാദിപ്പിച്ചിരുന്നു. എന്നാൽ, ഓരോ റികറന്റ് യൂണിറ്റിനും മറ്റൊരു ഔട്ട്പുട്ട് കൂടി ചേർക്കാം, ഇത് ഒരു **സീക്വൻസ്** (മൂല സീക്വൻസിന്റെ നീളത്തിന് തുല്യമായ) ഔട്ട്പുട്ട് നൽകാൻ സഹായിക്കും. കൂടാതെ, ഓരോ ഘട്ടത്തിലും ഇൻപുട്ട് സ്വീകരിക്കാത്ത RNN യൂണിറ്റുകൾ ഉപയോഗിച്ച്, ചില പ്രാരംഭ സ്റ്റേറ്റ് വെക്ടർ എടുത്ത്, തുടർന്ന് ഔട്ട്പുട്ടുകളുടെ ഒരു സീക്വൻസ് ഉൽപ്പാദിപ്പിക്കാം.\n",
|
||||
"\n",
|
||||
"ഈ നോട്ട്ബുക്കിൽ, നാം ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യാൻ സഹായിക്കുന്ന ലളിതമായ ജനറേറ്റീവ് മോഡലുകളെ കേന്ദ്രീകരിക്കും. ലളിതത്വത്തിനായി, നാം **ക്യാരക്ടർ-ലെവൽ നെറ്റ്വർക്ക്** നിർമ്മിക്കാം, ഇത് അക്ഷരമുതൽ അക്ഷരം ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യും. പരിശീലനത്തിനിടെ, നാം ഒരു ടെക്സ്റ്റ് കോർപ്പസ് എടുത്ത്, അത് അക്ഷര സീക്വൻസുകളായി വിഭജിക്കണം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Loading dataset...\n",
|
||||
"Building vocab...\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import torch\n",
|
||||
"import torchtext\n",
|
||||
"import numpy as np\n",
|
||||
"from torchnlp import *\n",
|
||||
"train_dataset,test_dataset,classes,vocab = load_dataset()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## അക്ഷര വാക്ക് നിർമ്മാണം\n",
|
||||
"\n",
|
||||
"അക്ഷരനിര അടിസ്ഥാനത്തിലുള്ള ജനറേറ്റീവ് നെറ്റ്വർക്ക് നിർമ്മിക്കാൻ, വാക്കുകൾക്ക് പകരം ടെക്സ്റ്റ് വ്യക്തിഗത അക്ഷരങ്ങളായി വിഭജിക്കണം. ഇത് സാധ്യമാക്കാൻ വ്യത്യസ്തമായ ഒരു ടോക്കനൈസർ നിർവചിക്കാം:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Vocabulary size = 82\n",
|
||||
"Encoding of 'a' is 1\n",
|
||||
"Character with code 13 is c\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def char_tokenizer(words):\n",
|
||||
" return list(words) #[word for word in words]\n",
|
||||
"\n",
|
||||
"counter = collections.Counter()\n",
|
||||
"for (label, line) in train_dataset:\n",
|
||||
" counter.update(char_tokenizer(line))\n",
|
||||
"vocab = torchtext.vocab.vocab(counter)\n",
|
||||
"\n",
|
||||
"vocab_size = len(vocab)\n",
|
||||
"print(f\"Vocabulary size = {vocab_size}\")\n",
|
||||
"print(f\"Encoding of 'a' is {vocab.get_stoi()['a']}\")\n",
|
||||
"print(f\"Character with code 13 is {vocab.get_itos()[13]}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"നമ്മുടെ ഡാറ്റാസെറ്റിൽ നിന്നുള്ള ടെക്സ്റ്റ് എങ്ങനെ എൻകോഡ് ചെയ്യാമെന്ന് ഒരു ഉദാഹരണം നോക്കാം:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"tensor([ 0, 1, 2, 2, 3, 4, 5, 6, 3, 7, 8, 1, 9, 10, 3, 11, 2, 1,\n",
|
||||
" 12, 3, 7, 1, 13, 14, 3, 15, 16, 5, 17, 3, 5, 18, 8, 3, 7, 2,\n",
|
||||
" 1, 13, 14, 3, 19, 20, 8, 21, 5, 8, 9, 10, 22, 3, 20, 8, 21, 5,\n",
|
||||
" 8, 9, 10, 3, 23, 3, 4, 18, 17, 9, 5, 23, 10, 8, 2, 2, 8, 9,\n",
|
||||
" 10, 24, 3, 0, 1, 2, 2, 3, 4, 5, 9, 8, 8, 5, 25, 10, 3, 26,\n",
|
||||
" 12, 27, 16, 26, 2, 27, 16, 28, 29, 30, 1, 16, 26, 3, 17, 31, 3, 21,\n",
|
||||
" 2, 5, 9, 1, 23, 13, 32, 16, 27, 13, 10, 24, 3, 1, 9, 8, 3, 10,\n",
|
||||
" 8, 8, 27, 16, 28, 3, 28, 9, 8, 8, 16, 3, 1, 28, 1, 27, 16, 6])"
|
||||
]
|
||||
},
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def enc(x):\n",
|
||||
" return torch.LongTensor(encode(x,voc=vocab,tokenizer=char_tokenizer))\n",
|
||||
"\n",
|
||||
"enc(train_dataset[0][1])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## ജനറേറ്റീവ് RNN പരിശീലനം\n",
|
||||
"\n",
|
||||
"RNN ഉപയോഗിച്ച് ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യാൻ നാം സ്വീകരിക്കുന്ന മാർഗം ഇപ്രകാരമാണ്. ഓരോ ഘട്ടത്തിലും, നീളം `nchars` ഉള്ള ഒരു അക്ഷരക്രമം എടുത്ത്, ഓരോ ഇൻപുട്ട് അക്ഷരത്തിനും അടുത്ത ഔട്ട്പുട്ട് അക്ഷരം ജനറേറ്റ് ചെയ്യാൻ നെറ്റ്വർക്ക് ആവശ്യപ്പെടും:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"യഥാർത്ഥ സാഹചര്യത്തെ ആശ്രയിച്ച്, *end-of-sequence* `<eos>` പോലുള്ള ചില പ്രത്യേക അക്ഷരങ്ങൾ ഉൾപ്പെടുത്തേണ്ടതുണ്ടാകാം. നമ്മുടെ കേസിൽ, നാം അനന്തമായ ടെക്സ്റ്റ് ജനറേഷനായി നെറ്റ്വർക്ക് പരിശീലിപ്പിക്കാനാണ് ഉദ്ദേശിക്കുന്നത്, അതിനാൽ ഓരോ സീക്വൻസിന്റെയും വലിപ്പം `nchars` ടോക്കണുകളായി നിശ്ചയിക്കും. അതിനാൽ, ഓരോ പരിശീലന ഉദാഹരണവും `nchars` ഇൻപുട്ടുകളും `nchars` ഔട്ട്പുട്ടുകളും (ഇൻപുട്ട് സീക്വൻസ് ഒരു സിംബോളിന് ഇടത്തേക്ക് ഷിഫ്റ്റ് ചെയ്തതും) ഉൾക്കൊള്ളും. മിനിബാച്ച് ഇത്തരത്തിലുള്ള നിരവധി സീക്വൻസുകൾ അടങ്ങിയിരിക്കും.\n",
|
||||
"\n",
|
||||
"മിനിബാച്ചുകൾ ജനറേറ്റ് ചെയ്യാനുള്ള മാർഗം, നീളം `l` ഉള്ള ഓരോ ന്യൂസ് ടെക്സ്റ്റും എടുത്ത് അതിൽ നിന്നുള്ള എല്ലാ സാധ്യമായ ഇൻപുട്ട്-ഔട്ട്പുട്ട് കോമ്പിനേഷനുകളും (ആകെ `l-nchars` കോമ്പിനേഷനുകൾ ഉണ്ടാകും) ജനറേറ്റ് ചെയ്യുകയാണ്. അവ ഒരു മിനിബാച്ച് രൂപപ്പെടും, കൂടാതെ ഓരോ പരിശീലന ഘട്ടത്തിലും മിനിബാച്ചുകളുടെ വലിപ്പം വ്യത്യസ്തമായിരിക്കും.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(tensor([[ 0, 1, 2, ..., 28, 29, 30],\n",
|
||||
" [ 1, 2, 2, ..., 29, 30, 1],\n",
|
||||
" [ 2, 2, 3, ..., 30, 1, 16],\n",
|
||||
" ...,\n",
|
||||
" [20, 8, 21, ..., 1, 28, 1],\n",
|
||||
" [ 8, 21, 5, ..., 28, 1, 27],\n",
|
||||
" [21, 5, 8, ..., 1, 27, 16]]),\n",
|
||||
" tensor([[ 1, 2, 2, ..., 29, 30, 1],\n",
|
||||
" [ 2, 2, 3, ..., 30, 1, 16],\n",
|
||||
" [ 2, 3, 4, ..., 1, 16, 26],\n",
|
||||
" ...,\n",
|
||||
" [ 8, 21, 5, ..., 28, 1, 27],\n",
|
||||
" [21, 5, 8, ..., 1, 27, 16],\n",
|
||||
" [ 5, 8, 9, ..., 27, 16, 6]]))"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"nchars = 100\n",
|
||||
"\n",
|
||||
"def get_batch(s,nchars=nchars):\n",
|
||||
" ins = torch.zeros(len(s)-nchars,nchars,dtype=torch.long,device=device)\n",
|
||||
" outs = torch.zeros(len(s)-nchars,nchars,dtype=torch.long,device=device)\n",
|
||||
" for i in range(len(s)-nchars):\n",
|
||||
" ins[i] = enc(s[i:i+nchars])\n",
|
||||
" outs[i] = enc(s[i+1:i+nchars+1])\n",
|
||||
" return ins,outs\n",
|
||||
"\n",
|
||||
"get_batch(train_dataset[0][1])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഇപ്പോൾ നമുക്ക് ജനറേറ്റർ നെറ്റ്വർക്ക് നിർവചിക്കാം. ഇത് മുൻവശം ചർച്ച ചെയ്ത ഏതെങ്കിലും റികറന്റ് സെല്ലിൽ അടിസ്ഥാനമാക്കാവുന്നതാണ് (സിംപിൾ, LSTM അല്ലെങ്കിൽ GRU). നമ്മുടെ ഉദാഹരണത്തിൽ നാം LSTM ഉപയോഗിക്കും.\n",
|
||||
"\n",
|
||||
"നെറ്റ്വർക്ക് അക്ഷരങ്ങളെ ഇൻപുട്ടായി സ്വീകരിക്കുന്നതിനാൽ, വാക്കുകളുടെ വലുപ്പം വളരെ ചെറുതാണ്, അതിനാൽ എമ്പെഡ്ഡിംഗ് ലെയർ ആവശ്യമില്ല, ഒന്ന്-ഹോട്ട് എൻകോഡഡ് ഇൻപുട്ട് നേരിട്ട് LSTM സെല്ലിലേക്ക് പോകാം. എന്നാൽ, അക്ഷരങ്ങളുടെ നമ്പറുകൾ ഇൻപുട്ടായി നൽകുന്നതിനാൽ, LSTM-ലേക്ക് നൽകുന്നതിന് മുമ്പ് അവ ഒന്ന്-ഹോട്ട് എൻകോഡ് ചെയ്യേണ്ടതുണ്ട്. ഇത് `forward` പാസ്സിൽ `one_hot` ഫംഗ്ഷൻ വിളിച്ച് ചെയ്യുന്നു. ഔട്ട്പുട്ട് എൻകോഡർ ഒരു ലീനിയർ ലെയർ ആയിരിക്കും, ഇത് ഹിഡൻ സ്റ്റേറ്റ് ഒന്ന്-ഹോട്ട് എൻകോഡഡ് ഔട്ട്പുട്ടായി മാറ്റും.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class LSTMGenerator(torch.nn.Module):\n",
|
||||
" def __init__(self, vocab_size, hidden_dim):\n",
|
||||
" super().__init__()\n",
|
||||
" self.rnn = torch.nn.LSTM(vocab_size,hidden_dim,batch_first=True)\n",
|
||||
" self.fc = torch.nn.Linear(hidden_dim, vocab_size)\n",
|
||||
"\n",
|
||||
" def forward(self, x, s=None):\n",
|
||||
" x = torch.nn.functional.one_hot(x,vocab_size).to(torch.float32)\n",
|
||||
" x,s = self.rnn(x,s)\n",
|
||||
" return self.fc(x),s"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"പരിശീലനത്തിനിടെ, നാം സൃഷ്ടിച്ച ടെക്സ്റ്റ് സാമ്പിൾ ചെയ്യാൻ ആഗ്രഹിക്കുന്നു. അതിനായി, നാം `generate` എന്ന ഫംഗ്ഷൻ നിർവചിക്കും, ഇത് ആരംഭിക്കുന്ന സ്ട്രിംഗ് `start` മുതൽ ആരംഭിച്ച് `size` നീളമുള്ള ഔട്ട്പുട്ട് സ്ട്രിംഗ് ഉത്പാദിപ്പിക്കും.\n",
|
||||
"\n",
|
||||
"ഇത് പ്രവർത്തിക്കുന്ന വിധം ഇപ്രകാരം ആണ്. ആദ്യം, നാം മുഴുവൻ സ്റ്റാർട്ട് സ്ട്രിംഗ് നെറ്റ്വർക്കിലൂടെ കടത്തും, പിന്നീട് ഔട്ട്പുട്ട് സ്റ്റേറ്റ് `s`യും അടുത്ത പ്രവചിച്ച അക്ഷരം `out`യും എടുക്കും. `out` ഒന്ന്-ഹോട്ട് എൻകോഡുചെയ്തതിനാൽ, നാം `argmax` ഉപയോഗിച്ച് വാക്ക്സഭയിലെ അക്ഷരത്തിന്റെ ഇൻഡക്സ് `nc` കണ്ടെത്തും, പിന്നീട് `itos` ഉപയോഗിച്ച് യഥാർത്ഥ അക്ഷരം കണ്ടെത്തി ഫലമായ അക്ഷരങ്ങളുടെ പട്ടികയായ `chars`-ലേക്ക് ചേർക്കും. ഒരു അക്ഷരം സൃഷ്ടിക്കുന്ന ഈ പ്രക്രിയ ആവശ്യമായ അക്ഷരങ്ങളുടെ എണ്ണം `size` തവണ ആവർത്തിക്കും.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def generate(net,size=100,start='today '):\n",
|
||||
" chars = list(start)\n",
|
||||
" out, s = net(enc(chars).view(1,-1).to(device))\n",
|
||||
" for i in range(size):\n",
|
||||
" nc = torch.argmax(out[0][-1])\n",
|
||||
" chars.append(vocab.get_itos()[nc])\n",
|
||||
" out, s = net(nc.view(1,-1),s)\n",
|
||||
" return ''.join(chars)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഇപ്പോൾ പരിശീലനം തുടങ്ങാം! പരിശീലന ലൂപ്പ് മുമ്പത്തെ എല്ലാ ഉദാഹരണങ്ങളിലെയും പോലെ തന്നെയാണ്, പക്ഷേ കൃത്യതയുടെ പകരം ഓരോ 1000 എപ്പോക്കിലും സാമ്പിൾ ചെയ്ത ജനറേറ്റഡ് ടെക്സ്റ്റ് പ്രിന്റ് ചെയ്യും.\n",
|
||||
"\n",
|
||||
"നഷ്ടം (loss) കണക്കാക്കുന്ന രീതിക്ക് പ്രത്യേക ശ്രദ്ധ നൽകേണ്ടതാണ്. ഔട്ട്പുട്ട് `out` ഒന്ന്-ഹോട്ട്-എൻകോഡഡ് ഫോർമാറ്റിലായിരിക്കണം, കൂടാതെ പ്രതീക്ഷിച്ച ടെക്സ്റ്റ് `text_out` അക്ഷരങ്ങളുടെ ഇൻഡക്സുകളുടെ ലിസ്റ്റായിരിക്കണം. ഭാഗ്യവശാൽ, `cross_entropy` ഫംഗ്ഷൻ ആദ്യ аргументായി അനനോർമലൈസ്ഡ് നെറ്റ്വർക്ക് ഔട്ട്പുട്ട്, രണ്ടാം аргументായി ക്ലാസ് നമ്പർ സ്വീകരിക്കുന്നു, ഇത് നമുക്ക് ആവശ്യമായതും തന്നെയാണ്. കൂടാതെ ഇത് മിനിബാച്ച് വലുപ്പം അനുസരിച്ച് സ്വയം ശരാശരി കണക്കാക്കും.\n",
|
||||
"\n",
|
||||
"പരിശീലനം വളരെ ദൈർഘ്യമാകാതിരിക്കാൻ `samples_to_train` സാമ്പിളുകൾ കൊണ്ട് പരിധി നിശ്ചയിച്ചിരിക്കുന്നു. നിങ്ങൾക്ക് കൂടുതൽ പരീക്ഷണങ്ങൾ നടത്താനും, ചില എപ്പോക്കുകൾക്കായി (അപ്പോൾ ഈ കോഡിന്റെ ചുറ്റും മറ്റൊരു ലൂപ്പ് സൃഷ്ടിക്കേണ്ടതുണ്ടാകും) ദൈർഘ്യമേറിയ പരിശീലനം നടത്താനും ഞങ്ങൾ പ്രോത്സാഹിപ്പിക്കുന്നു.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Current loss = 4.398899078369141\n",
|
||||
"today sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr s\n",
|
||||
"Current loss = 2.161320447921753\n",
|
||||
"today and to the tor to to the tor to to the tor to to the tor to to the tor to to the tor to to the tor t\n",
|
||||
"Current loss = 1.6722588539123535\n",
|
||||
"today and the court to the could to the could to the could to the could to the could to the could to the c\n",
|
||||
"Current loss = 2.423795223236084\n",
|
||||
"today and a second to the conternation of the conternation of the conternation of the conternation of the \n",
|
||||
"Current loss = 1.702607274055481\n",
|
||||
"today and the company to the company to the company to the company to the company to the company to the co\n",
|
||||
"Current loss = 1.692358136177063\n",
|
||||
"today and the company to the company to the company to the company to the company to the company to the co\n",
|
||||
"Current loss = 1.9722288846969604\n",
|
||||
"today and the control the control the control the control the control the control the control the control \n",
|
||||
"Current loss = 1.8705692291259766\n",
|
||||
"today and the second to the second to the second to the second to the second to the second to the second t\n",
|
||||
"Current loss = 1.7626899480819702\n",
|
||||
"today and a security and a security and a security and a security and a security and a security and a secu\n",
|
||||
"Current loss = 1.5574463605880737\n",
|
||||
"today and the company and the company and the company and the company and the company and the company and \n",
|
||||
"Current loss = 1.5620026588439941\n",
|
||||
"today and the be that the be the be that the be the be that the be the be that the be the be that the be t\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"net = LSTMGenerator(vocab_size,64).to(device)\n",
|
||||
"\n",
|
||||
"samples_to_train = 10000\n",
|
||||
"optimizer = torch.optim.Adam(net.parameters(),0.01)\n",
|
||||
"loss_fn = torch.nn.CrossEntropyLoss()\n",
|
||||
"net.train()\n",
|
||||
"for i,x in enumerate(train_dataset):\n",
|
||||
" # x[0] is class label, x[1] is text\n",
|
||||
" if len(x[1])-nchars<10:\n",
|
||||
" continue\n",
|
||||
" samples_to_train-=1\n",
|
||||
" if not samples_to_train: break\n",
|
||||
" text_in, text_out = get_batch(x[1])\n",
|
||||
" optimizer.zero_grad()\n",
|
||||
" out,s = net(text_in)\n",
|
||||
" loss = torch.nn.functional.cross_entropy(out.view(-1,vocab_size),text_out.flatten()) #cross_entropy(out,labels)\n",
|
||||
" loss.backward()\n",
|
||||
" optimizer.step()\n",
|
||||
" if i%1000==0:\n",
|
||||
" print(f\"Current loss = {loss.item()}\")\n",
|
||||
" print(generate(net))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഈ ഉദാഹരണം ഇതിനകം തന്നെ നല്ലൊരു ടെക്സ്റ്റ് സൃഷ്ടിക്കുന്നു, പക്ഷേ ഇത് പലവിധത്തിൽ മെച്ചപ്പെടുത്താൻ കഴിയും:\n",
|
||||
"* **മിനിബാച്ച് ജനറേഷൻ മെച്ചപ്പെടുത്തൽ**. പരിശീലനത്തിനായി ഡാറ്റ തയ്യാറാക്കിയത് ഓരോ സാമ്പിളിൽ നിന്നുമൊരു മിനിബാച്ച് സൃഷ്ടിക്കുന്ന രീതിയിലാണ്. ഇത് അനുയോജ്യമല്ല, കാരണം മിനിബാച്ചുകൾ എല്ലാം വ്യത്യസ്ത വലുപ്പത്തിലുള്ളവയാണ്, ചിലത് സൃഷ്ടിക്കാനാകാത്തതും ഉണ്ടാകാം, കാരണം ടെക്സ്റ്റ് `nchars`-നേക്കാൾ ചെറുതാണ്. കൂടാതെ, ചെറിയ മിനിബാച്ചുകൾ GPU-യെ മതിയായ തോതിൽ ലോഡ് ചെയ്യാറില്ല. എല്ലാ സാമ്പിളുകളിലെയും വലിയൊരു ടെക്സ്റ്റ് ചങ്ക് എടുത്ത്, എല്ലാ ഇൻപുട്ട്-ഔട്ട്പുട്ട് ജോഡികളും സൃഷ്ടിച്ച്, അവ ഷഫിൾ ചെയ്ത്, സമാന വലുപ്പത്തിലുള്ള മിനിബാച്ചുകൾ സൃഷ്ടിക്കുന്നത് ബുദ്ധിമുട്ടില്ല.\n",
|
||||
"* **മൾട്ടിലെയർ LSTM**. 2 അല്ലെങ്കിൽ 3 ലെയറുകളുടെ LSTM സെല്ലുകൾ പരീക്ഷിക്കുന്നത് ഉചിതമാണ്. മുൻ യൂണിറ്റിൽ പറഞ്ഞതുപോലെ, ഓരോ LSTM ലെയറും ടെക്സ്റ്റിൽ നിന്നുള്ള പ്രത്യേക പാറ്റേണുകൾ എടുക്കുന്നു, കറക്റ്റർ-ലെവൽ ജനറേറ്ററിന്റെ കാര്യത്തിൽ താഴത്തെ LSTM ലെയർ സില്ലബിളുകൾ എടുക്കുന്നതിന് ഉത്തരവാദിയാകും, മുകളിലെ ലെയറുകൾ വാക്കുകളും വാക്കുകളുടെ സംയോജനങ്ങളും എടുക്കുന്നതിന്. ഇത് LSTM കൺസ്ട്രക്ടറിലേക്ക് ലെയറുകളുടെ എണ്ണം പാരാമീറ്ററായി നൽകുന്നതിലൂടെ എളുപ്പത്തിൽ നടപ്പിലാക്കാം.\n",
|
||||
"* നിങ്ങൾക്ക് **GRU യൂണിറ്റുകൾ** ഉപയോഗിച്ച് പരീക്ഷണങ്ങൾ നടത്താനും, ഏത് മെച്ചമാണ് എന്ന് കാണാനും, കൂടാതെ **വിവിധ ഹിഡൻ ലെയർ വലുപ്പങ്ങൾ** പരീക്ഷിക്കാനും ആഗ്രഹിക്കാം. വളരെ വലിയ ഹിഡൻ ലെയർ ഓവർഫിറ്റിംഗിന് കാരണമാകാം (ഉദാ: നെറ്റ്വർക്ക് കൃത്യമായ ടെക്സ്റ്റ് പഠിക്കും), ചെറിയ വലുപ്പം നല്ല ഫലം നൽകാതിരിക്കാം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## സോഫ്റ്റ് ടെക്സ്റ്റ് ജനറേഷൻ ಮತ್ತು ടെംപറേച്ചർ\n",
|
||||
"\n",
|
||||
"മുൻപ് `generate` എന്ന നിർവചനത്തിൽ, നാം എപ്പോഴും ഏറ്റവും ഉയർന്ന സാധ്യതയുള്ള അക്ഷരത്തെ അടുത്ത അക്ഷരമായി എടുത്തിരുന്നു. ഇതിന്റെ ഫലമായി, ടെക്സ്റ്റ് പലപ്പോഴും ഒരേ അക്ഷരക്രമങ്ങൾ വീണ്ടും വീണ്ടും \"സൈക്ല്\" ചെയ്യുന്നതായി കാണപ്പെട്ടു, ഉദാഹരണത്തിന്:\n",
|
||||
"```\n",
|
||||
"today of the second the company and a second the company ...\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"എങ്കിലും, അടുത്ത അക്ഷരത്തിനുള്ള സാധ്യത വിതരണത്തെ നോക്കിയാൽ, ഏറ്റവും ഉയർന്ന ചില സാധ്യതകളുടെ വ്യത്യാസം വലിയതല്ലായിരിക്കാം, ഉദാഹരണത്തിന് ഒരു അക്ഷരത്തിന് 0.2 സാധ്യതയുണ്ടെങ്കിൽ, മറ്റൊന്ന് 0.19 ആയിരിക്കാം. ഉദാഹരണത്തിന് '*play*' എന്ന ക്രമത്തിൽ അടുത്ത അക്ഷരം സ്പേസ് ആകാമോ, അല്ലെങ്കിൽ **e** (പദമായ *player* ൽപോലെ) ആകാമോ എന്നത് സമാനമായ സാധ്യതയുള്ളതാണ്.\n",
|
||||
"\n",
|
||||
"ഇത് നമ്മെ ഈ നിഗമനത്തിലേക്ക് നയിക്കുന്നു: ഉയർന്ന സാധ്യതയുള്ള അക്ഷരം തിരഞ്ഞെടുക്കുന്നത് എപ്പോഴും \"ന്യായമായ\" കാര്യമല്ല, കാരണം രണ്ടാമത്തെ ഉയർന്ന സാധ്യതയുള്ള അക്ഷരം തിരഞ്ഞെടുക്കുന്നതും അർത്ഥവത്തായ ടെക്സ്റ്റിലേക്ക് നയിക്കാം. നെറ്റ്വർക്ക് ഔട്ട്പുട്ട് നൽകുന്ന സാധ്യത വിതരണത്തിൽ നിന്നാണ് അക്ഷരങ്ങൾ **സാമ്പിൾ** ചെയ്യുന്നത് കൂടുതൽ ബുദ്ധിമുട്ടുള്ളതും ഉചിതവുമാണ്.\n",
|
||||
"\n",
|
||||
"ഈ സാമ്പിളിംഗ് `multinomial` ഫംഗ്ഷൻ ഉപയോഗിച്ച് ചെയ്യാം, ഇത്所谓的 **മൾട്ടിനോമിയൽ വിതരണം** നടപ്പിലാക്കുന്നു. താഴെ ഈ **സോഫ്റ്റ്** ടെക്സ്റ്റ് ജനറേഷൻ നടപ്പിലാക്കുന്ന ഫംഗ്ഷൻ നിർവചിച്ചിരിക്കുന്നു:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"--- Temperature = 0.3\n",
|
||||
"Today and a company and complete an all the land the restrational the as a security and has provers the pay to and a report and the computer in the stand has filities and working the law the stations for a company and with the company and the final the first company and refight of the state and and workin\n",
|
||||
"\n",
|
||||
"--- Temperature = 0.8\n",
|
||||
"Today he oniis its first to Aus bomblaties the marmation a to manan boogot that pirate assaid a relaid their that goverfin the the Cappets Ecrotional Assonia Cition targets it annight the w scyments Blamity #39;s TVeer Diercheg Reserals fran envyuil that of ster said access what succers of Dour-provelith\n",
|
||||
"\n",
|
||||
"--- Temperature = 1.0\n",
|
||||
"Today holy they a 11 will meda a toket subsuaties, engins for Chanos, they's has stainger past to opening orital his thempting new Nattona was al innerforder advan-than #36;s night year his religuled talitatian what the but with Wednesday to Justment will wemen of Mark CCC Camp as Timed Nae wome a leaders\n",
|
||||
"\n",
|
||||
"--- Temperature = 1.3\n",
|
||||
"Today gpone 2.5 fech atcusion poor cocles toparsdorM.cht Line Pamage put 43 his calt lowed to the book, that has authh-the silia rruch ailing to'ory andhes beutirsimi- Aefffive heading offil an auf eacklets is charged evis, Gunymy oy) Mony has it after-sloythyor loveId out filme, the Natabl -Najuntaxiggs \n",
|
||||
"\n",
|
||||
"--- Temperature = 1.8\n",
|
||||
"Today plary, P.slan chly\\401 mardregationly #39;t 8.1Mide) closes ,filtcon alfly playin roven!\\grea.-QFBEP: Iss onfarchQ/itilia CCf Zivesigntwasta orce.-Peul-aw.uicrin of fuglinfsut aftaningwo, MIEX awayew Aice Woiduar Corvagiugge oppo esig ThusBratourid canthly-RyI.co lagitems\\eexciaishes.conBabntusmor I\n",
|
||||
"\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def generate_soft(net,size=100,start='today ',temperature=1.0):\n",
|
||||
" chars = list(start)\n",
|
||||
" out, s = net(enc(chars).view(1,-1).to(device))\n",
|
||||
" for i in range(size):\n",
|
||||
" #nc = torch.argmax(out[0][-1])\n",
|
||||
" out_dist = out[0][-1].div(temperature).exp()\n",
|
||||
" nc = torch.multinomial(out_dist,1)[0]\n",
|
||||
" chars.append(vocab.get_itos()[nc])\n",
|
||||
" out, s = net(nc.view(1,-1),s)\n",
|
||||
" return ''.join(chars)\n",
|
||||
" \n",
|
||||
"for i in [0.3,0.8,1.0,1.3,1.8]:\n",
|
||||
" print(f\"--- Temperature = {i}\\n{generate_soft(net,size=300,start='Today ',temperature=i)}\\n\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"നാം **temperature** എന്ന ഒരു പുതിയ പാരാമീറ്റർ പരിചയപ്പെടുത്തി, ഇത് ഏറ്റവും ഉയർന്ന സാധ്യതയോട് എത്രമാത്രം കർശനമായി പാലിക്കണമെന്ന് സൂചിപ്പിക്കാൻ ഉപയോഗിക്കുന്നു. temperature 1.0 ആണെങ്കിൽ, നാം ശരാശരി മൾട്ടിനോമിയൽ സാമ്പ്ലിംഗ് നടത്തുന്നു, temperature അനന്തതയിലേക്ക് പോകുമ്പോൾ - എല്ലാ സാധ്യതകളും സമാനമാകുന്നു, പിന്നെ നാം യാദൃച്ഛികമായി അടുത്ത അക്ഷരം തിരഞ്ഞെടുക്കുന്നു. താഴെ കൊടുത്ത ഉദാഹരണത്തിൽ temperature വളരെ കൂടുമ്പോൾ വാചകം അർത്ഥരഹിതമാകുന്നത് കാണാം, കൂടാതെ അത് 0-ന് അടുത്ത് പോകുമ്പോൾ \"cycled\" കർശനമായി സൃഷ്ടിച്ച വാചകത്തെപ്പോലെ തോന്നുന്നു.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**അസൂയാ**: \nഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.12 ('py38')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.8.12"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "7673cd150d96c74c6d6011460094efb4",
|
||||
"translation_date": "2025-11-26T02:11:44+00:00",
|
||||
"source_file": "lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.ipynb",
|
||||
"language_code": "ml"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
|
|
@ -1,494 +1,494 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# ജനറേറ്റീവ് നെറ്റ്വർക്കുകൾ\n",
|
||||
"\n",
|
||||
"റികറന്റ് ന്യൂറൽ നെറ്റ്വർക്കുകൾ (RNNs) மற்றும் അവയുടെ ഗേറ്റഡ് സെൽ വകഭേദങ്ങൾ, ഉദാഹരണത്തിന് ലോങ് ഷോർട്ട് ടേം മെമ്മറി സെലുകൾ (LSTMs) மற்றும் ഗേറ്റഡ് റികറന്റ് യൂണിറ്റുകൾ (GRUs), ഭാഷാ മോഡലിംഗിന് ഒരു സംവിധാനം നൽകുന്നു, അതായത് അവ വാക്കുകളുടെ ക്രമീകരണം പഠിച്ച് ഒരു സീക്വൻസിലെ അടുത്ത വാക്ക് പ്രവചിക്കാൻ കഴിയും. ഇതിലൂടെ RNN-കൾ **ജനറേറ്റീവ് ടാസ്കുകൾ**ക്കായി ഉപയോഗിക്കാം, ഉദാഹരണത്തിന് സാധാരണ ടെക്സ്റ്റ് ജനറേഷൻ, മെഷീൻ ട്രാൻസ്ലേഷൻ,甚至 ഇമേജ് ക്യാപ്ഷനിംഗ്.\n",
|
||||
"\n",
|
||||
"മുൻ യൂണിറ്റിൽ ചർച്ച ചെയ്ത RNN ആർക്കിടെക്ചറിൽ, ഓരോ RNN യൂണിറ്റും അടുത്ത ഹിഡൻ സ്റ്റേറ്റ് ഔട്ട്പുട്ടായി ഉൽപ്പാദിപ്പിച്ചിരുന്നു. എന്നാൽ, ഓരോ റികറന്റ് യൂണിറ്റിനും മറ്റൊരു ഔട്ട്പുട്ട് കൂടി ചേർക്കാം, ഇത് ഒരു **സീക്വൻസ്** (മൂല സീക്വൻസിന്റെ നീളത്തിന് തുല്യമായ) ഔട്ട്പുട്ട് നൽകാൻ സഹായിക്കും. കൂടാതെ, ഓരോ ഘട്ടത്തിലും ഇൻപുട്ട് സ്വീകരിക്കാത്ത RNN യൂണിറ്റുകൾ ഉപയോഗിച്ച്, ചില പ്രാരംഭ സ്റ്റേറ്റ് വെക്ടർ എടുത്ത്, തുടർന്ന് ഔട്ട്പുട്ടുകളുടെ ഒരു സീക്വൻസ് ഉൽപ്പാദിപ്പിക്കാം.\n",
|
||||
"\n",
|
||||
"ഈ നോട്ട്ബുക്കിൽ, നാം ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യാൻ സഹായിക്കുന്ന ലളിതമായ ജനറേറ്റീവ് മോഡലുകളെ കേന്ദ്രീകരിക്കും. ലളിതത്വത്തിനായി, നാം **ക്യാരക്ടർ-ലെവൽ നെറ്റ്വർക്ക്** നിർമ്മിക്കാം, ഇത് അക്ഷരമുതൽ അക്ഷരം ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യും. പരിശീലനത്തിനിടെ, നാം ഒരു ടെക്സ്റ്റ് കോർപ്പസ് എടുത്ത്, അത് അക്ഷര സീക്വൻസുകളായി വിഭജിക്കണം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import tensorflow as tf\n",
|
||||
"from tensorflow import keras\n",
|
||||
"import tensorflow_datasets as tfds\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"ds_train, ds_test = tfds.load('ag_news_subset').values()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## അക്ഷര വാക്ക് നിർമ്മാണം\n",
|
||||
"\n",
|
||||
"അക്ഷരനിര അടിസ്ഥാനത്തിലുള്ള ജനറേറ്റീവ് നെറ്റ്വർക്ക് നിർമ്മിക്കാൻ, വാക്കുകൾക്ക് പകരം ടെക്സ്റ്റ് വ്യക്തിഗത അക്ഷരങ്ങളായി വിഭജിക്കേണ്ടതുണ്ട്. മുമ്പ് ഉപയോഗിച്ച `TextVectorization` ലെയർ അത് ചെയ്യാൻ കഴിയില്ല, അതിനാൽ ഞങ്ങൾക്ക് രണ്ട് ഓപ്ഷനുകൾ ഉണ്ട്:\n",
|
||||
"\n",
|
||||
"* കൈയോടെ ടെക്സ്റ്റ് ലോഡ് ചെയ്ത് ടോക്കനൈസേഷൻ ചെയ്യുക, [ഈ ഔദ്യോഗിക Keras ഉദാഹരണത്തിൽ](https://keras.io/examples/generative/lstm_character_level_text_generation/) കാണുന്നതുപോലെ\n",
|
||||
"* അക്ഷരനിര ടോക്കനൈസേഷനായി `Tokenizer` ക്ലാസ് ഉപയോഗിക്കുക.\n",
|
||||
"\n",
|
||||
"നാം രണ്ടാം ഓപ്ഷൻ തിരഞ്ഞെടുക്കും. `Tokenizer` വാക്കുകളായി ടോക്കനൈസ് ചെയ്യാനും ഉപയോഗിക്കാം, അതിനാൽ അക്ഷരനിര ടോക്കനൈസേഷനിൽ നിന്ന് വാക്ക് നിര ടോക്കനൈസേഷനിലേക്ക് എളുപ്പത്തിൽ മാറാൻ കഴിയും.\n",
|
||||
"\n",
|
||||
"അക്ഷരനിര ടോക്കനൈസേഷൻ ചെയ്യാൻ, `char_level=True` പാരാമീറ്റർ നൽകണം:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def extract_text(x):\n",
|
||||
" return x['title']+' '+x['description']\n",
|
||||
"\n",
|
||||
"def tupelize(x):\n",
|
||||
" return (extract_text(x),x['label'])\n",
|
||||
"\n",
|
||||
"tokenizer = keras.preprocessing.text.Tokenizer(char_level=True,lower=False)\n",
|
||||
"tokenizer.fit_on_texts([x['title'].numpy().decode('utf-8') for x in ds_train])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"നാം ഒരു പ്രത്യേക ടോക്കൺ ഉപയോഗിച്ച് **ക്രമത്തിന്റെ അവസാനത്തെ** സൂചിപ്പിക്കാൻ ആഗ്രഹിക്കുന്നു, അതിനെ `<eos>` എന്ന് വിളിക്കും. അത് നമുക്ക് വാക്കുകളുടെ സമാഹാരത്തിൽ കൈമാറി ചേർക്കാം:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"eos_token = len(tokenizer.word_index)+1\n",
|
||||
"tokenizer.word_index['<eos>'] = eos_token\n",
|
||||
"\n",
|
||||
"vocab_size = eos_token + 1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഇപ്പോൾ, ടെക്സ്റ്റ് നമ്പറുകളുടെ ക്രമങ്ങളായി എൻകോഡ് ചെയ്യാൻ, നാം ഉപയോഗിക്കാം:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[[48, 2, 10, 10, 5, 44, 1, 25, 5, 8, 10, 13, 78]]"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"tokenizer.texts_to_sequences(['Hello, world!'])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## തലക്കെട്ടുകൾ സൃഷ്ടിക്കാൻ ജനറേറ്റീവ് RNN പരിശീലിപ്പിക്കൽ\n",
|
||||
"\n",
|
||||
"നാം വാർത്താ തലക്കെട്ടുകൾ സൃഷ്ടിക്കാൻ RNN എങ്ങനെ പരിശീലിപ്പിക്കുമെന്ന് പറയുന്നത് ഇങ്ങനെ ആണ്. ഓരോ ഘട്ടത്തിലും, ഒരു തലക്കെട്ട് എടുത്ത് അത് RNN-ലേക്ക് നൽകും, ഓരോ ഇൻപുട്ട് അക്ഷരത്തിനും നെറ്റ്വർക്കിന് അടുത്ത ഔട്ട്പുട്ട് അക്ഷരം സൃഷ്ടിക്കാൻ ആവശ്യപ്പെടും:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"നമ്മുടെ സീക്വൻസിലെ അവസാന അക്ഷരത്തിന്, നെറ്റ്വർക്കിന് `<eos>` ടോക്കൺ സൃഷ്ടിക്കാൻ ആവശ്യപ്പെടും.\n",
|
||||
"\n",
|
||||
"നാം ഇവിടെ ഉപയോഗിക്കുന്ന ജനറേറ്റീവ് RNN-ന്റെ പ്രധാന വ്യത്യാസം, RNN-ന്റെ ഓരോ ഘട്ടത്തിലും ഔട്ട്പുട്ട് എടുക്കുന്നതാണ്, അവസാന സെല്ലിൽ നിന്നല്ല. ഇത് RNN സെല്ലിന് `return_sequences` പാരാമീറ്റർ നൽകിക്കൊണ്ട് സാധ്യമാക്കാം.\n",
|
||||
"\n",
|
||||
"അതിനാൽ, പരിശീലന സമയത്ത്, നെറ്റ്വർക്കിന്റെ ഇൻപുട്ട് ഒരു നിശ്ചിത നീളമുള്ള എൻകോഡുചെയ്ത അക്ഷരങ്ങളുടെ സീക്വൻസായിരിക്കും, ഔട്ട്പുട്ട് അതേ നീളമുള്ള, പക്ഷേ ഒരു ഘടകം മാറ്റിയതും `<eos>`-ൽ അവസാനിക്കുന്നതുമായ സീക്വൻസായിരിക്കും. മിനിബാച്ച് പല സീക്വൻസുകളും ഉൾക്കൊള്ളും, അതിനാൽ എല്ലാ സീക്വൻസുകളും സജ്ജമാക്കാൻ **padding** ഉപയോഗിക്കേണ്ടതുണ്ട്.\n",
|
||||
"\n",
|
||||
"ഡാറ്റാസെറ്റ് മാറ്റാൻ സഹായിക്കുന്ന ഫംഗ്ഷനുകൾ സൃഷ്ടിക്കാം. മിനിബാച്ച് തലത്തിൽ സീക്വൻസുകൾ പാഡ് ചെയ്യേണ്ടതിനാൽ, ആദ്യം `.batch()` വിളിച്ച് ഡാറ്റാസെറ്റ് ബാച്ച് ചെയ്യുകയും, പിന്നീട് `map` ഉപയോഗിച്ച് മാറ്റം വരുത്തുകയും ചെയ്യും. അതിനാൽ, മാറ്റം വരുത്തുന്ന ഫംഗ്ഷൻ മുഴുവൻ മിനിബാച്ച് ഒരു പാരാമീറ്ററായി സ്വീകരിക്കും:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def title_batch(x):\n",
|
||||
" x = [t.numpy().decode('utf-8') for t in x]\n",
|
||||
" z = tokenizer.texts_to_sequences(x)\n",
|
||||
" z = tf.keras.preprocessing.sequence.pad_sequences(z)\n",
|
||||
" return tf.one_hot(z,vocab_size), tf.one_hot(tf.concat([z[:,1:],tf.constant(eos_token,shape=(len(z),1))],axis=1),vocab_size)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"നാം ഇവിടെ ചെയ്യുന്ന ചില പ്രധാന കാര്യങ്ങൾ:\n",
|
||||
"* ആദ്യം സ്ട്രിംഗ് ടെൻസറിൽ നിന്ന് യഥാർത്ഥ ടെക്സ്റ്റ് എടുക്കുന്നു\n",
|
||||
"* `text_to_sequences` സ്ട്രിംഗുകളുടെ ലിസ്റ്റ് ഇന്റിജർ ടെൻസറുകളുടെ ലിസ്റ്റായി മാറ്റുന്നു\n",
|
||||
"* `pad_sequences` ആ ടെൻസറുകളെ അവരുടെ പരമാവധി നീളത്തിലേക്ക് പാഡ് ചെയ്യുന്നു\n",
|
||||
"* അവസാനം എല്ലാ അക്ഷരങ്ങളും വൺ-ഹോട്ട് എൻകോഡ് ചെയ്യുകയും, ഷിഫ്റ്റിംഗ് ചെയ്യുകയും `<eos>` ചേർക്കുകയും ചെയ്യുന്നു. വൺ-ഹോട്ട് എൻകോഡ് ചെയ്ത അക്ഷരങ്ങൾ എന്തിന് വേണ്ടിയാണെന്ന് നമുക്ക് ഉടൻ കാണാം\n",
|
||||
"\n",
|
||||
"എങ്കിലും, ഈ ഫംഗ്ഷൻ **Pythonic** ആണ്, അതായത് ഇത് സ്വയം Tensorflow കംപ്യൂട്ടേഷണൽ ഗ്രാഫിലേക്ക് മാറ്റാൻ കഴിയില്ല. ഈ ഫംഗ്ഷൻ നേരിട്ട് `Dataset.map` ഫംഗ്ഷനിൽ ഉപയോഗിക്കാൻ ശ്രമിച്ചാൽ പിശകുകൾ ഉണ്ടാകും. അതിനാൽ ഈ Pythonic കോൾ `py_function` റാപ്പർ ഉപയോഗിച്ച് ഉൾപ്പെടുത്തേണ്ടതുണ്ട്:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def title_batch_fn(x):\n",
|
||||
" x = x['title']\n",
|
||||
" a,b = tf.py_function(title_batch,inp=[x],Tout=(tf.float32,tf.float32))\n",
|
||||
" return a,b"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **കുറിപ്പ്**: Pythonic-ഉം Tensorflow ട്രാൻസ്ഫർമേഷൻ ഫങ്ഷനുകളും തമ്മിലുള്ള വ്യത്യാസം കുറച്ച് സങ്കീർണ്ണമായി തോന്നാം, കൂടാതെ dataset-നെ `fit`-ന് മുമ്പ് സാധാരണ Python ഫങ്ഷനുകൾ ഉപയോഗിച്ച് ട്രാൻസ്ഫോം ചെയ്യാത്തതെന്തുകൊണ്ടെന്ന് നിങ്ങൾ ചോദിച്ചേക്കാം. ഇത് തീർച്ചയായും ചെയ്യാവുന്നതാണ്, എന്നാൽ `Dataset.map` ഉപയോഗിക്കുന്നത് വലിയ ഗുണം നൽകുന്നു, കാരണം ഡാറ്റ ട്രാൻസ്ഫർമേഷൻ പൈപ്പ്ലൈൻ Tensorflow കംപ്യൂട്ടേഷണൽ ഗ്രാഫ് ഉപയോഗിച്ച് പ്രവർത്തിക്കുന്നു, ഇത് GPU കംപ്യൂട്ടേഷനുകളുടെ പ്രയോജനം എടുക്കുകയും CPU/GPU-വിനിടയിൽ ഡാറ്റ കൈമാറ്റം കുറയ്ക്കുകയും ചെയ്യുന്നു.\n",
|
||||
"\n",
|
||||
"ഇപ്പോൾ നാം നമ്മുടെ ജനറേറ്റർ നെറ്റ്വർക്ക് നിർമ്മിച്ച് പരിശീലനം ആരംഭിക്കാം. ഇത് മുമ്പത്തെ യൂണിറ്റിൽ ചർച്ച ചെയ്ത ഏതെങ്കിലും റിക്കറന്റ് സെല്ലിൽ അടിസ്ഥാനമാക്കാവുന്നതാണ് (സിംപിൾ, LSTM അല്ലെങ്കിൽ GRU). നമ്മുടെ ഉദാഹരണത്തിൽ LSTM ഉപയോഗിക്കും.\n",
|
||||
"\n",
|
||||
"നെറ്റ്വർക്ക് കാറക്ടറുകൾ ഇൻപുട്ടായി സ്വീകരിക്കുന്നതിനാൽ, വാക്കുകളുടെ വലുപ്പം വളരെ ചെറുതാണ്, അതിനാൽ embedding ലെയർ ആവശ്യമില്ല, one-hot-encoded ഇൻപുട്ട് നേരിട്ട് LSTM സെല്ലിലേക്ക് പോകാം. ഔട്ട്പുട്ട് ലെയർ LSTM ഔട്ട്പുട്ട് one-hot-encoded ടോക്കൺ നമ്പറുകളായി മാറ്റുന്ന `Dense` ക്ലാസിഫയർ ആയിരിക്കും.\n",
|
||||
"\n",
|
||||
"കൂടാതെ, വ്യത്യസ്ത നീളമുള്ള സീക്വൻസുകളുമായി കൈകാര്യം ചെയ്യുന്നതിനാൽ, പാഡുചെയ്ത ഭാഗം അവഗണിക്കുന്ന ഒരു മാസ്ക് സൃഷ്ടിക്കാൻ `Masking` ലെയർ ഉപയോഗിക്കാം. `<eos>` ടോക്കണിന് ശേഷം വരുന്ന എല്ലാം നമ്മൾ വളരെ ശ്രദ്ധിക്കാത്തതിനാൽ ഇത് കർശനമായി ആവശ്യമായില്ല, പക്ഷേ ഈ ലെയർ തരം ഉപയോഗിച്ച് അനുഭവം നേടുന്നതിനായി ഇത് ഉപയോഗിക്കും. `input_shape` `(None, vocab_size)` ആയിരിക്കും, ഇവിടെ `None` വ്യത്യസ്ത നീളമുള്ള സീക്വൻസിനെ സൂചിപ്പിക്കുന്നു, ഔട്ട്പുട്ട് ഷേപ്പ് `(None, vocab_size)` ആണെന്നും `summary`-ൽ കാണാം:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"sequential\"\n",
|
||||
"_________________________________________________________________\n",
|
||||
"Layer (type) Output Shape Param # \n",
|
||||
"=================================================================\n",
|
||||
"masking (Masking) (None, None, 84) 0 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"lstm (LSTM) (None, None, 128) 109056 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"dense (Dense) (None, None, 84) 10836 \n",
|
||||
"=================================================================\n",
|
||||
"Total params: 119,892\n",
|
||||
"Trainable params: 119,892\n",
|
||||
"Non-trainable params: 0\n",
|
||||
"_________________________________________________________________\n",
|
||||
"15000/15000 [==============================] - 229s 15ms/step - loss: 1.5385\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7fa40c1245e0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = keras.models.Sequential([\n",
|
||||
" keras.layers.Masking(input_shape=(None,vocab_size)),\n",
|
||||
" keras.layers.LSTM(128,return_sequences=True),\n",
|
||||
" keras.layers.Dense(vocab_size,activation='softmax')\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.summary()\n",
|
||||
"model.compile(loss='categorical_crossentropy')\n",
|
||||
"\n",
|
||||
"model.fit(ds_train.batch(8).map(title_batch_fn))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## ഔട്ട്പുട്ട് സൃഷ്ടിക്കൽ\n",
|
||||
"\n",
|
||||
"ഇപ്പോൾ മോഡൽ പരിശീലിപ്പിച്ചതിനുശേഷം, അതുപയോഗിച്ച് ചില ഔട്ട്പുട്ടുകൾ സൃഷ്ടിക്കാൻ ആഗ്രഹിക്കുന്നു. ആദ്യം, ടോക്കൺ നമ്പറുകളുടെ ശ്രേണിയാൽ പ്രതിനിധീകരിച്ച ടെക്സ്റ്റ് ഡീകോഡ് ചെയ്യാനുള്ള ഒരു മാർഗം വേണം. ഇതിന്, `tokenizer.sequences_to_texts` ഫംഗ്ഷൻ ഉപയോഗിക്കാമായിരുന്നു; എന്നാൽ, ഇത് കറക്റ്റർ-ലെവൽ ടോക്കണൈസേഷനുമായി നല്ല രീതിയിൽ പ്രവർത്തിക്കുന്നില്ല. അതിനാൽ, ടോക്കണൈസറിൽ നിന്നുള്ള ടോക്കൺ ഡിക്ഷണറി (പേര് `word_index`) എടുത്ത്, അതിന്റെ റിവേഴ്സ് മാപ്പ് നിർമ്മിച്ച്, ഞങ്ങൾ സ്വന്തം ഡീകോഡിംഗ് ഫംഗ്ഷൻ എഴുതും:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"reverse_map = {val:key for key, val in tokenizer.word_index.items()}\n",
|
||||
"\n",
|
||||
"def decode(x):\n",
|
||||
" return ''.join([reverse_map[t] for t in x])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഇപ്പോൾ, നമുക്ക് ജനറേഷൻ ചെയ്യാം. നാം ചില സ്ട്രിംഗ് `start` ഉപയോഗിച്ച് തുടങ്ങും, അതിനെ ഒരു സീക്വൻസ് `inp` ആയി എൻകോഡ് ചെയ്യും, പിന്നീട് ഓരോ ഘട്ടത്തിലും അടുത്ത അക്ഷരം പ്രവചിക്കാൻ നമ്മുടെ നെറ്റ്വർക്ക് വിളിക്കും.\n",
|
||||
"\n",
|
||||
"നെറ്റ്വർക്കിന്റെ ഔട്ട്പുട്ട് `out` എന്നത് `vocab_size` ഘടകങ്ങളുള്ള ഒരു വെക്ടറാണ്, ഓരോ ടോക്കണിന്റെയും സാധ്യതകൾ പ്രതിനിധീകരിക്കുന്നു, ഏറ്റവും സാധ്യതയുള്ള ടോക്കൺ നമ്പർ കണ്ടെത്താൻ `argmax` ഉപയോഗിക്കാം. പിന്നീട് ആ അക്ഷരം ജനറേറ്റുചെയ്ത ടോക്കൺ ലിസ്റ്റിൽ ചേർക്കുകയും, ജനറേഷൻ തുടരുകയും ചെയ്യും. ഒരു അക്ഷരം ജനറേറ്റ് ചെയ്യാനുള്ള ഈ പ്രക്രിയ `size` തവണ ആവർത്തിച്ച് ആവശ്യമായ അക്ഷരങ്ങളുടെ എണ്ണം സൃഷ്ടിക്കും, കൂടാതെ `eos_token` കണ്ടുപിടിച്ചാൽ നേരത്തെ അവസാനിപ്പിക്കും.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"'Today #39;s lead to strike for the strike for the strike for the strike (AFP)'"
|
||||
]
|
||||
},
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def generate(model,size=100,start='Today '):\n",
|
||||
" inp = tokenizer.texts_to_sequences([start])[0]\n",
|
||||
" chars = inp\n",
|
||||
" for i in range(size):\n",
|
||||
" out = model(tf.expand_dims(tf.one_hot(inp,vocab_size),0))[0][-1]\n",
|
||||
" nc = tf.argmax(out)\n",
|
||||
" if nc==eos_token:\n",
|
||||
" break\n",
|
||||
" chars.append(nc.numpy())\n",
|
||||
" inp = inp+[nc]\n",
|
||||
" return decode(chars)\n",
|
||||
" \n",
|
||||
"generate(model)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## പരിശീലനത്തിനിടെ സാമ്പിളിംഗ് ഔട്ട്പുട്ട്\n",
|
||||
"\n",
|
||||
"*ശുദ്ധത* പോലുള്ള ഉപകാരപ്രദമായ മെട്രിക്കുകൾ ഇല്ലാത്തതിനാൽ, നമ്മുടെ മോഡൽ മെച്ചപ്പെടുന്നുണ്ടെന്ന് കാണാനുള്ള ഏക മാർഗം പരിശീലനത്തിനിടെ സൃഷ്ടിച്ച സ്ട്രിംഗ് **സാമ്പിളിംഗ്** ചെയ്യലാണ്. ഇത് ചെയ്യാൻ, നാം **കോൾബാക്കുകൾ** ഉപയോഗിക്കും, അഥവാ `fit` ഫംഗ്ഷനിലേക്ക് പാസ്സ് ചെയ്യാവുന്ന, പരിശീലനത്തിനിടെ കാലക്രമേണ വിളിക്കപ്പെടുന്ന ഫംഗ്ഷനുകൾ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Epoch 1/3\n",
|
||||
"15000/15000 [==============================] - 226s 15ms/step - loss: 1.2703\n",
|
||||
"Today #39;s a lead in the company for the strike\n",
|
||||
"Epoch 2/3\n",
|
||||
"15000/15000 [==============================] - 227s 15ms/step - loss: 1.2057\n",
|
||||
"Today #39;s the Market Service on Security Start (AP)\n",
|
||||
"Epoch 3/3\n",
|
||||
"15000/15000 [==============================] - 226s 15ms/step - loss: 1.1752\n",
|
||||
"Today #39;s a line on the strike to start for the start\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7fa40c74e3d0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"sampling_callback = keras.callbacks.LambdaCallback(\n",
|
||||
" on_epoch_end = lambda batch, logs: print(generate(model))\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"model.fit(ds_train.batch(8).map(title_batch_fn),callbacks=[sampling_callback],epochs=3)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഈ ഉദാഹരണം ഇതിനകം തന്നെ നല്ലൊരു ടെക്സ്റ്റ് സൃഷ്ടിക്കുന്നു, പക്ഷേ ഇത് പലവിധത്തിൽ മെച്ചപ്പെടുത്താൻ കഴിയും:\n",
|
||||
"* **കൂടുതൽ ടെക്സ്റ്റ്**. ഞങ്ങൾ നമ്മുടെ ടാസ്കിനായി തലക്കെട്ടുകൾ മാത്രം ഉപയോഗിച്ചിട്ടുണ്ട്, പക്ഷേ നിങ്ങൾ പൂർണ്ണ ടെക്സ്റ്റുമായി പരീക്ഷണം നടത്താൻ ആഗ്രഹിക്കാം. RNN-കൾ ദീർഘമായ സീക്വൻസുകൾ കൈകാര്യം ചെയ്യുന്നതിൽ അത്ര നല്ലതല്ലെന്ന് ഓർക്കുക, അതിനാൽ അവയെ ചെറുതായുള്ള വാക്യങ്ങളായി വിഭജിക്കുക അല്ലെങ്കിൽ നിശ്ചിത നീളമുള്ള സീക്വൻസിൽ (ഉദാ., `num_chars` എന്ന മുൻകൂട്ടി നിശ്ചയിച്ച മൂല്യം, 256 പോലുള്ളത്) പരിശീലനം നടത്തുന്നത് ബുദ്ധിമുട്ടില്ല. മുകളിൽ നൽകിയ ഉദാഹരണം [അധികൃത Keras ട്യൂട്ടോറിയൽ](https://keras.io/examples/generative/lstm_character_level_text_generation/) പ്രചോദനമായി ഉപയോഗിച്ച് ഇത്തരത്തിലുള്ള ആർക്കിടെക്ചറിലേക്ക് മാറ്റാൻ ശ്രമിക്കാം.\n",
|
||||
"* **മൾട്ടിലെയർ LSTM**. 2 അല്ലെങ്കിൽ 3 ലെയറുകളുടെ LSTM സെല്ലുകൾ പരീക്ഷിക്കുന്നത് ഉചിതമാണ്. മുൻ യൂണിറ്റിൽ പറഞ്ഞതുപോലെ, ഓരോ LSTM ലെയറും ടെക്സ്റ്റിൽ നിന്നുള്ള പ്രത്യേക പാറ്റേണുകൾ എടുക്കുന്നു, കറക്റ്റർ-ലെവൽ ജനറേറ്ററിന്റെ കാര്യത്തിൽ താഴത്തെ LSTM ലെയർ സില്ലബിളുകൾ എടുക്കുന്നതിന് ഉത്തരവാദിയാകും, മുകളിലെ ലെയറുകൾ വാക്കുകളും വാക്കുകളുടെ സംയോജനങ്ങളും എടുക്കുന്നതിന്. ഇത് LSTM കൺസ്ട്രക്ടറിലേക്ക് ലെയറുകളുടെ എണ്ണം പാരാമീറ്ററായി നൽകുന്നതിലൂടെ എളുപ്പത്തിൽ നടപ്പിലാക്കാം.\n",
|
||||
"* **GRU യൂണിറ്റുകൾ** ഉപയോഗിച്ച് പരീക്ഷണം നടത്താനും ഏത് മെച്ചമാണ് എന്ന് കാണാനും, കൂടാതെ **വിവിധ ഹിഡൻ ലെയർ വലുപ്പങ്ങൾ** പരീക്ഷിക്കാനും നിങ്ങൾ ആഗ്രഹിക്കാം. വളരെ വലിയ ഹിഡൻ ലെയർ ഓവർഫിറ്റിങ്ങിന് കാരണമാകാം (ഉദാ., നെറ്റ്വർക്ക് കൃത്യമായ ടെക്സ്റ്റ് പഠിക്കും), ചെറുതായുള്ള വലുപ്പം നല്ല ഫലം നൽകാതിരിക്കാം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## സോഫ്റ്റ് ടെക്സ്റ്റ് ജനറേഷൻ ಮತ್ತು ടെംപറേച്ചർ\n",
|
||||
"\n",
|
||||
"മുൻപ് `generate` എന്ന നിർവചനത്തിൽ, നാം എപ്പോഴും ഏറ്റവും ഉയർന്ന സാധ്യതയുള്ള അക്ഷരത്തെ അടുത്ത അക്ഷരമായി എടുത്തിരുന്നു. ഇതിന്റെ ഫലമായി, ടെക്സ്റ്റ് പലപ്പോഴും ഒരേ അക്ഷരക്രമങ്ങൾ വീണ്ടും വീണ്ടും \"സൈക്ല്\" ചെയ്യുന്നതായി കണ്ടു, ഉദാഹരണത്തിന് താഴെ കാണുന്ന പോലെ:\n",
|
||||
"```\n",
|
||||
"today of the second the company and a second the company ...\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"എങ്കിലും, അടുത്ത അക്ഷരത്തിനുള്ള സാധ്യത വിതരണത്തെ നോക്കിയാൽ, ഏറ്റവും ഉയർന്ന ചില സാധ്യതകളുടെ വ്യത്യാസം വലിയതല്ലായിരിക്കാം, ഉദാഹരണത്തിന് ഒരു അക്ഷരത്തിന് 0.2 സാധ്യതയുണ്ടെങ്കിൽ, മറ്റൊന്ന് 0.19 ആയിരിക്കാം. ഉദാഹരണത്തിന് '*play*' എന്ന ക്രമത്തിൽ അടുത്ത അക്ഷരം സ്പേസ് ആകാമോ, അല്ലെങ്കിൽ **e** (പദമായ *player* ൽപോലെ) ആകാമോ എന്നത് സമാനമായ സാധ്യതയുള്ളതാണ്.\n",
|
||||
"\n",
|
||||
"ഇത് നമ്മെ ഈ നിഗമനത്തിലേക്ക് നയിക്കുന്നു: ഏറ്റവും ഉയർന്ന സാധ്യതയുള്ള അക്ഷരം തിരഞ്ഞെടുക്കുന്നത് എപ്പോഴും \"ന്യായമായ\" കാര്യമല്ല, കാരണം രണ്ടാം ഉയർന്ന സാധ്യതയുള്ളത് തിരഞ്ഞെടുക്കുന്നതും അർത്ഥവത്തായ ടെക്സ്റ്റിലേക്ക് നയിക്കാം. നെറ്റ്വർക്ക് ഔട്ട്പുട്ട് നൽകുന്ന സാധ്യത വിതരണത്തിൽ നിന്നാണ് അക്ഷരങ്ങൾ **സാമ്പിൾ** ചെയ്യുന്നത് കൂടുതൽ ബുദ്ധിമുട്ടുള്ളതും ഉചിതവുമാണ്.\n",
|
||||
"\n",
|
||||
"ഈ സാമ്പിളിംഗ് `np.multinomial` ഫംഗ്ഷൻ ഉപയോഗിച്ച് ചെയ്യാം, ഇത് **മൾട്ടിനോമിയൽ വിതരണ**ം നടപ്പിലാക്കുന്നു. താഴെ ഈ **സോഫ്റ്റ്** ടെക്സ്റ്റ് ജനറേഷൻ നടപ്പിലാക്കുന്ന ഫംഗ്ഷൻ നിർവചിച്ചിരിക്കുന്നു:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 33,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"\n",
|
||||
"--- Temperature = 0.3\n",
|
||||
"Today #39;s strike #39; to start at the store return\n",
|
||||
"On Sunday PO to Be Data Profit Up (Reuters)\n",
|
||||
"Moscow, SP wins straight to the Microsoft #39;s control of the space start\n",
|
||||
"President olding of the blast start for the strike to pay <b>...</b>\n",
|
||||
"Little red riding hood ficed to the spam countered in European <b>...</b>\n",
|
||||
"\n",
|
||||
"--- Temperature = 0.8\n",
|
||||
"Today countie strikes ryder missile faces food market blut\n",
|
||||
"On Sunday collores lose-toppy of sale of Bullment in <b>...</b>\n",
|
||||
"Moscow, IBM Diffeiting in Afghan Software Hotels (Reuters)\n",
|
||||
"President Ol Luster for Profit Peaced Raised (AP)\n",
|
||||
"Little red riding hood dace on depart talks #39; bank up\n",
|
||||
"\n",
|
||||
"--- Temperature = 1.0\n",
|
||||
"Today wits House buiting debate fixes #39; supervice stake again\n",
|
||||
"On Sunday arling digital poaching In for level\n",
|
||||
"Moscow, DS Up 7, Top Proble Protest Caprey Mamarian Strike\n",
|
||||
"President teps help of roubler stepted lessabul-Dhalitics (AFP)\n",
|
||||
"Little red riding hood signs on cash in Carter-youb\n",
|
||||
"\n",
|
||||
"--- Temperature = 1.3\n",
|
||||
"Today wits flawer ro, pSIA figat's co DroftwavesIs Talo up\n",
|
||||
"On Sunday hround elitwing wint EU Powerburlinetien\n",
|
||||
"Moscow, Bazz #39;s sentries olymen winnelds' next for Olympite Huc?\n",
|
||||
"President lost securitys from power Elections in Smiltrials\n",
|
||||
"Little red riding hood vides profit, exponituity, profitmainalist-at said listers\n",
|
||||
"\n",
|
||||
"--- Temperature = 1.8\n",
|
||||
"Today #39;It: He deat: N.KA Asside\n",
|
||||
"On Sunday i arry Par aldeup patient Wo stele1\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"ename": "KeyError",
|
||||
"evalue": "0",
|
||||
"output_type": "error",
|
||||
"traceback": [
|
||||
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
||||
"\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
|
||||
"\u001b[0;32m<ipython-input-33-db32367a0feb>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"\\n--- Temperature = {i}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mj\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgenerate_soft\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0msize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m300\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mstart\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mwords\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mj\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mtemperature\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
|
||||
"\u001b[0;32m<ipython-input-33-db32367a0feb>\u001b[0m in \u001b[0;36mgenerate_soft\u001b[0;34m(model, size, start, temperature)\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0mchars\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0minp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minp\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mnc\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 13\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mdecode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mchars\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 14\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0mwords\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'Today '\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'On Sunday '\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'Moscow, '\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'President '\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'Little red riding hood '\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
||||
"\u001b[0;32m<ipython-input-10-3f5fa6130b1d>\u001b[0m in \u001b[0;36mdecode\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdecode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0;34m''\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mreverse_map\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mt\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
|
||||
"\u001b[0;32m<ipython-input-10-3f5fa6130b1d>\u001b[0m in \u001b[0;36m<listcomp>\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdecode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0;34m''\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mreverse_map\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mt\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
|
||||
"\u001b[0;31mKeyError\u001b[0m: 0"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def generate_soft(model,size=100,start='Today ',temperature=1.0):\n",
|
||||
" inp = tokenizer.texts_to_sequences([start])[0]\n",
|
||||
" chars = inp\n",
|
||||
" for i in range(size):\n",
|
||||
" out = model(tf.expand_dims(tf.one_hot(inp,vocab_size),0))[0][-1]\n",
|
||||
" probs = tf.exp(tf.math.log(out)/temperature).numpy().astype(np.float64)\n",
|
||||
" probs = probs/np.sum(probs)\n",
|
||||
" nc = np.argmax(np.random.multinomial(1,probs,1))\n",
|
||||
" if nc==eos_token:\n",
|
||||
" break\n",
|
||||
" chars.append(nc)\n",
|
||||
" inp = inp+[nc]\n",
|
||||
" return decode(chars)\n",
|
||||
"\n",
|
||||
"words = ['Today ','On Sunday ','Moscow, ','President ','Little red riding hood ']\n",
|
||||
" \n",
|
||||
"for i in [0.3,0.8,1.0,1.3,1.8]:\n",
|
||||
" print(f\"\\n--- Temperature = {i}\")\n",
|
||||
" for j in range(5):\n",
|
||||
" print(generate_soft(model,size=300,start=words[j],temperature=i))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"നാം **temperature** എന്ന ഒരു പുതിയ പാരാമീറ്റർ പരിചയപ്പെടുത്തി, ഇത് ഏറ്റവും ഉയർന്ന സാധ്യതയോട് എത്രമാത്രം കർശനമായി പാലിക്കണമെന്ന് സൂചിപ്പിക്കാൻ ഉപയോഗിക്കുന്നു. temperature 1.0 ആണെങ്കിൽ, നാം ശരാശരി മൾട്ടിനോമിയൽ സാമ്പ്ലിംഗ് നടത്തുന്നു, temperature അനന്തതയിലേക്ക് പോകുമ്പോൾ - എല്ലാ സാധ്യതകളും സമാനമാകുന്നു, പിന്നെ നാം യാദൃച്ഛികമായി അടുത്ത അക്ഷരം തിരഞ്ഞെടുക്കുന്നു. താഴെ കൊടുത്ത ഉദാഹരണത്തിൽ temperature വളരെ കൂടുമ്പോൾ വാചകം അർത്ഥരഹിതമാകുന്നത് കാണാം, കൂടാതെ അത് 0-ന് അടുത്ത് പോകുമ്പോൾ \"cycled\" കർശനമായി സൃഷ്ടിച്ച വാചകത്തെപ്പോലെ തോന്നുന്നു.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**അസൂയാ**: \nഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.12 ('py38')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.8.12"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "9fbb7d5fda708537649f71f5f646fcde",
|
||||
"translation_date": "2025-11-26T02:16:28+00:00",
|
||||
"source_file": "lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.ipynb",
|
||||
"language_code": "ml"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# ജനറേറ്റീവ് നെറ്റ്വർക്കുകൾ\n",
|
||||
"\n",
|
||||
"റികറന്റ് ന്യൂറൽ നെറ്റ്വർക്കുകൾ (RNNs) மற்றும் അവയുടെ ഗേറ്റഡ് സെൽ വകഭേദങ്ങൾ, ഉദാഹരണത്തിന് ലോങ് ഷോർട്ട് ടേം മെമ്മറി സെലുകൾ (LSTMs) மற்றும் ഗേറ്റഡ് റികറന്റ് യൂണിറ്റുകൾ (GRUs), ഭാഷാ മോഡലിംഗിന് ഒരു സംവിധാനം നൽകുന്നു, അതായത് അവ വാക്കുകളുടെ ക്രമീകരണം പഠിച്ച് ഒരു സീക്വൻസിലെ അടുത്ത വാക്ക് പ്രവചിക്കാൻ കഴിയും. ഇതിലൂടെ RNN-കൾ **ജനറേറ്റീവ് ടാസ്കുകൾ**ക്കായി ഉപയോഗിക്കാം, ഉദാഹരണത്തിന് സാധാരണ ടെക്സ്റ്റ് ജനറേഷൻ, മെഷീൻ ട്രാൻസ്ലേഷൻ,甚至 ഇമേജ് ക്യാപ്ഷനിംഗ്.\n",
|
||||
"\n",
|
||||
"മുൻ യൂണിറ്റിൽ ചർച്ച ചെയ്ത RNN ആർക്കിടെക്ചറിൽ, ഓരോ RNN യൂണിറ്റും അടുത്ത ഹിഡൻ സ്റ്റേറ്റ് ഔട്ട്പുട്ടായി ഉൽപ്പാദിപ്പിച്ചിരുന്നു. എന്നാൽ, ഓരോ റികറന്റ് യൂണിറ്റിനും മറ്റൊരു ഔട്ട്പുട്ട് കൂടി ചേർക്കാം, ഇത് ഒരു **സീക്വൻസ്** (മൂല സീക്വൻസിന്റെ നീളത്തിന് തുല്യമായ) ഔട്ട്പുട്ട് നൽകാൻ സഹായിക്കും. കൂടാതെ, ഓരോ ഘട്ടത്തിലും ഇൻപുട്ട് സ്വീകരിക്കാത്ത RNN യൂണിറ്റുകൾ ഉപയോഗിച്ച്, ചില പ്രാരംഭ സ്റ്റേറ്റ് വെക്ടർ എടുത്ത്, തുടർന്ന് ഔട്ട്പുട്ടുകളുടെ ഒരു സീക്വൻസ് ഉൽപ്പാദിപ്പിക്കാം.\n",
|
||||
"\n",
|
||||
"ഈ നോട്ട്ബുക്കിൽ, നാം ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യാൻ സഹായിക്കുന്ന ലളിതമായ ജനറേറ്റീവ് മോഡലുകളെ കേന്ദ്രീകരിക്കും. ലളിതത്വത്തിനായി, നാം **ക്യാരക്ടർ-ലെവൽ നെറ്റ്വർക്ക്** നിർമ്മിക്കാം, ഇത് അക്ഷരമുതൽ അക്ഷരം ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യും. പരിശീലനത്തിനിടെ, നാം ഒരു ടെക്സ്റ്റ് കോർപ്പസ് എടുത്ത്, അത് അക്ഷര സീക്വൻസുകളായി വിഭജിക്കണം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import tensorflow as tf\n",
|
||||
"from tensorflow import keras\n",
|
||||
"import tensorflow_datasets as tfds\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"ds_train, ds_test = tfds.load('ag_news_subset').values()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## അക്ഷര വാക്ക് നിർമ്മാണം\n",
|
||||
"\n",
|
||||
"അക്ഷരനിര അടിസ്ഥാനത്തിലുള്ള ജനറേറ്റീവ് നെറ്റ്വർക്ക് നിർമ്മിക്കാൻ, വാക്കുകൾക്ക് പകരം ടെക്സ്റ്റ് വ്യക്തിഗത അക്ഷരങ്ങളായി വിഭജിക്കേണ്ടതുണ്ട്. മുമ്പ് ഉപയോഗിച്ച `TextVectorization` ലെയർ അത് ചെയ്യാൻ കഴിയില്ല, അതിനാൽ ഞങ്ങൾക്ക് രണ്ട് ഓപ്ഷനുകൾ ഉണ്ട്:\n",
|
||||
"\n",
|
||||
"* കൈയോടെ ടെക്സ്റ്റ് ലോഡ് ചെയ്ത് ടോക്കനൈസേഷൻ ചെയ്യുക, [ഈ ഔദ്യോഗിക Keras ഉദാഹരണത്തിൽ](https://keras.io/examples/generative/lstm_character_level_text_generation/) കാണുന്നതുപോലെ\n",
|
||||
"* അക്ഷരനിര ടോക്കനൈസേഷനായി `Tokenizer` ക്ലാസ് ഉപയോഗിക്കുക.\n",
|
||||
"\n",
|
||||
"നാം രണ്ടാം ഓപ്ഷൻ തിരഞ്ഞെടുക്കും. `Tokenizer` വാക്കുകളായി ടോക്കനൈസ് ചെയ്യാനും ഉപയോഗിക്കാം, അതിനാൽ അക്ഷരനിര ടോക്കനൈസേഷനിൽ നിന്ന് വാക്ക് നിര ടോക്കനൈസേഷനിലേക്ക് എളുപ്പത്തിൽ മാറാൻ കഴിയും.\n",
|
||||
"\n",
|
||||
"അക്ഷരനിര ടോക്കനൈസേഷൻ ചെയ്യാൻ, `char_level=True` പാരാമീറ്റർ നൽകണം:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def extract_text(x):\n",
|
||||
" return x['title']+' '+x['description']\n",
|
||||
"\n",
|
||||
"def tupelize(x):\n",
|
||||
" return (extract_text(x),x['label'])\n",
|
||||
"\n",
|
||||
"tokenizer = keras.preprocessing.text.Tokenizer(char_level=True,lower=False)\n",
|
||||
"tokenizer.fit_on_texts([x['title'].numpy().decode('utf-8') for x in ds_train])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"നാം ഒരു പ്രത്യേക ടോക്കൺ ഉപയോഗിച്ച് **ക്രമത്തിന്റെ അവസാനത്തെ** സൂചിപ്പിക്കാൻ ആഗ്രഹിക്കുന്നു, അതിനെ `<eos>` എന്ന് വിളിക്കും. അത് നമുക്ക് വാക്കുകളുടെ സമാഹാരത്തിൽ കൈമാറി ചേർക്കാം:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"eos_token = len(tokenizer.word_index)+1\n",
|
||||
"tokenizer.word_index['<eos>'] = eos_token\n",
|
||||
"\n",
|
||||
"vocab_size = eos_token + 1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഇപ്പോൾ, ടെക്സ്റ്റ് നമ്പറുകളുടെ ക്രമങ്ങളായി എൻകോഡ് ചെയ്യാൻ, നാം ഉപയോഗിക്കാം:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[[48, 2, 10, 10, 5, 44, 1, 25, 5, 8, 10, 13, 78]]"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"tokenizer.texts_to_sequences(['Hello, world!'])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## തലക്കെട്ടുകൾ സൃഷ്ടിക്കാൻ ജനറേറ്റീവ് RNN പരിശീലിപ്പിക്കൽ\n",
|
||||
"\n",
|
||||
"നാം വാർത്താ തലക്കെട്ടുകൾ സൃഷ്ടിക്കാൻ RNN എങ്ങനെ പരിശീലിപ്പിക്കുമെന്ന് പറയുന്നത് ഇങ്ങനെ ആണ്. ഓരോ ഘട്ടത്തിലും, ഒരു തലക്കെട്ട് എടുത്ത് അത് RNN-ലേക്ക് നൽകും, ഓരോ ഇൻപുട്ട് അക്ഷരത്തിനും നെറ്റ്വർക്കിന് അടുത്ത ഔട്ട്പുട്ട് അക്ഷരം സൃഷ്ടിക്കാൻ ആവശ്യപ്പെടും:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"നമ്മുടെ സീക്വൻസിലെ അവസാന അക്ഷരത്തിന്, നെറ്റ്വർക്കിന് `<eos>` ടോക്കൺ സൃഷ്ടിക്കാൻ ആവശ്യപ്പെടും.\n",
|
||||
"\n",
|
||||
"നാം ഇവിടെ ഉപയോഗിക്കുന്ന ജനറേറ്റീവ് RNN-ന്റെ പ്രധാന വ്യത്യാസം, RNN-ന്റെ ഓരോ ഘട്ടത്തിലും ഔട്ട്പുട്ട് എടുക്കുന്നതാണ്, അവസാന സെല്ലിൽ നിന്നല്ല. ഇത് RNN സെല്ലിന് `return_sequences` പാരാമീറ്റർ നൽകിക്കൊണ്ട് സാധ്യമാക്കാം.\n",
|
||||
"\n",
|
||||
"അതിനാൽ, പരിശീലന സമയത്ത്, നെറ്റ്വർക്കിന്റെ ഇൻപുട്ട് ഒരു നിശ്ചിത നീളമുള്ള എൻകോഡുചെയ്ത അക്ഷരങ്ങളുടെ സീക്വൻസായിരിക്കും, ഔട്ട്പുട്ട് അതേ നീളമുള്ള, പക്ഷേ ഒരു ഘടകം മാറ്റിയതും `<eos>`-ൽ അവസാനിക്കുന്നതുമായ സീക്വൻസായിരിക്കും. മിനിബാച്ച് പല സീക്വൻസുകളും ഉൾക്കൊള്ളും, അതിനാൽ എല്ലാ സീക്വൻസുകളും സജ്ജമാക്കാൻ **padding** ഉപയോഗിക്കേണ്ടതുണ്ട്.\n",
|
||||
"\n",
|
||||
"ഡാറ്റാസെറ്റ് മാറ്റാൻ സഹായിക്കുന്ന ഫംഗ്ഷനുകൾ സൃഷ്ടിക്കാം. മിനിബാച്ച് തലത്തിൽ സീക്വൻസുകൾ പാഡ് ചെയ്യേണ്ടതിനാൽ, ആദ്യം `.batch()` വിളിച്ച് ഡാറ്റാസെറ്റ് ബാച്ച് ചെയ്യുകയും, പിന്നീട് `map` ഉപയോഗിച്ച് മാറ്റം വരുത്തുകയും ചെയ്യും. അതിനാൽ, മാറ്റം വരുത്തുന്ന ഫംഗ്ഷൻ മുഴുവൻ മിനിബാച്ച് ഒരു പാരാമീറ്ററായി സ്വീകരിക്കും:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def title_batch(x):\n",
|
||||
" x = [t.numpy().decode('utf-8') for t in x]\n",
|
||||
" z = tokenizer.texts_to_sequences(x)\n",
|
||||
" z = tf.keras.preprocessing.sequence.pad_sequences(z)\n",
|
||||
" return tf.one_hot(z,vocab_size), tf.one_hot(tf.concat([z[:,1:],tf.constant(eos_token,shape=(len(z),1))],axis=1),vocab_size)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"നാം ഇവിടെ ചെയ്യുന്ന ചില പ്രധാന കാര്യങ്ങൾ:\n",
|
||||
"* ആദ്യം സ്ട്രിംഗ് ടെൻസറിൽ നിന്ന് യഥാർത്ഥ ടെക്സ്റ്റ് എടുക്കുന്നു\n",
|
||||
"* `text_to_sequences` സ്ട്രിംഗുകളുടെ ലിസ്റ്റ് ഇന്റിജർ ടെൻസറുകളുടെ ലിസ്റ്റായി മാറ്റുന്നു\n",
|
||||
"* `pad_sequences` ആ ടെൻസറുകളെ അവരുടെ പരമാവധി നീളത്തിലേക്ക് പാഡ് ചെയ്യുന്നു\n",
|
||||
"* അവസാനം എല്ലാ അക്ഷരങ്ങളും വൺ-ഹോട്ട് എൻകോഡ് ചെയ്യുകയും, ഷിഫ്റ്റിംഗ് ചെയ്യുകയും `<eos>` ചേർക്കുകയും ചെയ്യുന്നു. വൺ-ഹോട്ട് എൻകോഡ് ചെയ്ത അക്ഷരങ്ങൾ എന്തിന് വേണ്ടിയാണെന്ന് നമുക്ക് ഉടൻ കാണാം\n",
|
||||
"\n",
|
||||
"എങ്കിലും, ഈ ഫംഗ്ഷൻ **Pythonic** ആണ്, അതായത് ഇത് സ്വയം Tensorflow കംപ്യൂട്ടേഷണൽ ഗ്രാഫിലേക്ക് മാറ്റാൻ കഴിയില്ല. ഈ ഫംഗ്ഷൻ നേരിട്ട് `Dataset.map` ഫംഗ്ഷനിൽ ഉപയോഗിക്കാൻ ശ്രമിച്ചാൽ പിശകുകൾ ഉണ്ടാകും. അതിനാൽ ഈ Pythonic കോൾ `py_function` റാപ്പർ ഉപയോഗിച്ച് ഉൾപ്പെടുത്തേണ്ടതുണ്ട്:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def title_batch_fn(x):\n",
|
||||
" x = x['title']\n",
|
||||
" a,b = tf.py_function(title_batch,inp=[x],Tout=(tf.float32,tf.float32))\n",
|
||||
" return a,b"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **കുറിപ്പ്**: Pythonic-ഉം Tensorflow ട്രാൻസ്ഫർമേഷൻ ഫങ്ഷനുകളും തമ്മിലുള്ള വ്യത്യാസം കുറച്ച് സങ്കീർണ്ണമായി തോന്നാം, കൂടാതെ dataset-നെ `fit`-ന് മുമ്പ് സാധാരണ Python ഫങ്ഷനുകൾ ഉപയോഗിച്ച് ട്രാൻസ്ഫോം ചെയ്യാത്തതെന്തുകൊണ്ടെന്ന് നിങ്ങൾ ചോദിച്ചേക്കാം. ഇത് തീർച്ചയായും ചെയ്യാവുന്നതാണ്, എന്നാൽ `Dataset.map` ഉപയോഗിക്കുന്നത് വലിയ ഗുണം നൽകുന്നു, കാരണം ഡാറ്റ ട്രാൻസ്ഫർമേഷൻ പൈപ്പ്ലൈൻ Tensorflow കംപ്യൂട്ടേഷണൽ ഗ്രാഫ് ഉപയോഗിച്ച് പ്രവർത്തിക്കുന്നു, ഇത് GPU കംപ്യൂട്ടേഷനുകളുടെ പ്രയോജനം എടുക്കുകയും CPU/GPU-വിനിടയിൽ ഡാറ്റ കൈമാറ്റം കുറയ്ക്കുകയും ചെയ്യുന്നു.\n",
|
||||
"\n",
|
||||
"ഇപ്പോൾ നാം നമ്മുടെ ജനറേറ്റർ നെറ്റ്വർക്ക് നിർമ്മിച്ച് പരിശീലനം ആരംഭിക്കാം. ഇത് മുമ്പത്തെ യൂണിറ്റിൽ ചർച്ച ചെയ്ത ഏതെങ്കിലും റിക്കറന്റ് സെല്ലിൽ അടിസ്ഥാനമാക്കാവുന്നതാണ് (സിംപിൾ, LSTM അല്ലെങ്കിൽ GRU). നമ്മുടെ ഉദാഹരണത്തിൽ LSTM ഉപയോഗിക്കും.\n",
|
||||
"\n",
|
||||
"നെറ്റ്വർക്ക് കാറക്ടറുകൾ ഇൻപുട്ടായി സ്വീകരിക്കുന്നതിനാൽ, വാക്കുകളുടെ വലുപ്പം വളരെ ചെറുതാണ്, അതിനാൽ embedding ലെയർ ആവശ്യമില്ല, one-hot-encoded ഇൻപുട്ട് നേരിട്ട് LSTM സെല്ലിലേക്ക് പോകാം. ഔട്ട്പുട്ട് ലെയർ LSTM ഔട്ട്പുട്ട് one-hot-encoded ടോക്കൺ നമ്പറുകളായി മാറ്റുന്ന `Dense` ക്ലാസിഫയർ ആയിരിക്കും.\n",
|
||||
"\n",
|
||||
"കൂടാതെ, വ്യത്യസ്ത നീളമുള്ള സീക്വൻസുകളുമായി കൈകാര്യം ചെയ്യുന്നതിനാൽ, പാഡുചെയ്ത ഭാഗം അവഗണിക്കുന്ന ഒരു മാസ്ക് സൃഷ്ടിക്കാൻ `Masking` ലെയർ ഉപയോഗിക്കാം. `<eos>` ടോക്കണിന് ശേഷം വരുന്ന എല്ലാം നമ്മൾ വളരെ ശ്രദ്ധിക്കാത്തതിനാൽ ഇത് കർശനമായി ആവശ്യമായില്ല, പക്ഷേ ഈ ലെയർ തരം ഉപയോഗിച്ച് അനുഭവം നേടുന്നതിനായി ഇത് ഉപയോഗിക്കും. `input_shape` `(None, vocab_size)` ആയിരിക്കും, ഇവിടെ `None` വ്യത്യസ്ത നീളമുള്ള സീക്വൻസിനെ സൂചിപ്പിക്കുന്നു, ഔട്ട്പുട്ട് ഷേപ്പ് `(None, vocab_size)` ആണെന്നും `summary`-ൽ കാണാം:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"sequential\"\n",
|
||||
"_________________________________________________________________\n",
|
||||
"Layer (type) Output Shape Param # \n",
|
||||
"=================================================================\n",
|
||||
"masking (Masking) (None, None, 84) 0 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"lstm (LSTM) (None, None, 128) 109056 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"dense (Dense) (None, None, 84) 10836 \n",
|
||||
"=================================================================\n",
|
||||
"Total params: 119,892\n",
|
||||
"Trainable params: 119,892\n",
|
||||
"Non-trainable params: 0\n",
|
||||
"_________________________________________________________________\n",
|
||||
"15000/15000 [==============================] - 229s 15ms/step - loss: 1.5385\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7fa40c1245e0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = keras.models.Sequential([\n",
|
||||
" keras.layers.Masking(input_shape=(None,vocab_size)),\n",
|
||||
" keras.layers.LSTM(128,return_sequences=True),\n",
|
||||
" keras.layers.Dense(vocab_size,activation='softmax')\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.summary()\n",
|
||||
"model.compile(loss='categorical_crossentropy')\n",
|
||||
"\n",
|
||||
"model.fit(ds_train.batch(8).map(title_batch_fn))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## ഔട്ട്പുട്ട് സൃഷ്ടിക്കൽ\n",
|
||||
"\n",
|
||||
"ഇപ്പോൾ മോഡൽ പരിശീലിപ്പിച്ചതിനുശേഷം, അതുപയോഗിച്ച് ചില ഔട്ട്പുട്ടുകൾ സൃഷ്ടിക്കാൻ ആഗ്രഹിക്കുന്നു. ആദ്യം, ടോക്കൺ നമ്പറുകളുടെ ശ്രേണിയാൽ പ്രതിനിധീകരിച്ച ടെക്സ്റ്റ് ഡീകോഡ് ചെയ്യാനുള്ള ഒരു മാർഗം വേണം. ഇതിന്, `tokenizer.sequences_to_texts` ഫംഗ്ഷൻ ഉപയോഗിക്കാമായിരുന്നു; എന്നാൽ, ഇത് കറക്റ്റർ-ലെവൽ ടോക്കണൈസേഷനുമായി നല്ല രീതിയിൽ പ്രവർത്തിക്കുന്നില്ല. അതിനാൽ, ടോക്കണൈസറിൽ നിന്നുള്ള ടോക്കൺ ഡിക്ഷണറി (പേര് `word_index`) എടുത്ത്, അതിന്റെ റിവേഴ്സ് മാപ്പ് നിർമ്മിച്ച്, ഞങ്ങൾ സ്വന്തം ഡീകോഡിംഗ് ഫംഗ്ഷൻ എഴുതും:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"reverse_map = {val:key for key, val in tokenizer.word_index.items()}\n",
|
||||
"\n",
|
||||
"def decode(x):\n",
|
||||
" return ''.join([reverse_map[t] for t in x])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഇപ്പോൾ, നമുക്ക് ജനറേഷൻ ചെയ്യാം. നാം ചില സ്ട്രിംഗ് `start` ഉപയോഗിച്ച് തുടങ്ങും, അതിനെ ഒരു സീക്വൻസ് `inp` ആയി എൻകോഡ് ചെയ്യും, പിന്നീട് ഓരോ ഘട്ടത്തിലും അടുത്ത അക്ഷരം പ്രവചിക്കാൻ നമ്മുടെ നെറ്റ്വർക്ക് വിളിക്കും.\n",
|
||||
"\n",
|
||||
"നെറ്റ്വർക്കിന്റെ ഔട്ട്പുട്ട് `out` എന്നത് `vocab_size` ഘടകങ്ങളുള്ള ഒരു വെക്ടറാണ്, ഓരോ ടോക്കണിന്റെയും സാധ്യതകൾ പ്രതിനിധീകരിക്കുന്നു, ഏറ്റവും സാധ്യതയുള്ള ടോക്കൺ നമ്പർ കണ്ടെത്താൻ `argmax` ഉപയോഗിക്കാം. പിന്നീട് ആ അക്ഷരം ജനറേറ്റുചെയ്ത ടോക്കൺ ലിസ്റ്റിൽ ചേർക്കുകയും, ജനറേഷൻ തുടരുകയും ചെയ്യും. ഒരു അക്ഷരം ജനറേറ്റ് ചെയ്യാനുള്ള ഈ പ്രക്രിയ `size` തവണ ആവർത്തിച്ച് ആവശ്യമായ അക്ഷരങ്ങളുടെ എണ്ണം സൃഷ്ടിക്കും, കൂടാതെ `eos_token` കണ്ടുപിടിച്ചാൽ നേരത്തെ അവസാനിപ്പിക്കും.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"'Today #39;s lead to strike for the strike for the strike for the strike (AFP)'"
|
||||
]
|
||||
},
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def generate(model,size=100,start='Today '):\n",
|
||||
" inp = tokenizer.texts_to_sequences([start])[0]\n",
|
||||
" chars = inp\n",
|
||||
" for i in range(size):\n",
|
||||
" out = model(tf.expand_dims(tf.one_hot(inp,vocab_size),0))[0][-1]\n",
|
||||
" nc = tf.argmax(out)\n",
|
||||
" if nc==eos_token:\n",
|
||||
" break\n",
|
||||
" chars.append(nc.numpy())\n",
|
||||
" inp = inp+[nc]\n",
|
||||
" return decode(chars)\n",
|
||||
" \n",
|
||||
"generate(model)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## പരിശീലനത്തിനിടെ സാമ്പിളിംഗ് ഔട്ട്പുട്ട്\n",
|
||||
"\n",
|
||||
"*ശുദ്ധത* പോലുള്ള ഉപകാരപ്രദമായ മെട്രിക്കുകൾ ഇല്ലാത്തതിനാൽ, നമ്മുടെ മോഡൽ മെച്ചപ്പെടുന്നുണ്ടെന്ന് കാണാനുള്ള ഏക മാർഗം പരിശീലനത്തിനിടെ സൃഷ്ടിച്ച സ്ട്രിംഗ് **സാമ്പിളിംഗ്** ചെയ്യലാണ്. ഇത് ചെയ്യാൻ, നാം **കോൾബാക്കുകൾ** ഉപയോഗിക്കും, അഥവാ `fit` ഫംഗ്ഷനിലേക്ക് പാസ്സ് ചെയ്യാവുന്ന, പരിശീലനത്തിനിടെ കാലക്രമേണ വിളിക്കപ്പെടുന്ന ഫംഗ്ഷനുകൾ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Epoch 1/3\n",
|
||||
"15000/15000 [==============================] - 226s 15ms/step - loss: 1.2703\n",
|
||||
"Today #39;s a lead in the company for the strike\n",
|
||||
"Epoch 2/3\n",
|
||||
"15000/15000 [==============================] - 227s 15ms/step - loss: 1.2057\n",
|
||||
"Today #39;s the Market Service on Security Start (AP)\n",
|
||||
"Epoch 3/3\n",
|
||||
"15000/15000 [==============================] - 226s 15ms/step - loss: 1.1752\n",
|
||||
"Today #39;s a line on the strike to start for the start\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7fa40c74e3d0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"sampling_callback = keras.callbacks.LambdaCallback(\n",
|
||||
" on_epoch_end = lambda batch, logs: print(generate(model))\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"model.fit(ds_train.batch(8).map(title_batch_fn),callbacks=[sampling_callback],epochs=3)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഈ ഉദാഹരണം ഇതിനകം തന്നെ നല്ലൊരു ടെക്സ്റ്റ് സൃഷ്ടിക്കുന്നു, പക്ഷേ ഇത് പലവിധത്തിൽ മെച്ചപ്പെടുത്താൻ കഴിയും:\n",
|
||||
"* **കൂടുതൽ ടെക്സ്റ്റ്**. ഞങ്ങൾ നമ്മുടെ ടാസ്കിനായി തലക്കെട്ടുകൾ മാത്രം ഉപയോഗിച്ചിട്ടുണ്ട്, പക്ഷേ നിങ്ങൾ പൂർണ്ണ ടെക്സ്റ്റുമായി പരീക്ഷണം നടത്താൻ ആഗ്രഹിക്കാം. RNN-കൾ ദീർഘമായ സീക്വൻസുകൾ കൈകാര്യം ചെയ്യുന്നതിൽ അത്ര നല്ലതല്ലെന്ന് ഓർക്കുക, അതിനാൽ അവയെ ചെറുതായുള്ള വാക്യങ്ങളായി വിഭജിക്കുക അല്ലെങ്കിൽ നിശ്ചിത നീളമുള്ള സീക്വൻസിൽ (ഉദാ., `num_chars` എന്ന മുൻകൂട്ടി നിശ്ചയിച്ച മൂല്യം, 256 പോലുള്ളത്) പരിശീലനം നടത്തുന്നത് ബുദ്ധിമുട്ടില്ല. മുകളിൽ നൽകിയ ഉദാഹരണം [അധികൃത Keras ട്യൂട്ടോറിയൽ](https://keras.io/examples/generative/lstm_character_level_text_generation/) പ്രചോദനമായി ഉപയോഗിച്ച് ഇത്തരത്തിലുള്ള ആർക്കിടെക്ചറിലേക്ക് മാറ്റാൻ ശ്രമിക്കാം.\n",
|
||||
"* **മൾട്ടിലെയർ LSTM**. 2 അല്ലെങ്കിൽ 3 ലെയറുകളുടെ LSTM സെല്ലുകൾ പരീക്ഷിക്കുന്നത് ഉചിതമാണ്. മുൻ യൂണിറ്റിൽ പറഞ്ഞതുപോലെ, ഓരോ LSTM ലെയറും ടെക്സ്റ്റിൽ നിന്നുള്ള പ്രത്യേക പാറ്റേണുകൾ എടുക്കുന്നു, കറക്റ്റർ-ലെവൽ ജനറേറ്ററിന്റെ കാര്യത്തിൽ താഴത്തെ LSTM ലെയർ സില്ലബിളുകൾ എടുക്കുന്നതിന് ഉത്തരവാദിയാകും, മുകളിലെ ലെയറുകൾ വാക്കുകളും വാക്കുകളുടെ സംയോജനങ്ങളും എടുക്കുന്നതിന്. ഇത് LSTM കൺസ്ട്രക്ടറിലേക്ക് ലെയറുകളുടെ എണ്ണം പാരാമീറ്ററായി നൽകുന്നതിലൂടെ എളുപ്പത്തിൽ നടപ്പിലാക്കാം.\n",
|
||||
"* **GRU യൂണിറ്റുകൾ** ഉപയോഗിച്ച് പരീക്ഷണം നടത്താനും ഏത് മെച്ചമാണ് എന്ന് കാണാനും, കൂടാതെ **വിവിധ ഹിഡൻ ലെയർ വലുപ്പങ്ങൾ** പരീക്ഷിക്കാനും നിങ്ങൾ ആഗ്രഹിക്കാം. വളരെ വലിയ ഹിഡൻ ലെയർ ഓവർഫിറ്റിങ്ങിന് കാരണമാകാം (ഉദാ., നെറ്റ്വർക്ക് കൃത്യമായ ടെക്സ്റ്റ് പഠിക്കും), ചെറുതായുള്ള വലുപ്പം നല്ല ഫലം നൽകാതിരിക്കാം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## സോഫ്റ്റ് ടെക്സ്റ്റ് ജനറേഷൻ ಮತ್ತು ടെംപറേച്ചർ\n",
|
||||
"\n",
|
||||
"മുൻപ് `generate` എന്ന നിർവചനത്തിൽ, നാം എപ്പോഴും ഏറ്റവും ഉയർന്ന സാധ്യതയുള്ള അക്ഷരത്തെ അടുത്ത അക്ഷരമായി എടുത്തിരുന്നു. ഇതിന്റെ ഫലമായി, ടെക്സ്റ്റ് പലപ്പോഴും ഒരേ അക്ഷരക്രമങ്ങൾ വീണ്ടും വീണ്ടും \"സൈക്ല്\" ചെയ്യുന്നതായി കണ്ടു, ഉദാഹരണത്തിന് താഴെ കാണുന്ന പോലെ:\n",
|
||||
"```\n",
|
||||
"today of the second the company and a second the company ...\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"എങ്കിലും, അടുത്ത അക്ഷരത്തിനുള്ള സാധ്യത വിതരണത്തെ നോക്കിയാൽ, ഏറ്റവും ഉയർന്ന ചില സാധ്യതകളുടെ വ്യത്യാസം വലിയതല്ലായിരിക്കാം, ഉദാഹരണത്തിന് ഒരു അക്ഷരത്തിന് 0.2 സാധ്യതയുണ്ടെങ്കിൽ, മറ്റൊന്ന് 0.19 ആയിരിക്കാം. ഉദാഹരണത്തിന് '*play*' എന്ന ക്രമത്തിൽ അടുത്ത അക്ഷരം സ്പേസ് ആകാമോ, അല്ലെങ്കിൽ **e** (പദമായ *player* ൽപോലെ) ആകാമോ എന്നത് സമാനമായ സാധ്യതയുള്ളതാണ്.\n",
|
||||
"\n",
|
||||
"ഇത് നമ്മെ ഈ നിഗമനത്തിലേക്ക് നയിക്കുന്നു: ഏറ്റവും ഉയർന്ന സാധ്യതയുള്ള അക്ഷരം തിരഞ്ഞെടുക്കുന്നത് എപ്പോഴും \"ന്യായമായ\" കാര്യമല്ല, കാരണം രണ്ടാം ഉയർന്ന സാധ്യതയുള്ളത് തിരഞ്ഞെടുക്കുന്നതും അർത്ഥവത്തായ ടെക്സ്റ്റിലേക്ക് നയിക്കാം. നെറ്റ്വർക്ക് ഔട്ട്പുട്ട് നൽകുന്ന സാധ്യത വിതരണത്തിൽ നിന്നാണ് അക്ഷരങ്ങൾ **സാമ്പിൾ** ചെയ്യുന്നത് കൂടുതൽ ബുദ്ധിമുട്ടുള്ളതും ഉചിതവുമാണ്.\n",
|
||||
"\n",
|
||||
"ഈ സാമ്പിളിംഗ് `np.multinomial` ഫംഗ്ഷൻ ഉപയോഗിച്ച് ചെയ്യാം, ഇത് **മൾട്ടിനോമിയൽ വിതരണ**ം നടപ്പിലാക്കുന്നു. താഴെ ഈ **സോഫ്റ്റ്** ടെക്സ്റ്റ് ജനറേഷൻ നടപ്പിലാക്കുന്ന ഫംഗ്ഷൻ നിർവചിച്ചിരിക്കുന്നു:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 33,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"\n",
|
||||
"--- Temperature = 0.3\n",
|
||||
"Today #39;s strike #39; to start at the store return\n",
|
||||
"On Sunday PO to Be Data Profit Up (Reuters)\n",
|
||||
"Moscow, SP wins straight to the Microsoft #39;s control of the space start\n",
|
||||
"President olding of the blast start for the strike to pay <b>...</b>\n",
|
||||
"Little red riding hood ficed to the spam countered in European <b>...</b>\n",
|
||||
"\n",
|
||||
"--- Temperature = 0.8\n",
|
||||
"Today countie strikes ryder missile faces food market blut\n",
|
||||
"On Sunday collores lose-toppy of sale of Bullment in <b>...</b>\n",
|
||||
"Moscow, IBM Diffeiting in Afghan Software Hotels (Reuters)\n",
|
||||
"President Ol Luster for Profit Peaced Raised (AP)\n",
|
||||
"Little red riding hood dace on depart talks #39; bank up\n",
|
||||
"\n",
|
||||
"--- Temperature = 1.0\n",
|
||||
"Today wits House buiting debate fixes #39; supervice stake again\n",
|
||||
"On Sunday arling digital poaching In for level\n",
|
||||
"Moscow, DS Up 7, Top Proble Protest Caprey Mamarian Strike\n",
|
||||
"President teps help of roubler stepted lessabul-Dhalitics (AFP)\n",
|
||||
"Little red riding hood signs on cash in Carter-youb\n",
|
||||
"\n",
|
||||
"--- Temperature = 1.3\n",
|
||||
"Today wits flawer ro, pSIA figat's co DroftwavesIs Talo up\n",
|
||||
"On Sunday hround elitwing wint EU Powerburlinetien\n",
|
||||
"Moscow, Bazz #39;s sentries olymen winnelds' next for Olympite Huc?\n",
|
||||
"President lost securitys from power Elections in Smiltrials\n",
|
||||
"Little red riding hood vides profit, exponituity, profitmainalist-at said listers\n",
|
||||
"\n",
|
||||
"--- Temperature = 1.8\n",
|
||||
"Today #39;It: He deat: N.KA Asside\n",
|
||||
"On Sunday i arry Par aldeup patient Wo stele1\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"ename": "KeyError",
|
||||
"evalue": "0",
|
||||
"output_type": "error",
|
||||
"traceback": [
|
||||
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
||||
"\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
|
||||
"\u001b[0;32m<ipython-input-33-db32367a0feb>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"\\n--- Temperature = {i}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mj\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgenerate_soft\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0msize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m300\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mstart\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mwords\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mj\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mtemperature\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
|
||||
"\u001b[0;32m<ipython-input-33-db32367a0feb>\u001b[0m in \u001b[0;36mgenerate_soft\u001b[0;34m(model, size, start, temperature)\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0mchars\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0minp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minp\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mnc\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 13\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mdecode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mchars\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 14\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0mwords\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'Today '\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'On Sunday '\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'Moscow, '\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'President '\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'Little red riding hood '\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
||||
"\u001b[0;32m<ipython-input-10-3f5fa6130b1d>\u001b[0m in \u001b[0;36mdecode\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdecode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0;34m''\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mreverse_map\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mt\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
|
||||
"\u001b[0;32m<ipython-input-10-3f5fa6130b1d>\u001b[0m in \u001b[0;36m<listcomp>\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdecode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0;34m''\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mreverse_map\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mt\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
|
||||
"\u001b[0;31mKeyError\u001b[0m: 0"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def generate_soft(model,size=100,start='Today ',temperature=1.0):\n",
|
||||
" inp = tokenizer.texts_to_sequences([start])[0]\n",
|
||||
" chars = inp\n",
|
||||
" for i in range(size):\n",
|
||||
" out = model(tf.expand_dims(tf.one_hot(inp,vocab_size),0))[0][-1]\n",
|
||||
" probs = tf.exp(tf.math.log(out)/temperature).numpy().astype(np.float64)\n",
|
||||
" probs = probs/np.sum(probs)\n",
|
||||
" nc = np.argmax(np.random.multinomial(1,probs,1))\n",
|
||||
" if nc==eos_token:\n",
|
||||
" break\n",
|
||||
" chars.append(nc)\n",
|
||||
" inp = inp+[nc]\n",
|
||||
" return decode(chars)\n",
|
||||
"\n",
|
||||
"words = ['Today ','On Sunday ','Moscow, ','President ','Little red riding hood ']\n",
|
||||
" \n",
|
||||
"for i in [0.3,0.8,1.0,1.3,1.8]:\n",
|
||||
" print(f\"\\n--- Temperature = {i}\")\n",
|
||||
" for j in range(5):\n",
|
||||
" print(generate_soft(model,size=300,start=words[j],temperature=i))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"നാം **temperature** എന്ന ഒരു പുതിയ പാരാമീറ്റർ പരിചയപ്പെടുത്തി, ഇത് ഏറ്റവും ഉയർന്ന സാധ്യതയോട് എത്രമാത്രം കർശനമായി പാലിക്കണമെന്ന് സൂചിപ്പിക്കാൻ ഉപയോഗിക്കുന്നു. temperature 1.0 ആണെങ്കിൽ, നാം ശരാശരി മൾട്ടിനോമിയൽ സാമ്പ്ലിംഗ് നടത്തുന്നു, temperature അനന്തതയിലേക്ക് പോകുമ്പോൾ - എല്ലാ സാധ്യതകളും സമാനമാകുന്നു, പിന്നെ നാം യാദൃച്ഛികമായി അടുത്ത അക്ഷരം തിരഞ്ഞെടുക്കുന്നു. താഴെ കൊടുത്ത ഉദാഹരണത്തിൽ temperature വളരെ കൂടുമ്പോൾ വാചകം അർത്ഥരഹിതമാകുന്നത് കാണാം, കൂടാതെ അത് 0-ന് അടുത്ത് പോകുമ്പോൾ \"cycled\" കർശനമായി സൃഷ്ടിച്ച വാചകത്തെപ്പോലെ തോന്നുന്നു.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**അസൂയാ**: \nഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.12 ('py38')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.8.12"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "9fbb7d5fda708537649f71f5f646fcde",
|
||||
"translation_date": "2025-11-26T02:16:28+00:00",
|
||||
"source_file": "lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.ipynb",
|
||||
"language_code": "ml"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
|
|
@ -1,93 +1,93 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "51be6057374d01d70e07dd5ec88ebc0d",
|
||||
"translation_date": "2025-11-25T23:06:27+00:00",
|
||||
"source_file": "lessons/5-NLP/17-GenerativeNetworks/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ജനറേറ്റീവ് നെറ്റ്വർക്കുകൾ
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/33)
|
||||
|
||||
റികറന്റ് ന്യൂറൽ നെറ്റ്വർക്കുകൾ (RNNs) കൂടാതെ ലോങ് ഷോർട്ട് ടേം മെമ്മറി സെല്ലുകൾ (LSTMs) പോലുള്ള ഗേറ്റഡ് സെൽ വകഭേദങ്ങളും ഗേറ്റഡ് റികറന്റ് യൂണിറ്റുകളും (GRUs) വാക്കുകളുടെ ക്രമീകരണം പഠിക്കുകയും ഒരു സീക്വൻസിലെ അടുത്ത വാക്ക് പ്രവചിക്കുകയും ചെയ്യാൻ സഹായിക്കുന്ന ഭാഷാ മോഡലിംഗിന് ഒരു സംവിധാനം നൽകി. ഇതുവഴി, സാധാരണ ടെക്സ്റ്റ് ജനറേഷൻ, മെഷീൻ ട്രാൻസ്ലേഷൻ, ഇമേജ് ക്യാപ്ഷനിംഗ് പോലുള്ള **ജനറേറ്റീവ് ടാസ്കുകൾ**ക്കായി RNNs ഉപയോഗിക്കാം.
|
||||
|
||||
> ✅ നിങ്ങൾ ടൈപ്പ് ചെയ്യുമ്പോൾ ടെക്സ്റ്റ് പൂർത്തീകരണം പോലുള്ള ജനറേറ്റീവ് ടാസ്കുകളിൽ എത്രത്തോളം പ്രയോജനം ലഭിച്ചതെന്ന് ചിന്തിക്കുക. നിങ്ങളുടെ പ്രിയപ്പെട്ട ആപ്ലിക്കേഷനുകൾ RNNs ഉപയോഗിച്ചിട്ടുണ്ടോ എന്ന് അന്വേഷിക്കുക.
|
||||
|
||||
മുൻ യൂണിറ്റിൽ ചർച്ച ചെയ്ത RNN ആർക്കിടെക്ചറിൽ, ഓരോ RNN യൂണിറ്റും അടുത്ത ഹിഡൻ സ്റ്റേറ്റ് ഔട്ട്പുട്ടായി ഉത്പാദിപ്പിച്ചിരുന്നു. എന്നാൽ, ഓരോ റികറന്റ് യൂണിറ്റിനും മറ്റൊരു ഔട്ട്പുട്ട് കൂടി ചേർക്കാം, ഇത് ഒരു **സീക്വൻസ്** (മൂല സീക്വൻസിന്റെ നീളത്തിന് തുല്യമായ) ഔട്ട്പുട്ട് നൽകാൻ സഹായിക്കും. കൂടാതെ, ഓരോ ഘട്ടത്തിലും ഇൻപുട്ട് സ്വീകരിക്കാത്ത RNN യൂണിറ്റുകൾ ഉപയോഗിച്ച്, ഒരു പ്രാരംഭ സ്റ്റേറ്റ് വെക്ടർ എടുത്ത്, തുടർന്ന് ഔട്ട്പുട്ടുകളുടെ ഒരു സീക്വൻസ് ഉത്പാദിപ്പിക്കാം.
|
||||
|
||||
ഇത് താഴെ കാണുന്ന ചിത്രത്തിൽ കാണുന്ന വ്യത്യസ്ത ന്യൂറൽ ആർക്കിടെക്ചറുകൾക്ക് വഴിയൊരുക്കുന്നു:
|
||||
|
||||

|
||||
|
||||
> [Andrej Karpaty](http://karpathy.github.io/) എഴുതിയ [Unreasonable Effectiveness of Recurrent Neural Networks](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) എന്ന ബ്ലോഗ് പോസ്റ്റിൽ നിന്നുള്ള ചിത്രം
|
||||
|
||||
* **ഒന്ന്-തൊട്ട്-ഒന്ന്** എന്നത് ഒരു പരമ്പരാഗത ന്യൂറൽ നെറ്റ്വർക്കാണ്, ഒരു ഇൻപുട്ടും ഒരു ഔട്ട്പുട്ടും ഉള്ളത്
|
||||
* **ഒന്ന്-തൊട്ട്-അനേകം** എന്നത് ഒരു ജനറേറ്റീവ് ആർക്കിടെക്ചറാണ്, ഒരു ഇൻപുട്ട് മൂല്യം സ്വീകരിച്ച് ഔട്ട്പുട്ടുകളുടെ ഒരു സീക്വൻസ് ഉത്പാദിപ്പിക്കുന്നു. ഉദാഹരണത്തിന്, ഒരു **ഇമേജ് ക്യാപ്ഷനിംഗ്** നെറ്റ്വർക്ക് പരിശീലിപ്പിക്കാൻ, ഒരു ചിത്രം ഇൻപുട്ടായി എടുത്ത്, അതിന്റെ ഹിഡൻ സ്റ്റേറ്റ് ലഭിക്കാൻ CNN വഴി കടത്തുകയും, തുടർന്ന് റികറന്റ് ചെയിൻ ഓരോ വാക്കും ഉത്പാദിപ്പിക്കുകയും ചെയ്യാം
|
||||
* **അനേകം-തൊട്ട്-ഒന്ന്** മുൻ യൂണിറ്റിൽ വിവരണം ചെയ്ത RNN ആർക്കിടെക്ചറുകളുമായി പൊരുത്തപ്പെടുന്നു, ഉദാഹരണത്തിന് ടെക്സ്റ്റ് ക്ലാസിഫിക്കേഷൻ
|
||||
* **അനേകം-തൊട്ട്-അനേകം**, അല്ലെങ്കിൽ **സീക്വൻസ്-തൊട്ട്-സീക്വൻസ്** മെഷീൻ ട്രാൻസ്ലേഷൻ പോലുള്ള ടാസ്കുകൾക്കാണ്, ഇവിടെ ആദ്യ RNN ഇൻപുട്ട് സീക്വൻസിലെ എല്ലാ വിവരവും ഹിഡൻ സ്റ്റേറ്റിലേക്ക് ശേഖരിക്കുകയും, മറ്റൊരു RNN ചെയിൻ ഈ സ്റ്റേറ്റ് ഔട്ട്പുട്ട് സീക്വൻസായി അനറോൾ ചെയ്യുകയും ചെയ്യുന്നു.
|
||||
|
||||
ഈ യൂണിറ്റിൽ, നാം ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യാൻ സഹായിക്കുന്ന ലളിതമായ ജനറേറ്റീവ് മോഡലുകളിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കും. ലളിതത്വത്തിനായി, നാം കറക്റ്റർ-ലെവൽ ടോക്കനൈസേഷൻ ഉപയോഗിക്കും.
|
||||
|
||||
നാം ഈ RNN ഓരോ ഘട്ടത്തിലും ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യാൻ പരിശീലിപ്പിക്കും. ഓരോ ഘട്ടത്തിലും, നീളം `nchars` ഉള്ള കറക്റ്ററുകളുടെ ഒരു സീക്വൻസ് എടുത്ത്, ഓരോ ഇൻപുട്ട് കറക്റ്ററിനും അടുത്ത ഔട്ട്പുട്ട് കറക്റ്റർ ജനറേറ്റ് ചെയ്യാൻ നെറ്റ്വർക്കിനെ ചോദിക്കും:
|
||||
|
||||

|
||||
|
||||
ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യുമ്പോൾ (ഇൻഫറൻസ് സമയത്ത്), നാം ഒരു **പ്രോംപ്റ്റ്** ഉപയോഗിച്ച് തുടങ്ങുന്നു, അത് RNN സെല്ലുകൾ വഴി കടന്നുപോകുന്നു, ഇടക്കാല സ്റ്റേറ്റ് ഉത്പാദിപ്പിക്കുന്നു, തുടർന്ന് ആ സ്റ്റേറ്റിൽ നിന്നാണ് ജനറേഷൻ ആരംഭിക്കുന്നത്. ഓരോ കറക്റ്ററും ഒറ്റത്തവണയായി ജനറേറ്റ് ചെയ്ത്, സ്റ്റേറ്റ് കൂടാതെ ജനറേറ്റ് ചെയ്ത കറക്റ്റർ മറ്റൊരു RNN സെലിലേക്ക് നൽകുന്നു, അടുത്തത് ജനറേറ്റ് ചെയ്യാൻ, ആവശ്യമായ കറക്റ്ററുകൾ വരെ തുടരും.
|
||||
|
||||
<img src="../../../../../translated_images/rnn-generate-inf.5168dc65e0370eeab36f83885ba6b5bf56265698de5ddbd8648dc3653e1f0b9b.ml.png" width="60%"/>
|
||||
|
||||
> എഴുത്തുകാരന്റെ ചിത്രം
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: ജനറേറ്റീവ് നെറ്റ്വർക്കുകൾ
|
||||
|
||||
താഴെ കൊടുത്തിരിക്കുന്ന നോട്ട്ബുക്കുകളിൽ നിങ്ങളുടെ പഠനം തുടരുക:
|
||||
|
||||
* [PyTorch ഉപയോഗിച്ച് ജനറേറ്റീവ് നെറ്റ്വർക്കുകൾ](GenerativePyTorch.ipynb)
|
||||
* [TensorFlow ഉപയോഗിച്ച് ജനറേറ്റീവ് നെറ്റ്വർക്കുകൾ](GenerativeTF.ipynb)
|
||||
|
||||
## സോഫ്റ്റ് ടെക്സ്റ്റ് ജനറേഷൻ & ടെംപറേച്ചർ
|
||||
|
||||
ഓരോ RNN സെല്ലിന്റെ ഔട്ട്പുട്ട് കറക്റ്ററുകളുടെ പ്രൊബബിലിറ്റി വിതരണമാണ്. എപ്പോഴും ഏറ്റവും ഉയർന്ന പ്രൊബബിലിറ്റിയുള്ള കറക്റ്റർ അടുത്തതായി തിരഞ്ഞെടുക്കുകയാണെങ്കിൽ, ടെക്സ്റ്റ് പലപ്പോഴും ഒരേ കറക്റ്റർ സീക്വൻസുകൾ ആവർത്തിച്ച് "സൈക്ലിംഗ്" ആകാം, താഴെ കാണുന്ന ഉദാഹരണത്തിൽപോലെ:
|
||||
|
||||
```
|
||||
today of the second the company and a second the company ...
|
||||
```
|
||||
|
||||
|
||||
എങ്കിലും, അടുത്ത കറക്റ്ററിന്റെ പ്രൊബബിലിറ്റി വിതരണത്തിൽ, ഏറ്റവും ഉയർന്ന ചില പ്രൊബബിലിറ്റികൾ തമ്മിലുള്ള വ്യത്യാസം വലിയതല്ല, ഉദാഹരണത്തിന് ഒരു കറക്റ്ററിന് 0.2 പ്രൊബബിലിറ്റി ഉണ്ടെങ്കിൽ, മറ്റൊന്നിന് 0.19 ഉണ്ടാകാം. ഉദാഹരണത്തിന് '*play*' എന്ന സീക്വൻസിൽ അടുത്ത കറക്റ്റർ സ്പേസ് ആകാമോ, അല്ലെങ്കിൽ **e** (പ്ലെയർ എന്ന വാക്കിൽപോലെ) ആകാമോ എന്നത് സമാനമായ സാധ്യതയുണ്ട്.
|
||||
|
||||
ഇത് നമ്മെ നയിക്കുന്നത്, ഏറ്റവും ഉയർന്ന പ്രൊബബിലിറ്റിയുള്ള കറക്റ്റർ തിരഞ്ഞെടുക്കുന്നത് എല്ലായ്പ്പോഴും "ന്യായമായ" കാര്യമല്ല എന്നതിലേക്കാണ്, കാരണം രണ്ടാം ഉയർന്ന പ്രൊബബിലിറ്റിയുള്ളത് തിരഞ്ഞെടുക്കുന്നതും അർത്ഥവത്തായ ടെക്സ്റ്റിലേക്ക് നയിക്കാം. നെറ്റ്വർക്ക് ഔട്ട്പുട്ട് നൽകുന്ന പ്രൊബബിലിറ്റി വിതരണത്തിൽ നിന്ന് **സാമ്പിൾ** ചെയ്യുന്നത് കൂടുതൽ ബുദ്ധിമുട്ടുള്ളതാണ്. കൂടാതെ, **ടെംപറേച്ചർ** എന്ന പാരാമീറ്റർ ഉപയോഗിച്ച്, കൂടുതൽ റാൻഡംസ് ചേർക്കാൻ പ്രൊബബിലിറ്റി വിതരണത്തെ തളർച്ചയാക്കാം, അല്ലെങ്കിൽ ഏറ്റവും ഉയർന്ന പ്രൊബബിലിറ്റി ഉള്ള കറക്റ്ററുകളിൽ കൂടുതൽ ഉറച്ചുനിൽക്കാൻ അതിനെ കൂടുതൽ കൂറ്റൻ ആക്കാം.
|
||||
|
||||
മുകളിൽ നൽകിയ നോട്ട്ബുക്കുകളിൽ ഈ സോഫ്റ്റ് ടെക്സ്റ്റ് ജനറേഷൻ എങ്ങനെ നടപ്പിലാക്കുന്നുവെന്ന് പരിശോധിക്കുക.
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ടെക്സ്റ്റ് ജനറേഷൻ സ്വയം പ്രയോജനകരമായിരിക്കാം, എന്നാൽ പ്രധാന ഗുണം RNNs ഉപയോഗിച്ച് ഏതെങ്കിലും പ്രാരംഭ ഫീച്ചർ വെക്ടറിൽ നിന്ന് ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യാനുള്ള കഴിവിലാണ്. ഉദാഹരണത്തിന്, മെഷീൻ ട്രാൻസ്ലേഷനിൽ (സീക്വൻസ്-തൊട്ട്-സീക്വൻസ്, ഈ സാഹചര്യത്തിൽ *എൻകോഡർ* നിന്നുള്ള സ്റ്റേറ്റ് വെക്ടർ ഉപയോഗിച്ച് വിവർത്തനം ചെയ്ത സന്ദേശം *ഡീകോഡ്* ചെയ്യുന്നു), അല്ലെങ്കിൽ ഒരു ചിത്രത്തിന്റെ ടെക്സ്റ്റ്വൽ വിവരണം ജനറേറ്റ് ചെയ്യുന്നതിൽ (ഇവിടെ ഫീച്ചർ വെക്ടർ CNN എക്സ്ട്രാക്ടറിൽ നിന്നാണ് വരുന്നത്) ടെക്സ്റ്റ് ജനറേഷൻ ഉപയോഗിക്കുന്നു.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
ഈ വിഷയത്തിൽ Microsoft Learn-ൽ ചില പാഠങ്ങൾ സ്വീകരിക്കുക
|
||||
|
||||
* [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/6-generative-networks/?WT.mc_id=academic-77998-cacaste)/[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/5-generative-networks/?WT.mc_id=academic-77998-cacaste) ഉപയോഗിച്ച് ടെക്സ്റ്റ് ജനറേഷൻ
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/34)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
നിങ്ങളുടെ അറിവ് വിപുലീകരിക്കാൻ ചില ലേഖനങ്ങൾ:
|
||||
|
||||
* Markov Chain, LSTM, GPT-2 ഉപയോഗിച്ച് ടെക്സ്റ്റ് ജനറേഷനിലെ വ്യത്യസ്ത സമീപനങ്ങൾ: [ബ്ലോഗ് പോസ്റ്റ്](https://towardsdatascience.com/text-generation-gpt-2-lstm-markov-chain-9ea371820e1e)
|
||||
* [Keras ഡോക്യുമെന്റേഷനിൽ](https://keras.io/examples/generative/lstm_character_level_text_generation/) ടെക്സ്റ്റ് ജനറേഷൻ സാമ്പിൾ
|
||||
|
||||
## [അസൈൻമെന്റ്](lab/README.md)
|
||||
|
||||
നാം കറക്റ്റർ-തൊട്ട്-കറക്റ്റർ ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യുന്നത് കണ്ടു. ലാബിൽ, നിങ്ങൾ വാക്ക്-തൊട്ട്-വാക്ക് ടെക്സ്റ്റ് ജനറേഷൻ പരിശോധിക്കും.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "51be6057374d01d70e07dd5ec88ebc0d",
|
||||
"translation_date": "2025-11-25T23:06:27+00:00",
|
||||
"source_file": "lessons/5-NLP/17-GenerativeNetworks/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ജനറേറ്റീവ് നെറ്റ്വർക്കുകൾ
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/33)
|
||||
|
||||
റികറന്റ് ന്യൂറൽ നെറ്റ്വർക്കുകൾ (RNNs) കൂടാതെ ലോങ് ഷോർട്ട് ടേം മെമ്മറി സെല്ലുകൾ (LSTMs) പോലുള്ള ഗേറ്റഡ് സെൽ വകഭേദങ്ങളും ഗേറ്റഡ് റികറന്റ് യൂണിറ്റുകളും (GRUs) വാക്കുകളുടെ ക്രമീകരണം പഠിക്കുകയും ഒരു സീക്വൻസിലെ അടുത്ത വാക്ക് പ്രവചിക്കുകയും ചെയ്യാൻ സഹായിക്കുന്ന ഭാഷാ മോഡലിംഗിന് ഒരു സംവിധാനം നൽകി. ഇതുവഴി, സാധാരണ ടെക്സ്റ്റ് ജനറേഷൻ, മെഷീൻ ട്രാൻസ്ലേഷൻ, ഇമേജ് ക്യാപ്ഷനിംഗ് പോലുള്ള **ജനറേറ്റീവ് ടാസ്കുകൾ**ക്കായി RNNs ഉപയോഗിക്കാം.
|
||||
|
||||
> ✅ നിങ്ങൾ ടൈപ്പ് ചെയ്യുമ്പോൾ ടെക്സ്റ്റ് പൂർത്തീകരണം പോലുള്ള ജനറേറ്റീവ് ടാസ്കുകളിൽ എത്രത്തോളം പ്രയോജനം ലഭിച്ചതെന്ന് ചിന്തിക്കുക. നിങ്ങളുടെ പ്രിയപ്പെട്ട ആപ്ലിക്കേഷനുകൾ RNNs ഉപയോഗിച്ചിട്ടുണ്ടോ എന്ന് അന്വേഷിക്കുക.
|
||||
|
||||
മുൻ യൂണിറ്റിൽ ചർച്ച ചെയ്ത RNN ആർക്കിടെക്ചറിൽ, ഓരോ RNN യൂണിറ്റും അടുത്ത ഹിഡൻ സ്റ്റേറ്റ് ഔട്ട്പുട്ടായി ഉത്പാദിപ്പിച്ചിരുന്നു. എന്നാൽ, ഓരോ റികറന്റ് യൂണിറ്റിനും മറ്റൊരു ഔട്ട്പുട്ട് കൂടി ചേർക്കാം, ഇത് ഒരു **സീക്വൻസ്** (മൂല സീക്വൻസിന്റെ നീളത്തിന് തുല്യമായ) ഔട്ട്പുട്ട് നൽകാൻ സഹായിക്കും. കൂടാതെ, ഓരോ ഘട്ടത്തിലും ഇൻപുട്ട് സ്വീകരിക്കാത്ത RNN യൂണിറ്റുകൾ ഉപയോഗിച്ച്, ഒരു പ്രാരംഭ സ്റ്റേറ്റ് വെക്ടർ എടുത്ത്, തുടർന്ന് ഔട്ട്പുട്ടുകളുടെ ഒരു സീക്വൻസ് ഉത്പാദിപ്പിക്കാം.
|
||||
|
||||
ഇത് താഴെ കാണുന്ന ചിത്രത്തിൽ കാണുന്ന വ്യത്യസ്ത ന്യൂറൽ ആർക്കിടെക്ചറുകൾക്ക് വഴിയൊരുക്കുന്നു:
|
||||
|
||||

|
||||
|
||||
> [Andrej Karpaty](http://karpathy.github.io/) എഴുതിയ [Unreasonable Effectiveness of Recurrent Neural Networks](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) എന്ന ബ്ലോഗ് പോസ്റ്റിൽ നിന്നുള്ള ചിത്രം
|
||||
|
||||
* **ഒന്ന്-തൊട്ട്-ഒന്ന്** എന്നത് ഒരു പരമ്പരാഗത ന്യൂറൽ നെറ്റ്വർക്കാണ്, ഒരു ഇൻപുട്ടും ഒരു ഔട്ട്പുട്ടും ഉള്ളത്
|
||||
* **ഒന്ന്-തൊട്ട്-അനേകം** എന്നത് ഒരു ജനറേറ്റീവ് ആർക്കിടെക്ചറാണ്, ഒരു ഇൻപുട്ട് മൂല്യം സ്വീകരിച്ച് ഔട്ട്പുട്ടുകളുടെ ഒരു സീക്വൻസ് ഉത്പാദിപ്പിക്കുന്നു. ഉദാഹരണത്തിന്, ഒരു **ഇമേജ് ക്യാപ്ഷനിംഗ്** നെറ്റ്വർക്ക് പരിശീലിപ്പിക്കാൻ, ഒരു ചിത്രം ഇൻപുട്ടായി എടുത്ത്, അതിന്റെ ഹിഡൻ സ്റ്റേറ്റ് ലഭിക്കാൻ CNN വഴി കടത്തുകയും, തുടർന്ന് റികറന്റ് ചെയിൻ ഓരോ വാക്കും ഉത്പാദിപ്പിക്കുകയും ചെയ്യാം
|
||||
* **അനേകം-തൊട്ട്-ഒന്ന്** മുൻ യൂണിറ്റിൽ വിവരണം ചെയ്ത RNN ആർക്കിടെക്ചറുകളുമായി പൊരുത്തപ്പെടുന്നു, ഉദാഹരണത്തിന് ടെക്സ്റ്റ് ക്ലാസിഫിക്കേഷൻ
|
||||
* **അനേകം-തൊട്ട്-അനേകം**, അല്ലെങ്കിൽ **സീക്വൻസ്-തൊട്ട്-സീക്വൻസ്** മെഷീൻ ട്രാൻസ്ലേഷൻ പോലുള്ള ടാസ്കുകൾക്കാണ്, ഇവിടെ ആദ്യ RNN ഇൻപുട്ട് സീക്വൻസിലെ എല്ലാ വിവരവും ഹിഡൻ സ്റ്റേറ്റിലേക്ക് ശേഖരിക്കുകയും, മറ്റൊരു RNN ചെയിൻ ഈ സ്റ്റേറ്റ് ഔട്ട്പുട്ട് സീക്വൻസായി അനറോൾ ചെയ്യുകയും ചെയ്യുന്നു.
|
||||
|
||||
ഈ യൂണിറ്റിൽ, നാം ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യാൻ സഹായിക്കുന്ന ലളിതമായ ജനറേറ്റീവ് മോഡലുകളിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കും. ലളിതത്വത്തിനായി, നാം കറക്റ്റർ-ലെവൽ ടോക്കനൈസേഷൻ ഉപയോഗിക്കും.
|
||||
|
||||
നാം ഈ RNN ഓരോ ഘട്ടത്തിലും ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യാൻ പരിശീലിപ്പിക്കും. ഓരോ ഘട്ടത്തിലും, നീളം `nchars` ഉള്ള കറക്റ്ററുകളുടെ ഒരു സീക്വൻസ് എടുത്ത്, ഓരോ ഇൻപുട്ട് കറക്റ്ററിനും അടുത്ത ഔട്ട്പുട്ട് കറക്റ്റർ ജനറേറ്റ് ചെയ്യാൻ നെറ്റ്വർക്കിനെ ചോദിക്കും:
|
||||
|
||||

|
||||
|
||||
ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യുമ്പോൾ (ഇൻഫറൻസ് സമയത്ത്), നാം ഒരു **പ്രോംപ്റ്റ്** ഉപയോഗിച്ച് തുടങ്ങുന്നു, അത് RNN സെല്ലുകൾ വഴി കടന്നുപോകുന്നു, ഇടക്കാല സ്റ്റേറ്റ് ഉത്പാദിപ്പിക്കുന്നു, തുടർന്ന് ആ സ്റ്റേറ്റിൽ നിന്നാണ് ജനറേഷൻ ആരംഭിക്കുന്നത്. ഓരോ കറക്റ്ററും ഒറ്റത്തവണയായി ജനറേറ്റ് ചെയ്ത്, സ്റ്റേറ്റ് കൂടാതെ ജനറേറ്റ് ചെയ്ത കറക്റ്റർ മറ്റൊരു RNN സെലിലേക്ക് നൽകുന്നു, അടുത്തത് ജനറേറ്റ് ചെയ്യാൻ, ആവശ്യമായ കറക്റ്ററുകൾ വരെ തുടരും.
|
||||
|
||||
<img src="../../../../../translated_images/rnn-generate-inf.5168dc65e0370eea.ml.png" width="60%"/>
|
||||
|
||||
> എഴുത്തുകാരന്റെ ചിത്രം
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: ജനറേറ്റീവ് നെറ്റ്വർക്കുകൾ
|
||||
|
||||
താഴെ കൊടുത്തിരിക്കുന്ന നോട്ട്ബുക്കുകളിൽ നിങ്ങളുടെ പഠനം തുടരുക:
|
||||
|
||||
* [PyTorch ഉപയോഗിച്ച് ജനറേറ്റീവ് നെറ്റ്വർക്കുകൾ](GenerativePyTorch.ipynb)
|
||||
* [TensorFlow ഉപയോഗിച്ച് ജനറേറ്റീവ് നെറ്റ്വർക്കുകൾ](GenerativeTF.ipynb)
|
||||
|
||||
## സോഫ്റ്റ് ടെക്സ്റ്റ് ജനറേഷൻ & ടെംപറേച്ചർ
|
||||
|
||||
ഓരോ RNN സെല്ലിന്റെ ഔട്ട്പുട്ട് കറക്റ്ററുകളുടെ പ്രൊബബിലിറ്റി വിതരണമാണ്. എപ്പോഴും ഏറ്റവും ഉയർന്ന പ്രൊബബിലിറ്റിയുള്ള കറക്റ്റർ അടുത്തതായി തിരഞ്ഞെടുക്കുകയാണെങ്കിൽ, ടെക്സ്റ്റ് പലപ്പോഴും ഒരേ കറക്റ്റർ സീക്വൻസുകൾ ആവർത്തിച്ച് "സൈക്ലിംഗ്" ആകാം, താഴെ കാണുന്ന ഉദാഹരണത്തിൽപോലെ:
|
||||
|
||||
```
|
||||
today of the second the company and a second the company ...
|
||||
```
|
||||
|
||||
|
||||
എങ്കിലും, അടുത്ത കറക്റ്ററിന്റെ പ്രൊബബിലിറ്റി വിതരണത്തിൽ, ഏറ്റവും ഉയർന്ന ചില പ്രൊബബിലിറ്റികൾ തമ്മിലുള്ള വ്യത്യാസം വലിയതല്ല, ഉദാഹരണത്തിന് ഒരു കറക്റ്ററിന് 0.2 പ്രൊബബിലിറ്റി ഉണ്ടെങ്കിൽ, മറ്റൊന്നിന് 0.19 ഉണ്ടാകാം. ഉദാഹരണത്തിന് '*play*' എന്ന സീക്വൻസിൽ അടുത്ത കറക്റ്റർ സ്പേസ് ആകാമോ, അല്ലെങ്കിൽ **e** (പ്ലെയർ എന്ന വാക്കിൽപോലെ) ആകാമോ എന്നത് സമാനമായ സാധ്യതയുണ്ട്.
|
||||
|
||||
ഇത് നമ്മെ നയിക്കുന്നത്, ഏറ്റവും ഉയർന്ന പ്രൊബബിലിറ്റിയുള്ള കറക്റ്റർ തിരഞ്ഞെടുക്കുന്നത് എല്ലായ്പ്പോഴും "ന്യായമായ" കാര്യമല്ല എന്നതിലേക്കാണ്, കാരണം രണ്ടാം ഉയർന്ന പ്രൊബബിലിറ്റിയുള്ളത് തിരഞ്ഞെടുക്കുന്നതും അർത്ഥവത്തായ ടെക്സ്റ്റിലേക്ക് നയിക്കാം. നെറ്റ്വർക്ക് ഔട്ട്പുട്ട് നൽകുന്ന പ്രൊബബിലിറ്റി വിതരണത്തിൽ നിന്ന് **സാമ്പിൾ** ചെയ്യുന്നത് കൂടുതൽ ബുദ്ധിമുട്ടുള്ളതാണ്. കൂടാതെ, **ടെംപറേച്ചർ** എന്ന പാരാമീറ്റർ ഉപയോഗിച്ച്, കൂടുതൽ റാൻഡംസ് ചേർക്കാൻ പ്രൊബബിലിറ്റി വിതരണത്തെ തളർച്ചയാക്കാം, അല്ലെങ്കിൽ ഏറ്റവും ഉയർന്ന പ്രൊബബിലിറ്റി ഉള്ള കറക്റ്ററുകളിൽ കൂടുതൽ ഉറച്ചുനിൽക്കാൻ അതിനെ കൂടുതൽ കൂറ്റൻ ആക്കാം.
|
||||
|
||||
മുകളിൽ നൽകിയ നോട്ട്ബുക്കുകളിൽ ഈ സോഫ്റ്റ് ടെക്സ്റ്റ് ജനറേഷൻ എങ്ങനെ നടപ്പിലാക്കുന്നുവെന്ന് പരിശോധിക്കുക.
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ടെക്സ്റ്റ് ജനറേഷൻ സ്വയം പ്രയോജനകരമായിരിക്കാം, എന്നാൽ പ്രധാന ഗുണം RNNs ഉപയോഗിച്ച് ഏതെങ്കിലും പ്രാരംഭ ഫീച്ചർ വെക്ടറിൽ നിന്ന് ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യാനുള്ള കഴിവിലാണ്. ഉദാഹരണത്തിന്, മെഷീൻ ട്രാൻസ്ലേഷനിൽ (സീക്വൻസ്-തൊട്ട്-സീക്വൻസ്, ഈ സാഹചര്യത്തിൽ *എൻകോഡർ* നിന്നുള്ള സ്റ്റേറ്റ് വെക്ടർ ഉപയോഗിച്ച് വിവർത്തനം ചെയ്ത സന്ദേശം *ഡീകോഡ്* ചെയ്യുന്നു), അല്ലെങ്കിൽ ഒരു ചിത്രത്തിന്റെ ടെക്സ്റ്റ്വൽ വിവരണം ജനറേറ്റ് ചെയ്യുന്നതിൽ (ഇവിടെ ഫീച്ചർ വെക്ടർ CNN എക്സ്ട്രാക്ടറിൽ നിന്നാണ് വരുന്നത്) ടെക്സ്റ്റ് ജനറേഷൻ ഉപയോഗിക്കുന്നു.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
ഈ വിഷയത്തിൽ Microsoft Learn-ൽ ചില പാഠങ്ങൾ സ്വീകരിക്കുക
|
||||
|
||||
* [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/6-generative-networks/?WT.mc_id=academic-77998-cacaste)/[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/5-generative-networks/?WT.mc_id=academic-77998-cacaste) ഉപയോഗിച്ച് ടെക്സ്റ്റ് ജനറേഷൻ
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/34)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
നിങ്ങളുടെ അറിവ് വിപുലീകരിക്കാൻ ചില ലേഖനങ്ങൾ:
|
||||
|
||||
* Markov Chain, LSTM, GPT-2 ഉപയോഗിച്ച് ടെക്സ്റ്റ് ജനറേഷനിലെ വ്യത്യസ്ത സമീപനങ്ങൾ: [ബ്ലോഗ് പോസ്റ്റ്](https://towardsdatascience.com/text-generation-gpt-2-lstm-markov-chain-9ea371820e1e)
|
||||
* [Keras ഡോക്യുമെന്റേഷനിൽ](https://keras.io/examples/generative/lstm_character_level_text_generation/) ടെക്സ്റ്റ് ജനറേഷൻ സാമ്പിൾ
|
||||
|
||||
## [അസൈൻമെന്റ്](lab/README.md)
|
||||
|
||||
നാം കറക്റ്റർ-തൊട്ട്-കറക്റ്റർ ടെക്സ്റ്റ് ജനറേറ്റ് ചെയ്യുന്നത് കണ്ടു. ലാബിൽ, നിങ്ങൾ വാക്ക്-തൊട്ട്-വാക്ക് ടെക്സ്റ്റ് ജനറേഷൻ പരിശോധിക്കും.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,125 +1,125 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "f335dfcb4a993920504c387973a36957",
|
||||
"translation_date": "2025-11-25T23:12:38+00:00",
|
||||
"source_file": "lessons/5-NLP/18-Transformers/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ശ്രദ്ധാ യന്ത്രങ്ങളും ട്രാൻസ്ഫോർമറുകളും
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/35)
|
||||
|
||||
NLP മേഖലയിലെ ഏറ്റവും പ്രധാനപ്പെട്ട പ്രശ്നങ്ങളിൽ ഒന്നാണ് **മെഷീൻ ട്രാൻസ്ലേഷൻ**, ഗൂഗിൾ ട്രാൻസ്ലേറ്റ് പോലുള്ള ഉപകരണങ്ങളുടെ അടിസ്ഥാനമായ ഒരു അനിവാര്യമായ ജോലി. ഈ ഭാഗത്തിൽ, മെഷീൻ ട്രാൻസ്ലേഷനിൽ അല്ലെങ്കിൽ പൊതുവായി ഏതെങ്കിലും *sequence-to-sequence* ജോലിയിൽ (അത് **sentence transduction** എന്നും വിളിക്കുന്നു) ശ്രദ്ധ കേന്ദ്രീകരിക്കും.
|
||||
|
||||
RNN-കളിൽ, sequence-to-sequence രണ്ട് റിക്കറന്റ് നെറ്റ്വർക്കുകൾ ഉപയോഗിച്ച് നടപ്പിലാക്കുന്നു, അവയിൽ ഒരു നെറ്റ്വർക്ക്, **എൻകോഡർ**, ഇൻപുട്ട് സീക്വൻസിനെ ഒരു ഹിഡൻ സ്റ്റേറ്റിലേക്ക് ചുരുക്കുന്നു, മറ്റൊരു നെറ്റ്വർക്ക്, **ഡീകോഡർ**, ഈ ഹിഡൻ സ്റ്റേറ്റ് ഒരു വിവർത്തന ഫലമായി തുറക്കുന്നു. ഈ സമീപനത്തിൽ ചില പ്രശ്നങ്ങളുണ്ട്:
|
||||
|
||||
* എൻകോഡർ നെറ്റ്വർക്ക് അവസാന സ്റ്റേറ്റ് ഒരു വാചകത്തിന്റെ തുടക്കം ഓർക്കാൻ ബുദ്ധിമുട്ട് അനുഭവപ്പെടുന്നു, അതിനാൽ ദീർഘവാചകങ്ങൾക്ക് മോഡലിന്റെ ഗുണമേന്മ കുറയുന്നു
|
||||
* ഒരു സീക്വൻസിലെ എല്ലാ വാക്കുകൾക്കും ഫലത്തിൽ ഒരുപോലെ സ്വാധീനം ഉണ്ടാകുന്നു. എന്നാൽ യാഥാർത്ഥ്യത്തിൽ, ഇൻപുട്ടിലെ ചില വാക്കുകൾ തുടർച്ചയായ ഔട്ട്പുട്ടുകളിൽ മറ്റുള്ളവയെക്കാൾ കൂടുതൽ സ്വാധീനം ചെലുത്താറുണ്ട്.
|
||||
|
||||
**ശ്രദ്ധാ യന്ത്രങ്ങൾ** RNN-ന്റെ ഓരോ ഔട്ട്പുട്ട് പ്രവചനത്തിലും ഓരോ ഇൻപുട്ട് വെക്ടറിന്റെ സാന്ദർഭിക സ്വാധീനം തൂക്കത്തോടെ നൽകാനുള്ള മാർഗമാണ്. ഇത് നടപ്പിലാക്കുന്നത് ഇൻപുട്ട് RNN-ന്റെ ഇടനില സ്റ്റേറ്റുകളും ഔട്ട്പുട്ട് RNN-ന്റെ ഇടനില സ്റ്റേറ്റുകളും തമ്മിൽ ഷോർട്ട്കട്ടുകൾ സൃഷ്ടിച്ച് ആണ്. ഈ രീതിയിൽ, ഔട്ട്പുട്ട് ചിഹ്നം y<sub>t</sub> സൃഷ്ടിക്കുമ്പോൾ, എല്ലാ ഇൻപുട്ട് ഹിഡൻ സ്റ്റേറ്റുകളും h<sub>i</sub> വ്യത്യസ്ത തൂക്കം കോഫിഷ്യന്റുകളായ α<sub>t,i</sub> ഉപയോഗിച്ച് പരിഗണിക്കും.
|
||||
|
||||

|
||||
|
||||
> [Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) ലെ അഡിറ്റീവ് ശ്രദ്ധാ യന്ത്രം ഉൾപ്പെടുത്തിയ എൻകോഡർ-ഡീകോഡർ മോഡൽ, [ഈ ബ്ലോഗ് പോസ്റ്റ്](https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html) നിന്നുള്ള ഉദ്ധരണം
|
||||
|
||||
ശ്രദ്ധാ മാട്രിക്സ് {α<sub>i,j</sub>} ഒരു ഔട്ട്പുട്ട് വാക്കിന്റെ സൃഷ്ടിയിൽ ചില ഇൻപുട്ട് വാക്കുകൾ എത്രമാത്രം പങ്കുവഹിക്കുന്നുവെന്ന് പ്രതിനിധീകരിക്കും. താഴെ ഒരു ഉദാഹരണ മാട്രിക്സ് കാണിക്കുന്നു:
|
||||
|
||||

|
||||
|
||||
> [Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) (ചിത്രം 3)
|
||||
|
||||
ശ്രദ്ധാ യന്ത്രങ്ങൾ NLP-യിലെ നിലവിലെ അല്ലെങ്കിൽ അടുത്തകാലത്തെ ഏറ്റവും മികച്ച നിലവാരത്തിന് വലിയ പങ്ക് വഹിക്കുന്നു. എന്നാൽ ശ്രദ്ധ ചേർക്കുന്നത് മോഡൽ പാരാമീറ്ററുകളുടെ എണ്ണം വളരെ വർദ്ധിപ്പിക്കുന്നു, ഇത് RNN-കളിൽ സ്കെയിലിംഗ് പ്രശ്നങ്ങൾ സൃഷ്ടിച്ചു. RNN-കളുടെ സ്കെയിലിംഗിന്റെ പ്രധാന തടസ്സം മോഡലുകളുടെ റിക്കറന്റ് സ്വഭാവം കാരണം ട്രെയിനിംഗ് ബാച്ച് ചെയ്യാനും പാരലലൈസ് ചെയ്യാനും ബുദ്ധിമുട്ട് ഉണ്ടാകുകയാണ്. RNN-യിൽ ഒരു സീക്വൻസിലെ ഓരോ ഘടകവും ക്രമത്തിൽ പ്രോസസ്സ് ചെയ്യേണ്ടതുണ്ടെന്നത് പാരലലൈസേഷൻ എളുപ്പമല്ല.
|
||||
|
||||

|
||||
|
||||
> [Google Blog](https://research.googleblog.com/2016/09/a-neural-network-for-machine.html) നിന്നുള്ള ചിത്രം
|
||||
|
||||
ശ്രദ്ധാ യന്ത്രങ്ങളുടെ സ്വീകരണവും ഈ തടസ്സവും ചേർന്ന് ഇന്ന് നാം അറിയുന്ന BERT മുതൽ Open-GPT3 വരെ ഉള്ള സ്റ്റേറ്റ് ഓഫ് ദി ആർട്ട് ട്രാൻസ്ഫോർമർ മോഡലുകളുടെ സൃഷ്ടിക്ക് വഴിതെളിച്ചു.
|
||||
|
||||
## ട്രാൻസ്ഫോർമർ മോഡലുകൾ
|
||||
|
||||
ട്രാൻസ്ഫോർമറുകളുടെ പ്രധാന ആശയങ്ങളിൽ ഒന്നാണ് RNN-കളുടെ ക്രമാനുസൃത സ്വഭാവം ഒഴിവാക്കി ട്രെയിനിംഗിനിടെ പാരലലൈസബിൾ ആയ മോഡൽ സൃഷ്ടിക്കുക. ഇത് രണ്ട് ആശയങ്ങൾ നടപ്പിലാക്കിയാണ് സാധിക്കുന്നത്:
|
||||
|
||||
* പൊസിഷണൽ എൻകോഡിംഗ്
|
||||
* RNN-കളുടെ (അല്ലെങ്കിൽ CNN-കളുടെ) പകരം പാറ്റേണുകൾ പിടിക്കാൻ സെൽഫ്-അറ്റൻഷൻ മെക്കാനിസം ഉപയോഗിക്കൽ (അതിനാൽ ട്രാൻസ്ഫോർമറുകൾ പരിചയപ്പെടുത്തുന്ന പേപ്പർ *[Attention is all you need](https://arxiv.org/abs/1706.03762)* എന്നാണ് വിളിക്കുന്നത്)
|
||||
|
||||
### പൊസിഷണൽ എൻകോഡിംഗ്/എംബെഡിംഗ്
|
||||
|
||||
പൊസിഷണൽ എൻകോഡിംഗിന്റെ ആശയം ഇപ്രകാരം ആണ്:
|
||||
1. RNN-കൾ ഉപയോഗിക്കുമ്പോൾ, ടോക്കണുകളുടെ സാപേക്ഷ സ്ഥാനം ഘട്ടങ്ങളുടെ എണ്ണം കൊണ്ട് പ്രതിനിധീകരിക്കപ്പെടുന്നു, അതിനാൽ അത് വ്യക്തമായി പ്രതിനിധീകരിക്കേണ്ടതില്ല.
|
||||
2. എന്നാൽ ശ്രദ്ധയിലേക്ക് മാറുമ്പോൾ, സീക്വൻസിലെ ടോക്കണുകളുടെ സാപേക്ഷ സ്ഥാനങ്ങൾ അറിയേണ്ടതുണ്ട്.
|
||||
3. പൊസിഷണൽ എൻകോഡിംഗ് നേടാൻ, ടോക്കണുകളുടെ സീക്വൻസിന് കൂടെ ടോക്കൺ സ്ഥാനങ്ങളുടെ സീക്വൻസും (0,1, ...) ചേർക്കുന്നു.
|
||||
4. പിന്നീട് ടോക്കൺ സ്ഥാനത്തെ ടോക്കൺ എംബെഡിംഗ് വെക്ടറുമായി മിശ്രിതമാക്കുന്നു. സ്ഥാനത്തെ (പൂർണ്ണസംഖ്യ) വെക്ടറാക്കി മാറ്റാൻ വിവിധ സമീപനങ്ങൾ ഉപയോഗിക്കാം:
|
||||
|
||||
* ടോക്കൺ എംബെഡിംഗിനോട് സമാനമായ ട്രെയിനബിൾ എംബെഡിംഗ്. ഇതാണ് ഇവിടെ പരിഗണിക്കുന്നത്. ടോക്കണുകൾക്കും അവരുടെ സ്ഥാനങ്ങൾക്കും എംബെഡിംഗ് ലെയറുകൾ പ്രയോഗിച്ച് ഒരേ ഡൈമെൻഷനിലുള്ള എംബെഡിംഗ് വെക്ടറുകൾ ലഭിച്ച് അവ ചേർക്കുന്നു.
|
||||
* ഒറിജിനൽ പേപ്പറിൽ നിർദ്ദേശിച്ച സ്ഥിരം പൊസിഷൻ എൻകോഡിംഗ് ഫംഗ്ഷൻ.
|
||||
|
||||
<img src="../../../../../translated_images/pos-embedding.e41ce9b6cf6078afd28da02f27e33ac7026ed4c156491df7ad9aa96be7c194bb.ml.png" width="50%"/>
|
||||
|
||||
> എഴുത്തുകാരന്റെ ചിത്രം
|
||||
|
||||
പൊസിഷണൽ എംബെഡിംഗ് ഉപയോഗിച്ച് ലഭിക്കുന്ന ഫലം ഒരു സീക്വൻസിലെ ടോക്കണും അതിന്റെ സ്ഥാനം രണ്ടും എംബെഡ് ചെയ്യുന്നു.
|
||||
|
||||
### മൾട്ടി-ഹെഡ് സെൽഫ്-അറ്റൻഷൻ
|
||||
|
||||
അടുത്തത്, സീക്വൻസിനുള്ളിൽ ചില പാറ്റേണുകൾ പിടിക്കേണ്ടതാണ്. ഇതിന് ട്രാൻസ്ഫോർമറുകൾ **സെൽഫ്-അറ്റൻഷൻ** മെക്കാനിസം ഉപയോഗിക്കുന്നു, അതായത് ഇൻപുട്ടും ഔട്ട്പുട്ടും ഒരേ സീക്വൻസായാണ് ശ്രദ്ധ പ്രയോഗിക്കുന്നത്. സെൽഫ്-അറ്റൻഷൻ ഉപയോഗിച്ച് വാചകത്തിലെ **സന്ദർഭം** പരിഗണിക്കാനും വാക്കുകൾ തമ്മിലുള്ള ബന്ധം കാണാനും കഴിയും. ഉദാഹരണത്തിന്, *it* പോലുള്ള കോറഫറൻസുകൾ ഏത് വാക്കുകളെ സൂചിപ്പിക്കുന്നു എന്ന് കാണാനും, കൂടാതെ സന്ദർഭം പരിഗണിക്കാനും ഇത് സഹായിക്കുന്നു:
|
||||
|
||||

|
||||
|
||||
> [Google Blog](https://research.googleblog.com/2017/08/transformer-novel-neural-network.html) നിന്നുള്ള ചിത്രം
|
||||
|
||||
ട്രാൻസ്ഫോർമറുകളിൽ, **മൾട്ടി-ഹെഡ് അറ്റൻഷൻ** ഉപയോഗിക്കുന്നു, ഇത് നെറ്റ്വർക്കിന് വിവിധ തരം ആശ്രിതത്വങ്ങൾ പിടിക്കാൻ കഴിവ് നൽകുന്നു, ഉദാ: ദീർഘകാലവും ചെറുകാലവും വാക്കുകളുടെ ബന്ധങ്ങൾ, കോറഫറൻസ് മുതലായവ.
|
||||
|
||||
[TensorFlow Notebook](TransformersTF.ipynb) ട്രാൻസ്ഫോർമർ ലെയറുകളുടെ നടപ്പാക്കലിനെക്കുറിച്ച് കൂടുതൽ വിശദാംശങ്ങൾ ഉൾക്കൊള്ളുന്നു.
|
||||
|
||||
### എൻകോഡർ-ഡീകോഡർ ശ്രദ്ധ
|
||||
|
||||
ട്രാൻസ്ഫോർമറുകളിൽ, ശ്രദ്ധ രണ്ട് സ്ഥലങ്ങളിൽ ഉപയോഗിക്കുന്നു:
|
||||
|
||||
* ഇൻപുട്ട് ടെക്സ്റ്റിലെ പാറ്റേണുകൾ പിടിക്കാൻ സെൽഫ്-അറ്റൻഷൻ ഉപയോഗിച്ച്
|
||||
* സീക്വൻസ് വിവർത്തനം നടത്താൻ - എൻകോഡറും ഡീകോഡറും തമ്മിലുള്ള ശ്രദ്ധ ലെയർ.
|
||||
|
||||
എൻകോഡർ-ഡീകോഡർ ശ്രദ്ധ RNN-കളിൽ ഉപയോഗിക്കുന്ന ശ്രദ്ധാ യന്ത്രത്തോട് വളരെ സമാനമാണ്, ഈ ഭാഗത്തിന്റെ തുടക്കത്തിൽ വിവരിച്ചതുപോലെ. ഈ അനിമേറ്റഡ് ഡയഗ്രാം എൻകോഡർ-ഡീകോഡർ ശ്രദ്ധയുടെ പങ്ക് വിശദീകരിക്കുന്നു.
|
||||
|
||||

|
||||
|
||||
ഓരോ ഇൻപുട്ട് സ്ഥാനം സ്വതന്ത്രമായി ഓരോ ഔട്ട്പുട്ട് സ്ഥാനത്തേക്കും മാപ്പ് ചെയ്യപ്പെടുന്നതിനാൽ, ട്രാൻസ്ഫോർമറുകൾ RNN-കളേക്കാൾ മികച്ച പാരലലൈസേഷൻ സാധ്യമാക്കുന്നു, ഇത് വലിയതും കൂടുതൽ പ്രകടനശേഷിയുള്ള ഭാഷാ മോഡലുകൾ സൃഷ്ടിക്കാൻ സഹായിക്കുന്നു. ഓരോ അറ്റൻഷൻ ഹെഡും വാക്കുകൾ തമ്മിലുള്ള വ്യത്യസ്ത ബന്ധങ്ങൾ പഠിക്കാൻ ഉപയോഗിക്കാം, ഇത് NLP ജോലികൾ മെച്ചപ്പെടുത്തുന്നു.
|
||||
|
||||
## BERT
|
||||
|
||||
**BERT** (Bidirectional Encoder Representations from Transformers) വളരെ വലിയ 12 ലെയർ *BERT-base* ഉം 24 ലെയർ *BERT-large* ഉം ഉള്ള മൾട്ടി-ലെയർ ട്രാൻസ്ഫോർമർ നെറ്റ്വർക്ക് ആണ്. മോഡൽ ആദ്യം വലിയ ടെക്സ്റ്റ് കോർപ്പസിൽ (വിക്കിപീഡിയ + പുസ്തകങ്ങൾ) അൺസൂപ്പർവൈസ്ഡ് ട്രെയിനിംഗിലൂടെ (വാചകത്തിലെ മറച്ചുവച്ച വാക്കുകൾ പ്രവചിച്ച്) പ്രീ-ട്രെയിൻ ചെയ്യപ്പെടുന്നു. പ്രീ-ട്രെയിനിംഗിൽ മോഡൽ ഭാഷാ ബോധം ഗഹനമായി ഉൾക്കൊള്ളുന്നു, പിന്നീട് ഫൈൻ ട്യൂണിങ്ങ് വഴി മറ്റ് ഡാറ്റാസെറ്റുകളുമായി ഉപയോഗിക്കാം. ഈ പ്രക്രിയ **ട്രാൻസ്ഫർ ലേണിംഗ്** എന്ന് വിളിക്കുന്നു.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [മൂലം](http://jalammar.github.io/illustrated-bert/)
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: ട്രാൻസ്ഫോർമറുകൾ
|
||||
|
||||
താഴെ കൊടുത്തിരിക്കുന്ന നോട്ട്ബുക്കുകളിൽ നിങ്ങളുടെ പഠനം തുടരുക:
|
||||
|
||||
* [PyTorch-ൽ ട്രാൻസ്ഫോർമറുകൾ](TransformersPyTorch.ipynb)
|
||||
* [TensorFlow-ൽ ട്രാൻസ്ഫോർമറുകൾ](TransformersTF.ipynb)
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ഈ പാഠത്തിൽ നിങ്ങൾ ട്രാൻസ്ഫോർമറുകളും ശ്രദ്ധാ യന്ത്രങ്ങളും പഠിച്ചു, NLP ടൂൾബോക്സിലെ അനിവാര്യ ഉപകരണങ്ങൾ. BERT, DistilBERT, BigBird, OpenGPT3 തുടങ്ങിയ നിരവധി ട്രാൻസ്ഫോർമർ ആർക്കിടെക്ചറുകളുടെ വ്യത്യാസങ്ങൾ ഉണ്ട്, അവ ഫൈൻ ട്യൂൺ ചെയ്യാവുന്നതാണ്. [HuggingFace പാക്കേജ്](https://github.com/huggingface/) PyTorch, TensorFlow എന്നിവയിൽ ഈ ആർക്കിടെക്ചറികൾ പരിശീലിപ്പിക്കാൻ റിപോസിറ്ററികൾ നൽകുന്നു.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/36)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
* [ബ്ലോഗ് പോസ്റ്റ്](https://mchromiak.github.io/articles/2017/Sep/12/Transformer-Attention-is-all-you-need/), ക്ലാസിക്കൽ [Attention is all you need](https://arxiv.org/abs/1706.03762) പേപ്പർ ട്രാൻസ്ഫോർമറുകൾ വിശദീകരിക്കുന്നു.
|
||||
* [ട്രാൻസ്ഫോർമറുകൾ വിശദീകരിക്കുന്ന ബ്ലോഗ് പോസ്റ്റുകളുടെ ഒരു പരമ്പര](https://towardsdatascience.com/transformers-explained-visually-part-1-overview-of-functionality-95a6dd460452), ആർക്കിടെക്ചർ വിശദമായി വിശദീകരിക്കുന്നു.
|
||||
|
||||
## [അസൈൻമെന്റ്](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് പരിഗണിക്കേണ്ടതാണ്. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "f335dfcb4a993920504c387973a36957",
|
||||
"translation_date": "2025-11-25T23:12:38+00:00",
|
||||
"source_file": "lessons/5-NLP/18-Transformers/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ശ്രദ്ധാ യന്ത്രങ്ങളും ട്രാൻസ്ഫോർമറുകളും
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/35)
|
||||
|
||||
NLP മേഖലയിലെ ഏറ്റവും പ്രധാനപ്പെട്ട പ്രശ്നങ്ങളിൽ ഒന്നാണ് **മെഷീൻ ട്രാൻസ്ലേഷൻ**, ഗൂഗിൾ ട്രാൻസ്ലേറ്റ് പോലുള്ള ഉപകരണങ്ങളുടെ അടിസ്ഥാനമായ ഒരു അനിവാര്യമായ ജോലി. ഈ ഭാഗത്തിൽ, മെഷീൻ ട്രാൻസ്ലേഷനിൽ അല്ലെങ്കിൽ പൊതുവായി ഏതെങ്കിലും *sequence-to-sequence* ജോലിയിൽ (അത് **sentence transduction** എന്നും വിളിക്കുന്നു) ശ്രദ്ധ കേന്ദ്രീകരിക്കും.
|
||||
|
||||
RNN-കളിൽ, sequence-to-sequence രണ്ട് റിക്കറന്റ് നെറ്റ്വർക്കുകൾ ഉപയോഗിച്ച് നടപ്പിലാക്കുന്നു, അവയിൽ ഒരു നെറ്റ്വർക്ക്, **എൻകോഡർ**, ഇൻപുട്ട് സീക്വൻസിനെ ഒരു ഹിഡൻ സ്റ്റേറ്റിലേക്ക് ചുരുക്കുന്നു, മറ്റൊരു നെറ്റ്വർക്ക്, **ഡീകോഡർ**, ഈ ഹിഡൻ സ്റ്റേറ്റ് ഒരു വിവർത്തന ഫലമായി തുറക്കുന്നു. ഈ സമീപനത്തിൽ ചില പ്രശ്നങ്ങളുണ്ട്:
|
||||
|
||||
* എൻകോഡർ നെറ്റ്വർക്ക് അവസാന സ്റ്റേറ്റ് ഒരു വാചകത്തിന്റെ തുടക്കം ഓർക്കാൻ ബുദ്ധിമുട്ട് അനുഭവപ്പെടുന്നു, അതിനാൽ ദീർഘവാചകങ്ങൾക്ക് മോഡലിന്റെ ഗുണമേന്മ കുറയുന്നു
|
||||
* ഒരു സീക്വൻസിലെ എല്ലാ വാക്കുകൾക്കും ഫലത്തിൽ ഒരുപോലെ സ്വാധീനം ഉണ്ടാകുന്നു. എന്നാൽ യാഥാർത്ഥ്യത്തിൽ, ഇൻപുട്ടിലെ ചില വാക്കുകൾ തുടർച്ചയായ ഔട്ട്പുട്ടുകളിൽ മറ്റുള്ളവയെക്കാൾ കൂടുതൽ സ്വാധീനം ചെലുത്താറുണ്ട്.
|
||||
|
||||
**ശ്രദ്ധാ യന്ത്രങ്ങൾ** RNN-ന്റെ ഓരോ ഔട്ട്പുട്ട് പ്രവചനത്തിലും ഓരോ ഇൻപുട്ട് വെക്ടറിന്റെ സാന്ദർഭിക സ്വാധീനം തൂക്കത്തോടെ നൽകാനുള്ള മാർഗമാണ്. ഇത് നടപ്പിലാക്കുന്നത് ഇൻപുട്ട് RNN-ന്റെ ഇടനില സ്റ്റേറ്റുകളും ഔട്ട്പുട്ട് RNN-ന്റെ ഇടനില സ്റ്റേറ്റുകളും തമ്മിൽ ഷോർട്ട്കട്ടുകൾ സൃഷ്ടിച്ച് ആണ്. ഈ രീതിയിൽ, ഔട്ട്പുട്ട് ചിഹ്നം y<sub>t</sub> സൃഷ്ടിക്കുമ്പോൾ, എല്ലാ ഇൻപുട്ട് ഹിഡൻ സ്റ്റേറ്റുകളും h<sub>i</sub> വ്യത്യസ്ത തൂക്കം കോഫിഷ്യന്റുകളായ α<sub>t,i</sub> ഉപയോഗിച്ച് പരിഗണിക്കും.
|
||||
|
||||

|
||||
|
||||
> [Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) ലെ അഡിറ്റീവ് ശ്രദ്ധാ യന്ത്രം ഉൾപ്പെടുത്തിയ എൻകോഡർ-ഡീകോഡർ മോഡൽ, [ഈ ബ്ലോഗ് പോസ്റ്റ്](https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html) നിന്നുള്ള ഉദ്ധരണം
|
||||
|
||||
ശ്രദ്ധാ മാട്രിക്സ് {α<sub>i,j</sub>} ഒരു ഔട്ട്പുട്ട് വാക്കിന്റെ സൃഷ്ടിയിൽ ചില ഇൻപുട്ട് വാക്കുകൾ എത്രമാത്രം പങ്കുവഹിക്കുന്നുവെന്ന് പ്രതിനിധീകരിക്കും. താഴെ ഒരു ഉദാഹരണ മാട്രിക്സ് കാണിക്കുന്നു:
|
||||
|
||||

|
||||
|
||||
> [Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) (ചിത്രം 3)
|
||||
|
||||
ശ്രദ്ധാ യന്ത്രങ്ങൾ NLP-യിലെ നിലവിലെ അല്ലെങ്കിൽ അടുത്തകാലത്തെ ഏറ്റവും മികച്ച നിലവാരത്തിന് വലിയ പങ്ക് വഹിക്കുന്നു. എന്നാൽ ശ്രദ്ധ ചേർക്കുന്നത് മോഡൽ പാരാമീറ്ററുകളുടെ എണ്ണം വളരെ വർദ്ധിപ്പിക്കുന്നു, ഇത് RNN-കളിൽ സ്കെയിലിംഗ് പ്രശ്നങ്ങൾ സൃഷ്ടിച്ചു. RNN-കളുടെ സ്കെയിലിംഗിന്റെ പ്രധാന തടസ്സം മോഡലുകളുടെ റിക്കറന്റ് സ്വഭാവം കാരണം ട്രെയിനിംഗ് ബാച്ച് ചെയ്യാനും പാരലലൈസ് ചെയ്യാനും ബുദ്ധിമുട്ട് ഉണ്ടാകുകയാണ്. RNN-യിൽ ഒരു സീക്വൻസിലെ ഓരോ ഘടകവും ക്രമത്തിൽ പ്രോസസ്സ് ചെയ്യേണ്ടതുണ്ടെന്നത് പാരലലൈസേഷൻ എളുപ്പമല്ല.
|
||||
|
||||

|
||||
|
||||
> [Google Blog](https://research.googleblog.com/2016/09/a-neural-network-for-machine.html) നിന്നുള്ള ചിത്രം
|
||||
|
||||
ശ്രദ്ധാ യന്ത്രങ്ങളുടെ സ്വീകരണവും ഈ തടസ്സവും ചേർന്ന് ഇന്ന് നാം അറിയുന്ന BERT മുതൽ Open-GPT3 വരെ ഉള്ള സ്റ്റേറ്റ് ഓഫ് ദി ആർട്ട് ട്രാൻസ്ഫോർമർ മോഡലുകളുടെ സൃഷ്ടിക്ക് വഴിതെളിച്ചു.
|
||||
|
||||
## ട്രാൻസ്ഫോർമർ മോഡലുകൾ
|
||||
|
||||
ട്രാൻസ്ഫോർമറുകളുടെ പ്രധാന ആശയങ്ങളിൽ ഒന്നാണ് RNN-കളുടെ ക്രമാനുസൃത സ്വഭാവം ഒഴിവാക്കി ട്രെയിനിംഗിനിടെ പാരലലൈസബിൾ ആയ മോഡൽ സൃഷ്ടിക്കുക. ഇത് രണ്ട് ആശയങ്ങൾ നടപ്പിലാക്കിയാണ് സാധിക്കുന്നത്:
|
||||
|
||||
* പൊസിഷണൽ എൻകോഡിംഗ്
|
||||
* RNN-കളുടെ (അല്ലെങ്കിൽ CNN-കളുടെ) പകരം പാറ്റേണുകൾ പിടിക്കാൻ സെൽഫ്-അറ്റൻഷൻ മെക്കാനിസം ഉപയോഗിക്കൽ (അതിനാൽ ട്രാൻസ്ഫോർമറുകൾ പരിചയപ്പെടുത്തുന്ന പേപ്പർ *[Attention is all you need](https://arxiv.org/abs/1706.03762)* എന്നാണ് വിളിക്കുന്നത്)
|
||||
|
||||
### പൊസിഷണൽ എൻകോഡിംഗ്/എംബെഡിംഗ്
|
||||
|
||||
പൊസിഷണൽ എൻകോഡിംഗിന്റെ ആശയം ഇപ്രകാരം ആണ്:
|
||||
1. RNN-കൾ ഉപയോഗിക്കുമ്പോൾ, ടോക്കണുകളുടെ സാപേക്ഷ സ്ഥാനം ഘട്ടങ്ങളുടെ എണ്ണം കൊണ്ട് പ്രതിനിധീകരിക്കപ്പെടുന്നു, അതിനാൽ അത് വ്യക്തമായി പ്രതിനിധീകരിക്കേണ്ടതില്ല.
|
||||
2. എന്നാൽ ശ്രദ്ധയിലേക്ക് മാറുമ്പോൾ, സീക്വൻസിലെ ടോക്കണുകളുടെ സാപേക്ഷ സ്ഥാനങ്ങൾ അറിയേണ്ടതുണ്ട്.
|
||||
3. പൊസിഷണൽ എൻകോഡിംഗ് നേടാൻ, ടോക്കണുകളുടെ സീക്വൻസിന് കൂടെ ടോക്കൺ സ്ഥാനങ്ങളുടെ സീക്വൻസും (0,1, ...) ചേർക്കുന്നു.
|
||||
4. പിന്നീട് ടോക്കൺ സ്ഥാനത്തെ ടോക്കൺ എംബെഡിംഗ് വെക്ടറുമായി മിശ്രിതമാക്കുന്നു. സ്ഥാനത്തെ (പൂർണ്ണസംഖ്യ) വെക്ടറാക്കി മാറ്റാൻ വിവിധ സമീപനങ്ങൾ ഉപയോഗിക്കാം:
|
||||
|
||||
* ടോക്കൺ എംബെഡിംഗിനോട് സമാനമായ ട്രെയിനബിൾ എംബെഡിംഗ്. ഇതാണ് ഇവിടെ പരിഗണിക്കുന്നത്. ടോക്കണുകൾക്കും അവരുടെ സ്ഥാനങ്ങൾക്കും എംബെഡിംഗ് ലെയറുകൾ പ്രയോഗിച്ച് ഒരേ ഡൈമെൻഷനിലുള്ള എംബെഡിംഗ് വെക്ടറുകൾ ലഭിച്ച് അവ ചേർക്കുന്നു.
|
||||
* ഒറിജിനൽ പേപ്പറിൽ നിർദ്ദേശിച്ച സ്ഥിരം പൊസിഷൻ എൻകോഡിംഗ് ഫംഗ്ഷൻ.
|
||||
|
||||
<img src="../../../../../translated_images/pos-embedding.e41ce9b6cf6078af.ml.png" width="50%"/>
|
||||
|
||||
> എഴുത്തുകാരന്റെ ചിത്രം
|
||||
|
||||
പൊസിഷണൽ എംബെഡിംഗ് ഉപയോഗിച്ച് ലഭിക്കുന്ന ഫലം ഒരു സീക്വൻസിലെ ടോക്കണും അതിന്റെ സ്ഥാനം രണ്ടും എംബെഡ് ചെയ്യുന്നു.
|
||||
|
||||
### മൾട്ടി-ഹെഡ് സെൽഫ്-അറ്റൻഷൻ
|
||||
|
||||
അടുത്തത്, സീക്വൻസിനുള്ളിൽ ചില പാറ്റേണുകൾ പിടിക്കേണ്ടതാണ്. ഇതിന് ട്രാൻസ്ഫോർമറുകൾ **സെൽഫ്-അറ്റൻഷൻ** മെക്കാനിസം ഉപയോഗിക്കുന്നു, അതായത് ഇൻപുട്ടും ഔട്ട്പുട്ടും ഒരേ സീക്വൻസായാണ് ശ്രദ്ധ പ്രയോഗിക്കുന്നത്. സെൽഫ്-അറ്റൻഷൻ ഉപയോഗിച്ച് വാചകത്തിലെ **സന്ദർഭം** പരിഗണിക്കാനും വാക്കുകൾ തമ്മിലുള്ള ബന്ധം കാണാനും കഴിയും. ഉദാഹരണത്തിന്, *it* പോലുള്ള കോറഫറൻസുകൾ ഏത് വാക്കുകളെ സൂചിപ്പിക്കുന്നു എന്ന് കാണാനും, കൂടാതെ സന്ദർഭം പരിഗണിക്കാനും ഇത് സഹായിക്കുന്നു:
|
||||
|
||||

|
||||
|
||||
> [Google Blog](https://research.googleblog.com/2017/08/transformer-novel-neural-network.html) നിന്നുള്ള ചിത്രം
|
||||
|
||||
ട്രാൻസ്ഫോർമറുകളിൽ, **മൾട്ടി-ഹെഡ് അറ്റൻഷൻ** ഉപയോഗിക്കുന്നു, ഇത് നെറ്റ്വർക്കിന് വിവിധ തരം ആശ്രിതത്വങ്ങൾ പിടിക്കാൻ കഴിവ് നൽകുന്നു, ഉദാ: ദീർഘകാലവും ചെറുകാലവും വാക്കുകളുടെ ബന്ധങ്ങൾ, കോറഫറൻസ് മുതലായവ.
|
||||
|
||||
[TensorFlow Notebook](TransformersTF.ipynb) ട്രാൻസ്ഫോർമർ ലെയറുകളുടെ നടപ്പാക്കലിനെക്കുറിച്ച് കൂടുതൽ വിശദാംശങ്ങൾ ഉൾക്കൊള്ളുന്നു.
|
||||
|
||||
### എൻകോഡർ-ഡീകോഡർ ശ്രദ്ധ
|
||||
|
||||
ട്രാൻസ്ഫോർമറുകളിൽ, ശ്രദ്ധ രണ്ട് സ്ഥലങ്ങളിൽ ഉപയോഗിക്കുന്നു:
|
||||
|
||||
* ഇൻപുട്ട് ടെക്സ്റ്റിലെ പാറ്റേണുകൾ പിടിക്കാൻ സെൽഫ്-അറ്റൻഷൻ ഉപയോഗിച്ച്
|
||||
* സീക്വൻസ് വിവർത്തനം നടത്താൻ - എൻകോഡറും ഡീകോഡറും തമ്മിലുള്ള ശ്രദ്ധ ലെയർ.
|
||||
|
||||
എൻകോഡർ-ഡീകോഡർ ശ്രദ്ധ RNN-കളിൽ ഉപയോഗിക്കുന്ന ശ്രദ്ധാ യന്ത്രത്തോട് വളരെ സമാനമാണ്, ഈ ഭാഗത്തിന്റെ തുടക്കത്തിൽ വിവരിച്ചതുപോലെ. ഈ അനിമേറ്റഡ് ഡയഗ്രാം എൻകോഡർ-ഡീകോഡർ ശ്രദ്ധയുടെ പങ്ക് വിശദീകരിക്കുന്നു.
|
||||
|
||||

|
||||
|
||||
ഓരോ ഇൻപുട്ട് സ്ഥാനം സ്വതന്ത്രമായി ഓരോ ഔട്ട്പുട്ട് സ്ഥാനത്തേക്കും മാപ്പ് ചെയ്യപ്പെടുന്നതിനാൽ, ട്രാൻസ്ഫോർമറുകൾ RNN-കളേക്കാൾ മികച്ച പാരലലൈസേഷൻ സാധ്യമാക്കുന്നു, ഇത് വലിയതും കൂടുതൽ പ്രകടനശേഷിയുള്ള ഭാഷാ മോഡലുകൾ സൃഷ്ടിക്കാൻ സഹായിക്കുന്നു. ഓരോ അറ്റൻഷൻ ഹെഡും വാക്കുകൾ തമ്മിലുള്ള വ്യത്യസ്ത ബന്ധങ്ങൾ പഠിക്കാൻ ഉപയോഗിക്കാം, ഇത് NLP ജോലികൾ മെച്ചപ്പെടുത്തുന്നു.
|
||||
|
||||
## BERT
|
||||
|
||||
**BERT** (Bidirectional Encoder Representations from Transformers) വളരെ വലിയ 12 ലെയർ *BERT-base* ഉം 24 ലെയർ *BERT-large* ഉം ഉള്ള മൾട്ടി-ലെയർ ട്രാൻസ്ഫോർമർ നെറ്റ്വർക്ക് ആണ്. മോഡൽ ആദ്യം വലിയ ടെക്സ്റ്റ് കോർപ്പസിൽ (വിക്കിപീഡിയ + പുസ്തകങ്ങൾ) അൺസൂപ്പർവൈസ്ഡ് ട്രെയിനിംഗിലൂടെ (വാചകത്തിലെ മറച്ചുവച്ച വാക്കുകൾ പ്രവചിച്ച്) പ്രീ-ട്രെയിൻ ചെയ്യപ്പെടുന്നു. പ്രീ-ട്രെയിനിംഗിൽ മോഡൽ ഭാഷാ ബോധം ഗഹനമായി ഉൾക്കൊള്ളുന്നു, പിന്നീട് ഫൈൻ ട്യൂണിങ്ങ് വഴി മറ്റ് ഡാറ്റാസെറ്റുകളുമായി ഉപയോഗിക്കാം. ഈ പ്രക്രിയ **ട്രാൻസ്ഫർ ലേണിംഗ്** എന്ന് വിളിക്കുന്നു.
|
||||
|
||||

|
||||
|
||||
> ചിത്രം [മൂലം](http://jalammar.github.io/illustrated-bert/)
|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: ട്രാൻസ്ഫോർമറുകൾ
|
||||
|
||||
താഴെ കൊടുത്തിരിക്കുന്ന നോട്ട്ബുക്കുകളിൽ നിങ്ങളുടെ പഠനം തുടരുക:
|
||||
|
||||
* [PyTorch-ൽ ട്രാൻസ്ഫോർമറുകൾ](TransformersPyTorch.ipynb)
|
||||
* [TensorFlow-ൽ ട്രാൻസ്ഫോർമറുകൾ](TransformersTF.ipynb)
|
||||
|
||||
## സമാപനം
|
||||
|
||||
ഈ പാഠത്തിൽ നിങ്ങൾ ട്രാൻസ്ഫോർമറുകളും ശ്രദ്ധാ യന്ത്രങ്ങളും പഠിച്ചു, NLP ടൂൾബോക്സിലെ അനിവാര്യ ഉപകരണങ്ങൾ. BERT, DistilBERT, BigBird, OpenGPT3 തുടങ്ങിയ നിരവധി ട്രാൻസ്ഫോർമർ ആർക്കിടെക്ചറുകളുടെ വ്യത്യാസങ്ങൾ ഉണ്ട്, അവ ഫൈൻ ട്യൂൺ ചെയ്യാവുന്നതാണ്. [HuggingFace പാക്കേജ്](https://github.com/huggingface/) PyTorch, TensorFlow എന്നിവയിൽ ഈ ആർക്കിടെക്ചറികൾ പരിശീലിപ്പിക്കാൻ റിപോസിറ്ററികൾ നൽകുന്നു.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/36)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
* [ബ്ലോഗ് പോസ്റ്റ്](https://mchromiak.github.io/articles/2017/Sep/12/Transformer-Attention-is-all-you-need/), ക്ലാസിക്കൽ [Attention is all you need](https://arxiv.org/abs/1706.03762) പേപ്പർ ട്രാൻസ്ഫോർമറുകൾ വിശദീകരിക്കുന്നു.
|
||||
* [ട്രാൻസ്ഫോർമറുകൾ വിശദീകരിക്കുന്ന ബ്ലോഗ് പോസ്റ്റുകളുടെ ഒരു പരമ്പര](https://towardsdatascience.com/transformers-explained-visually-part-1-overview-of-functionality-95a6dd460452), ആർക്കിടെക്ചർ വിശദമായി വിശദീകരിക്കുന്നു.
|
||||
|
||||
## [അസൈൻമെന്റ്](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് പരിഗണിക്കേണ്ടതാണ്. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,353 +1,353 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# ശ്രദ്ധാ യന്ത്രങ്ങളും ട്രാൻസ്ഫോർമറുകളും\n",
|
||||
"\n",
|
||||
"പുനരാവർത്തന ശൃംഖലകളുടെ ഒരു പ്രധാന ദോഷം, ഒരു ശൃംഖലയിൽ ഉള്ള എല്ലാ വാക്കുകളും ഫലത്തിൽ ഒരുപോലെ സ്വാധീനം ചെലുത്തുന്നതാണ്. ഇത് നാമനിർദ്ദേശം തിരിച്ചറിയൽ, യന്ത്രഭാഷാന്തരം പോലുള്ള ശൃംഖല-തെ shൃംഖല പ്രവർത്തനങ്ങളിൽ സാധാരണ LSTM എൻകോഡർ-ഡികോഡർ മോഡലുകളുടെ പ്രകടനത്തെ കുറച്ചുകുറയിക്കുന്നു. യാഥാർത്ഥ്യത്തിൽ, ഇൻപുട്ട് ശൃംഖലയിൽ ചില പ്രത്യേക വാക്കുകൾ മറ്റുള്ളവയെക്കാൾ പരമ്പരാഗത ഔട്ട്പുട്ടുകളിൽ കൂടുതൽ സ്വാധീനം ചെലുത്താറുണ്ട്.\n",
|
||||
"\n",
|
||||
"യന്ത്രഭാഷാന്തരം പോലുള്ള ശൃംഖല-തെ shൃംഖല മോഡൽ പരിഗണിക്കാം. ഇത് രണ്ട് പുനരാവർത്തന ശൃംഖലകളാൽ നടപ്പിലാക്കപ്പെടുന്നു, അവയിൽ ഒന്നായ **എൻകോഡർ** ഇൻപുട്ട് ശൃംഖലയെ ഹിഡൻ സ്റ്റേറ്റിലേക്ക് ചുരുക്കും, മറ്റൊന്ന്, **ഡികോഡർ**, ഈ ഹിഡൻ സ്റ്റേറ്റ് അന്വർത്ഥമായി വിവർത്തനം ചെയ്ത ഫലമായി തുറക്കും. ഈ സമീപനത്തിലെ പ്രശ്നം, ശൃംഖലയുടെ അന്തിമ അവസ്ഥ ഒരു വാക്യത്തിന്റെ തുടക്കം ഓർക്കാൻ ബുദ്ധിമുട്ട് അനുഭവപ്പെടുന്നതാണ്, അതിനാൽ ദീർഘ വാക്യങ്ങളിൽ മോഡലിന്റെ ഗുണമേന്മ കുറയുന്നു.\n",
|
||||
"\n",
|
||||
"**ശ്രദ്ധാ യന്ത്രങ്ങൾ** RNN-ന്റെ ഓരോ ഔട്ട്പുട്ട് പ്രവചനത്തിലും ഓരോ ഇൻപുട്ട് വെക്ടറിന്റെ സാന്ദർഭിക സ്വാധീനം തൂക്കമിടാനുള്ള മാർഗം നൽകുന്നു. ഇത് നടപ്പിലാക്കുന്നത് ഇൻപുട്ട് RNN-ന്റെ ഇടനിലവസ്ഥകളും ഔട്ട്പുട്ട് RNN-ന്റെ ഇടനിലവസ്ഥകളും തമ്മിൽ ഷോർട്ട്കട്ടുകൾ സൃഷ്ടിച്ച് ആണ്. ഈ രീതിയിൽ, ഔട്ട്പുട്ട് ചിഹ്നം $y_t$ സൃഷ്ടിക്കുമ്പോൾ, വ്യത്യസ്ത തൂക്കം കോഫിഷ്യന്റുകളായ $\\alpha_{t,i}$ ഉപയോഗിച്ച് എല്ലാ ഇൻപുട്ട് ഹിഡൻ സ്റ്റേറ്റുകളും $h_i$ പരിഗണിക്കും.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*[Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) ലെ ആഡിറ്റീവ് ശ്രദ്ധാ യന്ത്രം ഉൾപ്പെടുത്തിയ എൻകോഡർ-ഡികോഡർ മോഡൽ, [ഈ ബ്ലോഗ് പോസ്റ്റ്](https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html) നിന്നെടുത്തത്]*\n",
|
||||
"\n",
|
||||
"ശ്രദ്ധാ മാട്രിക്സ് $\\{\\alpha_{i,j}\\}$ ഒരു പ്രത്യേക ഔട്ട്പുട്ട് വാക്കിന്റെ സൃഷ്ടിയിൽ ചില ഇൻപുട്ട് വാക്കുകൾ എത്രമാത്രം പങ്കുവഹിക്കുന്നുവെന്ന് പ്രതിനിധീകരിക്കും. താഴെ ഒരു ഉദാഹരണ മാട്രിക്സ് കാണിക്കുന്നു:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*[Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) (ചിത്രം 3) നിന്നെടുത്ത ചിത്രം]*\n",
|
||||
"\n",
|
||||
"ശ്രദ്ധാ യന്ത്രങ്ങൾ പ്രകൃതിഭാഷാ പ്രോസസ്സിംഗിലെ നിലവിലെ അല്ലെങ്കിൽ അടുത്തകാലത്തെ ഏറ്റവും മികച്ച പ്രകടനത്തിന് വലിയ പങ്ക് വഹിക്കുന്നു. എന്നാൽ ശ്രദ്ധ ചേർക്കുന്നത് മോഡൽ പാരാമീറ്ററുകളുടെ എണ്ണം വളരെ വർദ്ധിപ്പിക്കുന്നതിനാൽ RNN-കളിൽ സ്കെയിലിംഗ് പ്രശ്നങ്ങൾ ഉണ്ടായി. RNN-കളുടെ സ്കെയിലിംഗിന്റെ പ്രധാന തടസ്സം, മോഡലുകളുടെ പുനരാവർത്തന സ്വഭാവം പരിശീലനം ബാച്ച് ചെയ്യാനും പാരലലൈസ് ചെയ്യാനും ബുദ്ധിമുട്ട് സൃഷ്ടിക്കുന്നു. RNN-യിൽ ഒരു ശൃംഖലയുടെ ഓരോ ഘടകവും പരമ്പരാഗത ക്രമത്തിൽ പ്രോസസ്സ് ചെയ്യേണ്ടതുണ്ടെന്നത് പാരലലൈസേഷൻ എളുപ്പമല്ല.\n",
|
||||
"\n",
|
||||
"ശ്രദ്ധാ യന്ത്രങ്ങളുടെ സ്വീകരണവും ഈ തടസ്സവും ചേർന്ന് ഇന്ന് നാം അറിയുന്ന BERT മുതൽ OpenGPT3 വരെ ഉള്ള സ്റ്റേറ്റ് ഓഫ് ദി ആർട്ട് ട്രാൻസ്ഫോർമർ മോഡലുകളുടെ സൃഷ്ടിക്ക് വഴിതെളിച്ചു.\n",
|
||||
"\n",
|
||||
"## ട്രാൻസ്ഫോർമർ മോഡലുകൾ\n",
|
||||
"\n",
|
||||
"മുൻപ് ചെയ്ത ഓരോ പ്രവചനത്തിന്റെ സാന്ദർഭം അടുത്ത മൂല്യനിർണയ ഘട്ടത്തിലേക്ക് മുന്നോട്ട് അയക്കുന്നതിന് പകരം, **ട്രാൻസ്ഫോർമർ മോഡലുകൾ** **സ്ഥാനം സൂചിപ്പിക്കുന്ന എൻകോഡിംഗുകളും** ശ്രദ്ധയും ഉപയോഗിച്ച് നൽകിയ ടെക്സ്റ്റ് വിൻഡോയിൽ ഉള്ള ഇൻപുട്ടിന്റെ സാന്ദർഭം പിടിച്ചുപറ്റുന്നു. താഴെയുള്ള ചിത്രം സ്ഥാനം സൂചിപ്പിക്കുന്ന എൻകോഡിംഗുകളും ശ്രദ്ധയും ഉപയോഗിച്ച് ഒരു വിൻഡോയിൽ ഉള്ള സാന്ദർഭം എങ്ങനെ പിടിച്ചുപറ്റാമെന്ന് കാണിക്കുന്നു.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"ഓരോ ഇൻപുട്ട് സ്ഥാനം സ്വതന്ത്രമായി ഓരോ ഔട്ട്പുട്ട് സ്ഥാനത്തേക്കും മാപ്പ് ചെയ്യപ്പെടുന്നതിനാൽ, ട്രാൻസ്ഫോർമറുകൾ RNN-കളേക്കാൾ മികച്ച പാരലലൈസേഷൻ സാധ്യമാക്കുന്നു, ഇത് വലിയതും കൂടുതൽ പ്രകടനക്ഷമവുമായ ഭാഷാ മോഡലുകൾ സൃഷ്ടിക്കാൻ സഹായിക്കുന്നു. ഓരോ ശ്രദ്ധാ തലയും വാക്കുകൾ തമ്മിലുള്ള വ്യത്യസ്ത ബന്ധങ്ങൾ പഠിക്കാൻ ഉപയോഗിക്കാം, ഇത് താഴെ വരുന്ന പ്രകൃതിഭാഷാ പ്രോസസ്സിംഗ് പ്രവർത്തനങ്ങൾ മെച്ചപ്പെടുത്തുന്നു.\n",
|
||||
"\n",
|
||||
"**BERT** (Bidirectional Encoder Representations from Transformers) വളരെ വലിയ, 12 ലെയറുള്ള *BERT-base*നും 24 ലെയറുള്ള *BERT-large*നും ഉള്ള മൾട്ടി ലെയർ ട്രാൻസ്ഫോർമർ നെറ്റ്വർക്കാണ്. മോഡൽ ആദ്യം വലിയ ടെക്സ്റ്റ് കോർപ്പസ് (വിക്കിപീഡിയ + പുസ്തകങ്ങൾ) ഉപയോഗിച്ച് സ്വയംപരിശീലനത്തിലൂടെ (വാക്യത്തിലെ മറച്ചുവച്ച വാക്കുകൾ പ്രവചിച്ച്) പ്രീ-ട്രെയിൻ ചെയ്യപ്പെടുന്നു. പ്രീ-ട്രെയിനിംഗിൽ മോഡൽ ഭാഷാ ബോധം ഗഹനമായി ഉൾക്കൊള്ളുന്നു, പിന്നീട് ഇത് മറ്റ് ഡാറ്റാസെറ്റുകൾ ഉപയോഗിച്ച് ഫൈൻ ട്യൂണിങ്ങിലൂടെ പ്രയോജനപ്പെടുത്താം. ഈ പ്രക്രിയ **ട്രാൻസ്ഫർ ലേണിംഗ്** എന്ന് വിളിക്കുന്നു.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"BERT, DistilBERT, BigBird, OpenGPT3 തുടങ്ങിയ നിരവധി ട്രാൻസ്ഫോർമർ ആർക്കിടെക്ചറുകളുടെ വ്യത്യാസങ്ങൾ ഉണ്ട്, ഇവ ഫൈൻ ട്യൂൺ ചെയ്യാവുന്നതാണ്. [HuggingFace പാക്കേജ്](https://github.com/huggingface/) PyTorch ഉപയോഗിച്ച് ഈ ആർക്കിടെക്ചറികളുടെ പരിശീലനത്തിനുള്ള റിപോസിറ്ററി നൽകുന്നു.\n",
|
||||
"\n",
|
||||
"## ടെക്സ്റ്റ് ക്ലാസിഫിക്കേഷനിൽ BERT ഉപയോഗിക്കൽ\n",
|
||||
"\n",
|
||||
"നമ്മുടെ പരമ്പരാഗത പ്രവർത്തനം: ശൃംഖല ക്ലാസിഫിക്കേഷൻ പരിഹരിക്കാൻ പ്രീ-ട്രെയിൻ ചെയ്ത BERT മോഡൽ എങ്ങനെ ഉപയോഗിക്കാമെന്ന് നോക്കാം. നാം നമ്മുടെ യഥാർത്ഥ AG News ഡാറ്റാസെറ്റ് ക്ലാസിഫൈ ചെയ്യും.\n",
|
||||
"\n",
|
||||
"ആദ്യം, HuggingFace ലൈബ്രറിയും നമ്മുടെ ഡാറ്റാസെറ്റും ലോഡ് ചെയ്യാം:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Loading dataset...\n",
|
||||
"Building vocab...\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import torch\n",
|
||||
"import torchtext\n",
|
||||
"from torchnlp import *\n",
|
||||
"import transformers\n",
|
||||
"train_dataset, test_dataset, classes, vocab = load_dataset()\n",
|
||||
"vocab_len = len(vocab)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"നാം പ്രീ-ട്രെയിൻ ചെയ്ത BERT മോഡൽ ഉപയോഗിക്കാനിരിക്കുന്നതിനാൽ, പ്രത്യേക ടോക്കനൈസർ ഉപയോഗിക്കേണ്ടതുണ്ട്. ആദ്യം, പ്രീ-ട്രെയിൻ ചെയ്ത BERT മോഡലുമായി ബന്ധപ്പെട്ട ടോക്കനൈസർ ലോഡ് ചെയ്യാം.\n",
|
||||
"\n",
|
||||
"HuggingFace ലൈബ്രറിയിൽ പ്രീ-ട്രെയിൻ ചെയ്ത മോഡലുകളുടെ ഒരു റിപോസിറ്ററി ഉണ്ട്, അവയുടെ പേരുകൾ `from_pretrained` ഫംഗ്ഷനുകൾക്ക് ആർഗ്യുമെന്റായി നൽകുന്നതിലൂടെ നിങ്ങൾക്ക് അവ ഉപയോഗിക്കാം. മോഡലിനുള്ള എല്ലാ ആവശ്യമായ ബൈനറി ഫയലുകളും സ്വയം ഡൗൺലോഡ് ചെയ്യും.\n",
|
||||
"\n",
|
||||
"എങ്കിലും, ചിലപ്പോൾ നിങ്ങൾക്ക് നിങ്ങളുടെ സ്വന്തം മോഡലുകൾ ലോഡ് ചെയ്യേണ്ടി വരും, അപ്പോൾ ടോക്കനൈസറിന്റെ പാരാമീറ്ററുകൾ, മോഡൽ പാരാമീറ്ററുകളുള്ള `config.json` ഫയൽ, ബൈനറി വെയ്റ്റുകൾ എന്നിവ ഉൾപ്പെടെയുള്ള എല്ലാ ബന്ധപ്പെട്ട ഫയലുകളും അടങ്ങിയ ഡയറക്ടറി നിങ്ങൾക്ക് വ്യക്തമാക്കാം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# To load the model from Internet repository using model name. \n",
|
||||
"# Use this if you are running from your own copy of the notebooks\n",
|
||||
"bert_model = 'bert-base-uncased' \n",
|
||||
"\n",
|
||||
"# To load the model from the directory on disk. Use this for Microsoft Learn module, because we have\n",
|
||||
"# prepared all required files for you.\n",
|
||||
"bert_model = './bert'\n",
|
||||
"\n",
|
||||
"tokenizer = transformers.BertTokenizer.from_pretrained(bert_model)\n",
|
||||
"\n",
|
||||
"MAX_SEQ_LEN = 128\n",
|
||||
"PAD_INDEX = tokenizer.convert_tokens_to_ids(tokenizer.pad_token)\n",
|
||||
"UNK_INDEX = tokenizer.convert_tokens_to_ids(tokenizer.unk_token)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"`tokenizer` ഒബ്ജക്റ്റിൽ `encode` ഫംഗ്ഷൻ ഉൾപ്പെടുന്നു, ഇത് ടെക്സ്റ്റ് എൻകോഡ് ചെയ്യാൻ നേരിട്ട് ഉപയോഗിക്കാം:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[101, 1052, 22123, 2953, 2818, 2003, 1037, 2307, 7705, 2005, 17953, 2361, 102]"
|
||||
]
|
||||
},
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"tokenizer.encode('PyTorch is a great framework for NLP')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"അപ്പോൾ, പരിശീലനത്തിനിടെ ഡാറ്റ ആക്സസ് ചെയ്യാൻ ഉപയോഗിക്കുന്ന ഇറ്ററേറ്ററുകൾ സൃഷ്ടിക്കാം. BERT അതിന്റെ സ്വന്തം എൻകോഡിംഗ് ഫംഗ്ഷൻ ഉപയോഗിക്കുന്നതിനാൽ, മുമ്പ് നാം നിർവചിച്ച `padify` പോലുള്ള ഒരു പാഡിംഗ് ഫംഗ്ഷൻ നിർവചിക്കേണ്ടതുണ്ട്:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def pad_bert(b):\n",
|
||||
" # b is the list of tuples of length batch_size\n",
|
||||
" # - first element of a tuple = label, \n",
|
||||
" # - second = feature (text sequence)\n",
|
||||
" # build vectorized sequence\n",
|
||||
" v = [tokenizer.encode(x[1]) for x in b]\n",
|
||||
" # compute max length of a sequence in this minibatch\n",
|
||||
" l = max(map(len,v))\n",
|
||||
" return ( # tuple of two tensors - labels and features\n",
|
||||
" torch.LongTensor([t[0] for t in b]),\n",
|
||||
" torch.stack([torch.nn.functional.pad(torch.tensor(t),(0,l-len(t)),mode='constant',value=0) for t in v])\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
"train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=8, collate_fn=pad_bert, shuffle=True)\n",
|
||||
"test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=8, collate_fn=pad_bert)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"നമ്മുടെ കേസിൽ, നാം `bert-base-uncased` എന്ന പേരിലുള്ള പ്രീ-ട്രെയിൻ ചെയ്ത BERT മോഡൽ ഉപയോഗിക്കും. `BertForSequenceClassification` പാക്കേജ് ഉപയോഗിച്ച് മോഡൽ ലോഡ് ചെയ്യാം. ഇത് നമ്മുടെ മോഡലിന് ക്ലാസിഫിക്കേഷനായി ആവശ്യമായ ആർക്കിടെക്ചർ, ഫൈനൽ ക്ലാസിഫയർ ഉൾപ്പെടെ, ഇതിനകം ഉണ്ടെന്ന് ഉറപ്പാക്കുന്നു. ഫൈനൽ ക്ലാസിഫയറിന്റെ വെയ്റ്റുകൾ ഇൻഷിയലൈസ് ചെയ്തിട്ടില്ലെന്നു കാണിക്കുന്ന മുന്നറിയിപ്പ് സന്ദേശം നിങ്ങൾക്ക് കാണാം, മോഡലിന് പ്രീ-ട്രെയിനിംഗ് ആവശ്യമുണ്ടെന്ന് പറയുന്നതും - അത് പൂർണ്ണമായും ശരിയാണ്, കാരണം നാം ചെയ്യാൻ പോകുന്നത് അതേയാണ്!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Some weights of the model checkpoint at ./bert were not used when initializing BertForSequenceClassification: ['cls.predictions.bias', 'cls.predictions.transform.dense.weight', 'cls.predictions.transform.dense.bias', 'cls.predictions.decoder.weight', 'cls.seq_relationship.weight', 'cls.seq_relationship.bias', 'cls.predictions.transform.LayerNorm.weight', 'cls.predictions.transform.LayerNorm.bias']\n",
|
||||
"- This IS expected if you are initializing BertForSequenceClassification from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
|
||||
"- This IS NOT expected if you are initializing BertForSequenceClassification from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n",
|
||||
"Some weights of BertForSequenceClassification were not initialized from the model checkpoint at ./bert and are newly initialized: ['classifier.weight', 'classifier.bias']\n",
|
||||
"You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = transformers.BertForSequenceClassification.from_pretrained(bert_model,num_labels=4).to(device)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഇപ്പോൾ നാം പരിശീലനം ആരംഭിക്കാൻ തയ്യാറാണ്! BERT ഇതിനകം പ്രീ-ട്രെയിൻ ചെയ്തതിനാൽ, പ്രാരംഭ ഭാരങ്ങൾ നശിപ്പിക്കാതിരിക്കാൻ ചെറിയ ലേണിംഗ് റേറ്റ് ഉപയോഗിച്ച് തുടങ്ങാൻ ആഗ്രഹിക്കുന്നു.\n",
|
||||
"\n",
|
||||
"എല്ലാ കഠിനപ്രവർത്തനവും `BertForSequenceClassification` മോഡലാണ് നിർവഹിക്കുന്നത്. പരിശീലന ഡാറ്റയിൽ മോഡൽ വിളിക്കുമ്പോൾ, അത് ഇൻപുട്ട് മിനിബാച്ചിനുള്ള നഷ്ടവും നെറ്റ്വർക്ക് ഔട്ട്പുട്ടും നൽകുന്നു. പാരാമീറ്റർ ഒപ്റ്റിമൈസേഷനായി നഷ്ടം ഉപയോഗിക്കുന്നു (`loss.backward()` ബാക്ക്വേഡ് പാസ് നടത്തുന്നു), പരിശീലന കൃത്യത കണക്കാക്കാൻ `out` ഉപയോഗിക്കുന്നു, ലഭിച്ച ലേബലുകൾ `labs` (`argmax` ഉപയോഗിച്ച് കണക്കാക്കിയ) പ്രതീക്ഷിച്ച `labels`-നൊപ്പം താരതമ്യം ചെയ്ത്.\n",
|
||||
"\n",
|
||||
"പ്രക്രിയ നിയന്ത്രിക്കാൻ, നാം പല ഇറ്ററേഷനുകളിലായി നഷ്ടവും കൃത്യതയും സമാഹരിച്ച്, ഓരോ `report_freq` പരിശീലന ചക്രത്തിനും പ്രിന്റ് ചെയ്യുന്നു.\n",
|
||||
"\n",
|
||||
"ഈ പരിശീലനം വളരെ സമയം എടുക്കാൻ സാധ്യതയുള്ളതിനാൽ, നാം ഇറ്ററേഷനുകളുടെ എണ്ണം പരിമിതപ്പെടുത്തുന്നു.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Loss = 1.1254194641113282, Accuracy = 0.585\n",
|
||||
"Loss = 0.6194715118408203, Accuracy = 0.83\n",
|
||||
"Loss = 0.46665248870849607, Accuracy = 0.8475\n",
|
||||
"Loss = 0.4309701919555664, Accuracy = 0.8575\n",
|
||||
"Loss = 0.35427074432373046, Accuracy = 0.8825\n",
|
||||
"Loss = 0.3306886291503906, Accuracy = 0.8975\n",
|
||||
"Loss = 0.30340143203735354, Accuracy = 0.8975\n",
|
||||
"Loss = 0.26139299392700194, Accuracy = 0.915\n",
|
||||
"Loss = 0.26708646774291994, Accuracy = 0.9225\n",
|
||||
"Loss = 0.3667240524291992, Accuracy = 0.8675\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"optimizer = torch.optim.Adam(model.parameters(), lr=2e-5)\n",
|
||||
"\n",
|
||||
"report_freq = 50\n",
|
||||
"iterations = 500 # make this larger to train for longer time!\n",
|
||||
"\n",
|
||||
"model.train()\n",
|
||||
"\n",
|
||||
"i,c = 0,0\n",
|
||||
"acc_loss = 0\n",
|
||||
"acc_acc = 0\n",
|
||||
"\n",
|
||||
"for labels,texts in train_loader:\n",
|
||||
" labels = labels.to(device)-1 # get labels in the range 0-3 \n",
|
||||
" texts = texts.to(device)\n",
|
||||
" loss, out = model(texts, labels=labels)[:2]\n",
|
||||
" labs = out.argmax(dim=1)\n",
|
||||
" acc = torch.mean((labs==labels).type(torch.float32))\n",
|
||||
" optimizer.zero_grad()\n",
|
||||
" loss.backward()\n",
|
||||
" optimizer.step()\n",
|
||||
" acc_loss += loss\n",
|
||||
" acc_acc += acc\n",
|
||||
" i+=1\n",
|
||||
" c+=1\n",
|
||||
" if i%report_freq==0:\n",
|
||||
" print(f\"Loss = {acc_loss.item()/c}, Accuracy = {acc_acc.item()/c}\")\n",
|
||||
" c = 0\n",
|
||||
" acc_loss = 0\n",
|
||||
" acc_acc = 0\n",
|
||||
" iterations-=1\n",
|
||||
" if not iterations:\n",
|
||||
" break"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"നിങ്ങൾക്ക് കാണാം (പ്രത്യേകിച്ച് നിങ്ങൾ ഇറ്ററേഷനുകളുടെ എണ്ണം വർദ്ധിപ്പിച്ച് മതിയായ സമയം കാത്തിരിക്കുമ്പോൾ) BERT ക്ലാസിഫിക്കേഷൻ നമുക്ക് നല്ല കൃത്യത നൽകുന്നു! അതിന്റെ കാരണം BERT ഭാഷയുടെ ഘടന വളരെ നന്നായി മനസ്സിലാക്കുന്നുണ്ടെന്നതാണ്, അതിനാൽ നമുക്ക് അവസാന ക്ലാസിഫയർ മാത്രം ഫൈൻ-ട്യൂൺ ചെയ്യേണ്ടതുണ്ട്. എന്നാൽ, BERT ഒരു വലിയ മോഡലായതിനാൽ, മുഴുവൻ പരിശീലന പ്രക്രിയയും ഏറെ സമയം എടുക്കുന്നു, കൂടാതെ ഗണനശേഷി (GPU, സാധാരണയായി ഒന്നിലധികം) ആവശ്യമാണ്!\n",
|
||||
"\n",
|
||||
"> **Note:** നമ്മുടെ ഉദാഹരണത്തിൽ, നാം ഏറ്റവും ചെറിയ പ്രീ-ട്രെയിൻ ചെയ്ത BERT മോഡലുകളിൽ ഒന്നാണ് ഉപയോഗിക്കുന്നത്. മികച്ച ഫലങ്ങൾ നൽകാൻ സാധ്യതയുള്ള വലിയ മോഡലുകളും ഉണ്ട്.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## മോഡൽ പ്രകടനം വിലയിരുത്തൽ\n",
|
||||
"\n",
|
||||
"ഇപ്പോൾ നാം ടെസ്റ്റ് ഡാറ്റാസെറ്റിൽ നമ്മുടെ മോഡലിന്റെ പ്രകടനം വിലയിരുത്താം. വിലയിരുത്തൽ ലൂപ്പ് പരിശീലന ലൂപ്പിനോട് വളരെ സമാനമാണ്, പക്ഷേ `model.eval()` വിളിച്ച് മോഡൽ വിലയിരുത്തൽ മോഡിലേക്ക് മാറ്റാൻ മറക്കരുത്.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Final accuracy: 0.9047029702970297\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.eval()\n",
|
||||
"iterations = 100\n",
|
||||
"acc = 0\n",
|
||||
"i = 0\n",
|
||||
"for labels,texts in test_loader:\n",
|
||||
" labels = labels.to(device)-1 \n",
|
||||
" texts = texts.to(device)\n",
|
||||
" _, out = model(texts, labels=labels)[:2]\n",
|
||||
" labs = out.argmax(dim=1)\n",
|
||||
" acc += torch.mean((labs==labels).type(torch.float32))\n",
|
||||
" i+=1\n",
|
||||
" if i>iterations: break\n",
|
||||
" \n",
|
||||
"print(f\"Final accuracy: {acc.item()/i}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## പ്രധാനപ്പെട്ട കാര്യങ്ങൾ\n",
|
||||
"\n",
|
||||
"ഈ യൂണിറ്റിൽ, **transformers** ലൈബ്രറിയിൽ നിന്നുള്ള മുൻകൂട്ടി പരിശീലിച്ച ഭാഷാ മോഡൽ എളുപ്പത്തിൽ എടുക്കുകയും അത് നമ്മുടെ ടെക്സ്റ്റ് ക്ലാസിഫിക്കേഷൻ ടാസ്ക്കിനായി അനുയോജ്യമായി മാറ്റുകയും ചെയ്യുന്നത് എങ്ങനെ എന്നത് കണ്ടു. അതുപോലെ, BERT മോഡലുകൾ എന്റിറ്റി എക്സ്ട്രാക്ഷൻ, ചോദ്യോത്തരങ്ങൾ, മറ്റ് NLP ടാസ്കുകൾ എന്നിവയ്ക്കും ഉപയോഗിക്കാം.\n",
|
||||
"\n",
|
||||
"Transformer മോഡലുകൾ NLP-യിലെ ഏറ്റവും പുതിയ സാങ്കേതികവിദ്യ പ്രതിനിധീകരിക്കുന്നു, കൂടാതെ അധികം കേസുകളിൽ കസ്റ്റം NLP പരിഹാരങ്ങൾ നടപ്പിലാക്കുമ്പോൾ പരീക്ഷണം ആരംഭിക്കേണ്ട ആദ്യ പരിഹാരമായിരിക്കണം. എന്നിരുന്നാലും, ഈ മഡ്യൂളിൽ ചർച്ച ചെയ്ത റികറന്റ് ന്യൂറൽ നെറ്റ്വർക്കുകളുടെ അടിസ്ഥാന സിദ്ധാന്തങ്ങൾ മനസിലാക്കുന്നത്, നിങ്ങൾക്ക് ഉയർന്ന തലത്തിലുള്ള ന്യൂറൽ മോഡലുകൾ നിർമ്മിക്കാനാഗ്രഹിക്കുന്നുവെങ്കിൽ വളരെ പ്രധാനമാണ്.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**അസൂയാ**: \nഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റായ വിവരങ്ങൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "py37_pytorch",
|
||||
"language": "python",
|
||||
"name": "conda-env-py37_pytorch-py"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.7.7"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "753865967678a92dbce7d7efbd36d980",
|
||||
"translation_date": "2025-11-26T02:20:45+00:00",
|
||||
"source_file": "lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb",
|
||||
"language_code": "ml"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# ശ്രദ്ധാ യന്ത്രങ്ങളും ട്രാൻസ്ഫോർമറുകളും\n",
|
||||
"\n",
|
||||
"പുനരാവർത്തന ശൃംഖലകളുടെ ഒരു പ്രധാന ദോഷം, ഒരു ശൃംഖലയിൽ ഉള്ള എല്ലാ വാക്കുകളും ഫലത്തിൽ ഒരുപോലെ സ്വാധീനം ചെലുത്തുന്നതാണ്. ഇത് നാമനിർദ്ദേശം തിരിച്ചറിയൽ, യന്ത്രഭാഷാന്തരം പോലുള്ള ശൃംഖല-തെ shൃംഖല പ്രവർത്തനങ്ങളിൽ സാധാരണ LSTM എൻകോഡർ-ഡികോഡർ മോഡലുകളുടെ പ്രകടനത്തെ കുറച്ചുകുറയിക്കുന്നു. യാഥാർത്ഥ്യത്തിൽ, ഇൻപുട്ട് ശൃംഖലയിൽ ചില പ്രത്യേക വാക്കുകൾ മറ്റുള്ളവയെക്കാൾ പരമ്പരാഗത ഔട്ട്പുട്ടുകളിൽ കൂടുതൽ സ്വാധീനം ചെലുത്താറുണ്ട്.\n",
|
||||
"\n",
|
||||
"യന്ത്രഭാഷാന്തരം പോലുള്ള ശൃംഖല-തെ shൃംഖല മോഡൽ പരിഗണിക്കാം. ഇത് രണ്ട് പുനരാവർത്തന ശൃംഖലകളാൽ നടപ്പിലാക്കപ്പെടുന്നു, അവയിൽ ഒന്നായ **എൻകോഡർ** ഇൻപുട്ട് ശൃംഖലയെ ഹിഡൻ സ്റ്റേറ്റിലേക്ക് ചുരുക്കും, മറ്റൊന്ന്, **ഡികോഡർ**, ഈ ഹിഡൻ സ്റ്റേറ്റ് അന്വർത്ഥമായി വിവർത്തനം ചെയ്ത ഫലമായി തുറക്കും. ഈ സമീപനത്തിലെ പ്രശ്നം, ശൃംഖലയുടെ അന്തിമ അവസ്ഥ ഒരു വാക്യത്തിന്റെ തുടക്കം ഓർക്കാൻ ബുദ്ധിമുട്ട് അനുഭവപ്പെടുന്നതാണ്, അതിനാൽ ദീർഘ വാക്യങ്ങളിൽ മോഡലിന്റെ ഗുണമേന്മ കുറയുന്നു.\n",
|
||||
"\n",
|
||||
"**ശ്രദ്ധാ യന്ത്രങ്ങൾ** RNN-ന്റെ ഓരോ ഔട്ട്പുട്ട് പ്രവചനത്തിലും ഓരോ ഇൻപുട്ട് വെക്ടറിന്റെ സാന്ദർഭിക സ്വാധീനം തൂക്കമിടാനുള്ള മാർഗം നൽകുന്നു. ഇത് നടപ്പിലാക്കുന്നത് ഇൻപുട്ട് RNN-ന്റെ ഇടനിലവസ്ഥകളും ഔട്ട്പുട്ട് RNN-ന്റെ ഇടനിലവസ്ഥകളും തമ്മിൽ ഷോർട്ട്കട്ടുകൾ സൃഷ്ടിച്ച് ആണ്. ഈ രീതിയിൽ, ഔട്ട്പുട്ട് ചിഹ്നം $y_t$ സൃഷ്ടിക്കുമ്പോൾ, വ്യത്യസ്ത തൂക്കം കോഫിഷ്യന്റുകളായ $\\alpha_{t,i}$ ഉപയോഗിച്ച് എല്ലാ ഇൻപുട്ട് ഹിഡൻ സ്റ്റേറ്റുകളും $h_i$ പരിഗണിക്കും.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*[Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) ലെ ആഡിറ്റീവ് ശ്രദ്ധാ യന്ത്രം ഉൾപ്പെടുത്തിയ എൻകോഡർ-ഡികോഡർ മോഡൽ, [ഈ ബ്ലോഗ് പോസ്റ്റ്](https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html) നിന്നെടുത്തത്]*\n",
|
||||
"\n",
|
||||
"ശ്രദ്ധാ മാട്രിക്സ് $\\{\\alpha_{i,j}\\}$ ഒരു പ്രത്യേക ഔട്ട്പുട്ട് വാക്കിന്റെ സൃഷ്ടിയിൽ ചില ഇൻപുട്ട് വാക്കുകൾ എത്രമാത്രം പങ്കുവഹിക്കുന്നുവെന്ന് പ്രതിനിധീകരിക്കും. താഴെ ഒരു ഉദാഹരണ മാട്രിക്സ് കാണിക്കുന്നു:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*[Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) (ചിത്രം 3) നിന്നെടുത്ത ചിത്രം]*\n",
|
||||
"\n",
|
||||
"ശ്രദ്ധാ യന്ത്രങ്ങൾ പ്രകൃതിഭാഷാ പ്രോസസ്സിംഗിലെ നിലവിലെ അല്ലെങ്കിൽ അടുത്തകാലത്തെ ഏറ്റവും മികച്ച പ്രകടനത്തിന് വലിയ പങ്ക് വഹിക്കുന്നു. എന്നാൽ ശ്രദ്ധ ചേർക്കുന്നത് മോഡൽ പാരാമീറ്ററുകളുടെ എണ്ണം വളരെ വർദ്ധിപ്പിക്കുന്നതിനാൽ RNN-കളിൽ സ്കെയിലിംഗ് പ്രശ്നങ്ങൾ ഉണ്ടായി. RNN-കളുടെ സ്കെയിലിംഗിന്റെ പ്രധാന തടസ്സം, മോഡലുകളുടെ പുനരാവർത്തന സ്വഭാവം പരിശീലനം ബാച്ച് ചെയ്യാനും പാരലലൈസ് ചെയ്യാനും ബുദ്ധിമുട്ട് സൃഷ്ടിക്കുന്നു. RNN-യിൽ ഒരു ശൃംഖലയുടെ ഓരോ ഘടകവും പരമ്പരാഗത ക്രമത്തിൽ പ്രോസസ്സ് ചെയ്യേണ്ടതുണ്ടെന്നത് പാരലലൈസേഷൻ എളുപ്പമല്ല.\n",
|
||||
"\n",
|
||||
"ശ്രദ്ധാ യന്ത്രങ്ങളുടെ സ്വീകരണവും ഈ തടസ്സവും ചേർന്ന് ഇന്ന് നാം അറിയുന്ന BERT മുതൽ OpenGPT3 വരെ ഉള്ള സ്റ്റേറ്റ് ഓഫ് ദി ആർട്ട് ട്രാൻസ്ഫോർമർ മോഡലുകളുടെ സൃഷ്ടിക്ക് വഴിതെളിച്ചു.\n",
|
||||
"\n",
|
||||
"## ട്രാൻസ്ഫോർമർ മോഡലുകൾ\n",
|
||||
"\n",
|
||||
"മുൻപ് ചെയ്ത ഓരോ പ്രവചനത്തിന്റെ സാന്ദർഭം അടുത്ത മൂല്യനിർണയ ഘട്ടത്തിലേക്ക് മുന്നോട്ട് അയക്കുന്നതിന് പകരം, **ട്രാൻസ്ഫോർമർ മോഡലുകൾ** **സ്ഥാനം സൂചിപ്പിക്കുന്ന എൻകോഡിംഗുകളും** ശ്രദ്ധയും ഉപയോഗിച്ച് നൽകിയ ടെക്സ്റ്റ് വിൻഡോയിൽ ഉള്ള ഇൻപുട്ടിന്റെ സാന്ദർഭം പിടിച്ചുപറ്റുന്നു. താഴെയുള്ള ചിത്രം സ്ഥാനം സൂചിപ്പിക്കുന്ന എൻകോഡിംഗുകളും ശ്രദ്ധയും ഉപയോഗിച്ച് ഒരു വിൻഡോയിൽ ഉള്ള സാന്ദർഭം എങ്ങനെ പിടിച്ചുപറ്റാമെന്ന് കാണിക്കുന്നു.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"ഓരോ ഇൻപുട്ട് സ്ഥാനം സ്വതന്ത്രമായി ഓരോ ഔട്ട്പുട്ട് സ്ഥാനത്തേക്കും മാപ്പ് ചെയ്യപ്പെടുന്നതിനാൽ, ട്രാൻസ്ഫോർമറുകൾ RNN-കളേക്കാൾ മികച്ച പാരലലൈസേഷൻ സാധ്യമാക്കുന്നു, ഇത് വലിയതും കൂടുതൽ പ്രകടനക്ഷമവുമായ ഭാഷാ മോഡലുകൾ സൃഷ്ടിക്കാൻ സഹായിക്കുന്നു. ഓരോ ശ്രദ്ധാ തലയും വാക്കുകൾ തമ്മിലുള്ള വ്യത്യസ്ത ബന്ധങ്ങൾ പഠിക്കാൻ ഉപയോഗിക്കാം, ഇത് താഴെ വരുന്ന പ്രകൃതിഭാഷാ പ്രോസസ്സിംഗ് പ്രവർത്തനങ്ങൾ മെച്ചപ്പെടുത്തുന്നു.\n",
|
||||
"\n",
|
||||
"**BERT** (Bidirectional Encoder Representations from Transformers) വളരെ വലിയ, 12 ലെയറുള്ള *BERT-base*നും 24 ലെയറുള്ള *BERT-large*നും ഉള്ള മൾട്ടി ലെയർ ട്രാൻസ്ഫോർമർ നെറ്റ്വർക്കാണ്. മോഡൽ ആദ്യം വലിയ ടെക്സ്റ്റ് കോർപ്പസ് (വിക്കിപീഡിയ + പുസ്തകങ്ങൾ) ഉപയോഗിച്ച് സ്വയംപരിശീലനത്തിലൂടെ (വാക്യത്തിലെ മറച്ചുവച്ച വാക്കുകൾ പ്രവചിച്ച്) പ്രീ-ട്രെയിൻ ചെയ്യപ്പെടുന്നു. പ്രീ-ട്രെയിനിംഗിൽ മോഡൽ ഭാഷാ ബോധം ഗഹനമായി ഉൾക്കൊള്ളുന്നു, പിന്നീട് ഇത് മറ്റ് ഡാറ്റാസെറ്റുകൾ ഉപയോഗിച്ച് ഫൈൻ ട്യൂണിങ്ങിലൂടെ പ്രയോജനപ്പെടുത്താം. ഈ പ്രക്രിയ **ട്രാൻസ്ഫർ ലേണിംഗ്** എന്ന് വിളിക്കുന്നു.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"BERT, DistilBERT, BigBird, OpenGPT3 തുടങ്ങിയ നിരവധി ട്രാൻസ്ഫോർമർ ആർക്കിടെക്ചറുകളുടെ വ്യത്യാസങ്ങൾ ഉണ്ട്, ഇവ ഫൈൻ ട്യൂൺ ചെയ്യാവുന്നതാണ്. [HuggingFace പാക്കേജ്](https://github.com/huggingface/) PyTorch ഉപയോഗിച്ച് ഈ ആർക്കിടെക്ചറികളുടെ പരിശീലനത്തിനുള്ള റിപോസിറ്ററി നൽകുന്നു.\n",
|
||||
"\n",
|
||||
"## ടെക്സ്റ്റ് ക്ലാസിഫിക്കേഷനിൽ BERT ഉപയോഗിക്കൽ\n",
|
||||
"\n",
|
||||
"നമ്മുടെ പരമ്പരാഗത പ്രവർത്തനം: ശൃംഖല ക്ലാസിഫിക്കേഷൻ പരിഹരിക്കാൻ പ്രീ-ട്രെയിൻ ചെയ്ത BERT മോഡൽ എങ്ങനെ ഉപയോഗിക്കാമെന്ന് നോക്കാം. നാം നമ്മുടെ യഥാർത്ഥ AG News ഡാറ്റാസെറ്റ് ക്ലാസിഫൈ ചെയ്യും.\n",
|
||||
"\n",
|
||||
"ആദ്യം, HuggingFace ലൈബ്രറിയും നമ്മുടെ ഡാറ്റാസെറ്റും ലോഡ് ചെയ്യാം:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Loading dataset...\n",
|
||||
"Building vocab...\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import torch\n",
|
||||
"import torchtext\n",
|
||||
"from torchnlp import *\n",
|
||||
"import transformers\n",
|
||||
"train_dataset, test_dataset, classes, vocab = load_dataset()\n",
|
||||
"vocab_len = len(vocab)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"നാം പ്രീ-ട്രെയിൻ ചെയ്ത BERT മോഡൽ ഉപയോഗിക്കാനിരിക്കുന്നതിനാൽ, പ്രത്യേക ടോക്കനൈസർ ഉപയോഗിക്കേണ്ടതുണ്ട്. ആദ്യം, പ്രീ-ട്രെയിൻ ചെയ്ത BERT മോഡലുമായി ബന്ധപ്പെട്ട ടോക്കനൈസർ ലോഡ് ചെയ്യാം.\n",
|
||||
"\n",
|
||||
"HuggingFace ലൈബ്രറിയിൽ പ്രീ-ട്രെയിൻ ചെയ്ത മോഡലുകളുടെ ഒരു റിപോസിറ്ററി ഉണ്ട്, അവയുടെ പേരുകൾ `from_pretrained` ഫംഗ്ഷനുകൾക്ക് ആർഗ്യുമെന്റായി നൽകുന്നതിലൂടെ നിങ്ങൾക്ക് അവ ഉപയോഗിക്കാം. മോഡലിനുള്ള എല്ലാ ആവശ്യമായ ബൈനറി ഫയലുകളും സ്വയം ഡൗൺലോഡ് ചെയ്യും.\n",
|
||||
"\n",
|
||||
"എങ്കിലും, ചിലപ്പോൾ നിങ്ങൾക്ക് നിങ്ങളുടെ സ്വന്തം മോഡലുകൾ ലോഡ് ചെയ്യേണ്ടി വരും, അപ്പോൾ ടോക്കനൈസറിന്റെ പാരാമീറ്ററുകൾ, മോഡൽ പാരാമീറ്ററുകളുള്ള `config.json` ഫയൽ, ബൈനറി വെയ്റ്റുകൾ എന്നിവ ഉൾപ്പെടെയുള്ള എല്ലാ ബന്ധപ്പെട്ട ഫയലുകളും അടങ്ങിയ ഡയറക്ടറി നിങ്ങൾക്ക് വ്യക്തമാക്കാം.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# To load the model from Internet repository using model name. \n",
|
||||
"# Use this if you are running from your own copy of the notebooks\n",
|
||||
"bert_model = 'bert-base-uncased' \n",
|
||||
"\n",
|
||||
"# To load the model from the directory on disk. Use this for Microsoft Learn module, because we have\n",
|
||||
"# prepared all required files for you.\n",
|
||||
"bert_model = './bert'\n",
|
||||
"\n",
|
||||
"tokenizer = transformers.BertTokenizer.from_pretrained(bert_model)\n",
|
||||
"\n",
|
||||
"MAX_SEQ_LEN = 128\n",
|
||||
"PAD_INDEX = tokenizer.convert_tokens_to_ids(tokenizer.pad_token)\n",
|
||||
"UNK_INDEX = tokenizer.convert_tokens_to_ids(tokenizer.unk_token)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"`tokenizer` ഒബ്ജക്റ്റിൽ `encode` ഫംഗ്ഷൻ ഉൾപ്പെടുന്നു, ഇത് ടെക്സ്റ്റ് എൻകോഡ് ചെയ്യാൻ നേരിട്ട് ഉപയോഗിക്കാം:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[101, 1052, 22123, 2953, 2818, 2003, 1037, 2307, 7705, 2005, 17953, 2361, 102]"
|
||||
]
|
||||
},
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"tokenizer.encode('PyTorch is a great framework for NLP')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"അപ്പോൾ, പരിശീലനത്തിനിടെ ഡാറ്റ ആക്സസ് ചെയ്യാൻ ഉപയോഗിക്കുന്ന ഇറ്ററേറ്ററുകൾ സൃഷ്ടിക്കാം. BERT അതിന്റെ സ്വന്തം എൻകോഡിംഗ് ഫംഗ്ഷൻ ഉപയോഗിക്കുന്നതിനാൽ, മുമ്പ് നാം നിർവചിച്ച `padify` പോലുള്ള ഒരു പാഡിംഗ് ഫംഗ്ഷൻ നിർവചിക്കേണ്ടതുണ്ട്:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def pad_bert(b):\n",
|
||||
" # b is the list of tuples of length batch_size\n",
|
||||
" # - first element of a tuple = label, \n",
|
||||
" # - second = feature (text sequence)\n",
|
||||
" # build vectorized sequence\n",
|
||||
" v = [tokenizer.encode(x[1]) for x in b]\n",
|
||||
" # compute max length of a sequence in this minibatch\n",
|
||||
" l = max(map(len,v))\n",
|
||||
" return ( # tuple of two tensors - labels and features\n",
|
||||
" torch.LongTensor([t[0] for t in b]),\n",
|
||||
" torch.stack([torch.nn.functional.pad(torch.tensor(t),(0,l-len(t)),mode='constant',value=0) for t in v])\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
"train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=8, collate_fn=pad_bert, shuffle=True)\n",
|
||||
"test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=8, collate_fn=pad_bert)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"നമ്മുടെ കേസിൽ, നാം `bert-base-uncased` എന്ന പേരിലുള്ള പ്രീ-ട്രെയിൻ ചെയ്ത BERT മോഡൽ ഉപയോഗിക്കും. `BertForSequenceClassification` പാക്കേജ് ഉപയോഗിച്ച് മോഡൽ ലോഡ് ചെയ്യാം. ഇത് നമ്മുടെ മോഡലിന് ക്ലാസിഫിക്കേഷനായി ആവശ്യമായ ആർക്കിടെക്ചർ, ഫൈനൽ ക്ലാസിഫയർ ഉൾപ്പെടെ, ഇതിനകം ഉണ്ടെന്ന് ഉറപ്പാക്കുന്നു. ഫൈനൽ ക്ലാസിഫയറിന്റെ വെയ്റ്റുകൾ ഇൻഷിയലൈസ് ചെയ്തിട്ടില്ലെന്നു കാണിക്കുന്ന മുന്നറിയിപ്പ് സന്ദേശം നിങ്ങൾക്ക് കാണാം, മോഡലിന് പ്രീ-ട്രെയിനിംഗ് ആവശ്യമുണ്ടെന്ന് പറയുന്നതും - അത് പൂർണ്ണമായും ശരിയാണ്, കാരണം നാം ചെയ്യാൻ പോകുന്നത് അതേയാണ്!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Some weights of the model checkpoint at ./bert were not used when initializing BertForSequenceClassification: ['cls.predictions.bias', 'cls.predictions.transform.dense.weight', 'cls.predictions.transform.dense.bias', 'cls.predictions.decoder.weight', 'cls.seq_relationship.weight', 'cls.seq_relationship.bias', 'cls.predictions.transform.LayerNorm.weight', 'cls.predictions.transform.LayerNorm.bias']\n",
|
||||
"- This IS expected if you are initializing BertForSequenceClassification from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
|
||||
"- This IS NOT expected if you are initializing BertForSequenceClassification from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n",
|
||||
"Some weights of BertForSequenceClassification were not initialized from the model checkpoint at ./bert and are newly initialized: ['classifier.weight', 'classifier.bias']\n",
|
||||
"You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = transformers.BertForSequenceClassification.from_pretrained(bert_model,num_labels=4).to(device)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ഇപ്പോൾ നാം പരിശീലനം ആരംഭിക്കാൻ തയ്യാറാണ്! BERT ഇതിനകം പ്രീ-ട്രെയിൻ ചെയ്തതിനാൽ, പ്രാരംഭ ഭാരങ്ങൾ നശിപ്പിക്കാതിരിക്കാൻ ചെറിയ ലേണിംഗ് റേറ്റ് ഉപയോഗിച്ച് തുടങ്ങാൻ ആഗ്രഹിക്കുന്നു.\n",
|
||||
"\n",
|
||||
"എല്ലാ കഠിനപ്രവർത്തനവും `BertForSequenceClassification` മോഡലാണ് നിർവഹിക്കുന്നത്. പരിശീലന ഡാറ്റയിൽ മോഡൽ വിളിക്കുമ്പോൾ, അത് ഇൻപുട്ട് മിനിബാച്ചിനുള്ള നഷ്ടവും നെറ്റ്വർക്ക് ഔട്ട്പുട്ടും നൽകുന്നു. പാരാമീറ്റർ ഒപ്റ്റിമൈസേഷനായി നഷ്ടം ഉപയോഗിക്കുന്നു (`loss.backward()` ബാക്ക്വേഡ് പാസ് നടത്തുന്നു), പരിശീലന കൃത്യത കണക്കാക്കാൻ `out` ഉപയോഗിക്കുന്നു, ലഭിച്ച ലേബലുകൾ `labs` (`argmax` ഉപയോഗിച്ച് കണക്കാക്കിയ) പ്രതീക്ഷിച്ച `labels`-നൊപ്പം താരതമ്യം ചെയ്ത്.\n",
|
||||
"\n",
|
||||
"പ്രക്രിയ നിയന്ത്രിക്കാൻ, നാം പല ഇറ്ററേഷനുകളിലായി നഷ്ടവും കൃത്യതയും സമാഹരിച്ച്, ഓരോ `report_freq` പരിശീലന ചക്രത്തിനും പ്രിന്റ് ചെയ്യുന്നു.\n",
|
||||
"\n",
|
||||
"ഈ പരിശീലനം വളരെ സമയം എടുക്കാൻ സാധ്യതയുള്ളതിനാൽ, നാം ഇറ്ററേഷനുകളുടെ എണ്ണം പരിമിതപ്പെടുത്തുന്നു.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Loss = 1.1254194641113282, Accuracy = 0.585\n",
|
||||
"Loss = 0.6194715118408203, Accuracy = 0.83\n",
|
||||
"Loss = 0.46665248870849607, Accuracy = 0.8475\n",
|
||||
"Loss = 0.4309701919555664, Accuracy = 0.8575\n",
|
||||
"Loss = 0.35427074432373046, Accuracy = 0.8825\n",
|
||||
"Loss = 0.3306886291503906, Accuracy = 0.8975\n",
|
||||
"Loss = 0.30340143203735354, Accuracy = 0.8975\n",
|
||||
"Loss = 0.26139299392700194, Accuracy = 0.915\n",
|
||||
"Loss = 0.26708646774291994, Accuracy = 0.9225\n",
|
||||
"Loss = 0.3667240524291992, Accuracy = 0.8675\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"optimizer = torch.optim.Adam(model.parameters(), lr=2e-5)\n",
|
||||
"\n",
|
||||
"report_freq = 50\n",
|
||||
"iterations = 500 # make this larger to train for longer time!\n",
|
||||
"\n",
|
||||
"model.train()\n",
|
||||
"\n",
|
||||
"i,c = 0,0\n",
|
||||
"acc_loss = 0\n",
|
||||
"acc_acc = 0\n",
|
||||
"\n",
|
||||
"for labels,texts in train_loader:\n",
|
||||
" labels = labels.to(device)-1 # get labels in the range 0-3 \n",
|
||||
" texts = texts.to(device)\n",
|
||||
" loss, out = model(texts, labels=labels)[:2]\n",
|
||||
" labs = out.argmax(dim=1)\n",
|
||||
" acc = torch.mean((labs==labels).type(torch.float32))\n",
|
||||
" optimizer.zero_grad()\n",
|
||||
" loss.backward()\n",
|
||||
" optimizer.step()\n",
|
||||
" acc_loss += loss\n",
|
||||
" acc_acc += acc\n",
|
||||
" i+=1\n",
|
||||
" c+=1\n",
|
||||
" if i%report_freq==0:\n",
|
||||
" print(f\"Loss = {acc_loss.item()/c}, Accuracy = {acc_acc.item()/c}\")\n",
|
||||
" c = 0\n",
|
||||
" acc_loss = 0\n",
|
||||
" acc_acc = 0\n",
|
||||
" iterations-=1\n",
|
||||
" if not iterations:\n",
|
||||
" break"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"നിങ്ങൾക്ക് കാണാം (പ്രത്യേകിച്ച് നിങ്ങൾ ഇറ്ററേഷനുകളുടെ എണ്ണം വർദ്ധിപ്പിച്ച് മതിയായ സമയം കാത്തിരിക്കുമ്പോൾ) BERT ക്ലാസിഫിക്കേഷൻ നമുക്ക് നല്ല കൃത്യത നൽകുന്നു! അതിന്റെ കാരണം BERT ഭാഷയുടെ ഘടന വളരെ നന്നായി മനസ്സിലാക്കുന്നുണ്ടെന്നതാണ്, അതിനാൽ നമുക്ക് അവസാന ക്ലാസിഫയർ മാത്രം ഫൈൻ-ട്യൂൺ ചെയ്യേണ്ടതുണ്ട്. എന്നാൽ, BERT ഒരു വലിയ മോഡലായതിനാൽ, മുഴുവൻ പരിശീലന പ്രക്രിയയും ഏറെ സമയം എടുക്കുന്നു, കൂടാതെ ഗണനശേഷി (GPU, സാധാരണയായി ഒന്നിലധികം) ആവശ്യമാണ്!\n",
|
||||
"\n",
|
||||
"> **Note:** നമ്മുടെ ഉദാഹരണത്തിൽ, നാം ഏറ്റവും ചെറിയ പ്രീ-ട്രെയിൻ ചെയ്ത BERT മോഡലുകളിൽ ഒന്നാണ് ഉപയോഗിക്കുന്നത്. മികച്ച ഫലങ്ങൾ നൽകാൻ സാധ്യതയുള്ള വലിയ മോഡലുകളും ഉണ്ട്.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## മോഡൽ പ്രകടനം വിലയിരുത്തൽ\n",
|
||||
"\n",
|
||||
"ഇപ്പോൾ നാം ടെസ്റ്റ് ഡാറ്റാസെറ്റിൽ നമ്മുടെ മോഡലിന്റെ പ്രകടനം വിലയിരുത്താം. വിലയിരുത്തൽ ലൂപ്പ് പരിശീലന ലൂപ്പിനോട് വളരെ സമാനമാണ്, പക്ഷേ `model.eval()` വിളിച്ച് മോഡൽ വിലയിരുത്തൽ മോഡിലേക്ക് മാറ്റാൻ മറക്കരുത്.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Final accuracy: 0.9047029702970297\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.eval()\n",
|
||||
"iterations = 100\n",
|
||||
"acc = 0\n",
|
||||
"i = 0\n",
|
||||
"for labels,texts in test_loader:\n",
|
||||
" labels = labels.to(device)-1 \n",
|
||||
" texts = texts.to(device)\n",
|
||||
" _, out = model(texts, labels=labels)[:2]\n",
|
||||
" labs = out.argmax(dim=1)\n",
|
||||
" acc += torch.mean((labs==labels).type(torch.float32))\n",
|
||||
" i+=1\n",
|
||||
" if i>iterations: break\n",
|
||||
" \n",
|
||||
"print(f\"Final accuracy: {acc.item()/i}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## പ്രധാനപ്പെട്ട കാര്യങ്ങൾ\n",
|
||||
"\n",
|
||||
"ഈ യൂണിറ്റിൽ, **transformers** ലൈബ്രറിയിൽ നിന്നുള്ള മുൻകൂട്ടി പരിശീലിച്ച ഭാഷാ മോഡൽ എളുപ്പത്തിൽ എടുക്കുകയും അത് നമ്മുടെ ടെക്സ്റ്റ് ക്ലാസിഫിക്കേഷൻ ടാസ്ക്കിനായി അനുയോജ്യമായി മാറ്റുകയും ചെയ്യുന്നത് എങ്ങനെ എന്നത് കണ്ടു. അതുപോലെ, BERT മോഡലുകൾ എന്റിറ്റി എക്സ്ട്രാക്ഷൻ, ചോദ്യോത്തരങ്ങൾ, മറ്റ് NLP ടാസ്കുകൾ എന്നിവയ്ക്കും ഉപയോഗിക്കാം.\n",
|
||||
"\n",
|
||||
"Transformer മോഡലുകൾ NLP-യിലെ ഏറ്റവും പുതിയ സാങ്കേതികവിദ്യ പ്രതിനിധീകരിക്കുന്നു, കൂടാതെ അധികം കേസുകളിൽ കസ്റ്റം NLP പരിഹാരങ്ങൾ നടപ്പിലാക്കുമ്പോൾ പരീക്ഷണം ആരംഭിക്കേണ്ട ആദ്യ പരിഹാരമായിരിക്കണം. എന്നിരുന്നാലും, ഈ മഡ്യൂളിൽ ചർച്ച ചെയ്ത റികറന്റ് ന്യൂറൽ നെറ്റ്വർക്കുകളുടെ അടിസ്ഥാന സിദ്ധാന്തങ്ങൾ മനസിലാക്കുന്നത്, നിങ്ങൾക്ക് ഉയർന്ന തലത്തിലുള്ള ന്യൂറൽ മോഡലുകൾ നിർമ്മിക്കാനാഗ്രഹിക്കുന്നുവെങ്കിൽ വളരെ പ്രധാനമാണ്.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**അസൂയാ**: \nഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റായ വിവരങ്ങൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "py37_pytorch",
|
||||
"language": "python",
|
||||
"name": "conda-env-py37_pytorch-py"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.7.7"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "753865967678a92dbce7d7efbd36d980",
|
||||
"translation_date": "2025-11-26T02:20:45+00:00",
|
||||
"source_file": "lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb",
|
||||
"language_code": "ml"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,98 +1,98 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "6522312ff835796ca34136a9462fafb2",
|
||||
"translation_date": "2025-11-25T23:17:23+00:00",
|
||||
"source_file": "lessons/5-NLP/19-NER/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# നെയിംഡ് എന്റിറ്റി റെക്കഗ്നിഷൻ
|
||||
|
||||
ഇതുവരെ, നാം പ്രധാനമായും ഒരു NLP ടാസ്കായ ക്ലാസിഫിക്കേഷനിൽ ശ്രദ്ധ കേന്ദ്രീകരിച്ചിരുന്നു. എന്നാൽ, ന്യൂറൽ നെറ്റ്വർക്കുകൾ ഉപയോഗിച്ച് പൂർത്തിയാക്കാവുന്ന മറ്റ് NLP ടാസ്കുകളും ഉണ്ട്. അവയിൽ ഒന്നാണ് **[നെയിംഡ് എന്റിറ്റി റെക്കഗ്നിഷൻ](https://wikipedia.org/wiki/Named-entity_recognition)** (NER), ഇത് ടെക്സ്റ്റിനുള്ളിൽ പ്രത്യേക എന്റിറ്റികൾ തിരിച്ചറിയുന്നതുമായി ബന്ധപ്പെട്ടതാണ്, ഉദാഹരണത്തിന് സ്ഥലങ്ങൾ, വ്യക്തി പേരുകൾ, തീയതി-സമയം ഇടവേളകൾ, രാസ സൂത്രവാക്യങ്ങൾ തുടങ്ങിയവ.
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/37)
|
||||
|
||||
## NER ഉപയോഗിക്കുന്ന ഉദാഹരണം
|
||||
|
||||
നിങ്ങൾക്ക് ആമസോൺ അലക്സാ അല്ലെങ്കിൽ ഗൂഗിൾ അസിസ്റ്റന്റ് പോലുള്ള ഒരു നാച്ചുറൽ ലാംഗ്വേജ് ചാറ്റ് ബോട്ട് വികസിപ്പിക്കണമെന്ന് കരുതുക. ബുദ്ധിമുട്ടുള്ള ചാറ്റ് ബോട്ടുകൾ പ്രവർത്തിക്കുന്നത് ഉപയോക്താവ് എന്ത് ആഗ്രഹിക്കുന്നു എന്ന് *അർത്ഥമാക്കുന്നതിലൂടെ* ആണ്, ഇൻപുട്ട് വാക്യത്തിൽ ടെക്സ്റ്റ് ക്ലാസിഫിക്കേഷൻ നടത്തിയാണ് ഇത് സാധ്യമാകുന്നത്. ഈ ക്ലാസിഫിക്കേഷന്റെ ഫലം **ഇന്റന്റ്** എന്നറിയപ്പെടുന്നു, ഇത് ചാറ്റ് ബോട്ട് എന്ത് ചെയ്യണമെന്ന് നിർണ്ണയിക്കുന്നു.
|
||||
|
||||
<img alt="Bot NER" src="../../../../../translated_images/bot-ner.4b09235dbb0ad2754ec1f54c8c797f902cbb0b45ac90b0cfc8287343cef8df2f.ml.png" width="50%"/>
|
||||
|
||||
> ചിത്രകാരൻ: ലേഖകൻ
|
||||
|
||||
എങ്കിലും, ഉപയോക്താവ് വാചകത്തിന്റെ ഭാഗമായ ചില പാരാമീറ്ററുകൾ നൽകാം. ഉദാഹരണത്തിന്, കാലാവസ്ഥ ചോദിക്കുമ്പോൾ, അവൾ ഒരു സ്ഥലം അല്ലെങ്കിൽ തീയതി വ്യക്തമാക്കാം. ബോട്ട് ആ എന്റിറ്റികൾ മനസ്സിലാക്കി, പ്രവർത്തനം നടത്തുന്നതിന് മുമ്പ് പാരാമീറ്റർ സ്ലോട്ടുകൾ പൂരിപ്പിക്കണം. ഇതാണ് NERയുടെ പ്രധാന പങ്ക്.
|
||||
|
||||
> ✅ മറ്റൊരു ഉദാഹരണം [ശാസ്ത്രീയ മെഡിക്കൽ പേപ്പറുകൾ വിശകലനം ചെയ്യൽ](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/) ആണ്. പ്രധാനമായി നോക്കേണ്ടത് പ്രത്യേക മെഡിക്കൽ പദങ്ങൾ, രോഗങ്ങൾ, മെഡിക്കൽ സബ്സ്റ്റാൻസുകൾ എന്നിവയാണ്. കുറച്ച് രോഗങ്ങൾ സബ്സ്റ്റ്രിംഗ് സെർച്ച് ഉപയോഗിച്ച് കണ്ടെത്താനാകാമെങ്കിലും, രാസ സംയുക്തങ്ങൾ, മരുന്ന് പേരുകൾ പോലുള്ള കൂടുതൽ സങ്കീർണ്ണ എന്റിറ്റികൾക്ക് കൂടുതൽ സങ്കീർണ്ണമായ സമീപനം ആവശ്യമാണ്.
|
||||
|
||||
## NER ടോക്കൺ ക്ലാസിഫിക്കേഷനായി
|
||||
|
||||
NER മോഡലുകൾ അടിസ്ഥാനത്തിൽ **ടോക്കൺ ക്ലാസിഫിക്കേഷൻ മോഡലുകളാണ്**, കാരണം ഓരോ ഇൻപുട്ട് ടോക്കണിനും അത് ഒരു എന്റിറ്റിയിലാണോ അല്ലയോ എന്ന് തീരുമാനിക്കണം, എങ്കിൽ ഏത് എന്റിറ്റി ക്ലാസിലാണെന്ന് നിർണ്ണയിക്കണം.
|
||||
|
||||
താഴെ കാണുന്ന പേപ്പർ തലക്കെട്ട് പരിഗണിക്കൂ:
|
||||
|
||||
**ട്രൈകസ്പിഡ് വാൽവ് റീഗർജിറ്റേഷൻ**യും **ലിഥിയം കാർബണേറ്റ്** **ടോക്സിസിറ്റി**യും ഒരു പുതുതായി ജനിച്ച ശിശുവിൽ.
|
||||
|
||||
ഇവിടെ എന്റിറ്റികൾ:
|
||||
|
||||
* ട്രൈകസ്പിഡ് വാൽവ് റീഗർജിറ്റേഷൻ ഒരു രോഗമാണ് (`DIS`)
|
||||
* ലിഥിയം കാർബണേറ്റ് ഒരു രാസ പദാർത്ഥമാണ് (`CHEM`)
|
||||
* ടോക്സിസിറ്റി ഒരു രോഗവുമാണ് (`DIS`)
|
||||
|
||||
ഒരു എന്റിറ്റി പല ടോക്കണുകളിലായി വ്യാപിച്ചിരിക്കാം. ഈ സാഹചര്യത്തിൽ, രണ്ട് തുടർച്ചയായ എന്റിറ്റികൾ തമ്മിൽ വ്യത്യാസപ്പെടുത്തേണ്ടതുണ്ട്. അതിനാൽ, ഓരോ എന്റിറ്റിക്കും രണ്ട് ക്ലാസുകൾ ഉപയോഗിക്കുന്നത് സാധാരണമാണ് - ഒരു ടോക്കൺ എന്റിറ്റിയുടെ ആദ്യ ടോക്കൺ ആണെന്ന് സൂചിപ്പിക്കുന്നതിന് (അധികം ഉപയോഗിക്കുന്നത് `B-` പ്രിഫിക്സ്, **b**eginning), മറ്റൊന്ന് എന്റിറ്റിയുടെ തുടർച്ച ( `I-`, **i**nner ടോക്കൺ). എല്ലാ മറ്റ് ടോക്കണുകൾക്കായി `O` ക്ലാസ് ഉപയോഗിക്കുന്നു. ഇത്തരത്തിലുള്ള ടോക്കൺ ടാഗിംഗ് [BIO ടാഗിംഗ്](https://en.wikipedia.org/wiki/Inside%E2%80%93outside%E2%80%93beginning_(tagging)) (അഥവാ IOB) എന്ന് വിളിക്കുന്നു. ടാഗ് ചെയ്താൽ, നമ്മുടെ തലക്കെട്ട് ഇങ്ങനെ കാണപ്പെടും:
|
||||
|
||||
ടോക്കൺ | ടാഗ്
|
||||
------|-----
|
||||
Tricuspid | B-DIS
|
||||
valve | I-DIS
|
||||
regurgitation | I-DIS
|
||||
and | O
|
||||
lithium | B-CHEM
|
||||
carbonate | I-CHEM
|
||||
toxicity | B-DIS
|
||||
in | O
|
||||
a | O
|
||||
newborn | O
|
||||
infant | O
|
||||
. | O
|
||||
|
||||
ടോക്കണുകളും ക്ലാസുകളും തമ്മിൽ ഒന്ന് ഒന്ന് പൊരുത്തപ്പെടുത്തേണ്ടതിനാൽ, ഈ ചിത്രത്തിൽ നിന്ന് ഒരു വലതുവശത്തെ **many-to-many** ന്യൂറൽ നെറ്റ്വർക്ക് മോഡൽ പരിശീലിപ്പിക്കാം:
|
||||
|
||||

|
||||
|
||||
> *ചിത്രം [ഈ ബ്ലോഗ് പോസ്റ്റ്](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) ൽ നിന്നുള്ളതാണ്, ലേഖകൻ [Andrej Karpathy](http://karpathy.github.io/). NER ടോക്കൺ ക്ലാസിഫിക്കേഷൻ മോഡലുകൾ ഈ ചിത്രത്തിലെ വലതുവശത്തെ നെറ്റ്വർക്ക് ആർക്കിടെക്ചറിനോട് പൊരുത്തപ്പെടുന്നു.*
|
||||
|
||||
## NER മോഡലുകൾ പരിശീലിപ്പിക്കൽ
|
||||
|
||||
NER മോഡൽ അടിസ്ഥാനത്തിൽ ടോക്കൺ ക്ലാസിഫിക്കേഷൻ മോഡലായതിനാൽ, നാം ഇതിനായി പരിചിതമായ RNNകൾ ഉപയോഗിക്കാം. ഈ സാഹചര്യത്തിൽ, ഓരോ റികറന്റ് നെറ്റ്വർക്ക് ബ്ലോക്കും ടോക്കൺ ഐഡി നൽകും. താഴെ കാണുന്ന ഉദാഹരണ നോട്ട്ബുക്ക് LSTM ഉപയോഗിച്ച് ടോക്കൺ ക്ലാസിഫിക്കേഷൻ എങ്ങനെ പരിശീലിപ്പിക്കാമെന്ന് കാണിക്കുന്നു.
|
||||
|
||||
## ✍️ ഉദാഹരണ നോട്ട്ബുക്കുകൾ: NER
|
||||
|
||||
താഴെ കാണുന്ന നോട്ട്ബുക്കിൽ നിങ്ങളുടെ പഠനം തുടരുക:
|
||||
|
||||
* [TensorFlow ഉപയോഗിച്ച് NER](NER-TF.ipynb)
|
||||
|
||||
## സംഗ്രഹം
|
||||
|
||||
NER മോഡൽ ഒരു **ടോക്കൺ ക്ലാസിഫിക്കേഷൻ മോഡലാണ്**, അതായത് ടോക്കൺ ക്ലാസിഫിക്കേഷൻ നടത്താൻ ഇത് ഉപയോഗിക്കാം. ഇത് NLPയിൽ വളരെ സാധാരണമായ ഒരു ടാസ്കാണ്, ടെക്സ്റ്റിനുള്ളിൽ പ്രത്യേക എന്റിറ്റികൾ തിരിച്ചറിയാൻ സഹായിക്കുന്നു, ഉദാഹരണത്തിന് സ്ഥലങ്ങൾ, പേരുകൾ, തീയതികൾ തുടങ്ങിയവ.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
താഴെ നൽകിയിരിക്കുന്ന അസൈൻമെന്റ് പൂർത്തിയാക്കി മെഡിക്കൽ പദങ്ങൾക്കുള്ള നെയിംഡ് എന്റിറ്റി റെക്കഗ്നിഷൻ മോഡൽ പരിശീലിപ്പിക്കുക, പിന്നീട് അത് വ്യത്യസ്ത ഡാറ്റാസെറ്റിൽ പരീക്ഷിക്കുക.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/38)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
[The Unreasonable Effectiveness of Recurrent Neural Networks](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) എന്ന ബ്ലോഗ് വായിച്ച്, ആ ലേഖനത്തിലെ Further Reading വിഭാഗം പിന്തുടർന്ന് നിങ്ങളുടെ അറിവ് കൂടുതൽ ആഴത്തിൽ വികസിപ്പിക്കുക.
|
||||
|
||||
## [അസൈൻമെന്റ്](lab/README.md)
|
||||
|
||||
ഈ പാഠത്തിനുള്ള അസൈൻമെന്റിൽ, നിങ്ങൾ ഒരു മെഡിക്കൽ എന്റിറ്റി റെക്കഗ്നിഷൻ മോഡൽ പരിശീലിപ്പിക്കേണ്ടതാണ്. ഈ പാഠത്തിൽ വിവരിച്ച പോലെ LSTM മോഡൽ പരിശീലിപ്പിച്ച് തുടങ്ങാം, തുടർന്ന് BERT ട്രാൻസ്ഫോർമർ മോഡൽ ഉപയോഗിക്കാം. എല്ലാ വിശദാംശങ്ങൾക്കായി [നിർദ്ദേശങ്ങൾ](lab/README.md) വായിക്കുക.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാപത്രം**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, യന്ത്രം ചെയ്ത വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് കരുതേണ്ടതാണ്. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ വ്യാഖ്യാനക്കേടുകൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "6522312ff835796ca34136a9462fafb2",
|
||||
"translation_date": "2025-11-25T23:17:23+00:00",
|
||||
"source_file": "lessons/5-NLP/19-NER/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# നെയിംഡ് എന്റിറ്റി റെക്കഗ്നിഷൻ
|
||||
|
||||
ഇതുവരെ, നാം പ്രധാനമായും ഒരു NLP ടാസ്കായ ക്ലാസിഫിക്കേഷനിൽ ശ്രദ്ധ കേന്ദ്രീകരിച്ചിരുന്നു. എന്നാൽ, ന്യൂറൽ നെറ്റ്വർക്കുകൾ ഉപയോഗിച്ച് പൂർത്തിയാക്കാവുന്ന മറ്റ് NLP ടാസ്കുകളും ഉണ്ട്. അവയിൽ ഒന്നാണ് **[നെയിംഡ് എന്റിറ്റി റെക്കഗ്നിഷൻ](https://wikipedia.org/wiki/Named-entity_recognition)** (NER), ഇത് ടെക്സ്റ്റിനുള്ളിൽ പ്രത്യേക എന്റിറ്റികൾ തിരിച്ചറിയുന്നതുമായി ബന്ധപ്പെട്ടതാണ്, ഉദാഹരണത്തിന് സ്ഥലങ്ങൾ, വ്യക്തി പേരുകൾ, തീയതി-സമയം ഇടവേളകൾ, രാസ സൂത്രവാക്യങ്ങൾ തുടങ്ങിയവ.
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/37)
|
||||
|
||||
## NER ഉപയോഗിക്കുന്ന ഉദാഹരണം
|
||||
|
||||
നിങ്ങൾക്ക് ആമസോൺ അലക്സാ അല്ലെങ്കിൽ ഗൂഗിൾ അസിസ്റ്റന്റ് പോലുള്ള ഒരു നാച്ചുറൽ ലാംഗ്വേജ് ചാറ്റ് ബോട്ട് വികസിപ്പിക്കണമെന്ന് കരുതുക. ബുദ്ധിമുട്ടുള്ള ചാറ്റ് ബോട്ടുകൾ പ്രവർത്തിക്കുന്നത് ഉപയോക്താവ് എന്ത് ആഗ്രഹിക്കുന്നു എന്ന് *അർത്ഥമാക്കുന്നതിലൂടെ* ആണ്, ഇൻപുട്ട് വാക്യത്തിൽ ടെക്സ്റ്റ് ക്ലാസിഫിക്കേഷൻ നടത്തിയാണ് ഇത് സാധ്യമാകുന്നത്. ഈ ക്ലാസിഫിക്കേഷന്റെ ഫലം **ഇന്റന്റ്** എന്നറിയപ്പെടുന്നു, ഇത് ചാറ്റ് ബോട്ട് എന്ത് ചെയ്യണമെന്ന് നിർണ്ണയിക്കുന്നു.
|
||||
|
||||
<img alt="Bot NER" src="../../../../../translated_images/bot-ner.4b09235dbb0ad275.ml.png" width="50%"/>
|
||||
|
||||
> ചിത്രകാരൻ: ലേഖകൻ
|
||||
|
||||
എങ്കിലും, ഉപയോക്താവ് വാചകത്തിന്റെ ഭാഗമായ ചില പാരാമീറ്ററുകൾ നൽകാം. ഉദാഹരണത്തിന്, കാലാവസ്ഥ ചോദിക്കുമ്പോൾ, അവൾ ഒരു സ്ഥലം അല്ലെങ്കിൽ തീയതി വ്യക്തമാക്കാം. ബോട്ട് ആ എന്റിറ്റികൾ മനസ്സിലാക്കി, പ്രവർത്തനം നടത്തുന്നതിന് മുമ്പ് പാരാമീറ്റർ സ്ലോട്ടുകൾ പൂരിപ്പിക്കണം. ഇതാണ് NERയുടെ പ്രധാന പങ്ക്.
|
||||
|
||||
> ✅ മറ്റൊരു ഉദാഹരണം [ശാസ്ത്രീയ മെഡിക്കൽ പേപ്പറുകൾ വിശകലനം ചെയ്യൽ](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/) ആണ്. പ്രധാനമായി നോക്കേണ്ടത് പ്രത്യേക മെഡിക്കൽ പദങ്ങൾ, രോഗങ്ങൾ, മെഡിക്കൽ സബ്സ്റ്റാൻസുകൾ എന്നിവയാണ്. കുറച്ച് രോഗങ്ങൾ സബ്സ്റ്റ്രിംഗ് സെർച്ച് ഉപയോഗിച്ച് കണ്ടെത്താനാകാമെങ്കിലും, രാസ സംയുക്തങ്ങൾ, മരുന്ന് പേരുകൾ പോലുള്ള കൂടുതൽ സങ്കീർണ്ണ എന്റിറ്റികൾക്ക് കൂടുതൽ സങ്കീർണ്ണമായ സമീപനം ആവശ്യമാണ്.
|
||||
|
||||
## NER ടോക്കൺ ക്ലാസിഫിക്കേഷനായി
|
||||
|
||||
NER മോഡലുകൾ അടിസ്ഥാനത്തിൽ **ടോക്കൺ ക്ലാസിഫിക്കേഷൻ മോഡലുകളാണ്**, കാരണം ഓരോ ഇൻപുട്ട് ടോക്കണിനും അത് ഒരു എന്റിറ്റിയിലാണോ അല്ലയോ എന്ന് തീരുമാനിക്കണം, എങ്കിൽ ഏത് എന്റിറ്റി ക്ലാസിലാണെന്ന് നിർണ്ണയിക്കണം.
|
||||
|
||||
താഴെ കാണുന്ന പേപ്പർ തലക്കെട്ട് പരിഗണിക്കൂ:
|
||||
|
||||
**ട്രൈകസ്പിഡ് വാൽവ് റീഗർജിറ്റേഷൻ**യും **ലിഥിയം കാർബണേറ്റ്** **ടോക്സിസിറ്റി**യും ഒരു പുതുതായി ജനിച്ച ശിശുവിൽ.
|
||||
|
||||
ഇവിടെ എന്റിറ്റികൾ:
|
||||
|
||||
* ട്രൈകസ്പിഡ് വാൽവ് റീഗർജിറ്റേഷൻ ഒരു രോഗമാണ് (`DIS`)
|
||||
* ലിഥിയം കാർബണേറ്റ് ഒരു രാസ പദാർത്ഥമാണ് (`CHEM`)
|
||||
* ടോക്സിസിറ്റി ഒരു രോഗവുമാണ് (`DIS`)
|
||||
|
||||
ഒരു എന്റിറ്റി പല ടോക്കണുകളിലായി വ്യാപിച്ചിരിക്കാം. ഈ സാഹചര്യത്തിൽ, രണ്ട് തുടർച്ചയായ എന്റിറ്റികൾ തമ്മിൽ വ്യത്യാസപ്പെടുത്തേണ്ടതുണ്ട്. അതിനാൽ, ഓരോ എന്റിറ്റിക്കും രണ്ട് ക്ലാസുകൾ ഉപയോഗിക്കുന്നത് സാധാരണമാണ് - ഒരു ടോക്കൺ എന്റിറ്റിയുടെ ആദ്യ ടോക്കൺ ആണെന്ന് സൂചിപ്പിക്കുന്നതിന് (അധികം ഉപയോഗിക്കുന്നത് `B-` പ്രിഫിക്സ്, **b**eginning), മറ്റൊന്ന് എന്റിറ്റിയുടെ തുടർച്ച ( `I-`, **i**nner ടോക്കൺ). എല്ലാ മറ്റ് ടോക്കണുകൾക്കായി `O` ക്ലാസ് ഉപയോഗിക്കുന്നു. ഇത്തരത്തിലുള്ള ടോക്കൺ ടാഗിംഗ് [BIO ടാഗിംഗ്](https://en.wikipedia.org/wiki/Inside%E2%80%93outside%E2%80%93beginning_(tagging)) (അഥവാ IOB) എന്ന് വിളിക്കുന്നു. ടാഗ് ചെയ്താൽ, നമ്മുടെ തലക്കെട്ട് ഇങ്ങനെ കാണപ്പെടും:
|
||||
|
||||
ടോക്കൺ | ടാഗ്
|
||||
------|-----
|
||||
Tricuspid | B-DIS
|
||||
valve | I-DIS
|
||||
regurgitation | I-DIS
|
||||
and | O
|
||||
lithium | B-CHEM
|
||||
carbonate | I-CHEM
|
||||
toxicity | B-DIS
|
||||
in | O
|
||||
a | O
|
||||
newborn | O
|
||||
infant | O
|
||||
. | O
|
||||
|
||||
ടോക്കണുകളും ക്ലാസുകളും തമ്മിൽ ഒന്ന് ഒന്ന് പൊരുത്തപ്പെടുത്തേണ്ടതിനാൽ, ഈ ചിത്രത്തിൽ നിന്ന് ഒരു വലതുവശത്തെ **many-to-many** ന്യൂറൽ നെറ്റ്വർക്ക് മോഡൽ പരിശീലിപ്പിക്കാം:
|
||||
|
||||

|
||||
|
||||
> *ചിത്രം [ഈ ബ്ലോഗ് പോസ്റ്റ്](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) ൽ നിന്നുള്ളതാണ്, ലേഖകൻ [Andrej Karpathy](http://karpathy.github.io/). NER ടോക്കൺ ക്ലാസിഫിക്കേഷൻ മോഡലുകൾ ഈ ചിത്രത്തിലെ വലതുവശത്തെ നെറ്റ്വർക്ക് ആർക്കിടെക്ചറിനോട് പൊരുത്തപ്പെടുന്നു.*
|
||||
|
||||
## NER മോഡലുകൾ പരിശീലിപ്പിക്കൽ
|
||||
|
||||
NER മോഡൽ അടിസ്ഥാനത്തിൽ ടോക്കൺ ക്ലാസിഫിക്കേഷൻ മോഡലായതിനാൽ, നാം ഇതിനായി പരിചിതമായ RNNകൾ ഉപയോഗിക്കാം. ഈ സാഹചര്യത്തിൽ, ഓരോ റികറന്റ് നെറ്റ്വർക്ക് ബ്ലോക്കും ടോക്കൺ ഐഡി നൽകും. താഴെ കാണുന്ന ഉദാഹരണ നോട്ട്ബുക്ക് LSTM ഉപയോഗിച്ച് ടോക്കൺ ക്ലാസിഫിക്കേഷൻ എങ്ങനെ പരിശീലിപ്പിക്കാമെന്ന് കാണിക്കുന്നു.
|
||||
|
||||
## ✍️ ഉദാഹരണ നോട്ട്ബുക്കുകൾ: NER
|
||||
|
||||
താഴെ കാണുന്ന നോട്ട്ബുക്കിൽ നിങ്ങളുടെ പഠനം തുടരുക:
|
||||
|
||||
* [TensorFlow ഉപയോഗിച്ച് NER](NER-TF.ipynb)
|
||||
|
||||
## സംഗ്രഹം
|
||||
|
||||
NER മോഡൽ ഒരു **ടോക്കൺ ക്ലാസിഫിക്കേഷൻ മോഡലാണ്**, അതായത് ടോക്കൺ ക്ലാസിഫിക്കേഷൻ നടത്താൻ ഇത് ഉപയോഗിക്കാം. ഇത് NLPയിൽ വളരെ സാധാരണമായ ഒരു ടാസ്കാണ്, ടെക്സ്റ്റിനുള്ളിൽ പ്രത്യേക എന്റിറ്റികൾ തിരിച്ചറിയാൻ സഹായിക്കുന്നു, ഉദാഹരണത്തിന് സ്ഥലങ്ങൾ, പേരുകൾ, തീയതികൾ തുടങ്ങിയവ.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
താഴെ നൽകിയിരിക്കുന്ന അസൈൻമെന്റ് പൂർത്തിയാക്കി മെഡിക്കൽ പദങ്ങൾക്കുള്ള നെയിംഡ് എന്റിറ്റി റെക്കഗ്നിഷൻ മോഡൽ പരിശീലിപ്പിക്കുക, പിന്നീട് അത് വ്യത്യസ്ത ഡാറ്റാസെറ്റിൽ പരീക്ഷിക്കുക.
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/38)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
[The Unreasonable Effectiveness of Recurrent Neural Networks](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) എന്ന ബ്ലോഗ് വായിച്ച്, ആ ലേഖനത്തിലെ Further Reading വിഭാഗം പിന്തുടർന്ന് നിങ്ങളുടെ അറിവ് കൂടുതൽ ആഴത്തിൽ വികസിപ്പിക്കുക.
|
||||
|
||||
## [അസൈൻമെന്റ്](lab/README.md)
|
||||
|
||||
ഈ പാഠത്തിനുള്ള അസൈൻമെന്റിൽ, നിങ്ങൾ ഒരു മെഡിക്കൽ എന്റിറ്റി റെക്കഗ്നിഷൻ മോഡൽ പരിശീലിപ്പിക്കേണ്ടതാണ്. ഈ പാഠത്തിൽ വിവരിച്ച പോലെ LSTM മോഡൽ പരിശീലിപ്പിച്ച് തുടങ്ങാം, തുടർന്ന് BERT ട്രാൻസ്ഫോർമർ മോഡൽ ഉപയോഗിക്കാം. എല്ലാ വിശദാംശങ്ങൾക്കായി [നിർദ്ദേശങ്ങൾ](lab/README.md) വായിക്കുക.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാപത്രം**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, യന്ത്രം ചെയ്ത വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് കരുതേണ്ടതാണ്. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ വ്യാഖ്യാനക്കേടുകൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,82 +1,82 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "8ef02a9318257ea140ed3ed74442096d",
|
||||
"translation_date": "2025-11-25T21:14:29+00:00",
|
||||
"source_file": "lessons/5-NLP/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# സ്വാഭാവിക ഭാഷാ പ്രോസസ്സിംഗ്
|
||||
|
||||

|
||||
|
||||
ഈ ഭാഗത്തിൽ, നാം **സ്വാഭാവിക ഭാഷാ പ്രോസസ്സിംഗ് (NLP)** സംബന്ധിച്ച ടാസ്കുകൾ കൈകാര്യം ചെയ്യാൻ ന്യൂറൽ നെറ്റ്വർക്കുകൾ ഉപയോഗിക്കുന്നതിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കും. കമ്പ്യൂട്ടറുകൾക്ക് പരിഹരിക്കാൻ കഴിയേണ്ട നിരവധി NLP പ്രശ്നങ്ങൾ ഉണ്ട്:
|
||||
|
||||
* **ടെക്സ്റ്റ് ക്ലാസിഫിക്കേഷൻ** എന്നത് ടെക്സ്റ്റ് സീക്വൻസുകളുമായി ബന്ധപ്പെട്ട ഒരു സാധാരണ ക്ലാസിഫിക്കേഷൻ പ്രശ്നമാണ്. ഉദാഹരണങ്ങൾ: ഇമെയിൽ സന്ദേശങ്ങളെ സ്പാം അല്ലെങ്കിൽ നോൺ-സ്പാം ആയി വേർതിരിക്കുക, അല്ലെങ്കിൽ ലേഖനങ്ങളെ സ്പോർട്, ബിസിനസ്, രാഷ്ട്രീയ തുടങ്ങിയ വിഭാഗങ്ങളായി വർഗ്ഗീകരിക്കുക. ചാറ്റ് ബോട്ടുകൾ വികസിപ്പിക്കുമ്പോൾ, ഉപയോക്താവ് പറയാൻ ഉദ്ദേശിച്ച കാര്യം മനസിലാക്കേണ്ടതുണ്ടാകാം — ഈ സാഹചര്യത്തിൽ നാം **ഇന്റന്റ് ക്ലാസിഫിക്കേഷൻ** കൈകാര്യം ചെയ്യുകയാണ്. പലപ്പോഴും, ഇന്റന്റ് ക്ലാസിഫിക്കേഷനിൽ നിരവധി വിഭാഗങ്ങൾ കൈകാര്യം ചെയ്യേണ്ടി വരും.
|
||||
* **സെന്റിമെന്റ് അനാലിസിസ്** ഒരു സാധാരണ റെഗ്രഷൻ പ്രശ്നമാണ്, ഇവിടെ ഒരു വാചകത്തിന്റെ അർത്ഥം എത്രത്തോളം പോസിറ്റീവ് അല്ലെങ്കിൽ നെഗറ്റീവ് ആണെന്ന് സൂചിപ്പിക്കുന്ന ഒരു സംഖ്യ (സെന്റിമെന്റ്) നമുക്ക് നൽകേണ്ടതുണ്ട്. സെന്റിമെന്റ് അനാലിസിസിന്റെ കൂടുതൽ പുരോഗമിച്ച രൂപമാണ് **അസ്പെക്ട്-ബേസ്ഡ് സെന്റിമെന്റ് അനാലിസിസ്** (ABSA), ഇവിടെ മുഴുവൻ വാചകത്തിന് പകരം അതിന്റെ വ്യത്യസ്ത ഭാഗങ്ങൾ (അസ്പെക്ടുകൾ) അനുസരിച്ച് സെന്റിമെന്റ് നൽകുന്നു, ഉദാ: *ഈ റസ്റ്റോറന്റിൽ, എനിക്ക് ഭക്ഷണം ഇഷ്ടമായി, പക്ഷേ അന്തരീക്ഷം ഭയങ്കരമായിരുന്നു*.
|
||||
* **നെയിംഡ് എന്റിറ്റി റെക്കഗ്നിഷൻ** (NER) എന്നത് ടെക്സ്റ്റിൽ നിന്നുള്ള പ്രത്യേക എന്റിറ്റികൾ കണ്ടെത്താനുള്ള പ്രശ്നമാണ്. ഉദാഹരണത്തിന്, *ഞാൻ നാളെ പാരിസിലേക്ക് പറക്കണം* എന്ന വാചകത്തിൽ *നാളെ* എന്നത് DATE (തീയതി) എന്നെ സൂചിപ്പിക്കുന്നു, *പാരിസ്* LOCATION (സ്ഥലം) ആണ്.
|
||||
* **കീവേഡ് എക്സ്ട്രാക്ഷൻ** NER പോലെയാണ്, പക്ഷേ നമുക്ക് പ്രത്യേക എന്റിറ്റി തരം മുൻപരിചയം ഇല്ലാതെ വാചകത്തിന്റെ അർത്ഥത്തിന് പ്രധാനപ്പെട്ട വാക്കുകൾ സ്വയം കണ്ടെത്തേണ്ടതുണ്ട്.
|
||||
* **ടെക്സ്റ്റ് ക്ലസ്റ്ററിംഗ്** സമാനമായ വാചകങ്ങൾ കൂട്ടമായി ഗ്രൂപ്പ് ചെയ്യാൻ ഉപകാരപ്പെടും, ഉദാഹരണത്തിന്, ടെക്നിക്കൽ സപ്പോർട്ട് സംഭാഷണങ്ങളിൽ സമാനമായ അഭ്യർത്ഥനകൾ.
|
||||
* **ക്വഷൻ ആൻസറിംഗ്** ഒരു മോഡലിന് ഒരു പ്രത്യേക ചോദ്യത്തിന് ഉത്തരം നൽകാനുള്ള കഴിവാണ്. മോഡൽ ഒരു ടെക്സ്റ്റ് പാസേജ്, ഒരു ചോദ്യവും ഇൻപുട്ടായി സ്വീകരിച്ച്, ചോദ്യത്തിന് ഉത്തരം ഉള്ള ടെക്സ്റ്റിലെ സ്ഥലം കണ്ടെത്തണം (അല്ലെങ്കിൽ ചിലപ്പോൾ ഉത്തരം സ്വയം സൃഷ്ടിക്കണം).
|
||||
* **ടെക്സ്റ്റ് ജനറേഷൻ** ഒരു മോഡലിന് പുതിയ ടെക്സ്റ്റ് സൃഷ്ടിക്കാനുള്ള കഴിവാണ്. ഇത് ഒരു ക്ലാസിഫിക്കേഷൻ ടാസ്കായി കണക്കാക്കാം, ഒരു *ടെക്സ്റ്റ് പ്രോംപ്റ്റ്* അടിസ്ഥാനമാക്കി അടുത്ത അക്ഷരം/വാക്ക് പ്രവചിക്കുന്നത്. GPT-3 പോലുള്ള പുരോഗമിച്ച ടെക്സ്റ്റ് ജനറേഷൻ മോഡലുകൾ [prompt programming](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) അല്ലെങ്കിൽ [prompt engineering](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29) എന്ന സാങ്കേതിക വിദ്യ ഉപയോഗിച്ച് മറ്റ് NLP ടാസ്കുകളും പരിഹരിക്കാൻ കഴിയും.
|
||||
* **ടെക്സ്റ്റ് സംഗ്രഹണം** കമ്പ്യൂട്ടർ ഒരു നീണ്ട ടെക്സ്റ്റ് "വായിച്ച്" അതിന്റെ പ്രധാനപ്പെട്ട ഭാഗങ്ങൾ കുറച്ച് വാചകങ്ങളായി സംഗ്രഹിക്കുന്ന സാങ്കേതിക വിദ്യയാണ്.
|
||||
* **മെഷീൻ ട്രാൻസ്ലേഷൻ** ഒരു ഭാഷയിൽ ടെക്സ്റ്റ് മനസിലാക്കലും മറ്റൊരു ഭാഷയിൽ ടെക്സ്റ്റ് സൃഷ്ടിക്കലും ചേർന്ന ഒരു പ്രക്രിയയായി കാണാം.
|
||||
|
||||
ആദ്യകാലത്ത്, NLP ടാസ്കുകൾ പ്രധാനമായും വ്യാകരണങ്ങൾ പോലുള്ള പരമ്പരാഗത രീതികൾ ഉപയോഗിച്ച് പരിഹരിക്കപ്പെട്ടിരുന്നു. ഉദാഹരണത്തിന്, മെഷീൻ ട്രാൻസ്ലേഷനിൽ പാഴ്സറുകൾ ഉപയോഗിച്ച് പ്രാരംഭ വാചകം സിന്റാക്സ് ട്രീയിലേക്ക് മാറ്റി, പിന്നീട് വാചകത്തിന്റെ അർത്ഥം പ്രതിനിധീകരിക്കുന്ന ഉയർന്ന തലത്തിലുള്ള സെമാന്റിക് ഘടനകൾ കണ്ടെത്തി, ആ അർത്ഥവും ലക്ഷ്യഭാഷയുടെ വ്യാകരണവും അടിസ്ഥാനമാക്കി ഫലം സൃഷ്ടിച്ചിരുന്നു. ഇന്നത്തെ കാലത്ത്, പല NLP ടാസ്കുകളും ന്യൂറൽ നെറ്റ്വർക്കുകൾ ഉപയോഗിച്ച് കൂടുതൽ ഫലപ്രദമായി പരിഹരിക്കപ്പെടുന്നു.
|
||||
|
||||
> പല ക്ലാസിക്കൽ NLP രീതികളും [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) പൈതൺ ലൈബ്രറിയിൽ നടപ്പിലാക്കിയിട്ടുണ്ട്. വിവിധ NLP ടാസ്കുകൾ NLTK ഉപയോഗിച്ച് എങ്ങനെ പരിഹരിക്കാമെന്ന് വിശദീകരിക്കുന്ന മികച്ച [NLTK ബുക്ക്](https://www.nltk.org/book/) ഓൺലൈനിൽ ലഭ്യമാണ്.
|
||||
|
||||
നമ്മുടെ കോഴ്സിൽ, നാം പ്രധാനമായും NLP-ക്കായി ന്യൂറൽ നെറ്റ്വർക്കുകൾ ഉപയോഗിക്കുന്നതിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കും, ആവശ്യമായിടത്ത് NLTK ഉപയോഗിക്കും.
|
||||
|
||||
നാം ഇതിനകം ടാബുലാർ ഡാറ്റയും ചിത്രങ്ങളും കൈകാര്യം ചെയ്യാൻ ന്യൂറൽ നെറ്റ്വർക്കുകൾ ഉപയോഗിക്കുന്നതിനെക്കുറിച്ച് പഠിച്ചിട്ടുണ്ട്. ആ ഡാറ്റാ തരം들과 ടെക്സ്റ്റ് തമ്മിലുള്ള പ്രധാന വ്യത്യാസം, ടെക്സ്റ്റ് ഒരു വ്യത്യസ്ത നീളമുള്ള സീക്വൻസാണ്, എന്നാൽ ചിത്രങ്ങളുടെ ഇൻപുട്ട് വലുപ്പം മുൻകൂട്ടി അറിയപ്പെടുന്നു. കോൺവല്യൂഷണൽ നെറ്റ്വർക്കുകൾ ഇൻപുട്ടിൽ നിന്നുള്ള പാറ്റേണുകൾ കണ്ടെത്താൻ കഴിയും, പക്ഷേ ടെക്സ്റ്റിലെ പാറ്റേണുകൾ കൂടുതൽ സങ്കീർണ്ണമാണ്. ഉദാ: നിഷേധം വിഷയം മുതൽ അകലെ പല വാക്കുകൾക്കായി വേർതിരിക്കപ്പെട്ടാലും (ഉദാ: *I do not like oranges* vs. *I do not like those big colorful tasty oranges*), അത് ഒരേ പാറ്റേണായി വ്യാഖ്യാനിക്കണം. അതിനാൽ, ഭാഷ കൈകാര്യം ചെയ്യാൻ നാം പുതിയ ന്യൂറൽ നെറ്റ്വർക്ക് തരംകൾ, ഉദാ: *റികറന്റ് നെറ്റ്വർക്കുകൾ* (RNN)യും *ട്രാൻസ്ഫോർമറുകളും* പരിചയപ്പെടുത്തേണ്ടതുണ്ട്.
|
||||
|
||||
## ലൈബ്രറികൾ ഇൻസ്റ്റാൾ ചെയ്യുക
|
||||
|
||||
നിങ്ങൾ ഈ കോഴ്സ് റൺ ചെയ്യാൻ ലോക്കൽ പൈതൺ ഇൻസ്റ്റലേഷൻ ഉപയോഗിക്കുന്നുവെങ്കിൽ, താഴെ കാണുന്ന കമാൻഡുകൾ ഉപയോഗിച്ച് NLP-ക്കായി ആവശ്യമായ എല്ലാ ലൈബ്രറികളും ഇൻസ്റ്റാൾ ചെയ്യേണ്ടതുണ്ടാകും:
|
||||
|
||||
**PyTorch-ക്കായി**
|
||||
```bash
|
||||
pip install -r requirements-torch.txt
|
||||
```
|
||||
**TensorFlow-ക്കായി**
|
||||
```bash
|
||||
pip install -r requirements-tf.txt
|
||||
```
|
||||
|
||||
> TensorFlow ഉപയോഗിച്ച് NLP പരീക്ഷിക്കാൻ [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste) സന്ദർശിക്കാം
|
||||
|
||||
## GPU മുന്നറിയിപ്പ്
|
||||
|
||||
ഈ ഭാഗത്തിൽ, ചില ഉദാഹരണങ്ങളിൽ നാം വളരെ വലിയ മോഡലുകൾ പരിശീലിപ്പിക്കും.
|
||||
* **GPU-സഹായമുള്ള കമ്പ്യൂട്ടർ ഉപയോഗിക്കുക**: വലിയ മോഡലുകളുമായി ജോലി ചെയ്യുമ്പോൾ കാത്തിരിപ്പു കുറയ്ക്കാൻ GPU-സഹായമുള്ള കമ്പ്യൂട്ടറിൽ നിങ്ങളുടെ നോട്ട്ബുക്കുകൾ പ്രവർത്തിപ്പിക്കുന്നത് ഉചിതമാണ്.
|
||||
* **GPU മെമ്മറി പരിമിതികൾ**: വലിയ മോഡലുകൾ പരിശീലിപ്പിക്കുമ്പോൾ GPU മെമ്മറി തീരാൻ സാധ്യതയുണ്ട്.
|
||||
* **GPU മെമ്മറി ഉപയോഗം**: പരിശീലന സമയത്ത് GPU മെമ്മറി ഉപയോഗം മിനിബാച്ച് വലുപ്പം പോലുള്ള പല ഘടകങ്ങളിൽ ആശ്രയിച്ചിരിക്കും.
|
||||
* **മിനിബാച്ച് വലുപ്പം കുറയ്ക്കുക**: GPU മെമ്മറി പ്രശ്നങ്ങൾ നേരിടുമ്പോൾ, കോഡിൽ മിനിബാച്ച് വലുപ്പം കുറയ്ക്കുന്നത് പരിഹാരമായി പരിഗണിക്കാം.
|
||||
* **TensorFlow GPU മെമ്മറി റിലീസ്**: പഴയ TensorFlow പതിപ്പുകൾ ഒരേ പൈതൺ കർണലിൽ പല മോഡലുകളും പരിശീലിപ്പിക്കുമ്പോൾ GPU മെമ്മറി ശരിയായി റിലീസ് ചെയ്യാതെ പോകാം. GPU മെമ്മറി ഉപയോഗം കാര്യക്ഷമമായി നിയന്ത്രിക്കാൻ TensorFlow-നെ ആവശ്യത്തിന് മാത്രമേ GPU മെമ്മറി അനുവദിക്കൂവാൻ ക്രമീകരിക്കാം.
|
||||
* **കോഡ് ഉൾപ്പെടുത്തൽ**: TensorFlow GPU മെമ്മറി ആവശ്യത്തിന് മാത്രമേ വർദ്ധിപ്പിക്കൂവാൻ താഴെ കാണുന്ന കോഡ് നിങ്ങളുടെ നോട്ട്ബുക്കുകളിൽ ഉൾപ്പെടുത്തുക:
|
||||
|
||||
```python
|
||||
physical_devices = tf.config.list_physical_devices('GPU')
|
||||
if len(physical_devices)>0:
|
||||
tf.config.experimental.set_memory_growth(physical_devices[0], True)
|
||||
```
|
||||
|
||||
ക്ലാസിക്കൽ മെഷീൻ ലേണിംഗ് ദൃഷ്ടികോണത്തിൽ നിന്ന് NLP പഠിക്കാൻ താൽപര്യമുണ്ടെങ്കിൽ, [ഈ പാഠമാല](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP) സന്ദർശിക്കുക
|
||||
|
||||
## ഈ ഭാഗത്തിൽ
|
||||
ഈ ഭാഗത്തിൽ നാം പഠിക്കേണ്ടത്:
|
||||
|
||||
* [ടെക്സ്റ്റ് ടെൻസറുകളായി പ്രതിനിധീകരിക്കൽ](13-TextRep/README.md)
|
||||
* [വാക്ക് എംബെഡ്ഡിംഗുകൾ](14-Emdeddings/README.md)
|
||||
* [ഭാഷാ മോഡലിംഗ്](15-LanguageModeling/README.md)
|
||||
* [റികറന്റ് ന്യൂറൽ നെറ്റ്വർക്കുകൾ](16-RNN/README.md)
|
||||
* [ജനറേറ്റീവ് നെറ്റ്വർക്കുകൾ](17-GenerativeNetworks/README.md)
|
||||
* [ട്രാൻസ്ഫോർമറുകൾ](18-Transformers/README.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "8ef02a9318257ea140ed3ed74442096d",
|
||||
"translation_date": "2025-11-25T21:14:29+00:00",
|
||||
"source_file": "lessons/5-NLP/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# സ്വാഭാവിക ഭാഷാ പ്രോസസ്സിംഗ്
|
||||
|
||||

|
||||
|
||||
ഈ ഭാഗത്തിൽ, നാം **സ്വാഭാവിക ഭാഷാ പ്രോസസ്സിംഗ് (NLP)** സംബന്ധിച്ച ടാസ്കുകൾ കൈകാര്യം ചെയ്യാൻ ന്യൂറൽ നെറ്റ്വർക്കുകൾ ഉപയോഗിക്കുന്നതിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കും. കമ്പ്യൂട്ടറുകൾക്ക് പരിഹരിക്കാൻ കഴിയേണ്ട നിരവധി NLP പ്രശ്നങ്ങൾ ഉണ്ട്:
|
||||
|
||||
* **ടെക്സ്റ്റ് ക്ലാസിഫിക്കേഷൻ** എന്നത് ടെക്സ്റ്റ് സീക്വൻസുകളുമായി ബന്ധപ്പെട്ട ഒരു സാധാരണ ക്ലാസിഫിക്കേഷൻ പ്രശ്നമാണ്. ഉദാഹരണങ്ങൾ: ഇമെയിൽ സന്ദേശങ്ങളെ സ്പാം അല്ലെങ്കിൽ നോൺ-സ്പാം ആയി വേർതിരിക്കുക, അല്ലെങ്കിൽ ലേഖനങ്ങളെ സ്പോർട്, ബിസിനസ്, രാഷ്ട്രീയ തുടങ്ങിയ വിഭാഗങ്ങളായി വർഗ്ഗീകരിക്കുക. ചാറ്റ് ബോട്ടുകൾ വികസിപ്പിക്കുമ്പോൾ, ഉപയോക്താവ് പറയാൻ ഉദ്ദേശിച്ച കാര്യം മനസിലാക്കേണ്ടതുണ്ടാകാം — ഈ സാഹചര്യത്തിൽ നാം **ഇന്റന്റ് ക്ലാസിഫിക്കേഷൻ** കൈകാര്യം ചെയ്യുകയാണ്. പലപ്പോഴും, ഇന്റന്റ് ക്ലാസിഫിക്കേഷനിൽ നിരവധി വിഭാഗങ്ങൾ കൈകാര്യം ചെയ്യേണ്ടി വരും.
|
||||
* **സെന്റിമെന്റ് അനാലിസിസ്** ഒരു സാധാരണ റെഗ്രഷൻ പ്രശ്നമാണ്, ഇവിടെ ഒരു വാചകത്തിന്റെ അർത്ഥം എത്രത്തോളം പോസിറ്റീവ് അല്ലെങ്കിൽ നെഗറ്റീവ് ആണെന്ന് സൂചിപ്പിക്കുന്ന ഒരു സംഖ്യ (സെന്റിമെന്റ്) നമുക്ക് നൽകേണ്ടതുണ്ട്. സെന്റിമെന്റ് അനാലിസിസിന്റെ കൂടുതൽ പുരോഗമിച്ച രൂപമാണ് **അസ്പെക്ട്-ബേസ്ഡ് സെന്റിമെന്റ് അനാലിസിസ്** (ABSA), ഇവിടെ മുഴുവൻ വാചകത്തിന് പകരം അതിന്റെ വ്യത്യസ്ത ഭാഗങ്ങൾ (അസ്പെക്ടുകൾ) അനുസരിച്ച് സെന്റിമെന്റ് നൽകുന്നു, ഉദാ: *ഈ റസ്റ്റോറന്റിൽ, എനിക്ക് ഭക്ഷണം ഇഷ്ടമായി, പക്ഷേ അന്തരീക്ഷം ഭയങ്കരമായിരുന്നു*.
|
||||
* **നെയിംഡ് എന്റിറ്റി റെക്കഗ്നിഷൻ** (NER) എന്നത് ടെക്സ്റ്റിൽ നിന്നുള്ള പ്രത്യേക എന്റിറ്റികൾ കണ്ടെത്താനുള്ള പ്രശ്നമാണ്. ഉദാഹരണത്തിന്, *ഞാൻ നാളെ പാരിസിലേക്ക് പറക്കണം* എന്ന വാചകത്തിൽ *നാളെ* എന്നത് DATE (തീയതി) എന്നെ സൂചിപ്പിക്കുന്നു, *പാരിസ്* LOCATION (സ്ഥലം) ആണ്.
|
||||
* **കീവേഡ് എക്സ്ട്രാക്ഷൻ** NER പോലെയാണ്, പക്ഷേ നമുക്ക് പ്രത്യേക എന്റിറ്റി തരം മുൻപരിചയം ഇല്ലാതെ വാചകത്തിന്റെ അർത്ഥത്തിന് പ്രധാനപ്പെട്ട വാക്കുകൾ സ്വയം കണ്ടെത്തേണ്ടതുണ്ട്.
|
||||
* **ടെക്സ്റ്റ് ക്ലസ്റ്ററിംഗ്** സമാനമായ വാചകങ്ങൾ കൂട്ടമായി ഗ്രൂപ്പ് ചെയ്യാൻ ഉപകാരപ്പെടും, ഉദാഹരണത്തിന്, ടെക്നിക്കൽ സപ്പോർട്ട് സംഭാഷണങ്ങളിൽ സമാനമായ അഭ്യർത്ഥനകൾ.
|
||||
* **ക്വഷൻ ആൻസറിംഗ്** ഒരു മോഡലിന് ഒരു പ്രത്യേക ചോദ്യത്തിന് ഉത്തരം നൽകാനുള്ള കഴിവാണ്. മോഡൽ ഒരു ടെക്സ്റ്റ് പാസേജ്, ഒരു ചോദ്യവും ഇൻപുട്ടായി സ്വീകരിച്ച്, ചോദ്യത്തിന് ഉത്തരം ഉള്ള ടെക്സ്റ്റിലെ സ്ഥലം കണ്ടെത്തണം (അല്ലെങ്കിൽ ചിലപ്പോൾ ഉത്തരം സ്വയം സൃഷ്ടിക്കണം).
|
||||
* **ടെക്സ്റ്റ് ജനറേഷൻ** ഒരു മോഡലിന് പുതിയ ടെക്സ്റ്റ് സൃഷ്ടിക്കാനുള്ള കഴിവാണ്. ഇത് ഒരു ക്ലാസിഫിക്കേഷൻ ടാസ്കായി കണക്കാക്കാം, ഒരു *ടെക്സ്റ്റ് പ്രോംപ്റ്റ്* അടിസ്ഥാനമാക്കി അടുത്ത അക്ഷരം/വാക്ക് പ്രവചിക്കുന്നത്. GPT-3 പോലുള്ള പുരോഗമിച്ച ടെക്സ്റ്റ് ജനറേഷൻ മോഡലുകൾ [prompt programming](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) അല്ലെങ്കിൽ [prompt engineering](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29) എന്ന സാങ്കേതിക വിദ്യ ഉപയോഗിച്ച് മറ്റ് NLP ടാസ്കുകളും പരിഹരിക്കാൻ കഴിയും.
|
||||
* **ടെക്സ്റ്റ് സംഗ്രഹണം** കമ്പ്യൂട്ടർ ഒരു നീണ്ട ടെക്സ്റ്റ് "വായിച്ച്" അതിന്റെ പ്രധാനപ്പെട്ട ഭാഗങ്ങൾ കുറച്ച് വാചകങ്ങളായി സംഗ്രഹിക്കുന്ന സാങ്കേതിക വിദ്യയാണ്.
|
||||
* **മെഷീൻ ട്രാൻസ്ലേഷൻ** ഒരു ഭാഷയിൽ ടെക്സ്റ്റ് മനസിലാക്കലും മറ്റൊരു ഭാഷയിൽ ടെക്സ്റ്റ് സൃഷ്ടിക്കലും ചേർന്ന ഒരു പ്രക്രിയയായി കാണാം.
|
||||
|
||||
ആദ്യകാലത്ത്, NLP ടാസ്കുകൾ പ്രധാനമായും വ്യാകരണങ്ങൾ പോലുള്ള പരമ്പരാഗത രീതികൾ ഉപയോഗിച്ച് പരിഹരിക്കപ്പെട്ടിരുന്നു. ഉദാഹരണത്തിന്, മെഷീൻ ട്രാൻസ്ലേഷനിൽ പാഴ്സറുകൾ ഉപയോഗിച്ച് പ്രാരംഭ വാചകം സിന്റാക്സ് ട്രീയിലേക്ക് മാറ്റി, പിന്നീട് വാചകത്തിന്റെ അർത്ഥം പ്രതിനിധീകരിക്കുന്ന ഉയർന്ന തലത്തിലുള്ള സെമാന്റിക് ഘടനകൾ കണ്ടെത്തി, ആ അർത്ഥവും ലക്ഷ്യഭാഷയുടെ വ്യാകരണവും അടിസ്ഥാനമാക്കി ഫലം സൃഷ്ടിച്ചിരുന്നു. ഇന്നത്തെ കാലത്ത്, പല NLP ടാസ്കുകളും ന്യൂറൽ നെറ്റ്വർക്കുകൾ ഉപയോഗിച്ച് കൂടുതൽ ഫലപ്രദമായി പരിഹരിക്കപ്പെടുന്നു.
|
||||
|
||||
> പല ക്ലാസിക്കൽ NLP രീതികളും [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) പൈതൺ ലൈബ്രറിയിൽ നടപ്പിലാക്കിയിട്ടുണ്ട്. വിവിധ NLP ടാസ്കുകൾ NLTK ഉപയോഗിച്ച് എങ്ങനെ പരിഹരിക്കാമെന്ന് വിശദീകരിക്കുന്ന മികച്ച [NLTK ബുക്ക്](https://www.nltk.org/book/) ഓൺലൈനിൽ ലഭ്യമാണ്.
|
||||
|
||||
നമ്മുടെ കോഴ്സിൽ, നാം പ്രധാനമായും NLP-ക്കായി ന്യൂറൽ നെറ്റ്വർക്കുകൾ ഉപയോഗിക്കുന്നതിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കും, ആവശ്യമായിടത്ത് NLTK ഉപയോഗിക്കും.
|
||||
|
||||
നാം ഇതിനകം ടാബുലാർ ഡാറ്റയും ചിത്രങ്ങളും കൈകാര്യം ചെയ്യാൻ ന്യൂറൽ നെറ്റ്വർക്കുകൾ ഉപയോഗിക്കുന്നതിനെക്കുറിച്ച് പഠിച്ചിട്ടുണ്ട്. ആ ഡാറ്റാ തരം들과 ടെക്സ്റ്റ് തമ്മിലുള്ള പ്രധാന വ്യത്യാസം, ടെക്സ്റ്റ് ഒരു വ്യത്യസ്ത നീളമുള്ള സീക്വൻസാണ്, എന്നാൽ ചിത്രങ്ങളുടെ ഇൻപുട്ട് വലുപ്പം മുൻകൂട്ടി അറിയപ്പെടുന്നു. കോൺവല്യൂഷണൽ നെറ്റ്വർക്കുകൾ ഇൻപുട്ടിൽ നിന്നുള്ള പാറ്റേണുകൾ കണ്ടെത്താൻ കഴിയും, പക്ഷേ ടെക്സ്റ്റിലെ പാറ്റേണുകൾ കൂടുതൽ സങ്കീർണ്ണമാണ്. ഉദാ: നിഷേധം വിഷയം മുതൽ അകലെ പല വാക്കുകൾക്കായി വേർതിരിക്കപ്പെട്ടാലും (ഉദാ: *I do not like oranges* vs. *I do not like those big colorful tasty oranges*), അത് ഒരേ പാറ്റേണായി വ്യാഖ്യാനിക്കണം. അതിനാൽ, ഭാഷ കൈകാര്യം ചെയ്യാൻ നാം പുതിയ ന്യൂറൽ നെറ്റ്വർക്ക് തരംകൾ, ഉദാ: *റികറന്റ് നെറ്റ്വർക്കുകൾ* (RNN)യും *ട്രാൻസ്ഫോർമറുകളും* പരിചയപ്പെടുത്തേണ്ടതുണ്ട്.
|
||||
|
||||
## ലൈബ്രറികൾ ഇൻസ്റ്റാൾ ചെയ്യുക
|
||||
|
||||
നിങ്ങൾ ഈ കോഴ്സ് റൺ ചെയ്യാൻ ലോക്കൽ പൈതൺ ഇൻസ്റ്റലേഷൻ ഉപയോഗിക്കുന്നുവെങ്കിൽ, താഴെ കാണുന്ന കമാൻഡുകൾ ഉപയോഗിച്ച് NLP-ക്കായി ആവശ്യമായ എല്ലാ ലൈബ്രറികളും ഇൻസ്റ്റാൾ ചെയ്യേണ്ടതുണ്ടാകും:
|
||||
|
||||
**PyTorch-ക്കായി**
|
||||
```bash
|
||||
pip install -r requirements-torch.txt
|
||||
```
|
||||
**TensorFlow-ക്കായി**
|
||||
```bash
|
||||
pip install -r requirements-tf.txt
|
||||
```
|
||||
|
||||
> TensorFlow ഉപയോഗിച്ച് NLP പരീക്ഷിക്കാൻ [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste) സന്ദർശിക്കാം
|
||||
|
||||
## GPU മുന്നറിയിപ്പ്
|
||||
|
||||
ഈ ഭാഗത്തിൽ, ചില ഉദാഹരണങ്ങളിൽ നാം വളരെ വലിയ മോഡലുകൾ പരിശീലിപ്പിക്കും.
|
||||
* **GPU-സഹായമുള്ള കമ്പ്യൂട്ടർ ഉപയോഗിക്കുക**: വലിയ മോഡലുകളുമായി ജോലി ചെയ്യുമ്പോൾ കാത്തിരിപ്പു കുറയ്ക്കാൻ GPU-സഹായമുള്ള കമ്പ്യൂട്ടറിൽ നിങ്ങളുടെ നോട്ട്ബുക്കുകൾ പ്രവർത്തിപ്പിക്കുന്നത് ഉചിതമാണ്.
|
||||
* **GPU മെമ്മറി പരിമിതികൾ**: വലിയ മോഡലുകൾ പരിശീലിപ്പിക്കുമ്പോൾ GPU മെമ്മറി തീരാൻ സാധ്യതയുണ്ട്.
|
||||
* **GPU മെമ്മറി ഉപയോഗം**: പരിശീലന സമയത്ത് GPU മെമ്മറി ഉപയോഗം മിനിബാച്ച് വലുപ്പം പോലുള്ള പല ഘടകങ്ങളിൽ ആശ്രയിച്ചിരിക്കും.
|
||||
* **മിനിബാച്ച് വലുപ്പം കുറയ്ക്കുക**: GPU മെമ്മറി പ്രശ്നങ്ങൾ നേരിടുമ്പോൾ, കോഡിൽ മിനിബാച്ച് വലുപ്പം കുറയ്ക്കുന്നത് പരിഹാരമായി പരിഗണിക്കാം.
|
||||
* **TensorFlow GPU മെമ്മറി റിലീസ്**: പഴയ TensorFlow പതിപ്പുകൾ ഒരേ പൈതൺ കർണലിൽ പല മോഡലുകളും പരിശീലിപ്പിക്കുമ്പോൾ GPU മെമ്മറി ശരിയായി റിലീസ് ചെയ്യാതെ പോകാം. GPU മെമ്മറി ഉപയോഗം കാര്യക്ഷമമായി നിയന്ത്രിക്കാൻ TensorFlow-നെ ആവശ്യത്തിന് മാത്രമേ GPU മെമ്മറി അനുവദിക്കൂവാൻ ക്രമീകരിക്കാം.
|
||||
* **കോഡ് ഉൾപ്പെടുത്തൽ**: TensorFlow GPU മെമ്മറി ആവശ്യത്തിന് മാത്രമേ വർദ്ധിപ്പിക്കൂവാൻ താഴെ കാണുന്ന കോഡ് നിങ്ങളുടെ നോട്ട്ബുക്കുകളിൽ ഉൾപ്പെടുത്തുക:
|
||||
|
||||
```python
|
||||
physical_devices = tf.config.list_physical_devices('GPU')
|
||||
if len(physical_devices)>0:
|
||||
tf.config.experimental.set_memory_growth(physical_devices[0], True)
|
||||
```
|
||||
|
||||
ക്ലാസിക്കൽ മെഷീൻ ലേണിംഗ് ദൃഷ്ടികോണത്തിൽ നിന്ന് NLP പഠിക്കാൻ താൽപര്യമുണ്ടെങ്കിൽ, [ഈ പാഠമാല](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP) സന്ദർശിക്കുക
|
||||
|
||||
## ഈ ഭാഗത്തിൽ
|
||||
ഈ ഭാഗത്തിൽ നാം പഠിക്കേണ്ടത്:
|
||||
|
||||
* [ടെക്സ്റ്റ് ടെൻസറുകളായി പ്രതിനിധീകരിക്കൽ](13-TextRep/README.md)
|
||||
* [വാക്ക് എംബെഡ്ഡിംഗുകൾ](14-Emdeddings/README.md)
|
||||
* [ഭാഷാ മോഡലിംഗ്](15-LanguageModeling/README.md)
|
||||
* [റികറന്റ് ന്യൂറൽ നെറ്റ്വർക്കുകൾ](16-RNN/README.md)
|
||||
* [ജനറേറ്റീവ് നെറ്റ്വർക്കുകൾ](17-GenerativeNetworks/README.md)
|
||||
* [ട്രാൻസ്ഫോർമറുകൾ](18-Transformers/README.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,130 +1,130 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "04395657fc01648f8f70484d0e55ab67",
|
||||
"translation_date": "2025-11-25T23:32:07+00:00",
|
||||
"source_file": "lessons/6-Other/22-DeepRL/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ഡീപ് റീഇൻഫോഴ്സ്മെന്റ് ലേണിംഗ്
|
||||
|
||||
റീഇൻഫോഴ്സ്മെന്റ് ലേണിംഗ് (RL) സൂപ്പർവൈസ്ഡ് ലേണിംഗിനും അൺസൂപ്പർവൈസ്ഡ് ലേണിംഗിനും പുറമേ ഒരു അടിസ്ഥാന മെഷീൻ ലേണിംഗ് പാരഡൈം ആയി കണക്കാക്കപ്പെടുന്നു. സൂപ്പർവൈസ്ഡ് ലേണിംഗിൽ നമുക്ക് ഫലങ്ങൾ അറിയപ്പെടുന്ന ഡാറ്റാസെറ്റിൽ ആശ്രയിക്കേണ്ടതുണ്ടെങ്കിലും, RL **ചെയ്യുന്നതിലൂടെ പഠിക്കുന്നതിൽ** ആധാരിതമാണ്. ഉദാഹരണത്തിന്, ഒരു കമ്പ്യൂട്ടർ ഗെയിം ആദ്യമായി കാണുമ്പോൾ, നാം നിയമങ്ങൾ അറിയാതെ പോലും കളിക്കാൻ തുടങ്ങുകയും, കളിച്ചുകൊണ്ടിരിക്കുമ്പോൾ നമ്മുടെ കഴിവുകൾ മെച്ചപ്പെടുത്താൻ കഴിയും.
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/43)
|
||||
|
||||
RL നടത്താൻ നമുക്ക് ആവശ്യമായത്:
|
||||
|
||||
* ഗെയിമിന്റെ നിയമങ്ങൾ നിശ്ചയിക്കുന്ന ഒരു **പരിസ്ഥിതി** അല്ലെങ്കിൽ **സിമുലേറ്റർ**. സിമുലേറ്ററിൽ പരീക്ഷണങ്ങൾ നടത്താനും ഫലങ്ങൾ നിരീക്ഷിക്കാനും കഴിയണം.
|
||||
* പരീക്ഷണം എത്രത്തോളം വിജയകരമായിരുന്നുവെന്ന് സൂചിപ്പിക്കുന്ന ഒരു **റിവാർഡ് ഫംഗ്ഷൻ**. കമ്പ്യൂട്ടർ ഗെയിം കളിക്കാൻ പഠിക്കുമ്പോൾ, റിവാർഡ് നമ്മുടെ അന്തിമ സ്കോർ ആയിരിക്കും.
|
||||
|
||||
റിവാർഡ് ഫംഗ്ഷൻ അടിസ്ഥാനമാക്കി, നാം നമ്മുടെ പെരുമാറ്റം ക്രമീകരിച്ച് കഴിവുകൾ മെച്ചപ്പെടുത്തണം, അതിനാൽ അടുത്ത തവണ നാം മികച്ച രീതിയിൽ കളിക്കാനാകും. മറ്റ് മെഷീൻ ലേണിംഗ് തരംകളിൽ നിന്നും RL-യുടെ പ്രധാന വ്യത്യാസം, RL-യിൽ നാം സാധാരണയായി ഗെയിം അവസാനിപ്പിക്കാതെ ജയിച്ചോ തോറ്റോ എന്ന് അറിയില്ല എന്നതാണ്. അതിനാൽ, ഒരു പ്രത്യേക നീക്കം മാത്രം നല്ലതാണോ അല്ലയോ എന്ന് പറയാനാകില്ല - ഗെയിം അവസാനത്തിൽ മാത്രമേ നമുക്ക് റിവാർഡ് ലഭിക്കൂ.
|
||||
|
||||
RL നടത്തുമ്പോൾ, നാം സാധാരണയായി നിരവധി പരീക്ഷണങ്ങൾ നടത്തുന്നു. ഓരോ പരീക്ഷണത്തിലും, നാം ഇതുവരെ പഠിച്ച ഏറ്റവും മികച്ച തന്ത്രം പിന്തുടരുന്നതും (**exploitation**) പുതിയ സാധ്യതകൾ അന്വേഷിക്കുന്നതും (**exploration**) തമ്മിൽ സമതുലനം പാലിക്കണം.
|
||||
|
||||
## OpenAI Gym
|
||||
|
||||
RL-ക്കായി മികച്ച ഉപകരണം [OpenAI Gym](https://gym.openai.com/) ആണ് - ഇത് ഒരു **സിമുലേഷൻ പരിസ്ഥിതി** ആണ്, അതിൽ അറ്റാരി ഗെയിമുകളിൽ നിന്ന് പോൾ ബാലൻസിംഗ് പിന്നിലെ ഭൗതികശാസ്ത്രം വരെ പല പരിസ്ഥിതികളും സിമുലേറ്റ് ചെയ്യാം. ഇത് റീഇൻഫോഴ്സ്മെന്റ് ലേണിംഗ് ആൽഗോരിതങ്ങൾ പരിശീലിപ്പിക്കാൻ ഏറ്റവും ജനപ്രിയമായ സിമുലേഷൻ പരിസ്ഥിതികളിൽ ഒന്നാണ്, [OpenAI](https://openai.com/) ആണ് ഇതിന്റെ പരിപാലകൻ.
|
||||
|
||||
> **Note**: OpenAI Gym-ൽ ലഭ്യമായ എല്ലാ പരിസ്ഥിതികളും [ഇവിടെ](https://gym.openai.com/envs/#classic_control) കാണാം.
|
||||
|
||||
## കാർട്ട്പോൾ ബാലൻസിംഗ്
|
||||
|
||||
നിങ്ങൾക്ക് സെഗ്വേ അല്ലെങ്കിൽ ജൈറോസ്കൂട്ടറുകൾ പോലുള്ള ആധുനിക ബാലൻസിംഗ് ഉപകരണങ്ങൾ കാണാമായിരിക്കും. അവ ഓട്ടോമാറ്റിക്കായി വീലുകൾ ക്രമീകരിച്ച് ബാലൻസ് നിലനിർത്തുന്നു, അത് ആക്സിലറോമീറ്റർ അല്ലെങ്കിൽ ജൈറോസ്കോപ്പ് സിഗ്നലിനെ അടിസ്ഥാനമാക്കിയാണ്. ഈ ഭാഗത്ത്, നാം സമാനമായ ഒരു പ്രശ്നം പരിഹരിക്കാൻ പഠിക്കും - ഒരു പോൾ ബാലൻസ് ചെയ്യുക. ഇത് ഒരു സിർകസ് കലാകാരൻ തന്റെ കൈയിൽ പോൾ ബാലൻസ് ചെയ്യേണ്ട സാഹചര്യം പോലെയാണ്, പക്ഷേ ഇത് 1D-യിൽ മാത്രമാണ്.
|
||||
|
||||
ബാലൻസിംഗ് ഒരു ലളിതമായ പതിപ്പ് **കാർട്ട്പോൾ** പ്രശ്നമായി അറിയപ്പെടുന്നു. കാർട്ട്പോൾ ലോകത്ത്, ഒരു ഹോരിസോണ്ടൽ സ്ലൈഡർ ഇടത്തോ വലത്തോ നീങ്ങാൻ കഴിയും, സ്ലൈഡറിന്റെ മുകളിൽ ഒരു വെർട്ടിക്കൽ പോൾ ബാലൻസ് ചെയ്യുകയാണ് ലക്ഷ്യം.
|
||||
|
||||
<img alt="a cartpole" src="../../../../../translated_images/cartpole.f52a67f27e058170c25efc1bca8375b60906570ea757fe8d7ef04ae8e53df29d.ml.png" width="200"/>
|
||||
|
||||
ഈ പരിസ്ഥിതി സൃഷ്ടിക്കുകയും ഉപയോഗിക്കുകയും ചെയ്യാൻ, നമുക്ക് പൈതൺ കോഡിന്റെ കുറച്ച് വരികൾ ആവശ്യമാണ്:
|
||||
|
||||
```python
|
||||
import gym
|
||||
env = gym.make("CartPole-v1")
|
||||
|
||||
env.reset()
|
||||
done = False
|
||||
total_reward = 0
|
||||
while not done:
|
||||
env.render()
|
||||
action = env.action_space.sample()
|
||||
observaton, reward, done, info = env.step(action)
|
||||
total_reward += reward
|
||||
|
||||
print(f"Total reward: {total_reward}")
|
||||
```
|
||||
|
||||
ഓരോ പരിസ്ഥിതിയിലും സമാനമായ രീതിയിൽ ആക്സസ് ചെയ്യാം:
|
||||
* `env.reset` പുതിയ പരീക്ഷണം ആരംഭിക്കുന്നു
|
||||
* `env.step` ഒരു സിമുലേഷൻ ഘട്ടം നടത്തുന്നു. ഇത് **ആക്ഷൻ സ്പേസ്**-ൽ നിന്നുള്ള ഒരു **ആക്ഷൻ** സ്വീകരിക്കുകയും, **ഓബ്സർവേഷൻ സ്പേസ്**-ൽ നിന്നുള്ള **ഓബ്സർവേഷൻ**, കൂടാതെ റിവാർഡ്, ടെർമിനേഷൻ ഫ്ലാഗ് എന്നിവ തിരികെ നൽകുകയും ചെയ്യുന്നു.
|
||||
|
||||
മുകളിൽ കാണിച്ച ഉദാഹരണത്തിൽ, ഓരോ ഘട്ടത്തിലും നാം യാദൃച്ഛിക ആക്ഷൻ സ്വീകരിക്കുന്നതിനാൽ പരീക്ഷണത്തിന്റെ ആയുസ്സ് വളരെ ചെറുതാണ്:
|
||||
|
||||

|
||||
|
||||
RL ആൽഗോരിതത്തിന്റെ ലക്ഷ്യം ഒരു മോഡൽ - **പോളിസി** π - പരിശീലിപ്പിക്കുകയാണ്, അത് നൽകിയ സ്റ്റേറ്റിന് പ്രതികരിച്ച് ആക്ഷൻ തിരികെ നൽകും. പോളിസി പ്രൊബബിലിസ്റ്റിക് ആകാമെന്ന് കൂടി പരിഗണിക്കാം, ഉദാ: ഏതെങ്കിലും സ്റ്റേറ്റ് *s*ക്കും ആക്ഷൻ *a*ക്കും, ആക്ഷൻ *a* സ്വീകരിക്കാനുള്ള സാധ്യത π(*a*|*s*) നൽകും.
|
||||
|
||||
## പോളിസി ഗ്രാഡിയന്റ് ആൽഗോരിതം
|
||||
|
||||
പോളിസി മോഡലാക്കാനുള്ള ഏറ്റവും വ്യക്തമായ മാർഗം, സ്റ്റേറ്റുകൾ ഇൻപുട്ടായി സ്വീകരിച്ച് അനുയോജ്യമായ ആക്ഷനുകൾ (അല്ലെങ്കിൽ ആക്ഷനുകളുടെ സാധ്യതകൾ) തിരികെ നൽകുന്ന ഒരു ന്യൂറൽ നെറ്റ്വർക്ക് സൃഷ്ടിക്കുകയാണ്. ഒരു അർത്ഥത്തിൽ, ഇത് സാധാരണ ക്ലാസിഫിക്കേഷൻ ടാസ്കിനോട് സാമ്യമുള്ളതാണ്, എന്നാൽ പ്രധാന വ്യത്യാസം - ഓരോ ഘട്ടത്തിലും എത്രയും നല്ല ആക്ഷൻ എടുക്കണമെന്ന് നമുക്ക് മുൻകൂട്ടി അറിയില്ല.
|
||||
|
||||
ഇവിടെ ആശയം ആ സാധ്യതകൾ കണക്കാക്കുകയാണ്. പരീക്ഷണത്തിലെ ഓരോ ഘട്ടത്തിലും നമുക്ക് ലഭിച്ച മൊത്തം റിവാർഡ് കാണിക്കുന്ന **ക്യൂമുലേറ്റീവ് റിവാർഡുകൾ** എന്ന വെക്ടർ നാം നിർമ്മിക്കുന്നു. കൂടാതെ, മുൻകാല റിവാർഡുകളുടെ പ്രാധാന്യം കുറയ്ക്കാൻ γ=0.99 എന്ന കോഫിഷ്യന്റ് ഉപയോഗിച്ച് **റിവാർഡ് ഡിസ്കൗണ്ടിംഗ്** പ്രയോഗിക്കുന്നു. തുടർന്ന്, പരീക്ഷണ പാതയിലെ ഉയർന്ന റിവാർഡ് നൽകുന്ന ഘട്ടങ്ങളെ ശക്തിപ്പെടുത്തുന്നു.
|
||||
|
||||
> പോളിസി ഗ്രാഡിയന്റ് ആൽഗോരിതത്തെക്കുറിച്ച് കൂടുതൽ അറിയാനും പ്രവർത്തനത്തിൽ കാണാനും [ഉദാഹരണ നോട്ട്ബുക്ക്](CartPole-RL-TF.ipynb) കാണുക.
|
||||
|
||||
## ആക്ടർ-ക്രിട്ടിക് ആൽഗോരിതം
|
||||
|
||||
പോളിസി ഗ്രാഡിയന്റ് സമീപനത്തിന്റെ മെച്ചപ്പെട്ട പതിപ്പ് **ആക്ടർ-ക്രിട്ടിക്** എന്നാണ്. ഇതിന്റെ പ്രധാന ആശയം, ന്യൂറൽ നെറ്റ്വർക്ക് രണ്ട് കാര്യങ്ങൾ തിരികെ നൽകാൻ പരിശീലിപ്പിക്കപ്പെടുക എന്നതാണ്:
|
||||
|
||||
* എടുക്കേണ്ട ആക്ഷൻ നിർണ്ണയിക്കുന്ന പോളിസി - ഇതാണ് **ആക്ടർ**
|
||||
* ആ സ്റ്റേറ്റിൽ നിന്ന് പ്രതീക്ഷിക്കാവുന്ന മൊത്തം റിവാർഡ് - ഇത് **ക്രിട്ടിക്**.
|
||||
|
||||
ഒരു അർത്ഥത്തിൽ, ഈ ആർക്കിടെക്ചർ [GAN](../../4-ComputerVision/10-GANs/README.md) പോലെയാണ്, രണ്ട് നെറ്റ്വർക്കുകൾ പരസ്പരം എതിരായി പരിശീലിപ്പിക്കപ്പെടുന്നു. ആക്ടർ എടുക്കേണ്ട ആക്ഷൻ നിർദ്ദേശിക്കുന്നു, ക്രിട്ടിക് ഫലത്തെ വിലയിരുത്താൻ ശ്രമിക്കുന്നു. എന്നാൽ, നമുക്ക് ഈ നെറ്റ്വർക്കുകൾ ഒരുമിച്ച് പരിശീലിപ്പിക്കുകയാണ് ലക്ഷ്യം.
|
||||
|
||||
പരീക്ഷണത്തിൽ നാം യഥാർത്ഥ ക്യൂമുലേറ്റീവ് റിവാർഡുകളും ക്രിട്ടിക് നൽകുന്ന ഫലങ്ങളും അറിയുന്നതിനാൽ, അവ തമ്മിലുള്ള വ്യത്യാസം കുറയ്ക്കുന്ന ലോസ് ഫംഗ്ഷൻ നിർമ്മിക്കുന്നത് എളുപ്പമാണ്. ഇതാണ് **ക്രിട്ടിക് ലോസ്**. പോളിസി ഗ്രാഡിയന്റ് ആൽഗോരിതത്തിൽ ഉപയോഗിച്ച സമാന സമീപനം ഉപയോഗിച്ച് **ആക്ടർ ലോസ്** കണക്കാക്കാം.
|
||||
|
||||
ഈ ആൽഗോരിതങ്ങളിൽ ഒന്നും പ്രവർത്തിപ്പിച്ച ശേഷം, നമ്മുടെ കാർട്ട്പോൾ ഇങ്ങനെ പ്രവർത്തിക്കുമെന്ന് പ്രതീക്ഷിക്കാം:
|
||||
|
||||

|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: പോളിസി ഗ്രാഡിയന്റുകളും ആക്ടർ-ക്രിട്ടിക് RL
|
||||
|
||||
താഴെ കൊടുത്ത നോട്ട്ബുക്കുകളിൽ നിങ്ങളുടെ പഠനം തുടരുക:
|
||||
|
||||
* [TensorFlow-ൽ RL](CartPole-RL-TF.ipynb)
|
||||
* [PyTorch-ൽ RL](CartPole-RL-PyTorch.ipynb)
|
||||
|
||||
## മറ്റ് RL ടാസ്കുകൾ
|
||||
|
||||
ഇപ്പോൾ റീഇൻഫോഴ്സ്മെന്റ് ലേണിംഗ് ഗവേഷണത്തിന്റെ വേഗത്തിൽ വളരുന്ന മേഖലയാണ്. ചില രസകരമായ RL ഉദാഹരണങ്ങൾ:
|
||||
|
||||
* **അറ്റാരി ഗെയിമുകൾ** കളിക്കാൻ കമ്പ്യൂട്ടർ പഠിപ്പിക്കൽ. ഈ പ്രശ്നത്തിൽ വെക്ടർ രൂപത്തിലുള്ള ലളിതമായ സ്റ്റേറ്റ് ഇല്ല, പകരം സ്ക്രീൻഷോട്ട് ഉണ്ട് - അതിനാൽ CNN ഉപയോഗിച്ച് ഈ സ്ക്രീൻ ഇമേജ് ഫീച്ചർ വെക്ടറായി മാറ്റി റിവാർഡ് വിവരങ്ങൾ എടുക്കണം. അറ്റാരി ഗെയിമുകൾ ജിമിൽ ലഭ്യമാണ്.
|
||||
* ചെസ്, ഗോ പോലുള്ള ബോർഡ് ഗെയിമുകൾ കളിക്കാൻ കമ്പ്യൂട്ടർ പഠിപ്പിക്കൽ. അടുത്തകാലത്ത് **ആൽഫാ സീറോ** പോലുള്ള സ്റ്റേറ്റ്-ഓഫ്-ദി-ആർട്ട് പ്രോഗ്രാമുകൾ രണ്ട് ഏജന്റുകൾ തമ്മിൽ കളിച്ച് തുടക്കം മുതൽ പരിശീലിപ്പിച്ചു, ഓരോ ഘട്ടത്തിലും മെച്ചപ്പെടുത്തുകയും ചെയ്തു.
|
||||
* വ്യവസായത്തിൽ, സിമുലേഷൻ ഉപയോഗിച്ച് നിയന്ത്രണ സംവിധാനങ്ങൾ സൃഷ്ടിക്കാൻ RL ഉപയോഗിക്കുന്നു. [Bonsai](https://azure.microsoft.com/services/project-bonsai/?WT.mc_id=academic-77998-cacaste) എന്ന സേവനം പ്രത്യേകിച്ച് ഇതിന് രൂപകൽപ്പന ചെയ്തതാണ്.
|
||||
|
||||
## സമാപനം
|
||||
|
||||
നാം ഇപ്പോൾ ഒരു റിവാർഡ് ഫംഗ്ഷൻ നൽകുകയും, ബുദ്ധിമുട്ടുള്ള തിരയൽ പ്രദേശം ബുദ്ധിമുട്ടോടെ അന്വേഷിക്കാനുള്ള അവസരം നൽകുകയും ചെയ്തുകൊണ്ട് ഏജന്റുകളെ മികച്ച ഫലങ്ങൾ നേടാൻ പരിശീലിപ്പിക്കുന്നത് പഠിച്ചു. രണ്ട് ആൽഗോരിതങ്ങൾ വിജയകരമായി പരീക്ഷിച്ചു, കുറഞ്ഞ സമയത്തിനുള്ളിൽ നല്ല ഫലം നേടി. എന്നാൽ, ഇത് RL-ലേക്കുള്ള നിങ്ങളുടെ യാത്രയുടെ തുടക്കമാണ്, കൂടുതൽ ആഴത്തിൽ പഠിക്കാൻ നിങ്ങൾക്ക് വേണമെങ്കിൽ വേറെ കോഴ്സ് എടുക്കുന്നത് പരിഗണിക്കണം.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
'മറ്റ് RL ടാസ്കുകൾ' വിഭാഗത്തിൽ കൊടുത്തിട്ടുള്ള പ്രയോഗങ്ങൾ പരിശോധിച്ച് ഒന്ന് നടപ്പിലാക്കാൻ ശ്രമിക്കുക!
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/44)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
ക്ലാസിക്കൽ റീഇൻഫോഴ്സ്മെന്റ് ലേണിംഗ് കുറിച്ച് കൂടുതൽ അറിയാൻ ഞങ്ങളുടെ [Machine Learning for Beginners Curriculum](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/README.md) കാണുക.
|
||||
|
||||
കമ്പ്യൂട്ടർ സൂപ്പർ മാരിയോ കളിക്കാൻ എങ്ങനെ പഠിക്കാമെന്ന് വിശദീകരിക്കുന്ന [ഈ മികച്ച വീഡിയോ](https://www.youtube.com/watch?v=qv6UVOQ0F44) കാണുക.
|
||||
|
||||
## അസൈൻമെന്റ്: [മൗണ്ടൻ കാർ ട്രെയിൻ ചെയ്യുക](lab/README.md)
|
||||
|
||||
ഈ അസൈൻമെന്റിൽ നിങ്ങളുടെ ലക്ഷ്യം മറ്റൊരു ജിം പരിസ്ഥിതി - [Mountain Car](https://www.gymlibrary.ml/environments/classic_control/mountain_car/) - പരിശീലിപ്പിക്കുകയാണ്.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "04395657fc01648f8f70484d0e55ab67",
|
||||
"translation_date": "2025-11-25T23:32:07+00:00",
|
||||
"source_file": "lessons/6-Other/22-DeepRL/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# ഡീപ് റീഇൻഫോഴ്സ്മെന്റ് ലേണിംഗ്
|
||||
|
||||
റീഇൻഫോഴ്സ്മെന്റ് ലേണിംഗ് (RL) സൂപ്പർവൈസ്ഡ് ലേണിംഗിനും അൺസൂപ്പർവൈസ്ഡ് ലേണിംഗിനും പുറമേ ഒരു അടിസ്ഥാന മെഷീൻ ലേണിംഗ് പാരഡൈം ആയി കണക്കാക്കപ്പെടുന്നു. സൂപ്പർവൈസ്ഡ് ലേണിംഗിൽ നമുക്ക് ഫലങ്ങൾ അറിയപ്പെടുന്ന ഡാറ്റാസെറ്റിൽ ആശ്രയിക്കേണ്ടതുണ്ടെങ്കിലും, RL **ചെയ്യുന്നതിലൂടെ പഠിക്കുന്നതിൽ** ആധാരിതമാണ്. ഉദാഹരണത്തിന്, ഒരു കമ്പ്യൂട്ടർ ഗെയിം ആദ്യമായി കാണുമ്പോൾ, നാം നിയമങ്ങൾ അറിയാതെ പോലും കളിക്കാൻ തുടങ്ങുകയും, കളിച്ചുകൊണ്ടിരിക്കുമ്പോൾ നമ്മുടെ കഴിവുകൾ മെച്ചപ്പെടുത്താൻ കഴിയും.
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/43)
|
||||
|
||||
RL നടത്താൻ നമുക്ക് ആവശ്യമായത്:
|
||||
|
||||
* ഗെയിമിന്റെ നിയമങ്ങൾ നിശ്ചയിക്കുന്ന ഒരു **പരിസ്ഥിതി** അല്ലെങ്കിൽ **സിമുലേറ്റർ**. സിമുലേറ്ററിൽ പരീക്ഷണങ്ങൾ നടത്താനും ഫലങ്ങൾ നിരീക്ഷിക്കാനും കഴിയണം.
|
||||
* പരീക്ഷണം എത്രത്തോളം വിജയകരമായിരുന്നുവെന്ന് സൂചിപ്പിക്കുന്ന ഒരു **റിവാർഡ് ഫംഗ്ഷൻ**. കമ്പ്യൂട്ടർ ഗെയിം കളിക്കാൻ പഠിക്കുമ്പോൾ, റിവാർഡ് നമ്മുടെ അന്തിമ സ്കോർ ആയിരിക്കും.
|
||||
|
||||
റിവാർഡ് ഫംഗ്ഷൻ അടിസ്ഥാനമാക്കി, നാം നമ്മുടെ പെരുമാറ്റം ക്രമീകരിച്ച് കഴിവുകൾ മെച്ചപ്പെടുത്തണം, അതിനാൽ അടുത്ത തവണ നാം മികച്ച രീതിയിൽ കളിക്കാനാകും. മറ്റ് മെഷീൻ ലേണിംഗ് തരംകളിൽ നിന്നും RL-യുടെ പ്രധാന വ്യത്യാസം, RL-യിൽ നാം സാധാരണയായി ഗെയിം അവസാനിപ്പിക്കാതെ ജയിച്ചോ തോറ്റോ എന്ന് അറിയില്ല എന്നതാണ്. അതിനാൽ, ഒരു പ്രത്യേക നീക്കം മാത്രം നല്ലതാണോ അല്ലയോ എന്ന് പറയാനാകില്ല - ഗെയിം അവസാനത്തിൽ മാത്രമേ നമുക്ക് റിവാർഡ് ലഭിക്കൂ.
|
||||
|
||||
RL നടത്തുമ്പോൾ, നാം സാധാരണയായി നിരവധി പരീക്ഷണങ്ങൾ നടത്തുന്നു. ഓരോ പരീക്ഷണത്തിലും, നാം ഇതുവരെ പഠിച്ച ഏറ്റവും മികച്ച തന്ത്രം പിന്തുടരുന്നതും (**exploitation**) പുതിയ സാധ്യതകൾ അന്വേഷിക്കുന്നതും (**exploration**) തമ്മിൽ സമതുലനം പാലിക്കണം.
|
||||
|
||||
## OpenAI Gym
|
||||
|
||||
RL-ക്കായി മികച്ച ഉപകരണം [OpenAI Gym](https://gym.openai.com/) ആണ് - ഇത് ഒരു **സിമുലേഷൻ പരിസ്ഥിതി** ആണ്, അതിൽ അറ്റാരി ഗെയിമുകളിൽ നിന്ന് പോൾ ബാലൻസിംഗ് പിന്നിലെ ഭൗതികശാസ്ത്രം വരെ പല പരിസ്ഥിതികളും സിമുലേറ്റ് ചെയ്യാം. ഇത് റീഇൻഫോഴ്സ്മെന്റ് ലേണിംഗ് ആൽഗോരിതങ്ങൾ പരിശീലിപ്പിക്കാൻ ഏറ്റവും ജനപ്രിയമായ സിമുലേഷൻ പരിസ്ഥിതികളിൽ ഒന്നാണ്, [OpenAI](https://openai.com/) ആണ് ഇതിന്റെ പരിപാലകൻ.
|
||||
|
||||
> **Note**: OpenAI Gym-ൽ ലഭ്യമായ എല്ലാ പരിസ്ഥിതികളും [ഇവിടെ](https://gym.openai.com/envs/#classic_control) കാണാം.
|
||||
|
||||
## കാർട്ട്പോൾ ബാലൻസിംഗ്
|
||||
|
||||
നിങ്ങൾക്ക് സെഗ്വേ അല്ലെങ്കിൽ ജൈറോസ്കൂട്ടറുകൾ പോലുള്ള ആധുനിക ബാലൻസിംഗ് ഉപകരണങ്ങൾ കാണാമായിരിക്കും. അവ ഓട്ടോമാറ്റിക്കായി വീലുകൾ ക്രമീകരിച്ച് ബാലൻസ് നിലനിർത്തുന്നു, അത് ആക്സിലറോമീറ്റർ അല്ലെങ്കിൽ ജൈറോസ്കോപ്പ് സിഗ്നലിനെ അടിസ്ഥാനമാക്കിയാണ്. ഈ ഭാഗത്ത്, നാം സമാനമായ ഒരു പ്രശ്നം പരിഹരിക്കാൻ പഠിക്കും - ഒരു പോൾ ബാലൻസ് ചെയ്യുക. ഇത് ഒരു സിർകസ് കലാകാരൻ തന്റെ കൈയിൽ പോൾ ബാലൻസ് ചെയ്യേണ്ട സാഹചര്യം പോലെയാണ്, പക്ഷേ ഇത് 1D-യിൽ മാത്രമാണ്.
|
||||
|
||||
ബാലൻസിംഗ് ഒരു ലളിതമായ പതിപ്പ് **കാർട്ട്പോൾ** പ്രശ്നമായി അറിയപ്പെടുന്നു. കാർട്ട്പോൾ ലോകത്ത്, ഒരു ഹോരിസോണ്ടൽ സ്ലൈഡർ ഇടത്തോ വലത്തോ നീങ്ങാൻ കഴിയും, സ്ലൈഡറിന്റെ മുകളിൽ ഒരു വെർട്ടിക്കൽ പോൾ ബാലൻസ് ചെയ്യുകയാണ് ലക്ഷ്യം.
|
||||
|
||||
<img alt="a cartpole" src="../../../../../translated_images/cartpole.f52a67f27e058170.ml.png" width="200"/>
|
||||
|
||||
ഈ പരിസ്ഥിതി സൃഷ്ടിക്കുകയും ഉപയോഗിക്കുകയും ചെയ്യാൻ, നമുക്ക് പൈതൺ കോഡിന്റെ കുറച്ച് വരികൾ ആവശ്യമാണ്:
|
||||
|
||||
```python
|
||||
import gym
|
||||
env = gym.make("CartPole-v1")
|
||||
|
||||
env.reset()
|
||||
done = False
|
||||
total_reward = 0
|
||||
while not done:
|
||||
env.render()
|
||||
action = env.action_space.sample()
|
||||
observaton, reward, done, info = env.step(action)
|
||||
total_reward += reward
|
||||
|
||||
print(f"Total reward: {total_reward}")
|
||||
```
|
||||
|
||||
ഓരോ പരിസ്ഥിതിയിലും സമാനമായ രീതിയിൽ ആക്സസ് ചെയ്യാം:
|
||||
* `env.reset` പുതിയ പരീക്ഷണം ആരംഭിക്കുന്നു
|
||||
* `env.step` ഒരു സിമുലേഷൻ ഘട്ടം നടത്തുന്നു. ഇത് **ആക്ഷൻ സ്പേസ്**-ൽ നിന്നുള്ള ഒരു **ആക്ഷൻ** സ്വീകരിക്കുകയും, **ഓബ്സർവേഷൻ സ്പേസ്**-ൽ നിന്നുള്ള **ഓബ്സർവേഷൻ**, കൂടാതെ റിവാർഡ്, ടെർമിനേഷൻ ഫ്ലാഗ് എന്നിവ തിരികെ നൽകുകയും ചെയ്യുന്നു.
|
||||
|
||||
മുകളിൽ കാണിച്ച ഉദാഹരണത്തിൽ, ഓരോ ഘട്ടത്തിലും നാം യാദൃച്ഛിക ആക്ഷൻ സ്വീകരിക്കുന്നതിനാൽ പരീക്ഷണത്തിന്റെ ആയുസ്സ് വളരെ ചെറുതാണ്:
|
||||
|
||||

|
||||
|
||||
RL ആൽഗോരിതത്തിന്റെ ലക്ഷ്യം ഒരു മോഡൽ - **പോളിസി** π - പരിശീലിപ്പിക്കുകയാണ്, അത് നൽകിയ സ്റ്റേറ്റിന് പ്രതികരിച്ച് ആക്ഷൻ തിരികെ നൽകും. പോളിസി പ്രൊബബിലിസ്റ്റിക് ആകാമെന്ന് കൂടി പരിഗണിക്കാം, ഉദാ: ഏതെങ്കിലും സ്റ്റേറ്റ് *s*ക്കും ആക്ഷൻ *a*ക്കും, ആക്ഷൻ *a* സ്വീകരിക്കാനുള്ള സാധ്യത π(*a*|*s*) നൽകും.
|
||||
|
||||
## പോളിസി ഗ്രാഡിയന്റ് ആൽഗോരിതം
|
||||
|
||||
പോളിസി മോഡലാക്കാനുള്ള ഏറ്റവും വ്യക്തമായ മാർഗം, സ്റ്റേറ്റുകൾ ഇൻപുട്ടായി സ്വീകരിച്ച് അനുയോജ്യമായ ആക്ഷനുകൾ (അല്ലെങ്കിൽ ആക്ഷനുകളുടെ സാധ്യതകൾ) തിരികെ നൽകുന്ന ഒരു ന്യൂറൽ നെറ്റ്വർക്ക് സൃഷ്ടിക്കുകയാണ്. ഒരു അർത്ഥത്തിൽ, ഇത് സാധാരണ ക്ലാസിഫിക്കേഷൻ ടാസ്കിനോട് സാമ്യമുള്ളതാണ്, എന്നാൽ പ്രധാന വ്യത്യാസം - ഓരോ ഘട്ടത്തിലും എത്രയും നല്ല ആക്ഷൻ എടുക്കണമെന്ന് നമുക്ക് മുൻകൂട്ടി അറിയില്ല.
|
||||
|
||||
ഇവിടെ ആശയം ആ സാധ്യതകൾ കണക്കാക്കുകയാണ്. പരീക്ഷണത്തിലെ ഓരോ ഘട്ടത്തിലും നമുക്ക് ലഭിച്ച മൊത്തം റിവാർഡ് കാണിക്കുന്ന **ക്യൂമുലേറ്റീവ് റിവാർഡുകൾ** എന്ന വെക്ടർ നാം നിർമ്മിക്കുന്നു. കൂടാതെ, മുൻകാല റിവാർഡുകളുടെ പ്രാധാന്യം കുറയ്ക്കാൻ γ=0.99 എന്ന കോഫിഷ്യന്റ് ഉപയോഗിച്ച് **റിവാർഡ് ഡിസ്കൗണ്ടിംഗ്** പ്രയോഗിക്കുന്നു. തുടർന്ന്, പരീക്ഷണ പാതയിലെ ഉയർന്ന റിവാർഡ് നൽകുന്ന ഘട്ടങ്ങളെ ശക്തിപ്പെടുത്തുന്നു.
|
||||
|
||||
> പോളിസി ഗ്രാഡിയന്റ് ആൽഗോരിതത്തെക്കുറിച്ച് കൂടുതൽ അറിയാനും പ്രവർത്തനത്തിൽ കാണാനും [ഉദാഹരണ നോട്ട്ബുക്ക്](CartPole-RL-TF.ipynb) കാണുക.
|
||||
|
||||
## ആക്ടർ-ക്രിട്ടിക് ആൽഗോരിതം
|
||||
|
||||
പോളിസി ഗ്രാഡിയന്റ് സമീപനത്തിന്റെ മെച്ചപ്പെട്ട പതിപ്പ് **ആക്ടർ-ക്രിട്ടിക്** എന്നാണ്. ഇതിന്റെ പ്രധാന ആശയം, ന്യൂറൽ നെറ്റ്വർക്ക് രണ്ട് കാര്യങ്ങൾ തിരികെ നൽകാൻ പരിശീലിപ്പിക്കപ്പെടുക എന്നതാണ്:
|
||||
|
||||
* എടുക്കേണ്ട ആക്ഷൻ നിർണ്ണയിക്കുന്ന പോളിസി - ഇതാണ് **ആക്ടർ**
|
||||
* ആ സ്റ്റേറ്റിൽ നിന്ന് പ്രതീക്ഷിക്കാവുന്ന മൊത്തം റിവാർഡ് - ഇത് **ക്രിട്ടിക്**.
|
||||
|
||||
ഒരു അർത്ഥത്തിൽ, ഈ ആർക്കിടെക്ചർ [GAN](../../4-ComputerVision/10-GANs/README.md) പോലെയാണ്, രണ്ട് നെറ്റ്വർക്കുകൾ പരസ്പരം എതിരായി പരിശീലിപ്പിക്കപ്പെടുന്നു. ആക്ടർ എടുക്കേണ്ട ആക്ഷൻ നിർദ്ദേശിക്കുന്നു, ക്രിട്ടിക് ഫലത്തെ വിലയിരുത്താൻ ശ്രമിക്കുന്നു. എന്നാൽ, നമുക്ക് ഈ നെറ്റ്വർക്കുകൾ ഒരുമിച്ച് പരിശീലിപ്പിക്കുകയാണ് ലക്ഷ്യം.
|
||||
|
||||
പരീക്ഷണത്തിൽ നാം യഥാർത്ഥ ക്യൂമുലേറ്റീവ് റിവാർഡുകളും ക്രിട്ടിക് നൽകുന്ന ഫലങ്ങളും അറിയുന്നതിനാൽ, അവ തമ്മിലുള്ള വ്യത്യാസം കുറയ്ക്കുന്ന ലോസ് ഫംഗ്ഷൻ നിർമ്മിക്കുന്നത് എളുപ്പമാണ്. ഇതാണ് **ക്രിട്ടിക് ലോസ്**. പോളിസി ഗ്രാഡിയന്റ് ആൽഗോരിതത്തിൽ ഉപയോഗിച്ച സമാന സമീപനം ഉപയോഗിച്ച് **ആക്ടർ ലോസ്** കണക്കാക്കാം.
|
||||
|
||||
ഈ ആൽഗോരിതങ്ങളിൽ ഒന്നും പ്രവർത്തിപ്പിച്ച ശേഷം, നമ്മുടെ കാർട്ട്പോൾ ഇങ്ങനെ പ്രവർത്തിക്കുമെന്ന് പ്രതീക്ഷിക്കാം:
|
||||
|
||||

|
||||
|
||||
## ✍️ അഭ്യാസങ്ങൾ: പോളിസി ഗ്രാഡിയന്റുകളും ആക്ടർ-ക്രിട്ടിക് RL
|
||||
|
||||
താഴെ കൊടുത്ത നോട്ട്ബുക്കുകളിൽ നിങ്ങളുടെ പഠനം തുടരുക:
|
||||
|
||||
* [TensorFlow-ൽ RL](CartPole-RL-TF.ipynb)
|
||||
* [PyTorch-ൽ RL](CartPole-RL-PyTorch.ipynb)
|
||||
|
||||
## മറ്റ് RL ടാസ്കുകൾ
|
||||
|
||||
ഇപ്പോൾ റീഇൻഫോഴ്സ്മെന്റ് ലേണിംഗ് ഗവേഷണത്തിന്റെ വേഗത്തിൽ വളരുന്ന മേഖലയാണ്. ചില രസകരമായ RL ഉദാഹരണങ്ങൾ:
|
||||
|
||||
* **അറ്റാരി ഗെയിമുകൾ** കളിക്കാൻ കമ്പ്യൂട്ടർ പഠിപ്പിക്കൽ. ഈ പ്രശ്നത്തിൽ വെക്ടർ രൂപത്തിലുള്ള ലളിതമായ സ്റ്റേറ്റ് ഇല്ല, പകരം സ്ക്രീൻഷോട്ട് ഉണ്ട് - അതിനാൽ CNN ഉപയോഗിച്ച് ഈ സ്ക്രീൻ ഇമേജ് ഫീച്ചർ വെക്ടറായി മാറ്റി റിവാർഡ് വിവരങ്ങൾ എടുക്കണം. അറ്റാരി ഗെയിമുകൾ ജിമിൽ ലഭ്യമാണ്.
|
||||
* ചെസ്, ഗോ പോലുള്ള ബോർഡ് ഗെയിമുകൾ കളിക്കാൻ കമ്പ്യൂട്ടർ പഠിപ്പിക്കൽ. അടുത്തകാലത്ത് **ആൽഫാ സീറോ** പോലുള്ള സ്റ്റേറ്റ്-ഓഫ്-ദി-ആർട്ട് പ്രോഗ്രാമുകൾ രണ്ട് ഏജന്റുകൾ തമ്മിൽ കളിച്ച് തുടക്കം മുതൽ പരിശീലിപ്പിച്ചു, ഓരോ ഘട്ടത്തിലും മെച്ചപ്പെടുത്തുകയും ചെയ്തു.
|
||||
* വ്യവസായത്തിൽ, സിമുലേഷൻ ഉപയോഗിച്ച് നിയന്ത്രണ സംവിധാനങ്ങൾ സൃഷ്ടിക്കാൻ RL ഉപയോഗിക്കുന്നു. [Bonsai](https://azure.microsoft.com/services/project-bonsai/?WT.mc_id=academic-77998-cacaste) എന്ന സേവനം പ്രത്യേകിച്ച് ഇതിന് രൂപകൽപ്പന ചെയ്തതാണ്.
|
||||
|
||||
## സമാപനം
|
||||
|
||||
നാം ഇപ്പോൾ ഒരു റിവാർഡ് ഫംഗ്ഷൻ നൽകുകയും, ബുദ്ധിമുട്ടുള്ള തിരയൽ പ്രദേശം ബുദ്ധിമുട്ടോടെ അന്വേഷിക്കാനുള്ള അവസരം നൽകുകയും ചെയ്തുകൊണ്ട് ഏജന്റുകളെ മികച്ച ഫലങ്ങൾ നേടാൻ പരിശീലിപ്പിക്കുന്നത് പഠിച്ചു. രണ്ട് ആൽഗോരിതങ്ങൾ വിജയകരമായി പരീക്ഷിച്ചു, കുറഞ്ഞ സമയത്തിനുള്ളിൽ നല്ല ഫലം നേടി. എന്നാൽ, ഇത് RL-ലേക്കുള്ള നിങ്ങളുടെ യാത്രയുടെ തുടക്കമാണ്, കൂടുതൽ ആഴത്തിൽ പഠിക്കാൻ നിങ്ങൾക്ക് വേണമെങ്കിൽ വേറെ കോഴ്സ് എടുക്കുന്നത് പരിഗണിക്കണം.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
'മറ്റ് RL ടാസ്കുകൾ' വിഭാഗത്തിൽ കൊടുത്തിട്ടുള്ള പ്രയോഗങ്ങൾ പരിശോധിച്ച് ഒന്ന് നടപ്പിലാക്കാൻ ശ്രമിക്കുക!
|
||||
|
||||
## [പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/44)
|
||||
|
||||
## അവലോകനം & സ്വയം പഠനം
|
||||
|
||||
ക്ലാസിക്കൽ റീഇൻഫോഴ്സ്മെന്റ് ലേണിംഗ് കുറിച്ച് കൂടുതൽ അറിയാൻ ഞങ്ങളുടെ [Machine Learning for Beginners Curriculum](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/README.md) കാണുക.
|
||||
|
||||
കമ്പ്യൂട്ടർ സൂപ്പർ മാരിയോ കളിക്കാൻ എങ്ങനെ പഠിക്കാമെന്ന് വിശദീകരിക്കുന്ന [ഈ മികച്ച വീഡിയോ](https://www.youtube.com/watch?v=qv6UVOQ0F44) കാണുക.
|
||||
|
||||
## അസൈൻമെന്റ്: [മൗണ്ടൻ കാർ ട്രെയിൻ ചെയ്യുക](lab/README.md)
|
||||
|
||||
ഈ അസൈൻമെന്റിൽ നിങ്ങളുടെ ലക്ഷ്യം മറ്റൊരു ജിം പരിസ്ഥിതി - [Mountain Car](https://www.gymlibrary.ml/environments/classic_control/mountain_car/) - പരിശീലിപ്പിക്കുകയാണ്.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,37 +1,37 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "7bd8dc72040e98e35e7225e34058cd4e",
|
||||
"translation_date": "2025-11-25T23:39:38+00:00",
|
||||
"source_file": "lessons/6-Other/22-DeepRL/lab/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# മൗണ്ടൻ കാർ രക്ഷപ്പെടാൻ പരിശീലനം
|
||||
|
||||
[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) ലെ ലാബ് അസൈൻമെന്റ്.
|
||||
|
||||
## ടാസ്ക്
|
||||
|
||||
OpenAI പരിസ്ഥിതിയിൽ [Mountain Car](https://www.gymlibrary.ml/environments/classic_control/mountain_car/) നിയന്ത്രിക്കാൻ RL ഏജന്റിനെ പരിശീലിപ്പിക്കുക.
|
||||
|
||||
<img alt="Mountain Car" src="../../../../../../translated_images/mountaincar.f7b7a7f6d4f9933b31a5fb3453b9c026aa0d65f6644bb03513a955590aae1bc4.ml.png" width="300"/>
|
||||
|
||||
## പരിസ്ഥിതി
|
||||
|
||||
Mountain Car പരിസ്ഥിതി ഒരു താഴ്വരയിൽ കുടുങ്ങിയ കാർ ഉൾക്കൊള്ളുന്നു. താഴ്വരയിൽ നിന്ന് ചാടിക്കയറുകയും പതാകയിലേക്ക് എത്തുകയും ചെയ്യുക നിങ്ങളുടെ ലക്ഷ്യമാണ്. നിങ്ങൾക്ക് ഇടത്തേക്ക് വേഗത കൂട്ടുക, വലത്തേക്ക് വേഗത കൂട്ടുക, അല്ലെങ്കിൽ ഒന്നും ചെയ്യാതിരിക്കുക എന്നിങ്ങനെ പ്രവർത്തനങ്ങൾ ചെയ്യാം. കാർ x-അക്ഷം അനുസരിച്ച് സ്ഥാനം, വേഗത എന്നിവ നിങ്ങൾക്ക് നിരീക്ഷിക്കാം.
|
||||
|
||||
## സ്റ്റാർട്ടിംഗ് നോട്ട്ബുക്ക്
|
||||
|
||||
ലാബ് ആരംഭിക്കാൻ [MountainCar.ipynb](MountainCar.ipynb) തുറക്കുക
|
||||
|
||||
## പഠനഫലം
|
||||
|
||||
ഈ ലാബ് വഴി നിങ്ങൾക്ക് മനസ്സിലാകണം RL ആൽഗോരിതങ്ങൾ പുതിയ പരിസ്ഥിതിയിലേക്ക് സ്വീകരിക്കുന്നത് സാധാരണയായി എളുപ്പമാണ്, കാരണം OpenAI Gym എല്ലാ പരിസ്ഥിതികൾക്കും ഒരേ ഇന്റർഫേസ് നൽകുന്നു, ആൽഗോരിതങ്ങൾ പരിസ്ഥിതിയുടെ സ്വഭാവത്തിൽ വലിയ ആശ്രയം ഇല്ലാതെ പ്രവർത്തിക്കുന്നു. Python കോഡ് ഇങ്ങനെ പുനർഘടിപ്പിക്കാം, RL ആൽഗോരിതത്തിന് ഏതൊരു പരിസ്ഥിതിയും പാരാമീറ്ററായി നൽകാൻ കഴിയുന്ന വിധം.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് പരിഗണിക്കേണ്ടതാണ്. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "7bd8dc72040e98e35e7225e34058cd4e",
|
||||
"translation_date": "2025-11-25T23:39:38+00:00",
|
||||
"source_file": "lessons/6-Other/22-DeepRL/lab/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# മൗണ്ടൻ കാർ രക്ഷപ്പെടാൻ പരിശീലനം
|
||||
|
||||
[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) ലെ ലാബ് അസൈൻമെന്റ്.
|
||||
|
||||
## ടാസ്ക്
|
||||
|
||||
OpenAI പരിസ്ഥിതിയിൽ [Mountain Car](https://www.gymlibrary.ml/environments/classic_control/mountain_car/) നിയന്ത്രിക്കാൻ RL ഏജന്റിനെ പരിശീലിപ്പിക്കുക.
|
||||
|
||||
<img alt="Mountain Car" src="../../../../../../translated_images/mountaincar.f7b7a7f6d4f9933b.ml.png" width="300"/>
|
||||
|
||||
## പരിസ്ഥിതി
|
||||
|
||||
Mountain Car പരിസ്ഥിതി ഒരു താഴ്വരയിൽ കുടുങ്ങിയ കാർ ഉൾക്കൊള്ളുന്നു. താഴ്വരയിൽ നിന്ന് ചാടിക്കയറുകയും പതാകയിലേക്ക് എത്തുകയും ചെയ്യുക നിങ്ങളുടെ ലക്ഷ്യമാണ്. നിങ്ങൾക്ക് ഇടത്തേക്ക് വേഗത കൂട്ടുക, വലത്തേക്ക് വേഗത കൂട്ടുക, അല്ലെങ്കിൽ ഒന്നും ചെയ്യാതിരിക്കുക എന്നിങ്ങനെ പ്രവർത്തനങ്ങൾ ചെയ്യാം. കാർ x-അക്ഷം അനുസരിച്ച് സ്ഥാനം, വേഗത എന്നിവ നിങ്ങൾക്ക് നിരീക്ഷിക്കാം.
|
||||
|
||||
## സ്റ്റാർട്ടിംഗ് നോട്ട്ബുക്ക്
|
||||
|
||||
ലാബ് ആരംഭിക്കാൻ [MountainCar.ipynb](MountainCar.ipynb) തുറക്കുക
|
||||
|
||||
## പഠനഫലം
|
||||
|
||||
ഈ ലാബ് വഴി നിങ്ങൾക്ക് മനസ്സിലാകണം RL ആൽഗോരിതങ്ങൾ പുതിയ പരിസ്ഥിതിയിലേക്ക് സ്വീകരിക്കുന്നത് സാധാരണയായി എളുപ്പമാണ്, കാരണം OpenAI Gym എല്ലാ പരിസ്ഥിതികൾക്കും ഒരേ ഇന്റർഫേസ് നൽകുന്നു, ആൽഗോരിതങ്ങൾ പരിസ്ഥിതിയുടെ സ്വഭാവത്തിൽ വലിയ ആശ്രയം ഇല്ലാതെ പ്രവർത്തിക്കുന്നു. Python കോഡ് ഇങ്ങനെ പുനർഘടിപ്പിക്കാം, RL ആൽഗോരിതത്തിന് ഏതൊരു പരിസ്ഥിതിയും പാരാമീറ്ററായി നൽകാൻ കഴിയുന്ന വിധം.
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് പരിഗണിക്കേണ്ടതാണ്. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,161 +1,161 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "38a1185ae3d54b180378bbd71ae3ef16",
|
||||
"translation_date": "2025-11-25T23:36:41+00:00",
|
||||
"source_file": "lessons/6-Other/23-MultiagentSystems/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# മൾട്ടി-ഏജന്റ് സിസ്റ്റങ്ങൾ
|
||||
|
||||
ബുദ്ധിമുട്ട് നേടാനുള്ള ഒരു സാധ്യതയുള്ള മാർഗ്ഗം **എമർജന്റ്** (അഥവാ **സിനർജറ്റിക്**) സമീപനമാണ്, ഇത് അടിസ്ഥാനമാക്കുന്നത് പലതരം ലളിതമായ ഏജന്റുകളുടെ സംയുക്ത പെരുമാറ്റം സമ്പൂർണ്ണമായും കൂടുതൽ സങ്കീർണ്ണമായ (അഥവാ ബുദ്ധിമുട്ടുള്ള) സിസ്റ്റത്തിന്റെ പെരുമാറ്റമായി മാറാൻ കഴിയും എന്ന സത്യത്തിൽ. സിദ്ധാന്തപരമായി, ഇത് [കോളക്റ്റീവ് ഇന്റലിജൻസ്](https://en.wikipedia.org/wiki/Collective_intelligence), [എമർജന്റിസം](https://en.wikipedia.org/wiki/Global_brain) എന്നിവയുടെ സിദ്ധാന്തങ്ങളിലാണ് അടിസ്ഥാനമാക്കിയിരിക്കുന്നത്, കൂടാതെ [എവല്യൂഷണറി സൈബർനെറ്റിക്സ്](https://en.wikipedia.org/wiki/Global_brain) എന്നത് താഴ്ന്ന തലത്തിലുള്ള സിസ്റ്റങ്ങൾ ശരിയായി സംയോജിപ്പിക്കുമ്പോൾ ഉയർന്ന തലത്തിലുള്ള സിസ്റ്റങ്ങൾ ചില അധിക മൂല്യം നേടുന്നു എന്ന് പറയുന്നു (ഇത് *മെറ്റാസിസ്റ്റം ട്രാൻസിഷൻ സിദ്ധാന്തം* എന്നറിയപ്പെടുന്നു).
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/45)
|
||||
|
||||
**മൾട്ടി-ഏജന്റ് സിസ്റ്റങ്ങൾ** എന്ന ദിശ 1990-കളിൽ ഇന്റർനെറ്റിന്റെയും വിതരണ സിസ്റ്റങ്ങളുടെയും വളർച്ചയ്ക്ക് പ്രതികരണമായി AI-യിൽ ഉദയം കണ്ടു. ക്ലാസിക്കൽ AI പാഠപുസ്തകങ്ങളിൽ ഒന്നായ [Artificial Intelligence: A Modern Approach](https://en.wikipedia.org/wiki/Artificial_Intelligence:_A_Modern_Approach) മൾട്ടി-ഏജന്റ് സിസ്റ്റങ്ങളുടെ കാഴ്ചപ്പാടിൽ നിന്നുള്ള ക്ലാസിക്കൽ AI-യെ പ്രധാനം ചെയ്യുന്നു.
|
||||
|
||||
മൾട്ടി-ഏജന്റ് സമീപനത്തിന്റെ കേന്ദ്ര ആശയം **ഏജന്റ്** എന്നതാണ് - ഒരു സജീവമായ ഘടകം, അത് ഒരു **പരിസ്ഥിതിയിൽ** ജീവിക്കുന്നു, അത് അവബോധിക്കുകയും പ്രവർത്തിക്കുകയും ചെയ്യുന്നു. ഇത് വളരെ വ്യാപകമായ നിർവചനമാണ്, ഏജന്റുകളുടെ പല തരങ്ങളും വർഗ്ഗീകരണങ്ങളും ഉണ്ടാകാം:
|
||||
|
||||
* അവയുടെ തർക്കശേഷി അനുസരിച്ച്:
|
||||
- **റിയാക്ടീവ്** ഏജന്റുകൾ സാധാരണയായി ലളിതമായ അഭ്യർത്ഥന-പ്രതികരണ രീതിയിലുള്ള പെരുമാറ്റം കാണിക്കുന്നു
|
||||
- **ഡെലിബറേറ്റീവ്** ഏജന്റുകൾ ചില തർക്കശേഷി അല്ലെങ്കിൽ പദ്ധതിയിടൽ കഴിവുകൾ ഉപയോഗിക്കുന്നു
|
||||
* ഏജന്റ് കോഡ് എവിടെ പ്രവർത്തിക്കുന്നു എന്ന അനുസരിച്ച്:
|
||||
- **സ്റ്റാറ്റിക്** ഏജന്റുകൾ ഒരു നിശ്ചിത നെറ്റ്വർക്ക് നോഡിൽ പ്രവർത്തിക്കുന്നു
|
||||
- **മൊബൈൽ** ഏജന്റുകൾ അവരുടെ കോഡ് നെറ്റ്വർക്ക് നോഡുകൾക്കിടയിൽ മാറ്റി കൊണ്ടുപോകാൻ കഴിയും
|
||||
* അവയുടെ പെരുമാറ്റം അനുസരിച്ച്:
|
||||
- **പാസ്സീവ് ഏജന്റുകൾ** പ്രത്യേക ലക്ഷ്യങ്ങളില്ല. ഇവ പുറം പ്രേരണകളെ പ്രതികരിക്കും, എന്നാൽ സ്വയം പ്രവർത്തനങ്ങൾ ആരംഭിക്കില്ല.
|
||||
- **ആക്ടീവ് ഏജന്റുകൾ** ചില ലക്ഷ്യങ്ങൾ പിന്തുടരുന്നു
|
||||
- **കോഗ്നിറ്റീവ് ഏജന്റുകൾ** സങ്കീർണ്ണമായ പദ്ധതിയിടലും തർക്കശേഷിയും ഉൾക്കൊള്ളുന്നു
|
||||
|
||||
ഇന്നത്തെ കാലത്ത് മൾട്ടി-ഏജന്റ് സിസ്റ്റങ്ങൾ പല മേഖലകളിൽ ഉപയോഗിക്കുന്നു:
|
||||
|
||||
* ഗെയിമുകളിൽ, പല നോൺ-പ്ലെയർ കഥാപാത്രങ്ങളും ചില AI ഉപയോഗിച്ച് ബുദ്ധിമുട്ടുള്ള ഏജന്റുകളായി കണക്കാക്കാം
|
||||
* വീഡിയോ നിർമ്മാണത്തിൽ, ജനക്കൂട്ടങ്ങൾ ഉൾപ്പെടുന്ന സങ്കീർണ്ണമായ 3D സീനുകൾ റെൻഡർ ചെയ്യാൻ സാധാരണയായി മൾട്ടി-ഏജന്റ് സിമുലേഷൻ ഉപയോഗിക്കുന്നു
|
||||
* സിസ്റ്റം മോഡലിംഗിൽ, സങ്കീർണ്ണമായ മോഡലിന്റെ പെരുമാറ്റം സിമുലേറ്റ് ചെയ്യാൻ മൾട്ടി-ഏജന്റ് സമീപനം ഉപയോഗിക്കുന്നു. ഉദാഹരണത്തിന്, COVID-19 രോഗം ലോകമാകെ വ്യാപിക്കുന്നതിന്റെ പ്രവചനത്തിന് മൾട്ടി-ഏജന്റ് സമീപനം വിജയകരമായി ഉപയോഗിച്ചിട്ടുണ്ട്. സമാനമായ സമീപനം നഗരത്തിലെ ട്രാഫിക് മോഡലിംഗിനും ഉപയോഗിക്കാം, ട്രാഫിക് നിയമങ്ങളിൽ മാറ്റം വന്നാൽ എങ്ങനെ പ്രതികരിക്കും എന്ന് കാണാൻ.
|
||||
* സങ്കീർണ്ണമായ ഓട്ടോമേഷൻ സിസ്റ്റങ്ങളിൽ, ഓരോ ഉപകരണവും സ്വതന്ത്ര ഏജന്റായി പ്രവർത്തിക്കാം, ഇത് മുഴുവൻ സിസ്റ്റം കൂടുതൽ ലളിതവും ദൃഢവുമാക്കുന്നു.
|
||||
|
||||
മൾട്ടി-ഏജന്റ് സിസ്റ്റങ്ങളിൽ കൂടുതൽ ആഴത്തിൽ പോകാതെ, **മൾട്ടി-ഏജന്റ് മോഡലിംഗ്** എന്ന ഒരു ഉദാഹരണം പരിഗണിക്കാം.
|
||||
|
||||
## നെറ്റ്ലോഗോ
|
||||
|
||||
[NetLogo](https://ccl.northwestern.edu/netlogo/) ഒരു മൾട്ടി-ഏജന്റ് മോഡലിംഗ് പരിസ്ഥിതിയാണ്, ഇത് [Logo](https://en.wikipedia.org/wiki/Logo_(programming_language)) പ്രോഗ്രാമിംഗ് ഭാഷയുടെ മാറ്റം വരുത്തിയ പതിപ്പിൽ അടിസ്ഥാനമാക്കിയതാണ്. ഈ ഭാഷ കുട്ടികൾക്ക് പ്രോഗ്രാമിംഗ് ആശയങ്ങൾ പഠിപ്പിക്കാൻ വികസിപ്പിച്ചതാണ്, ഇത് **turtle** എന്ന ഏജന്റിനെ നിയന്ത്രിക്കാൻ അനുവദിക്കുന്നു, അത് നീങ്ങുകയും പിന്നിൽ ഒരു പാത വിടുകയും ചെയ്യുന്നു. ഇത് സങ്കീർണ്ണമായ ജ്യാമിതീയ ആകൃതികൾ സൃഷ്ടിക്കാൻ സഹായിക്കുന്നു, ഏജന്റിന്റെ പെരുമാറ്റം ദൃശ്യമായി മനസ്സിലാക്കാൻ ഇത് വളരെ സഹായകരമാണ്.
|
||||
|
||||
നെറ്റ്ലോഗോയിൽ, `create-turtles` കമാൻഡ് ഉപയോഗിച്ച് നിരവധി turtles സൃഷ്ടിക്കാം. പിന്നീട് എല്ലാ turtles-ഉം ചില പ്രവർത്തനങ്ങൾ ചെയ്യാൻ നിർദ്ദേശിക്കാം (താഴെ ഉദാഹരണത്തിൽ - 10 പോയിന്റ് മുന്നോട്ട്):
|
||||
|
||||
```
|
||||
create-turtles 10
|
||||
ask turtles [
|
||||
forward 10
|
||||
]
|
||||
```
|
||||
|
||||
|
||||
എല്ലാ turtles-ഉം ഒരേ കാര്യം ചെയ്യുന്നത് രസകരമല്ല, അതിനാൽ നാം `ask` ഉപയോഗിച്ച് turtles-ന്റെ ഗ്രൂപ്പുകളെ, ഉദാഹരണത്തിന് ഒരു പ്രത്യേക പോയിന്റിന്റെ സമീപത്തുള്ളവരെ, നിർദ്ദേശിക്കാം. `breed [cats cat]` കമാൻഡ് ഉപയോഗിച്ച് വ്യത്യസ്ത *breeds* ഉള്ള turtles സൃഷ്ടിക്കാം. ഇവിടെ `cat` ഒരു breed നാമമാണ്, ഒറ്റപ്പേരും ബഹുവചനവും വ്യക്തമാക്കേണ്ടത് വിവിധ കമാൻഡുകൾ വ്യത്യസ്ത രൂപങ്ങൾ ഉപയോഗിക്കുന്നതിനാലാണ്.
|
||||
|
||||
> ✅ നെറ്റ്ലോഗോ ഭാഷ പഠിക്കാൻ നാം കൂടുതൽ സമയം ചെലവഴിക്കില്ല - കൂടുതൽ അറിയാൻ ആഗ്രഹിക്കുന്നവർക്ക് അത്ഭുതകരമായ [Beginner's Interactive NetLogo Dictionary](https://ccl.northwestern.edu/netlogo/bind/) സന്ദർശിക്കാം.
|
||||
|
||||
നിങ്ങൾക്ക് [ഡൗൺലോഡ്](https://ccl.northwestern.edu/netlogo/download.shtml) ചെയ്ത് നെറ്റ്ലോഗോ ഇൻസ്റ്റാൾ ചെയ്ത് പരീക്ഷിക്കാം.
|
||||
|
||||
### മോഡലുകളുടെ ലൈബ്രറി
|
||||
|
||||
നെറ്റ്ലോഗോയുടെ മികച്ച പ്രത്യേകത ഇതിൽ പ്രവർത്തനക്ഷമമായ മോഡലുകളുടെ ലൈബ്രറി ഉള്ളതാണ്. **File → Models Library** എന്ന വഴി പോകുക, അവിടെ നിരവധി മോഡൽ വിഭാഗങ്ങൾ തിരഞ്ഞെടുക്കാം.
|
||||
|
||||
<img alt="NetLogo Models Library" src="../../../../../translated_images/NetLogo-ModelLib.efe023afb4763c059704a8ac0e2cd5e51889b117e8eac02aaa5334cfe1c52c13.ml.png" width="60%"/>
|
||||
|
||||
> മോഡൽ ലൈബ്രറിയുടെ സ്ക്രീൻഷോട്ട് - Dmitry Soshnikov
|
||||
|
||||
നിങ്ങൾ ഒരു മോഡൽ തുറക്കാം, ഉദാഹരണത്തിന് **Biology → Flocking**.
|
||||
|
||||
### പ്രധാന സിദ്ധാന്തങ്ങൾ
|
||||
|
||||
മോഡൽ തുറന്ന ശേഷം, നിങ്ങൾ പ്രധാന നെറ്റ്ലോഗോ സ്ക്രീനിലേക്ക് എത്തും. ഇവിടെ finite resources (പുല്ല്) ഉള്ള ഒരു വുൾഫ്-ഷീപ്പ് ജനസംഖ്യയെ വിവരിക്കുന്ന ഒരു മാതൃകയാണ്.
|
||||
|
||||

|
||||
|
||||
> സ്ക്രീൻഷോട്ട് - Dmitry Soshnikov
|
||||
|
||||
ഈ സ്ക്രീനിൽ നിങ്ങൾക്ക് കാണാം:
|
||||
|
||||
* **ഇന്റർഫേസ്** വിഭാഗം, ഇതിൽ:
|
||||
- എല്ലാ ഏജന്റുകളും ജീവിക്കുന്ന പ്രധാന ഫീൽഡ്
|
||||
- ബട്ടണുകൾ, സ്ലൈഡറുകൾ തുടങ്ങിയ നിയന്ത്രണങ്ങൾ
|
||||
- സിമുലേഷന്റെ പാരാമീറ്ററുകൾ പ്രദർശിപ്പിക്കാൻ ഉപയോഗിക്കുന്ന ഗ്രാഫുകൾ
|
||||
* **കോഡ്** ടാബ്, ഇവിടെ നിങ്ങൾക്ക് നെറ്റ്ലോഗോ പ്രോഗ്രാം ടൈപ്പ് ചെയ്യാം
|
||||
|
||||
പലപ്പോഴും, ഇന്റർഫേസിൽ ഒരു **Setup** ബട്ടൺ ഉണ്ടാകും, ഇത് സിമുലേഷൻ നില ആരംഭിക്കും, കൂടാതെ **Go** ബട്ടൺ പ്രവർത്തനം ആരംഭിക്കും. ഇവ കോഡിലെ അനുയോജ്യമായ ഹാൻഡ്ലറുകൾ വഴി കൈകാര്യം ചെയ്യപ്പെടുന്നു:
|
||||
|
||||
```
|
||||
to go [
|
||||
...
|
||||
]
|
||||
```
|
||||
|
||||
|
||||
നെറ്റ്ലോഗോയുടെ ലോകം താഴെ പറയുന്ന ഘടകങ്ങളാൽ നിർമ്മിതമാണ്:
|
||||
|
||||
* **ഏജന്റുകൾ** (turtles) ഫീൽഡിൽ ചലിക്കുന്നവയും പ്രവർത്തിക്കുന്നവയും. `ask turtles [...]` സിന്താക്സ് ഉപയോഗിച്ച് ഏജന്റുകളെ നിയന്ത്രിക്കാം, ബ്രാക്കറ്റിനുള്ളിലെ കോഡ് എല്ലാ ഏജന്റുകളും *turtle mode*-ൽ പ്രവർത്തിക്കും.
|
||||
* **പാച്ചുകൾ** ഫീൽഡിലെ ചതുരാകൃതിയിലുള്ള പ്രദേശങ്ങൾ, ഏജന്റുകൾ അവിടെ ജീവിക്കുന്നു. ഒരേ പാച്ചിലുള്ള ഏജന്റുകളെ കാണാനോ പാച്ചിന്റെ നിറം, മറ്റ് ഗുണങ്ങൾ മാറ്റാനോ കഴിയും. `ask patches` ഉപയോഗിച്ച് പാച്ചുകൾക്ക് നിർദ്ദേശിക്കാം.
|
||||
* **ഓബ്സർവർ** ലോകത്തെ നിയന്ത്രിക്കുന്ന ഏക ഏജന്റാണ്. എല്ലാ ബട്ടൺ ഹാൻഡ്ലറുകളും *observer mode*-ൽ പ്രവർത്തിക്കുന്നു.
|
||||
|
||||
> ✅ മൾട്ടി-ഏജന്റ് പരിസ്ഥിതിയുടെ സുന്ദര്യം ഇതാണ്: turtle mode-ലോ patch mode-ലോ പ്രവർത്തിക്കുന്ന കോഡ് എല്ലാ ഏജന്റുകളും സമാന്തരമായി ഒരേസമയം പ്രവർത്തിക്കുന്നു. അതിനാൽ ചെറിയ കോഡ് എഴുതിയും വ്യക്തിഗത ഏജന്റിന്റെ പെരുമാറ്റം പ്രോഗ്രാം ചെയ്തും, സിമുലേഷൻ സിസ്റ്റത്തിന്റെ സങ്കീർണ്ണമായ പെരുമാറ്റം സൃഷ്ടിക്കാം.
|
||||
|
||||
### ഫ്ലോക്കിംഗ്
|
||||
|
||||
മൾട്ടി-ഏജന്റ് പെരുമാറ്റത്തിന്റെ ഉദാഹരണമായി **[Flocking](https://en.wikipedia.org/wiki/Flocking_(behavior))** പരിഗണിക്കാം. ഫ്ലോക്കിംഗ് പക്ഷികളുടെ കൂട്ടം പറക്കുന്ന രീതിയോട് വളരെ സമാനമാണ്. അവ പറക്കുന്നപ്പോൾ അവർ ഒരു കൂട്ടായ്മാ ആൽഗോരിതം പിന്തുടരുന്നുവെന്ന് തോന്നാം, അല്ലെങ്കിൽ അവർക്ക് ഒരു തരത്തിലുള്ള *കോളക്റ്റീവ് ഇന്റലിജൻസ്* ഉണ്ടെന്ന് തോന്നാം. എന്നാൽ ഈ സങ്കീർണ്ണമായ പെരുമാറ്റം ഓരോ വ്യക്തിഗത ഏജന്റും (ഇവിടെ *പക്ഷി*) അടുത്തുള്ള ഏജന്റുകളെ കുറച്ച് ദൂരത്തിൽ മാത്രം നിരീക്ഷിച്ച് താഴെ പറയുന്ന മൂന്ന് ലളിതമായ നിയമങ്ങൾ പാലിക്കുമ്പോഴാണ് ഉണ്ടാകുന്നത്:
|
||||
|
||||
* **അലൈൻമെന്റ്** - സമീപമുള്ള ഏജന്റുകളുടെ ശരാശരി ദിശയിലേക്ക് തിരിയുക
|
||||
* **കോഹീഷൻ** - സമീപവാസികളുടെ ശരാശരി സ്ഥാനത്തേക്ക് തിരിയാൻ ശ്രമിക്കുക (*ദീർഘദൂര ആകർഷണം*)
|
||||
* **സെപ്പറേഷൻ** - മറ്റുള്ള പക്ഷികളോട് വളരെ അടുത്ത് വന്നാൽ അകലെ പോകാൻ ശ്രമിക്കുക (*സങ്കീർണ്ണ ദൂര തള്ളൽ*)
|
||||
|
||||
ഫ്ലോക്കിംഗ് ഉദാഹരണം പ്രവർത്തിപ്പിച്ച് പെരുമാറ്റം നിരീക്ഷിക്കാം. *സെപ്പറേഷൻ* അളവ്, *വ്യൂയിംഗ് റേഞ്ച്* (ഒരു പക്ഷി എത്ര ദൂരം കാണാൻ കഴിയും) പോലുള്ള പാരാമീറ്ററുകൾ ക്രമീകരിക്കാം. വ്യൂയിംഗ് റേഞ്ച് 0 ആക്കിയാൽ എല്ലാ പക്ഷികളും കാഴ്ച നഷ്ടപ്പെടുകയും ഫ്ലോക്കിംഗ് നിർത്തുകയും ചെയ്യും. സെപ്പറേഷൻ 0 ആക്കിയാൽ എല്ലാ പക്ഷികളും ഒരു നേരിയ വരിയിലായി ചേരും.
|
||||
|
||||
> ✅ **കോഡ്** ടാബിലേക്ക് മാറി ഫ്ലോക്കിംഗിന്റെ മൂന്ന് നിയമങ്ങൾ (അലൈൻമെന്റ്, കോഹീഷൻ, സെപ്പറേഷൻ) എവിടെ നടപ്പിലാക്കിയിട്ടുള്ളതെന്ന് നോക്കൂ. നാം കാണുന്നത് മാത്രം ഏജന്റുകളെ പരിഗണിക്കുന്നതാണെന്ന് ശ്രദ്ധിക്കുക.
|
||||
|
||||
### മറ്റ് കാണേണ്ട മോഡലുകൾ
|
||||
|
||||
കൂടുതൽ പരീക്ഷിക്കാവുന്ന ചില രസകരമായ മോഡലുകൾ:
|
||||
|
||||
* **Art → Fireworks** - ഒരു ഫയർവർക്കിന്റെ പെരുമാറ്റം വ്യക്തിഗത തീ പാളികളുടെ കൂട്ടായ്മയായി കാണിക്കുന്നു
|
||||
* **Social Science → Traffic Basic** & **Social Science → Traffic Grid** - 1D, 2D ഗ്രിഡിൽ ട്രാഫിക് മോഡലുകൾ, ട്രാഫിക് ലൈറ്റുകളോടോ ഇല്ലാതെയോ. ഓരോ കാർക്കും താഴെ പറയുന്ന നിയമങ്ങൾ പാലിക്കുന്നു:
|
||||
- മുന്നിലുള്ള സ്ഥലം ശൂന്യമെങ്കിൽ വേഗം കൂട്ടുക (ഒരു പരമാവധി വേഗം വരെ)
|
||||
- മുന്നിൽ തടസം കാണുമ്പോൾ ബ്രേക്ക് ചെയ്യുക (ഡ്രൈവർ എത്ര ദൂരം കാണാൻ കഴിയും എന്നത് ക്രമീകരിക്കാം)
|
||||
* **Social Science → Party** - ഒരു പാർട്ടി സമയത്ത് ആളുകൾ എങ്ങനെ കൂട്ടം ചേരുന്നു എന്ന് കാണിക്കുന്നു. ഗ്രൂപ്പിന്റെ സന്തോഷം എത്ര വേഗം വർദ്ധിക്കുന്നു എന്നതിന് അനുയോജ്യമായ പാരാമീറ്ററുകൾ കണ്ടെത്താം.
|
||||
|
||||
ഈ ഉദാഹരണങ്ങളിൽ നിന്ന് കാണുന്നത്, മൾട്ടി-ഏജന്റ് സിമുലേഷനുകൾ ഒരേ അല്ലെങ്കിൽ സമാനമായ തർക്കശേഷി പിന്തുടരുന്ന വ്യക്തികളുടെ സങ്കീർണ്ണമായ സിസ്റ്റത്തിന്റെ പെരുമാറ്റം മനസ്സിലാക്കാൻ വളരെ സഹായകരമാണ്. ഇത് കമ്പ്യൂട്ടർ ഗെയിമുകളിലെ [NPCs](https://en.wikipedia.org/wiki/NPC) പോലുള്ള വെർച്വൽ ഏജന്റുകളെ നിയന്ത്രിക്കാൻ, 3D ആനിമേറ്റഡ് ലോകങ്ങളിലെ ഏജന്റുകളെ നിയന്ത്രിക്കാൻ ഉപയോഗിക്കാം.
|
||||
|
||||
## ഡെലിബറേറ്റീവ് ഏജന്റുകൾ
|
||||
|
||||
മുകളിൽ വിവരിച്ച ഏജന്റുകൾ വളരെ ലളിതമാണ്, പരിസ്ഥിതിയിലെ മാറ്റങ്ങൾക്ക് ഒരു ആൽഗോരിതം ഉപയോഗിച്ച് പ്രതികരിക്കുന്നു. ഇവ **റിയാക്ടീവ് ഏജന്റുകൾ** ആണ്. എന്നാൽ ചിലപ്പോൾ ഏജന്റുകൾ തർക്കശേഷിയും പദ്ധതിയിടലും നടത്തുന്നു, അപ്പോൾ അവ **ഡെലിബറേറ്റീവ്** എന്ന് വിളിക്കുന്നു.
|
||||
|
||||
ഒരു സാധാരണ ഉദാഹരണം, ഒരു വ്യക്തിഗത ഏജന്റ് മനുഷ്യനിൽ നിന്ന് അവധിക്കാല യാത്ര ബുക്ക് ചെയ്യാൻ നിർദ്ദേശം ലഭിക്കുന്നത്. ഇന്റർനെറ്റിൽ ജീവിക്കുന്ന നിരവധി ഏജന്റുകൾ സഹായിക്കാം. അവ വിമാനങ്ങൾ ലഭ്യമാണോ, ഹോട്ടൽ വിലകൾ വ്യത്യസ്ത തീയതികളിൽ എങ്ങനെ ഉണ്ട് എന്ന് പരിശോധിച്ച് മികച്ച വിലക്ക് ചർച്ച ചെയ്യണം. യാത്രാ പദ്ധതി പൂർത്തിയാക്കി ഉടമ സ്ഥിരീകരിച്ചാൽ ബുക്കിംഗ് നടത്താം.
|
||||
|
||||
അതിനായി, ഏജന്റുകൾക്ക് **സംവാദം** നടത്തേണ്ടതുണ്ട്. വിജയകരമായ സംവാദത്തിന് അവയ്ക്ക് ആവശ്യമാണ്:
|
||||
|
||||
* **ജ്ഞാനം കൈമാറാനുള്ള ചില സ്റ്റാൻഡേർഡ് ഭാഷകൾ**, ഉദാഹരണത്തിന് [Knowledge Interchange Format](https://en.wikipedia.org/wiki/Knowledge_Interchange_Format) (KIF) & [Knowledge Query and Manipulation Language](https://en.wikipedia.org/wiki/Knowledge_Query_and_Manipulation_Language) (KQML). ഈ ഭാഷകൾ [Speech Act theory](https://en.wikipedia.org/wiki/Speech_act) അടിസ്ഥാനമാക്കി രൂപകൽപ്പന ചെയ്തതാണ്.
|
||||
* **നേട്ടത്തിനുള്ള പ്രോട്ടോകോളുകൾ**, വ്യത്യസ്ത **ഓക്ഷൻ തരം** അടിസ്ഥാനമാക്കി ഉൾക്കൊള്ളണം.
|
||||
* ഒരേ ആശയങ്ങൾ സൂചിപ്പിക്കാൻ ഉപയോഗിക്കുന്ന **സാധാരണ ഓന്റോളജി**.
|
||||
* വ്യത്യസ്ത ഏജന്റുകൾ എന്ത് ചെയ്യാൻ കഴിയും എന്ന് കണ്ടെത്താനുള്ള മാർഗ്ഗം, ഓന്റോളജി അടിസ്ഥാനമാക്കി.
|
||||
|
||||
ഡെലിബറേറ്റീവ് ഏജന്റുകൾ റിയാക്ടീവ് ഏജന്റുകളേക്കാൾ വളരെ സങ്കീർണ്ണമാണ്, കാരണം അവർ പരിസ്ഥിതിയിലെ മാറ്റങ്ങൾക്ക് മാത്രമല്ല പ്രതികരിക്കേണ്ടത്, പ്രവർത്തനങ്ങൾ **ആരംഭിക്കാനും** കഴിയും. ഡെലിബറേറ്റീവ് ഏജന്റുകൾക്കുള്ള നിർദ്ദേശിച്ച ആർക്കിടെക്ചറുകളിൽ ഒന്ന് Belief-Desire-Intention (BDI) മോഡലാണ്:
|
||||
|
||||
* **Beliefs** - ഏജന്റിന്റെ പരിസ്ഥിതിയെക്കുറിച്ചുള്ള അറിവുകളുടെ സമാഹാരം. ഇത് ഒരു നോളജ് ബേസ് അല്ലെങ്കിൽ നിയമങ്ങളുടെ സമാഹാരമായി ഘടിപ്പിക്കാം, ഏജന്റ് പ്രത്യേക സാഹചര്യങ്ങളിൽ പ്രയോഗിക്കാം.
|
||||
* **Desires** - ഏജന്റ് ചെയ്യാൻ ആഗ്രഹിക്കുന്ന കാര്യങ്ങൾ, അതായത് ലക്ഷ്യങ്ങൾ. ഉദാഹരണത്തിന്, മുകളിൽ പറഞ്ഞ വ്യക്തിഗത അസിസ്റ്റന്റിന്റെ ലക്ഷ്യം ടൂർ ബുക്ക് ചെയ്യുക, ഹോട്ടൽ ഏജന്റിന്റെ ലക്ഷ്യം ലാഭം പരമാവധി ആക്കുക.
|
||||
* **Intentions** - ലക്ഷ്യങ്ങൾ നേടാൻ ഏജന്റ് പദ്ധതിയിടുന്ന പ്രത്യേക പ്രവർത്തനങ്ങൾ. പ്രവർത്തനങ്ങൾ സാധാരണയായി പരിസ്ഥിതിയിൽ മാറ്റം വരുത്തുകയും മറ്റ് ഏജന്റുകളുമായി സംവദിക്കുകയും ചെയ്യും.
|
||||
|
||||
മൾട്ടി-ഏജന്റ് സിസ്റ്റങ്ങൾ നിർമ്മിക്കാൻ ചില പ്ലാറ്റ്ഫോമുകൾ ലഭ്യമാണ്, ഉദാഹരണത്തിന് [JADE](https://jade.tilab.com/). [ഈ പേപ്പർ](https://arxiv.org/ftp/arxiv/papers/2007/2007.08961.pdf) മൾട്ടി-ഏജന്റ് പ്ലാറ്റ്ഫോമുകളുടെ അവലോകനവും മൾട്ടി-ഏജന്റ് സിസ്റ്റങ്ങളുടെ ചരിത്രവും വിവിധ ഉപയോഗ സാഹചര്യങ്ങളും ഉൾക്കൊള്ളുന്നു.
|
||||
|
||||
## സമാപനം
|
||||
|
||||
മൾട്ടി-ഏജന്റ് സിസ്റ്റങ്ങൾ വ്യത്യസ്ത രൂപങ്ങളിൽ ഉണ്ടാകാം, പല മേഖലകളിലും ഉപയോഗിക്കാം. അവ എല്ലാം വ്യക്തിഗത ഏജന്റിന്റെ ലളിതമായ പെരുമാറ്റത്തിൽ കേന്ദ്രീകരിച്ച്, **സിനർജറ്റിക് ഫലഫലമായി** സമ്പൂർണ്ണ സിസ്റ്റത്തിന്റെ കൂടുതൽ സങ്കീർണ്ണമായ പെരുമാറ്റം സൃഷ്ടിക്കുന്നു.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
ഈ പാഠം യാഥാർത്ഥ്യത്തിലേക്ക് കൊണ്ടുപോയി ഒരു പ്രശ്നം പരിഹരിക്കാൻ കഴിയുന്ന മൾട്ടി-ഏജന്റ് സിസ്റ്റം ആശയവിനിമയം ചെയ്യുക. ഉദാഹരണത്തിന്, ഒരു സ്കൂൾ ബസ് റൂട്ടിനെ എങ്ങനെ മെച്ചപ്പെടുത്താൻ മൾട്ടി-ഏജന്റ് സിസ്റ്റം സഹായിക്കുമെന്നു
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് പരിഗണിക്കേണ്ടതാണ്. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "38a1185ae3d54b180378bbd71ae3ef16",
|
||||
"translation_date": "2025-11-25T23:36:41+00:00",
|
||||
"source_file": "lessons/6-Other/23-MultiagentSystems/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# മൾട്ടി-ഏജന്റ് സിസ്റ്റങ്ങൾ
|
||||
|
||||
ബുദ്ധിമുട്ട് നേടാനുള്ള ഒരു സാധ്യതയുള്ള മാർഗ്ഗം **എമർജന്റ്** (അഥവാ **സിനർജറ്റിക്**) സമീപനമാണ്, ഇത് അടിസ്ഥാനമാക്കുന്നത് പലതരം ലളിതമായ ഏജന്റുകളുടെ സംയുക്ത പെരുമാറ്റം സമ്പൂർണ്ണമായും കൂടുതൽ സങ്കീർണ്ണമായ (അഥവാ ബുദ്ധിമുട്ടുള്ള) സിസ്റ്റത്തിന്റെ പെരുമാറ്റമായി മാറാൻ കഴിയും എന്ന സത്യത്തിൽ. സിദ്ധാന്തപരമായി, ഇത് [കോളക്റ്റീവ് ഇന്റലിജൻസ്](https://en.wikipedia.org/wiki/Collective_intelligence), [എമർജന്റിസം](https://en.wikipedia.org/wiki/Global_brain) എന്നിവയുടെ സിദ്ധാന്തങ്ങളിലാണ് അടിസ്ഥാനമാക്കിയിരിക്കുന്നത്, കൂടാതെ [എവല്യൂഷണറി സൈബർനെറ്റിക്സ്](https://en.wikipedia.org/wiki/Global_brain) എന്നത് താഴ്ന്ന തലത്തിലുള്ള സിസ്റ്റങ്ങൾ ശരിയായി സംയോജിപ്പിക്കുമ്പോൾ ഉയർന്ന തലത്തിലുള്ള സിസ്റ്റങ്ങൾ ചില അധിക മൂല്യം നേടുന്നു എന്ന് പറയുന്നു (ഇത് *മെറ്റാസിസ്റ്റം ട്രാൻസിഷൻ സിദ്ധാന്തം* എന്നറിയപ്പെടുന്നു).
|
||||
|
||||
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ai/quiz/45)
|
||||
|
||||
**മൾട്ടി-ഏജന്റ് സിസ്റ്റങ്ങൾ** എന്ന ദിശ 1990-കളിൽ ഇന്റർനെറ്റിന്റെയും വിതരണ സിസ്റ്റങ്ങളുടെയും വളർച്ചയ്ക്ക് പ്രതികരണമായി AI-യിൽ ഉദയം കണ്ടു. ക്ലാസിക്കൽ AI പാഠപുസ്തകങ്ങളിൽ ഒന്നായ [Artificial Intelligence: A Modern Approach](https://en.wikipedia.org/wiki/Artificial_Intelligence:_A_Modern_Approach) മൾട്ടി-ഏജന്റ് സിസ്റ്റങ്ങളുടെ കാഴ്ചപ്പാടിൽ നിന്നുള്ള ക്ലാസിക്കൽ AI-യെ പ്രധാനം ചെയ്യുന്നു.
|
||||
|
||||
മൾട്ടി-ഏജന്റ് സമീപനത്തിന്റെ കേന്ദ്ര ആശയം **ഏജന്റ്** എന്നതാണ് - ഒരു സജീവമായ ഘടകം, അത് ഒരു **പരിസ്ഥിതിയിൽ** ജീവിക്കുന്നു, അത് അവബോധിക്കുകയും പ്രവർത്തിക്കുകയും ചെയ്യുന്നു. ഇത് വളരെ വ്യാപകമായ നിർവചനമാണ്, ഏജന്റുകളുടെ പല തരങ്ങളും വർഗ്ഗീകരണങ്ങളും ഉണ്ടാകാം:
|
||||
|
||||
* അവയുടെ തർക്കശേഷി അനുസരിച്ച്:
|
||||
- **റിയാക്ടീവ്** ഏജന്റുകൾ സാധാരണയായി ലളിതമായ അഭ്യർത്ഥന-പ്രതികരണ രീതിയിലുള്ള പെരുമാറ്റം കാണിക്കുന്നു
|
||||
- **ഡെലിബറേറ്റീവ്** ഏജന്റുകൾ ചില തർക്കശേഷി അല്ലെങ്കിൽ പദ്ധതിയിടൽ കഴിവുകൾ ഉപയോഗിക്കുന്നു
|
||||
* ഏജന്റ് കോഡ് എവിടെ പ്രവർത്തിക്കുന്നു എന്ന അനുസരിച്ച്:
|
||||
- **സ്റ്റാറ്റിക്** ഏജന്റുകൾ ഒരു നിശ്ചിത നെറ്റ്വർക്ക് നോഡിൽ പ്രവർത്തിക്കുന്നു
|
||||
- **മൊബൈൽ** ഏജന്റുകൾ അവരുടെ കോഡ് നെറ്റ്വർക്ക് നോഡുകൾക്കിടയിൽ മാറ്റി കൊണ്ടുപോകാൻ കഴിയും
|
||||
* അവയുടെ പെരുമാറ്റം അനുസരിച്ച്:
|
||||
- **പാസ്സീവ് ഏജന്റുകൾ** പ്രത്യേക ലക്ഷ്യങ്ങളില്ല. ഇവ പുറം പ്രേരണകളെ പ്രതികരിക്കും, എന്നാൽ സ്വയം പ്രവർത്തനങ്ങൾ ആരംഭിക്കില്ല.
|
||||
- **ആക്ടീവ് ഏജന്റുകൾ** ചില ലക്ഷ്യങ്ങൾ പിന്തുടരുന്നു
|
||||
- **കോഗ്നിറ്റീവ് ഏജന്റുകൾ** സങ്കീർണ്ണമായ പദ്ധതിയിടലും തർക്കശേഷിയും ഉൾക്കൊള്ളുന്നു
|
||||
|
||||
ഇന്നത്തെ കാലത്ത് മൾട്ടി-ഏജന്റ് സിസ്റ്റങ്ങൾ പല മേഖലകളിൽ ഉപയോഗിക്കുന്നു:
|
||||
|
||||
* ഗെയിമുകളിൽ, പല നോൺ-പ്ലെയർ കഥാപാത്രങ്ങളും ചില AI ഉപയോഗിച്ച് ബുദ്ധിമുട്ടുള്ള ഏജന്റുകളായി കണക്കാക്കാം
|
||||
* വീഡിയോ നിർമ്മാണത്തിൽ, ജനക്കൂട്ടങ്ങൾ ഉൾപ്പെടുന്ന സങ്കീർണ്ണമായ 3D സീനുകൾ റെൻഡർ ചെയ്യാൻ സാധാരണയായി മൾട്ടി-ഏജന്റ് സിമുലേഷൻ ഉപയോഗിക്കുന്നു
|
||||
* സിസ്റ്റം മോഡലിംഗിൽ, സങ്കീർണ്ണമായ മോഡലിന്റെ പെരുമാറ്റം സിമുലേറ്റ് ചെയ്യാൻ മൾട്ടി-ഏജന്റ് സമീപനം ഉപയോഗിക്കുന്നു. ഉദാഹരണത്തിന്, COVID-19 രോഗം ലോകമാകെ വ്യാപിക്കുന്നതിന്റെ പ്രവചനത്തിന് മൾട്ടി-ഏജന്റ് സമീപനം വിജയകരമായി ഉപയോഗിച്ചിട്ടുണ്ട്. സമാനമായ സമീപനം നഗരത്തിലെ ട്രാഫിക് മോഡലിംഗിനും ഉപയോഗിക്കാം, ട്രാഫിക് നിയമങ്ങളിൽ മാറ്റം വന്നാൽ എങ്ങനെ പ്രതികരിക്കും എന്ന് കാണാൻ.
|
||||
* സങ്കീർണ്ണമായ ഓട്ടോമേഷൻ സിസ്റ്റങ്ങളിൽ, ഓരോ ഉപകരണവും സ്വതന്ത്ര ഏജന്റായി പ്രവർത്തിക്കാം, ഇത് മുഴുവൻ സിസ്റ്റം കൂടുതൽ ലളിതവും ദൃഢവുമാക്കുന്നു.
|
||||
|
||||
മൾട്ടി-ഏജന്റ് സിസ്റ്റങ്ങളിൽ കൂടുതൽ ആഴത്തിൽ പോകാതെ, **മൾട്ടി-ഏജന്റ് മോഡലിംഗ്** എന്ന ഒരു ഉദാഹരണം പരിഗണിക്കാം.
|
||||
|
||||
## നെറ്റ്ലോഗോ
|
||||
|
||||
[NetLogo](https://ccl.northwestern.edu/netlogo/) ഒരു മൾട്ടി-ഏജന്റ് മോഡലിംഗ് പരിസ്ഥിതിയാണ്, ഇത് [Logo](https://en.wikipedia.org/wiki/Logo_(programming_language)) പ്രോഗ്രാമിംഗ് ഭാഷയുടെ മാറ്റം വരുത്തിയ പതിപ്പിൽ അടിസ്ഥാനമാക്കിയതാണ്. ഈ ഭാഷ കുട്ടികൾക്ക് പ്രോഗ്രാമിംഗ് ആശയങ്ങൾ പഠിപ്പിക്കാൻ വികസിപ്പിച്ചതാണ്, ഇത് **turtle** എന്ന ഏജന്റിനെ നിയന്ത്രിക്കാൻ അനുവദിക്കുന്നു, അത് നീങ്ങുകയും പിന്നിൽ ഒരു പാത വിടുകയും ചെയ്യുന്നു. ഇത് സങ്കീർണ്ണമായ ജ്യാമിതീയ ആകൃതികൾ സൃഷ്ടിക്കാൻ സഹായിക്കുന്നു, ഏജന്റിന്റെ പെരുമാറ്റം ദൃശ്യമായി മനസ്സിലാക്കാൻ ഇത് വളരെ സഹായകരമാണ്.
|
||||
|
||||
നെറ്റ്ലോഗോയിൽ, `create-turtles` കമാൻഡ് ഉപയോഗിച്ച് നിരവധി turtles സൃഷ്ടിക്കാം. പിന്നീട് എല്ലാ turtles-ഉം ചില പ്രവർത്തനങ്ങൾ ചെയ്യാൻ നിർദ്ദേശിക്കാം (താഴെ ഉദാഹരണത്തിൽ - 10 പോയിന്റ് മുന്നോട്ട്):
|
||||
|
||||
```
|
||||
create-turtles 10
|
||||
ask turtles [
|
||||
forward 10
|
||||
]
|
||||
```
|
||||
|
||||
|
||||
എല്ലാ turtles-ഉം ഒരേ കാര്യം ചെയ്യുന്നത് രസകരമല്ല, അതിനാൽ നാം `ask` ഉപയോഗിച്ച് turtles-ന്റെ ഗ്രൂപ്പുകളെ, ഉദാഹരണത്തിന് ഒരു പ്രത്യേക പോയിന്റിന്റെ സമീപത്തുള്ളവരെ, നിർദ്ദേശിക്കാം. `breed [cats cat]` കമാൻഡ് ഉപയോഗിച്ച് വ്യത്യസ്ത *breeds* ഉള്ള turtles സൃഷ്ടിക്കാം. ഇവിടെ `cat` ഒരു breed നാമമാണ്, ഒറ്റപ്പേരും ബഹുവചനവും വ്യക്തമാക്കേണ്ടത് വിവിധ കമാൻഡുകൾ വ്യത്യസ്ത രൂപങ്ങൾ ഉപയോഗിക്കുന്നതിനാലാണ്.
|
||||
|
||||
> ✅ നെറ്റ്ലോഗോ ഭാഷ പഠിക്കാൻ നാം കൂടുതൽ സമയം ചെലവഴിക്കില്ല - കൂടുതൽ അറിയാൻ ആഗ്രഹിക്കുന്നവർക്ക് അത്ഭുതകരമായ [Beginner's Interactive NetLogo Dictionary](https://ccl.northwestern.edu/netlogo/bind/) സന്ദർശിക്കാം.
|
||||
|
||||
നിങ്ങൾക്ക് [ഡൗൺലോഡ്](https://ccl.northwestern.edu/netlogo/download.shtml) ചെയ്ത് നെറ്റ്ലോഗോ ഇൻസ്റ്റാൾ ചെയ്ത് പരീക്ഷിക്കാം.
|
||||
|
||||
### മോഡലുകളുടെ ലൈബ്രറി
|
||||
|
||||
നെറ്റ്ലോഗോയുടെ മികച്ച പ്രത്യേകത ഇതിൽ പ്രവർത്തനക്ഷമമായ മോഡലുകളുടെ ലൈബ്രറി ഉള്ളതാണ്. **File → Models Library** എന്ന വഴി പോകുക, അവിടെ നിരവധി മോഡൽ വിഭാഗങ്ങൾ തിരഞ്ഞെടുക്കാം.
|
||||
|
||||
<img alt="NetLogo Models Library" src="../../../../../translated_images/NetLogo-ModelLib.efe023afb4763c05.ml.png" width="60%"/>
|
||||
|
||||
> മോഡൽ ലൈബ്രറിയുടെ സ്ക്രീൻഷോട്ട് - Dmitry Soshnikov
|
||||
|
||||
നിങ്ങൾ ഒരു മോഡൽ തുറക്കാം, ഉദാഹരണത്തിന് **Biology → Flocking**.
|
||||
|
||||
### പ്രധാന സിദ്ധാന്തങ്ങൾ
|
||||
|
||||
മോഡൽ തുറന്ന ശേഷം, നിങ്ങൾ പ്രധാന നെറ്റ്ലോഗോ സ്ക്രീനിലേക്ക് എത്തും. ഇവിടെ finite resources (പുല്ല്) ഉള്ള ഒരു വുൾഫ്-ഷീപ്പ് ജനസംഖ്യയെ വിവരിക്കുന്ന ഒരു മാതൃകയാണ്.
|
||||
|
||||

|
||||
|
||||
> സ്ക്രീൻഷോട്ട് - Dmitry Soshnikov
|
||||
|
||||
ഈ സ്ക്രീനിൽ നിങ്ങൾക്ക് കാണാം:
|
||||
|
||||
* **ഇന്റർഫേസ്** വിഭാഗം, ഇതിൽ:
|
||||
- എല്ലാ ഏജന്റുകളും ജീവിക്കുന്ന പ്രധാന ഫീൽഡ്
|
||||
- ബട്ടണുകൾ, സ്ലൈഡറുകൾ തുടങ്ങിയ നിയന്ത്രണങ്ങൾ
|
||||
- സിമുലേഷന്റെ പാരാമീറ്ററുകൾ പ്രദർശിപ്പിക്കാൻ ഉപയോഗിക്കുന്ന ഗ്രാഫുകൾ
|
||||
* **കോഡ്** ടാബ്, ഇവിടെ നിങ്ങൾക്ക് നെറ്റ്ലോഗോ പ്രോഗ്രാം ടൈപ്പ് ചെയ്യാം
|
||||
|
||||
പലപ്പോഴും, ഇന്റർഫേസിൽ ഒരു **Setup** ബട്ടൺ ഉണ്ടാകും, ഇത് സിമുലേഷൻ നില ആരംഭിക്കും, കൂടാതെ **Go** ബട്ടൺ പ്രവർത്തനം ആരംഭിക്കും. ഇവ കോഡിലെ അനുയോജ്യമായ ഹാൻഡ്ലറുകൾ വഴി കൈകാര്യം ചെയ്യപ്പെടുന്നു:
|
||||
|
||||
```
|
||||
to go [
|
||||
...
|
||||
]
|
||||
```
|
||||
|
||||
|
||||
നെറ്റ്ലോഗോയുടെ ലോകം താഴെ പറയുന്ന ഘടകങ്ങളാൽ നിർമ്മിതമാണ്:
|
||||
|
||||
* **ഏജന്റുകൾ** (turtles) ഫീൽഡിൽ ചലിക്കുന്നവയും പ്രവർത്തിക്കുന്നവയും. `ask turtles [...]` സിന്താക്സ് ഉപയോഗിച്ച് ഏജന്റുകളെ നിയന്ത്രിക്കാം, ബ്രാക്കറ്റിനുള്ളിലെ കോഡ് എല്ലാ ഏജന്റുകളും *turtle mode*-ൽ പ്രവർത്തിക്കും.
|
||||
* **പാച്ചുകൾ** ഫീൽഡിലെ ചതുരാകൃതിയിലുള്ള പ്രദേശങ്ങൾ, ഏജന്റുകൾ അവിടെ ജീവിക്കുന്നു. ഒരേ പാച്ചിലുള്ള ഏജന്റുകളെ കാണാനോ പാച്ചിന്റെ നിറം, മറ്റ് ഗുണങ്ങൾ മാറ്റാനോ കഴിയും. `ask patches` ഉപയോഗിച്ച് പാച്ചുകൾക്ക് നിർദ്ദേശിക്കാം.
|
||||
* **ഓബ്സർവർ** ലോകത്തെ നിയന്ത്രിക്കുന്ന ഏക ഏജന്റാണ്. എല്ലാ ബട്ടൺ ഹാൻഡ്ലറുകളും *observer mode*-ൽ പ്രവർത്തിക്കുന്നു.
|
||||
|
||||
> ✅ മൾട്ടി-ഏജന്റ് പരിസ്ഥിതിയുടെ സുന്ദര്യം ഇതാണ്: turtle mode-ലോ patch mode-ലോ പ്രവർത്തിക്കുന്ന കോഡ് എല്ലാ ഏജന്റുകളും സമാന്തരമായി ഒരേസമയം പ്രവർത്തിക്കുന്നു. അതിനാൽ ചെറിയ കോഡ് എഴുതിയും വ്യക്തിഗത ഏജന്റിന്റെ പെരുമാറ്റം പ്രോഗ്രാം ചെയ്തും, സിമുലേഷൻ സിസ്റ്റത്തിന്റെ സങ്കീർണ്ണമായ പെരുമാറ്റം സൃഷ്ടിക്കാം.
|
||||
|
||||
### ഫ്ലോക്കിംഗ്
|
||||
|
||||
മൾട്ടി-ഏജന്റ് പെരുമാറ്റത്തിന്റെ ഉദാഹരണമായി **[Flocking](https://en.wikipedia.org/wiki/Flocking_(behavior))** പരിഗണിക്കാം. ഫ്ലോക്കിംഗ് പക്ഷികളുടെ കൂട്ടം പറക്കുന്ന രീതിയോട് വളരെ സമാനമാണ്. അവ പറക്കുന്നപ്പോൾ അവർ ഒരു കൂട്ടായ്മാ ആൽഗോരിതം പിന്തുടരുന്നുവെന്ന് തോന്നാം, അല്ലെങ്കിൽ അവർക്ക് ഒരു തരത്തിലുള്ള *കോളക്റ്റീവ് ഇന്റലിജൻസ്* ഉണ്ടെന്ന് തോന്നാം. എന്നാൽ ഈ സങ്കീർണ്ണമായ പെരുമാറ്റം ഓരോ വ്യക്തിഗത ഏജന്റും (ഇവിടെ *പക്ഷി*) അടുത്തുള്ള ഏജന്റുകളെ കുറച്ച് ദൂരത്തിൽ മാത്രം നിരീക്ഷിച്ച് താഴെ പറയുന്ന മൂന്ന് ലളിതമായ നിയമങ്ങൾ പാലിക്കുമ്പോഴാണ് ഉണ്ടാകുന്നത്:
|
||||
|
||||
* **അലൈൻമെന്റ്** - സമീപമുള്ള ഏജന്റുകളുടെ ശരാശരി ദിശയിലേക്ക് തിരിയുക
|
||||
* **കോഹീഷൻ** - സമീപവാസികളുടെ ശരാശരി സ്ഥാനത്തേക്ക് തിരിയാൻ ശ്രമിക്കുക (*ദീർഘദൂര ആകർഷണം*)
|
||||
* **സെപ്പറേഷൻ** - മറ്റുള്ള പക്ഷികളോട് വളരെ അടുത്ത് വന്നാൽ അകലെ പോകാൻ ശ്രമിക്കുക (*സങ്കീർണ്ണ ദൂര തള്ളൽ*)
|
||||
|
||||
ഫ്ലോക്കിംഗ് ഉദാഹരണം പ്രവർത്തിപ്പിച്ച് പെരുമാറ്റം നിരീക്ഷിക്കാം. *സെപ്പറേഷൻ* അളവ്, *വ്യൂയിംഗ് റേഞ്ച്* (ഒരു പക്ഷി എത്ര ദൂരം കാണാൻ കഴിയും) പോലുള്ള പാരാമീറ്ററുകൾ ക്രമീകരിക്കാം. വ്യൂയിംഗ് റേഞ്ച് 0 ആക്കിയാൽ എല്ലാ പക്ഷികളും കാഴ്ച നഷ്ടപ്പെടുകയും ഫ്ലോക്കിംഗ് നിർത്തുകയും ചെയ്യും. സെപ്പറേഷൻ 0 ആക്കിയാൽ എല്ലാ പക്ഷികളും ഒരു നേരിയ വരിയിലായി ചേരും.
|
||||
|
||||
> ✅ **കോഡ്** ടാബിലേക്ക് മാറി ഫ്ലോക്കിംഗിന്റെ മൂന്ന് നിയമങ്ങൾ (അലൈൻമെന്റ്, കോഹീഷൻ, സെപ്പറേഷൻ) എവിടെ നടപ്പിലാക്കിയിട്ടുള്ളതെന്ന് നോക്കൂ. നാം കാണുന്നത് മാത്രം ഏജന്റുകളെ പരിഗണിക്കുന്നതാണെന്ന് ശ്രദ്ധിക്കുക.
|
||||
|
||||
### മറ്റ് കാണേണ്ട മോഡലുകൾ
|
||||
|
||||
കൂടുതൽ പരീക്ഷിക്കാവുന്ന ചില രസകരമായ മോഡലുകൾ:
|
||||
|
||||
* **Art → Fireworks** - ഒരു ഫയർവർക്കിന്റെ പെരുമാറ്റം വ്യക്തിഗത തീ പാളികളുടെ കൂട്ടായ്മയായി കാണിക്കുന്നു
|
||||
* **Social Science → Traffic Basic** & **Social Science → Traffic Grid** - 1D, 2D ഗ്രിഡിൽ ട്രാഫിക് മോഡലുകൾ, ട്രാഫിക് ലൈറ്റുകളോടോ ഇല്ലാതെയോ. ഓരോ കാർക്കും താഴെ പറയുന്ന നിയമങ്ങൾ പാലിക്കുന്നു:
|
||||
- മുന്നിലുള്ള സ്ഥലം ശൂന്യമെങ്കിൽ വേഗം കൂട്ടുക (ഒരു പരമാവധി വേഗം വരെ)
|
||||
- മുന്നിൽ തടസം കാണുമ്പോൾ ബ്രേക്ക് ചെയ്യുക (ഡ്രൈവർ എത്ര ദൂരം കാണാൻ കഴിയും എന്നത് ക്രമീകരിക്കാം)
|
||||
* **Social Science → Party** - ഒരു പാർട്ടി സമയത്ത് ആളുകൾ എങ്ങനെ കൂട്ടം ചേരുന്നു എന്ന് കാണിക്കുന്നു. ഗ്രൂപ്പിന്റെ സന്തോഷം എത്ര വേഗം വർദ്ധിക്കുന്നു എന്നതിന് അനുയോജ്യമായ പാരാമീറ്ററുകൾ കണ്ടെത്താം.
|
||||
|
||||
ഈ ഉദാഹരണങ്ങളിൽ നിന്ന് കാണുന്നത്, മൾട്ടി-ഏജന്റ് സിമുലേഷനുകൾ ഒരേ അല്ലെങ്കിൽ സമാനമായ തർക്കശേഷി പിന്തുടരുന്ന വ്യക്തികളുടെ സങ്കീർണ്ണമായ സിസ്റ്റത്തിന്റെ പെരുമാറ്റം മനസ്സിലാക്കാൻ വളരെ സഹായകരമാണ്. ഇത് കമ്പ്യൂട്ടർ ഗെയിമുകളിലെ [NPCs](https://en.wikipedia.org/wiki/NPC) പോലുള്ള വെർച്വൽ ഏജന്റുകളെ നിയന്ത്രിക്കാൻ, 3D ആനിമേറ്റഡ് ലോകങ്ങളിലെ ഏജന്റുകളെ നിയന്ത്രിക്കാൻ ഉപയോഗിക്കാം.
|
||||
|
||||
## ഡെലിബറേറ്റീവ് ഏജന്റുകൾ
|
||||
|
||||
മുകളിൽ വിവരിച്ച ഏജന്റുകൾ വളരെ ലളിതമാണ്, പരിസ്ഥിതിയിലെ മാറ്റങ്ങൾക്ക് ഒരു ആൽഗോരിതം ഉപയോഗിച്ച് പ്രതികരിക്കുന്നു. ഇവ **റിയാക്ടീവ് ഏജന്റുകൾ** ആണ്. എന്നാൽ ചിലപ്പോൾ ഏജന്റുകൾ തർക്കശേഷിയും പദ്ധതിയിടലും നടത്തുന്നു, അപ്പോൾ അവ **ഡെലിബറേറ്റീവ്** എന്ന് വിളിക്കുന്നു.
|
||||
|
||||
ഒരു സാധാരണ ഉദാഹരണം, ഒരു വ്യക്തിഗത ഏജന്റ് മനുഷ്യനിൽ നിന്ന് അവധിക്കാല യാത്ര ബുക്ക് ചെയ്യാൻ നിർദ്ദേശം ലഭിക്കുന്നത്. ഇന്റർനെറ്റിൽ ജീവിക്കുന്ന നിരവധി ഏജന്റുകൾ സഹായിക്കാം. അവ വിമാനങ്ങൾ ലഭ്യമാണോ, ഹോട്ടൽ വിലകൾ വ്യത്യസ്ത തീയതികളിൽ എങ്ങനെ ഉണ്ട് എന്ന് പരിശോധിച്ച് മികച്ച വിലക്ക് ചർച്ച ചെയ്യണം. യാത്രാ പദ്ധതി പൂർത്തിയാക്കി ഉടമ സ്ഥിരീകരിച്ചാൽ ബുക്കിംഗ് നടത്താം.
|
||||
|
||||
അതിനായി, ഏജന്റുകൾക്ക് **സംവാദം** നടത്തേണ്ടതുണ്ട്. വിജയകരമായ സംവാദത്തിന് അവയ്ക്ക് ആവശ്യമാണ്:
|
||||
|
||||
* **ജ്ഞാനം കൈമാറാനുള്ള ചില സ്റ്റാൻഡേർഡ് ഭാഷകൾ**, ഉദാഹരണത്തിന് [Knowledge Interchange Format](https://en.wikipedia.org/wiki/Knowledge_Interchange_Format) (KIF) & [Knowledge Query and Manipulation Language](https://en.wikipedia.org/wiki/Knowledge_Query_and_Manipulation_Language) (KQML). ഈ ഭാഷകൾ [Speech Act theory](https://en.wikipedia.org/wiki/Speech_act) അടിസ്ഥാനമാക്കി രൂപകൽപ്പന ചെയ്തതാണ്.
|
||||
* **നേട്ടത്തിനുള്ള പ്രോട്ടോകോളുകൾ**, വ്യത്യസ്ത **ഓക്ഷൻ തരം** അടിസ്ഥാനമാക്കി ഉൾക്കൊള്ളണം.
|
||||
* ഒരേ ആശയങ്ങൾ സൂചിപ്പിക്കാൻ ഉപയോഗിക്കുന്ന **സാധാരണ ഓന്റോളജി**.
|
||||
* വ്യത്യസ്ത ഏജന്റുകൾ എന്ത് ചെയ്യാൻ കഴിയും എന്ന് കണ്ടെത്താനുള്ള മാർഗ്ഗം, ഓന്റോളജി അടിസ്ഥാനമാക്കി.
|
||||
|
||||
ഡെലിബറേറ്റീവ് ഏജന്റുകൾ റിയാക്ടീവ് ഏജന്റുകളേക്കാൾ വളരെ സങ്കീർണ്ണമാണ്, കാരണം അവർ പരിസ്ഥിതിയിലെ മാറ്റങ്ങൾക്ക് മാത്രമല്ല പ്രതികരിക്കേണ്ടത്, പ്രവർത്തനങ്ങൾ **ആരംഭിക്കാനും** കഴിയും. ഡെലിബറേറ്റീവ് ഏജന്റുകൾക്കുള്ള നിർദ്ദേശിച്ച ആർക്കിടെക്ചറുകളിൽ ഒന്ന് Belief-Desire-Intention (BDI) മോഡലാണ്:
|
||||
|
||||
* **Beliefs** - ഏജന്റിന്റെ പരിസ്ഥിതിയെക്കുറിച്ചുള്ള അറിവുകളുടെ സമാഹാരം. ഇത് ഒരു നോളജ് ബേസ് അല്ലെങ്കിൽ നിയമങ്ങളുടെ സമാഹാരമായി ഘടിപ്പിക്കാം, ഏജന്റ് പ്രത്യേക സാഹചര്യങ്ങളിൽ പ്രയോഗിക്കാം.
|
||||
* **Desires** - ഏജന്റ് ചെയ്യാൻ ആഗ്രഹിക്കുന്ന കാര്യങ്ങൾ, അതായത് ലക്ഷ്യങ്ങൾ. ഉദാഹരണത്തിന്, മുകളിൽ പറഞ്ഞ വ്യക്തിഗത അസിസ്റ്റന്റിന്റെ ലക്ഷ്യം ടൂർ ബുക്ക് ചെയ്യുക, ഹോട്ടൽ ഏജന്റിന്റെ ലക്ഷ്യം ലാഭം പരമാവധി ആക്കുക.
|
||||
* **Intentions** - ലക്ഷ്യങ്ങൾ നേടാൻ ഏജന്റ് പദ്ധതിയിടുന്ന പ്രത്യേക പ്രവർത്തനങ്ങൾ. പ്രവർത്തനങ്ങൾ സാധാരണയായി പരിസ്ഥിതിയിൽ മാറ്റം വരുത്തുകയും മറ്റ് ഏജന്റുകളുമായി സംവദിക്കുകയും ചെയ്യും.
|
||||
|
||||
മൾട്ടി-ഏജന്റ് സിസ്റ്റങ്ങൾ നിർമ്മിക്കാൻ ചില പ്ലാറ്റ്ഫോമുകൾ ലഭ്യമാണ്, ഉദാഹരണത്തിന് [JADE](https://jade.tilab.com/). [ഈ പേപ്പർ](https://arxiv.org/ftp/arxiv/papers/2007/2007.08961.pdf) മൾട്ടി-ഏജന്റ് പ്ലാറ്റ്ഫോമുകളുടെ അവലോകനവും മൾട്ടി-ഏജന്റ് സിസ്റ്റങ്ങളുടെ ചരിത്രവും വിവിധ ഉപയോഗ സാഹചര്യങ്ങളും ഉൾക്കൊള്ളുന്നു.
|
||||
|
||||
## സമാപനം
|
||||
|
||||
മൾട്ടി-ഏജന്റ് സിസ്റ്റങ്ങൾ വ്യത്യസ്ത രൂപങ്ങളിൽ ഉണ്ടാകാം, പല മേഖലകളിലും ഉപയോഗിക്കാം. അവ എല്ലാം വ്യക്തിഗത ഏജന്റിന്റെ ലളിതമായ പെരുമാറ്റത്തിൽ കേന്ദ്രീകരിച്ച്, **സിനർജറ്റിക് ഫലഫലമായി** സമ്പൂർണ്ണ സിസ്റ്റത്തിന്റെ കൂടുതൽ സങ്കീർണ്ണമായ പെരുമാറ്റം സൃഷ്ടിക്കുന്നു.
|
||||
|
||||
## 🚀 ചലഞ്ച്
|
||||
|
||||
ഈ പാഠം യാഥാർത്ഥ്യത്തിലേക്ക് കൊണ്ടുപോയി ഒരു പ്രശ്നം പരിഹരിക്കാൻ കഴിയുന്ന മൾട്ടി-ഏജന്റ് സിസ്റ്റം ആശയവിനിമയം ചെയ്യുക. ഉദാഹരണത്തിന്, ഒരു സ്കൂൾ ബസ് റൂട്ടിനെ എങ്ങനെ മെച്ചപ്പെടുത്താൻ മൾട്ടി-ഏജന്റ് സിസ്റ്റം സഹായിക്കുമെന്നു
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് പ്രാമാണികമായ ഉറവിടം എന്ന് പരിഗണിക്കേണ്ടതാണ്. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,21 +1,21 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "5fef1a0b22498d7188959e2a2cb08af7",
|
||||
"translation_date": "2025-11-25T20:36:15+00:00",
|
||||
"source_file": "lessons/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# അവലോകനം
|
||||
|
||||

|
||||
|
||||
> സ്കെച്ച്നോട്ട് [ടോമോമി ഇമുര](https://twitter.com/girlie_mac) എഴുതിയത്
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ പ്രാമാണികമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "5fef1a0b22498d7188959e2a2cb08af7",
|
||||
"translation_date": "2025-11-25T20:36:15+00:00",
|
||||
"source_file": "lessons/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# അവലോകനം
|
||||
|
||||

|
||||
|
||||
> സ്കെച്ച്നോട്ട് [ടോമോമി ഇമുര](https://twitter.com/girlie_mac) എഴുതിയത്
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ പ്രാമാണികമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,92 +1,92 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "9c592c26aca16ca085d268c732284187",
|
||||
"translation_date": "2025-11-25T23:42:27+00:00",
|
||||
"source_file": "lessons/X-Extras/X1-MultiModal/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# മൾട്ടി-മോഡൽ നെറ്റ്വർക്കുകൾ
|
||||
|
||||
NLP ടാസ്കുകൾ പരിഹരിക്കുന്നതിന് ട്രാൻസ്ഫോർമർ മോഡലുകളുടെ വിജയം കഴിഞ്ഞ്, സമാനമായ ആർക്കിടെക്ചറുകൾ കമ്പ്യൂട്ടർ വിചൻ ടാസ്കുകൾക്കും പ്രയോഗിക്കപ്പെട്ടു. കാഴ്ചയും സ്വാഭാവിക ഭാഷാ കഴിവുകളും *കേർത്ത്* മോഡലുകൾ നിർമ്മിക്കാനുള്ള താൽപര്യം വർധിക്കുകയാണ്. OpenAI നടത്തിയ ഒരു ശ്രമമാണ് CLIP, DALL.E എന്ന പേരിൽ അറിയപ്പെടുന്നത്.
|
||||
|
||||
## കോൺട്രാസ്റ്റീവ് ഇമേജ് പ്രീ-ട്രെയിനിംഗ് (CLIP)
|
||||
|
||||
CLIP-ന്റെ പ്രധാന ആശയം ഒരു ടെക്സ്റ്റ് പ്രോംപ്റ്റും ഒരു ചിത്രവും താരതമ്യം ചെയ്ത് ചിത്രം പ്രോംപ്റ്റിനോട് എത്രത്തോളം പൊരുത്തപ്പെടുന്നു എന്ന് നിർണ്ണയിക്കാനാകുക എന്നതാണ്.
|
||||
|
||||

|
||||
|
||||
> *ഈ ചിത്രം [ഈ ബ്ലോഗ് പോസ്റ്റിൽ നിന്നാണ്](https://openai.com/blog/clip/)*
|
||||
|
||||
മോഡൽ ഇന്റർനെറ്റിൽ നിന്നുള്ള ചിത്രങ്ങളും അവയുടെ ക്യാപ്ഷനുകളും ഉപയോഗിച്ച് പരിശീലിപ്പിക്കുന്നു. ഓരോ ബാച്ചിലും N (ചിത്രം, ടെക്സ്റ്റ്) ജോഡികൾ എടുത്ത് അവ I<sub>1</sub>,..., I<sub>N</sub> / T<sub>1</sub>, ..., T<sub>N</sub> എന്ന വെക്ടർ പ്രതിനിധാനങ്ങളായി മാറ്റുന്നു. ആ പ്രതിനിധാനങ്ങൾ തമ്മിൽ പൊരുത്തപ്പെടുത്തുന്നു. ഒരു ജോഡിക്കുള്ള (ഉദാ. I<sub>i</sub> , T<sub>i</sub>) വെക്ടറുകൾക്കിടയിലെ കോസൈൻ സമാനത പരമാവധി ആക്കുകയും മറ്റു ജോഡികളുടെ കോസൈൻ സമാനത കുറയ്ക്കുകയും ചെയ്യുന്നതാണ് ലോസ് ഫംഗ്ഷൻ. അതുകൊണ്ടാണ് ഈ സമീപനം **കോൺട്രാസ്റ്റീവ്** എന്ന് വിളിക്കുന്നത്.
|
||||
|
||||
CLIP മോഡൽ/ലൈബ്രറി [OpenAI GitHub](https://github.com/openai/CLIP) ൽ ലഭ്യമാണ്. ഈ സമീപനം [ഈ ബ്ലോഗ് പോസ്റ്റിൽ](https://openai.com/blog/clip/) വിശദീകരിച്ചിരിക്കുന്നു, കൂടുതൽ വിശദമായി [ഈ പേപ്പറിൽ](https://arxiv.org/pdf/2103.00020.pdf) കാണാം.
|
||||
|
||||
ഈ മോഡൽ പ്രീ-ട്രെയിൻ ചെയ്ത ശേഷം, ചിത്രങ്ങളുടെ ഒരു ബാച്ചും ടെക്സ്റ്റ് പ്രോംപ്റ്റുകളുടെ ഒരു ബാച്ചും നൽകുമ്പോൾ, പ്രോബബിലിറ്റികളുള്ള ടെൻസർ ലഭിക്കും. CLIP പല ടാസ്കുകൾക്കും ഉപയോഗിക്കാം:
|
||||
|
||||
**ചിത്ര വർഗ്ഗീകരണം**
|
||||
|
||||
ഉദാഹരണത്തിന്, പൂച്ചകൾ, നായകൾ, മനുഷ്യർ എന്നിങ്ങനെ ചിത്രങ്ങൾ വർഗ്ഗീകരിക്കേണ്ടതുണ്ടെങ്കിൽ, മോഡലിന് ഒരു ചിത്രം നൽകുകയും, "*ഒരു പൂച്ചയുടെ ചിത്രം*", "*ഒരു നായയുടെ ചിത്രം*", "*ഒരു മനുഷ്യന്റെ ചിത്രം*" എന്നിങ്ങനെ ടെക്സ്റ്റ് പ്രോംപ്റ്റുകൾ നൽകുകയും ചെയ്യാം. 3 പ്രോബബിലിറ്റികളുള്ള വെക്ടറിൽ ഏറ്റവും ഉയർന്ന മൂല്യമുള്ള ഇൻഡക്സ് തിരഞ്ഞെടുക്കുക മതി.
|
||||
|
||||

|
||||
|
||||
> *ഈ ചിത്രം [ഈ ബ്ലോഗ് പോസ്റ്റിൽ നിന്നാണ്](https://openai.com/blog/clip/)*
|
||||
|
||||
**ടെക്സ്റ്റ് അടിസ്ഥാനമാക്കിയുള്ള ചിത്രം തിരയൽ**
|
||||
|
||||
ഇതിന്റെ മറുവശം, ചിത്രങ്ങളുടെ ഒരു ശേഖരം ഉണ്ടെങ്കിൽ, ആ ശേഖരം മോഡലിന് നൽകുകയും, ഒരു ടെക്സ്റ്റ് പ്രോംപ്റ്റ് നൽകുകയും ചെയ്താൽ, ആ പ്രോംപ്റ്റിനോട് ഏറ്റവും സാമ്യമുള്ള ചിത്രം ലഭിക്കും.
|
||||
|
||||
## ✍️ ഉദാഹരണം: [ചിത്ര വർഗ്ഗീകരണത്തിനും ചിത്രം തിരയലിനും CLIP ഉപയോഗിക്കൽ](Clip.ipynb)
|
||||
|
||||
CLIP പ്രവർത്തനത്തിൽ കാണാൻ [Clip.ipynb](Clip.ipynb) നോട്ട്ബുക്ക് തുറക്കുക.
|
||||
|
||||
## VQGAN+ CLIP ഉപയോഗിച്ച് ചിത്രം സൃഷ്ടിക്കൽ
|
||||
|
||||
CLIP ടെക്സ്റ്റ് പ്രോംപ്റ്റിൽ നിന്നുള്ള **ചിത്ര സൃഷ്ടിക്കലിനും** ഉപയോഗിക്കാം. ഇതിന്, ഒരു **ജനറേറ്റർ മോഡൽ** വേണം, അത് ചില വെക്ടർ ഇൻപുട്ട് അടിസ്ഥാനമാക്കി ചിത്രങ്ങൾ സൃഷ്ടിക്കാനാകും. അത്തരത്തിലുള്ള മോഡലുകളിൽ ഒന്ന് [VQGAN](https://compvis.github.io/taming-transformers/) (വെക്ടർ-ക്വാണ്ടൈസ്ഡ് GAN) ആണ്.
|
||||
|
||||
VQGAN-നെ സാധാരണ [GAN](../../4-ComputerVision/10-GANs/README.md) മോഡലുകളിൽ നിന്ന് വ്യത്യസ്തമാക്കുന്ന പ്രധാന ആശയങ്ങൾ:
|
||||
* ഓട്ടോറെഗ്രസീവ് ട്രാൻസ്ഫോർമർ ആർക്കിടെക്ചർ ഉപയോഗിച്ച് ചിത്രത്തെ രൂപപ്പെടുത്തുന്ന സമ്പൂർണമായ കാഴ്ചാ ഭാഗങ്ങളുടെ സീക്വൻസ് സൃഷ്ടിക്കൽ. ആ കാഴ്ചാ ഭാഗങ്ങൾ [CNN](../../4-ComputerVision/07-ConvNets/README.md) ഉപയോഗിച്ച് പഠിപ്പിക്കുന്നു.
|
||||
* ചിത്രത്തിന്റെ ഭാഗങ്ങൾ "യഥാർത്ഥമാണോ" "കൃത്രിമമാണോ" എന്ന് കണ്ടെത്തുന്ന സബ്-ഇമേജ് ഡിസ്ക്രിമിനേറ്റർ ഉപയോഗിക്കൽ (പരമ്പരാഗത GAN-ലെ "എല്ലാം അല്ലെങ്കിൽ ഒന്നുമില്ല" സമീപനത്തിന് പകരം).
|
||||
|
||||
VQGAN-നെ കുറിച്ച് കൂടുതൽ അറിയാൻ [Taming Transformers](https://compvis.github.io/taming-transformers/) വെബ്സൈറ്റ് സന്ദർശിക്കുക.
|
||||
|
||||
VQGAN-നും പരമ്പരാഗത GAN-നും ഇടയിലെ പ്രധാന വ്യത്യാസം, GAN ഏതെങ്കിലും ഇൻപുട്ട് വെക്ടറിൽ നിന്ന് നല്ല ചിത്രം സൃഷ്ടിക്കാമെങ്കിലും, VQGAN സൃഷ്ടിക്കുന്ന ചിത്രം സുസംയോജിതമല്ലായിരിക്കാം. അതിനാൽ, ചിത്രം സൃഷ്ടിക്കൽ പ്രക്രിയ കൂടുതൽ മാർഗ്ഗനിർദ്ദേശം ആവശ്യമാണ്, അത് CLIP ഉപയോഗിച്ച് സാധ്യമാക്കാം.
|
||||
|
||||

|
||||
|
||||
ഒരു ടെക്സ്റ്റ് പ്രോംപ്റ്റിനോട് പൊരുത്തമുള്ള ചിത്രം സൃഷ്ടിക്കാൻ, ആദ്യം ഒരു യാദൃച്ഛിക എൻകോഡിംഗ് വെക്ടർ എടുത്ത് VQGAN വഴി ചിത്രം സൃഷ്ടിക്കുന്നു. തുടർന്ന് CLIP ഉപയോഗിച്ച് ചിത്രം പ്രോംപ്റ്റിനോട് എത്രത്തോളം പൊരുത്തപ്പെടുന്നു എന്ന് കാണിക്കുന്ന ലോസ് ഫംഗ്ഷൻ നിർമ്മിക്കുന്നു. ഈ ലോസ് കുറയ്ക്കാൻ ബാക്ക് പ്രൊപ്പഗേഷൻ ഉപയോഗിച്ച് ഇൻപുട്ട് വെക്ടർ പാരാമീറ്ററുകൾ ക്രമീകരിക്കുന്നു.
|
||||
|
||||
VQGAN+CLIP നടപ്പിലാക്കുന്ന മികച്ച ലൈബ്രറിയാണ് [Pixray](http://github.com/pixray/pixray)
|
||||
|
||||
 |  | 
|
||||
----|----|----
|
||||
*ഒരു പുസ്തകമുള്ള സാഹിത്യ അധ്യാപകനായ യുവ പുരുഷന്റെ ക്ലോസ്അപ്പ് വാട്ടർകോളർ പോർട്രെയിറ്റ്* എന്ന പ്രോംപ്റ്റിൽ നിന്നുള്ള ചിത്രം | *ഒരു കമ്പ്യൂട്ടർ ഉള്ള യുവ വനിതാ കമ്പ്യൂട്ടർ സയൻസ് അധ്യാപകന്റെ ക്ലോസ്അപ്പ് ഓയിൽ പോർട്രെയിറ്റ്* എന്ന പ്രോംപ്റ്റിൽ നിന്നുള്ള ചിത്രം | *ബ്ലാക്ക്ബോർഡിന് മുന്നിലുള്ള പ്രായമായ പുരുഷ ഗണിത അധ്യാപകന്റെ ക്ലോസ്അപ്പ് ഓയിൽ പോർട്രെയിറ്റ്* എന്ന പ്രോംപ്റ്റിൽ നിന്നുള്ള ചിത്രം
|
||||
|
||||
> ചിത്രങ്ങൾ **Artificial Teachers** ശേഖരത്തിൽ നിന്നുള്ളവ, [Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
## DALL-E
|
||||
### [DALL-E 1](https://openai.com/research/dall-e)
|
||||
DALL-E GPT-3-ന്റെ ഒരു പതിപ്പാണ്, പ്രോംപ്റ്റുകളിൽ നിന്നുള്ള ചിത്രങ്ങൾ സൃഷ്ടിക്കാൻ പരിശീലിപ്പിച്ചിരിക്കുന്നു. ഇതിന് 12 ബില്യൺ പാരാമീറ്ററുകൾ ഉണ്ട്.
|
||||
|
||||
CLIP-നോട് വ്യത്യസ്തമായി, DALL-E ടെക്സ്റ്റും ചിത്രവും ഒരേ ടോക്കൺ സ്ട്രീമിൽ സ്വീകരിക്കുന്നു. അതിനാൽ, പല പ്രോംപ്റ്റുകളിൽ നിന്നുമുള്ള ചിത്രങ്ങൾ ടെക്സ്റ്റ് അടിസ്ഥാനമാക്കി സൃഷ്ടിക്കാം.
|
||||
|
||||
### [DALL-E 2](https://openai.com/dall-e-2)
|
||||
DALL.E 1-നും 2-നും ഇടയിലെ പ്രധാന വ്യത്യാസം, 2-ാം പതിപ്പ് കൂടുതൽ യാഥാർത്ഥ്യസമൃദ്ധമായ ചിത്രങ്ങളും കലാസൃഷ്ടികളും സൃഷ്ടിക്കുന്നു എന്നതാണ്.
|
||||
|
||||
DALL-E ഉപയോഗിച്ച് സൃഷ്ടിച്ച ചിത്രങ്ങളുടെ ഉദാഹരണങ്ങൾ:
|
||||
 |  | 
|
||||
----|----|----
|
||||
*ഒരു പുസ്തകമുള്ള സാഹിത്യ അധ്യാപകനായ യുവ പുരുഷന്റെ ക്ലോസ്അപ്പ് വാട്ടർകോളർ പോർട്രെയിറ്റ്* എന്ന പ്രോംപ്റ്റിൽ നിന്നുള്ള ചിത്രം | *ഒരു കമ്പ്യൂട്ടർ ഉള്ള യുവ വനിതാ കമ്പ്യൂട്ടർ സയൻസ് അധ്യാപകന്റെ ക്ലോസ്അപ്പ് ഓയിൽ പോർട്രെയിറ്റ്* എന്ന പ്രോംപ്റ്റിൽ നിന്നുള്ള ചിത്രം | *ബ്ലാക്ക്ബോർഡിന് മുന്നിലുള്ള പ്രായമായ പുരുഷ ഗണിത അധ്യാപകന്റെ ക്ലോസ്അപ്പ് ഓയിൽ പോർട്രെയിറ്റ്* എന്ന പ്രോംപ്റ്റിൽ നിന്നുള്ള ചിത്രം
|
||||
|
||||
## റഫറൻസുകൾ
|
||||
|
||||
* VQGAN പേപ്പർ: [Taming Transformers for High-Resolution Image Synthesis](https://compvis.github.io/taming-transformers/paper/paper.pdf)
|
||||
* CLIP പേപ്പർ: [Learning Transferable Visual Models From Natural Language Supervision](https://arxiv.org/pdf/2103.00020.pdf)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചെങ്കിലും, യന്ത്രം ചെയ്ത വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ പ്രാമാണികമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ വ്യാഖ്യാനക്കേടുകൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "9c592c26aca16ca085d268c732284187",
|
||||
"translation_date": "2025-11-25T23:42:27+00:00",
|
||||
"source_file": "lessons/X-Extras/X1-MultiModal/README.md",
|
||||
"language_code": "ml"
|
||||
}
|
||||
-->
|
||||
# മൾട്ടി-മോഡൽ നെറ്റ്വർക്കുകൾ
|
||||
|
||||
NLP ടാസ്കുകൾ പരിഹരിക്കുന്നതിന് ട്രാൻസ്ഫോർമർ മോഡലുകളുടെ വിജയം കഴിഞ്ഞ്, സമാനമായ ആർക്കിടെക്ചറുകൾ കമ്പ്യൂട്ടർ വിചൻ ടാസ്കുകൾക്കും പ്രയോഗിക്കപ്പെട്ടു. കാഴ്ചയും സ്വാഭാവിക ഭാഷാ കഴിവുകളും *കേർത്ത്* മോഡലുകൾ നിർമ്മിക്കാനുള്ള താൽപര്യം വർധിക്കുകയാണ്. OpenAI നടത്തിയ ഒരു ശ്രമമാണ് CLIP, DALL.E എന്ന പേരിൽ അറിയപ്പെടുന്നത്.
|
||||
|
||||
## കോൺട്രാസ്റ്റീവ് ഇമേജ് പ്രീ-ട്രെയിനിംഗ് (CLIP)
|
||||
|
||||
CLIP-ന്റെ പ്രധാന ആശയം ഒരു ടെക്സ്റ്റ് പ്രോംപ്റ്റും ഒരു ചിത്രവും താരതമ്യം ചെയ്ത് ചിത്രം പ്രോംപ്റ്റിനോട് എത്രത്തോളം പൊരുത്തപ്പെടുന്നു എന്ന് നിർണ്ണയിക്കാനാകുക എന്നതാണ്.
|
||||
|
||||

|
||||
|
||||
> *ഈ ചിത്രം [ഈ ബ്ലോഗ് പോസ്റ്റിൽ നിന്നാണ്](https://openai.com/blog/clip/)*
|
||||
|
||||
മോഡൽ ഇന്റർനെറ്റിൽ നിന്നുള്ള ചിത്രങ്ങളും അവയുടെ ക്യാപ്ഷനുകളും ഉപയോഗിച്ച് പരിശീലിപ്പിക്കുന്നു. ഓരോ ബാച്ചിലും N (ചിത്രം, ടെക്സ്റ്റ്) ജോഡികൾ എടുത്ത് അവ I<sub>1</sub>,..., I<sub>N</sub> / T<sub>1</sub>, ..., T<sub>N</sub> എന്ന വെക്ടർ പ്രതിനിധാനങ്ങളായി മാറ്റുന്നു. ആ പ്രതിനിധാനങ്ങൾ തമ്മിൽ പൊരുത്തപ്പെടുത്തുന്നു. ഒരു ജോഡിക്കുള്ള (ഉദാ. I<sub>i</sub> , T<sub>i</sub>) വെക്ടറുകൾക്കിടയിലെ കോസൈൻ സമാനത പരമാവധി ആക്കുകയും മറ്റു ജോഡികളുടെ കോസൈൻ സമാനത കുറയ്ക്കുകയും ചെയ്യുന്നതാണ് ലോസ് ഫംഗ്ഷൻ. അതുകൊണ്ടാണ് ഈ സമീപനം **കോൺട്രാസ്റ്റീവ്** എന്ന് വിളിക്കുന്നത്.
|
||||
|
||||
CLIP മോഡൽ/ലൈബ്രറി [OpenAI GitHub](https://github.com/openai/CLIP) ൽ ലഭ്യമാണ്. ഈ സമീപനം [ഈ ബ്ലോഗ് പോസ്റ്റിൽ](https://openai.com/blog/clip/) വിശദീകരിച്ചിരിക്കുന്നു, കൂടുതൽ വിശദമായി [ഈ പേപ്പറിൽ](https://arxiv.org/pdf/2103.00020.pdf) കാണാം.
|
||||
|
||||
ഈ മോഡൽ പ്രീ-ട്രെയിൻ ചെയ്ത ശേഷം, ചിത്രങ്ങളുടെ ഒരു ബാച്ചും ടെക്സ്റ്റ് പ്രോംപ്റ്റുകളുടെ ഒരു ബാച്ചും നൽകുമ്പോൾ, പ്രോബബിലിറ്റികളുള്ള ടെൻസർ ലഭിക്കും. CLIP പല ടാസ്കുകൾക്കും ഉപയോഗിക്കാം:
|
||||
|
||||
**ചിത്ര വർഗ്ഗീകരണം**
|
||||
|
||||
ഉദാഹരണത്തിന്, പൂച്ചകൾ, നായകൾ, മനുഷ്യർ എന്നിങ്ങനെ ചിത്രങ്ങൾ വർഗ്ഗീകരിക്കേണ്ടതുണ്ടെങ്കിൽ, മോഡലിന് ഒരു ചിത്രം നൽകുകയും, "*ഒരു പൂച്ചയുടെ ചിത്രം*", "*ഒരു നായയുടെ ചിത്രം*", "*ഒരു മനുഷ്യന്റെ ചിത്രം*" എന്നിങ്ങനെ ടെക്സ്റ്റ് പ്രോംപ്റ്റുകൾ നൽകുകയും ചെയ്യാം. 3 പ്രോബബിലിറ്റികളുള്ള വെക്ടറിൽ ഏറ്റവും ഉയർന്ന മൂല്യമുള്ള ഇൻഡക്സ് തിരഞ്ഞെടുക്കുക മതി.
|
||||
|
||||

|
||||
|
||||
> *ഈ ചിത്രം [ഈ ബ്ലോഗ് പോസ്റ്റിൽ നിന്നാണ്](https://openai.com/blog/clip/)*
|
||||
|
||||
**ടെക്സ്റ്റ് അടിസ്ഥാനമാക്കിയുള്ള ചിത്രം തിരയൽ**
|
||||
|
||||
ഇതിന്റെ മറുവശം, ചിത്രങ്ങളുടെ ഒരു ശേഖരം ഉണ്ടെങ്കിൽ, ആ ശേഖരം മോഡലിന് നൽകുകയും, ഒരു ടെക്സ്റ്റ് പ്രോംപ്റ്റ് നൽകുകയും ചെയ്താൽ, ആ പ്രോംപ്റ്റിനോട് ഏറ്റവും സാമ്യമുള്ള ചിത്രം ലഭിക്കും.
|
||||
|
||||
## ✍️ ഉദാഹരണം: [ചിത്ര വർഗ്ഗീകരണത്തിനും ചിത്രം തിരയലിനും CLIP ഉപയോഗിക്കൽ](Clip.ipynb)
|
||||
|
||||
CLIP പ്രവർത്തനത്തിൽ കാണാൻ [Clip.ipynb](Clip.ipynb) നോട്ട്ബുക്ക് തുറക്കുക.
|
||||
|
||||
## VQGAN+ CLIP ഉപയോഗിച്ച് ചിത്രം സൃഷ്ടിക്കൽ
|
||||
|
||||
CLIP ടെക്സ്റ്റ് പ്രോംപ്റ്റിൽ നിന്നുള്ള **ചിത്ര സൃഷ്ടിക്കലിനും** ഉപയോഗിക്കാം. ഇതിന്, ഒരു **ജനറേറ്റർ മോഡൽ** വേണം, അത് ചില വെക്ടർ ഇൻപുട്ട് അടിസ്ഥാനമാക്കി ചിത്രങ്ങൾ സൃഷ്ടിക്കാനാകും. അത്തരത്തിലുള്ള മോഡലുകളിൽ ഒന്ന് [VQGAN](https://compvis.github.io/taming-transformers/) (വെക്ടർ-ക്വാണ്ടൈസ്ഡ് GAN) ആണ്.
|
||||
|
||||
VQGAN-നെ സാധാരണ [GAN](../../4-ComputerVision/10-GANs/README.md) മോഡലുകളിൽ നിന്ന് വ്യത്യസ്തമാക്കുന്ന പ്രധാന ആശയങ്ങൾ:
|
||||
* ഓട്ടോറെഗ്രസീവ് ട്രാൻസ്ഫോർമർ ആർക്കിടെക്ചർ ഉപയോഗിച്ച് ചിത്രത്തെ രൂപപ്പെടുത്തുന്ന സമ്പൂർണമായ കാഴ്ചാ ഭാഗങ്ങളുടെ സീക്വൻസ് സൃഷ്ടിക്കൽ. ആ കാഴ്ചാ ഭാഗങ്ങൾ [CNN](../../4-ComputerVision/07-ConvNets/README.md) ഉപയോഗിച്ച് പഠിപ്പിക്കുന്നു.
|
||||
* ചിത്രത്തിന്റെ ഭാഗങ്ങൾ "യഥാർത്ഥമാണോ" "കൃത്രിമമാണോ" എന്ന് കണ്ടെത്തുന്ന സബ്-ഇമേജ് ഡിസ്ക്രിമിനേറ്റർ ഉപയോഗിക്കൽ (പരമ്പരാഗത GAN-ലെ "എല്ലാം അല്ലെങ്കിൽ ഒന്നുമില്ല" സമീപനത്തിന് പകരം).
|
||||
|
||||
VQGAN-നെ കുറിച്ച് കൂടുതൽ അറിയാൻ [Taming Transformers](https://compvis.github.io/taming-transformers/) വെബ്സൈറ്റ് സന്ദർശിക്കുക.
|
||||
|
||||
VQGAN-നും പരമ്പരാഗത GAN-നും ഇടയിലെ പ്രധാന വ്യത്യാസം, GAN ഏതെങ്കിലും ഇൻപുട്ട് വെക്ടറിൽ നിന്ന് നല്ല ചിത്രം സൃഷ്ടിക്കാമെങ്കിലും, VQGAN സൃഷ്ടിക്കുന്ന ചിത്രം സുസംയോജിതമല്ലായിരിക്കാം. അതിനാൽ, ചിത്രം സൃഷ്ടിക്കൽ പ്രക്രിയ കൂടുതൽ മാർഗ്ഗനിർദ്ദേശം ആവശ്യമാണ്, അത് CLIP ഉപയോഗിച്ച് സാധ്യമാക്കാം.
|
||||
|
||||

|
||||
|
||||
ഒരു ടെക്സ്റ്റ് പ്രോംപ്റ്റിനോട് പൊരുത്തമുള്ള ചിത്രം സൃഷ്ടിക്കാൻ, ആദ്യം ഒരു യാദൃച്ഛിക എൻകോഡിംഗ് വെക്ടർ എടുത്ത് VQGAN വഴി ചിത്രം സൃഷ്ടിക്കുന്നു. തുടർന്ന് CLIP ഉപയോഗിച്ച് ചിത്രം പ്രോംപ്റ്റിനോട് എത്രത്തോളം പൊരുത്തപ്പെടുന്നു എന്ന് കാണിക്കുന്ന ലോസ് ഫംഗ്ഷൻ നിർമ്മിക്കുന്നു. ഈ ലോസ് കുറയ്ക്കാൻ ബാക്ക് പ്രൊപ്പഗേഷൻ ഉപയോഗിച്ച് ഇൻപുട്ട് വെക്ടർ പാരാമീറ്ററുകൾ ക്രമീകരിക്കുന്നു.
|
||||
|
||||
VQGAN+CLIP നടപ്പിലാക്കുന്ന മികച്ച ലൈബ്രറിയാണ് [Pixray](http://github.com/pixray/pixray)
|
||||
|
||||
 |  | 
|
||||
----|----|----
|
||||
*ഒരു പുസ്തകമുള്ള സാഹിത്യ അധ്യാപകനായ യുവ പുരുഷന്റെ ക്ലോസ്അപ്പ് വാട്ടർകോളർ പോർട്രെയിറ്റ്* എന്ന പ്രോംപ്റ്റിൽ നിന്നുള്ള ചിത്രം | *ഒരു കമ്പ്യൂട്ടർ ഉള്ള യുവ വനിതാ കമ്പ്യൂട്ടർ സയൻസ് അധ്യാപകന്റെ ക്ലോസ്അപ്പ് ഓയിൽ പോർട്രെയിറ്റ്* എന്ന പ്രോംപ്റ്റിൽ നിന്നുള്ള ചിത്രം | *ബ്ലാക്ക്ബോർഡിന് മുന്നിലുള്ള പ്രായമായ പുരുഷ ഗണിത അധ്യാപകന്റെ ക്ലോസ്അപ്പ് ഓയിൽ പോർട്രെയിറ്റ്* എന്ന പ്രോംപ്റ്റിൽ നിന്നുള്ള ചിത്രം
|
||||
|
||||
> ചിത്രങ്ങൾ **Artificial Teachers** ശേഖരത്തിൽ നിന്നുള്ളവ, [Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
## DALL-E
|
||||
### [DALL-E 1](https://openai.com/research/dall-e)
|
||||
DALL-E GPT-3-ന്റെ ഒരു പതിപ്പാണ്, പ്രോംപ്റ്റുകളിൽ നിന്നുള്ള ചിത്രങ്ങൾ സൃഷ്ടിക്കാൻ പരിശീലിപ്പിച്ചിരിക്കുന്നു. ഇതിന് 12 ബില്യൺ പാരാമീറ്ററുകൾ ഉണ്ട്.
|
||||
|
||||
CLIP-നോട് വ്യത്യസ്തമായി, DALL-E ടെക്സ്റ്റും ചിത്രവും ഒരേ ടോക്കൺ സ്ട്രീമിൽ സ്വീകരിക്കുന്നു. അതിനാൽ, പല പ്രോംപ്റ്റുകളിൽ നിന്നുമുള്ള ചിത്രങ്ങൾ ടെക്സ്റ്റ് അടിസ്ഥാനമാക്കി സൃഷ്ടിക്കാം.
|
||||
|
||||
### [DALL-E 2](https://openai.com/dall-e-2)
|
||||
DALL.E 1-നും 2-നും ഇടയിലെ പ്രധാന വ്യത്യാസം, 2-ാം പതിപ്പ് കൂടുതൽ യാഥാർത്ഥ്യസമൃദ്ധമായ ചിത്രങ്ങളും കലാസൃഷ്ടികളും സൃഷ്ടിക്കുന്നു എന്നതാണ്.
|
||||
|
||||
DALL-E ഉപയോഗിച്ച് സൃഷ്ടിച്ച ചിത്രങ്ങളുടെ ഉദാഹരണങ്ങൾ:
|
||||
 |  | 
|
||||
----|----|----
|
||||
*ഒരു പുസ്തകമുള്ള സാഹിത്യ അധ്യാപകനായ യുവ പുരുഷന്റെ ക്ലോസ്അപ്പ് വാട്ടർകോളർ പോർട്രെയിറ്റ്* എന്ന പ്രോംപ്റ്റിൽ നിന്നുള്ള ചിത്രം | *ഒരു കമ്പ്യൂട്ടർ ഉള്ള യുവ വനിതാ കമ്പ്യൂട്ടർ സയൻസ് അധ്യാപകന്റെ ക്ലോസ്അപ്പ് ഓയിൽ പോർട്രെയിറ്റ്* എന്ന പ്രോംപ്റ്റിൽ നിന്നുള്ള ചിത്രം | *ബ്ലാക്ക്ബോർഡിന് മുന്നിലുള്ള പ്രായമായ പുരുഷ ഗണിത അധ്യാപകന്റെ ക്ലോസ്അപ്പ് ഓയിൽ പോർട്രെയിറ്റ്* എന്ന പ്രോംപ്റ്റിൽ നിന്നുള്ള ചിത്രം
|
||||
|
||||
## റഫറൻസുകൾ
|
||||
|
||||
* VQGAN പേപ്പർ: [Taming Transformers for High-Resolution Image Synthesis](https://compvis.github.io/taming-transformers/paper/paper.pdf)
|
||||
* CLIP പേപ്പർ: [Learning Transferable Visual Models From Natural Language Supervision](https://arxiv.org/pdf/2103.00020.pdf)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**അസൂയാ**:
|
||||
ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിച്ചെങ്കിലും, യന്ത്രം ചെയ്ത വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ പ്രാമാണികമായ ഉറവിടമായി കണക്കാക്കണം. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ വ്യാഖ്യാനക്കേടുകൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "4ed9993bca581850c983c95d5a3f57eb",
|
||||
"translation_date": "2025-12-24T23:06:26+00:00",
|
||||
"original_hash": "14816e97d79b296c87811724f7785923",
|
||||
"translation_date": "2026-01-01T10:27:10+00:00",
|
||||
"source_file": "README.md",
|
||||
"language_code": "mo"
|
||||
}
|
||||
|
|
@ -11,9 +11,9 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
[](https://GitHub.com/microsoft/AI-For-Beginners/graphs/contributors/)
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/issues/)
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/pulls/)
|
||||
[](http://makeapullrequest.com)
|
||||
[](http://makeapullrequest.com)
|
||||
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/watchers/)
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/watchers/)
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/network/)
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/stargazers/)
|
||||
[](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)
|
||||
|
|
@ -21,114 +21,114 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
[](https://discord.gg/nTYy5BXMWG)
|
||||
|
||||
# 人工智能入門課程
|
||||
# 初學者人工智能課程
|
||||
|
||||
||
|
||||
||
|
||||
|:---:|
|
||||
| AI For Beginners - _草圖筆記 由 [@girlie_mac](https://twitter.com/girlie_mac)_ |
|
||||
| AI For Beginners - _速寫圖,由 [@girlie_mac](https://twitter.com/girlie_mac)_ |
|
||||
|
||||
探索我們為期 12 週、共 24 課的 **人工智能** (AI) 課程!它包含實作課程、測驗與實驗室。課程適合初學者,涵蓋像 TensorFlow 與 PyTorch 這類工具,以及 AI 倫理。
|
||||
透過我們為期 12 週、共 24 節的課程,探索 **人工智能**(AI)的世界!課程包含實作課程、測驗與實驗室。此課程適合初學者,涵蓋像 TensorFlow 與 PyTorch 等工具,以及 AI 倫理等主題。
|
||||
|
||||
### 🌐 多語言支援
|
||||
|
||||
#### 透過 GitHub Action 支援(自動化與即時更新)
|
||||
#### 透過 GitHub Action 支援(自動且持續更新)
|
||||
|
||||
<!-- CO-OP TRANSLATOR LANGUAGES TABLE START -->
|
||||
[阿拉伯語](../ar/README.md) | [孟加拉語](../bn/README.md) | [保加利亞語](../bg/README.md) | [緬甸語(緬甸)](../my/README.md) | [中文(簡體)](../zh/README.md) | [中文(繁體,香港)](../hk/README.md) | [中文(繁體,澳門)](./README.md) | [中文(繁體,台灣)](../tw/README.md) | [克羅地亞語](../hr/README.md) | [捷克語](../cs/README.md) | [丹麥語](../da/README.md) | [荷蘭語](../nl/README.md) | [愛沙尼亞語](../et/README.md) | [芬蘭語](../fi/README.md) | [法語](../fr/README.md) | [德語](../de/README.md) | [希臘語](../el/README.md) | [希伯來語](../he/README.md) | [印地語](../hi/README.md) | [匈牙利語](../hu/README.md) | [印尼語](../id/README.md) | [義大利語](../it/README.md) | [日語](../ja/README.md) | [卡納達語](../kn/README.md) | [韓語](../ko/README.md) | [立陶宛語](../lt/README.md) | [馬來語](../ms/README.md) | [馬拉雅拉姆語](../ml/README.md) | [馬拉地語](../mr/README.md) | [尼泊爾語](../ne/README.md) | [奈及利亞皮欽語](../pcm/README.md) | [挪威語](../no/README.md) | [波斯語(Farsi)](../fa/README.md) | [波蘭語](../pl/README.md) | [葡萄牙語(巴西)](../br/README.md) | [葡萄牙語(葡萄牙)](../pt/README.md) | [旁遮普語(Gurmukhi)](../pa/README.md) | [羅馬尼亞語](../ro/README.md) | [俄語](../ru/README.md) | [塞爾維亞語(西里爾字母)](../sr/README.md) | [斯洛伐克語](../sk/README.md) | [斯洛文尼亞語](../sl/README.md) | [西班牙語](../es/README.md) | [斯瓦希里語](../sw/README.md) | [瑞典語](../sv/README.md) | [他加祿語(菲律賓語)](../tl/README.md) | [泰米爾語](../ta/README.md) | [泰盧固語](../te/README.md) | [泰語](../th/README.md) | [土耳其語](../tr/README.md) | [烏克蘭語](../uk/README.md) | [烏爾都語](../ur/README.md) | [越南語](../vi/README.md)
|
||||
[阿拉伯語](../ar/README.md) | [孟加拉語](../bn/README.md) | [保加利亞語](../bg/README.md) | [緬甸語(緬甸)](../my/README.md) | [中文(簡體)](../zh/README.md) | [中文(繁體,香港)](../hk/README.md) | [中文(繁體,澳門)](./README.md) | [中文(繁體,台灣)](../tw/README.md) | [克羅地亞語](../hr/README.md) | [捷克語](../cs/README.md) | [丹麥語](../da/README.md) | [荷蘭語](../nl/README.md) | [愛沙尼亞語](../et/README.md) | [芬蘭語](../fi/README.md) | [法語](../fr/README.md) | [德語](../de/README.md) | [希臘語](../el/README.md) | [希伯來語](../he/README.md) | [印地語](../hi/README.md) | [匈牙利語](../hu/README.md) | [印尼語](../id/README.md) | [義大利語](../it/README.md) | [日語](../ja/README.md) | [坎那達語](../kn/README.md) | [韓語](../ko/README.md) | [立陶宛語](../lt/README.md) | [馬來語](../ms/README.md) | [馬拉雅拉姆語](../ml/README.md) | [馬拉地語](../mr/README.md) | [尼泊爾語](../ne/README.md) | [奈及利亞皮欽語](../pcm/README.md) | [挪威語](../no/README.md) | [波斯語(法爾西)](../fa/README.md) | [波蘭語](../pl/README.md) | [葡萄牙語(巴西)](../br/README.md) | [葡萄牙語(葡萄牙)](../pt/README.md) | [旁遮普語(古魯穆奇)](../pa/README.md) | [羅馬尼亞語](../ro/README.md) | [俄語](../ru/README.md) | [塞爾維亞語(西里爾)](../sr/README.md) | [斯洛伐克語](../sk/README.md) | [斯洛維尼亞語](../sl/README.md) | [西班牙語](../es/README.md) | [斯瓦希里語](../sw/README.md) | [瑞典語](../sv/README.md) | [他加祿語(菲律賓)](../tl/README.md) | [泰米爾語](../ta/README.md) | [泰盧固語](../te/README.md) | [泰語](../th/README.md) | [土耳其語](../tr/README.md) | [烏克蘭語](../uk/README.md) | [烏爾都語](../ur/README.md) | [越南語](../vi/README.md)
|
||||
<!-- CO-OP TRANSLATOR LANGUAGES TABLE END -->
|
||||
|
||||
**如果您希望新增翻譯語言,支援的語言列在 [這裡](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md)**
|
||||
**如果你想要新增更多翻譯語言,支援的語言列表請見 [這裡](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md)**
|
||||
|
||||
## 加入社群
|
||||
[](https://discord.gg/nTYy5BXMWG)
|
||||
|
||||
## 您將學到的內容
|
||||
## 你將學到的內容
|
||||
|
||||
**[課程心智圖](http://soshnikov.com/courses/ai-for-beginners/mindmap.html)**
|
||||
|
||||
在本課程中,您將學到:
|
||||
在本課程中,你將學到:
|
||||
|
||||
* 不同的人工智能方法,包括「傳統」的符號式方法,具備 **知識表示** 與推理([GOFAI](https://en.wikipedia.org/wiki/Symbolic_artificial_intelligence))。
|
||||
* **神經網絡** 與 **深度學習**,是現代 AI 的核心。我們將用兩個最受歡迎的框架 — [TensorFlow](http://Tensorflow.org) 與 [PyTorch](http://pytorch.org) 的程式範例來說明這些重要主題背後的概念。
|
||||
* 用於處理影像與文字的 **神經架構**。我們會涵蓋近期的模型,但在最新技術方面可能稍有不足。
|
||||
* 較不常見的 AI 方法,例如 **遺傳演算法** 與 **多代理系統**。
|
||||
* 不同的人工智能方法,包括「老派」的符號方法,搭配 **知識表示** 與推論([GOFAI](https://en.wikipedia.org/wiki/Symbolic_artificial_intelligence))。
|
||||
* 位於現代 AI 核心的 **神經網絡** 與 **深度學習**。我們會使用兩個最受歡迎的框架 — [TensorFlow](http://Tensorflow.org) 與 [PyTorch](http://pytorch.org) 的程式碼來說明這些重要主題背後的概念。
|
||||
* 用於處理影像與文字的 **神經架構**。我們會涵蓋近期的模型,但在最先進技術方面可能會有些不足。
|
||||
* 較少見的 AI 方法,例如 **遺傳演算法** 與 **多代理系統**。
|
||||
|
||||
本課程不包含的內容:
|
||||
本課程不會涵蓋的內容:
|
||||
|
||||
> [在 Microsoft Learn 集合中找到本課程的所有額外資源](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum)
|
||||
> [在我們的 Microsoft Learn 集合中找到本課程的所有額外資源](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum)
|
||||
|
||||
* 使用 **AI 在商業中的應用案例**。建議參加 Microsoft Learn 上的 [面向商業用戶的 AI 入門](https://docs.microsoft.com/learn/paths/introduction-ai-for-business-users/?WT.mc_id=academic-77998-bethanycheum) 學習路徑,或參考與 [INSEAD](https://www.insead.edu/) 合作開發的 [AI Business School](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-bethanycheum)。
|
||||
* **經典機器學習**,我們在 [機器學習初學者課程](http://github.com/Microsoft/ML-for-Beginners) 中已有完整說明。
|
||||
* 使用 **[Cognitive Services](https://azure.microsoft.com/services/cognitive-services/?WT.mc_id=academic-77998-bethanycheum)** 建置的實務 AI 應用。為此,我們建議您從 Microsoft Learn 的 [視覺](https://docs.microsoft.com/learn/paths/create-computer-vision-solutions-azure-cognitive-services/?WT.mc_id=academic-77998-bethanycheum)、[自然語言處理](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-bethanycheum)、**[Generative AI with Azure OpenAI Service](https://learn.microsoft.com/en-us/training/paths/develop-ai-solutions-azure-openai/?WT.mc_id=academic-77998-bethanycheum)** 等模組開始。
|
||||
* 特定的機器學習 **雲端框架**,例如 [Azure Machine Learning](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-bethanycheum)、[Microsoft Fabric](https://learn.microsoft.com/en-us/training/paths/get-started-fabric/?WT.mc_id=academic-77998-bethanycheum),或 [Azure Databricks](https://docs.microsoft.com/learn/paths/data-engineer-azure-databricks?WT.mc_id=academic-77998-bethanycheum)。建議參考 [使用 Azure Machine Learning 建立與操作機器學習解決方案](https://docs.microsoft.com/learn/paths/build-ai-solutions-with-azure-ml-service/?WT.mc_id=academic-77998-bethanycheum) 與 [使用 Azure Databricks 建立與操作機器學習解決方案](https://docs.microsoft.com/learn/paths/build-operate-machine-learning-solutions-azure-databricks/?WT.mc_id=academic-77998-bethanycheum) 的學習路徑。
|
||||
* **對話式 AI** 與 **聊天機器人**。有個獨立的 [建立對話式 AI 解決方案](https://docs.microsoft.com/learn/paths/create-conversational-ai-solutions/?WT.mc_id=academic-77998-bethanycheum) 學習路徑,您也可以參考 [這篇部落格文章](https://soshnikov.com/azure/hello-bot-conversational-ai-on-microsoft-platform/) 以取得更多細節。
|
||||
* 深度學習背後的 **深層數學**。對此,我們建議閱讀 Ian Goodfellow、Yoshua Bengio 與 Aaron Courville 所著的 [Deep Learning](https://www.amazon.com/Deep-Learning-Adaptive-Computation-Machine/dp/0262035618),此書也可在 [https://www.deeplearningbook.org/](https://www.deeplearningbook.org/) 線上取得。
|
||||
* 在商業上使用 **AI 的商業案例**。建議參加 Microsoft Learn 上的 [面向商業使用者的 AI 入門](https://docs.microsoft.com/learn/paths/introduction-ai-for-business-users/?WT.mc_id=academic-77998-bethanycheum) 學習路徑,或由 [INSEAD](https://www.insead.edu/) 合作開發的 [AI Business School](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-bethanycheum)。
|
||||
* **經典機器學習**,詳細內容請參考我們的 [Machine Learning for Beginners Curriculum](http://github.com/Microsoft/ML-for-Beginners)。
|
||||
* 使用 **[Cognitive Services](https://azure.microsoft.com/services/cognitive-services/?WT.mc_id=academic-77998-bethanycheum)** 建立的實務 AI 應用。對此,我們建議你先從 Microsoft Learn 的 [vision](https://docs.microsoft.com/learn/paths/create-computer-vision-solutions-azure-cognitive-services/?WT.mc_id=academic-77998-bethanycheum)、[natural language processing](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-bethanycheum)、**[Generative AI with Azure OpenAI Service](https://learn.microsoft.com/en-us/training/paths/develop-ai-solutions-azure-openai/?WT.mc_id=academic-77998-bethanycheum)** 等模組開始學習。
|
||||
* 特定的機器學習 **雲端框架**,例如 [Azure Machine Learning](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-bethanycheum)、[Microsoft Fabric](https://learn.microsoft.com/en-us/training/paths/get-started-fabric/?WT.mc_id=academic-77998-bethanycheum) 或 [Azure Databricks](https://docs.microsoft.com/learn/paths/data-engineer-azure-databricks?WT.mc_id=academic-77998-bethanycheum)。建議參考 [使用 Azure Machine Learning 構建並營運機器學習解決方案](https://docs.microsoft.com/learn/paths/build-ai-solutions-with-azure-ml-service/?WT.mc_id=academic-77998-bethanycheum) 與 [使用 Azure Databricks 構建並營運機器學習解決方案](https://docs.microsoft.com/learn/paths/build-operate-machine-learning-solutions-azure-databricks/?WT.mc_id=academic-77998-bethanycheum) 的學習路徑。
|
||||
* **會話式 AI** 與 **聊天機器人**。有一個專門的 [建立會話式 AI 解決方案](https://docs.microsoft.com/learn/paths/create-conversational-ai-solutions/?WT.mc_id=academic-77998-bethanycheum) 學習路徑,你也可以參考 [這篇部落格文章](https://soshnikov.com/azure/hello-bot-conversational-ai-on-microsoft-platform/) 以獲取更多細節。
|
||||
* 深度學習背後的 **深層數學**。對此我們推薦 Ian Goodfellow、Yoshua Bengio 與 Aaron Courville 所著的 [Deep Learning](https://www.amazon.com/Deep-Learning-Adaptive-Computation-Machine/dp/0262035618),該書也可在線上於 [https://www.deeplearningbook.org/](https://www.deeplearningbook.org/) 取得。
|
||||
|
||||
若想要對「雲端中的 AI」主題有溫和的入門認識,您可以考慮修習 [在 Azure 上開始使用人工智能](https://docs.microsoft.com/learn/paths/get-started-with-artificial-intelligence-on-azure/?WT.mc_id=academic-77998-bethanycheum) 的學習路徑。
|
||||
若想對「雲端上的 AI(AI in the Cloud)」主題做溫和的入門,可以考慮參加 [在 Azure 上開始使用人工智能](https://docs.microsoft.com/learn/paths/get-started-with-artificial-intelligence-on-azure/?WT.mc_id=academic-77998-bethanycheum) 的學習路徑。
|
||||
|
||||
# 內容
|
||||
|
||||
| | Lesson Link | PyTorch/Keras/TensorFlow | Lab |
|
||||
| | 課程連結 | PyTorch/Keras/TensorFlow | 實驗室 |
|
||||
| :-: | :------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------ |
|
||||
| 0 | [課程設定](./lessons/0-course-setup/setup.md) | [設定您的開發環境](./lessons/0-course-setup/how-to-run.md) | |
|
||||
| 0 | [課程設定](./lessons/0-course-setup/setup.md) | [設定你的開發環境](./lessons/0-course-setup/how-to-run.md) | |
|
||||
| I | [**人工智能導論**](./lessons/1-Intro/README.md) | | |
|
||||
| 01 | [人工智能的介紹與歷史](./lessons/1-Intro/README.md) | - | - |
|
||||
| II | **符號式 AI** |
|
||||
| II | **符號式人工智能** |
|
||||
| 02 | [知識表示與專家系統](./lessons/2-Symbolic/README.md) | [專家系統](./lessons/2-Symbolic/Animals.ipynb) / [本體論](./lessons/2-Symbolic/FamilyOntology.ipynb) /[概念圖](./lessons/2-Symbolic/MSConceptGraph.ipynb) | |
|
||||
| III | [**神經網絡導論**](./lessons/3-NeuralNetworks/README.md) |||
|
||||
| 03 | [感知器](./lessons/3-NeuralNetworks/03-Perceptron/README.md) | [筆記本](./lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb) | [實驗](./lessons/3-NeuralNetworks/03-Perceptron/lab/README.md) |
|
||||
| 04 | [多層感知器與建立我們自己的框架](./lessons/3-NeuralNetworks/04-OwnFramework/README.md) | [筆記本](./lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) | [實驗](./lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md) |
|
||||
| 05 | [框架介紹(PyTorch/TensorFlow)與過擬合](./lessons/3-NeuralNetworks/05-Frameworks/README.md) | [PyTorch](./lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) / [Keras](./lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) / [TensorFlow](./lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [實驗](./lessons/3-NeuralNetworks/05-Frameworks/lab/README.md) |
|
||||
| 03 | [感知器](./lessons/3-NeuralNetworks/03-Perceptron/README.md) | [筆記本](./lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb) | [實驗室](./lessons/3-NeuralNetworks/03-Perceptron/lab/README.md) |
|
||||
| 04 | [多層感知器與建立我們自己的框架](./lessons/3-NeuralNetworks/04-OwnFramework/README.md) | [筆記本](./lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) | [實驗室](./lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md) |
|
||||
| 05 | [框架簡介 (PyTorch/TensorFlow) 與過擬合](./lessons/3-NeuralNetworks/05-Frameworks/README.md) | [PyTorch](./lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) / [Keras](./lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) / [TensorFlow](./lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [實驗室](./lessons/3-NeuralNetworks/05-Frameworks/lab/README.md) |
|
||||
| IV | [**電腦視覺**](./lessons/4-ComputerVision/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) / [TensorFlow](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste)| [在 Microsoft Azure 探索電腦視覺](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) |
|
||||
| 06 | [電腦視覺簡介。OpenCV](./lessons/4-ComputerVision/06-IntroCV/README.md) | [筆記本](./lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) | [實驗](./lessons/4-ComputerVision/06-IntroCV/lab/README.md) |
|
||||
| 07 | [卷積神經網絡](./lessons/4-ComputerVision/07-ConvNets/README.md) & [CNN Architectures](./lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) | [PyTorch](./lessons/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb) /[TensorFlow](./lessons/4-ComputerVision/07-ConvNets/ConvNetsTF.ipynb) | [實驗](./lessons/4-ComputerVision/07-ConvNets/lab/README.md) |
|
||||
| 08 | [預訓練網絡與遷移學習](./lessons/4-ComputerVision/08-TransferLearning/README.md) and [訓練技巧](./lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) | [PyTorch](./lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) / [TensorFlow](./lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [實驗](./lessons/4-ComputerVision/08-TransferLearning/lab/README.md) |
|
||||
| 09 | [自編碼器與變分自編碼器 (VAEs)](./lessons/4-ComputerVision/09-Autoencoders/README.md) | [PyTorch](./lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) / [TensorFlow](./lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) | |
|
||||
| 06 | [電腦視覺入門。OpenCV](./lessons/4-ComputerVision/06-IntroCV/README.md) | [筆記本](./lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) | [實驗室](./lessons/4-ComputerVision/06-IntroCV/lab/README.md) |
|
||||
| 07 | [捲積神經網絡](./lessons/4-ComputerVision/07-ConvNets/README.md) & [CNN 架構](./lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) | [PyTorch](./lessons/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb) /[TensorFlow](./lessons/4-ComputerVision/07-ConvNets/ConvNetsTF.ipynb) | [實驗室](./lessons/4-ComputerVision/07-ConvNets/lab/README.md) |
|
||||
| 08 | [預訓練網絡與遷移學習](./lessons/4-ComputerVision/08-TransferLearning/README.md) and [訓練技巧](./lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) | [PyTorch](./lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) / [TensorFlow](./lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [實驗室](./lessons/4-ComputerVision/08-TransferLearning/lab/README.md) |
|
||||
| 09 | [自編碼器與變分自編碼器](./lessons/4-ComputerVision/09-Autoencoders/README.md) | [PyTorch](./lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) / [TensorFlow](./lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) | |
|
||||
| 10 | [生成對抗網絡與藝術風格轉換](./lessons/4-ComputerVision/10-GANs/README.md) | [PyTorch](./lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) / [TensorFlow](./lessons/4-ComputerVision/10-GANs/GANTF.ipynb) | |
|
||||
| 11 | [物件偵測](./lessons/4-ComputerVision/11-ObjectDetection/README.md) | [TensorFlow](./lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection.ipynb) | [實驗](./lessons/4-ComputerVision/11-ObjectDetection/lab/README.md) |
|
||||
| 12 | [語意分割。U-Net](./lessons/4-ComputerVision/12-Segmentation/README.md) | [PyTorch](./lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) / [TensorFlow](./lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb) | |
|
||||
| 11 | [目標檢測](./lessons/4-ComputerVision/11-ObjectDetection/README.md) | [TensorFlow](./lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection.ipynb) | [實驗室](./lessons/4-ComputerVision/11-ObjectDetection/lab/README.md) |
|
||||
| 12 | [語義分割。U-Net](./lessons/4-ComputerVision/12-Segmentation/README.md) | [PyTorch](./lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) / [TensorFlow](./lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb) | |
|
||||
| V | [**自然語言處理**](./lessons/5-NLP/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) /[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) | [在 Microsoft Azure 探索自然語言處理](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum)|
|
||||
| 13 | [文本表示。BoW/TF-IDF](./lessons/5-NLP/13-TextRep/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb) | |
|
||||
| 14 | [語義詞向量。Word2Vec and GloVe](./lessons/5-NLP/14-Embeddings/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) | |
|
||||
| 15 | [語言建模。訓練你自己的嵌入向量](./lessons/5-NLP/15-LanguageModeling/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) | [實驗](./lessons/5-NLP/15-LanguageModeling/lab/README.md) |
|
||||
| 13 | [文本表示。詞袋/TF-IDF](./lessons/5-NLP/13-TextRep/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb) | |
|
||||
| 14 | [語意詞嵌入。Word2Vec 與 GloVe](./lessons/5-NLP/14-Embeddings/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) | |
|
||||
| 15 | [語言模型。訓練你自己的嵌入向量](./lessons/5-NLP/15-LanguageModeling/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) | [實驗室](./lessons/5-NLP/15-LanguageModeling/lab/README.md) |
|
||||
| 16 | [循環神經網絡](./lessons/5-NLP/16-RNN/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNTF.ipynb) | |
|
||||
| 17 | [生成式循環網絡](./lessons/5-NLP/17-GenerativeNetworks/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.ipynb) | [實驗](./lessons/5-NLP/17-GenerativeNetworks/lab/README.md) |
|
||||
| 17 | [生成型循環網絡](./lessons/5-NLP/17-GenerativeNetworks/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.ipynb) | [實驗室](./lessons/5-NLP/17-GenerativeNetworks/lab/README.md) |
|
||||
| 18 | [Transformer。BERT。](./lessons/5-NLP/18-Transformers/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb) /[TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersTF.ipynb) | |
|
||||
| 19 | [命名實體識別](./lessons/5-NLP/19-NER/README.md) | [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/19-NER/NER-TF.ipynb) | [實驗](./lessons/5-NLP/19-NER/lab/README.md) |
|
||||
| 20 | [大型語言模型、提示編程與少量示例任務](./lessons/5-NLP/20-LangModels/README.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) | |
|
||||
| VI | **其他 AI 技術** || |
|
||||
| 21 | [遺傳演算法](./lessons/6-Other/21-GeneticAlgorithms/README.md) | [筆記本](./lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb) | |
|
||||
| 22 | [深度強化學習](./lessons/6-Other/22-DeepRL/README.md) | [PyTorch](./lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) /[TensorFlow](./lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) | [實驗](./lessons/6-Other/22-DeepRL/lab/README.md) |
|
||||
| 23 | [多代理系統](./lessons/6-Other/23-MultiagentSystems/README.md) | | |
|
||||
| VII | **AI 倫理** | | |
|
||||
| 24 | [AI 倫理與負責任的 AI](./lessons/7-Ethics/README.md) | [Microsoft Learn: 負責任的 AI 原則](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) | |
|
||||
| IX | **額外內容** | | |
|
||||
| 19 | [命名實體識別](./lessons/5-NLP/19-NER/README.md) | [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/19-NER/NER-TF.ipynb) | [實驗室](./lessons/5-NLP/19-NER/lab/README.md) |
|
||||
| 20 | [大型語言模型、提示工程與少量示例任務](./lessons/5-NLP/20-LangModels/README.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) | |
|
||||
| VI | [**其他 AI 技術**] || |
|
||||
| 21 | [基因演算法](./lessons/6-Other/21-GeneticAlgorithms/README.md) | [筆記本](./lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb) | |
|
||||
| 22 | [深度強化學習](./lessons/6-Other/22-DeepRL/README.md) | [PyTorch](./lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) /[TensorFlow](./lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) | [實驗室](./lessons/6-Other/22-DeepRL/lab/README.md) |
|
||||
| 23 | [多智能體系統](./lessons/6-Other/23-MultiagentSystems/README.md) | | |
|
||||
| VII | [**AI 倫理**] | | |
|
||||
| 24 | [AI 倫理與負責任的人工智慧](./lessons/7-Ethics/README.md) | [Microsoft Learn: Responsible AI Principles](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) | |
|
||||
| IX | [**額外內容**] | | |
|
||||
| 25 | [多模態網絡、CLIP 與 VQGAN](./lessons/X-Extras/X1-MultiModal/README.md) | [筆記本](./lessons/X-Extras/X1-MultiModal/Clip.ipynb) | |
|
||||
|
||||
## 每堂課包含
|
||||
|
||||
* 預讀材料
|
||||
* 可執行的 Jupyter 筆記本,通常與框架(**PyTorch** 或 **TensorFlow**)相關。可執行的筆記本也包含大量理論內容,因此要理解主題,你需要至少閱讀其中一個版本的筆記本(無論是 PyTorch 或 TensorFlow)。
|
||||
* **實驗** 可在某些主題提供,讓你有機會將所學應用到特定問題上。
|
||||
* 一些章節包含指向 [**MS Learn**](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) 模組的連結,這些模組涵蓋相關主題。
|
||||
* 課前閱讀資料
|
||||
* 可執行的 Jupyter 筆記本,通常會針對特定框架(**PyTorch** 或 **TensorFlow**)。可執行的筆記本也包含大量理論內容,因此要理解主題,您需要至少閱讀其中一個版本的筆記本(PyTorch 或 TensorFlow 其中之一)。
|
||||
* **實驗室**(Labs)適用於部分主題,讓您有機會將所學應用到特定問題上。
|
||||
* 部分章節包含連結到 [**MS Learn**](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) 的模組,涵蓋相關主題。
|
||||
|
||||
## 開始使用
|
||||
## 入門
|
||||
|
||||
### 🎯 初學 AI?從這裡開始!
|
||||
### 🎯 AI 新手?從這裡開始!
|
||||
|
||||
如果你完全沒有 AI 經驗且想要快速實作的範例,請查看我們的 [**入門友好範例**](./examples/README.md)!這些範例包括:
|
||||
如果您完全沒有 AI 經驗,想要快速的實作範例,請參閱我們的 [**新手友善範例**](./examples/README.md)! 這些範例包括:
|
||||
|
||||
- 🌟 **Hello AI 世界** - 你的第一個 AI 程式(模式辨識)
|
||||
- 🧠 **簡單神經網絡** - 從頭建立一個神經網絡
|
||||
- 🖼️ **影像分類器** - 使用詳盡註解對影像進行分類
|
||||
- 💬 **文字情感分析** - 分析正面/負面文字
|
||||
- 🌟 **Hello AI 世界** - 您的第一個 AI 程式(模式識別)
|
||||
- 🧠 **簡單神經網絡** - 從零開始構建神經網絡
|
||||
- 🖼️ **影像分類器** - 使用詳細註解進行影像分類
|
||||
- 💬 **文字情感** - 分析正面/負面文字
|
||||
|
||||
These examples are designed to help you understand AI concepts before diving into the full curriculum.
|
||||
|
||||
### 📚 完整課程安裝
|
||||
### 📚 完整課程設定
|
||||
|
||||
- We have created a [setup lesson](./lessons/0-course-setup/setup.md) to help you with setting up your development environment. - For Educators, we have created a [curricula setup lesson](./lessons/0-course-setup/for-teachers.md) for you too!
|
||||
- How to [Run the code in a VSCode or a Codepace](./lessons/0-course-setup/how-to-run.md)
|
||||
- 我們已建立了一個 [設定教學](./lessons/0-course-setup/setup.md) 以協助你設定開發環境。 - 對於教育工作者,我們也為你建立了一個 [課程設定教學](./lessons/0-course-setup/for-teachers.md)!
|
||||
- 如何 [在 VSCode 或 Codepace 執行程式碼](./lessons/0-course-setup/how-to-run.md)
|
||||
|
||||
Follow these steps:
|
||||
|
||||
|
|
@ -138,29 +138,29 @@ Clone the Repository: `git clone https://github.com/microsoft/AI-For-Beginners.g
|
|||
|
||||
Don't forget to star (🌟) this repo to find it easier later.
|
||||
|
||||
## 認識其他學習者
|
||||
## Meet other Learners
|
||||
|
||||
Join our [official AI Discord server](https://aka.ms/genai-discord?WT.mc_id=academic-105485-bethanycheum) to meet and network with other learners taking this course and get support.
|
||||
|
||||
If you have product feedback or questions whilst building visit our [Azure AI Foundry Developer Forum](https://aka.ms/foundry/forum)
|
||||
|
||||
## 測驗
|
||||
## Quizzes
|
||||
|
||||
> **關於測驗的小提醒**: All quizzes are contained in the Quiz-app folder in etc\quiz-app, or [線上這裡](https://ff-quizzes.netlify.app/) They are linked from within the lessons the quiz app can be run locally or deployed to Azure; follow the instruction in the `quiz-app` folder. They are gradually being localized.
|
||||
> **關於測驗的一點說明**: All quizzes are contained in the Quiz-app folder in etc\quiz-app, or [Online Here](https://ff-quizzes.netlify.app/) They are linked from within the lessons the quiz app can be run locally or deployed to Azure; follow the instruction in the `quiz-app` folder. They are gradually being localized.
|
||||
|
||||
## 需要幫忙
|
||||
## Help Wanted
|
||||
|
||||
Do you have suggestions or found spelling or code errors? Raise an issue or create a pull request.
|
||||
|
||||
## 特別感謝
|
||||
## Special Thanks
|
||||
|
||||
* **✍️ 主要作者:** [Dmitry Soshnikov](http://soshnikov.com), 博士
|
||||
* **🔥 編輯:** [Jen Looper](https://twitter.com/jenlooper), 博士
|
||||
* **🎨 速寫筆記插畫者:** [Tomomi Imura](https://twitter.com/girlie_mac)
|
||||
* **✍️ 主要作者:** [Dmitry Soshnikov](http://soshnikov.com), PhD
|
||||
* **🔥 編輯:** [Jen Looper](https://twitter.com/jenlooper), PhD
|
||||
* **🎨 Sketchnote 插畫者:** [Tomomi Imura](https://twitter.com/girlie_mac)
|
||||
* **✅ 測驗製作者:** [Lateefah Bello](https://github.com/CinnamonXI), [MLSA](https://studentambassadors.microsoft.com/)
|
||||
* **🙏 核心貢獻者:** [Evgenii Pishchik](https://github.com/Pe4enIks)
|
||||
|
||||
## 其他課程
|
||||
## Other Curricula
|
||||
|
||||
Our team produces other curricula! Check out:
|
||||
|
||||
|
|
@ -193,18 +193,18 @@ Our team produces other curricula! Check out:
|
|||
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
|
||||
[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
|
||||
---
|
||||
|
||||
### Copilot Series
|
||||
[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
|
||||
<!-- CO-OP TRANSLATOR OTHER COURSES END -->
|
||||
|
||||
## 尋求協助
|
||||
## Getting Help
|
||||
|
||||
If you get stuck or have any questions about building AI apps. Join fellow learners and experienced developers in discussions about MCP. It's a supportive community where questions are welcome and knowledge is shared freely.
|
||||
|
||||
|
|
@ -218,5 +218,5 @@ If you have product feedback or errors while building visit:
|
|||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
免責聲明:
|
||||
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們力求準確,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言版本應被視為具權威性的版本。對於關鍵性資訊,建議採用專業人工翻譯。我們對因使用本翻譯而導致的任何誤解或誤譯不負任何責任。
|
||||
本文件已使用 AI 翻譯服務 Co-op Translator(https://github.com/Azure/co-op-translator)進行翻譯。雖然我們力求準確,但請注意自動翻譯可能包含錯誤或不準確之處。原始語言之文件應視為具權威性的版本。對於重要或關鍵資訊,建議採用專業人工翻譯。我們對因使用此翻譯而導致之任何誤解或誤譯概不負責。
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -9,7 +9,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
-->
|
||||
# 人工智能簡介
|
||||
|
||||

|
||||

|
||||
|
||||
> 手繪筆記由 [Tomomi Imura](https://twitter.com/girlie_mac) 提供
|
||||
|
||||
|
|
@ -19,7 +19,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
最初,電腦是由 [查爾斯·巴貝奇](https://en.wikipedia.org/wiki/Charles_Babbage) 發明的,用於按照明確定義的程序(算法)處理數字。現代電腦雖然比19世紀提出的原始模型先進得多,但仍然遵循受控計算的理念。因此,如果我們知道實現目標所需的精確步驟序列,就可以編程讓電腦完成某些事情。
|
||||
|
||||

|
||||

|
||||
|
||||
> 照片由 [Vickie Soshnikova](http://twitter.com/vickievalerie) 提供
|
||||
|
||||
|
|
@ -46,7 +46,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
處理 **[智能](https://en.wikipedia.org/wiki/Intelligence)** 這個術語時的一個問題是,對於這個術語並沒有明確的定義。有人認為智能與 **抽象思維** 或 **自我意識** 有關,但我們無法準確定義它。
|
||||
|
||||

|
||||

|
||||
|
||||
> [照片](https://unsplash.com/photos/75715CVEJhI) 由 [Amber Kipp](https://unsplash.com/@sadmax) 提供,來自 Unsplash
|
||||
|
||||
|
|
@ -98,13 +98,13 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
> | 那麼機器學習呢? | |
|
||||
> |--------------|-----------|
|
||||
> | 基於計算機學習如何根據某些數據解決問題的人工智能部分稱為 **機器學習**。我們不會在本課程中考慮經典的機器學習——我們建議參考單獨的 [機器學習初學者課程](http://aka.ms/ml-beginners)。 |  |
|
||||
> | 基於計算機學習如何根據某些數據解決問題的人工智能部分稱為 **機器學習**。我們不會在本課程中考慮經典的機器學習——我們建議參考單獨的 [機器學習初學者課程](http://aka.ms/ml-beginners)。 |  |
|
||||
|
||||
## 人工智能的簡史
|
||||
|
||||
人工智能作為一個領域始於20世紀中葉。最初,符號推理是一種流行的方法,並且它帶來了一些重要的成功,例如專家系統——能夠在某些有限問題領域中充當專家的計算機程序。然而,很快就發現這種方法並不適用於大規模應用。從專家那裡提取知識、將其表示在計算機中並保持知識庫的準確性,事實證明這是一項非常複雜且在許多情況下成本過高的任務。這導致了20世紀70年代所謂的 [人工智能寒冬](https://en.wikipedia.org/wiki/AI_winter)。
|
||||
|
||||
<img alt="人工智能簡史" src="../../../../translated_images/history-of-ai.7e83efa70b537f5a0264357672b0884cf3a220fbafe35c65d70b2c3805f7bf5e.mo.png" width="70%"/>
|
||||
<img alt="人工智能簡史" src="../../../../translated_images/history-of-ai.7e83efa70b537f5a.mo.png" width="70%"/>
|
||||
|
||||
> 圖片由 [Dmitry Soshnikov](http://soshnikov.com) 提供
|
||||
|
||||
|
|
@ -124,7 +124,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
* 現代助手(如 Cortana、Siri 或 Google Assistant)都是混合系統,使用神經網絡將語音轉換為文本並識別我們的意圖,然後使用一些推理或明確的算法執行所需的操作。
|
||||
* 未來,我們可能會期待一個完全基於神經網絡的模型能夠自行處理對話。最近的 GPT 和 [Turing-NLG](https://www.microsoft.com/research/blog/turing-nlg-a-17-billion-parameter-language-model-by-microsoft) 神經網絡家族在這方面表現出色。
|
||||
|
||||
<img alt="圖靈測試的演變" src="../../../../translated_images/turing-test-evol.4184696701293ead6de6e6441a659c62f0b119b342456987f531005f43be0b6d.mo.png" width="70%"/>
|
||||
<img alt="圖靈測試的演變" src="../../../../translated_images/turing-test-evol.4184696701293ead.mo.png" width="70%"/>
|
||||
> 圖片由 Dmitry Soshnikov 提供,[照片](https://unsplash.com/photos/r8LmVbUKgns) 由 [Marina Abrosimova](https://unsplash.com/@abrosimova_marina_foto) 提供,Unsplash
|
||||
|
||||
## 最近的人工智能研究
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
"\n",
|
||||
"在這個範例中,我們將實作一個簡單的知識型系統,根據一些外觀特徵來判斷動物。此系統可以用以下的 AND-OR 樹來表示(這只是整個樹的一部分,我們可以輕鬆地添加更多規則):\n",
|
||||
"\n",
|
||||
"\n"
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
-->
|
||||
# 知識表示與專家系統
|
||||
|
||||

|
||||

|
||||
|
||||
> Sketchnote by [Tomomi Imura](https://twitter.com/girlie_mac)
|
||||
|
||||
|
|
@ -41,7 +41,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
因此,**知識表示**的問題是找到某種有效的方法,將知識以數據的形式表示在計算機中,使其能夠自動使用。這可以看作是一個光譜:
|
||||
|
||||

|
||||

|
||||
|
||||
> 圖片由 [Dmitry Soshnikov](http://soshnikov.com) 提供
|
||||
|
||||
|
|
@ -94,7 +94,7 @@ Python | 區塊語法 | 縮排
|
|||
|
||||
象徵式 AI 的早期成功之一是所謂的**專家系統**——設計用於在某些有限問題領域中充當專家的計算機系統。它們基於從一位或多位人類專家提取的**知識庫**,並包含一個在其上執行推理的**推理引擎**。
|
||||
|
||||
 | 
|
||||
 | 
|
||||
----------------------------------|----------------------------------------
|
||||
人類神經系統的簡化結構 | 基於知識的系統的架構
|
||||
|
||||
|
|
@ -106,7 +106,7 @@ Python | 區塊語法 | 縮排
|
|||
|
||||
例如,讓我們考慮以下基於動物物理特徵的專家系統:
|
||||
|
||||

|
||||

|
||||
|
||||
> 圖片由 [Dmitry Soshnikov](http://soshnikov.com) 提供
|
||||
|
||||
|
|
|
|||
|
|
@ -1259,7 +1259,7 @@
|
|||
"* 訓練損失低——模型能很好地接近訓練數據,因為它具有足夠的表達能力。\n",
|
||||
"* 驗證損失可能比訓練損失高得多,並且在訓練過程中可能開始增加——這是因為模型“記住”了訓練數據點,卻失去了對“整體情況”的把握。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"> 在這張圖中,`x` 代表訓練數據,`o` 代表驗證數據。左邊是線性模型(單層),它很好地接近了數據的本質。右邊是過擬合模型,該模型完美地接近了訓練數據,但對其他數據(驗證數據)的表現卻變得毫無意義(驗證誤差非常高)。\n"
|
||||
]
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
考慮以下近似 5 個點(圖中的 `x`)的問題:
|
||||
|
||||
 | 
|
||||
 | 
|
||||
-------------------------|--------------------------
|
||||
**線性模型,2 個參數** | **非線性模型,7 個參數**
|
||||
訓練誤差 = 5.3 | 訓練誤差 = 0
|
||||
|
|
@ -79,7 +79,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
如上圖所示,過擬合可以通過非常低的訓練誤差和非常高的驗證誤差來檢測。通常在訓練過程中,我們會看到訓練誤差和驗證誤差都開始下降,然後在某個時候驗證誤差可能停止下降並開始上升。這將是過擬合的跡象,也是我們應該停止訓練的指示(或者至少保存模型的快照)。
|
||||
|
||||

|
||||

|
||||
|
||||
## 如何防止過擬合
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
-->
|
||||
# 神經網絡簡介
|
||||
|
||||

|
||||

|
||||
|
||||
如我們在介紹中所討論的,實現智能的一種方法是訓練一個**計算機模型**或**人工大腦**。自20世紀中期以來,研究人員嘗試了不同的數學模型,直到最近這一方向取得了巨大成功。這些模仿大腦的數學模型被稱為**神經網絡**。
|
||||
|
||||
|
|
@ -36,13 +36,13 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
從生物學中,我們知道大腦由神經細胞(神經元)組成,每個神經元都有多個“輸入”(樹突)和一個“輸出”(軸突)。樹突和軸突都可以傳導電信號,而它們之間的連接——稱為突觸——可以表現出不同程度的導電性,這些導電性由神經遞質調節。
|
||||
|
||||
 | 
|
||||
 | 
|
||||
----|----
|
||||
真實神經元 *([圖片](https://en.wikipedia.org/wiki/Synapse#/media/File:SynapseSchematic_lines.svg) 來自維基百科)* | 人工神經元 *(作者提供圖片)*
|
||||
|
||||
因此,神經元的最簡單數學模型包含幾個輸入 X<sub>1</sub>, ..., X<sub>N</sub> 和一個輸出 Y,以及一系列權重 W<sub>1</sub>, ..., W<sub>N</sub>。輸出計算公式為:
|
||||
|
||||
<img src="../../../../translated_images/netout.1eb15eb76fd767313e067719f400cec4b0e5090239c3e997c29f6789d4c3c263.mo.png" alt="Y = f\left(\sum_{i=1}^N X_iW_i\right)" width="131" height="53" align="center"/>
|
||||
<img src="../../../../translated_images/netout.1eb15eb76fd76731.mo.png" alt="Y = f\left(\sum_{i=1}^N X_iW_i\right)" width="131" height="53" align="center"/>
|
||||
|
||||
其中 f 是某種非線性的**激活函數**。
|
||||
|
||||
|
|
|
|||
|
|
@ -73,14 +73,14 @@ im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
|
|||
|
||||
* **預處理盲文書的照片**。我們專注於如何使用閾值處理、特徵檢測、透視變換和 NumPy 操作來分離單個盲文符號,以便進一步由神經網路進行分類。
|
||||
|
||||
 |  | 
|
||||
 |  | 
|
||||
----|-----|-----
|
||||
|
||||
> 圖片來自 [OpenCV.ipynb](OpenCV.ipynb)
|
||||
|
||||
* **使用幀差檢測影片中的運動**。如果相機固定,則來自相機的幀應該彼此非常相似。由於幀表示為陣列,只需對兩個連續幀的陣列進行相減,我們就能得到像素差異,靜態幀的差異應該很低,而當影像中有顯著運動時,差異會變高。
|
||||
|
||||

|
||||

|
||||
|
||||
> 圖片來自 [OpenCV.ipynb](OpenCV.ipynb)
|
||||
|
||||
|
|
@ -88,7 +88,7 @@ im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
|
|||
- **密集光流** 計算顯示每個像素移動方向的向量場
|
||||
- **稀疏光流** 基於提取影像中的一些顯著特徵(例如邊緣),並從幀到幀構建它們的軌跡。
|
||||
|
||||

|
||||

|
||||
|
||||
> 圖片來自 [OpenCV.ipynb](OpenCV.ipynb)
|
||||
|
||||
|
|
|
|||
|
|
@ -13,11 +13,11 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
VGG-16 是一個在 2014 年 ImageNet top-5 分類中達到 92.7% 準確率的網路。它的層結構如下:
|
||||
|
||||

|
||||

|
||||
|
||||
如圖所示,VGG 採用傳統的金字塔架構,即一系列的卷積-池化層。
|
||||
|
||||

|
||||

|
||||
|
||||
> 圖片來源:[Researchgate](https://www.researchgate.net/figure/Vgg16-model-structure-To-get-the-VGG-NIN-model-we-replace-the-2-nd-4-th-6-th-7-th_fig2_335194493)
|
||||
|
||||
|
|
|
|||
|
|
@ -260,7 +260,7 @@
|
|||
"\n",
|
||||
"因此,在典型的 CNN 中,會有多個卷積層,並在它們之間加入池化層以減少影像的維度。我們還會增加濾波器的數量,因為隨著模式變得更複雜,我們需要尋找的可能組合也會更多。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"由於空間維度減少以及特徵/濾波器維度增加,這種架構也被稱為 **金字塔架構**。\n"
|
||||
]
|
||||
|
|
|
|||
|
|
@ -359,7 +359,7 @@
|
|||
"\n",
|
||||
"因此,在典型的 CNN 中,會有多個卷積層,並在它們之間插入池化層以減少圖片的尺寸。同時,我們還會增加濾波器的數量,因為隨著模式變得更加複雜,我們需要尋找的可能組合也會更多。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"由於空間尺寸逐漸減小,而特徵/濾波器的維度逐漸增加,這種架構也被稱為 **金字塔架構**。\n"
|
||||
]
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
為了提取模式,我們將使用**卷積濾波器**的概念。正如你所知,圖像可以用二維矩陣或帶有色彩深度的三維張量來表示。應用濾波器意味著我們取一個相對較小的**濾波核**矩陣,並對原始圖像中的每個像素與其鄰近點進行加權平均。我們可以將其視為一個小窗口在整個圖像上滑動,並根據濾波核矩陣中的權重對所有像素進行平均。
|
||||
|
||||
 | 
|
||||
 | 
|
||||
----|----
|
||||
|
||||
> 圖片來源:Dmitry Soshnikov
|
||||
|
|
@ -38,7 +38,7 @@ CNN 的工作方式基於以下重要思想:
|
|||
* 我們可以設計網絡,使濾波器能夠自動訓練
|
||||
* 我們可以使用相同的方法來在高層次特徵中找到模式,而不僅僅是在原始圖像中。因此,CNN 的特徵提取在特徵層次上工作,從低層次的像素組合開始,到更高層次的圖片部分組合。
|
||||
|
||||

|
||||

|
||||
|
||||
> 圖片來源:[Hislop-Lynch 的論文](https://www.semanticscholar.org/paper/Computer-vision-based-pedestrian-trajectory-Hislop-Lynch/26e6f74853fc9bbb7487b06dc2cf095d36c9021d),基於[他們的研究](https://dl.acm.org/doi/abs/10.1145/1553374.1553453)
|
||||
|
||||
|
|
@ -55,9 +55,9 @@ CNN 的工作方式基於以下重要思想:
|
|||
|
||||
例如,讓我們看看 VGG-16 的架構,這是一個在 2014 年 ImageNet 的 top-5 分類中達到 92.7% 準確率的網絡:
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
> 圖片來源:[Researchgate](https://www.researchgate.net/figure/Vgg16-model-structure-To-get-the-VGG-NIN-model-we-replace-the-2-nd-4-th-6-th-7-th_fig2_335194493)
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
我們將使用 [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/),該數據集包含 37 種不同品種的狗和貓的圖片。
|
||||
|
||||

|
||||

|
||||
|
||||
要下載數據集,請使用以下程式碼片段:
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@
|
|||
"\n",
|
||||
"為了呈現理想的貓,我們將從一張隨機噪點圖片開始,並嘗試使用梯度下降優化技術來調整圖片,使網絡能夠識別出貓。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"以下是我們的起始圖片:\n"
|
||||
]
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ Keras 和 PyTorch 都包含函數,可以輕鬆加載一些常見架構的預
|
|||
|
||||
以下是 VGG-16 網絡從一張貓的圖片中提取的特徵示例:
|
||||
|
||||

|
||||

|
||||
|
||||
## 貓與狗數據集
|
||||
|
||||
|
|
@ -48,19 +48,19 @@ Keras 和 PyTorch 都包含函數,可以輕鬆加載一些常見架構的預
|
|||
|
||||
我們可以採取的一種方法是從一張隨機圖像開始,然後嘗試使用**梯度下降優化**技術調整該圖像,使網絡開始認為它是一隻貓。
|
||||
|
||||

|
||||

|
||||
|
||||
然而,如果我們這樣做,結果會非常接近隨機噪聲。這是因為*有很多方法可以讓網絡認為輸入圖像是一隻貓*,包括一些在視覺上沒有意義的方式。雖然這些圖像包含了許多典型的貓的模式,但並沒有任何約束使它們在視覺上更具辨識性。
|
||||
|
||||
為了改善結果,我們可以在損失函數中添加另一個項,稱為**變異損失**。它是一種度量,顯示圖像中相鄰像素的相似程度。最小化變異損失可以使圖像更平滑,並消除噪聲——從而揭示更具視覺吸引力的模式。以下是一些“理想”圖像的示例,它們被高概率分類為貓和斑馬:
|
||||
|
||||
 | 
|
||||
 | 
|
||||
-----|-----
|
||||
*理想貓* | *理想斑馬*
|
||||
|
||||
類似的方法可以用於對神經網絡進行所謂的**對抗性攻擊**。假設我們想要欺騙神經網絡,使一隻狗看起來像一隻貓。如果我們拿一張狗的圖片,該圖片被網絡識別為狗,然後稍微調整它,使用梯度下降優化,直到網絡開始將其分類為貓:
|
||||
|
||||
 | 
|
||||
 | 
|
||||
-----|-----
|
||||
*狗的原始圖片* | *被分類為貓的狗圖片*
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
"\n",
|
||||
"由於我們訓練自編碼器的目的是儘可能捕捉原始圖像中的信息以進行準確的重建,網絡會嘗試找到輸入圖像的最佳**嵌入(embedding)**來捕捉其含義。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"> 圖片來源:[Keras 博客](https://blog.keras.io/building-autoencoders-in-keras.html)\n",
|
||||
"\n",
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
"\n",
|
||||
"由於我們訓練自編碼器的目的是捕捉原始圖像中的盡可能多的信息以進行準確的重建,網絡會嘗試找到輸入圖像的最佳**嵌入**來捕捉其含義。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*圖片來源:[Keras 部落格](https://blog.keras.io/building-autoencoders-in-keras.html)*\n",
|
||||
"\n",
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
由於我們訓練自動編碼器的目的是捕捉原始圖像中的盡可能多的信息以進行準確的重建,網絡會嘗試找到最佳的**嵌入**方式來捕捉輸入圖像的含義。
|
||||
|
||||

|
||||

|
||||
|
||||
> 圖片來源:[Keras 博客](https://blog.keras.io/building-autoencoders-in-keras.html)
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
## [課前測驗](https://ff-quizzes.netlify.app/en/ai/quiz/21)
|
||||
|
||||

|
||||

|
||||
|
||||
> 圖片來源:[YOLO v2 網站](https://pjreddie.com/darknet/yolov2/)
|
||||
|
||||
|
|
@ -25,7 +25,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
2. 對每個區塊進行影像分類。
|
||||
3. 將分類結果中激活值足夠高的區塊視為包含目標物件的區域。
|
||||
|
||||

|
||||

|
||||
|
||||
> *圖片來源:[練習筆記本](ObjectDetection-TF.ipynb)*
|
||||
|
||||
|
|
@ -42,7 +42,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
* [PASCAL VOC](http://host.robots.ox.ac.uk/pascal/VOC/) - 包含 20 個類別
|
||||
* [COCO](http://cocodataset.org/#home) - 常見物件的上下文。包含 80 個類別、邊界框和分割遮罩
|
||||
|
||||

|
||||

|
||||
|
||||
## 物件偵測的評估指標
|
||||
|
||||
|
|
@ -50,7 +50,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
對於影像分類來說,衡量演算法的表現相對簡單;但對於物件偵測,我們需要同時衡量類別的正確性以及推測邊界框位置的精確性。後者使用所謂的**交集比聯集**(IoU)來衡量,這是一種用來評估兩個框(或任意兩個區域)重疊程度的方法。
|
||||
|
||||

|
||||

|
||||
|
||||
> *圖片來源:[這篇優秀的 IoU 部落格文章](https://pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/)*
|
||||
|
||||
|
|
@ -98,11 +98,11 @@ $$
|
|||
|
||||
[R-CNN](http://islab.ulsan.ac.kr/files/announcement/513/rcnn_pami.pdf) 使用 [Selective Search](http://www.huppelen.nl/publications/selectiveSearchDraft.pdf) 生成層次結構的 ROI 區域,然後通過 CNN 特徵提取器和 SVM 分類器來確定物件類別,並通過線性迴歸確定*邊界框*座標。[官方論文](https://arxiv.org/pdf/1506.01497v1.pdf)
|
||||
|
||||

|
||||

|
||||
|
||||
> *圖片來源:van de Sande et al. ICCV’11*
|
||||
|
||||

|
||||

|
||||
|
||||
> *圖片來源:[這篇部落格](https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e)*
|
||||
|
||||
|
|
@ -110,7 +110,7 @@ $$
|
|||
|
||||
這種方法與 R-CNN 類似,但區域是在卷積層應用之後定義的。
|
||||
|
||||

|
||||

|
||||
|
||||
> 圖片來源:[官方論文](https://www.cv-foundation.org/openaccess/content_iccv_2015/papers/Girshick_Fast_R-CNN_ICCV_2015_paper.pdf),[arXiv](https://arxiv.org/pdf/1504.08083.pdf),2015
|
||||
|
||||
|
|
@ -118,7 +118,7 @@ $$
|
|||
|
||||
這種方法的主要思想是使用神經網路來預測 ROI,即所謂的*區域提議網路*。[論文](https://arxiv.org/pdf/1506.01497.pdf),2016
|
||||
|
||||

|
||||

|
||||
|
||||
> 圖片來源:[官方論文](https://arxiv.org/pdf/1506.01497.pdf)
|
||||
|
||||
|
|
@ -130,7 +130,7 @@ $$
|
|||
2. 特徵經過**位置敏感分數圖**處理。每個來自 $C$ 類別的物件被劃分為 $k\times k$ 區域,並訓練網路預測物件的部分。
|
||||
3. 對於 $k\times k$ 區域中的每個部分,所有網路對物件類別進行投票,選擇得票最多的物件類別。
|
||||
|
||||

|
||||

|
||||
|
||||
> 圖片來源:[官方論文](https://arxiv.org/abs/1605.06409)
|
||||
|
||||
|
|
@ -141,7 +141,7 @@ YOLO 是一種實時的單次通過演算法。主要思想如下:
|
|||
* 將圖片劃分為 $S\times S$ 區域。
|
||||
* 對於每個區域,**CNN** 預測 $n$ 個可能的物件、*邊界框*座標以及*置信度*=*概率* * IoU。
|
||||
|
||||

|
||||

|
||||
|
||||
> 圖片來源:[官方論文](https://arxiv.org/abs/1506.02640)
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
-->
|
||||
# 電腦視覺
|
||||
|
||||

|
||||

|
||||
|
||||
在本章節中,我們將學習以下內容:
|
||||
|
||||
|
|
|
|||
|
|
@ -199,7 +199,7 @@
|
|||
"\n",
|
||||
"**詞袋** (BoW) 向量表示法是最常用的傳統向量表示法。每個詞語都與一個向量索引相關聯,向量元素包含某個詞語在特定文檔中出現的次數。\n",
|
||||
"\n",
|
||||
" \n",
|
||||
" \n",
|
||||
"\n",
|
||||
"> **Note**: 你也可以將 BoW 理解為文本中每個詞語的單熱編碼向量的總和。\n",
|
||||
"\n",
|
||||
|
|
|
|||
|
|
@ -188,7 +188,7 @@
|
|||
"\n",
|
||||
"**詞袋**(Bag-of-words, BoW)向量表示法是最簡單易懂的傳統向量表示法。每個詞語都對應到向量中的一個索引,而向量中的元素則表示該詞語在特定文檔中出現的次數。\n",
|
||||
"\n",
|
||||
" \n",
|
||||
" \n",
|
||||
"\n",
|
||||
"> **注意**:你也可以將 BoW 理解為文本中每個詞語的單熱編碼(one-hot-encoded)向量的總和。\n",
|
||||
"\n",
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@
|
|||
"\n",
|
||||
"通過將嵌入層作為我們網絡的第一層,我們可以從詞袋模型(bag-of-words)切換到 **嵌入袋模型**(embedding bag model)。在這種模型中,我們首先將文本中的每個單詞轉換為對應的嵌入向量,然後對所有這些嵌入向量執行某種聚合函數,例如 `sum`、`average` 或 `max`。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"我們的分類器神經網絡將以嵌入層開始,接著是聚合層,最後在其上添加一個線性分類器:\n"
|
||||
]
|
||||
|
|
@ -176,7 +176,7 @@
|
|||
"\n",
|
||||
"在之前的架構中,我們需要將所有序列填充(pad)到相同的長度,才能將它們放入一個小批次中。這並不是表示變長序列最有效率的方法——另一種方法是使用 **offset** 向量,該向量會保存所有序列在一個大型向量中的偏移量。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"> **注意**:在上圖中,我們展示的是一個字符序列,但在我們的例子中,我們處理的是單詞序列。然而,使用偏移向量表示序列的基本原則是相同的。\n",
|
||||
"\n",
|
||||
|
|
@ -311,7 +311,7 @@
|
|||
"\n",
|
||||
"CBoW 的訓練速度較快,而 Skip-Gram 雖然較慢,但在表示不常見單詞方面表現更好。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"為了試驗在 Google News 數據集上預訓練的 Word2Vec 嵌入,我們可以使用 **gensim** 庫。以下是找到與 'neural' 最相似的單詞的示例:\n",
|
||||
"\n",
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
"\n",
|
||||
"通過將嵌入層作為我們網絡的第一層,我們可以從詞袋模型(bag-of-words)切換到 **嵌入袋模型**(embedding bag),在這裡我們首先將文本中的每個單詞轉換為對應的嵌入,然後對所有這些嵌入計算某種聚合函數,例如 `sum`、`average` 或 `max`。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"我們的分類器神經網絡由以下幾層組成:\n",
|
||||
"\n",
|
||||
|
|
@ -283,7 +283,7 @@
|
|||
"\n",
|
||||
"CBoW 的速度較快,而 Skip-Gram 雖然較慢,但在表示不常見詞方面表現更好。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"為了試驗基於 Google News 數據集預訓練的 Word2Vec 嵌入,我們可以使用 **gensim** 庫。以下是我們找到與「neural」最相似的詞。\n",
|
||||
"\n",
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
通過在分類器網絡中使用嵌入層作為第一層,我們可以從詞袋模型切換到 **嵌入袋** 模型。在嵌入袋模型中,我們首先將文本中的每個詞轉換為相應的嵌入,然後對所有嵌入計算某種聚合函數,例如 `sum`、`average` 或 `max`。
|
||||
|
||||

|
||||

|
||||
|
||||
> 圖片由作者提供
|
||||
|
||||
|
|
@ -40,7 +40,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
CBoW 的速度更快,而 Skip-Gram 雖然較慢,但在表示不常見詞方面效果更好。
|
||||
|
||||

|
||||

|
||||
|
||||
> 圖片來源:[這篇論文](https://arxiv.org/pdf/1301.3781.pdf)
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
* **連續詞袋模型**(CBoW):在標記序列 $W_{-N}$, ..., $W_N$ 中預測中間的標記 $W_0$。
|
||||
* **Skip-gram**:從中間標記 $W_0$ 預測一組相鄰的標記 {$W_{-N},\dots, W_{-1}, W_1,\dots, W_N$}。
|
||||
|
||||

|
||||

|
||||
|
||||
> 圖片來源:[這篇論文](https://arxiv.org/pdf/1301.3781.pdf)
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
為了捕捉文本序列的意義,我們需要使用另一種神經網絡架構,稱為**循環神經網絡**(Recurrent Neural Network,簡稱 RNN)。在 RNN 中,我們將句子逐個符號地傳遞給網絡,網絡會生成某種**狀態**,然後將該狀態與下一個符號一起再次傳遞給網絡。
|
||||
|
||||

|
||||

|
||||
|
||||
> 圖片由作者提供
|
||||
|
||||
|
|
@ -61,7 +61,7 @@ LSTM 網絡的組織方式與 RNN 類似,但有兩個狀態從層到層傳遞
|
|||
|
||||
循環網絡,無論是單向還是雙向,都能捕捉序列中的某些模式,並將它們存儲到狀態向量中或傳遞到輸出中。與卷積網絡類似,我們可以在第一層之上構建另一個循環層,以捕捉更高層次的模式,並基於第一層提取的低層次模式進行構建。這引出了**多層 RNN** 的概念,它由兩個或更多循環網絡組成,其中前一層的輸出作為輸入傳遞到下一層。
|
||||
|
||||

|
||||

|
||||
|
||||
*圖片來自 Fernando López 的[這篇精彩文章](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3)*
|
||||
|
||||
|
|
|
|||
|
|
@ -422,7 +422,7 @@
|
|||
"\n",
|
||||
"無論是單向還是雙向的循環網路,都能捕捉序列中的某些模式,並將其存儲到狀態向量中或傳遞到輸出中。與卷積網路類似,我們可以在第一層之上構建另一個循環層,以捕捉更高層次的模式,這些模式是由第一層提取的低層次模式構成的。這引出了 **多層 RNN** 的概念,它由兩層或更多的循環網路組成,前一層的輸出作為下一層的輸入。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*圖片來源:[這篇精彩的文章](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3) 作者 Fernando López*\n",
|
||||
"\n",
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
"\n",
|
||||
"為了捕捉文本序列的意義,我們將使用一種稱為**循環神經網路**(Recurrent Neural Network,簡稱 RNN)的神經網路架構。在使用 RNN 時,我們會將句子逐個標記(token)傳遞給網路,網路會生成某種**狀態**,然後我們將該狀態與下一個標記一起再次傳遞給網路。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"給定標記輸入序列 $X_0,\\dots,X_n$,RNN 會創建一個神經網路區塊的序列,並通過反向傳播對該序列進行端到端訓練。每個網路區塊接受一對 $(X_i,S_i)$ 作為輸入,並生成 $S_{i+1}$ 作為結果。最終狀態 $S_n$ 或輸出 $Y_n$ 會進入線性分類器以生成結果。所有網路區塊共享相同的權重,並通過一次反向傳播訓練完成端到端學習。\n",
|
||||
"\n",
|
||||
|
|
@ -369,7 +369,7 @@
|
|||
"\n",
|
||||
"無論是單向還是雙向的循環網絡,都能捕捉序列中的模式,並將其存儲到狀態向量中或作為輸出返回。與卷積網絡類似,我們可以在第一層循環層之後再構建另一層循環層,以捕捉更高層次的模式,這些模式是由第一層提取的低層次模式構建而成的。這引出了 **多層 RNN** 的概念,它由兩層或更多層循環網絡組成,其中前一層的輸出作為下一層的輸入。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*圖片來源:[這篇精彩的文章](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3),作者 Fernando López。*\n",
|
||||
"\n",
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@
|
|||
"\n",
|
||||
"我們將以以下方式訓練 RNN 來生成文本。在每一步中,我們會取一段長度為 `nchars` 的字元序列,並讓網路為每個輸入字元生成下一個輸出字元:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"根據實際情況,我們可能還需要加入一些特殊字元,例如 *序列結束符* `<eos>`。在我們的例子中,我們只希望訓練網路進行無限文本生成,因此我們會將每個序列的大小固定為 `nchars` 個標記。因此,每個訓練樣本將包含 `nchars` 個輸入和 `nchars` 個輸出(輸出是將輸入序列向左移動一個符號後的結果)。一個小批次(minibatch)將由多個這樣的序列組成。\n",
|
||||
"\n",
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@
|
|||
"\n",
|
||||
"我們將以以下方式訓練 RNN 來生成新聞標題。在每一步中,我們會取一個標題,將其輸入到 RNN 中,並對於每個輸入的字元,要求網路生成下一個輸出的字元:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"對於序列中的最後一個字元,我們會要求網路生成 `<eos>` 標記。\n",
|
||||
"\n",
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
這使得不同的神經網絡架構成為可能,如下圖所示:
|
||||
|
||||

|
||||

|
||||
|
||||
> 圖片來源:[Andrej Karpaty](http://karpathy.github.io/) 的博客文章 [Unreasonable Effectiveness of Recurrent Neural Networks](http://karpathy.github.io/2015/05/21/rnn-effectiveness/)
|
||||
|
||||
|
|
@ -32,7 +32,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
我們將訓練這個 RNN 逐步生成文本。在每一步中,我們將取一個長度為 `nchars` 的字符序列,並要求網絡為每個輸入字符生成下一個輸出字符:
|
||||
|
||||

|
||||

|
||||
|
||||
在生成文本(推理過程)時,我們從某個**提示**開始,將其通過 RNN 單元生成中間狀態,然後從該狀態開始生成。我們一次生成一個字符,並將狀態和生成的字符傳遞給另一個 RNN 單元以生成下一個字符,直到生成足夠的字符。
|
||||
|
||||
|
|
|
|||
|
|
@ -20,13 +20,13 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
**注意力機制**提供了一種方法,能夠對每個輸入向量對 RNN 每個輸出預測的上下文影響進行加權。其實現方式是通過在輸入 RNN 的中間狀態與輸出 RNN 之間創建捷徑。這樣,在生成輸出符號 y<sub>t</sub> 時,我們會考慮所有輸入隱藏狀態 h<sub>i</sub>,並賦予不同的權重係數 α<sub>t,i</sub>。
|
||||
|
||||

|
||||

|
||||
|
||||
> [Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) 中的加性注意力機制編碼器-解碼器模型,圖片來源於[這篇博客文章](https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html)
|
||||
|
||||
注意力矩陣 {α<sub>i,j</sub>} 表示某些輸入詞在生成輸出序列中特定詞時所起的作用程度。以下是一個這樣的矩陣示例:
|
||||
|
||||

|
||||

|
||||
|
||||
> 圖片來自 [Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) (圖3)
|
||||
|
||||
|
|
@ -66,7 +66,7 @@ Transformer 的核心思想之一是避免 RNN 的序列性質,並創建一個
|
|||
|
||||
接下來,我們需要捕捉序列中的一些模式。為此,Transformer 使用了**自注意力**機制,這本質上是將注意力應用於相同的輸入和輸出序列。應用自注意力使我們能夠考慮句子中的**上下文**,並查看哪些詞是相互關聯的。例如,它可以幫助我們理解哪些詞是由代詞(如 *it*)指代的,並考慮上下文:
|
||||
|
||||

|
||||

|
||||
|
||||
> 圖片來自 [Google 博客](https://research.googleblog.com/2017/08/transformer-novel-neural-network.html)
|
||||
|
||||
|
|
@ -91,7 +91,7 @@ Transformer 的核心思想之一是避免 RNN 的序列性質,並創建一個
|
|||
|
||||
**BERT**(Bidirectional Encoder Representations from Transformers)是一個非常大的多層 Transformer 網路,*BERT-base* 有 12 層,*BERT-large* 有 24 層。該模型首先在大規模文本語料庫(維基百科 + 書籍)上進行無監督訓練(預測句子中的遮蔽詞)。在預訓練過程中,模型吸收了大量的語言理解能力,這些能力可以通過微調其他數據集來利用。這個過程稱為**遷移學習**。
|
||||
|
||||

|
||||

|
||||
|
||||
> 圖片 [來源](http://jalammar.github.io/illustrated-bert/)
|
||||
|
||||
|
|
|
|||
|
|
@ -12,12 +12,12 @@
|
|||
"\n",
|
||||
"**注意力機制**提供了一種方法,能夠對每個輸入向量對RNN每個輸出預測的上下文影響進行加權。其實現方式是通過在輸入RNN的中間狀態和輸出RNN之間創建捷徑。這樣,在生成輸出符號 $y_t$ 時,我們會考慮所有輸入隱藏狀態 $h_i$,並賦予不同的權重係數 $\\alpha_{t,i}$。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*來自 [Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) 的加性注意力機制編碼器-解碼器模型,圖片引用自[這篇部落格文章](https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html)*\n",
|
||||
"\n",
|
||||
"注意力矩陣 $\\{\\alpha_{i,j}\\}$ 表示某些輸入詞在生成輸出序列中特定詞時所起的作用程度。以下是這樣一個矩陣的示例:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*圖片取自 [Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf)(圖3)*\n",
|
||||
"\n",
|
||||
|
|
@ -35,7 +35,7 @@
|
|||
"\n",
|
||||
"**BERT**(Bidirectional Encoder Representations from Transformers,雙向編碼器表示)是一個非常大的多層Transformer網路,*BERT-base*有12層,*BERT-large*有24層。該模型首先在大規模文本數據(維基百科+書籍)上進行無監督訓練(預測句子中的被遮蔽詞)。在預訓練過程中,模型吸收了大量的語言理解能力,這些能力可以通過微調其他數據集來加以利用。這個過程被稱為**遷移學習**。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"Transformer架構有許多變體,包括BERT、DistilBERT、BigBird、OpenGPT3等,這些模型都可以進行微調。[HuggingFace套件](https://github.com/huggingface/) 提供了用PyTorch訓練這些架構的資源庫。\n",
|
||||
"\n",
|
||||
|
|
|
|||
|
|
@ -12,12 +12,12 @@
|
|||
"\n",
|
||||
"**注意力機制**提供了一種方法,能夠對每個輸入向量在RNN的每個輸出預測中的上下文影響進行加權。其實現方式是通過在輸入RNN的中間狀態和輸出RNN之間創建捷徑。在生成輸出符號$y_t$時,我們會考慮所有輸入隱藏狀態$h_i$,並使用不同的權重係數$\\alpha_{t,i}$。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*[Bahdanau等人,2015](https://arxiv.org/pdf/1409.0473.pdf)中的加性注意力機制編碼器-解碼器模型,圖片引用自[這篇博客文章](https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html)*\n",
|
||||
"\n",
|
||||
"注意力矩陣$\\{\\alpha_{i,j}\\}$表示某些輸入詞語在生成輸出序列中的某個詞語時所起的作用程度。以下是這樣一個矩陣的示例:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*圖片取自[Bahdanau等人,2015](https://arxiv.org/pdf/1409.0473.pdf)(圖3)*\n",
|
||||
"\n",
|
||||
|
|
@ -225,7 +225,7 @@
|
|||
"\n",
|
||||
"**BERT**(雙向編碼器表示來自 Transformer)是一個非常大型的多層 Transformer 網絡,*BERT-base* 有 12 層,*BERT-large* 則有 24 層。該模型首先在大量文本數據(維基百科 + 書籍)上進行無監督訓練(預測句子中的被遮蔽詞)。在預訓練過程中,模型吸收了大量的語言理解能力,之後可以通過微調與其他數據集結合使用。這個過程被稱為 **遷移學習**。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"Transformer 架構有許多變體,包括 BERT、DistilBERT、BigBird、OpenGPT3 等,它們都可以進行微調。\n",
|
||||
"\n",
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ NER 模型本質上是 **標記分類模型**,因為對於每個輸入標記
|
|||
|
||||
由於我們需要在標記和類別之間建立一對一的對應關係,我們可以從這張圖中訓練一個右側的 **多對多** 神經網絡模型:
|
||||
|
||||

|
||||

|
||||
|
||||
> *圖片來自 [這篇部落格文章](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) 作者 [Andrej Karpathy](http://karpathy.github.io/)。NER 標記分類模型對應於此圖片中的最右側網絡架構。*
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
-->
|
||||
# 自然語言處理
|
||||
|
||||

|
||||

|
||||
|
||||
在本節中,我們將專注於使用神經網絡來處理與**自然語言處理 (NLP)** 相關的任務。我們希望計算機能夠解決許多 NLP 問題:
|
||||
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ NetLogo的一大優勢是它包含一個可供試用的工作模型庫。進入*
|
|||
|
||||
打開模型後,你會進入NetLogo的主界面。以下是一個描述狼和羊在有限資源(草地)條件下的種群模型示例。
|
||||
|
||||

|
||||

|
||||
|
||||
> Dmitry Soshnikov提供的截圖
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
-->
|
||||
# 概述
|
||||
|
||||

|
||||

|
||||
|
||||
> 手繪筆記由 [Tomomi Imura](https://twitter.com/girlie_mac) 提供
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
CLIP 的核心思想是能夠比較文本提示與圖像,並判斷圖像與提示的匹配程度。
|
||||
|
||||

|
||||

|
||||
|
||||
> *圖片來源於[這篇博客](https://openai.com/blog/clip/)*
|
||||
|
||||
|
|
@ -29,7 +29,7 @@ CLIP 模型/庫可以從 [OpenAI GitHub](https://github.com/openai/CLIP) 獲取
|
|||
|
||||
假設我們需要在貓、狗和人之間對圖像進行分類。在這種情況下,我們可以將圖像和一系列文本提示輸入模型,例如:“*一張貓的照片*”、“*一張狗的照片*”、“*一張人的照片*”。在結果的 3 個概率向量中,我們只需選擇值最大的索引。
|
||||
|
||||

|
||||

|
||||
|
||||
> *圖片來源於[這篇博客](https://openai.com/blog/clip/)*
|
||||
|
||||
|
|
@ -53,13 +53,13 @@ VQGAN 與普通 [GAN](../../4-ComputerVision/10-GANs/README.md) 的主要區別
|
|||
|
||||
VQGAN 與傳統 GAN 的一個重要區別是,後者可以從任何輸入向量生成一個體面的圖像,而 VQGAN 可能生成不連貫的圖像。因此,我們需要進一步引導圖像創建過程,這可以通過 CLIP 完成。
|
||||
|
||||

|
||||

|
||||
|
||||
為了生成與文本提示相符的圖像,我們從一些隨機編碼向量開始,將其通過 VQGAN 生成圖像。然後使用 CLIP 生成一個損失函數,該函數顯示圖像與文本提示的匹配程度。接下來的目標是最小化這個損失,通過反向傳播調整輸入向量參數。
|
||||
|
||||
一個實現 VQGAN+CLIP 的優秀庫是 [Pixray](http://github.com/pixray/pixray)。
|
||||
|
||||
 |  | 
|
||||
 |  | 
|
||||
----|----|----
|
||||
根據提示 *一幅年輕男性文學教師手持書本的水彩特寫肖像* 生成的圖片 | 根據提示 *一幅年輕女性計算機科學教師手持電腦的油畫特寫肖像* 生成的圖片 | 根據提示 *一幅年長男性數學教師站在黑板前的油畫特寫肖像* 生成的圖片
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "4ed9993bca581850c983c95d5a3f57eb",
|
||||
"translation_date": "2025-12-24T23:30:46+00:00",
|
||||
"original_hash": "14816e97d79b296c87811724f7785923",
|
||||
"translation_date": "2026-01-01T11:01:39+00:00",
|
||||
"source_file": "README.md",
|
||||
"language_code": "mr"
|
||||
}
|
||||
|
|
@ -10,127 +10,127 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
[](https://github.com/microsoft/AI-For-Beginners/blob/main/LICENSE)
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/graphs/contributors/)
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/issues/)
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/pulls/)
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/pulls/)
|
||||
[](http://makeapullrequest.com)
|
||||
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/watchers/)
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/network/)
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/stargazers/)
|
||||
[](https://GitHub.com/microsoft/AI-For-Beginners/stargazers/)
|
||||
[](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)
|
||||
[](https://gitter.im/Microsoft/ai-for-beginners?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
||||
|
||||
[](https://discord.gg/nTYy5BXMWG)
|
||||
[](https://discord.gg/nTYy5BXMWG)
|
||||
|
||||
# नवशिकांसाठी कृत्रिम बुद्धिमत्ता - एक अभ्यासक्रम
|
||||
# प्रारंभिकांसाठी कृत्रिम बुद्धिमत्ता - एक अभ्यासक्रम
|
||||
|
||||
||
|
||||
||
|
||||
|:---:|
|
||||
| नवशिकांसाठी AI - _स्केचनोट द्वारे [@girlie_mac](https://twitter.com/girlie_mac)_ |
|
||||
| AI For Beginners - _स्केचनोट कडून [@girlie_mac](https://twitter.com/girlie_mac)_ |
|
||||
|
||||
आमच्या 12-साप्ताहिक, 24-धड्यांच्या अभ्यासक्रमासह **कृत्रिम बुद्धिमत्ता** (AI) जगाचा शोध घ्या! यात व्यावहारिक धडे, क्विझ आणि लॅब्सचा समावेश आहे. हा अभ्यासक्रम नवशिकांसाठी अनुकूल आहे आणि यात TensorFlow आणि PyTorch सारखी साधने तसेच AI मध्ये नैतिकता यांचा समावेश आहे.
|
||||
आमच्या 12-सप्ताह, 24-धड्यांच्या अभ्यासक्रमासह **कृत्रिम बुद्धिमत्ता** (AI) चा शोध घ्या! यात व्यावहारिक धडे, क्विझ आणि लॅब्स समाविष्ट आहेत. हा अभ्यासक्रम सुरुवातीसाठी अनुकूल आहे आणि यात TensorFlow आणि PyTorch सारखी साधने तसेच AI मधील नैतिकता यांचा समावेश आहे
|
||||
|
||||
### 🌐 बहुभाषा समर्थन
|
||||
### 🌐 बहुभाषीय समर्थन
|
||||
|
||||
#### GitHub Action द्वारे समर्थीत (स्वयंचलित व नेहमी अद्ययावत)
|
||||
#### GitHub Action द्वारे समर्थन (स्वयंचलित व नेहमी अद्ययावत)
|
||||
|
||||
<!-- CO-OP TRANSLATOR LANGUAGES TABLE START -->
|
||||
[अरबी](../ar/README.md) | [बंगाली](../bn/README.md) | [बुल्गेरियन](../bg/README.md) | [बर्मी (म्यानमार)](../my/README.md) | [चिनी (सरलीकृत)](../zh/README.md) | [चिनी (परंपरागत, हॉंग काँग)](../hk/README.md) | [चिनी (परंपरागत, मकाऊ)](../mo/README.md) | [चिनी (परंपरागत, तैवान)](../tw/README.md) | [क्रोएशियन](../hr/README.md) | [चेक](../cs/README.md) | [डॅनिश](../da/README.md) | [डच](../nl/README.md) | [एस्टोनियन](../et/README.md) | [फिनिश](../fi/README.md) | [फ्रेंच](../fr/README.md) | [जर्मन](../de/README.md) | [ग्रीक](../el/README.md) | [हिब्रू](../he/README.md) | [हिंदी](../hi/README.md) | [हंगेरियन](../hu/README.md) | [इंडोनेशियन](../id/README.md) | [इटालियन](../it/README.md) | [जपानी](../ja/README.md) | [कन्नड](../kn/README.md) | [कोरियन](../ko/README.md) | [लिथुआनियन](../lt/README.md) | [मलय](../ms/README.md) | [मल्याळम](../ml/README.md) | [मराठी](./README.md) | [नेपाळी](../ne/README.md) | [नायजीरियन पिड्झिन](../pcm/README.md) | [नॉर्वेजियन](../no/README.md) | [फारसी (पर्शियन)](../fa/README.md) | [पोलिश](../pl/README.md) | [पोर्तुगिज (ब्राझिल)](../br/README.md) | [पोर्तुगिज (पोर्तुगाल)](../pt/README.md) | [पंजाबी (गुरमुखी)](../pa/README.md) | [रोमानियन](../ro/README.md) | [रशियन](../ru/README.md) | [सर्बियन (सिरिलिक)](../sr/README.md) | [स्लोव्हाक](../sk/README.md) | [स्लोव्हेनियन](../sl/README.md) | [स्पॅनिश](../es/README.md) | [स्वाहिली](../sw/README.md) | [स्वीडिश](../sv/README.md) | [टागालॉग (फिलिपिनो)](../tl/README.md) | [तमिळ](../ta/README.md) | [तेलुगु](../te/README.md) | [थाई](../th/README.md) | [टर्किश](../tr/README.md) | [युक्रेनियन](../uk/README.md) | [उर्दू](../ur/README.md) | [व्हिएतनामी](../vi/README.md)
|
||||
[अरबी](../ar/README.md) | [बंगाली](../bn/README.md) | [बुल्गेरियन](../bg/README.md) | [बर्मी (म्यानमार)](../my/README.md) | [चिनी (सरलीकृत)](../zh/README.md) | [चिनी (परंपरागत, हॉंगकॉंग)](../hk/README.md) | [चिनी (परंपरागत, मकाऊ)](../mo/README.md) | [चिनी (परंपरागत, तैवान)](../tw/README.md) | [क्रोएशियन](../hr/README.md) | [चेक](../cs/README.md) | [डॅनिश](../da/README.md) | [डच](../nl/README.md) | [एस्टोनियन](../et/README.md) | [फिनिश](../fi/README.md) | [फ्रेंच](../fr/README.md) | [जर्मन](../de/README.md) | [ग्रीक](../el/README.md) | [हिब्रू](../he/README.md) | [हिंदी](../hi/README.md) | [हंगेरीयन](../hu/README.md) | [इंडोनेशियन](../id/README.md) | [इटालियन](../it/README.md) | [जपानी](../ja/README.md) | [कन्नड](../kn/README.md) | [कोरियन](../ko/README.md) | [लिथुआनियन](../lt/README.md) | [मलय](../ms/README.md) | [मलयाळम](../ml/README.md) | [मराठी](./README.md) | [नेपाली](../ne/README.md) | [नायजेरियन पिजिन](../pcm/README.md) | [नॉर्वेजियन](../no/README.md) | [पर्शियन (फारसी)](../fa/README.md) | [पोलिश](../pl/README.md) | [पोर्तुगीज (ब्राझिल)](../br/README.md) | [पोर्तुगीज (पोर्तुगाल)](../pt/README.md) | [पंजाबी (गुरमुखी)](../pa/README.md) | [रोमानियन](../ro/README.md) | [रशियन](../ru/README.md) | [सर्बियन (सिरिलिक)](../sr/README.md) | [स्लोव्हाक](../sk/README.md) | [स्लोव्हेनियन](../sl/README.md) | [स्पॅनिश](../es/README.md) | [स्वाहिली](../sw/README.md) | [स्वीडिश](../sv/README.md) | [टॅगालोग (फिलिपिनो)](../tl/README.md) | [तामिळ](../ta/README.md) | [तेलुगू](../te/README.md) | [थाई](../th/README.md) | [तुर्किश](../tr/README.md) | [युक्रेनी](../uk/README.md) | [उर्दू](../ur/README.md) | [व्हिएतनामी](../vi/README.md)
|
||||
<!-- CO-OP TRANSLATOR LANGUAGES TABLE END -->
|
||||
|
||||
**जर तुम्हाला अतिरिक्त अनुवाद हवेत तर समर्थित भाषा [इथे](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md) सूचीबद्ध आहेत**
|
||||
**जर तुम्हाला अतिरिक्त भाषांतर हवे असेल तर समर्थित भाषांची यादी [येथे](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md) उपलब्ध आहे**
|
||||
|
||||
## समुदायात सामील व्हा
|
||||
[](https://discord.gg/nTYy5BXMWG)
|
||||
[](https://discord.gg/nTYy5BXMWG)
|
||||
|
||||
## तुम्हाला काय शिकायला मिळेल
|
||||
## तुम्ही काय शिकाल
|
||||
|
||||
**[अभ्यासक्रमाचा माइंडमॅप](http://soshnikov.com/courses/ai-for-beginners/mindmap.html)**
|
||||
**[कोर्सचा माइंडमॅप](http://soshnikov.com/courses/ai-for-beginners/mindmap.html)**
|
||||
|
||||
या अभ्यासक्रमात तुम्ही खालील गोष्टी शिकाल:
|
||||
या अभ्यासक्रमात, तुम्ही शिकाल:
|
||||
|
||||
* कृत्रिम बुद्धिमत्तेसाठी विविध पद्धती, ज्यात "चालू असलेली" प्रतीकात्मक पद्धत **ज्ञान सादरीकरण** आणि तर्कशक्तीचा समावेश आहे ([GOFAI](https://en.wikipedia.org/wiki/Symbolic_artificial_intelligence)).
|
||||
* **न्युरल नेटवर्क्स** आणि **डीप लर्निंग**, जे आधुनिक AI च्या मधोमध आहेत. आम्ही या महत्त्वाच्या विषयांच्या मागील संकल्पना दोन लोकप्रिय फ्रेमवर्क्समध्ये - [TensorFlow](http://Tensorflow.org) आणि [PyTorch](http://pytorch.org) - कोड वापरून स्पष्ट करू.
|
||||
* प्रतिमा आणि मजकूरावर काम करण्यासाठी **न्युरल आर्किटेक्चर्स**. आम्ही अलीकडील मॉडेल्स कव्हर करू परंतु कदाचित अत्याधुनिक स्थितीत काही कमीपणा असू शकतो.
|
||||
* कमी लोकप्रिय AI पध्दती, जसे की **जेनेटिक अल्गोरिदम्स** आणि **मल्टी-एजंट सिस्टम्स**.
|
||||
* कृत्रिम बुद्धिमत्तेकडे वेगवेगळे दृष्टिकोन, ज्यात 'गुड ओल्ड' चिन्हात्मक पध्दत ज्यात **ज्ञान प्रतिनिधित्व** आणि तर्कशास्त्र ([GOFAI](https://en.wikipedia.org/wiki/Symbolic_artificial_intelligence)).
|
||||
* **न्यूरल नेटवर्क्स** आणि **डीप लर्निंग**, जे आधुनिक AI चे मुख्य भाग आहेत. आपण या महत्त्वाच्या विषयांच्या मागील संकल्पनांना दोन सर्वात लोकप्रिय फ्रेमवर्कमध्ये कोड वापरून दाखवू - [TensorFlow](http://Tensorflow.org) आणि [PyTorch](http://pytorch.org).
|
||||
* प्रतिमा आणि मजकूरावर काम करण्यासाठीच्या **न्यूरल आर्किटेक्चर्स**. आम्ही अलीकडील मॉडेल्स कव्हर करू परंतु कदाचित अत्याधुनिक बाबतीत थोडे मागे असू शकू.
|
||||
* कमी लोकप्रिय AI पध्दती, जसे की **आनुवंशिक अल्गोरिदम** आणि **बहु-एजंट सिस्टम्स**.
|
||||
|
||||
या अभ्यासक्रमात आम्ही खालील गोष्टी समाविष्ट करणार नाहीत:
|
||||
या अभ्यासक्रमात आपण खालील गोष्टी कव्हर करणार नाही:
|
||||
|
||||
> [या कोर्ससाठी सर्व अतिरिक्त संसाधने आमच्या Microsoft Learn संग्रहात शोधा](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum)
|
||||
|
||||
* व्यवसायात **AI चा वापर** याचे बिझनेस केस. Microsoft Learn वरील [Introduction to AI for business users](https://docs.microsoft.com/learn/paths/introduction-ai-for-business-users/?WT.mc_id=academic-77998-bethanycheum) हा शिक्षण मार्ग घेतला तर उपयुक्त ठरू शकते, किंवा [AI Business School](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-bethanycheum) वापरू शकता, जो [INSEAD](https://www.insead.edu/) सह सहयोगात विकसित करण्यात आला आहे.
|
||||
* व्यवसायात **AI** चा वापराविषयी व्यावसायिक प्रकरणे. विचार करा की Microsoft Learn वरचा [Introduction to AI for business users](https://docs.microsoft.com/learn/paths/introduction-ai-for-business-users/?WT.mc_id=academic-77998-bethanycheum) शिकण्याचा मार्ग घ्यावा, किंवा [AI Business School](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-bethanycheum), जे [INSEAD](https://www.insead.edu/) सह सहकार्याने विकसित केले आहे.
|
||||
* **क्लासिक मशीन लर्निंग**, जे आमच्या [Machine Learning for Beginners Curriculum](http://github.com/Microsoft/ML-for-Beginners) मध्ये चांगल्या प्रकारे वर्णन केले आहे.
|
||||
* व्यवहारातील AI अनुप्रयोग जे **[Cognitive Services](https://azure.microsoft.com/services/cognitive-services/?WT.mc_id=academic-77998-bethanycheum)** वापरून बनवलेले. यासाठी, आम्ही शिफारस करतो की तुम्ही Microsoft Learn वर [vision](https://docs.microsoft.com/learn/paths/create-computer-vision-solutions-azure-cognitive-services/?WT.mc_id=academic-77998-bethanycheum), [natural language processing](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-bethanycheum), **[Generative AI with Azure OpenAI Service](https://learn.microsoft.com/en-us/training/paths/develop-ai-solutions-azure-openai/?WT.mc_id=academic-77998-bethanycheum)** आणि इतर मॉड्यूल्सपासून सुरू करावे.
|
||||
* विशिष्ट एमएल **क्लाउड फ्रेमवर्क्स**, जसे की [Azure Machine Learning](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-bethanycheum), [Microsoft Fabric](https://learn.microsoft.com/en-us/training/paths/get-started-fabric/?WT.mc_id=academic-77998-bethanycheum), किंवा [Azure Databricks](https://docs.microsoft.com/learn/paths/data-engineer-azure-databricks?WT.mc_id=academic-77998-bethanycheum). आपण [Build and operate machine learning solutions with Azure Machine Learning](https://docs.microsoft.com/learn/paths/build-ai-solutions-with-azure-ml-service/?WT.mc_id=academic-77998-bethanycheum) आणि [Build and Operate Machine Learning Solutions with Azure Databricks](https://docs.microsoft.com/learn/paths/build-operate-machine-learning-solutions-azure-databricks/?WT.mc_id=academic-77998-bethanycheum) या शिक्षण मार्गांचा विचार करू शकता.
|
||||
* **संवादी AI** आणि **चॅट बॉट्स**. यासाठी स्वतंत्र [Create conversational AI solutions](https://docs.microsoft.com/learn/paths/create-conversational-ai-solutions/?WT.mc_id=academic-77998-bethanycheum) हा शिक्षण मार्ग आहे, आणि अधिक तपशीलांसाठी तुम्ही [हा ब्लॉग पोस्ट](https://soshnikov.com/azure/hello-bot-conversational-ai-on-microsoft-platform/) देखील पाहू शकता.
|
||||
* डीप लर्निंगमागील **गूढ गणित**. या साठी आम्ही Ian Goodfellow, Yoshua Bengio आणि Aaron Courville यांनी लिहिलेल्या [Deep Learning](https://www.amazon.com/Deep-Learning-Adaptive-Computation-Machine/dp/0262035618) या पुस्तकाची शिफारस करतो, जे ऑनलाइन देखील [https://www.deeplearningbook.org/](https://www.deeplearningbook.org/) वर उपलब्ध आहे.
|
||||
* **[Cognitive Services](https://azure.microsoft.com/services/cognitive-services/?WT.mc_id=academic-77998-bethanycheum)** वापरून तयार केलेली व्यावहारिक AI ऍप्लिकेशन्स. यासाठी, आम्ही शिफारस करतो की आपण Microsoft Learn मधील [vision](https://docs.microsoft.com/learn/paths/create-computer-vision-solutions-azure-cognitive-services/?WT.mc_id=academic-77998-bethanycheum), [natural language processing](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-bethanycheum), **[Generative AI with Azure OpenAI Service](https://learn.microsoft.com/en-us/training/paths/develop-ai-solutions-azure-openai/?WT.mc_id=academic-77998-bethanycheum)** आणि इतर मॉड्युलपासून सुरुवात करावी.
|
||||
* विशिष्ट ML **क्लाउड फ्रेमवर्क्स**, जसे की [Azure Machine Learning](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-bethanycheum), [Microsoft Fabric](https://learn.microsoft.com/en-us/training/paths/get-started-fabric/?WT.mc_id=academic-77998-bethanycheum), किंवा [Azure Databricks](https://docs.microsoft.com/learn/paths/data-engineer-azure-databricks?WT.mc_id=academic-77998-bethanycheum). विचार करा की आपण [Build and operate machine learning solutions with Azure Machine Learning](https://docs.microsoft.com/learn/paths/build-ai-solutions-with-azure-ml-service/?WT.mc_id=academic-77998-bethanycheum) आणि [Build and Operate Machine Learning Solutions with Azure Databricks](https://docs.microsoft.com/learn/paths/build-operate-machine-learning-solutions-azure-databricks/?WT.mc_id=academic-77998-bethanycheum) या शिकण्याच्या मार्गांचा वापर करावा.
|
||||
* **संवादी AI** आणि **चॅट बॉट्स**. यासाठी वेगळा [Create conversational AI solutions](https://docs.microsoft.com/learn/paths/create-conversational-ai-solutions/?WT.mc_id=academic-77998-bethanycheum) शिकण्याचा मार्ग आहे, आणि अधिक तपशीलांसाठी तुम्ही [हा ब्लॉग पोस्ट](https://soshnikov.com/azure/hello-bot-conversational-ai-on-microsoft-platform/) पाहू शकता.
|
||||
* डीप लर्निंगमागील **गहन गणित**. यासाठी, आम्ही Ian Goodfellow, Yoshua Bengio आणि Aaron Courville यांच्या [Deep Learning](https://www.amazon.com/Deep-Learning-Adaptive-Computation-Machine/dp/0262035618) या पुस्तकाची शिफारस करतो, जे ऑनलाइन [https://www.deeplearningbook.org/](https://www.deeplearningbook.org/) वरही उपलब्ध आहे.
|
||||
|
||||
_क्लाउडमधील AI_ विषयांच्या सौम्य परिचयासाठी आपण [Get started with artificial intelligence on Azure](https://docs.microsoft.com/learn/paths/get-started-with-artificial-intelligence-on-azure/?WT.mc_id=academic-77998-bethanycheum) हा Learning Path घेण्याचा विचार करू शकता.
|
||||
क्लाउडमधील _AI_ विषयांवरील सौम्य परिचयासाठी आपण [Get started with artificial intelligence on Azure](https://docs.microsoft.com/learn/paths/get-started-with-artificial-intelligence-on-azure/?WT.mc_id=academic-77998-bethanycheum) हे Learning Path घेण्याचा विचार करू शकता.
|
||||
|
||||
# सामग्री
|
||||
|
||||
| | धड्याचा दुवा | PyTorch/Keras/TensorFlow | लॅब |
|
||||
| | Lesson Link | PyTorch/Keras/TensorFlow | Lab |
|
||||
| :-: | :------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------ |
|
||||
| 0 | [कोर्स सेटअप](./lessons/0-course-setup/setup.md) | [Setup Your Development Environment](./lessons/0-course-setup/how-to-run.md) | |
|
||||
| 0 | [Course Setup](./lessons/0-course-setup/setup.md) | [Setup Your Development Environment](./lessons/0-course-setup/how-to-run.md) | |
|
||||
| I | [**AI परिचय**](./lessons/1-Intro/README.md) | | |
|
||||
| 01 | [AI परिचय आणि इतिहास](./lessons/1-Intro/README.md) | - | - |
|
||||
| II | **प्रतीकात्मक AI** |
|
||||
| 02 | [ज्ञान सादरीकरण आणि एक्सपर्ट सिस्टम्स](./lessons/2-Symbolic/README.md) | [Expert Systems](./lessons/2-Symbolic/Animals.ipynb) / [Ontology](./lessons/2-Symbolic/FamilyOntology.ipynb) /[Concept Graph](./lessons/2-Symbolic/MSConceptGraph.ipynb) | |
|
||||
| III | [**न्युरल नेटवर्क्स परिचय**](./lessons/3-NeuralNetworks/README.md) |||
|
||||
| 01 | [कृत्रिम बुद्धिमत्तेचा परिचय आणि इतिहास](./lessons/1-Intro/README.md) | - | - |
|
||||
| II | **चिन्हात्मक AI** |
|
||||
| 02 | [ज्ञान प्रतिनिधित्व आणि विशेषज्ञ प्रणाली](./lessons/2-Symbolic/README.md) | [तज्ज्ञ प्रणाली](./lessons/2-Symbolic/Animals.ipynb) / [ऑन्टोलॉजी](./lessons/2-Symbolic/FamilyOntology.ipynb) /[संकल्पना ग्राफ](./lessons/2-Symbolic/MSConceptGraph.ipynb) | |
|
||||
| III | [**न्यूरल नेटवर्क्स परिचय**](./lessons/3-NeuralNetworks/README.md) |||
|
||||
| 03 | [परसेप्ट्रॉन](./lessons/3-NeuralNetworks/03-Perceptron/README.md) | [नोटबुक](./lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb) | [लॅब](./lessons/3-NeuralNetworks/03-Perceptron/lab/README.md) |
|
||||
| 04 | [बहु-स्तरीय परसेप्ट्रॉन आणि आपले स्वतःचे फ्रेमवर्क तयार करणे](./lessons/3-NeuralNetworks/04-OwnFramework/README.md) | [नोटबुक](./lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) | [लॅब](./lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md) |
|
||||
| 05 | [फ्रेमवर्क्स (PyTorch/TensorFlow) परिचय आणि ओव्हरफिटिंग](./lessons/3-NeuralNetworks/05-Frameworks/README.md) | [PyTorch](./lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) / [Keras](./lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) / [TensorFlow](./lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [लॅब](./lessons/3-NeuralNetworks/05-Frameworks/lab/README.md) |
|
||||
| IV | [**संगणकीय दृष्टी**](./lessons/4-ComputerVision/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) / [TensorFlow](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste)| [Microsoft Azure वर संगणकीय दृष्टी एक्सप्लोर करा](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) |
|
||||
| 04 | [मल्टी-लेयर्ड परसेप्ट्रॉन आणि आपला स्वतःचा फ्रेमवर्क तयार करणे](./lessons/3-NeuralNetworks/04-OwnFramework/README.md) | [नोटबुक](./lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) | [लॅब](./lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md) |
|
||||
| 05 | [फ्रेमवर्क्स (PyTorch/TensorFlow) आणि ओव्हरफिटिंगचा परिचय](./lessons/3-NeuralNetworks/05-Frameworks/README.md) | [PyTorch](./lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) / [Keras](./lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) / [TensorFlow](./lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [लॅब](./lessons/3-NeuralNetworks/05-Frameworks/lab/README.md) |
|
||||
| IV | [**संगणकीय दृष्टी**](./lessons/4-ComputerVision/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) / [TensorFlow](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste)| [Microsoft Azure वर संगणकीय दृष्टी अन्वेषण करा](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) |
|
||||
| 06 | [संगणकीय दृष्टी परिचय. OpenCV](./lessons/4-ComputerVision/06-IntroCV/README.md) | [नोटबुक](./lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) | [लॅब](./lessons/4-ComputerVision/06-IntroCV/lab/README.md) |
|
||||
| 07 | [कन्व्होल्यूशनल न्यूरल नेटवर्क्स](./lessons/4-ComputerVision/07-ConvNets/README.md) & [CNN आर्किटेक्चर्स](./lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) | [PyTorch](./lessons/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb) /[TensorFlow](./lessons/4-ComputerVision/07-ConvNets/ConvNetsTF.ipynb) | [लॅब](./lessons/4-ComputerVision/07-ConvNets/lab/README.md) |
|
||||
| 08 | [पूर्व-प्रशिक्षित नेटवर्क आणि ट्रान्सफर लर्निंग](./lessons/4-ComputerVision/08-TransferLearning/README.md) and [प्रशिक्षण टिप्स](./lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) | [PyTorch](./lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) / [TensorFlow](./lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [लॅब](./lessons/4-ComputerVision/08-TransferLearning/lab/README.md) |
|
||||
| 09 | [ऑटोएनकोडर्स आणि VAEs](./lessons/4-ComputerVision/09-Autoencoders/README.md) | [PyTorch](./lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) / [TensorFlow](./lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) | |
|
||||
| 10 | [जनरेटिव्ह अॅडव्हर्सेरियल नेटवर्क्स & कलात्मक शैली ट्रान्सफर](./lessons/4-ComputerVision/10-GANs/README.md) | [PyTorch](./lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) / [TensorFlow](./lessons/4-ComputerVision/10-GANs/GANTF.ipynb) | |
|
||||
| 08 | [पूर्व-प्रशिक्षित नेटवर्क्स आणि ट्रान्सफर लर्निंग](./lessons/4-ComputerVision/08-TransferLearning/README.md) and [प्रशिक्षण टिप्स](./lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) | [PyTorch](./lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) / [TensorFlow](./lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [लॅब](./lessons/4-ComputerVision/08-TransferLearning/lab/README.md) |
|
||||
| 09 | [ऑटोएन्कोडर्स आणि VAE](./lessons/4-ComputerVision/09-Autoencoders/README.md) | [PyTorch](./lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) / [TensorFlow](./lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) | |
|
||||
| 10 | [जनरेटिव्ह ऍडव्हर्सेरिअल नेटवर्क्स & कलात्मक शैली स्थानांतरण](./lessons/4-ComputerVision/10-GANs/README.md) | [PyTorch](./lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) / [TensorFlow](./lessons/4-ComputerVision/10-GANs/GANTF.ipynb) | |
|
||||
| 11 | [ऑब्जेक्ट डिटेक्शन](./lessons/4-ComputerVision/11-ObjectDetection/README.md) | [TensorFlow](./lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection.ipynb) | [लॅब](./lessons/4-ComputerVision/11-ObjectDetection/lab/README.md) |
|
||||
| 12 | [सेमँटिक सेगमेंटेशन. U-Net](./lessons/4-ComputerVision/12-Segmentation/README.md) | [PyTorch](./lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) / [TensorFlow](./lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb) | |
|
||||
| V | [**नैसर्गिक भाषा प्रक्रिया**](./lessons/5-NLP/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) /[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) | [Microsoft Azure वर नैसर्गिक भाषा प्रक्रिया एक्सप्लोर करा](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum)|
|
||||
| 12 | [सिमँटिक सेगमेंटेशन. U-Net](./lessons/4-ComputerVision/12-Segmentation/README.md) | [PyTorch](./lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) / [TensorFlow](./lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb) | |
|
||||
| V | [**नैसर्गिक भाषा प्रक्रिया**](./lessons/5-NLP/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) /[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) | [Microsoft Azure वर नैसर्गिक भाषा प्रक्रिया अन्वेषण करा](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum)|
|
||||
| 13 | [टेक्स्ट प्रतिनिधित्व. BoW/TF-IDF](./lessons/5-NLP/13-TextRep/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb) | |
|
||||
| 14 | [शाब्दिक एम्बेडिंग्ज. Word2Vec and GloVe](./lessons/5-NLP/14-Embeddings/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) | |
|
||||
| 15 | [भाषा मॉडेलिंग. आपली स्वतःची एम्बेडिंग्ज प्रशिक्षित करणे](./lessons/5-NLP/15-LanguageModeling/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) | [लॅब](./lessons/5-NLP/15-LanguageModeling/lab/README.md) |
|
||||
| 16 | [रीकरंट न्यूरल नेटवर्क्स](./lessons/5-NLP/16-RNN/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNTF.ipynb) | |
|
||||
| 17 | [जनरेटिव्ह रीकरंट नेटवर्क्स](./lessons/5-NLP/17-GenerativeNetworks/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.ipynb) | [लॅब](./lessons/5-NLP/17-GenerativeNetworks/lab/README.md) |
|
||||
| 18 | [Transformers. BERT.](./lessons/5-NLP/18-Transformers/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb) /[TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersTF.ipynb) | |
|
||||
| 14 | [सिमँटिक शब्द एम्बेडिंग्ज. Word2Vec आणि GloVe](./lessons/5-NLP/14-Embeddings/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) | |
|
||||
| 15 | [भाषा मॉडेलिंग. स्वतःच्या एम्बेडिंग्जचे प्रशिक्षण](./lessons/5-NLP/15-LanguageModeling/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) | [लॅब](./lessons/5-NLP/15-LanguageModeling/lab/README.md) |
|
||||
| 16 | [रीकर्नेट न्यूरल नेटवर्क्स](./lessons/5-NLP/16-RNN/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNTF.ipynb) | |
|
||||
| 17 | [जनरेटिव्ह रीकर्नेट नेटवर्क्स](./lessons/5-NLP/17-GenerativeNetworks/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.ipynb) | [लॅब](./lessons/5-NLP/17-GenerativeNetworks/lab/README.md) |
|
||||
| 18 | [ट्रान्सफॉर्मर्स. BERT.](./lessons/5-NLP/18-Transformers/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb) /[TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersTF.ipynb) | |
|
||||
| 19 | [नामित एंटिटी ओळख](./lessons/5-NLP/19-NER/README.md) | [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/19-NER/NER-TF.ipynb) | [लॅब](./lessons/5-NLP/19-NER/lab/README.md) |
|
||||
| 20 | [मोठी भाषा मॉडेल्स, प्रॉम्प्ट प्रोग्रामिंग आणि फ्यू-शॉट टास्क](./lessons/5-NLP/20-LangModels/README.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) | |
|
||||
| VI | **इतर AI तंत्र** || |
|
||||
| 21 | [जेनिटिक अल्गोरिदम](./lessons/6-Other/21-GeneticAlgorithms/README.md) | [नोटबुक](./lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb) | |
|
||||
| 22 | [डीप रिइनफोर्समेंट लर्निंग](./lessons/6-Other/22-DeepRL/README.md) | [PyTorch](./lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) /[TensorFlow](./lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) | [लॅब](./lessons/6-Other/22-DeepRL/lab/README.md) |
|
||||
| 23 | [बहु-एजंट सिस्टम्स](./lessons/6-Other/23-MultiagentSystems/README.md) | | |
|
||||
| VII | **AI नैतिकता** | | |
|
||||
| 24 | [AI नैतिकता आणि जबाबदार AI](./lessons/7-Ethics/README.md) | [Microsoft Learn: जबाबदार AI तत्त्वे](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) | |
|
||||
| IX | **अतिरिक्त** | | |
|
||||
| 25 | [मल्टी-मॉडल नेटवर्क्स, CLIP आणि VQGAN](./lessons/X-Extras/X1-MultiModal/README.md) | [नोटबुक](./lessons/X-Extras/X1-MultiModal/Clip.ipynb) | |
|
||||
| VI | [**इतर AI तंत्रे**] || |
|
||||
| 21 | [जनुकीय अल्गोरिदम](./lessons/6-Other/21-GeneticAlgorithms/README.md) | [नोटबुक](./lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb) | |
|
||||
| 22 | [डीप रिइन्फोर्समेंट लर्निंग](./lessons/6-Other/22-DeepRL/README.md) | [PyTorch](./lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) /[TensorFlow](./lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) | [लॅब](./lessons/6-Other/22-DeepRL/lab/README.md) |
|
||||
| 23 | [मल्टी-एजंट सिस्टम्स](./lessons/6-Other/23-MultiagentSystems/README.md) | | |
|
||||
| VII | [**AI एथिक्स**] | | |
|
||||
| 24 | [AI एथिक्स आणि जबाबदार AI](./lessons/7-Ethics/README.md) | [Microsoft Learn: जबाबदार AI तत्त्वे](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) | |
|
||||
| IX | [**अतिरिक्त**] | | |
|
||||
| 25 | [मल्टी-मोडल नेटवर्क्स, CLIP आणि VQGAN](./lessons/X-Extras/X1-MultiModal/README.md) | [नोटबुक](./lessons/X-Extras/X1-MultiModal/Clip.ipynb) | |
|
||||
|
||||
## प्रत्येक धड्यात समाविष्ट आहे
|
||||
## प्रत्येक धडा यात समाविष्ट आहे
|
||||
|
||||
* पूर्व-वाचन साहित्य
|
||||
* चालवता येणाऱ्या Jupyter नोटबुक्स, जे अनेकदा विशिष्ट फ्रेमवर्कसाठी असतात (**PyTorch** किंवा **TensorFlow**). चालवता येणाऱ्या नोटबुकमध्ये खूप सैद्धांतिक सामग्री असते, त्यामुळे विषय समजून घेण्यासाठी तुम्हाला नोटबुकमधून कमीतकमी एक आवृत्ती (किंवा PyTorch किंवा TensorFlow) पाहणे आवश्यक आहे.
|
||||
* काही विषयांसाठी उपलब्ध **लॅब्स**, ज्यामुळे तुम्हाला शिकलेल्या सामग्रीला विशिष्ट समस्येवर लागू करून पाहण्याची संधी मिळते.
|
||||
* काही विभागांमध्ये संबंधित विषयांना कव्हर करणाऱ्या [**MS Learn**](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) मॉड्यूल्ससाठी दुवे असतात.
|
||||
* कार्यकारी Jupyter नोटबुक्स, जे अनेकदा विशिष्ट फ्रेमवर्कसाठी असतात (**PyTorch** किंवा **TensorFlow**). कार्यान्वित करता येणाऱ्या नोटबुकमध्ये बरीच सैद्धांतिक सामग्री असते, त्यामुळे विषय समजून घेण्यासाठी तुम्हाला नोटबुकपैकी किमान एक आवृत्ती (PyTorch किंवा TensorFlow मध्येले कोणतेही) पाहणे आवश्यक आहे.
|
||||
* **लॅब्स** काही विषयांसाठी उपलब्ध असतात, जे तुम्हाला शिकलेल्या सामग्रीला विशिष्ट समस्येवर लागू करून पाहण्याची संधी देतात.
|
||||
* काही विभागांमध्ये संबंधित विषय कव्हर करणाऱ्या [**MS Learn**](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) मॉड्यूल्सचे दुवे असतात.
|
||||
|
||||
## सुरू करण्यासाठी
|
||||
## सुरूवात
|
||||
|
||||
### 🎯 एआय मध्ये नवीन आहात? इथून सुरू करा!
|
||||
### 🎯 AI मध्ये नवीन आहात का? इथे सुरू करा!
|
||||
|
||||
जर तुम्ही एआयमध्ये पूर्णपणे नवीन असाल आणि जलद, हस्तगत उदाहरणं पाहू इच्छित असाल, तर आमची [**सुरुवातीसाठी सोपी उदाहरणे**](./examples/README.md) पहा! यामध्ये समाविष्ट आहेत:
|
||||
जर तुम्ही AI मध्ये पूर्णपणे नवीन असाल आणि लवकर, हस्तगत उदाहरणे हवी असतील, तर आमची [**सुरुवातीसाठी अनुकूल उदाहरणे**](./examples/README.md) बघा! यात समावेश आहे:
|
||||
|
||||
- 🌟 **Hello AI World** - तुमचा पहिला एआय प्रोग्राम (पॅटर्न ओळख)
|
||||
- 🧠 **Simple Neural Network** - शून्यापासून न्यूरल नेटवर्क तयार करा
|
||||
- 🖼️ **Image Classifier** - सविस्तर टिप्पण्या सह प्रतिमा वर्गीकृत करा
|
||||
- 💬 **टेक्स्ट सेंटिमेंट** - सकारात्मक/नकारात्मक मजकूर विश्लेषण करा
|
||||
- 🌟 **Hello AI World** - तुमचे पहिले AI प्रोग्राम (नमुना ओळख)
|
||||
- 🧠 **Simple Neural Network** - शून्यातून एक न्यूरल नेटवर्क तयार करा
|
||||
- 🖼️ **Image Classifier** - तपशीलवार टिप्पण्यांसह प्रतिमा वर्गीकृत करा
|
||||
- 💬 **मजकूराची भावना** - सकारात्मक/नकारात्मक मजकूराचे विश्लेषण
|
||||
|
||||
हे उदाहरणे पूर्ण अभ्यासक्रमात शिरण्यापूर्वी AI संकल्पना समजून घेण्यासाठी तयार केलेले आहेत.
|
||||
हे उदाहरणे पूर्ण अभ्यासक्रमात डोकावण्यापूर्वी AI संकल्पना समजून घेण्यास मदत करण्यासाठी डिझाइन केले आहेत.
|
||||
|
||||
### 📚 Full Curriculum Setup
|
||||
### 📚 पूर्ण अभ्यासक्रम सेटअप
|
||||
|
||||
- आम्ही आपल्या विकास वातावरणाची सेटअप करण्यात मदत करण्यासाठी एक [सेटअप धडा](./lessons/0-course-setup/setup.md) तयार केले आहे. - शिक्षकांसाठी, आम्ही तुमच्यासाठी एक [अभ्यासक्रम सेटअप धडा](./lessons/0-course-setup/for-teachers.md) सुद्धा तयार केला आहे!
|
||||
- VSCode किंवा Codepace मध्ये कोड कसा [चालवायचा](./lessons/0-course-setup/how-to-run.md)
|
||||
- आम्ही आपले विकास वातावरण सेटअप करण्यास मदत करण्यासाठी एक [सेटअप धडा](./lessons/0-course-setup/setup.md) तयार केला आहे. - शिक्षकांसाठी, आम्ही तुमच्यासाठी एक [अभ्यासक्रम सेटअप धडा](./lessons/0-course-setup/for-teachers.md) देखील तयार केला आहे!
|
||||
- कसे [VSCode किंवा Codepace मध्ये कोड चालवायचे](./lessons/0-course-setup/how-to-run.md)
|
||||
|
||||
Follow these steps:
|
||||
या चरणांचे पालन करा:
|
||||
|
||||
Fork the Repository: Click on the "Fork" button at the top-right corner of this page.
|
||||
|
||||
|
|
@ -138,85 +138,85 @@ Clone the Repository: `git clone https://github.com/microsoft/AI-For-Beginners.g
|
|||
|
||||
Don't forget to star (🌟) this repo to find it easier later.
|
||||
|
||||
## Meet other Learners
|
||||
## इतर शिकणाऱ्यांना भेटा
|
||||
|
||||
Join our [अधिकृत AI Discord सर्व्हर](https://aka.ms/genai-discord?WT.mc_id=academic-105485-bethanycheum) to meet and network with other learners taking this course and get support.
|
||||
आमच्या [अधिकृत AI Discord सर्व्हर](https://aka.ms/genai-discord?WT.mc_id=academic-105485-bethanycheum) मध्ये सामील व्हा, हा कोर्स घेणाऱ्या इतर शिकणाऱ्यांशी भेटण्यासाठी आणि नेटवर्क करण्यासाठी तसेच मदत मिळवण्यासाठी.
|
||||
|
||||
If you have product feedback or questions whilst building visit our [Azure AI Foundry विकसक फोरम](https://aka.ms/foundry/forum)
|
||||
If you have product feedback or questions whilst building visit our [Azure AI Foundry Developer Forum](https://aka.ms/foundry/forum)
|
||||
|
||||
## Quizzes
|
||||
## क्विझ
|
||||
|
||||
> **क्विझविषयी एक नोंद**: सर्व क्विझेस Quiz-app फोल्डर मध्ये etc\quiz-app मध्ये आहेत, किंवा [ऑनलाइन येथे](https://ff-quizzes.netlify.app/) ते धड्यांमधून लिंक केलेले आहेत; क्विझ अॅप स्थानिकरित्या चालवता येते किंवा Azure वर तैनात केले जाऊ शकते; `quiz-app` फोल्डरमधील सूचनांचे पालन करा. ते हळूहळू स्थानिकीकरण केले जात आहेत.
|
||||
> **क्विझबद्दल एक टीप**: सर्व क्विझ Quiz-app फोल्डरमध्ये etc\quiz-app मध्ये आहेत, किंवा [ऑनलाइन येथे](https://ff-quizzes.netlify.app/) ते धड्यातून लिंक केलेले आहेत; क्विझ अॅप स्थानिकरित्या चालवता येतो किंवा Azure वर डिप्लॉय करता येतो; कृपया `quiz-app` फोल्डरमधील सूचनांचे पालन करा. ते हळूहळू स्थानिकृत केले जात आहेत.
|
||||
|
||||
## Help Wanted
|
||||
## मदत हवी आहे
|
||||
|
||||
Do you have suggestions or found spelling or code errors? Raise an issue or create a pull request.
|
||||
आपल्याकडे सूचना आहेत का किंवा स्पेलिंग किंवा कोड त्रुटी आढळल्या आहेत का? एक इश्यू उघडा किंवा पुल रिक्वेस्ट तयार करा.
|
||||
|
||||
## Special Thanks
|
||||
## विशेष धन्यवाद
|
||||
|
||||
* **✍️ मुख्य लेखक:** [Dmitry Soshnikov](http://soshnikov.com), PhD
|
||||
* **✍️ प्राथमिक लेखक:** [Dmitry Soshnikov](http://soshnikov.com), PhD
|
||||
* **🔥 संपादक:** [Jen Looper](https://twitter.com/jenlooper), PhD
|
||||
* **🎨 स्केचनोट इलस्ट्रेटर:** [Tomomi Imura](https://twitter.com/girlie_mac)
|
||||
* **🎨 स्केचनोट चित्रकार:** [Tomomi Imura](https://twitter.com/girlie_mac)
|
||||
* **✅ क्विझ निर्माते:** [Lateefah Bello](https://github.com/CinnamonXI), [MLSA](https://studentambassadors.microsoft.com/)
|
||||
* **🙏 मुख्य योगदानकर्ते:** [Evgenii Pishchik](https://github.com/Pe4enIks)
|
||||
|
||||
## Other Curricula
|
||||
## इतर अभ्यासक्रम
|
||||
|
||||
Our team produces other curricula! Check out:
|
||||
आमची टीम इतर अभ्यासक्रमही तयार करते! हे पहा:
|
||||
|
||||
<!-- CO-OP TRANSLATOR OTHER COURSES START -->
|
||||
### LangChain
|
||||
[](https://aka.ms/langchain4j-for-beginners)
|
||||
[](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin)
|
||||
[](https://aka.ms/langchain4j-for-beginners)
|
||||
[](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin)
|
||||
|
||||
---
|
||||
|
||||
### Azure / Edge / MCP / Agents
|
||||
[](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
|
||||
---
|
||||
|
||||
### Generative AI Series
|
||||
[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst)
|
||||
[-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
|
||||
[-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst)
|
||||
[-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
|
||||
[-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst)
|
||||
|
||||
---
|
||||
|
||||
### Core Learning
|
||||
[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
|
||||
[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
|
||||
[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
|
||||
---
|
||||
|
||||
### Copilot Series
|
||||
[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
|
||||
<!-- CO-OP TRANSLATOR OTHER COURSES END -->
|
||||
|
||||
## Getting Help
|
||||
## मदत मिळवा
|
||||
|
||||
If you get stuck or have any questions about building AI apps. Join fellow learners and experienced developers in discussions about MCP. It's a supportive community where questions are welcome and knowledge is shared freely.
|
||||
जर तुम्हाला अडकलेले वाटत असेल किंवा AI अॅप्स तयार करताना काही प्रश्न असतील तर MCP बद्दलच्या चर्चांमध्ये इतर शिकणाऱ्यांशी आणि अनुभवी विकसकांशी सामील व्हा. हे एक समर्थनशील समुदाय आहे जिथे प्रश्नांचे स्वागत केले जाते आणि ज्ञान मनमोकळे शेअर केले जाते.
|
||||
|
||||
[](https://discord.gg/nTYy5BXMWG)
|
||||
|
||||
If you have product feedback or errors while building visit:
|
||||
उत्पादनाबद्दल अभिप्राय किंवा तयार करताना त्रुटी आढळल्यास भेट द्या:
|
||||
|
||||
[](https://aka.ms/foundry/forum)
|
||||
[](https://aka.ms/foundry/forum)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
अस्वीकरण:
|
||||
हा दस्तऐवज AI अनुवाद सेवा Co-op Translator (https://github.com/Azure/co-op-translator) वापरून भाषांतरित केला आहे. आम्ही अचूकतेसाठी प्रयत्न करतो, परंतु कृपया लक्षात घ्या की स्वयंचलित अनुवादांमध्ये चुका किंवा अचूकतेतील त्रुटी असू शकतात. मूळ दस्तऐवज त्याच्या मूळ भाषेत प्रमाणभूत स्रोत म्हणून विचारात घ्यावा. महत्त्वाच्या माहितीसाठी व्यावसायिक मानवी अनुवाद शिफारसीय आहे. या अनुवादाच्या वापरामुळे उद्भवणाऱ्या कोणत्याही गैरसमजुतींसाठी किंवा चुकीच्या व्याख्यांसाठी आम्ही जबाबदार नाहीत.
|
||||
हे दस्तऐवज AI अनुवाद सेवा Co-op Translator (https://github.com/Azure/co-op-translator) वापरून अनुवादित केलेले आहे. आम्ही अचूकतेसाठी प्रयत्न करतो, परंतु कृपया लक्षात घ्या की स्वयंचलित अनुवादांमध्ये चुका किंवा अचूकतेशी संबंधित त्रुटी असू शकतात. मूळ दस्तऐवज त्याच्या मूळ भाषेत अधिकृत स्रोत मानले जावे. महत्त्वाची माहिती साठी व्यावसायिक मानवी अनुवादाची शिफारस केली जाते. या अनुवादाच्या वापरामुळे उद्भविणाऱ्या कोणत्याही गैरसमजांसाठी किंवा चुकीच्या अर्थ लावल्याबद्दल आम्ही जबाबदार नाही.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
|
|
@ -9,7 +9,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
-->
|
||||
# AI ची ओळख
|
||||
|
||||

|
||||

|
||||
|
||||
> स्केच नोट [Tomomi Imura](https://twitter.com/girlie_mac) यांच्याकडून
|
||||
|
||||
|
|
@ -19,7 +19,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
मूळतः, संगणक [चार्ल्स बॅबेज](https://en.wikipedia.org/wiki/Charles_Babbage) यांनी संख्यांवर कार्य करण्यासाठी आणि एक निश्चित प्रक्रिया - अल्गोरिदम अनुसरण करण्यासाठी शोधले होते. आधुनिक संगणक, जरी 19व्या शतकात प्रस्तावित केलेल्या मूळ मॉडेलपेक्षा लक्षणीय अधिक प्रगत असले तरी, नियंत्रित गणनांच्या त्याच कल्पनेचे अनुसरण करतात. त्यामुळे जर आपल्याला एखादे लक्ष्य साध्य करण्यासाठी आवश्यक असलेल्या अचूक चरणांची क्रमवारी माहित असेल तर संगणकाला काहीतरी करण्यासाठी प्रोग्राम करणे शक्य आहे.
|
||||
|
||||

|
||||

|
||||
|
||||
> फोटो [Vickie Soshnikova](http://twitter.com/vickievalerie) यांच्याकडून
|
||||
|
||||
|
|
@ -46,7 +46,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
**[बुद्धिमत्ता](https://en.wikipedia.org/wiki/Intelligence)** या संज्ञेशी संबंधित असताना एक समस्या अशी आहे की या संज्ञेची स्पष्ट व्याख्या नाही. एखाद्याला वाटू शकते की बुद्धिमत्ता **गूढ विचारांशी** किंवा **आत्म-जाणिवेशी** संबंधित आहे, परंतु आपण याची योग्य व्याख्या करू शकत नाही.
|
||||
|
||||

|
||||

|
||||
|
||||
> [फोटो](https://unsplash.com/photos/75715CVEJhI) [Amber Kipp](https://unsplash.com/@sadmax) यांच्याकडून Unsplash वरून
|
||||
|
||||
|
|
@ -98,13 +98,13 @@ AGI बद्दल बोलताना आपल्याला काही
|
|||
|
||||
> | ML बद्दल काय? | |
|
||||
> |--------------|-----------|
|
||||
> | संगणकाला काही डेटा आधारित समस्या सोडवण्यासाठी शिकवण्यावर आधारित कृत्रिम बुद्धिमत्तेचा भाग **मशीन लर्निंग** म्हणून ओळखला जातो. आम्ही या अभ्यासक्रमात पारंपरिक मशीन लर्निंगचा विचार करणार नाही - आम्ही तुम्हाला स्वतंत्र [Machine Learning for Beginners](http://aka.ms/ml-beginners) अभ्यासक्रमाकडे संदर्भित करतो. |  |
|
||||
> | संगणकाला काही डेटा आधारित समस्या सोडवण्यासाठी शिकवण्यावर आधारित कृत्रिम बुद्धिमत्तेचा भाग **मशीन लर्निंग** म्हणून ओळखला जातो. आम्ही या अभ्यासक्रमात पारंपरिक मशीन लर्निंगचा विचार करणार नाही - आम्ही तुम्हाला स्वतंत्र [Machine Learning for Beginners](http://aka.ms/ml-beginners) अभ्यासक्रमाकडे संदर्भित करतो. |  |
|
||||
|
||||
## AI चा थोडक्यात इतिहास
|
||||
|
||||
कृत्रिम बुद्धिमत्ता ही एक शाखा म्हणून विसाव्या शतकाच्या मध्यात सुरू झाली. सुरुवातीला, प्रतीकात्मक तर्कसंगतता हा एक प्रचलित दृष्टिकोन होता आणि यामुळे काही महत्त्वाच्या यशस्वीतेसाठी, जसे की तज्ज्ञ प्रणाली - मर्यादित समस्या क्षेत्रांमध्ये तज्ज्ञ म्हणून कार्य करण्यास सक्षम संगणक प्रोग्राम्स. तथापि, लवकरच हे स्पष्ट झाले की अशा दृष्टिकोनाचा चांगला विस्तार होत नाही. तज्ज्ञाकडून ज्ञान काढणे, संगणकात सादर करणे आणि त्या ज्ञानाच्या अचूकतेची खात्री करणे हे एक अत्यंत जटिल कार्य आहे आणि अनेक प्रकरणांमध्ये व्यावहारिकदृष्ट्या खूप महाग आहे. यामुळे 1970 च्या दशकात तथाकथित [AI Winter](https://en.wikipedia.org/wiki/AI_winter) आले.
|
||||
|
||||
<img alt="AI चा थोडक्यात इतिहास" src="../../../../translated_images/history-of-ai.7e83efa70b537f5a0264357672b0884cf3a220fbafe35c65d70b2c3805f7bf5e.mr.png" width="70%"/>
|
||||
<img alt="AI चा थोडक्यात इतिहास" src="../../../../translated_images/history-of-ai.7e83efa70b537f5a.mr.png" width="70%"/>
|
||||
|
||||
> प्रतिमा [Dmitry Soshnikov](http://soshnikov.com) यांच्याकडून
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
"\n",
|
||||
"या नमुन्यात, आपण काही शारीरिक वैशिष्ट्यांवर आधारित प्राणी ओळखण्यासाठी एक साधी ज्ञान-आधारित प्रणाली अंमलात आणू. ही प्रणाली खालील AND-OR झाडाद्वारे दर्शविली जाऊ शकते (हे संपूर्ण झाडाचा एक भाग आहे, आपण सहजपणे आणखी काही नियम जोडू शकतो):\n",
|
||||
"\n",
|
||||
"\n"
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
-->
|
||||
# ज्ञानाचे प्रतिनिधित्व आणि तज्ज्ञ प्रणाली
|
||||
|
||||

|
||||

|
||||
|
||||
> [Tomomi Imura](https://twitter.com/girlie_mac) यांचे स्केच नोट
|
||||
|
||||
|
|
@ -41,7 +41,7 @@ Symbolic AI मधील एक महत्त्वाची संकल्
|
|||
|
||||
म्हणून, **ज्ञानाचे प्रतिनिधित्व** करण्याची समस्या म्हणजे संगणकाच्या आत डेटा स्वरूपात ज्ञानाचे प्रतिनिधित्व करण्याचा काही प्रभावी मार्ग शोधणे, जेणेकरून ते स्वयंचलितपणे वापरता येईल. याकडे एक स्पेक्ट्रम म्हणून पाहिले जाऊ शकते:
|
||||
|
||||

|
||||

|
||||
|
||||
> Image by [Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
|
|
@ -94,7 +94,7 @@ Block Syntax | Indent | | |
|
|||
|
||||
Symbolic AI च्या सुरुवातीच्या यशांपैकी एक म्हणजे **तज्ज्ञ प्रणाली** - संगणक प्रणाली जी मर्यादित समस्या क्षेत्रात तज्ज्ञ म्हणून कार्य करण्यासाठी डिझाइन केली गेली होती. त्या **ज्ञान बेस** वर आधारित होत्या, जे एका किंवा अधिक मानवी तज्ज्ञांकडून काढले गेले होते, आणि त्यामध्ये **तर्क इंजिन** होते जे त्यावर काही तर्कशक्ती अंमलात आणत होते.
|
||||
|
||||
 | 
|
||||
 | 
|
||||
---------------------------------------------|------------------------------------------------
|
||||
मानवी न्यूरल प्रणालीची साधी रचना | ज्ञान-आधारित प्रणालीची आर्किटेक्चर
|
||||
|
||||
|
|
@ -106,7 +106,7 @@ Symbolic AI च्या सुरुवातीच्या यशांपै
|
|||
|
||||
उदाहरण म्हणून, खालील तज्ज्ञ प्रणाली विचार करूया जी प्राण्याचे शारीरिक वैशिष्ट्यांवर आधारित निर्धारण करते:
|
||||
|
||||

|
||||

|
||||
|
||||
> Image by [Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
|
|
|
|||
|
|
@ -1255,7 +1255,7 @@
|
|||
"* कमी प्रशिक्षण नुकसान - मॉडेल प्रशिक्षण डेटा चांगल्या प्रकारे अंदाज करू शकते, कारण त्याच्याकडे पुरेशी अभिव्यक्ती क्षमता असते.\n",
|
||||
"* व्हॅलिडेशन नुकसान प्रशिक्षण नुकसानापेक्षा खूप जास्त असू शकते आणि प्रशिक्षणादरम्यान वाढू शकते - कारण मॉडेल \"प्रशिक्षण बिंदू\" लक्षात ठेवते आणि \"संपूर्ण चित्र\" गमावते.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"> या चित्रात, `x` प्रशिक्षण डेटा दर्शवतो, `o` - व्हॅलिडेशन डेटा. डावीकडे - रेखीय मॉडेल (एक-स्तरीय), ते डेटाच्या स्वरूपाचा चांगल्या प्रकारे अंदाज करते. उजवीकडे - ओव्हरफिटेड मॉडेल, मॉडेल प्रशिक्षण डेटा उत्तम प्रकारे अंदाज करते, पण इतर कोणत्याही डेटासह अर्थपूर्ण राहात नाही (व्हॅलिडेशन त्रुटी खूप जास्त आहे).\n"
|
||||
]
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
खालीलप्रमाणे 5 डॉट्स (ग्राफ्सवर `x` ने दर्शविलेले) अंदाज लावण्याच्या समस्येचा विचार करा:
|
||||
|
||||
 | 
|
||||
 | 
|
||||
-------------------------|--------------------------
|
||||
**रेखीय मॉडेल, 2 पॅरामिटर्स** | **नॉन-रेखीय मॉडेल, 7 पॅरामिटर्स**
|
||||
प्रशिक्षण त्रुटी = 5.3 | प्रशिक्षण त्रुटी = 0
|
||||
|
|
@ -79,7 +79,7 @@ CO_OP_TRANSLATOR_METADATA:
|
|||
|
||||
वरील ग्राफवरून आपण पाहू शकतो की, ओव्हरफिटिंग खूप कमी प्रशिक्षण त्रुटी आणि जास्त व्हॅलिडेशन त्रुटीने ओळखले जाऊ शकते. सामान्यतः प्रशिक्षणादरम्यान आपण पाहतो की प्रशिक्षण आणि व्हॅलिडेशन त्रुटी कमी होऊ लागतात, आणि नंतर काही टप्प्यावर व्हॅलिडेशन त्रुटी कमी होणे थांबवते आणि वाढू लागते. हे ओव्हरफिटिंगचे चिन्ह असेल, आणि यावेळी प्रशिक्षण थांबवावे (किंवा किमान मॉडेलचा स्नॅपशॉट घ्यावा) याचा संकेत असेल.
|
||||
|
||||

|
||||

|
||||
|
||||
## ओव्हरफिटिंग कसे टाळावे
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue