|
3 weeks ago | |
---|---|---|
.. | ||
README.md | 3 weeks ago | |
assignment.md | 3 weeks ago |
README.md
งานและเทคนิคทั่วไปในด้านการประมวลผลภาษาธรรมชาติ
สำหรับงาน การประมวลผลภาษาธรรมชาติ ส่วนใหญ่ ข้อความที่ต้องการประมวลผลจะต้องถูกแยกส่วน ตรวจสอบ และจัดเก็บผลลัพธ์ หรืออ้างอิงกับกฎและชุดข้อมูล งานเหล่านี้ช่วยให้โปรแกรมเมอร์สามารถสกัด ความหมาย หรือ เจตนา หรือเพียงแค่ ความถี่ ของคำและคำศัพท์ในข้อความได้
แบบทดสอบก่อนการบรรยาย
มาสำรวจเทคนิคทั่วไปที่ใช้ในการประมวลผลข้อความกัน เทคนิคเหล่านี้เมื่อรวมกับการเรียนรู้ของเครื่องจะช่วยให้คุณวิเคราะห์ข้อความจำนวนมากได้อย่างมีประสิทธิภาพ อย่างไรก็ตาม ก่อนที่จะนำ ML ไปใช้กับงานเหล่านี้ เรามาทำความเข้าใจปัญหาที่ผู้เชี่ยวชาญ NLP มักพบเจอกันก่อน
งานทั่วไปใน NLP
มีวิธีการวิเคราะห์ข้อความที่คุณกำลังทำงานอยู่หลายวิธี มีงานที่คุณสามารถทำได้ และผ่านงานเหล่านี้คุณจะสามารถเข้าใจข้อความและสรุปผลได้ โดยปกติคุณจะดำเนินการงานเหล่านี้ตามลำดับ
Tokenization
สิ่งแรกที่อัลกอริทึม NLP ส่วนใหญ่ต้องทำคือการแบ่งข้อความออกเป็นโทเค็นหรือคำ แม้ว่าจะฟังดูง่าย แต่การต้องคำนึงถึงเครื่องหมายวรรคตอนและตัวแบ่งคำและประโยคในภาษาต่าง ๆ อาจทำให้ซับซ้อนได้ คุณอาจต้องใช้วิธีการต่าง ๆ เพื่อกำหนดจุดแบ่ง
การแบ่งประโยคจาก Pride and Prejudice อินโฟกราฟิกโดย Jen Looper
Embeddings
Word embeddings เป็นวิธีการแปลงข้อมูลข้อความของคุณให้อยู่ในรูปแบบตัวเลข โดยการทำ embeddings จะทำในลักษณะที่คำที่มีความหมายคล้ายกันหรือคำที่ใช้ร่วมกันจะจัดกลุ่มอยู่ใกล้กัน
"I have the highest respect for your nerves, they are my old friends." - Word embeddings สำหรับประโยคใน Pride and Prejudice อินโฟกราฟิกโดย Jen Looper
✅ ลองใช้ เครื่องมือที่น่าสนใจนี้ เพื่อทดลองกับ word embeddings การคลิกที่คำหนึ่งจะแสดงกลุ่มคำที่คล้ายกัน เช่น 'toy' จะอยู่ในกลุ่มเดียวกับ 'disney', 'lego', 'playstation', และ 'console'
Parsing & Part-of-speech Tagging
ทุกคำที่ถูกแบ่งเป็นโทเค็นสามารถถูกแท็กเป็นส่วนของคำพูด เช่น คำนาม คำกริยา หรือคำคุณศัพท์ ประโยค the quick red fox jumped over the lazy brown dog
อาจถูกแท็ก POS เป็น fox = noun, jumped = verb
การวิเคราะห์ประโยคจาก Pride and Prejudice อินโฟกราฟิกโดย Jen Looper
การวิเคราะห์โครงสร้างประโยคคือการระบุว่าคำใดเกี่ยวข้องกันในประโยค เช่น the quick red fox jumped
เป็นลำดับคำคุณศัพท์-คำนาม-คำกริยา ที่แยกออกจากลำดับ lazy brown dog
Word and Phrase Frequencies
กระบวนการที่มีประโยชน์เมื่อวิเคราะห์ข้อความจำนวนมากคือการสร้างพจนานุกรมของทุกคำหรือวลีที่สนใจและความถี่ที่ปรากฏ วลี the quick red fox jumped over the lazy brown dog
มีความถี่ของคำว่า the เท่ากับ 2
มาดูตัวอย่างข้อความที่เรานับความถี่ของคำกัน บทกวี The Winners ของ Rudyard Kipling มีบทดังนี้:
What the moral? Who rides may read.
When the night is thick and the tracks are blind
A friend at a pinch is a friend, indeed,
But a fool to wait for the laggard behind.
Down to Gehenna or up to the Throne,
He travels the fastest who travels alone.
เนื่องจากความถี่ของวลีสามารถไม่คำนึงถึงตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กได้ตามต้องการ วลี a friend
มีความถี่เท่ากับ 2 และ the
มีความถี่เท่ากับ 6 และ travels
มีความถี่เท่ากับ 2
N-grams
ข้อความสามารถถูกแบ่งออกเป็นลำดับของคำที่มีความยาวกำหนด เช่น คำเดียว (unigram), สองคำ (bigrams), สามคำ (trigrams) หรือจำนวนคำใด ๆ (n-grams)
ตัวอย่างเช่น the quick red fox jumped over the lazy brown dog
ด้วยคะแนน n-gram เท่ากับ 2 จะได้ n-grams ดังนี้:
- the quick
- quick red
- red fox
- fox jumped
- jumped over
- over the
- the lazy
- lazy brown
- brown dog
อาจจะง่ายขึ้นถ้าจินตนาการว่าเป็นกล่องเลื่อนผ่านประโยค นี่คือตัวอย่างสำหรับ n-grams ที่มี 3 คำ โดย n-gram จะถูกเน้นในแต่ละประโยค:
- the quick red fox jumped over the lazy brown dog
- the quick red fox jumped over the lazy brown dog
- the quick red fox jumped over the lazy brown dog
- the quick red fox jumped over the lazy brown dog
- the quick red fox jumped over the lazy brown dog
- the quick red fox jumped over the lazy brown dog
- the quick red fox jumped over the lazy brown dog
- the quick red fox jumped over the lazy brown dog
ค่า n-gram เท่ากับ 3: อินโฟกราฟิกโดย Jen Looper
Noun phrase Extraction
ในประโยคส่วนใหญ่จะมีคำนามที่เป็นประธานหรือกรรมของประโยค ในภาษาอังกฤษมักจะสามารถระบุได้จากการมี 'a' หรือ 'an' หรือ 'the' นำหน้า การระบุประธานหรือกรรมของประโยคโดยการ 'สกัดวลีคำนาม' เป็นงานทั่วไปใน NLP เมื่อพยายามทำความเข้าใจความหมายของประโยค
✅ ในประโยค "I cannot fix on the hour, or the spot, or the look or the words, which laid the foundation. It is too long ago. I was in the middle before I knew that I had begun." คุณสามารถระบุวลีคำนามได้หรือไม่?
ในประโยค the quick red fox jumped over the lazy brown dog
มีวลีคำนาม 2 วลี: quick red fox และ lazy brown dog
Sentiment analysis
ประโยคหรือข้อความสามารถถูกวิเคราะห์เพื่อดูอารมณ์ หรือว่า เป็นบวก หรือ เป็นลบ อารมณ์ถูกวัดในรูปแบบ polarity และ objectivity/subjectivity โดย polarity วัดจาก -1.0 ถึง 1.0 (ลบถึงบวก) และ 0.0 ถึง 1.0 (วัตถุประสงค์ที่สุดถึงอัตวิสัยที่สุด)
✅ ในภายหลังคุณจะได้เรียนรู้ว่ามีวิธีการต่าง ๆ ในการกำหนดอารมณ์โดยใช้การเรียนรู้ของเครื่อง แต่หนึ่งในวิธีคือการมีรายการคำและวลีที่ถูกจัดหมวดหมู่เป็นบวกหรือลบโดยผู้เชี่ยวชาญ และนำโมเดลนั้นไปใช้กับข้อความเพื่อคำนวณคะแนน polarity คุณเห็นไหมว่าวิธีนี้สามารถทำงานได้ในบางสถานการณ์และไม่ดีในบางสถานการณ์?
Inflection
Inflection ช่วยให้คุณสามารถนำคำมาเปลี่ยนเป็นรูปเอกพจน์หรือพหูพจน์ได้
Lemmatization
Lemma คือรากหรือคำหลักสำหรับชุดคำ เช่น flew, flies, flying มี lemma เป็นคำกริยา fly
ยังมีฐานข้อมูลที่มีประโยชน์สำหรับนักวิจัย NLP โดยเฉพาะ:
WordNet
WordNet เป็นฐานข้อมูลของคำ คำพ้อง คำตรงข้าม และรายละเอียดอื่น ๆ สำหรับทุกคำในหลายภาษา เป็นเครื่องมือที่มีประโยชน์มากเมื่อพยายามสร้างการแปล ตัวตรวจสอบการสะกด หรือเครื่องมือภาษาทุกประเภท
ไลบรารี NLP
โชคดีที่คุณไม่จำเป็นต้องสร้างเทคนิคเหล่านี้ด้วยตัวเอง เพราะมีไลบรารี Python ที่ยอดเยี่ยมที่ทำให้การพัฒนาสำหรับผู้ที่ไม่ได้เชี่ยวชาญใน NLP หรือการเรียนรู้ของเครื่องง่ายขึ้นมาก ในบทเรียนถัดไปจะมีตัวอย่างเพิ่มเติม แต่ที่นี่คุณจะได้เรียนรู้ตัวอย่างที่มีประโยชน์เพื่อช่วยคุณในงานถัดไป
การฝึกฝน - ใช้ไลบรารี TextBlob
มาลองใช้ไลบรารีที่ชื่อว่า TextBlob ซึ่งมี API ที่มีประโยชน์สำหรับจัดการงานประเภทนี้ TextBlob "สร้างขึ้นบนพื้นฐานของ NLTK และ pattern และทำงานร่วมกันได้ดี"
หมายเหตุ: มี Quick Start ที่มีประโยชน์สำหรับ TextBlob ซึ่งแนะนำสำหรับนักพัฒนา Python ที่มีประสบการณ์
เมื่อพยายามระบุ noun phrases TextBlob มีตัวเลือกหลายตัวสำหรับการสกัดวลีคำนาม
-
ลองดูที่
ConllExtractor
from textblob import TextBlob from textblob.np_extractors import ConllExtractor # import and create a Conll extractor to use later extractor = ConllExtractor() # later when you need a noun phrase extractor: user_input = input("> ") user_input_blob = TextBlob(user_input, np_extractor=extractor) # note non-default extractor specified np = user_input_blob.noun_phrases
เกิดอะไรขึ้นที่นี่? ConllExtractor คือ "ตัวสกัดวลีคำนามที่ใช้ chunk parsing ที่ฝึกด้วยชุดข้อมูล ConLL-2000" ConLL-2000 หมายถึงการประชุมปี 2000 เกี่ยวกับ Computational Natural Language Learning ซึ่งในปีนั้นมีการจัด workshop เพื่อแก้ปัญหา NLP ที่ยากลำบาก และในปี 2000 คือ noun chunking โมเดลถูกฝึกด้วย Wall Street Journal โดยใช้ "sections 15-18 เป็นข้อมูลการฝึก (211727 tokens) และ section 20 เป็นข้อมูลทดสอบ (47377 tokens)" คุณสามารถดูขั้นตอนที่ใช้ ที่นี่ และ ผลลัพธ์
ความท้าทาย - ปรับปรุงบอทของคุณด้วย NLP
ในบทเรียนก่อนหน้านี้คุณได้สร้างบอท Q&A แบบง่าย ๆ ตอนนี้คุณจะทำให้ Marvin มีความเห็นอกเห็นใจมากขึ้นโดยการวิเคราะห์ข้อความที่คุณป้อนเพื่อดูอารมณ์และพิมพ์คำตอบที่เหมาะสมกับอารมณ์นั้น คุณยังต้องระบุ noun_phrase
และถามเกี่ยวกับหัวข้อนั้นด้วย
ขั้นตอนของคุณเมื่อสร้างบอทสนทนาที่ดีขึ้น:
- พิมพ์คำแนะนำเพื่อแนะนำผู้ใช้วิธีการโต้ตอบกับบอท
- เริ่มลูป
- รับข้อมูลจากผู้ใช้
- หากผู้ใช้ขอออก ให้หยุด
- ประมวลผลข้อมูลผู้ใช้และกำหนดคำตอบที่เหมาะสมกับอารมณ์
- หากตรวจพบ noun phrase ในอารมณ์ ให้เปลี่ยนเป็นรูปพหูพจน์และถามข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนั้น
- พิมพ์คำตอบ
- กลับไปที่ขั้นตอน 2
นี่คือตัวอย่างโค้ดสำหรับการกำหนดอารมณ์โดยใช้ TextBlob สังเกตว่ามีเพียงสี่ ระดับ ของการตอบสนองต่ออารมณ์ (คุณสามารถเพิ่มได้หากต้องการ):
if user_input_blob.polarity <= -0.5:
response = "Oh dear, that sounds bad. "
elif user_input_blob.polarity <= 0:
response = "Hmm, that's not great. "
elif user_input_blob.polarity <= 0.5:
response = "Well, that sounds positive. "
elif user_input_blob.polarity <= 1:
response = "Wow, that sounds great. "
นี่คือตัวอย่างผลลัพธ์เพื่อเป็นแนวทาง (ข้อมูลผู้ใช้เริ่มต้นด้วย >):
Hello, I am Marvin, the friendly robot.
You can end this conversation at any time by typing 'bye'
After typing each answer, press 'enter'
How are you today?
> I am ok
Well, that sounds positive. Can you tell me more?
> I went for a walk and saw a lovely cat
Well, that sounds positive. Can you tell me more about lovely cats?
> cats are the best. But I also have a cool dog
Wow, that sounds great. Can you tell me more about cool dogs?
> I have an old hounddog but he is sick
Hmm, that's not great. Can you tell me more about old hounddogs?
> bye
It was nice talking to you, goodbye!
หนึ่งในวิธีแก้ปัญหาที่เป็นไปได้สำหรับงานนี้คือ ที่นี่
✅ ตรวจสอบความรู้
- คุณคิดว่าการตอบสนองที่เห็นอกเห็นใจจะ 'หลอก' ให้คนคิดว่าบอทเข้าใจพวกเขาจริง ๆ ได้หรือไม่?
- การระบุ noun phrase ทำให้บอทดู 'น่าเชื่อถือ' มากขึ้นหรือไม่?
- ทำไมการสกัด 'noun phrase' จากประโยคถึงเป็นสิ่งที่มีประโยชน์?
ลองสร้างบอทในแบบตรวจสอบความรู้ข้างต้นและทดสอบกับเพื่อนของคุณ มันสามารถหลอกพวกเขาได้หรือไม่? คุณสามารถทำให้บอทของคุณดู 'น่าเชื่อถือ' มากขึ้นได้หรือไม่?
🚀ความท้าทาย
ลองทำงานในแบบตรวจสอบความรู้ข้างต้นและพยายามนำไปใช้ ทดสอบบอทกับเพื่อนของคุณ มันสามารถหลอกพวกเขาได้หรือไม่? คุณสามารถทำให้บอทของคุณดู 'น่าเชื่อถือ' มากขึ้นได้หรือไม่?
แบบทดสอบหลังการบรรยาย
ทบทวนและศึกษาด้วยตนเอง
ในบทเรียนถัดไปคุณจะได้เรียนรู้เพิ่มเติมเกี่ยวกับการวิเคราะห์อารมณ์ ค้นคว้าเทคนิคที่น่าสนใจนี้ในบทความ เช่น บทความใน KDNuggets
งานที่ได้รับมอบหมาย
ข้อจำกัดความรับผิดชอบ:
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI Co-op Translator แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความที่ผิดพลาดซึ่งเกิดจากการใช้การแปลนี้