这是我参与2022首次更文挑战的第25天,活动详情查看:2022首次更文挑战
前边讲了怎么学习embedding matrix,这小节了解一下GloVe1
GloVe,用词表示的全局变量。该方法的思想是,将整个语料库的统计数据的信息纳入损失函数。
我们之前是使用context - target词对,GloVe是使其关系明确化。
依旧是使用I want a glass of orange juice to go along with my cereal.
xij表示i在j上下文中出现的次数,在这里i和j的功能就等同于之前的context和target。
遍历你的训练集,设定一定的词距,比如上下文各10个词距,你会得到
xij=xji,如果你设置i必须在j之前,那结果就会大不相同。这里我们使用的是上下文都考虑在内。
xij就是单词i和j彼此接近频率的计数器。
GloVe要做的就是:
mimimizei=1∑10000j=1∑10000f(Xij)(θiTej+bi+bj′−logXij)2
最小化
∑i=110000∑j=110000f(Xij)(θiTej+bi+bj′−logXij)2,现在我们将其拆解进行分析。
-
(θiTej−logXij)2
这一步是计算两个词之间的关联度,即他们同时出现的频率是多少。
扫描二维码关注公众号,回复:
13693398 查看本文章
-
∑i=110000∑j=110000(θiTej−logXij)2
之后进行梯度下降,学习参数
θiT和
ej。
-
∑i=110000∑j=110000f(Xij)(θiTej−logXij)2
其中
logXij当
Xij趋近于0的时候
logXij就趋近于负无穷,那此时这个式子是无效的。因此我们要在前边加上一个加权项
f(Xij),使
Xij等于0的时候也能正常计算。比如当
Xij等于0时,
f(Xij)也等于0,原始变为
0×∞=0。此外对于一些出现频率很高的词也可以赋值一个较小的权重使其平衡,比如遇到a、the、and之类的词。更详细的可以看文章末尾的论文原文自己探索。
-
∑i=110000∑j=110000f(Xij)(θiTej+bi+bj′−logXij)2
最后加上
bi+bj′这一项(具体什么意义我没去深究。)
最后,这个算法在这θ和e是完全对称的,所以
θi和
ej是对称的,如果你只看数学意义,他们功能是相近的,你可以将其任意排序。因此一种训练该算法的方法是对二者进行同样的初始化,然后使用梯度下降来最小化输出。每个词处理完毕之后再取平均值。
例如给定一个词orange,在处理完毕之后你会得到
eorangefinal=2eorange+θorange。因为在这个特定的公式里θ和e是对称的。
- Glove: Global Vectors for Word Representation (researchgate.net)