# প্রাকৃতিক ভাষা প্রক্রিয়াকরণে পরিচিতি
এই পাঠে *প্রাকৃতিক ভাষা প্রক্রিয়াকরণ*, যা *কম্পিউটেশনাল ভাষাবিজ্ঞান* এর একটি শাখা, এর সংক্ষিপ্ত ইতিহাস এবং গুরুত্বপূর্ণ ধারণাগুলি আলোচনা করা হয়েছে।
## [পাঠের পূর্বে কুইজ](https://ff-quizzes.netlify.app/en/ml/)
## পরিচিতি
NLP, যা সাধারণত পরিচিত, মেশিন লার্নিংয়ের অন্যতম পরিচিত ক্ষেত্র যেখানে এটি প্রোডাকশন সফটওয়্যারে প্রয়োগ এবং ব্যবহার করা হয়েছে।
✅ আপনি কি এমন কোনো সফটওয়্যারের কথা ভাবতে পারেন যা আপনি প্রতিদিন ব্যবহার করেন এবং যেখানে সম্ভবত কিছু NLP অন্তর্ভুক্ত রয়েছে? আপনার শব্দ প্রক্রিয়াকরণ প্রোগ্রাম বা মোবাইল অ্যাপ্লিকেশনগুলি সম্পর্কে কী যা আপনি নিয়মিত ব্যবহার করেন?
আপনি শিখবেন:
- **ভাষার ধারণা**। ভাষা কীভাবে বিকশিত হয়েছে এবং প্রধান অধ্যয়নের ক্ষেত্রগুলি কী ছিল।
- **সংজ্ঞা এবং ধারণা**। আপনি শিখবেন কীভাবে কম্পিউটার টেক্সট প্রক্রিয়া করে, যার মধ্যে রয়েছে পার্সিং, ব্যাকরণ, এবং বিশেষ্য ও ক্রিয়াপদ চিহ্নিত করা। এই পাঠে কিছু কোডিং কাজ রয়েছে এবং বেশ কয়েকটি গুরুত্বপূর্ণ ধারণা উপস্থাপন করা হয়েছে যা আপনি পরবর্তী পাঠে কোড করতে শিখবেন।
## কম্পিউটেশনাল ভাষাবিজ্ঞান
কম্পিউটেশনাল ভাষাবিজ্ঞান কয়েক দশক ধরে গবেষণা এবং উন্নয়নের একটি ক্ষেত্র যা অধ্যয়ন করে কীভাবে কম্পিউটার ভাষার সাথে কাজ করতে পারে, এমনকি বুঝতে, অনুবাদ করতে এবং ভাষার সাথে যোগাযোগ করতে পারে। প্রাকৃতিক ভাষা প্রক্রিয়াকরণ (NLP) একটি সম্পর্কিত ক্ষেত্র যা কম্পিউটার কীভাবে 'প্রাকৃতিক', বা মানব, ভাষা প্রক্রিয়া করতে পারে তার উপর ফোকাস করে।
### উদাহরণ - ফোনে ডিক্টেশন
আপনি যদি কখনো টাইপ করার পরিবর্তে আপনার ফোনে কথা বলে থাকেন বা ভার্চুয়াল অ্যাসিস্ট্যান্টকে কোনো প্রশ্ন জিজ্ঞাসা করে থাকেন, তাহলে আপনার বক্তব্যকে টেক্সট ফর্মে রূপান্তরিত করা হয়েছে এবং তারপর প্রক্রিয়া বা *পার্স* করা হয়েছে আপনার বলা ভাষা থেকে। সনাক্ত করা কীওয়ার্ডগুলি তখন এমন একটি ফরম্যাটে প্রক্রিয়া করা হয়েছিল যা ফোন বা অ্যাসিস্ট্যান্ট বুঝতে এবং কার্যকর করতে পারে।

> আসল ভাষাগত বোঝাপড়া কঠিন! ছবি: [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 সাইটের নির্দেশাবলী অনুসরণ করুন (নিচে দেখানো হিসাবে corpora ইনস্টল করুন):
```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) দেখুন।
## মেশিনের সাথে কথা বলা
মানব ভাষা বুঝতে কম্পিউটার তৈরি করার ইতিহাস কয়েক দশক পিছিয়ে যায়, এবং প্রাকৃতিক ভাষা প্রক্রিয়াকরণ বিবেচনা করা প্রথম বিজ্ঞানীদের একজন ছিলেন *অ্যালান টুরিং*।
### 'টুরিং টেস্ট'
যখন টুরিং ১৯৫০-এর দশকে *কৃত্রিম বুদ্ধিমত্তা* নিয়ে গবেষণা করছিলেন, তখন তিনি বিবেচনা করেছিলেন যে একটি কথোপকথনমূলক পরীক্ষা একজন মানুষ এবং কম্পিউটারের (টাইপ করা যোগাযোগের মাধ্যমে) দেওয়া যেতে পারে যেখানে কথোপকথনে থাকা মানুষটি নিশ্চিত নয় যে তারা অন্য একজন মানুষের সাথে কথা বলছে নাকি একটি কম্পিউটারের সাথে।
যদি একটি নির্দিষ্ট সময়ের কথোপকথনের পরে, মানুষটি নির্ধারণ করতে না পারে যে উত্তরগুলি একটি কম্পিউটার থেকে এসেছে কিনা, তাহলে কি কম্পিউটারকে *চিন্তা করছে* বলা যেতে পারে?
### অনুপ্রেরণা - 'অনুকরণ খেলা'
এই ধারণাটি একটি পার্টি গেম *অনুকরণ খেলা* থেকে এসেছে যেখানে একজন জিজ্ঞাসাবাদকারী একটি ঘরে একা থাকে এবং তাকে নির্ধারণ করতে হয় যে অন্য ঘরে থাকা দুই ব্যক্তির মধ্যে কে পুরুষ এবং কে মহিলা। জিজ্ঞাসাবাদকারী নোট পাঠাতে পারে এবং এমন প্রশ্ন ভাবতে হবে যেখানে লিখিত উত্তরগুলি রহস্যময় ব্যক্তির লিঙ্গ প্রকাশ করে। অবশ্যই, অন্য ঘরে থাকা খেলোয়াড়রা জিজ্ঞাসাবাদকারীকে বিভ্রান্ত বা বিভ্রান্ত করার জন্য এমনভাবে প্রশ্নের উত্তর দেওয়ার চেষ্টা করে, একই সাথে সৎভাবে উত্তর দেওয়ার চেহারা দেয়।
### এলিজা তৈরি করা
১৯৬০-এর দশকে MIT-এর একজন বিজ্ঞানী *জোসেফ ওয়েইজেনবাউম* [*এলিজা*](https://wikipedia.org/wiki/ELIZA) নামে একটি কম্পিউটার 'থেরাপিস্ট' তৈরি করেছিলেন যা মানুষের কাছে প্রশ্ন করবে এবং তাদের উত্তর বুঝতে পারার চেহারা দেবে। তবে, এলিজা একটি বাক্য *পার্স* করতে এবং নির্দিষ্ট ব্যাকরণগত গঠন এবং কীওয়ার্ড চিহ্নিত করতে পারলেও একটি বাক্য *বুঝতে* পারে না। যদি এলিজাকে "**আমি** দুঃখিত" ফরম্যাটের একটি বাক্য উপস্থাপন করা হয়, এটি বাক্যটি পুনর্গঠন এবং শব্দগুলি প্রতিস্থাপন করে "কতদিন ধরে **আপনি** দুঃখিত" উত্তর তৈরি করতে পারে।
এটি এমন একটি চেহারা দেয় যে এলিজা বিবৃতিটি বুঝতে পেরেছে এবং একটি অনুসরণকারী প্রশ্ন করছে, যেখানে বাস্তবে এটি কাল পরিবর্তন করছে এবং কিছু শব্দ যোগ করছে। যদি এলিজা এমন একটি কীওয়ার্ড চিহ্নিত করতে না পারে যার জন্য তার একটি উত্তর রয়েছে, এটি পরিবর্তে একটি এলোমেলো উত্তর দেবে যা অনেক ভিন্ন বিবৃতির জন্য প্রযোজ্য হতে পারে। এলিজাকে সহজেই বিভ্রান্ত করা যেতে পারে, উদাহরণস্বরূপ যদি একজন ব্যবহারকারী "**আপনি** একটি সাইকেল" লিখেন, এটি "কতদিন ধরে **আমি** একটি সাইকেল?" উত্তর দিতে পারে, একটি আরও যুক্তিযুক্ত উত্তর দেওয়ার পরিবর্তে।
[](https://youtu.be/RMK9AphfLco "এলিজার সাথে কথা বলা")
> 🎥 উপরের ছবিতে ক্লিক করুন এলিজার মূল প্রোগ্রাম সম্পর্কে একটি ভিডিও দেখার জন্য
> নোট: আপনি যদি ACM অ্যাকাউন্ট থাকে তবে [এলিজার](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) মূল বিবরণটি ১৯৬৬ সালে প্রকাশিত পড়তে পারেন। বিকল্পভাবে, এলিজা সম্পর্কে [উইকিপিডিয়া](https://wikipedia.org/wiki/ELIZA) এ পড়ুন।
## অনুশীলন - একটি মৌলিক কথোপকথনমূলক বট কোডিং
একটি কথোপকথনমূলক বট, এলিজার মতো, একটি প্রোগ্রাম যা ব্যবহারকারীর ইনপুট গ্রহণ করে এবং বুদ্ধিমত্তার সাথে উত্তর দেওয়ার চেহারা দেয়। এলিজার মতো নয়, আমাদের বটের একমাত্র ক্ষমতা থাকবে, এলোমেলো উত্তর দিয়ে কথোপকথন চালিয়ে যাওয়া যা প্রায় যেকোনো তুচ্ছ কথোপকথনে কাজ করতে পারে।
### পরিকল্পনা
একটি কথোপকথনমূলক বট তৈরি করার সময় আপনার ধাপগুলি:
1. ব্যবহারকারীকে বটের সাথে কীভাবে যোগাযোগ করতে হবে তা পরামর্শ দেওয়ার জন্য নির্দেশাবলী প্রিন্ট করুন
2. একটি লুপ শুরু করুন
1. ব্যবহারকারীর ইনপুট গ্রহণ করুন
2. যদি ব্যবহারকারী প্রস্থান করতে চায়, তাহলে প্রস্থান করুন
3. ব্যবহারকারীর ইনপুট প্রক্রিয়া করুন এবং উত্তর নির্ধারণ করুন (এই ক্ষেত্রে, উত্তরটি সম্ভাব্য সাধারণ উত্তরগুলির একটি তালিকা থেকে এলোমেলোভাবে নির্বাচন করা হবে)
4. উত্তর প্রিন্ট করুন
3. ধাপ ২-এ ফিরে যান
### বট তৈরি করা
এখন বট তৈরি করা যাক। আমরা কিছু বাক্যাংশ সংজ্ঞায়িত করে শুরু করব।
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. শুবার্ট, লেনহার্ট, "কম্পিউটেশনাল ভাষাবিজ্ঞান", *দ্য স্ট্যানফোর্ড এনসাইক্লোপিডিয়া অফ ফিলোসফি* (স্প্রিং ২০২০ সংস্করণ), এডওয়ার্ড এন. জাল্টা (সম্পাদক), URL = .
2. প্রিন্সটন ইউনিভার্সিটি "ওয়ার্ডনেট সম্পর্কে।" [ওয়ার্ডনেট](https://wordnet.princeton.edu/)। প্রিন্সটন ইউনিভার্সিটি। ২০১০।
## অ্যাসাইনমেন্ট
[একটি বট অনুসন্ধান করুন](assignment.md)
---
**অস্বীকৃতি**:
এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসাধ্য সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না।