# Utangulizi wa usindikaji wa lugha asilia
Somo hili linashughulikia historia fupi na dhana muhimu za *usindikaji wa lugha asilia*, tawi la *isimu ya kompyuta*.
## [Jaribio kabla ya somo](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/31/)
## Utangulizi
NLP, kama inavyojulikana, ni moja ya maeneo yanayojulikana zaidi ambapo kujifunza kwa mashine kumetumika na kutumiwa katika programu za uzalishaji.
✅ Je, unaweza kufikiria programu unayotumia kila siku ambayo labda ina baadhi ya NLP iliyojumuishwa? Je, kuhusu programu zako za kuandika au programu za simu unazotumia mara kwa mara?
Utaweza kujifunza kuhusu:
- **Wazo la lugha**. Jinsi lugha zilivyoendelea na maeneo makubwa ya utafiti yamekuwa nini.
- **Ufafanuzi na dhana**. Pia utajifunza ufafanuzi na dhana kuhusu jinsi kompyuta zinavyosindika maandishi, ikiwa ni pamoja na uchambuzi, sarufi, na kutambua nomino na vitenzi. Kuna baadhi ya kazi za programu katika somo hili, na dhana kadhaa muhimu zinaanzishwa ambazo utajifunza kuandika baadaye katika masomo yafuatayo.
## Isimu ya kompyuta
Isimu ya kompyuta ni eneo la utafiti na maendeleo kwa miongo mingi ambalo linachunguza jinsi kompyuta zinaweza kufanya kazi na hata kuelewa, kutafsiri, na kuwasiliana na lugha. Usindikaji wa lugha asilia (NLP) ni uwanja unaohusiana unaozingatia jinsi kompyuta zinaweza kusindika lugha za 'asili', au lugha za kibinadamu.
### Mfano - uchapaji kwa simu
Ikiwa umewahi kuchapisha kwa simu yako badala ya kuandika au kumuuliza msaidizi wa virtual swali, hotuba yako ilibadilishwa kuwa maandishi na kisha kusindika au *kuchambuliwa* kutoka kwa lugha uliyoongea. Maneno muhimu yaliyogunduliwa kisha yalisindika kuwa muundo ambao simu au msaidizi angeweza kuelewa na kutekeleza.

> Ufahamu wa lugha halisi ni ngumu! Picha na [Jen Looper](https://twitter.com/jenlooper)
### Teknolojia hii inafanyikaje?
Hii inawezekana kwa sababu mtu aliandika programu ya kompyuta kufanya hivi. Miongo michache iliyopita, baadhi ya waandishi wa hadithi za sayansi walitabiri kuwa watu wangezungumza zaidi na kompyuta zao, na kompyuta zingeelewa kila mara walichomaanisha. Kwa bahati mbaya, iligeuka kuwa tatizo gumu zaidi kuliko wengi walivyofikiria, na ingawa ni tatizo linaloeleweka vizuri zaidi leo, kuna changamoto kubwa katika kufanikisha usindikaji wa lugha asilia 'mkamilifu' linapokuja suala la kuelewa maana ya sentensi. Hili ni tatizo gumu hasa linapokuja suala la kuelewa ucheshi au kugundua hisia kama vile kejeli katika sentensi.
Kwa wakati huu, unaweza kukumbuka madarasa ya shule ambapo mwalimu alifundisha sehemu za sarufi katika sentensi. Katika baadhi ya nchi, wanafunzi hufundishwa sarufi na isimu kama somo maalum, lakini katika nyingi, mada hizi hujumuishwa kama sehemu ya kujifunza lugha: ama lugha yako ya kwanza katika shule ya msingi (kujifunza kusoma na kuandika) na labda lugha ya pili baada ya msingi, au shule ya upili. Usijali ikiwa wewe si mtaalamu wa kutofautisha nomino na vitenzi au viambishi na vivumishi!
Ikiwa unapata shida na tofauti kati ya *wakati uliopo rahisi* na *wakati uliopo endelevu*, hauko peke yako. Hii ni jambo gumu kwa watu wengi, hata wasemaji wa lugha ya asili. Habari njema ni kwamba kompyuta ni nzuri sana katika kutumia sheria rasmi, na utajifunza kuandika programu ambayo inaweza *kuchambua* sentensi kama vile binadamu. Changamoto kubwa zaidi utakayochunguza baadaye ni kuelewa *maana*, na *hisia*, ya sentensi.
## Mahitaji ya awali
Kwa somo hili, hitaji kuu la awali ni kuwa na uwezo wa kusoma na kuelewa lugha ya somo hili. Hakuna matatizo ya hesabu au usawa wa kutatua. Wakati mwandishi asili aliandika somo hili kwa Kiingereza, pia limetafsiriwa katika lugha zingine, kwa hivyo unaweza kuwa unasoma tafsiri. Kuna mifano ambapo lugha kadhaa tofauti zinatumika (kulinganisha sheria za sarufi tofauti za lugha tofauti). Hizi *hazijatafsiriwa*, lakini maandishi ya maelezo yametafsiriwa, kwa hivyo maana inapaswa kuwa wazi.
Kwa kazi za programu, utatumia Python na mifano inatumia Python 3.8.
Katika sehemu hii, utahitaji, na kutumia:
- **Uelewa wa Python 3**. Uelewa wa lugha ya programu katika Python 3, somo hili linatumia pembejeo, loop, kusoma faili, arrays.
- **Visual Studio Code + kiendelezi**. Tutatumia Visual Studio Code na kiendelezi chake cha Python. Unaweza pia kutumia IDE ya Python unayopenda.
- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) ni maktaba rahisi ya usindikaji wa maandishi kwa Python. Fuata maelekezo kwenye tovuti ya TextBlob ili kuisakinisha kwenye mfumo wako (sakinisha corpora pia, kama inavyoonyeshwa hapa chini):
```bash
pip install -U textblob
python -m textblob.download_corpora
```
> 💡 Kidokezo: Unaweza kuendesha Python moja kwa moja katika mazingira ya VS Code. Angalia [docs](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) kwa habari zaidi.
## Kuzungumza na mashine
Historia ya kujaribu kufanya kompyuta kuelewa lugha ya kibinadamu inarudi nyuma miongo kadhaa, na mmoja wa wanasayansi wa kwanza kuzingatia usindikaji wa lugha asilia alikuwa *Alan Turing*.
### Jaribio la 'Turing'
Wakati Turing alikuwa akifanya utafiti juu ya *akili bandia* katika miaka ya 1950, alifikiria ikiwa jaribio la mazungumzo linaweza kufanywa kwa binadamu na kompyuta (kupitia mawasiliano yaliyoandikwa) ambapo binadamu katika mazungumzo hakuwa na uhakika ikiwa alikuwa akizungumza na binadamu mwingine au kompyuta.
Ikiwa, baada ya muda fulani wa mazungumzo, binadamu hangeweza kuamua kuwa majibu yalitoka kwa kompyuta au la, basi je, kompyuta ingeweza kusemwa kuwa *inawaza*?
### Msukumo - 'mchezo wa kuiga'
Wazo hili lilitokana na mchezo wa karamu uitwao *Mchezo wa Kuiga* ambapo mhojiwa yuko peke yake katika chumba na ana jukumu la kuamua ni nani kati ya watu wawili (katika chumba kingine) ni mwanaume na mwanamke mtawalia. Mhojiwa anaweza kutuma maelezo, na lazima ajaribu kufikiria maswali ambapo majibu yaliyoandikwa yanafichua jinsia ya mtu wa fumbo. Bila shaka, wachezaji katika chumba kingine wanajaribu kumdanganya mhojiwa kwa kujibu maswali kwa njia ya kupotosha au kuchanganya mhojiwa, huku pia wakijaribu kuonekana kama wanajibu kwa uaminifu.
### Kuendeleza Eliza
Katika miaka ya 1960 mwanasayansi wa MIT aitwaye *Joseph Weizenbaum* aliendeleza [*Eliza*](https://wikipedia.org/wiki/ELIZA), 'mtaalamu' wa kompyuta ambaye angeuliza maswali kwa binadamu na kuonekana kama anaelewa majibu yao. Hata hivyo, ingawa Eliza angeweza kuchambua sentensi na kutambua baadhi ya miundo ya kisarufi na maneno muhimu ili kutoa jibu linalofaa, haingeweza kusemwa kuwa *inaelewa* sentensi. Ikiwa Eliza ingepewa sentensi inayofuata muundo "**Mimi ni** huzuni" inaweza kupanga upya na kubadilisha maneno katika sentensi ili kuunda jibu "Umekuwa **wewe ni** huzuni kwa muda gani".
Hii ilitoa picha kwamba Eliza aliuelewa kauli hiyo na alikuwa akiuliza swali la ufuatiliaji, wakati kwa kweli, ilikuwa ikibadilisha wakati na kuongeza baadhi ya maneno. Ikiwa Eliza haingeweza kutambua neno kuu ambalo lilikuwa na jibu lake, ingetoa jibu la nasibu ambalo lingeweza kutumika kwa kauli nyingi tofauti. Eliza angeweza kudanganywa kwa urahisi, kwa mfano ikiwa mtumiaji aliandika "**Wewe ni** baiskeli" inaweza kujibu "Umekuwa **mimi ni** baiskeli kwa muda gani?", badala ya jibu lenye busara zaidi.
[](https://youtu.be/RMK9AphfLco "Kuzungumza na Eliza")
> 🎥 Bofya picha hapo juu kwa video kuhusu programu asili ya ELIZA
> Kumbuka: Unaweza kusoma maelezo asili ya [Eliza](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) yaliyochapishwa mwaka 1966 ikiwa una akaunti ya ACM. Vinginevyo, soma kuhusu Eliza kwenye [wikipedia](https://wikipedia.org/wiki/ELIZA)
## Zoezi - kuandika bot ya mazungumzo ya msingi
Bot ya mazungumzo, kama Eliza, ni programu inayochochea pembejeo za mtumiaji na kuonekana kuelewa na kujibu kwa busara. Tofauti na Eliza, bot yetu haitakuwa na sheria kadhaa zinazompa mwonekano wa kuwa na mazungumzo yenye akili. Badala yake, bot yetu itakuwa na uwezo mmoja tu, kuendelea na mazungumzo na majibu ya nasibu ambayo yanaweza kufanya kazi karibu katika mazungumzo yoyote ya kijinga.
### Mpango
Hatua zako unapojenga bot ya mazungumzo:
1. Chapisha maagizo yanayomshauri mtumiaji jinsi ya kuingiliana na bot
2. Anzisha kitanzi
1. Kubali pembejeo za mtumiaji
2. Ikiwa mtumiaji ameomba kutoka, basi toka
3. Sindika pembejeo za mtumiaji na uamue jibu (katika kesi hii, jibu ni chaguo la nasibu kutoka kwenye orodha ya majibu yanayowezekana)
4. Chapisha jibu
3. rudi kwenye hatua ya 2
### Kujenga bot
Wacha tuunde bot sasa. Tutaanza kwa kufafanua baadhi ya misemo.
1. Unda bot hii mwenyewe kwa Python na majibu ya nasibu yafuatayo:
```python
random_responses = ["That is quite interesting, please tell me more.",
"I see. Do go on.",
"Why do you say that?",
"Funny weather we've been having, isn't it?",
"Let's change the subject.",
"Did you catch the game last night?"]
```
Hapa kuna baadhi ya matokeo ya sampuli ya kukuongoza (pembejeo za mtumiaji ziko kwenye mistari inayoanza na `>`):
```output
Hello, I am Marvin, the simple robot.
You can end this conversation at any time by typing 'bye'
After typing each answer, press 'enter'
How are you today?
> I am good thanks
That is quite interesting, please tell me more.
> today I went for a walk
Did you catch the game last night?
> I did, but my team lost
Funny weather we've been having, isn't it?
> yes but I hope next week is better
Let's change the subject.
> ok, lets talk about music
Why do you say that?
> because I like music!
Why do you say that?
> bye
It was nice talking to you, goodbye!
```
Suluhisho moja linalowezekana kwa kazi ni [hapa](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py)
✅ Simama na fikiria
1. Je, unafikiri majibu ya nasibu yangemdanganya mtu kufikiri kwamba bot kwa kweli ilimuelewa?
2. Ni vipengele gani bot ingehitaji kuwa bora zaidi?
3. Ikiwa bot ingeweza kweli 'kuelewa' maana ya sentensi, je, ingehitaji 'kumbuka' maana ya sentensi za awali katika mazungumzo pia?
---
## 🚀Changamoto
Chagua mojawapo ya vipengele vya "simama na fikiria" hapo juu na ujaribu kuvitumia kwa programu au andika suluhisho kwenye karatasi kwa kutumia pseudocode.
Katika somo lijalo, utajifunza kuhusu mbinu kadhaa zingine za kuchambua lugha asilia na kujifunza kwa mashine.
## [Jaribio baada ya somo](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/32/)
## Mapitio & Kujisomea
Angalia marejeo hapa chini kama fursa za kusoma zaidi.
### Marejeo
1. Schubert, Lenhart, "Isimu ya Kompyuta", *The Stanford Encyclopedia of Philosophy* (Toleo la Spring 2020), Edward N. Zalta (ed.), URL = .
2. Chuo Kikuu cha Princeton "Kuhusu WordNet." [WordNet](https://wordnet.princeton.edu/). Chuo Kikuu cha Princeton. 2010.
## Kazi
[Tafuta bot](assignment.md)
**Kanusho**:
Hati hii imetafsiriwa kwa kutumia huduma za tafsiri za AI zinazotumia mashine. Ingawa tunajitahidi kwa usahihi, tafadhali fahamu kuwa tafsiri za kiotomatiki zinaweza kuwa na makosa au kutokuwa sahihi. Hati ya asili katika lugha yake ya asili inapaswa kuzingatiwa kuwa chanzo cha mamlaka. Kwa taarifa muhimu, inashauriwa kupata tafsiri ya kitaalamu ya kibinadamu. Hatutawajibika kwa maelewano au tafsiri zisizo sahihi zinazotokana na matumizi ya tafsiri hii.