การใช้ word2vec กับไฟล์ข้อความขนาดเล็ก


11

ฉันใหม่โดยสิ้นเชิงกับ word2vec ดังนั้นโปรดอดทนกับฉัน ฉันมีชุดไฟล์ข้อความแต่ละอันมีชุดทวีตอยู่ระหว่าง 1,000-3,000 ฉันเลือกคำหลักทั่วไป ("kw1") และต้องการค้นหาคำที่มีความหมายเชิงความหมายสำหรับ "kw1" โดยใช้ word2vec ตัวอย่างเช่นหากคำหลักคือ "apple" ฉันคาดว่าจะเห็นคำที่เกี่ยวข้องเช่น "ipad" "os" "mac" ... ตามไฟล์อินพุต ดังนั้นชุดคำศัพท์ที่เกี่ยวข้องสำหรับ "kw1" นี้จะแตกต่างกันสำหรับไฟล์อินพุตแต่ละไฟล์เนื่องจาก word2vec จะได้รับการฝึกอบรมในไฟล์แต่ละไฟล์ (เช่นไฟล์อินพุต 5 ไฟล์เรียกใช้ word2vec 5 ครั้งในแต่ละไฟล์)

เป้าหมายของฉันคือค้นหาชุดคำศัพท์ที่เกี่ยวข้องสำหรับไฟล์อินพุตแต่ละไฟล์ที่มีคำหลักทั่วไป ("kw1") ซึ่งจะใช้เพื่อวัตถุประสงค์อื่น

คำถาม / ข้อสงสัยของฉันคือ:

  • มันสมเหตุสมผลหรือไม่ที่จะใช้ word2vec สำหรับงานเช่นนี้? จะใช้เทคนิคหรือไม่หากพิจารณาถึงขนาดเล็กของไฟล์อินพุต?

ฉันได้ดาวน์โหลดรหัสจาก code.google.com: https://code.google.com/p/word2vec/และเพิ่งให้การเรียกใช้แบบแห้งดังนี้:

 time ./word2vec -train $file -output vectors.bin -cbow 1 -size 200 -window 10 -negative 25 -hs 1 -sample 1e-3 -threads 12 -binary 1 -iter 50

./distance vectors.bin 
  • จากผลลัพธ์ของฉันฉันเห็นว่าฉันได้รับข้อความที่มีเสียงดังมากมาย (stopwords) เมื่อฉันใช้เครื่องมือ 'distance' เพื่อให้ได้คำที่เกี่ยวข้องกับ "kw1" ดังนั้นฉันจึงลบ stopwords และคำที่มีเสียงรบกวนอื่น ๆ เช่นผู้ใช้กล่าวถึง แต่ฉันไม่เห็นที่ไหนเลยว่า word2vec ต้องการข้อมูลที่สะอาดหมดจด ...

  • คุณจะเลือกพารามิเตอร์ที่เหมาะสมได้อย่างไร ฉันเห็นผลลัพธ์ (จากการรันเครื่องมือระยะทาง) แตกต่างกันอย่างมากเมื่อฉันเปลี่ยนพารามิเตอร์เช่น '-window', '-iter' ฉันควรใช้เทคนิคใดเพื่อค้นหาค่าที่ถูกต้องสำหรับพารามิเตอร์ (การทดลองด้วยตนเองและข้อผิดพลาดเป็นไปไม่ได้สำหรับฉันเนื่องจากฉันจะเพิ่มขนาดชุดข้อมูล)

คำตอบ:


9

Word2Vec ไม่ใช่ตัวเลือกที่ดีสำหรับชุดข้อมูลที่มีขนาดดังกล่าว จากการวิจัยที่ฉันได้เห็นมันจะปลดปล่อยพลังของมันถ้าคุณป้อนคำอย่างน้อยสองล้านคำทวีต 3k จะไม่เพียงพอสำหรับความคล้ายคลึงกันของคำที่กระชับ


เราจำเป็นต้องลบ stopwords เป็นขั้นตอนก่อนการประมวลผลข้อมูลหรือไม่
samsamara

2
ไม่ในวิธี word2vec คุณไม่จำเป็นต้องทำเช่นนั้นเนื่องจากอัลกอริทึมนั้นอาศัยบริบทที่กว้างเพื่อค้นหาความคล้ายคลึงกันในคำดังนั้นหยุดคำ (ส่วนใหญ่เป็นคำบุพบทคำสรรพนามและอื่น ๆ ) เป็น asses ที่สำคัญสำหรับอัลกอริทึม .
chewpakabra

แต่เมื่อฉันใช้เครื่องมือระยะทางเพื่อค้นหาคำที่คล้ายกันมากที่สุดกับคำที่กำหนดเวอร์ชันที่ลบคำหยุดออกให้ฉันคำที่สมเหตุสมผลกว่าเวอร์ชันที่ไม่มี คุณเดาได้มั้ยว่านี่แปลว่าอะไร?
samsamara

อาจเป็นไปได้ว่าคุณกำลังใช้บริบทที่แคบเกินไป: ถ้าแบบจำลองของคุณดูพูดสองคำไปข้างหน้าและข้างหน้าคุณจะมีคำหยุดไม่เกิน 2 คำในบริบทและนั่นอาจทำให้ผลลัพธ์แย่ลง หากคุณจะขยายบริบท (ซึ่งจะทำให้โมเดลมีขนาดใหญ่ขึ้นและใช้เวลาในการฝึกอบรมนานขึ้น) โมเดลที่มีคำหยุดจะให้ผลลัพธ์ที่ดีกว่ากับคุณ
chewpakabra

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