ในการปรับให้เรียบของ Kneser-Ney มีการจัดการคำที่มองไม่เห็นอย่างไร


15

จากสิ่งที่ฉันได้เห็นสูตรการปรับให้เรียบของ Kneser-Ney (ลำดับที่สอง) ไม่ทางใดก็ทางหนึ่ง

PKN2(wn|wn1)=max{C(wn1,wn)D,0}wC(wn1,w)+λ(wn1)×Pcont(wn)

กับ normalizing factorให้เป็นλ(wn1)

λ(wn1)=DwC(wn1,w)×N1+(wn1)

และความน่าจะเป็นอย่างต่อเนื่องPโอnเสื้อ(Wn)ของคำWn

Pcont(wn)=N1+(wn)wN1+(w)

ที่N1+(w)คือจำนวนของบริบทwที่เห็นในหรือ simplier จำนวนคำที่แตกต่างกันที่นำหน้าคำที่กำหนดWwจากสิ่งที่ฉันเข้าใจสามารถใช้สูตรซ้ำได้

ตอนนี้จะจัดการกับคำที่รู้จักในบริบทที่ไม่รู้จักอย่างชัดเจนสำหรับความยาว n-gram ที่แตกต่างกัน แต่สิ่งที่ไม่ได้อธิบายคือสิ่งที่ต้องทำเมื่อมีคำที่ไม่อยู่ในพจนานุกรม ฉันพยายามต่อไปตัวอย่างนี้ซึ่งระบุว่าในขั้นตอนการเรียกซ้ำสำหรับ unigrams, Pcont(/)=PKยังไม่มีข้อความ0(/)=1V{V} เอกสารที่ใช้แล้วนี้ - quoting เฉินและสามี - จะปรับสูตรข้างต้นเป็นPKยังไม่มีข้อความ1(W)=Pโอnเสื้อ(W)(w)

ฉันไม่เห็นวิธีการทำงานออกมาในการปรากฏตัวของคำที่ไม่รู้จักW=ไม่ทราบแม้ว่า ในกรณีเหล่านี้Pโอnเสื้อ(ไม่ทราบ)=0บางสิ่งบางอย่างเนื่องจากเห็นได้ชัดว่าคำที่ไม่รู้จักไม่ได้ดำเนินการใด ๆ เกี่ยวกับชุดฝึกอบรม ในทำนองเดียวกันนับ n-กรัมจะเป็นC(wn1,unknown)=00

นอกจากนี้ทั้งwC(wn1,w)อาจจะเป็นศูนย์ถ้าเรียงลำดับของคำที่ไม่รู้จัก - พูดว่าเป็นคำตอบของ OOD -

ฉันกำลังคิดถึงอะไร


ฉันกำลังดิ้นรนกับเคเอ็นด้วยเช่นกัน ฉันคิดว่าความน่าจะเป็นของ bigram ที่มองไม่เห็น P (w1w2) สามารถย้อนกลับไปที่ความน่าจะเป็นแบบต่อเนื่องของ unigram w2 ล่าสุด เมื่อคุณถูกทิ้งให้อยู่กับ unigram unseen ที่คุณไม่มีอะไร จะทำอย่างไรต่อไป ฉันไม่รู้
momobo

ฉันกำลังพยายามติดตั้ง KN ด้วยตัวเองในขณะนี้และติดอยู่กับปัญหาเดียวกันนี้ คุณสองคนในการหาทางออกหรือไม่?
jbaiter

ฉันกลับไปที่การปรับให้เรียบแบบ Good-Turing เพื่อให้มองไม่เห็น unigrams (ปรับฟังก์ชั่นพลังงานให้เหมาะสมกับความถี่และความถี่ของความถี่) ... ด้วยผลลัพธ์ที่แตกต่างกัน
ซันไซด์

คำตอบ:


6

Dan Jurafsky ได้ตีพิมพ์บทเกี่ยวกับโมเดลของ N-Gramซึ่งพูดถึงปัญหานี้เล็กน้อย:

เมื่อสิ้นสุดการเรียกซ้ำยูนิโค้ดจะถูกสอดแทรกการกระจายแบบสม่ำเสมอ:

PKN(w)=max(cKN(w)d,0)wcKN(w)+λ(ϵ)1|V|

ถ้าเราต้องการที่จะรวมคำที่ไม่รู้จัก<UNK>มันก็แค่รวมเป็นรายการคำศัพท์ปกติที่มีการนับศูนย์และด้วยเหตุนี้ความน่าจะเป็นของมันคือ:

λ(ϵ)|V|

ฉันได้พยายามที่จะหาสิ่งนี้หมายถึง แต่ฉันไม่แน่ใจว่าเพียงหมายถึง x หากเป็นกรณีนี้และคุณคิดว่าเมื่อจำนวนถึงศูนย์อาจเป็นไปที่ตาม:lim x 0 x λ ( ϵ ) dϵlimx0xλ(ϵ)d

λ(wi1)=dc(wi1)|{w:c(wi1,w)>0}|

จากนั้นคำที่ไม่รู้จักเพิ่งได้รับมอบหมายเศษส่วนของส่วนลดคือ:

λ(ϵ)|V|=d|V|

ฉันไม่มั่นใจเกี่ยวกับคำตอบนี้ แต่ต้องการออกไปที่นั่นในกรณีที่มันทำให้เกิดความคิดเพิ่มเติม

อัปเดต: ขุดรอบ ๆ ดูเหมือนว่าโดยทั่วไปแล้วจะใช้เพื่อแสดงสตริงว่าง ("") แต่ก็ยังไม่ชัดเจนว่าสิ่งนี้มีผลต่อการคำนวณอย่างไร ยังคงเป็นเดาที่ดีที่สุดของฉันϵλd|V|


2
คำตอบที่ดี แต่เหมือนคุณฉันไม่มั่นใจ 100% ฉันใช้เวอร์ชันของการวิจัยสคริปต์ perl Perl_en -us/um/redmond/groups/srg/papers/ ในภาษาไพ ธ อน - แต่รู้ว่ามันใช้ได้เฉพาะถ้าคุณมีคำศัพท์ปิด ) - เช่น unigrams ทดสอบทั้งหมดอยู่ในรถไฟด้วย เป็นข้อเสนอแนะโดยแจlagunita.stanford.edu/c4x/Engineering/CS-224N/asset/slp4.pdfฉันแทนที่ตัวอย่างแรกของแต่ละคำด้วย <UNK> ในช่วงก่อนการประมวลผล อย่างไรก็ตามเมื่อทำการแบ่งพาร์ติชันจะมี unigrams ทดสอบบางอย่างที่ไม่ได้อยู่ในขบวนเช่น "goofedup" ดังนั้นฉันใช้ d / | V | ที่นี่ ขอบคุณ!
Josh Morel

1

มีหลายวิธีในการฝึกอบรมรุ่นที่มีอยู่<UNK>แม้ว่า Jurafsky <UNK>แนะนำให้เลือกคำที่เกิดขึ้นน้อยมากในการฝึกอบรมครั้งและเพียงแค่เปลี่ยนให้พวกเขา

จากนั้นก็ฝึกความน่าจะเป็นได้ตามปกติ

ดูวิดีโอนี้เริ่มต้นที่ 3:40 -

https://class.coursera.org/nlp/lecture/19

อีกวิธีหนึ่งคือพิจารณาคำว่าเป็น<UNK>ครั้งแรกที่เห็นในการฝึกอบรม แต่จากประสบการณ์ของฉันวิธีนี้กำหนดความน่าจะเป็นให้กับมวลมาก<UNK>เกินไป


0

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

λ(ϵ)λ(ϵ)

λ(ϵ)=1wmax(CKN(w)d,0)wCKN(w)
CKN(w)

อีกทางเลือกหนึ่งคือการประเมิน<unk>ความน่าจะเป็นด้วยวิธีการที่แรนดี้กล่าวถึงและถือเป็นโทเค็นปกติ

λ(ϵ)|V|


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