GloVe原理与代码实现

本文介绍了GloVe(Global Vectors for Word Representation)的原理,它是word2vec的一种改进,结合了LSA的全局统计特征和word2vec的局部信息。GloVe通过共现矩阵来训练词向量。文章还提到了代码实现过程,主要关注Python实现,并分享了在处理中文语料时使用jieba分词的步骤。然而,作者在理解GloVe源码时遇到困难,计划进一步研究。
摘要由CSDN通过智能技术生成

1. 原理

学习了word2vec后,看视频时又发现有了GloVe、fasttext等word2vec的改进,虽然都是来训练词向量的,但觉得有点意思,就也学了学。

GloVe提出了一个共现矩阵的思路,是一种整合了LSA(构造一个关于词典和文档的矩阵X,然后通过SVD矩阵分解,可以减小一次多义等噪声信息,也就是利用了全局统计特征)和word2vec(以skip-gram为例,有一个window size,就是利用了局部的信息)提出的方法。

如果对LSA不清楚,可以参考下面的博客,我觉得是众多博客中写的很清晰的。

LSA学习笔记详细

另外,这一篇GloVe写的也很清晰。

通俗易懂理解——Glove算法原理

2. 代码实现

原理看懂上面的我觉得就够了,然后代码的实现部分,我看到大多数人都是把原代码粘贴上去,没啥参考意见导致我看代码花的时间更多,现在写一下批注。

打开https://github.com/stanfordnlp/GloVe,需要执行的文件是demo.sh

eval里有matlab、python文件夹,因为我用的python,所以我只关心python文件夹。里面有三个.py文件,我看demo.sh里运行的是evaluate.py文件,就只看了这个。

以我的语料为例,下面是test8.txt文件

然后是vocab.txt文件里的内容

统计词频,比如“的”出现了138次等。

最后形成的词向量

#!/bin/bash
set -e

# Makes programs, downloads sample data, trains a GloVe model, and then evaluates it.
# One optional argument can specify the language used for eval script: matlab, octave or [default] python

make
# if [ ! -e text8 ]; then             # 注释掉的地方是下载语料的命令,因为用的自己的语料,所以注释了
#   if hash wget 2>/dev/null; then
#     wget http://mattmahoney.net/dc/text8.zip
#   else
#     curl -O http://mattmahoney.net/dc/text8.zip
#   fi
#   unzip text8.zip
#   rm text8.zip
# fi

CORPUS=text8.txt         # 注意更改语料名
VOCAB_FILE=vocab.txt     # 词频统计
COOCCURRENCE_FILE=cooccurrence.bin        # 共现矩阵的bin文件,暂时不知道是干嘛用的,跑代码后自动生成
COOCCURRENCE_SHUF_FILE=cooccurrence.shuf.bin
BUILDDIR=
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值