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


9

ฉันรู้สึกทึ่งกับแนวคิดของรูปแบบสูงสุดของเอนโทรปีมาร์คอฟ (MEMM) และฉันกำลังคิดที่จะใช้มันสำหรับแท็กเกอร์ Speech (POS) ส่วนหนึ่ง ในขณะนี้ฉันใช้ลักษณนาม Maximum Entropy (ME) ทั่วไปเพื่อติดแท็กแต่ละคำ สิ่งนี้ใช้คุณสมบัติหลายอย่างรวมถึงสองแท็กก่อนหน้านี้

MEMM ใช้อัลกอริทึม Viterbi เพื่อค้นหาเส้นทางที่เหมาะสมผ่านห่วงโซ่มาร์คอฟ (เช่นเพื่อค้นหาแท็กชุดที่สมบูรณ์แบบที่สุดสำหรับประโยคแทนที่จะเป็นคำแต่ละคำที่เหมาะสมที่สุด อ่านเกี่ยวกับเรื่องนี้ดูเหมือนจะมีความสง่างามและความเรียบง่ายที่ยอดเยี่ยม อย่างไรก็ตามแต่ละสเตจจะอาศัย "ผลลัพธ์" ของสเตจก่อนหน้าเท่านั้น (เช่นตามเครือมาร์คอฟ)

อย่างไรก็ตามโมเดล ME ของฉันใช้สองขั้นตอนก่อนหน้า (เช่นแท็กสำหรับสองคำก่อนหน้านี้) ดูเหมือนว่าฉันมีวิธีที่เป็นไปได้สองวิธี:

  • เช่นเดียวกับการใช้ Viterbi แบบเดิมให้ใช้ชุดของเส้นทางที่จัดเก็บตามขั้นตอนเดียว (ก่อนหน้านี้) ตัวแยกประเภท ME ของฉันจะใช้ขั้นตอนนี้และ 'แช่แข็ง' ก่อนหน้านี้ (ถูกแช่แข็งในเส้นทางภายใต้การพิจารณา) เพื่อสร้างฟังก์ชันถ่ายโอน

  • หรือฉันเขียนอัลกอริทึมเพื่อติดตามสองขั้นตอน สิ่งนี้มีความซับซ้อนมากขึ้นและจะไม่เป็นโมเดลของมาร์คอฟที่แท้จริงอีกต่อไปเพราะฟังก์ชั่นถ่ายโอนแต่ละตัว (เช่นจาก ME Model) จะขึ้นอยู่กับสองขั้นตอนก่อนหน้านี้และไม่ใช่หนึ่งขั้นตอน

มันทำให้ฉันรู้ว่าสิ่งที่สองจะแม่นยำยิ่งขึ้นแม้ว่ามันจะซับซ้อนกว่าก็ตาม

ฉันยังไม่พบตัวอย่างใด ๆ ของสิ่งนี้ในระหว่างการค้นหาวรรณกรรม มันถูกลองแล้วหรือยัง? วิธีการสองขั้นตอนนี้ช่วยปรับปรุงความแม่นยำโดยรวมหรือไม่?

คำตอบ:


4

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

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

ฉันแบ่งข้อมูลของฉันออกเป็นสองรายการแบบสุ่ม: ข้อมูลการฝึกอบรมและข้อมูลการทดสอบ ฉันกำลังเรียกใช้ข้อมูลการทดสอบผ่านเครื่องแท็กเกอร์สูงสุดของเอนโทรปี และตัวเปลี่ยน MEMM ใหม่ของฉัน ดังนั้นพวกเขาเห็นข้อมูลการทดสอบเดียวกันทำให้สามารถเปรียบเทียบโดยตรง - เนื่องจากการสุ่มในข้อมูลที่ถูกเลือกฉันเห็นการเปลี่ยนแปลงระหว่างการทดสอบ (โดยทั่วไปประมาณ 0.2-0.4%)

การทดสอบครั้งแรกใช้ MEMM tagger ด้วยสเตจเดียว (เช่นเชนมาร์คอฟที่แท้จริง) สิ่งนี้ทำงานได้ดีกว่า ME tagger ธรรมดาประมาณ 0.1-0.25%

ต่อไปฉันลองวิธีสองขั้นตอนซึ่งดูเหมือนว่าควรถูกต้องมากกว่า อย่างไรก็ตามผลลัพธ์ก็ยิ่งน้อย บ่อยครั้งที่ผลลัพธ์จะเหมือนกันบางครั้งก็จะด้อยกว่าเล็กน้อย แต่อาจจะดีกว่าเล็กน้อย (+/- 0.05%)

ตัวแท็ก MEMM ช้า โอเคฉันไม่ได้ใช้การเพิ่มประสิทธิภาพใด ๆ แต่ขั้นตอนที่ 1 (เชนมาร์คอฟที่แท้จริง) นั้นช้ากว่า N เท่า (โดยที่ N = จำนวนป้ายกำกับ) เพราะนี่คือจำนวนเส้นทางที่ถ่ายโอนระหว่างแต่ละขั้นตอน การนำไปใช้งานแบบ 2 ระยะคือ N * N ช้าลง (เนื่องจากมีการถ่ายโอนเส้นทางจำนวนมากขึ้น) แม้ว่าการปรับให้เหมาะสมอาจทำให้สิ่งต่าง ๆ ดีขึ้น แต่นี่อาจช้าเกินไปสำหรับการใช้งานจริง

สิ่งหนึ่งที่ฉันพยายามคือการใช้ความน่าจะเป็นที่ต่ำกว่ากับเส้นทาง กล่าวคือ เส้นทาง Viterbi จะถูกตัดในระหว่างการทำซ้ำแต่ละครั้งที่มีเส้นทางทั้งหมดด้านล่างความน่าจะเป็นที่แน่นอน (ล็อกปัจจุบัน (เส้นทางทั้งหมด P) <- 20.0) จะถูกตัด สิ่งนี้จะทำงานได้เร็วขึ้นเล็กน้อย แต่คำถามยังคงเป็นว่ามันคุ้มค่าหรือไม่ ฉันคิดว่ามันคงไม่ใช่

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.