Skip to content

xsy1988/learn_GloVe

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

learn_GloVe

自己写一个GloVe的训练程序

理论要点

GloVe的基本思路,是通过联合矩阵的特性,来训练嵌入矩阵的。
共现矩阵的最重要特性:
ratio(i,j,k)的值与词之间的相关性有密切关系。
令:
P(i,k) = X(i,k) / X(i)
P(j,k) = X(j,k) / X(i)
ratio(i,j,k) = P(i,k) / P(j,k)
则:
若i,k相关、且j,k相关 —— ratio(i,j,k)接近1
若i,k不相关、且j,k不相关 —— ratio(i,j,k)接近1
若i,k相关,j,k不相关 —— ratio(i,j,k)很大
若i,k不相关,j,k相关 —— ratio(i,j,k)很小

利用这一个特性,构造损失函数:
J = sum(log(P_ij) - dot(v_i,v_j))
展开P(i,j)推导
J = sum(dot(v_i,v_j) + b_i + b_j - log(X_ij))
加上权重函数f(X_ij)
J = sum(f(X_ij) * (dot(v_i,v_j) + b_i + b_j - log(X_ij)))
其中,权重函数为:
f(x) = power((x / x_max), 0.75) if x < x_max
f(x) = 1 if x >= x_max

接下来的任务,就是构造联合矩阵,然后通过训练,使损失函数最小。

工程实现步骤

  1. 原始数据采集
    通过爬虫或其他方式,从网络上获取一定数量的原始训练数据,即英文文章。
  2. 数据处理
    对采集的原始数据做初步处理,去掉各种数字和符号,保留英文单词。然后以每个句子为单位切分,形成每一行只有一个纯单词组成的句子的数据集。
  3. 创建词典
    根据处理好的数据,创建包含数据集中所有单词的词典。
  4. 创建联合矩阵
    根据数据集,创建联合矩阵。
  5. 创建训练模型
    训练模型是一个单hidden层的简单网络,loss按照理论推导中的推导结果计算。
  6. 训练模型,获得嵌入矩阵
    当词典的长度超过3000时,使用Macbook Pro可能需要1天的时间才能训练完成。

About

自己写一个GloVe的训练程序

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages