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.
ML-For-Beginners/translations/th/6-NLP/1-Introduction-to-NLP/README.md

24 KiB

บทนำสู่การประมวลผลภาษาธรรมชาติ

บทเรียนนี้ครอบคลุมประวัติย่อและแนวคิดสำคัญของ การประมวลผลภาษาธรรมชาติ ซึ่งเป็นสาขาย่อยของ ภาษาศาสตร์เชิงคำนวณ

แบบทดสอบก่อนเรียน

บทนำ

NLP หรือที่รู้จักกันทั่วไป เป็นหนึ่งในพื้นที่ที่มีชื่อเสียงที่สุดที่การเรียนรู้ของเครื่องถูกนำมาใช้และใช้งานในซอฟต์แวร์การผลิต

คุณสามารถนึกถึงซอฟต์แวร์ที่คุณใช้ทุกวันซึ่งอาจมี NLP ฝังอยู่ได้หรือไม่? เช่น โปรแกรมประมวลผลคำหรือแอปพลิเคชันมือถือที่คุณใช้เป็นประจำ?

คุณจะได้เรียนรู้เกี่ยวกับ:

  • แนวคิดของภาษา วิธีที่ภาษาพัฒนาและพื้นที่การศึกษาหลัก ๆ
  • คำจำกัดความและแนวคิด คุณจะได้เรียนรู้คำจำกัดความและแนวคิดเกี่ยวกับวิธีที่คอมพิวเตอร์ประมวลผลข้อความ รวมถึงการวิเคราะห์ไวยากรณ์และการระบุคำนามและคำกริยา บทเรียนนี้มีงานเขียนโค้ดบางส่วน และมีการแนะนำแนวคิดสำคัญหลายประการที่คุณจะได้เรียนรู้การเขียนโค้ดในบทเรียนถัดไป

ภาษาศาสตร์เชิงคำนวณ

ภาษาศาสตร์เชิงคำนวณเป็นพื้นที่การวิจัยและพัฒนาที่มีมานานหลายทศวรรษ ซึ่งศึกษาว่าคอมพิวเตอร์สามารถทำงานกับภาษา และแม้กระทั่งเข้าใจ แปล และสื่อสารกับภาษาได้อย่างไร การประมวลผลภาษาธรรมชาติ (NLP) เป็นสาขาที่เกี่ยวข้องซึ่งมุ่งเน้นไปที่วิธีที่คอมพิวเตอร์สามารถประมวลผลภาษา 'ธรรมชาติ' หรือภาษามนุษย์

ตัวอย่าง - การพิมพ์ด้วยเสียงในโทรศัพท์

หากคุณเคยพูดแทนการพิมพ์ในโทรศัพท์ หรือถามคำถามกับผู้ช่วยเสมือน คำพูดของคุณจะถูกแปลงเป็นข้อความและประมวลผลหรือ วิเคราะห์ จากภาษาที่คุณพูด คำสำคัญที่ตรวจพบจะถูกประมวลผลในรูปแบบที่โทรศัพท์หรือผู้ช่วยสามารถเข้าใจและดำเนินการได้

comprehension

การทำความเข้าใจภาษาจริงเป็นเรื่องยาก! ภาพโดย Jen Looper

เทคโนโลยีนี้เกิดขึ้นได้อย่างไร?

สิ่งนี้เกิดขึ้นได้เพราะมีคนเขียนโปรแกรมคอมพิวเตอร์เพื่อทำสิ่งนี้ หลายสิบปีก่อน นักเขียนนิยายวิทยาศาสตร์บางคนคาดการณ์ว่าผู้คนจะพูดกับคอมพิวเตอร์เป็นหลัก และคอมพิวเตอร์จะเข้าใจสิ่งที่พวกเขาหมายถึงอย่างสมบูรณ์แบบ อย่างไรก็ตาม ปัญหานี้กลับยากกว่าที่หลายคนจินตนาการไว้ และแม้ว่าปัจจุบันจะเข้าใจปัญหาได้ดีขึ้นมาก แต่ก็ยังมีความท้าทายสำคัญในการบรรลุการประมวลผลภาษาธรรมชาติที่ 'สมบูรณ์แบบ' โดยเฉพาะอย่างยิ่งเมื่อพูดถึงการเข้าใจความหมายของประโยค เช่น อารมณ์ขันหรือการตรวจจับอารมณ์ เช่น การประชดประชันในประโยค

ในตอนนี้ คุณอาจจะนึกถึงชั้นเรียนในโรงเรียนที่ครูสอนเกี่ยวกับส่วนต่าง ๆ ของไวยากรณ์ในประโยค ในบางประเทศ นักเรียนจะได้รับการสอนไวยากรณ์และภาษาศาสตร์เป็นวิชาเฉพาะ แต่ในหลายประเทศ หัวข้อเหล่านี้จะรวมอยู่ในส่วนของการเรียนรู้ภาษา: ไม่ว่าจะเป็นภาษาแรกของคุณในโรงเรียนประถม (การเรียนรู้การอ่านและเขียน) และอาจเป็นภาษาที่สองในระดับมัธยมศึกษา หรือมัธยมปลาย ไม่ต้องกังวลหากคุณไม่เชี่ยวชาญในการแยกแยะคำนามจากคำกริยาหรือคำวิเศษณ์จากคำคุณศัพท์!

หากคุณมีปัญหาในการแยกแยะระหว่าง ปัจจุบันธรรมดา และ ปัจจุบันต่อเนื่อง คุณไม่ได้อยู่คนเดียว นี่เป็นสิ่งที่ท้าทายสำหรับหลายคน แม้แต่ผู้พูดภาษาแม่ ข่าวดีก็คือคอมพิวเตอร์เก่งมากในการใช้กฎอย่างเป็นทางการ และคุณจะได้เรียนรู้การเขียนโค้ดที่สามารถ วิเคราะห์ ประโยคได้ดีเท่ากับมนุษย์ ความท้าทายที่ยิ่งใหญ่กว่าที่คุณจะตรวจสอบในภายหลังคือการเข้าใจ ความหมาย และ อารมณ์ ของประโยค

ความต้องการเบื้องต้น

สำหรับบทเรียนนี้ ความต้องการเบื้องต้นหลักคือการสามารถอ่านและเข้าใจภาษาของบทเรียนนี้ ไม่มีปัญหาคณิตศาสตร์หรือสมการให้แก้ไข แม้ว่าผู้เขียนต้นฉบับจะเขียนบทเรียนนี้เป็นภาษาอังกฤษ แต่ก็มีการแปลเป็นภาษาอื่น ๆ ดังนั้นคุณอาจกำลังอ่านฉบับแปลอยู่ มีตัวอย่างที่ใช้ภาษาต่าง ๆ หลายภาษา (เพื่อเปรียบเทียบกฎไวยากรณ์ของภาษาต่าง ๆ) ซึ่ง ไม่ได้ แปล แต่ข้อความอธิบายจะถูกแปล ดังนั้นความหมายควรชัดเจน

สำหรับงานเขียนโค้ด คุณจะใช้ Python และตัวอย่างจะใช้ Python 3.8

ในส่วนนี้ คุณจะต้องใช้:

  • ความเข้าใจ Python 3 ความเข้าใจภาษาโปรแกรมใน Python 3 บทเรียนนี้ใช้การป้อนข้อมูล วนลูป การอ่านไฟล์ และอาร์เรย์

  • Visual Studio Code + ส่วนขยาย เราจะใช้ Visual Studio Code และส่วนขยาย Python คุณสามารถใช้ IDE Python ที่คุณเลือกได้เช่นกัน

  • TextBlob TextBlob เป็นไลบรารีการประมวลผลข้อความที่ง่ายสำหรับ Python ทำตามคำแนะนำในเว็บไซต์ TextBlob เพื่อติดตั้งบนระบบของคุณ (ติดตั้ง corpora ด้วย ตามที่แสดงด้านล่าง):

    pip install -U textblob
    python -m textblob.download_corpora
    

💡 เคล็ดลับ: คุณสามารถรัน Python ได้โดยตรงในสภาพแวดล้อม VS Code ดู เอกสาร สำหรับข้อมูลเพิ่มเติม

การพูดคุยกับเครื่องจักร

ประวัติศาสตร์ของการพยายามทำให้คอมพิวเตอร์เข้าใจภาษามนุษย์มีมานานหลายทศวรรษ และหนึ่งในนักวิทยาศาสตร์ยุคแรกที่พิจารณาการประมวลผลภาษาธรรมชาติคือ Alan Turing

การทดสอบของ Turing

เมื่อ Turing กำลังวิจัย ปัญญาประดิษฐ์ ในปี 1950 เขาได้พิจารณาว่าการทดสอบการสนทนาอาจถูกมอบให้กับมนุษย์และคอมพิวเตอร์ (ผ่านการสนทนาแบบพิมพ์) โดยที่มนุษย์ในบทสนทนาไม่แน่ใจว่ากำลังสนทนากับมนุษย์อีกคนหรือคอมพิวเตอร์

หากหลังจากการสนทนาในระยะเวลาหนึ่ง มนุษย์ไม่สามารถระบุได้ว่าคำตอบมาจากคอมพิวเตอร์หรือไม่ คอมพิวเตอร์นั้นจะถือว่า คิด ได้หรือไม่?

แรงบันดาลใจ - 'เกมเลียนแบบ'

แนวคิดนี้มาจากเกมปาร์ตี้ที่เรียกว่า เกมเลียนแบบ ซึ่งผู้สอบสวนอยู่คนเดียวในห้องและมีหน้าที่กำหนดว่าคนสองคน (ในอีกห้องหนึ่ง) เป็นชายและหญิงตามลำดับ ผู้สอบสวนสามารถส่งโน้ตและต้องพยายามคิดคำถามที่คำตอบที่เขียนเผยให้เห็นเพศของบุคคลลึกลับ แน่นอนว่าผู้เล่นในอีกห้องหนึ่งพยายามหลอกผู้สอบสวนโดยตอบคำถามในลักษณะที่ทำให้เข้าใจผิดหรือสับสน ในขณะเดียวกันก็ให้ความรู้สึกเหมือนตอบอย่างตรงไปตรงมา

การพัฒนา Eliza

ในปี 1960 นักวิทยาศาสตร์ MIT ชื่อ Joseph Weizenbaum ได้พัฒนา Eliza ซึ่งเป็น 'นักบำบัด' คอมพิวเตอร์ที่ถามคำถามมนุษย์และให้ความรู้สึกว่าเข้าใจคำตอบ อย่างไรก็ตาม แม้ว่า Eliza จะสามารถวิเคราะห์ประโยคและระบุโครงสร้างไวยากรณ์และคำสำคัญบางคำเพื่อให้คำตอบที่สมเหตุสมผล แต่ก็ไม่สามารถกล่าวได้ว่า เข้าใจ ประโยค หาก Eliza ถูกนำเสนอด้วยประโยคในรูปแบบ "ฉันรู้สึก เศร้า" มันอาจจัดเรียงและแทนที่คำในประโยคเพื่อสร้างคำตอบ "คุณรู้สึก เศร้า มานานแค่ไหน"

สิ่งนี้ทำให้ดูเหมือนว่า Eliza เข้าใจคำกล่าวและกำลังถามคำถามต่อเนื่อง ในขณะที่ในความเป็นจริง มันกำลังเปลี่ยนกาลเวลาและเพิ่มคำบางคำ หาก Eliza ไม่สามารถระบุคำสำคัญที่มีคำตอบได้ มันจะให้คำตอบแบบสุ่มที่สามารถใช้ได้กับคำกล่าวต่าง ๆ มากมาย Eliza สามารถถูกหลอกได้ง่าย เช่น หากผู้ใช้เขียน "คุณเป็น จักรยาน" มันอาจตอบว่า "ฉันเป็น จักรยาน มานานแค่ไหน?" แทนที่จะตอบอย่างมีเหตุผลมากกว่า

Chatting with Eliza

🎥 คลิกที่ภาพด้านบนเพื่อดูวิดีโอเกี่ยวกับโปรแกรม ELIZA ดั้งเดิม

หมายเหตุ: คุณสามารถอ่านคำอธิบายต้นฉบับของ Eliza ที่เผยแพร่ในปี 1966 หากคุณมีบัญชี ACM หรืออ่านเกี่ยวกับ Eliza บน wikipedia

แบบฝึกหัด - การเขียนโค้ดบอทสนทนาเบื้องต้น

บอทสนทนา เช่น Eliza เป็นโปรแกรมที่ดึงข้อมูลจากผู้ใช้และดูเหมือนจะเข้าใจและตอบสนองอย่างชาญฉลาด ต่างจาก Eliza บอทของเราจะไม่มีกฎหลายข้อที่ทำให้ดูเหมือนมีการสนทนาอย่างชาญฉลาด แต่บอทของเราจะมีความสามารถเพียงอย่างเดียว คือการทำให้การสนทนาดำเนินต่อไปด้วยคำตอบแบบสุ่มที่อาจใช้ได้ในเกือบทุกการสนทนาเล็กน้อย

แผนการ

ขั้นตอนของคุณเมื่อสร้างบอทสนทนา:

  1. พิมพ์คำแนะนำเพื่อแนะนำผู้ใช้วิธีการโต้ตอบกับบอท
  2. เริ่มลูป
    1. รับข้อมูลจากผู้ใช้
    2. หากผู้ใช้ขอออก ให้หยุด
    3. ประมวลผลข้อมูลจากผู้ใช้และกำหนดคำตอบ (ในกรณีนี้ คำตอบเป็นการเลือกแบบสุ่มจากรายการคำตอบทั่วไปที่เป็นไปได้)
    4. พิมพ์คำตอบ
  3. กลับไปที่ขั้นตอนที่ 2

การสร้างบอท

มาสร้างบอทกันต่อไป เราจะเริ่มต้นด้วยการกำหนดวลีบางส่วน

  1. สร้างบอทนี้ด้วยตัวคุณเองใน 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?"]
    

    นี่คือตัวอย่างผลลัพธ์เพื่อเป็นแนวทาง (ข้อมูลจากผู้ใช้จะอยู่ในบรรทัดที่ขึ้นต้นด้วย >):

    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!
    

    หนึ่งในวิธีแก้ปัญหาที่เป็นไปได้สำหรับงานนี้อยู่ ที่นี่

    หยุดและพิจารณา

    1. คุณคิดว่าคำตอบแบบสุ่มจะ 'หลอก' ใครบางคนให้คิดว่าบอทเข้าใจพวกเขาจริง ๆ หรือไม่?
    2. บอทต้องมีคุณสมบัติอะไรบ้างเพื่อให้มีประสิทธิภาพมากขึ้น?
    3. หากบอทสามารถ 'เข้าใจ' ความหมายของประโยคได้จริง ๆ มันจะต้อง 'จดจำ' ความหมายของประโยคก่อนหน้าในบทสนทนาด้วยหรือไม่?

🚀ความท้าทาย

เลือกหนึ่งในองค์ประกอบ "หยุดและพิจารณา" ด้านบนและลองนำไปใช้ในโค้ดหรือเขียนวิธีแก้ปัญหาบนกระดาษโดยใช้ pseudocode

ในบทเรียนถัดไป คุณจะได้เรียนรู้เกี่ยวกับวิธีการอื่น ๆ ในการวิเคราะห์ภาษาธรรมชาติและการเรียนรู้ของเครื่อง

แบบทดสอบหลังเรียน

ทบทวนและศึกษาด้วยตนเอง

ดูข้อมูลอ้างอิงด้านล่างเพื่อโอกาสในการอ่านเพิ่มเติม

ข้อมูลอ้างอิง

  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. Princeton University. 2010.

งานที่ได้รับมอบหมาย

ค้นหาบอท


ข้อจำกัดความรับผิดชอบ:
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI Co-op Translator แม้ว่าเราจะพยายามให้การแปลมีความถูกต้อง แต่โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราจะไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความที่ผิดพลาดซึ่งเกิดจากการใช้การแปลนี้