You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
24 KiB
179 lines
24 KiB
<!--
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
{
|
|
"original_hash": "1c2ec40cf55c98a028a359c27ef7e45a",
|
|
"translation_date": "2025-09-05T22:20:49+00:00",
|
|
"source_file": "6-NLP/1-Introduction-to-NLP/README.md",
|
|
"language_code": "th"
|
|
}
|
|
-->
|
|
# บทนำสู่การประมวลผลภาษาธรรมชาติ
|
|
|
|
บทเรียนนี้ครอบคลุมประวัติย่อและแนวคิดสำคัญของ *การประมวลผลภาษาธรรมชาติ* ซึ่งเป็นสาขาย่อยของ *ภาษาศาสตร์เชิงคำนวณ*
|
|
|
|
## [แบบทดสอบก่อนเรียน](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 คุณสามารถใช้ IDE Python ที่คุณเลือกได้เช่นกัน
|
|
- **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) สำหรับข้อมูลเพิ่มเติม
|
|
|
|
## การพูดคุยกับเครื่องจักร
|
|
|
|
ประวัติศาสตร์ของการพยายามทำให้คอมพิวเตอร์เข้าใจภาษามนุษย์มีมานานหลายทศวรรษ และหนึ่งในนักวิทยาศาสตร์ยุคแรกที่พิจารณาการประมวลผลภาษาธรรมชาติคือ *Alan Turing*
|
|
|
|
### การทดสอบของ Turing
|
|
|
|
เมื่อ Turing กำลังวิจัย *ปัญญาประดิษฐ์* ในปี 1950 เขาได้พิจารณาว่าการทดสอบการสนทนาอาจถูกมอบให้กับมนุษย์และคอมพิวเตอร์ (ผ่านการสนทนาแบบพิมพ์) โดยที่มนุษย์ในบทสนทนาไม่แน่ใจว่ากำลังสนทนากับมนุษย์อีกคนหรือคอมพิวเตอร์
|
|
|
|
หากหลังจากการสนทนาในระยะเวลาหนึ่ง มนุษย์ไม่สามารถระบุได้ว่าคำตอบมาจากคอมพิวเตอร์หรือไม่ คอมพิวเตอร์นั้นจะถือว่า *คิด* ได้หรือไม่?
|
|
|
|
### แรงบันดาลใจ - 'เกมเลียนแบบ'
|
|
|
|
แนวคิดนี้มาจากเกมปาร์ตี้ที่เรียกว่า *เกมเลียนแบบ* ซึ่งผู้สอบสวนอยู่คนเดียวในห้องและมีหน้าที่กำหนดว่าคนสองคน (ในอีกห้องหนึ่ง) เป็นชายและหญิงตามลำดับ ผู้สอบสวนสามารถส่งโน้ตและต้องพยายามคิดคำถามที่คำตอบที่เขียนเผยให้เห็นเพศของบุคคลลึกลับ แน่นอนว่าผู้เล่นในอีกห้องหนึ่งพยายามหลอกผู้สอบสวนโดยตอบคำถามในลักษณะที่ทำให้เข้าใจผิดหรือสับสน ในขณะเดียวกันก็ให้ความรู้สึกเหมือนตอบอย่างตรงไปตรงมา
|
|
|
|
### การพัฒนา Eliza
|
|
|
|
ในปี 1960 นักวิทยาศาสตร์ MIT ชื่อ *Joseph Weizenbaum* ได้พัฒนา [*Eliza*](https://wikipedia.org/wiki/ELIZA) ซึ่งเป็น 'นักบำบัด' คอมพิวเตอร์ที่ถามคำถามมนุษย์และให้ความรู้สึกว่าเข้าใจคำตอบ อย่างไรก็ตาม แม้ว่า Eliza จะสามารถวิเคราะห์ประโยคและระบุโครงสร้างไวยากรณ์และคำสำคัญบางคำเพื่อให้คำตอบที่สมเหตุสมผล แต่ก็ไม่สามารถกล่าวได้ว่า *เข้าใจ* ประโยค หาก Eliza ถูกนำเสนอด้วยประโยคในรูปแบบ "**ฉันรู้สึก** <u>เศร้า</u>" มันอาจจัดเรียงและแทนที่คำในประโยคเพื่อสร้างคำตอบ "คุณรู้สึก <u>เศร้า</u> มานานแค่ไหน"
|
|
|
|
สิ่งนี้ทำให้ดูเหมือนว่า Eliza เข้าใจคำกล่าวและกำลังถามคำถามต่อเนื่อง ในขณะที่ในความเป็นจริง มันกำลังเปลี่ยนกาลเวลาและเพิ่มคำบางคำ หาก Eliza ไม่สามารถระบุคำสำคัญที่มีคำตอบได้ มันจะให้คำตอบแบบสุ่มที่สามารถใช้ได้กับคำกล่าวต่าง ๆ มากมาย Eliza สามารถถูกหลอกได้ง่าย เช่น หากผู้ใช้เขียน "**คุณเป็น** <u>จักรยาน</u>" มันอาจตอบว่า "ฉันเป็น <u>จักรยาน</u> มานานแค่ไหน?" แทนที่จะตอบอย่างมีเหตุผลมากกว่า
|
|
|
|
[](https://youtu.be/RMK9AphfLco "Chatting with Eliza")
|
|
|
|
> 🎥 คลิกที่ภาพด้านบนเพื่อดูวิดีโอเกี่ยวกับโปรแกรม ELIZA ดั้งเดิม
|
|
|
|
> หมายเหตุ: คุณสามารถอ่านคำอธิบายต้นฉบับของ [Eliza](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 หรืออ่านเกี่ยวกับ Eliza บน [wikipedia](https://wikipedia.org/wiki/ELIZA)
|
|
|
|
## แบบฝึกหัด - การเขียนโค้ดบอทสนทนาเบื้องต้น
|
|
|
|
บอทสนทนา เช่น Eliza เป็นโปรแกรมที่ดึงข้อมูลจากผู้ใช้และดูเหมือนจะเข้าใจและตอบสนองอย่างชาญฉลาด ต่างจาก 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. หากบอทสามารถ 'เข้าใจ' ความหมายของประโยคได้จริง ๆ มันจะต้อง 'จดจำ' ความหมายของประโยคก่อนหน้าในบทสนทนาด้วยหรือไม่?
|
|
|
|
---
|
|
|
|
## 🚀ความท้าทาย
|
|
|
|
เลือกหนึ่งในองค์ประกอบ "หยุดและพิจารณา" ด้านบนและลองนำไปใช้ในโค้ดหรือเขียนวิธีแก้ปัญหาบนกระดาษโดยใช้ pseudocode
|
|
|
|
ในบทเรียนถัดไป คุณจะได้เรียนรู้เกี่ยวกับวิธีการอื่น ๆ ในการวิเคราะห์ภาษาธรรมชาติและการเรียนรู้ของเครื่อง
|
|
|
|
## [แบบทดสอบหลังเรียน](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
## ทบทวนและศึกษาด้วยตนเอง
|
|
|
|
ดูข้อมูลอ้างอิงด้านล่างเพื่อโอกาสในการอ่านเพิ่มเติม
|
|
|
|
### ข้อมูลอ้างอิง
|
|
|
|
1. Schubert, Lenhart, "Computational Linguistics", *The Stanford Encyclopedia of Philosophy* (Spring 2020 Edition), Edward N. Zalta (ed.), URL = <https://plato.stanford.edu/archives/spr2020/entries/computational-linguistics/>.
|
|
2. Princeton University "About WordNet." [WordNet](https://wordnet.princeton.edu/). Princeton University. 2010.
|
|
|
|
## งานที่ได้รับมอบหมาย
|
|
|
|
[ค้นหาบอท](assignment.md)
|
|
|
|
---
|
|
|
|
**ข้อจำกัดความรับผิดชอบ**:
|
|
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI [Co-op Translator](https://github.com/Azure/co-op-translator) แม้ว่าเราจะพยายามให้การแปลมีความถูกต้อง แต่โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราจะไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความที่ผิดพลาดซึ่งเกิดจากการใช้การแปลนี้ |