ฉันจะสร้างป่าของต้นไม้ไวยากรณ์จากเวกเตอร์ Earley ได้อย่างไร


9

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

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


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

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

@babou สิ่งที่ฉันเรียกว่า"Earley vector"คือการนำเสนอแบบตารางของโครงสร้างข้อมูลที่สร้างโดย parser มันเป็นคำที่อาจารย์ใช้ในภาษาของฉันใช้ในขณะที่พูดถึงมัน ควรสังเกตว่าภาษาหลักของฉันไม่ใช่ภาษาอังกฤษดังนั้นนี่อาจเป็นความพยายามที่ไม่ดีในการแปลคำศัพท์ การอ้างอิงทางเทคนิคที่ฉันพูดถึงคือกระดาษของ Earley ฉันเข้าหามัน แต่มันเป็นการข่มขู่เล็กน้อยสำหรับผู้เริ่มต้นที่แท้จริงอย่างฉัน
Stefano Sanfilippo

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

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

คำตอบ:


9

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

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

ความซับซ้อนของเวลากรณีที่เลวร้ายที่สุดคือตามที่รู้จักกันดีO(n3)

การอ้างอิงที่ดีที่สุดสำหรับอัลกอริธึมของEarley นั้นแน่นอนว่าเป็นกระดาษของ Earleyแต่มันไม่ชัดเจนมากนักเกี่ยวกับการสร้างป่าแจง นี่อาจเป็นธุรกิจที่ยุ่งเหยิงมากกว่าการพูดอย่างรวดเร็วของมาตรา 7 หน้า 101 จะปรากฏขึ้น ในความเป็นจริงเออร์ลีย์ไม่ได้พูดถึงการแยกวิเคราะห์ป่าหรือป่า แต่เป็น " การเป็นตัวแทนของต้นไม้แจงที่เป็นไปได้ทั้งหมด " และมีเหตุผลที่ดีคือถ้าเขาพยายามสร้างป่าตามหลักไวยากรณ์พื้นที่ของเขา (ดังนั้นเวลา) ความซับซ้อนที่ถูกผูกไว้จะปีนขึ้นไปที่โดยที่มีขนาดที่ยาวที่สุด กฎทางด้านขวามือ นี่คือเหตุผลที่อัลกอริทึมอื่นใช้ไวยากรณ์ในรูปแบบไบนารี (ไม่จำเป็นต้องเป็น Chomsky Normal Form (CNF))O(ns+1)s

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

หนึ่งวิธีที่ดีที่จะเข้าใจว่าป่าจะได้รับน่าจะเป็นที่จะมองมันในกรณีที่ง่ายขั้นตอนวิธีการ CYK มันมักจะอธิบายว่าเป็นตัวจำแนกลายมือและด้าน parserจะถูกเพิ่มในตอนท้าย คุณสามารถดูคำอธิบายในวิกิพีเดีย ข้อมูลที่จำเป็นในการสร้างฟอเรสต์คือสิ่งที่พวกเขาเก็บไว้ในตารางของ "ตัวชี้" Backpointers นั้นเป็นตัวชี้ไปยังสตริงย่อย (สัญลักษณ์ที่เกี่ยวข้อง) ซึ่งเป็นส่วนประกอบของสตริงตามกฎบางอย่าง พวกเขาให้วิธีที่เป็นไปได้ทั้งหมดของการแยกสตริงย่อย จำได้ว่า CYK ใช้รูปแบบไบนารีโดยปกติจะเป็น CNF เพื่อให้สิ่งต่าง ๆ ง่ายขึ้น โปรแกรมแยกวิเคราะห์ CYK มีโครงสร้างการเขียนโปรแกรมแบบไดนามิกเหมือนกับ Earley โดยพื้นฐาน แต่ง่ายกว่ามาก ดังนั้นการเข้าใจว่ามันจะช่วยได้มาก

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

ในส่วนที่ 7 ของบทความของ Earley เขาอธิบายว่าเพื่อ "ทำให้ตัวจำแนกลายมือเป็น parser" เพื่อให้สามารถกู้คืนต้นไม้แยกได้จำเป็นต้องติดตามวิธีการทำสำเร็จ

ทุกครั้งที่เราทำการคอมไพล์เตอร์เพิ่มสถานะ (ไม่สนใจ lookahead) เราสร้างตัวชี้จากอินสแตนซ์ของในสถานะนั้นไปยังสถานะซึ่งทำให้เราต้องทำการผ่าตัด สิ่งนี้บ่งบอกว่าEαD.βgDDγ.fD ถูกแยกวิเคราะห์เป็น γ. ในกรณีที่ D คลุมเครือจะมีชุดของพอยน์เตอร์จากนั้นหนึ่งชุดสำหรับการดำเนินการคอมไพเลอร์แต่ละอันที่ทำให้เกิดEαD.βgที่จะเพิ่มลงในชุดสถานะเฉพาะ แต่ละสัญลักษณ์ใน γ จะมีพอยน์เตอร์จากมัน (ยกเว้นว่ามันจะเป็นเทอร์มินัล) และอื่น ๆ ดังนั้นจึงเป็นตัวแทนของต้นไม้ที่ได้รับมา D.

โปรดทราบว่าในข้อความนี้ f และ g เป็นดัชนีในสตริงที่แจงโดยชี้ตำแหน่งที่การรับรู้ของกฎด้านซ้ายเริ่มต้น (เมื่อสัญลักษณ์ทางด้านขวาถูกทำนายไว้แล้วดังนั้น f เป็นดัชนีสตริงที่การรับรู้ Dγ เริ่มแล้วและมันก็จบที่ดัชนี g. "พอยน์เตอร์ตัวเต็ม" เหล่านี้เทียบเท่ากับ Earley ของแบ็คพอยน์ที่อธิบายไว้ (ไม่ดีในวิกิพีเดีย) สำหรับรุ่น parser ของ CYK

จากตัวชี้ดังกล่าว (ดังอธิบายในใบเสนอราคา) เรารู้ว่า D ในอินสแตนซ์ของกฎ EαD.βg สามารถพัฒนาตัวเองเป็นต้นไม้ (หรือป่า) ที่แยกวิเคราะห์สตริงการป้อนข้อมูล w จากดัชนี f+1 เพื่อจัดทำดัชนี gซึ่งเราทราบ wf+1:g. โหนดด้านล่างทันทีD จะได้รับตามกฎ Dγ. โดยมองหาความสมบูรณ์ที่นำไปสู่Dγ.f จากนั้นเราสามารถหาตัวชี้อื่น ๆ ที่บอกถึงสัญลักษณ์สุดท้ายของ Dได้รับและข้อมูลเพิ่มเติมเกี่ยวกับต้นแจงที่เป็นไปได้ นอกจากนี้โดยการดูความสมบูรณ์ที่รับรู้ถึงสัญลักษณ์ก่อนที่จะอยู่ในสภาพชุด earleir คุณจะพบว่ามันได้มาอย่างไรและอื่น ๆ

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

แต่ฉันก็ข้ามส่วนที่ยุ่งเหยิงไปด้วย สมมติว่าคุณมีกฎ UXYZซึ่งฉันเลือกด้วยมือขวาที่ยาวเกินกว่า 2 สัญลักษณ์และกฎอื่น WUVสำหรับไวยากรณ์ที่ไม่ชัดเจน

มันอาจเกิดขึ้นได้ดีที่ parser จะแยกวิเคราะห์ wf+1:g เข้าไป X, wg+1:h เข้าไป Y และทั้งคู่ wh+1:i และ wh+1:j เข้าไป Z. ดังนั้นด้วยกฎUXYZ, ทั้งคู่ wf+1:i และ wf+1:j แยกเป็น U.

จากนั้นอาจเป็นได้ว่าทั้งสองอย่าง wi+1:k และ wj+1:k ทั้งแยกวิเคราะห์ V. จากนั้นด้วยกฎWUVสตริง wf+1:k แยกเป็น W ในสองวิธีที่แตกต่างซึ่งสอดคล้องกับความกำกวมของไวยากรณ์

แน่นอนว่าเพื่อหลีกเลี่ยงการคำนวณซ้ำอัลกอริธึมของ Earley จะพยายามแบ่งปันให้มากที่สุดเท่าที่จะทำได้ในการคำนวณแบบแยกวิเคราะห์สองครั้ง สิ่งที่มันจะแบ่งปันจริง ๆ แล้วก็คือการจดจำ (และการแยกวิเคราะห์) ของwf+1:g และ wg+1:h เข้าไป X และ Y. แต่มันจะทำอะไรได้มากกว่าเดิม: มันจะแบ่งปันจุดเริ่มต้นของการแยกวิเคราะห์สองแบบที่รับรู้U ด้วยกฎ UXYZ. สิ่งที่ฉันหมายถึงคือรัฐUXY.Zf จะพบเพียงครั้งเดียว (ในส่วนที่เกี่ยวกับสิ่งที่ฉันอธิบาย) ในสถานะที่กำหนด Sh. มันจะเป็นส่วนทั่วไปของทั้งสองแยกวิเคราะห์ แน่นอนสิ่งต่าง ๆ จะแตกต่างชั่วคราวในขณะที่แยกวิเคราะห์Z ตั้งแต่พวกเขาสอดคล้องกับสารตั้งต้นที่แยกจากกันจนกว่าพวกเขาจะมาบรรจบกันอีกครั้งเมื่อทุกอย่างแยกวิเคราะห์เป็น W เมื่อรัฐ WUV.f ผลิตสองครั้งในชุดรัฐ Sk.

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

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

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

คุณอาจพบข้อมูลทั่วไปเกี่ยวกับปัญหาป่านี้แยกเป็นสองคำตอบอื่น ๆ ฉันให้: /cstheory/7374#18006และhttps://linguistics.stackexchange.com/questions/4619#6120 แต่พวกเขาไม่ได้ลงรายละเอียดเฉพาะของอัลกอริทึมของ Earley


เช่นเดียวกับการแยก CYK มันก็คุ้มค่าที่จะดูการแยกวิเคราะห์ GLR
นามแฝง

1
@ นามแฝงการรู้และทำความเข้าใจกับการแยกวิเคราะห์ CF ในรูปแบบต่าง ๆ อย่างแน่นอนไม่ได้ทำร้ายและฉันขอแนะนำให้อ้างอิงมากที่สุดกับการอ้างอิงทั้งสองเมื่อสิ้นสุดคำตอบ อย่างไรก็ตามการเลือก CYK ของฉันไม่ได้เกิดจากโอกาส มันใช้ร่วมกับอัลกอริทึมของ Earley ซึ่งเป็นคุณสมบัติของการตีความโดยใช้ไวยากรณ์โดยตรงแทนที่จะใช้ตารางที่สร้างโดยการรวบรวมไวยากรณ์เป็นเครื่องกดลง (เช่นใน GLR, GLL, GPrec) ดังนั้นความสัมพันธ์ระหว่างกระบวนการจดจำและการสร้างต้นไม้ / ป่าจึงชัดเจนยิ่งขึ้น CKY ยังเป็นอัลกอริทึมที่ง่ายที่สุดด้วยข้อยกเว้นหนึ่งข้อ
Babou
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.