Glove可以捕捉到词语在语料库中的全局语义信息和类比信息, 据此基于语义向量计算刻板印象、文化变迁等,Glove模型在计算社会科学中拥有很大的应用潜力。
训练Glove模型有两种实现方式
- C语言; https://nlp.stanford.edu/projects/glove/
- 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