ฉันกำลังอ่านบทความด้านล่างและฉันมีปัญหาในการทำความเข้าใจแนวคิดของการสุ่มตัวอย่างเชิงลบ
http://arxiv.org/pdf/1402.3722v1.pdf
ใครช่วยได้โปรด?
ฉันกำลังอ่านบทความด้านล่างและฉันมีปัญหาในการทำความเข้าใจแนวคิดของการสุ่มตัวอย่างเชิงลบ
http://arxiv.org/pdf/1402.3722v1.pdf
ใครช่วยได้โปรด?
คำตอบ:
แนวคิด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
ฝึกได้เร็วขึ้นมาก
word2vec
สำหรับคำใด ๆ ที่คุณมีรายการคำที่ต้องคล้ายกับคำนั้น (คลาสบวก) แต่คลาสเชิงลบ (คำที่ไม่คล้ายกับคำที่เรียกว่า targer) ถูกรวบรวมโดยการสุ่มตัวอย่าง
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
) และพิจารณาพวกเขาเป็นตัวอย่างเชิงลบ เทคนิคที่เราเลือกตัวอย่างจากคลังข้อมูลนี้เรียกว่าการสุ่มตัวอย่างเชิงลบ
อ้างอิง :
ผมเขียนบทความสอนเกี่ยวกับการสุ่มตัวอย่างเชิงลบที่นี่
เหตุใดเราจึงใช้การสุ่มตัวอย่างเชิงลบ -> เพื่อลดต้นทุนการคำนวณ
ฟังก์ชันต้นทุนสำหรับ 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)≈1
p(D=1|w,c_neg)≈0
K
เป็นการV -1
สุ่มตัวอย่างเชิงลบจะเหมือนกับแบบจำลอง vanilla skip-gram ความเข้าใจของฉันถูกต้องหรือไม่?