Gensim - พัฒนาการฝังคำ
บทนี้จะช่วยให้เราเข้าใจพัฒนาการของการฝังคำใน Gensim
การฝังคำวิธีการแทนคำและเอกสารคือการแทนเวกเตอร์ที่หนาแน่นสำหรับข้อความที่คำที่มีความหมายเหมือนกันมีการแสดงที่คล้ายกัน ต่อไปนี้เป็นลักษณะบางประการของการฝังคำ -
เป็นคลาสของเทคนิคที่แสดงถึงคำแต่ละคำเป็นเวกเตอร์ที่มีมูลค่าจริงในปริภูมิเวกเตอร์ที่กำหนดไว้ล่วงหน้า
เทคนิคนี้มักจะรวมอยู่ในฟิลด์ของ DL (การเรียนรู้เชิงลึก) เนื่องจากทุกคำถูกจับคู่กับเวกเตอร์หนึ่งตัวและค่าเวกเตอร์จะได้รับการเรียนรู้ในลักษณะเดียวกับที่ NN (Neural Networks) ทำ
แนวทางสำคัญของเทคนิคการฝังคำคือการแสดงแบบกระจายหนาแน่นสำหรับทุกคำ
วิธีการฝังคำ / อัลกอริทึมที่แตกต่างกัน
ตามที่กล่าวไว้ข้างต้นวิธีการ / อัลกอริทึมการฝังคำจะเรียนรู้การแสดงเวกเตอร์ที่มีมูลค่าจริงจากคลังข้อความ กระบวนการเรียนรู้นี้สามารถใช้ได้กับแบบจำลอง NN ในงานเช่นการจัดประเภทเอกสารหรือเป็นกระบวนการที่ไม่ได้รับการดูแลเช่นสถิติเอกสาร เราจะพูดถึงสองวิธี / อัลกอริทึมที่สามารถใช้เพื่อเรียนรู้การฝังคำจากข้อความ -
Word2Vec โดย Google
Word2Vec พัฒนาโดย Tomas Mikolov และอื่น ๆ อัล ที่ Google ในปี 2013 เป็นวิธีการทางสถิติในการเรียนรู้การฝังคำจากคลังข้อความอย่างมีประสิทธิภาพ มันถูกพัฒนาขึ้นเพื่อตอบสนองเพื่อให้การฝึกอบรมการฝังคำโดยใช้ NN มีประสิทธิภาพมากขึ้น ได้กลายเป็นมาตรฐานสำหรับการฝังคำโดยพฤตินัย
การฝังคำโดย Word2Vec เกี่ยวข้องกับการวิเคราะห์เวกเตอร์ที่เรียนรู้เช่นเดียวกับการสำรวจคณิตศาสตร์เวกเตอร์เกี่ยวกับการแทนคำ ต่อไปนี้เป็นวิธีการเรียนรู้สองวิธีที่แตกต่างกันซึ่งสามารถใช้เป็นส่วนหนึ่งของวิธี Word2Vec -
- รุ่น CBoW (กระเป๋าต่อเนื่อง)
- แบบจำลองข้ามกรัมต่อเนื่อง
GloVe โดย Standford
GloVe (เวกเตอร์สากลสำหรับการเป็นตัวแทนของคำ) เป็นส่วนขยายของเมธอด Word2Vec ได้รับการพัฒนาโดย Pennington et al ที่สแตนฟอร์ด อัลกอริทึม GloVe เป็นการผสมผสานของทั้งสองอย่าง -
- สถิติทั่วโลกของเทคนิคการแยกตัวประกอบเมทริกซ์เช่น LSA (Latent Semantic Analysis)
- การเรียนรู้ตามบริบทท้องถิ่นใน Word2Vec
ถ้าเราพูดถึงการทำงานของมันแทนที่จะใช้หน้าต่างเพื่อกำหนดบริบทเฉพาะที่ GloVe จะสร้างเมทริกซ์การเกิดร่วมคำที่ชัดเจนโดยใช้สถิติทั่วทั้งคลังข้อความ
การพัฒนาการฝัง Word2Vec
ที่นี่เราจะพัฒนาการฝัง Word2Vec โดยใช้ Gensim ในการทำงานกับโมเดล Word2Vec Gensim จะจัดเตรียมให้เราWord2Vec คลาสที่สามารถนำเข้าจาก models.word2vec. สำหรับการนำไปใช้งาน word2vec ต้องการข้อความจำนวนมากเช่นคลังบทวิจารณ์ของ Amazon ทั้งหมด แต่ที่นี่เราจะใช้หลักการนี้กับข้อความหน่วยความจำขนาดเล็ก
ตัวอย่างการใช้งาน
ก่อนอื่นเราต้องนำเข้าคลาส Word2Vec จาก gensim.models ดังนี้ -
from gensim.models import Word2Vec
ต่อไปเราต้องกำหนดข้อมูลการฝึกอบรม แทนที่จะใช้ไฟล์ข้อความขนาดใหญ่เรากำลังใช้บางประโยคเพื่อใช้หลักการนี้
sentences = [
['this', 'is', 'gensim', 'tutorial', 'for', 'free'],
['this', 'is', 'the', 'tutorials' 'point', 'website'],
['you', 'can', 'read', 'technical','tutorials', 'for','free'],
['we', 'are', 'implementing','word2vec'],
['learn', 'full', 'gensim', 'tutorial']
]
เมื่อได้ข้อมูลการฝึกอบรมแล้วเราจำเป็นต้องฝึกโมเดล สามารถทำได้ดังนี้ -
model = Word2Vec(sentences, min_count=1)
เราสามารถสรุปโมเดลได้ดังนี้ -;
print(model)
เราสามารถสรุปคำศัพท์ได้ดังนี้ -
words = list(model.wv.vocab)
print(words)
ต่อไปมาเข้าถึงเวกเตอร์คำเดียว เรากำลังทำเพื่อคำว่า 'กวดวิชา'
print(model['tutorial'])
ต่อไปเราต้องบันทึกโมเดล -
model.save('model.bin')
ต่อไปเราต้องโหลดแบบจำลอง -
new_model = Word2Vec.load('model.bin')
สุดท้ายพิมพ์โมเดลที่บันทึกไว้ดังนี้ -
print(new_model)
ตัวอย่างการใช้งานที่สมบูรณ์
from gensim.models import Word2Vec
sentences = [
['this', 'is', 'gensim', 'tutorial', 'for', 'free'],
['this', 'is', 'the', 'tutorials' 'point', 'website'],
['you', 'can', 'read', 'technical','tutorials', 'for','free'],
['we', 'are', 'implementing','word2vec'],
['learn', 'full', 'gensim', 'tutorial']
]
model = Word2Vec(sentences, min_count=1)
print(model)
words = list(model.wv.vocab)
print(words)
print(model['tutorial'])
model.save('model.bin')
new_model = Word2Vec.load('model.bin')
print(new_model)
เอาต์พุต
Word2Vec(vocab=20, size=100, alpha=0.025)
[
'this', 'is', 'gensim', 'tutorial', 'for', 'free', 'the', 'tutorialspoint',
'website', 'you', 'can', 'read', 'technical', 'tutorials', 'we', 'are',
'implementing', 'word2vec', 'learn', 'full'
]
[
-2.5256255e-03 -4.5352755e-03 3.9024993e-03 -4.9509313e-03
-1.4255195e-03 -4.0217536e-03 4.9407515e-03 -3.5925603e-03
-1.1933431e-03 -4.6682903e-03 1.5440651e-03 -1.4101702e-03
3.5070938e-03 1.0914479e-03 2.3334436e-03 2.4452661e-03
-2.5336299e-04 -3.9676363e-03 -8.5054158e-04 1.6443320e-03
-4.9968651e-03 1.0974540e-03 -1.1123562e-03 1.5393364e-03
9.8941079e-04 -1.2656028e-03 -4.4471184e-03 1.8309267e-03
4.9302122e-03 -1.0032534e-03 4.6892050e-03 2.9563988e-03
1.8730218e-03 1.5343715e-03 -1.2685956e-03 8.3664013e-04
4.1721235e-03 1.9445885e-03 2.4097660e-03 3.7517555e-03
4.9687522e-03 -1.3598346e-03 7.1032363e-04 -3.6595813e-03
6.0000515e-04 3.0872561e-03 -3.2115565e-03 3.2270295e-03
-2.6354722e-03 -3.4988276e-04 1.8574356e-04 -3.5757164e-03
7.5391348e-04 -3.5205986e-03 -1.9795434e-03 -2.8321696e-03
4.7155009e-03 -4.3349937e-04 -1.5320212e-03 2.7013756e-03
-3.7055744e-03 -4.1658725e-03 4.8034848e-03 4.8594419e-03
3.7129463e-03 4.2385766e-03 2.4612297e-03 5.4920948e-04
-3.8912550e-03 -4.8226118e-03 -2.2763973e-04 4.5571579e-03
-3.4609400e-03 2.7903817e-03 -3.2709218e-03 -1.1036445e-03
2.1492650e-03 -3.0384419e-04 1.7709908e-03 1.8429896e-03
-3.4038599e-03 -2.4872608e-03 2.7693063e-03 -1.6352943e-03
1.9182395e-03 3.7772327e-03 2.2769428e-03 -4.4629495e-03
3.3151123e-03 4.6509290e-03 -4.8521687e-03 6.7615538e-04
3.1034781e-03 2.6369948e-05 4.1454583e-03 -3.6932561e-03
-1.8769916e-03 -2.1958587e-04 6.3395966e-04 -2.4969708e-03
]
Word2Vec(vocab=20, size=100, alpha=0.025)
การแสดงภาพการฝังคำ
นอกจากนี้เรายังสำรวจคำที่ฝังด้วยการแสดงภาพได้อีกด้วย สามารถทำได้โดยใช้วิธีการฉายภาพแบบคลาสสิก (เช่น PCA) เพื่อลดเวกเตอร์คำที่มีมิติสูงเป็นพล็อต 2 มิติ เมื่อลดแล้วเราสามารถพล็อตบนกราฟได้
การพล็อต Word Vectors โดยใช้ PCA
อันดับแรกเราต้องดึงเวกเตอร์ทั้งหมดจากแบบจำลองที่ผ่านการฝึกอบรมดังนี้ -
Z = model[model.wv.vocab]
ต่อไปเราต้องสร้างแบบจำลอง 2-D PCA ของเวกเตอร์คำโดยใช้คลาส PCA ดังนี้ -
pca = PCA(n_components=2)
result = pca.fit_transform(Z)
ตอนนี้เราสามารถพล็อตการฉายภาพโดยใช้ matplotlib ดังต่อไปนี้ -
Pyplot.scatter(result[:,0],result[:,1])
นอกจากนี้เรายังสามารถใส่คำอธิบายประกอบจุดบนกราฟด้วยคำนั้น ๆ พล็อตการฉายภาพโดยใช้ matplotlib ดังนี้ -
words = list(model.wv.vocab)
for i, word in enumerate(words):
pyplot.annotate(word, xy=(result[i, 0], result[i, 1]))
ตัวอย่างการใช้งานที่สมบูรณ์
from gensim.models import Word2Vec
from sklearn.decomposition import PCA
from matplotlib import pyplot
sentences = [
['this', 'is', 'gensim', 'tutorial', 'for', 'free'],
['this', 'is', 'the', 'tutorials' 'point', 'website'],
['you', 'can', 'read', 'technical','tutorials', 'for','free'],
['we', 'are', 'implementing','word2vec'],
['learn', 'full', 'gensim', 'tutorial']
]
model = Word2Vec(sentences, min_count=1)
X = model[model.wv.vocab]
pca = PCA(n_components=2)
result = pca.fit_transform(X)
pyplot.scatter(result[:, 0], result[:, 1])
words = list(model.wv.vocab)
for i, word in enumerate(words):
pyplot.annotate(word, xy=(result[i, 0], result[i, 1]))
pyplot.show()