文本分析我写过一期gensim库的,今天我想实现下word2vec,进行一些词语相似性分析。 参数解释
from gensim.models import Word2Vec 文本数据处理这里我使用的语料是小说 在这里我为了省事,直接用正则剔除了除中文以外的所有字符,也就不是以句号断句。全部以行读入数据,相当于每行就是一个独立的句子。 为了降低对内存的消耗,这里我们使用iter,告诉Word2Vec输入的数据是可迭代的对象,使用生成器会大大降低内存消耗,所以这里我们返回的是生成器而不是列表(近似将生成器等同于列表)。 import jieba 训练并生成模型好了,现在开始导入数据,生成我们的模型。 #处理数据 导入模型到这里我们已经将三体小说语料转化为word2vec模型。现在我们尝试做一些有意思的事情。我们在同一文件夹下,另外新建一个py文件。使用下面方法,导入训练好的模型。 from gensim.models import KeyedVectors 使用模型一、语料中的词语数print(len(model.vocab)) 4663 二、相似性#计算两个词语的相似性(这里有点类似于共现性,出现在一起的概率) 词语相似性 0.979347427218
0.848213543316 三、查看词向量print(model['智子']) 词向量(这里是size长度的向量) [ 0.02596524 -0.58146703 0.2551643 -0.11980443 0.05224045 0.52335924
0.28106797 0.19156754 0.12423556 -0.290573 -0.11983433 -0.20253746
.......
0.25172633 -0.08110124 0.11124857 -0.57409805 0.08624712 -0.01513417
0.22165927 0.05142394 0.12320817 -0.32751641 0.1595141 0.39632329
0.06477572 -0.00696412] 四、找出气质不合的词语将词语列表输入给doesnt_match函数,用来计算词语列表中与其他词语相似度最低的词语,相当于一个群体中的另类对象。 print(model.doesnt_match(['科学边界','基础物理','智子锁死','太空军'])) 返回 太空军 看过三体小说的人都知道,智子锁死了人类的科学探索能力,使得人类应用科技在发展,但是基础科学毫无进展可言。会使得人类最终达到的科技水平是有天花板的。 所以当我在 科学便捷、基础物理、智子锁死几个比较接近的词中加入 太空军。model就计算出不合群的词是太空军。 五、近义词最相似的词语找出跟 智子、三体 的 近义词最相似的10个词, print(model.most_similar(positive=['智子','三体'], topn=10)) 返回 [('建立', 0.9844928979873657), ('社会', 0.9788711667060852), ('基础', 0.9769335985183716), ('发展', 0.9769187569618225), ('战略', 0.976719319820404), ('力量', 0.9755910634994507), ('打击', 0.9754586815834045), ('目前', 0.9719493985176086), ('成为', 0.9698376655578613), ('生命', 0.9668488502502441)] 六、反义词中最相似的词print(model.most_similar(negative=['智子','三体'], topn=10)) 三体小说中,智子的对手是罗辑。我们看到反义词结果中出现了罗辑。 [('汪淼', 0.38320186734199524), ('着', 0.38044700026512146), ('地', 0.3708333969116211), ('程心', 0.36895543336868286), ('罗辑', 0.36442938446998596), ('看着', 0.34719690680503845), ('看', 0.33883702754974365), ('又', 0.337078332901001), ('起来', 0.2994344234466553), ('他', 0.2886667847633362)] 七、positive和negative可以一起用print(model.most_similar(positive=['面壁计划'],negative=['智子','三体'], topn=10)) 三体小说中,面壁计划是为对付三体文明(智子是三体人),而罗辑就是人类面壁计划所选择的面壁者。 从下面分析结果中,我们看到了罗辑,还是有一定的分析能力。 [('汪淼', 0.5990270972251892), ('看', 0.5883820056915283), ('罗辑', 0.5783265829086304), ('程心', 0.5780940651893616), ('地', 0.5771546363830566), ('看着', 0.567058801651001), ('又', 0.561230480670929), ('着', 0.5542294979095459), ('走', 0.5372697114944458), ('起来', 0.5181437730789185)] 可乐一下数据及源代码 链接: https://pan.baidu.com/s/1bpFAEOf 密码: 3us3 |
|