การทำนายคำด้วยรูปแบบ Word2vec


20

ได้รับประโยค: "เมื่อฉันเปิด??ประตูก็จะเริ่มร้อนโดยอัตโนมัติ"

ฉันต้องการรับรายการคำศัพท์ที่เป็นไปได้หรือไม่? ด้วยความน่าจะเป็น

แนวคิดพื้นฐานที่ใช้ในรูปแบบ word2vec คือ "คาดการณ์" คำที่กำหนดบริบทโดยรอบ

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

มันเป็นเพียงผลรวมเชิงเส้นหรือไม่?

model.most_similar(positive=['When','I','open','the','door','it','starts' ,'heating','automatically'])

ฉันใช้อัลกอริทึมด้านบนและพบคำถาม: ทำไมจึงใช้ softmax ให้ฉันแสดงตัวอย่างของฟังก์ชั่นการฟื้นฟูสองแบบ: def softmax (w, t = 1.0): # ที่มา: gist.github.com/stober/1946926 e = np.exp (w / t) return e / np.sum ( e) def normalization (w): return w / np.sum (w) a = np.array ([. 0002, .0001, .01, .03, .03]) normalization การพิมพ์ (a) พิมพ์ softmax (a, t = 1 ) ลองเปรียบเทียบผลที่: [0.00496278 0.00248139 0.24813896 0.74441687] [0.24752496 0.24750021 0.24996263 0.25501221] ในขณะที่เราสามารถมองเห็น softmax ให้ .03 ประมาณความน่าจะเป็นเช่นเดียวกับเมื่อเทียบกับ 0001 (ซึ่งเป็น

คำตอบ:


9

Word2vec ทำงานในสองรุ่น CBOW และ skip-gram มาทำแบบจำลอง CBOW เมื่อคำถามของคุณดำเนินไปในลักษณะเดียวกันกับที่คาดเดาคำเป้าหมาย

โดยพื้นฐานแล้วตัวแบบพัฒนาเมทริกซ์น้ำหนักอินพุตและเอาต์พุตซึ่งขึ้นอยู่กับคำบริบทอินพุตและคำเป้าหมายเอาต์พุตด้วยความช่วยเหลือของเลเยอร์ที่ซ่อนอยู่ ดังนั้นการแพร่กระจายย้อนกลับจะถูกใช้เพื่ออัปเดตน้ำหนักเมื่อความแตกต่างของข้อผิดพลาดระหว่างเวกเตอร์เอาต์พุตที่คาดการณ์และเมทริกซ์เอาต์พุตปัจจุบัน

โดยทั่วไปการทำนายคำเป้าหมายจากคำบริบทที่กำหนดจะใช้เป็นสมการเพื่อให้ได้เมทริกซ์น้ำหนักที่เหมาะสมที่สุดสำหรับข้อมูลที่กำหนด

เพื่อตอบส่วนที่สองดูเหมือนว่าซับซ้อนกว่าเพียงผลรวมเชิงเส้น

  1. รับเวกเตอร์คำทั้งหมดของคำบริบท
  2. หาค่าเฉลี่ยเพื่อหาhขนาดเวกเตอร์เลเยอร์ที่ซ่อนอยู่Nx1
  3. รับเมทริกซ์เอาต์พุตsyn1( word2vec.cหรือgensim) ซึ่งมีขนาดVxN
  4. คูณsyn1ด้วยhเวกเตอร์ที่ได้จะzมีขนาดVx1
  5. คำนวณเวกเตอร์ความน่าจะเป็นที่y = softmax(z)มีขนาดVx1โดยที่ความน่าจะเป็นสูงสุดแสดงถึงการเป็นตัวแทนร้อนแรงของคำเป้าหมายในคำศัพท์ Vระบุขนาดของคำศัพท์และNระบุขนาดของเวกเตอร์การฝัง

ที่มา: http://cs224d.stanford.edu/lecture_notes/LectureNotes1.pdf

อัปเดต: โมเดลหน่วยความจำระยะสั้นระยะยาวกำลังทำงานได้อย่างยอดเยี่ยมในการทำนายคำถัดไป seq2seqแบบจำลองจะอธิบายในtensorflow กวดวิชา นอกจากนี้ยังมีบล็อกโพสต์เกี่ยวกับการสร้างข้อความ


ขอขอบคุณ ! คุณตระหนักถึงการดำเนินการใด ๆ นี้หรือไม่? (เป็นส่วนหนึ่งของ gensim เช่น) ไม่อย่างนั้นมันไม่ซับซ้อนเกินกว่าจะคำนวณได้
DED

สวัสดีคุณช่วยให้ฉันรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการดึงเอาท์พุทเมทริกซ์ (syn1 ในตัวอย่างของคุณ) จากแบบจำลองการฝัง w2v ที่ผ่านการฝึกอบรมแล้วได้หรือไม่? ฉันคิดว่า w2v ลดทอนเมทริกซ์เอาต์พุตเมื่อเสร็จสิ้นการฝึกอบรม
Charles Chow

จากความเข้าใจของฉันคำตอบของคำถามที่ 2 คือสร้างเมทริกซ์เอาต์พุตใหม่ถูกต้องหรือไม่
Charles Chow

1
ฉันคิดว่ามันคุ้มค่าที่จะสังเกตว่านี่ไม่ทำงานเหมือนลักษณนามลำดับ การเรียงลำดับของคำจะถูกละเว้น
displayname

หนึ่งสามารถรับเอาท์พุทเมทริกซ์syn1โดยเพียงแค่บันทึกรูปแบบ ใช่การสั่งซื้อจะถูกละเว้นสำหรับแอปพลิเคชันหนึ่งอาจไปกับโมเดลที่ใช้ LSTM ตามจริง
yazhi

4

เพิ่มการคาดคะเนคำที่หายไปเป็นฟังก์ชันการทำงานใน Word2Vec เวอร์ชันล่าสุด แน่นอนว่าประโยคของคุณจำเป็นต้องตรงกับไวยากรณ์รูปแบบการป้อนข้อมูลของ Word2Vec ที่ใช้สำหรับการฝึกอบรมรูปแบบ (ตัวอักษรตัวพิมพ์เล็กคำหยุด ฯลฯ )

การใช้งานสำหรับการคาดเดาคำ 3 อันดับแรกของ "เมื่อฉันเปิด? ประตู":

print(model.predict_output_word(['When','I','open','door']), topn = 3)

รู้ได้อย่างไรว่าคำcenterนั้นอยู่ระหว่างคำที่ 3 ถึงที่ 4? นั่นไม่สมเหตุสมผลสำหรับฉัน ฉันคิดว่าจะสามารถใส่คำบริบทจำนวนแม้กระทั่งและจะเลือกคำระหว่างfloor(len(n)/2))และfloor(len(n)/2))+1
bmc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.