Glove可以捕捉到词语在语料库中的全局语义信息和类比信息, 据此基于语义向量计算刻板印象、文化变迁等,Glove模型在计算社会科学中拥有很大的应用潜力。

训练Glove模型有两种实现方式

  1. C语言; https://nlp.stanford.edu/projects/glove/
  2. Python语言;mittens、glove-python

方法比较

方法 优点 缺点
C语言 速度快,现成的代码工具 源代码仅支持英文, 需要付出较高的学习成本才能改动支持中文。 对文科生小白而言,门槛高
Python语言 mittens、glove-python等包语法简洁, 易上手 对文科生还是有一定的门槛,代码运行速度慢

不考虑性能约束条件,更多地考虑易用性,大邓简化了Python代码,将其内置到了cntext库。

对词向量、词嵌入感兴趣的童鞋,可以阅读下列相关资料


GloVe代码

cntext支持中英文, 只需要7行代码,可完成导入数据、训练模型、保存结果。 这里以三体小说数据为例, 使用 data/santi.txt

需要注意, santi.txt文件内文本是已经分词处理过的。这样可以在english这类西方语言模式下使用空格来区分词语的边界。

如果使用英文数据,下面代码只需要更改数据文件的路径即可。

import cntext as ct
import os

#设置语言和项目文件夹路径
model = ct.Glove(cwd=os.getcwd(), lang='english')
#导入语料
model.create_vocab(file='data/santi.txt', min_count=5)
#构建词语共现矩阵
model.cooccurrence_matrix()
#设置词嵌入模型的向量维度、迭代数
model.train_embeddings(vector_size=50, max_iter=25)
#存储模型
model.save(model_name='santi_glove_model')

Run

Building prefix dict from the default dictionary ...
Step 1/4: ...Create vocabulary for Glove.

Dumping model to file cache C:\Users\Deng\AppData\Local\Temp\jieba.cache
Loading model cost 0.628 seconds.

Prefix dict has been built successfully.

Step 2/4: ...Create cooccurrence matrix.
Step 3/4: ...Train glove embeddings. 
             Note, this part takes a long time to run

Iteration 20: error 64925132.71550
Step 3/4: ... Finish! Use 316.91 s

Step 4/4: ... Save the glove embeddings to a txt file

导入GloVe预训练模型

训练好的GloVe模型是txt文件,可以使用gensim导入。

from gensim.models import KeyedVectors

# 导入GloVe模型文件
model = KeyedVectors.load_word2vec_format('output/Glove/santi_glove_model.txt',  no_header=True)

#查看某词的词向量
model.get_vector('宇宙')

Run

array([ 0.6618259 ,  0.60663235,  0.9849417 , -1.028956  ,  1.0711069 ,
       -0.8875306 , -0.52833366, -1.0125595 , -0.9628481 ,  1.0356479 ,
        0.8595257 ,  0.7454354 , -1.0468111 , -0.26285014, -1.0310447 ,
        0.9906805 ,  0.05825566, -0.85581344, -0.9932533 , -1.020438  ,
        1.0495061 , -0.6973389 ,  0.49099424, -0.80775315,  0.64256483,
        1.0157642 ,  1.0135043 , -1.0131834 ,  0.17376372,  0.89585054,
        0.30890268,  0.798895  ,  0.6653925 ,  0.908629  , -1.048273  ,
       -0.35683677,  0.06306187, -1.0267074 , -1.0494691 ,  0.42172813,
        0.24005401,  0.5934993 , -0.0696691 , -1.0360557 , -0.9797269 ,
        1.0205714 , -0.376359  , -1.0501183 ,  1.0415571 , -0.9312968 ],
      dtype=float32)

模型的使用

语料中所有的词语都是维度相同的向量,可以根据向量计算找近义词、反义词。可参考 之前分享的 豆瓣影评 | 探索词向量妙处


参考资料

  • 冉雅璇,李志强,刘佳妮,张逸石.大数据时代下社会科学研究方法的拓展——基于词嵌入技术的文本分析的应用[J].南开管理评论:1-27.
  • William L. Hamilton, Jure Leskovec, and Dan Jurafsky. ACL 2016. Diachronic Word Embeddings Reveal Statistical Laws of Semantic Change.
  • Jeffrey Pennington, Richard Socher, and Christopher D. Manning. 2014. GloVe: Global Vectors for Word Representation.
  • https://github.com/hiDaDeng/cntext

广而告之