Chunking ในการประมวลผลภาษาธรรมชาติคืออะไร?

โหนดต้นทาง: 1878431

เรียนผู้อ่าน

ในบล็อกนี้ ฉันจะพูดถึงการแบ่งส่วนทั้งทางทฤษฎีและปฏิบัติใน Python

มาเริ่มกันเลย…

หมายเหตุ: สำหรับการนำไปใช้งาน จะเป็นการดีกว่าถ้าใช้ Python IDLE เนื่องจากเอาต์พุตคือรูปวาดของแผนผังที่ปรากฏขึ้นในหน้าต่างแยกต่างหาก

ระเบียบวาระการประชุม

  • การจับเป็นก้อนคืออะไร?
  • การแบ่งส่วนใช้ที่ไหน?
  • ประเภทของการจับเป็นก้อน
  • การใช้งาน chunking ใน Python
  • ผลสอบ

การจับเป็นก้อนคืออะไร?

การแบ่งส่วนหมายถึงกระบวนการประมวลผลภาษาธรรมชาติที่ใช้ในการระบุส่วนของคำพูดและวลีสั้น ๆ ที่มีอยู่ในประโยคที่กำหนด

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

ตัวอย่างเช่น การแบ่งกลุ่มสามารถทำได้เพื่อระบุและจัดกลุ่มวลีหรือคำนามเพียงอย่างเดียว คำคุณศัพท์หรือวลีคำคุณศัพท์ และอื่นๆ พิจารณาประโยคด้านล่าง:

“ฉันกินเบอร์เกอร์และขนมอบเป็นอาหารเช้า”

ในกรณีนี้ หากเราต้องการรวมกลุ่มหรือนามวลีเป็นก้อน เราจะได้คำว่า "burgers", "pastries" และ "lunch" ซึ่งเป็นกลุ่มคำนามหรือกลุ่มคำนามของประโยค

การแบ่งส่วนใช้ที่ไหน?

ทำไมเราถึงต้องการเรียนรู้บางสิ่งโดยไม่รู้ว่ามันใช้กันอย่างแพร่หลายที่ไหน! การดูแอปพลิเคชันที่กล่าวถึงในบล็อกส่วนนี้จะช่วยให้คุณสงสัยได้จนจบ!

Chunking ใช้เพื่อรับวลีที่จำเป็นจากประโยคที่กำหนด อย่างไรก็ตาม การแท็ก POS สามารถใช้เพื่อระบุส่วนของคำพูดที่เป็นของทุกคำในประโยคเท่านั้น

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

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

ประเภทของการตัดเป็นก้อน

โดยกว้างๆ การแบ่งเป็นชิ้นๆ มีอยู่ 2 ประเภท:

  • กำลังแตกเป็นชิ้นๆ.
  • กำลังหั่นเป็นชิ้นๆ

การแบ่งส่วน:

ที่นี่เราไม่ได้ดำน้ำลึก แต่เราพอใจกับภาพรวมของข้อมูลแทน มันช่วยให้เราเข้าใจข้อมูลที่กำหนดโดยย่อเท่านั้น

การแบ่งส่วน:

การแบ่งย่อยช่วยให้เราได้รับข้อมูลโดยละเอียดต่างจากการแบ่งส่วนประเภทก่อนหน้า

ดังนั้น หากคุณต้องการข้อมูลเชิงลึก ลองพิจารณา "ทำให้เป็นก้อน" หรือไม่ก็เลือกใช้ "ทำให้เป็นก้อน"

การใช้งาน chunking ใน Python

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

อย่ากังวลหากนี่เป็นครั้งแรกที่คุณเจอคำว่า "สำนวนปกติ" ตารางด้านล่างอยู่ที่นี่เพื่อช่วยเหลือคุณ:

สัญลักษณ์

ความหมาย

ตัวอย่าง

*

อักขระนำหน้าสามารถเกิดขึ้นได้เป็นศูนย์หรือหลายครั้ง ซึ่งหมายความว่าอักขระนำหน้าอาจมีหรือไม่มีก็ได้

ab* จับคู่อินพุตทั้งหมดที่ขึ้นต้นด้วย ab แล้วตามด้วยจำนวน b เป็นศูนย์หรือมากกว่า รูปแบบจะตรงกับ ab, abb ,abbb และอื่นๆ

+

อักขระที่อยู่ข้างหน้าควรปรากฏอย่างน้อยหนึ่งครั้ง

a+ ตรงกับ a,aa,aaa และอื่นๆ

?

อักขระนำหน้าอาจไม่เกิดขึ้นเลยหรือเกิดขึ้นเพียงครั้งเดียวเท่านั้น หมายความว่าอักขระนำหน้าเป็นทางเลือก

เกี่ยวกับ? จับคู่ ab, abb แต่ไม่ตรงกับ abb เป็นต้น

ตารางด้านบนมีนิพจน์ทั่วไปที่ใช้บ่อยที่สุด นิพจน์ทั่วไปมีประโยชน์มากในบรรทัดคำสั่ง โดยเฉพาะอย่างยิ่งในขณะที่กำลังลบ ค้นหา เปลี่ยนชื่อ หรือย้ายไฟล์

อย่างไรก็ตาม สำหรับการดำเนินการนี้ เราจะใช้เฉพาะ * . อย่าลังเลที่จะดูตารางด้านบนเพื่อทำความคุ้นเคยกับสัญลักษณ์!

เราจะดำเนินการเป็นก้อนโดยใช้ nltk ซึ่งเป็นไลบรารี NLP ที่ได้รับความนิยมมากที่สุด ดังนั้นให้เรานำเข้ามันก่อน

นำเข้า nltk

ลองพิจารณาข้อความตัวอย่างด้านล่างที่ฉันสร้างขึ้นเอง คุณสามารถแทนที่ข้อความด้านล่างด้วยข้อความตัวอย่างใดๆ ที่คุณต้องการนำไปใช้เป็นชิ้นๆ ได้!

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

เห็นได้ชัดว่าข้อมูลจะต้องมีโทเค็นประโยคและจากนั้นโทเค็นคำก่อนที่เราจะดำเนินการต่อ โทเค็นไนเซชั่นนั้นไม่มีอะไรนอกจากกระบวนการแบ่งส่วนข้อความที่กำหนดออกเป็นหน่วยเล็กๆ เช่น ประโยค ในกรณีของโทเค็นประโยคและคำ ในกรณีของโทเค็นคำ

ตามด้วยโทเค็น การติดแท็ก POS (ส่วนหนึ่งของคำพูด) สำหรับแต่ละคำ โดยที่ส่วนของคำพูดของทุกคำจะถูกระบุ ตอนนี้เราสนใจเฉพาะคำกริยา part-of-speech และต้องการแยกออกมาเหมือนกัน

ดังนั้น ให้ระบุส่วนของคำพูดที่เราสนใจโดยใช้นิพจน์ทั่วไปที่จำเป็นดังนี้:

วีบี: {}

tokenized=nltk.sent_tokenize(sample_text)
สำหรับฉันในโทเค็น: word=nltk.word_tokenize(i) # print(words)agged_words=nltk.pos_tag(words) # print(tagged_words) chunkGram=r"""VB: {}""" chunkParser=nltk.RegexpParser( chunkGram) chunked=chunkParser.parse(tagged_words) chunked.draw()

นิพจน์ทั่วไป (RE) อยู่ภายในวงเล็บเหลี่ยม () ซึ่งจะอยู่ภายในวงเล็บปีกกา ({ และ })

หมายเหตุ: ระบุ RE ตาม POS ที่ต้องการ

VB ย่อมาจากคำกริยา POS จุดที่ถัดจาก VB หมายถึงการจับคู่อักขระใดๆ ที่ตามหลัง VB เครื่องหมายคำถามหลังจุดระบุว่าอักขระใดๆ หลัง B จะต้องเกิดขึ้นเพียงครั้งเดียวหรือต้องไม่เกิดขึ้นเลย อย่างไรก็ตาม จากตารางที่เราเห็นก่อนหน้านี้ อักขระนี้เป็นทางเลือก เราได้วางกรอบนิพจน์ทั่วไปในลักษณะนี้ เนื่องจากใน NLTK วลีกริยามีแท็ก POS ต่อไปนี้:

POS

ความหมาย

VB

กริยาในรูปฐาน

วีบีดี

กริยาในอดีตกาล

GBV

กริยาในกาลปัจจุบัน

วี.บี.เอ็น

กริยาในรูปกริยาอดีต

วีบีพี

กริยาในกาลปัจจุบัน แต่ไม่ใช่ในบุรุษที่ 3 เอกพจน์

วีบีแซด

กริยาในกาลปัจจุบัน และเป็นเอกพจน์บุรุษที่ 3

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

สามารถดูโค้ดทั้งหมดได้ดังนี้:

นำเข้า nltk
nltk.download('averaged_perceptron_tagger')
ตัวอย่าง_ข้อความ = """
พระรามฆ่าทศกัณฐ์เพื่อช่วยนางสีดาจากลังกา ตำนานของรามัญเป็นมหากาพย์อินเดียที่ได้รับความนิยมมากที่สุด มีภาพยนตร์และซีรีย์มากมายอยู่แล้ว
ถูกถ่ายทำในหลายภาษาที่นี่ในอินเดียโดยใช้เรื่องรามเกียรติ์ """
tokenized=nltk.sent_tokenize(sample_text)
สำหรับฉันในโทเค็น: word=nltk.word_tokenize(i) # print(words)agged_words=nltk.pos_tag(words) # print(tagged_words) chunkGram=r"""VB: {}""" chunkParser=nltk.RegexpParser( chunkGram) chunked=chunkParser.parse(tagged_words) chunked.draw()

ผลสอบ

ผลลัพธ์ที่เป็นชิ้น
ผลลัพธ์ที่เป็นชิ้น

ในที่สุด เราได้รับรูปแบบต้นไม้ของ POS ของคำพร้อมกับคำที่ POS ตรงกับ RE ที่กำหนด สแน็ปช็อตของผลลัพธ์ที่ได้รับสำหรับข้อความตัวอย่างที่เราส่งผ่านสามารถดูได้ในรูปด้านบน

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

หวังว่าบทความของฉันจะมีประโยชน์

Thank You!

อ้างอิง

1. การใช้ chunking ใน Python

2. ทฤษฎีเบื้องหลังการหั่นเป็นชิ้น

3. รายการ POS ทั้งหมดที่มีอยู่ใน NLP

เกี่ยวกับฉัน

ฉันชื่อ Nithyashree V นักศึกษาปีสุดท้ายของ BTech Computer Science and Engineering ฉันชอบที่จะเรียนรู้เทคโนโลยีเจ๋งๆ เหล่านี้และนำไปปฏิบัติ โดยเฉพาะอย่างยิ่งการสังเกตว่าเทคโนโลยีเหล่านี้ช่วยเราแก้ปัญหาที่ท้าทายของสังคมได้อย่างไร ความสนใจของฉัน ได้แก่ ปัญญาประดิษฐ์ วิทยาศาสตร์ข้อมูล และการประมวลผลภาษาธรรมชาติ

นี่คือโปรไฟล์ LinkedIn ของฉัน: LinkedIn ของฉัน

คุณสามารถอ่านบทความอื่นๆ ของฉันเกี่ยวกับ Analytics Vidhya จาก โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม.

สื่อที่แสดงในบทความนี้ไม่ได้เป็นของ Analytics Vidhya และถูกใช้ตามดุลยพินิจของผู้เขียน

ที่มา: https://www.analyticsvidhya.com/blog/2021/10/what-is-chunking-in-natural-Language-processing/

ประทับเวลา:

เพิ่มเติมจาก การวิเคราะห์ วิทยา