程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

[Python]Word2Vec預測,如果我的生命中減去愛會剩下什麼

編輯:Python

德國詩人席勒說:“沒有愛之光輝的生活一文不值”

不僅僅是席勒,在整個人類歷史上,有多少人討論過 "生命 "和 "愛 "之間的關系?

在這裡,在向這些前輩的工作表示敬意的同時,我們用現代的壯舉Word2Vec來問

如果從'生命'中減去'愛',還剩下什麼?

Word2Vec

安裝庫

使用gensim

!pip install gensim

下載經過訓練的模型Word2Vec

在此下載模型:http://bit.ly/2srnKoy 解壓縮並使用文件ja.bin

載入模型

import gensim
model = gensim.models.Word2Vec.load('/content/ja.bin')

查找 "人生"的類似詞

首先,我們使用Word2Vec的分布式表示法來研究人生這個詞的類似詞

for item, value in model.wv.most_similar('人生'):
    print(item,value)

輸出結果

不知何故,這似乎很合適

心境 0.5031609535217285
命運 0.4962955415248871
幸福 0.4731469750404358
我 0.45822054147720337
老年 0.44594892859458923
書 0.4451371133327484
半生 0.4450538754463196
思索 0.4410485029220581
永遠 0.43776482343673706
一生 0.43756037950515747

從 "生命 "中減去 "愛"

讓我們實際嘗試一下Word2Vec來做一些字向量算術

代碼如下

model.wv.most_similar(positive=['人生'],negative=['愛'])

輸出結果

第一名是 "事業",第二名是 "金錢",以此類推

但不確定第9位的 "大聯盟 "是什麼意思

[('事業', 0.3442475199699402),
 ('金錢', 0.33152854442596436),
 ('機會', 0.2999703586101532),
 ('老年', 0.29941919445991516),
 ('沙利文', 0.29740941524505615),
 ('困難', 0.2900192439556122),
 ('成果', 0.286318302154541),
 ('理論', 0.2787232995033264),
 ('大聯盟', 0.2783268094062805),
 ('壓力', 0.27150285243988037)]]

試試經典的“王”+“女人”——“男人”

model.wv.most_similar(positive=['王','女'],negative=['男'])

輸出結果

公主來了

[('公主', 0.4609297811985016),
 ('王位', 0.4463587999343872),
 ('女王', 0.440536767244339),
 ('王室', 0.4360467791557312),
 ('父王', 0.4177766740322113),
 ('王妃', 0.4131211042404175),
 ('唐朝', 0.410072922706604),
 ('國師', 0.4071836471557617),
 ('李世明', 0.404167115688324),
 ('……', 0.40059027075767517)]

也用fastText來計算

下載經過訓練的模型fastText

加載模型

import gensim
model = gensim.models.KeyedVectors.load_word2vec_format('/content/model.vec',binary=False)

查找 "人生" 的類似詞

在此之前,得到“人生”的特征量向量

有 300 個維度。 順便說一下,Word2Vec有100個維度

 word = '人生'
print(f'{word}的特征向量')
print(model[word])
model[word].shape

輸出結果:

(300,)
print(f'{word}的同義詞')
for item ,value in model.most_similar(word):
    print(item,value)

輸出結果,它比Word2Vec更具體

人生的同義詞
生活方式 0.643797755241394
居住 0.5911297798156738
生涯 0.5900983810424805
一生 0.5889523029327393
人生觀 0.5824947953224182
活著 0.5823161602020264
幸福 0.574641227722168
青春世代 0.5740978717803955
婚後生活 0.5648994445800781
記憶 0.5635090470314026

在 "人生" 中減去 "愛"

model.most_similar(positive=['人生'],negative=['愛'])

輸出結果

它太具體了,類似的術語也是如此

像fastText這樣優秀的模型似乎並不適合粗糙的主題

[('回顧', 0.34721365571022034),
 ('運動員的一生', 0.32623374462127686),
 ('職業生活', 0.3085706830024719),
 ('職業', 0.30444127321243286),
 ('人生計劃', 0.2932748794555664),
 ('職業生涯', 0.2895069122314453),
 ('生活', 0.283188134431839),
 ('轉折點', 0.2803061604499817),
 ('回顧', 0.27186983823776245),
 ('重新開始', 0.2653588056564331)]

結論

席勒說,沒有愛之光輝的生活一文不值,但聽起來不一定是沒有價值


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved