word2vec: การสุ่มตัวอย่างเชิงลบ (ในระยะคนธรรมดา)?


91

ฉันกำลังอ่านบทความด้านล่างและฉันมีปัญหาในการทำความเข้าใจแนวคิดของการสุ่มตัวอย่างเชิงลบ

http://arxiv.org/pdf/1402.3722v1.pdf

ใครช่วยได้โปรด?


3
ที่เกี่ยวข้อง: stats.stackexchange.com/questions/282425/…
Pinocchio

คำตอบ:


166

แนวคิดword2vecคือการเพิ่มความคล้ายคลึงกัน (dot product) ระหว่างเวกเตอร์สำหรับคำที่อยู่ใกล้กัน (ในบริบทของกันและกัน) ในข้อความและลดความคล้ายคลึงกันของคำที่ไม่มี ในสมการ (3) ของกระดาษที่คุณเชื่อมโยงให้เพิกเฉยต่อการยกกำลังสักครู่ คุณมี

      v_c * v_w
 -------------------
   sum(v_c1 * v_w)

ตัวเศษเป็นความคล้ายคลึงกันระหว่างคำc(บริบท) และw(เป้าหมาย) คำ ตัวหารคำนวณความคล้ายคลึงกันของบริบทอื่น ๆ ทั้งหมดและคำเป้าหมายc1 wการเพิ่มอัตราส่วนนี้ให้มากที่สุดทำให้มั่นใจได้ว่าคำที่ปรากฏใกล้กันมากขึ้นในข้อความจะมีเวกเตอร์ที่คล้ายกันมากกว่าคำที่ไม่มี c1อย่างไรก็ตามการคำนวณนี้อาจจะช้ามากเพราะมีหลายบริบท การสุ่มตัวอย่างเชิงลบเป็นวิธีหนึ่งในการแก้ไขปัญหานี้เพียงแค่เลือกบริบทสองสามรายการc1โดยสุ่ม ผลลัพธ์ที่ได้คือถ้าcatปรากฏในบริบทของfoodเวกเตอร์ของfoodจะคล้ายกับเวกเตอร์ของcat(ซึ่งวัดโดยผลิตภัณฑ์ดอท) มากกว่าเวกเตอร์ของคำอื่น ๆ ที่สุ่มเลือก(เช่นdemocracy, greed, Freddy) แทนคำอื่น ๆ ทั้งหมดในภาษา ทำให้word2vecฝึกได้เร็วขึ้นมาก


15
ขอบคุณหรือคำอธิบายที่ดี ฉันคิดว่ามันเป็นแค่การสุ่มตัวอย่าง แต่คุณรู้ไหมว่าทำไมถึงเรียกว่า "ลบ"?
HappyCoding

46
คำศัพท์นี้ยืมมาจากการจำแนกซึ่งเป็นการประยุกต์ใช้เครือข่ายประสาทเทียมทั่วไป คุณมีตัวอย่างเชิงบวกและเชิงลบมากมาย ด้วยword2vecสำหรับคำใด ๆ ที่คุณมีรายการคำที่ต้องคล้ายกับคำนั้น (คลาสบวก) แต่คลาสเชิงลบ (คำที่ไม่คล้ายกับคำที่เรียกว่า targer) ถูกรวบรวมโดยการสุ่มตัวอย่าง
mbatchkarov

40

Computing Softmax (ฟังก์ชันในการพิจารณาว่าคำใดคล้ายคลึงกับคำเป้าหมายปัจจุบัน) มีราคาแพงเนื่องจากต้องใช้การสรุปคำทั้งหมดในV (ตัวหาร) ซึ่งโดยทั่วไปจะมีขนาดใหญ่มาก

ป้อนคำอธิบายภาพที่นี่

สามารถทำอะไรได้บ้าง?

มีการเสนอกลยุทธ์ที่แตกต่างกันเพื่อประมาณค่า softmax วิธีการเหล่านี้สามารถแบ่งออกเป็นวิธีที่อิงตามsoftmaxและวิธีการสุ่มตัวอย่าง วิธีการที่ใช้ Softmaxเป็นวิธีการที่ทำให้ชั้น softmax ไม่เสียหาย แต่ปรับเปลี่ยนสถาปัตยกรรมเพื่อปรับปรุงประสิทธิภาพ (เช่น softmax ตามลำดับชั้น) ในทางกลับกันวิธีการสุ่มตัวอย่างใช้กับเลเยอร์ softmax โดยสิ้นเชิงและปรับฟังก์ชันการสูญเสียอื่น ๆ ที่ใกล้เคียงกับ softmax แทน (โดยประมาณการทำให้เป็นมาตรฐานในตัวส่วนของ softmax กับการสูญเสียอื่น ๆ ที่มีราคาถูกในการคำนวณเช่น การสุ่มตัวอย่างเชิงลบ)

ฟังก์ชันการสูญเสียใน Word2vec มีลักษณะดังนี้:

ป้อนคำอธิบายภาพที่นี่

ลอการิทึมใดที่สามารถย่อยสลายเป็น:

ป้อนคำอธิบายภาพที่นี่

ด้วยสูตรทางคณิตศาสตร์และการไล่ระดับสี (ดูรายละเอียดเพิ่มเติมที่6 ) จะแปลงเป็น:

ป้อนคำอธิบายภาพที่นี่

อย่างที่คุณเห็นมันถูกแปลงเป็นงานการจัดประเภทไบนารี (y = 1 คลาสบวก y = 0 คลาสลบ) เนื่องจากเราต้องการป้ายกำกับเพื่อดำเนินการจัดประเภทไบนารีของเราเราจึงกำหนดให้คำบริบททั้งหมดcเป็นป้ายกำกับจริง (y = 1, ตัวอย่างบวก) และkสุ่มเลือกจาก corpora เป็นป้ายกำกับเท็จ (y = 0, ตัวอย่างเชิงลบ)


ดูย่อหน้าต่อไปนี้ สมมติว่าคำเป้าหมายของเราคือ " Word2vec " พร้อมหน้าต่าง 3 Theคำบริบทของเรา: widely, popular, algorithm, was, developed, คำบริบทเหล่านี้ถือเป็นป้ายกำกับเชิงบวก เราต้องการป้ายกำกับเชิงลบด้วย เราสุ่มเลือกคำบางคำจากคลัง ( produce, software, Collobert, margin-based, probabilistic) และพิจารณาพวกเขาเป็นตัวอย่างเชิงลบ เทคนิคที่เราเลือกตัวอย่างจากคลังข้อมูลนี้เรียกว่าการสุ่มตัวอย่างเชิงลบ

ป้อนคำอธิบายภาพที่นี่

อ้างอิง :


1
สวัสดี @amir คำถามเริ่มต้นของฉันคือฉันมีปัญหาบางอย่างเข้าใจแนวคิดของการสุ่มตัวอย่างเชิงลบ ...
Andy K

1
อธิบายได้ดีมากและมีเทคนิคมากกว่าคำตอบที่ยอมรับได้เล็กน้อย ดังนั้นสถานการณ์ SO ที่สมบูรณ์แบบ: อ่านคำตอบที่ได้รับการยอมรับเพื่อรับแนวคิดจากนั้นจึงตอบคำตอบนี้เพื่อทำความเข้าใจโดยละเอียด
Ursin Brunner

22

ผมเขียนบทความสอนเกี่ยวกับการสุ่มตัวอย่างเชิงลบที่นี่

เหตุใดเราจึงใช้การสุ่มตัวอย่างเชิงลบ -> เพื่อลดต้นทุนการคำนวณ

ฟังก์ชันต้นทุนสำหรับ vanilla Skip-Gram (SG) และ Skip-Gram negative sampling (SGNS) มีลักษณะดังนี้:

ป้อนคำอธิบายภาพที่นี่

สังเกตว่าTคือจำนวนคำศัพท์ทั้งหมด เทียบเท่ากับV. กล่าวอีกนัยหนึ่งT= V.

การแจกแจงความน่าจะเป็นp(w_t+j|w_t)ใน SG คำนวณสำหรับคำVศัพท์ทั้งหมดในคลังข้อมูลด้วย:

ป้อนคำอธิบายภาพที่นี่

Vสามารถเกินหมื่นได้อย่างง่ายดายเมื่อฝึกรุ่น Skip-Gram ความน่าจะเป็นต้องคำนวณVครั้งทำให้มีราคาแพงในการคำนวณ นอกจากนี้ปัจจัยการทำให้เป็นมาตรฐานในตัวส่วนต้องใช้Vการคำนวณเพิ่มเติม

ในทางกลับกันการแจกแจงความน่าจะเป็นใน SGNS คำนวณด้วย:

ป้อนคำอธิบายภาพที่นี่

c_posเป็นเวกเตอร์คำสำหรับคำบวกและW_negเป็นเวกเตอร์คำสำหรับKตัวอย่างเชิงลบทั้งหมดในเมทริกซ์น้ำหนักเอาต์พุต ด้วย SGNS ความน่าจะเป็นจะต้องคำนวณเพียงK + 1ครั้งเดียวKโดยทั่วไปจะอยู่ระหว่าง 5 ~ 20 นอกจากนี้ไม่จำเป็นต้องมีการวนซ้ำเพิ่มเติมเพื่อคำนวณตัวประกอบการทำให้เป็นมาตรฐานในตัวส่วน

ด้วย SGNS จะมีการอัปเดตน้ำหนักเพียงเศษเสี้ยวสำหรับแต่ละตัวอย่างการฝึกในขณะที่ SG อัปเดตน้ำหนักทั้งหมดนับล้านสำหรับตัวอย่างการฝึกแต่ละครั้ง

ป้อนคำอธิบายภาพที่นี่

SGNS บรรลุเป้าหมายนี้ได้อย่างไร? -> โดยการเปลี่ยนงานการจำแนกหลายประเภทให้เป็นงานการจำแนกไบนารี

ด้วย SGNS เวกเตอร์คำจะไม่สามารถเรียนรู้ได้อีกต่อไปโดยการทำนายบริบทของคำกลาง มันเรียนรู้ที่จะแยกความแตกต่างของคำตามบริบทจริง (เชิงบวก) จากคำที่สุ่มวาด (เชิงลบ) จากการกระจายสัญญาณรบกวน

ป้อนคำอธิบายภาพที่นี่

ในชีวิตจริงคุณมักจะไม่ได้สังเกตregressionด้วยคำพูดแบบสุ่มเหมือนหรือGangnam-Style pimplesแนวคิดคือถ้าแบบจำลองสามารถแยกแยะระหว่างคู่ที่เป็นไปได้ (บวก) กับคู่ที่ไม่น่าจะเป็นไปได้ (เชิงลบ) จะได้เรียนรู้เวกเตอร์คำที่ดี

ป้อนคำอธิบายภาพที่นี่

ในรูปด้านบนคู่คำ - บริบทเชิงบวกปัจจุบันคือ ( drilling, engineer) K=5ตัวอย่างลบจะสุ่มจากการกระจายเสียง : minimized, primary, concerns, ,led pageในฐานะที่เป็นรุ่น iterates ผ่านตัวอย่างการฝึกอบรมน้ำหนักจะเพิ่มประสิทธิภาพเพื่อให้ความน่าจะเป็นในเชิงบวกทั้งคู่ออกจะและความน่าจะเป็นคู่เชิงลบจะออกp(D=1|w,c_pos)≈1p(D=1|w,c_neg)≈0


1
T คือจำนวนโทเค็น (คำที่เกิดขึ้นในข้อความ) V สำหรับคำศัพท์ (คำที่ไม่ซ้ำกัน) ฉันจะพูด
อดัม

หากเราตั้งค่าKเป็นการV -1สุ่มตัวอย่างเชิงลบจะเหมือนกับแบบจำลอง vanilla skip-gram ความเข้าใจของฉันถูกต้องหรือไม่?
Shashwat

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