ชุดเครื่องมือภาษาธรรมชาติ - การแยกวิเคราะห์

การแยกวิเคราะห์และความเกี่ยวข้องใน NLP

คำว่า 'Parsing' ซึ่งมีต้นกำเนิดมาจากคำภาษาละติน ‘pars’ (ซึ่งหมายความว่า ‘part’) ใช้เพื่อวาดความหมายที่แน่นอนหรือความหมายตามพจนานุกรมจากข้อความ เรียกอีกอย่างว่า Syntactic analysis หรือการวิเคราะห์ไวยากรณ์ การเปรียบเทียบกฎของไวยากรณ์ที่เป็นทางการการวิเคราะห์ไวยากรณ์จะตรวจสอบความหมายของข้อความ ตัวอย่างเช่นประโยคเช่น“ Give me hot ice-cream” จะถูกปฏิเสธโดย parser หรือ syntactic analyzer

ในแง่นี้เราสามารถกำหนดการแยกวิเคราะห์หรือการวิเคราะห์วากยสัมพันธ์หรือการวิเคราะห์วากยสัมพันธ์ได้ดังนี้ -

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

เราสามารถเข้าใจความเกี่ยวข้องของการแยกวิเคราะห์ใน NLP ด้วยความช่วยเหลือของประเด็นต่อไปนี้ -

  • Parser ใช้เพื่อรายงานข้อผิดพลาดทางไวยากรณ์

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

  • ต้นไม้แยกวิเคราะห์ถูกสร้างขึ้นด้วยความช่วยเหลือของโปรแกรมแยกวิเคราะห์

  • Parser ใช้เพื่อสร้างตารางสัญลักษณ์ซึ่งมีบทบาทสำคัญใน NLP

  • Parser ยังใช้ในการสร้างตัวแทนระดับกลาง (IR)

การแยกวิเคราะห์แบบลึก Vs ตื้น

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

ตัวแยกวิเคราะห์ประเภทต่างๆ

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

ตัวแยกวิเคราะห์แบบเรียกซ้ำ

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

  • เป็นไปตามกระบวนการจากบนลงล่าง

  • พยายามตรวจสอบว่าไวยากรณ์ของอินพุตสตรีมถูกต้องหรือไม่

  • มันอ่านประโยคอินพุตจากซ้ายไปขวา

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

Shift- ลดตัวแยกวิเคราะห์

ต่อไปนี้เป็นประเด็นสำคัญบางประการเกี่ยวกับตัวแยกวิเคราะห์การลดการเปลี่ยนแปลง -

  • เป็นไปตามขั้นตอนง่ายๆจากล่างขึ้นบน

  • จะพยายามค้นหาลำดับของคำและวลีที่ตรงกับด้านขวามือของการผลิตไวยากรณ์และแทนที่ด้วยด้านซ้ายมือของการผลิต

  • ความพยายามข้างต้นในการค้นหาลำดับของคำจะดำเนินต่อไปจนกว่าทั้งประโยคจะลดลง

  • พูดง่ายๆก็คือตัวแยกวิเคราะห์ลดการเลื่อนจะเริ่มต้นด้วยสัญลักษณ์อินพุตและพยายามสร้างโครงสร้างตัวแยกวิเคราะห์จนถึงสัญลักษณ์เริ่มต้น

ตัวแยกวิเคราะห์แผนภูมิ

ต่อไปนี้เป็นประเด็นสำคัญบางประการเกี่ยวกับตัวแยกวิเคราะห์แผนภูมิ -

  • ส่วนใหญ่มีประโยชน์หรือเหมาะสำหรับไวยากรณ์ที่ไม่ชัดเจนรวมถึงไวยากรณ์ของภาษาธรรมชาติ

  • ใช้โปรแกรมแบบไดนามิกกับปัญหาการแยกวิเคราะห์

  • เนื่องจากการเขียนโปรแกรมแบบไดนามิกผลลัพธ์ที่ตั้งสมมติฐานบางส่วนจะถูกเก็บไว้ในโครงสร้างที่เรียกว่า 'แผนภูมิ'

  • 'แผนภูมิ' ยังสามารถใช้ซ้ำได้

ตัวแยกวิเคราะห์ Regexp

การแยกวิเคราะห์ Regexp เป็นหนึ่งในเทคนิคการแยกวิเคราะห์ที่ใช้กันมาก ต่อไปนี้เป็นประเด็นสำคัญบางประการเกี่ยวกับตัวแยกวิเคราะห์ Regexp -

  • ตามความหมายของชื่อจะใช้นิพจน์ทั่วไปที่กำหนดในรูปแบบของไวยากรณ์ที่ด้านบนของสตริงที่ติดแท็ก POS

  • โดยทั่วไปจะใช้นิพจน์ทั่วไปเหล่านี้เพื่อแยกวิเคราะห์ประโยคอินพุตและสร้างโครงสร้างการแยกวิเคราะห์จากสิ่งนี้

ตัวอย่าง

ต่อไปนี้เป็นตัวอย่างการทำงานของ Regexp Parser -

import nltk
sentence = [
   ("a", "DT"),
   ("clever", "JJ"),
   ("fox","NN"),
   ("was","VBP"),
   ("jumping","VBP"),
   ("over","IN"),
   ("the","DT"),
   ("wall","NN")
]
grammar = "NP:{<DT>?<JJ>*<NN>}" 
Reg_parser = nltk.RegexpParser(grammar)
Reg_parser.parse(sentence)
Output = Reg_parser.parse(sentence)
Output.draw()

เอาต์พุต

การแยกวิเคราะห์การพึ่งพา

Dependency Parsing (DP) ซึ่งเป็นกลไกการแยกวิเคราะห์ที่ทันสมัยซึ่งมีแนวคิดหลักคือหน่วยภาษาแต่ละคำเช่นคำเกี่ยวข้องกันโดยการเชื่อมโยงโดยตรง ลิงก์โดยตรงเหล่านี้มีอยู่จริง‘dependencies’ในภาษาศาสตร์ ตัวอย่างเช่นแผนภาพต่อไปนี้แสดงไวยากรณ์การพึ่งพาสำหรับประโยค“John can hit the ball”.

แพ็คเกจ NLTK

เรามีสองวิธีในการแยกวิเคราะห์การพึ่งพาด้วย NLTK -

Probabilistic ตัวแยกวิเคราะห์การพึ่งพาแบบฉายภาพ

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

ตัวแยกวิเคราะห์ Stanford

นี่เป็นอีกวิธีหนึ่งที่เราสามารถทำการแยกวิเคราะห์การพึ่งพาด้วย NLTK Stanford parser เป็นโปรแกรมแยกวิเคราะห์การพึ่งพาที่ทันสมัย NLTK มีกระดาษห่อหุ้มอยู่รอบ ๆ ในการใช้งานเราต้องดาวน์โหลดสองสิ่งต่อไปนี้ -

parser Stanford CoreNLP

รูปแบบภาษาสำหรับภาษาที่ต้องการ ตัวอย่างเช่นแบบจำลองภาษาอังกฤษ

ตัวอย่าง

เมื่อคุณดาวน์โหลดโมเดลแล้วเราสามารถใช้งานผ่าน NLTK ได้ดังนี้ -

from nltk.parse.stanford import StanfordDependencyParser
path_jar = 'path_to/stanford-parser-full-2014-08-27/stanford-parser.jar'
path_models_jar = 'path_to/stanford-parser-full-2014-08-27/stanford-parser-3.4.1-models.jar'
dep_parser = StanfordDependencyParser(
   path_to_jar = path_jar, path_to_models_jar = path_models_jar
)
result = dep_parser.raw_parse('I shot an elephant in my sleep')
depndency = result.next()
list(dependency.triples())

เอาต์พุต

[
   ((u'shot', u'VBD'), u'nsubj', (u'I', u'PRP')),
   ((u'shot', u'VBD'), u'dobj', (u'elephant', u'NN')),
   ((u'elephant', u'NN'), u'det', (u'an', u'DT')),
   ((u'shot', u'VBD'), u'prep', (u'in', u'IN')),
   ((u'in', u'IN'), u'pobj', (u'sleep', u'NN')),
   ((u'sleep', u'NN'), u'poss', (u'my', u'PRP$'))
]