ชุดเครื่องมือภาษาธรรมชาติ - การแยกวิเคราะห์
การแยกวิเคราะห์และความเกี่ยวข้องใน 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$'))
]