WMD(Word Mover’s Distance)算法原理
文章主要是自己在学习过程中摘录做的笔记。
参考连接:WMD算法详解
1. WMD的直观理解
两段文字
D
1
D1
D1,
D
2
D2
D2,每段文字中的字都使用word2vec算法映射到embedding空间中。并且我们在
D
1
D1
D1中的每一个词都能找到
D
2
D2
D2中的某一个词,那么我们就可以找到每一对词在embedding空间中的距离,那么所有词对的距离之后就是WMD。那么问题来了,我怎么知道
D
1
,
D
2
D1,D2
D1,D2其中的词是怎么对应的,这种对应指数级别的组合?这也是WMD主要解决的问题。原理图如下:
2. WMD计算两文本基础流程:
- 首先对两个文本去除停用词
- 使用归一化BOW(词袋模型)方法来分别表示D1,D2
- 使用word2vec embedding来表示D1,D2中的每个词
- 在D1中所有词travel到D2中所有词,对于每一个D1中的词,它与D2中的词语义比较相近的,那么可以全部移动或移动距离多一些(权重值);对于语义差异较大,则移动距离少一点或者不移动。用词向量距离乘以移动距离就是两个词的转移代价。
- 求全局的转移代价累加和最小值(D1中所有词全部转移到D2,D2中的所有词也全部转移到D1中)。
- 这个全局转移代价累加和的最小值就是D1,D2的相似度。
3. WMD算法的数学描述
假设有一个预训练好的word2vec词向量矩阵
X
∈
R
d
×
n
X \in \mathcal{R}^{d\times n}
X∈Rd×n,
n
n
n表示词典大小,
d
d
d表示词向量维度。
如果词
i
i
i在文本中出现的次数
c
i
c_i
ci,那么我们定义词
i
i
i的归一化词频为:
d
i
=
c
i
∑
j
=
1
n
c
j
d_i = \frac{c_i}{\sum_{j=1}^n c_j}
di=∑j=1ncjci
d
i
d_i
di为单词
i
i
i在文档中的权重,
c
i
c_i
ci为出现的次数。
第
i
i
i个词和第
j
j
j个词的距离表示为:
c
(
i
,
j
)
=
∥
x
i
−
x
j
∥
2
c(i,j) = \|x_i-x_j\|_2
c(i,j)=∥xi−xj∥2,其中
x
i
,
x
j
x_i,x_j
xi,xj为embedding后的词向量。
c
(
i
,
j
)
c(i,j)
c(i,j)表示
i
,
j
i,j
i,j之间的travel cost
向量
d
,
d
′
d,d'
d,d′分别为用nBow表示的两段文本。允许
d
d
d中任意的词
d
i
d_i
di转化为
d
′
d'
d′的任意词
d
i
′
d_i{'}
di′,这样得到一个转移矩阵
T
∈
R
n
×
n
T \in R^{n\times n}
T∈Rn×n,每个元素
T
i
j
≥
0
T_{ij} \ge 0
Tij≥0 表示有多少词
i
i
i 从
d
d
d 转移成了
d
′
d'
d′中的词
j
j
j 。最终我们需要把
d
d
d 中的所有词都转为
d
′
d'
d′ 。而两个文档之间的 Travel cost 既可以表达为 [公式] 。 整体表达式如下:
min
T
≥
0
∑
i
,
j
=
1
n
T
i
j
c
(
i
,
j
)
\min_{T\ge 0} \sum_{i,j=1}^n T_{ij}c(i,j)
T≥0mini,j=1∑nTijc(i,j)
s
.
t
.
s.t.
s.t.
∑
j
=
1
n
T
i
j
=
d
i
,
∀
i
∈
{
1
,
⋯
,
n
}
,
约
束
1
:
d
中
的
第
i
个
词
的
流
出
总
和
需
要
等
于
d
i
\sum_{j=1}^n T_{ij}=d_i \ , \forall i \in \{1,\cdots,n\} ,约束1:d中的第i个词的流出总和需要等于d_i
∑j=1nTij=di ,∀i∈{1,⋯,n},约束1:d中的第i个词的流出总和需要等于di
∑
i
=
1
n
T
i
j
=
d
j
′
,
∀
j
∈
{
1
,
⋯
,
n
}
,
约
束
2
:
d
′
中
的
第
j
个
词
所
有
流
入
词
总
量
需
要
等
于
d
j
′
\sum_{i=1}^n T_{ij} = d^{'}_j \ , \forall j \in \{1,\cdots,n\},约束2:d'中的第j个词所有流入词总量需要等于d_j{'}
∑i=1nTij=dj′ ,∀j∈{1,⋯,n},约束2:d′中的第j个词所有流入词总量需要等于dj′
整优化过程就是最小化目前,找到最合适的
T
T
T转化矩阵 。这个优化过程可以通过线性规划的求解器求解,最终算法复杂度为
O
(
p
3
l
o
g
p
)
,
p
O(p{3}logp), p
O(p3logp),p为文档中非重复词的个数整个过程示意图如下:
以上的线性规划问题是EMD算法中的一种特殊情况,具体求解过程可参考EMD算法。
4. 算法优化加速
4.1 WCD (word Centoid Distance)
根据三角不等式可得:
∑
i
,
j
=
1
n
T
i
j
c
(
i
,
j
)
=
∑
i
,
j
=
1
n
T
i
j
∥
x
i
−
x
j
′
∥
2
=
∑
i
,
j
=
1
n
∥
T
i
j
(
x
i
−
x
j
′
)
∥
2
≥
∥
∑
i
,
j
=
1
n
T
i
j
(
x
i
−
x
j
′
)
∥
2
=
∥
∑
i
=
1
n
(
∑
j
=
1
n
T
i
j
)
x
i
−
∑
j
=
1
n
(
∑
i
=
1
n
T
i
j
)
x
j
′
∥
2
=
∥
∑
i
=
1
n
d
i
x
i
−
∑
j
=
1
n
d
j
′
x
j
′
∥
2
=
∥
X
d
−
X
d
′
∥
2
\begin{aligned} \sum_{i,j=1}^n T_{ij} c(i,j) &= \sum_{i,j=1}^n T_{ij}\|x_i-x_j^{'}\|_2 \\ &= \sum_{i,j=1}^n \|T_{ij}(x_i-x_j^{'})\|_2 \\ &\ge \|\sum_{i,j=1}^n T_{ij}(x_i-x_j^{'})\|_2 \\ &=\|\sum_{i=1}^n(\sum_{j=1}^n T_{ij})x_i-\sum_{j=1}^n(\sum_{i=1}^n T_{ij})x_j^{'}\|_2\\ &= \|\sum_{i=1}^n d_ix_i - \sum_{j=1}^n d_j^{'}x_j^{'}\|_2\\ &= \|X\mathrm{d} - X\mathrm{d}^{'}\|_2 \end{aligned}
i,j=1∑nTijc(i,j)=i,j=1∑nTij∥xi−xj′∥2=i,j=1∑n∥Tij(xi−xj′)∥2≥∥i,j=1∑nTij(xi−xj′)∥2=∥i=1∑n(j=1∑nTij)xi−j=1∑n(i=1∑nTij)xj′∥2=∥i=1∑ndixi−j=1∑ndj′xj′∥2=∥Xd−Xd′∥2
WCD的式子
∥
X
d
−
X
d
′
∥
2
\|X\mathrm{d} - X\mathrm{d}^{'}\|_2
∥Xd−Xd′∥2是
d
,
d
′
d , d'
d,d′之间WMD的lower bound。对应时间复杂度为
O
(
d
p
)
O(dp)
O(dp),
d
d
d为词向量维度,
p
p
p为两文档非重复词个数。
4.2 RWMD(relaxed word moving distance)
尽管WCD的时间复杂度很低,但是边界过于宽松,无法很好的近似WMD。因此,这里使用更加tight的下界RWMD。RWMD需要计算两次,基于WMD目标函数,分别去掉两个约束条件中的一个,然后求解最小值,使用两个最小值中的最大值作为WMD的近似值。
比如,去掉第二个约束条件,可得:
min
T
≥
0
∑
i
,
j
=
1
n
T
i
j
c
(
i
,
j
)
\min_{T\ge 0} \sum_{i,j=1}^n T_{ij}c(i,j)
T≥0mini,j=1∑nTijc(i,j)
s
.
t
.
s.t.
s.t.
∑
j
=
1
n
T
i
j
=
d
i
,
∀
i
∈
{
1
,
⋯
,
n
}
\sum_{j=1}^n T_{ij} = d_i \ , \forall i \in \{1,\cdots,n\}
j=1∑nTij=di ,∀i∈{1,⋯,n}
这个问题的最优解是,对于文本D1中的一个词,找到另一个文本D2中与之最相近的一个词,全部转移到这个词。即:
T
i
j
∗
=
{
d
i
i
f
j
=
arg
min
j
c
(
i
,
j
)
0
o
t
h
e
r
w
i
s
e
T_{ij}^{*} = \left\{ \begin{aligned}&d_i \ \mathrm{if \ j=\arg\min_jc(i,j)} \\ &0 \ \mathrm{otherwise}\end{aligned} \right .
Tij∗=⎩⎨⎧di if j=argjminc(i,j)0 otherwise
使用
l
1
(
d
,
d
′
)
l_1(\mathrm{d},\mathrm{d^{'}})
l1(d,d′)和
l
2
(
d
,
d
′
)
l_2(\mathrm{d},\mathrm{d^{'}})
l2(d,d′)分别表示,去掉不同约束条件所计算得到的最小值,RWMD最终的最小值为:
l
r
(
d
,
d
′
)
=
max
(
l
1
(
d
,
d
′
)
,
l
2
(
d
,
d
′
)
)
l_r(\mathrm{d},\mathrm{d^{'}}) = \max(l_1(\mathrm{d},\mathrm{d^{'}}),l_2(\mathrm{d},\mathrm{d^{'}}))
lr(d,d′)=max(l1(d,d′),l2(d,d′))
这个的时间复杂度为
O
(
p
2
)
O(p^2)
O(p2)
5. WMD优缺点
优点
- 不需要设置超参数
- 无监督,不依赖标注数据
- 有全局最优解
- 可人为干预词的重要性
缺点
- 词袋模型,没有保留语序信息
- 不能处理OOV(out of vocabulary)问题
- 处理否定词能力差
- 处理领域同义词互斥词的能力偏差
- 时间复杂度高