|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "1c2ec40cf55c98a028a359c27ef7e45a",
|
|
|
"translation_date": "2025-09-05T14:08:56+00:00",
|
|
|
"source_file": "6-NLP/1-Introduction-to-NLP/README.md",
|
|
|
"language_code": "sr"
|
|
|
}
|
|
|
-->
|
|
|
# Увод у обраду природног језика
|
|
|
|
|
|
Ова лекција покрива кратку историју и важне концепте *обраде природног језика*, подпоља *рачунарске лингвистике*.
|
|
|
|
|
|
## [Квиз пре предавања](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
|
|
## Увод
|
|
|
|
|
|
НЛП, како се често назива, је једна од најпознатијих области у којима је машинско учење примењено и коришћено у производном софтверу.
|
|
|
|
|
|
✅ Можете ли да се сетите софтвера који користите свакодневно, а који вероватно има уграђен НЛП? Шта је са вашим програмима за обраду текста или мобилним апликацијама које редовно користите?
|
|
|
|
|
|
Научићете о:
|
|
|
|
|
|
- **Идеји језика**. Како су језици развијени и која су главна подручја проучавања.
|
|
|
- **Дефиницији и концептима**. Такође ћете научити дефиниције и концепте о томе како рачунари обрађују текст, укључујући парсирање, граматику и идентификовање именица и глагола. У овој лекцији постоје неки задаци кодирања, а представљени су неколико важних концепата које ћете касније научити да кодирате у наредним лекцијама.
|
|
|
|
|
|
## Рачунарска лингвистика
|
|
|
|
|
|
Рачунарска лингвистика је област истраживања и развоја током многих деценија која проучава како рачунари могу да раде са језицима, па чак и да их разумеју, преводе и комуницирају. Обрада природног језика (НЛП) је сродна област која се фокусира на то како рачунари могу да обрађују 'природне', односно људске језике.
|
|
|
|
|
|
### Пример - диктирање на телефону
|
|
|
|
|
|
Ако сте икада диктирали текст на телефону уместо да га куцате или питали виртуелног асистента неко питање, ваш говор је претворен у текстуални облик, а затим обрађен или *парсиран* из језика који сте говорили. Детектоване кључне речи су затим обрађене у формат који телефон или асистент може да разуме и на основу њих делује.
|
|
|
|
|
|

|
|
|
> Право лингвистичко разумевање је тешко! Слика од [Jen Looper](https://twitter.com/jenlooper)
|
|
|
|
|
|
### Како је ова технологија омогућена?
|
|
|
|
|
|
Ово је могуће јер је неко написао компјутерски програм да то уради. Пре неколико деценија, неки писци научне фантастике су предвидели да ће људи углавном разговарати са својим рачунарима, а рачунари ће увек тачно разумети шта мисле. Нажалост, испоставило се да је то тежи проблем него што су многи замишљали, и иако је данас много боље разумљив проблем, постоје значајни изазови у постизању 'савршене' обраде природног језика када је у питању разумевање значења реченице. Ово је посебно тежак проблем када је у питању разумевање хумора или откривање емоција као што је сарказам у реченици.
|
|
|
|
|
|
У овом тренутку, можда се сећате школских часова где је наставник обрађивао делове граматике у реченици. У неким земљама, ученици уче граматику и лингвистику као посебан предмет, али у многима, ове теме су укључене као део учења језика: било вашег првог језика у основној школи (учење читања и писања) и можда другог језика у средњој школи. Не брините ако нисте стручњак за разликовање именица од глагола или прилога од придева!
|
|
|
|
|
|
Ако се борите са разликом између *простог садашњег времена* и *садашњег прогресивног времена*, нисте сами. Ово је изазовна ствар за многе људе, чак и за изворне говорнике језика. Добра вест је да су рачунари заиста добри у примени формалних правила, и научићете да пишете код који може *парсирати* реченицу једнако добро као човек. Већи изазов који ћете касније испитати је разумевање *значења* и *осећаја* реченице.
|
|
|
|
|
|
## Предуслови
|
|
|
|
|
|
За ову лекцију, главни предуслов је способност читања и разумевања језика ове лекције. Нема математичких проблема или једначина за решавање. Иако је оригинални аутор написао ову лекцију на енглеском, она је такође преведена на друге језике, тако да можете читати превод. Постоје примери где се користи више различитих језика (за поређење различитих граматичких правила различитих језика). Ови примери *нису* преведени, али је објашњавајући текст преведен, тако да би значење требало да буде јасно.
|
|
|
|
|
|
За задатке кодирања, користићете Python, а примери користе Python 3.8.
|
|
|
|
|
|
У овом делу, биће вам потребно и користићете:
|
|
|
|
|
|
- **Разумевање Python 3**. Разумевање програмског језика Python 3, ова лекција користи унос, петље, читање датотека, низове.
|
|
|
- **Visual Studio Code + екстензија**. Користићемо Visual Studio Code и његову Python екстензију. Такође можете користити Python IDE по вашем избору.
|
|
|
- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) је поједностављена библиотека за обраду текста за Python. Пратите упутства на TextBlob сајту да га инсталирате на свој систем (инсталирајте и корпусе, као што је приказано испод):
|
|
|
|
|
|
```bash
|
|
|
pip install -U textblob
|
|
|
python -m textblob.download_corpora
|
|
|
```
|
|
|
|
|
|
> 💡 Савет: Python можете покренути директно у VS Code окружењима. Погледајте [документацију](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) за више информација.
|
|
|
|
|
|
## Разговор са машинама
|
|
|
|
|
|
Историја покушаја да се рачунари натерају да разумеју људски језик сеже деценијама уназад, а један од најранијих научника који је разматрао обраду природног језика био је *Алан Тјуринг*.
|
|
|
|
|
|
### 'Тјурингов тест'
|
|
|
|
|
|
Када је Тјуринг истраживао *вештачку интелигенцију* 1950-их, разматрао је да ли би се могао дати тест разговора човеку и рачунару (путем куцане преписке) где човек у разговору није сигуран да ли разговара са другим човеком или рачунаром.
|
|
|
|
|
|
Ако, након одређене дужине разговора, човек не може да утврди да ли су одговори од рачунара или не, да ли би се онда могло рећи да рачунар *мисли*?
|
|
|
|
|
|
### Инспирација - 'игра имитације'
|
|
|
|
|
|
Идеја за ово је дошла из друштвене игре зване *Игра имитације* где је испитивач сам у соби и има задатак да утврди који од двоје људи (у другој соби) су мушко и женско. Испитивач може слати белешке и мора покушати да смисли питања где писани одговори откривају пол мистериозне особе. Наравно, играчи у другој соби покушавају да збуне испитивача тако што одговарају на питања на начин који га доводи у заблуду, док истовремено дају изглед да одговарају искрено.
|
|
|
|
|
|
### Развој Елајзе
|
|
|
|
|
|
1960-их, научник са МИТ-а по имену *Џозеф Вајзенбаум* развио је [*Елајзу*](https://wikipedia.org/wiki/ELIZA), компјутерског 'терапеута' који би постављао питања човеку и давао изглед да разуме његове одговоре. Међутим, иако је Елајза могла да парсира реченицу и идентификује одређене граматичке конструкције и кључне речи како би дала разумни одговор, није се могло рећи да *разуме* реченицу. Ако би Елајзи била представљена реченица у формату "**Ја сам** <u>тужан</u>", могла би да преуреди и замени речи у реченици да формира одговор "Колико дуго сте **ви били** <u>тужни</u>".
|
|
|
|
|
|
Ово је давало утисак да Елајза разуме изјаву и поставља пратеће питање, док је у стварности мењала време и додавала неке речи. Ако Елајза није могла да идентификује кључну реч за коју има одговор, уместо тога би дала насумичан одговор који би могао бити применљив на многе различите изјаве. Елајза се могла лако преварити, на пример ако би корисник написао "**Ти си** <u>бицикл</u>", могла би да одговори са "Колико дуго сам **ја био** <u>бицикл</u>?", уместо разумнијег одговора.
|
|
|
|
|
|
[](https://youtu.be/RMK9AphfLco "Разговор са Елајзом")
|
|
|
|
|
|
> 🎥 Кликните на слику изнад за видео о оригиналном Елајза програму
|
|
|
|
|
|
> Напомена: Можете прочитати оригинални опис [Елајзе](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) објављен 1966. ако имате ACM налог. Алтернативно, прочитајте о Елајзи на [википедији](https://wikipedia.org/wiki/ELIZA)
|
|
|
|
|
|
## Вежба - кодирање основног конверзационог бота
|
|
|
|
|
|
Конверзациони бот, као Елајза, је програм који изазива унос корисника и изгледа да разуме и одговара интелигентно. За разлику од Елајзе, наш бот неће имати неколико правила која му дају изглед интелигентног разговора. Уместо тога, наш бот ће имати само једну способност, да настави разговор са насумичним одговорима који би могли функционисати у готово сваком тривијалном разговору.
|
|
|
|
|
|
### План
|
|
|
|
|
|
Ваши кораци при изради конверзационог бота:
|
|
|
|
|
|
1. Испишите упутства која саветују корисника како да комуницира са ботом
|
|
|
2. Покрените петљу
|
|
|
1. Прихватите унос корисника
|
|
|
2. Ако корисник затражи излаз, изађите
|
|
|
3. Обрадите унос корисника и одредите одговор (у овом случају, одговор је насумичан избор из листе могућих општих одговора)
|
|
|
4. Испишите одговор
|
|
|
3. Вратите се на корак 2
|
|
|
|
|
|
### Израда бота
|
|
|
|
|
|
Хајде да следеће направимо бота. Почећемо дефинисањем неких фраза.
|
|
|
|
|
|
1. Направите овог бота сами у Python-у са следећим насумичним одговорима:
|
|
|
|
|
|
```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?"]
|
|
|
```
|
|
|
|
|
|
Ево неког примерног излаза који ће вас водити (унос корисника је на линијама које почињу са `>`):
|
|
|
|
|
|
```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!
|
|
|
```
|
|
|
|
|
|
Једно могуће решење задатка је [овде](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py)
|
|
|
|
|
|
✅ Зауставите се и размислите
|
|
|
|
|
|
1. Да ли мислите да би насумични одговори 'преварили' некога да помисли да бот заиста разуме њих?
|
|
|
2. Које карактеристике би бот требало да има да би био ефикаснији?
|
|
|
3. Ако би бот заиста могао да 'разуме' значење реченице, да ли би морао да 'памти' значење претходних реченица у разговору?
|
|
|
|
|
|
---
|
|
|
|
|
|
## 🚀Изазов
|
|
|
|
|
|
Изаберите један од елемената "зауставите се и размислите" изнад и покушајте да га имплементирате у коду или напишите решење на папиру користећи псеудокод.
|
|
|
|
|
|
У следећој лекцији, научићете о бројним другим приступима парсирању природног језика и машинском учењу.
|
|
|
|
|
|
## [Квиз после предавања](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
|
|
## Преглед и самостално учење
|
|
|
|
|
|
Погледајте референце испод као могућности за даље читање.
|
|
|
|
|
|
### Референце
|
|
|
|
|
|
1. Шуберт, Ленхарт, "Рачунарска лингвистика", *Станфордска енциклопедија филозофије* (Пролећно издање 2020), Едвард Н. Залта (ур.), URL = <https://plato.stanford.edu/archives/spr2020/entries/computational-linguistics/>.
|
|
|
2. Принстон универзитет "О WordNet-у." [WordNet](https://wordnet.princeton.edu/). Принстон универзитет. 2010.
|
|
|
|
|
|
## Задатак
|
|
|
|
|
|
[Претражите бота](assignment.md)
|
|
|
|
|
|
---
|
|
|
|
|
|
**Одрицање од одговорности**:
|
|
|
Овај документ је преведен коришћењем услуге за превођење помоћу вештачке интелигенције [Co-op Translator](https://github.com/Azure/co-op-translator). Иако тежимо тачности, молимо вас да имате у виду да аутоматизовани преводи могу садржати грешке или нетачности. Оригинални документ на изворном језику треба сматрати ауторитативним извором. За критичне информације препоручује се професионални превод од стране људи. Не сносимо одговорност за било каква неспоразумевања или погрешна тумачења која могу произаћи из коришћења овог превода. |