การเรียนรู้คุณลักษณะที่ไม่ได้รับการสนับสนุนสำหรับ NER


11

ฉันใช้ระบบ NER ด้วยการใช้อัลกอริธึม CRF กับคุณลักษณะแบบ handcrafted ของฉันที่ให้ผลลัพธ์ค่อนข้างดี สิ่งหนึ่งคือฉันใช้คุณสมบัติที่แตกต่างมากมายรวมถึงแท็ก POS และบทแทรก

ตอนนี้ฉันต้องการสร้าง NER เดียวกันสำหรับภาษาอื่น ปัญหานี่คือฉันไม่สามารถใช้แท็ก POS และบทแทรก ฉันเริ่มอ่านบทความเกี่ยวกับการเรียนรู้อย่างลึกล้ำและการเรียนรู้คุณสมบัติที่ไม่มีผู้ดูแล

คำถามของฉันคือ:

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

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

คำตอบ:


5

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

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

เวกเตอร์ที่มีความหนาแน่นสูงเหล่านี้มีคุณสมบัติที่น่าดึงดูดใจซึ่งคำที่มีความหมายเชิงความหมายหรือคล้ายคลึงกันมีการเป็นตัวแทนเวกเตอร์ที่คล้ายกัน เลขคณิตพื้นฐานของเวกเตอร์แสดงให้เห็นถึงความสัมพันธ์ระหว่างคำที่น่าสนใจ
ตัวอย่างเช่น vector ("Paris") - vector ("France") + vector ("อิตาลี") ให้ผลเวกเตอร์ที่ค่อนข้างคล้ายกับ vector ("Rome")

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

สำหรับเรื่องนั้น LDA และ LSA ยังเป็นตัวเลือกที่ถูกต้องสำหรับการเรียนรู้คุณลักษณะที่ไม่ได้รับการสนับสนุน - ทั้งความพยายามในการแสดงคำว่าเป็นการรวมกันของ "หัวข้อ" และการแสดงคำที่มีความหนาแน่นสูง

สำหรับข้อความภาษาอังกฤษ Google แจกจ่ายรุ่น word2vec ที่ถูกรวบรวมไว้บนชุดข้อมูล Google News ขนาดใหญ่จำนวน 100 พันล้านคำ แต่สำหรับภาษาอื่นคุณจะต้องฝึกโมเดลของคุณเอง


เฮ้กำปั้นฉันอยากจะขอบคุณสำหรับคำตอบของคุณ ฉันมีอีกหนึ่งคำถาม เวกเตอร์คำที่ส่งคืนมาจากอัลกอริทึม word2vec มีค่าลอยดังนั้นคำที่ใหญ่และใหญ่กว่าจะมีเวกเตอร์ที่อยู่ในพื้นที่เวกเตอร์ แต่ค่าของเวกเตอร์อาจแตกต่างกันโดยสิ้นเชิง ตัวอย่างใหญ่ = [0.1, 0.2, 0,3] และใหญ่กว่า = [0.11, 0.21, 0.31] นั่นไม่ใช่ปัญหาสำหรับอัลกอริทึม CRF หรือไม่เนื่องจากอัลกอริทึมนี้จะถือว่าพวกเขาไม่ใช่ simillar มีการประมวลผลเพิ่มเติมที่ควรทำก่อนที่จะใช้คำว่าเวคเตอร์ใน CRF หรือไม่? ฉันหวังว่าคำถามของฉันจะชัดเจนเพียงพอ
MaticDiba

4

ในบทความฉบับปี 2014 นี้( GitHub ) ผู้เขียนได้เปรียบเทียบกลยุทธ์หลายประการในการผสมผสานคำว่า embeddings ในระบบ NER ที่ใช้ CRF รวมถึงการฝังแบบหนาแน่นการฝังแบบ binerized การฝังคลัสเตอร์และวิธีต้นแบบใหม่ การใช้เวกเตอร์ที่หนาแน่นโดยตรงตามที่แนะนำโดย vlad เป็นวิธีที่ตรงไปตรงมาที่สุด แต่ก็มีประสิทธิภาพน้อยที่สุดในการประเมินผลหลาย ๆ แบบ

ฉันใช้แนวคิดต้นแบบในโครงการ NER เฉพาะโดเมนของฉันและทำงานได้ดีสำหรับฉัน


3

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

ตัวอย่างเช่นคำว่า "jungle" มี 5 มิติ: 0.1 0.4 0.8 0.2 0.9

จากนั้น CRFSuite จะใช้คำ + คุณสมบัติเป็น:

LABEL f1: 0.1 f2: 0.4 f3: 0.8 f4: 0.2 f5: 0.9

โดยที่คุณแทนที่ `` LABEL '' โดยสตริงจริงและคุณแยกช่องว่างทั้งหมดด้วยแท็บ (นั่นคือรูปแบบสำหรับ CRFSuite)

ไม่แน่ใจสำหรับแพ็คเกจอื่น ๆ

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