-
Notifications
You must be signed in to change notification settings - Fork 18
/
wmd_dist.m
46 lines (42 loc) · 1.46 KB
/
wmd_dist.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
% This script generates text embedding for a p.d. text kernel constructed
% from data-dependent random features map using alignment-aware distance
% for measuring the similairity between two sentences/documents.
%
% Author: Lingfei Wu
% Date: 11/28/2018
function [KMat, user_emd_runtime] = wmd_dist(newX, weight_newX, baseX, ...
weight_baseX, gamma)
[~, N1] = size(newX);
[~, N2] = size(baseX);
KMat = zeros(N1,N2);
user_emd_runtime = 0;
tic;
parfor i = 1:N1
Ei = zeros(1,N2);
% x1 = weight_newX{i};
x1 = weight_newX{i}./sum(weight_newX{i});
data1 = newX{i};
for j = 1:N2
if isempty(weight_newX{i}) || isempty(weight_baseX{j})
Ei(j) = Inf;
else
% x2 = weight_baseX{j};
x2 = weight_baseX{j}./sum(weight_baseX{j});
data2 = baseX{j};
D = distance(data1,data2);
D(D < 0) = 0;
D = sqrt(D);
emd_telapsed = tic;
emd = emd_mex(x1,x2,D); % use classic emd from Yossi Rubner
user_emd_runtime = user_emd_runtime + toc(emd_telapsed);
if gamma == -1
Ei(j) = emd; % directly use emd as features
else
Ei(j) = exp(-emd*gamma); % use soft-min features of emd
end
end
end
KMat(i,:) = Ei;
end
toc
end