-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTrain_ComplEx.jl
More file actions
64 lines (51 loc) · 2.78 KB
/
Train_ComplEx.jl
File metadata and controls
64 lines (51 loc) · 2.78 KB
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using DelimitedFiles
using CSV
using DataFrames
using SparseArrays
base_folder = "C:/Users/manue/Downloads/ConvAI Assignment1/Projects/CCM_Torch/Data/"
file_entity = base_folder * "Knowledge_Data/entity.txt"
file_relation = base_folder * "Knowledge_Data/relation.txt"
entities = DelimitedFiles.readdlm(file_entity, String)[:,1];
entities = hcat(entities,collect(1:size(entities,1)));
entity_set = Set(entities[:,1]);
embedding_size = 300;
Relation_Properties_file = base_folder * "Knowledge_Data/RelationFiles/RelationAnnotations.csv";
AllRelationCategories = DataFrame(CSV.File(Relation_Properties_file));
AllRelations = AllRelationCategories."Relation" ∪ filter(x -> coalesce(x,"<self>") != "<self>", AllRelationCategories."inversion");
AntiSymmetricRelations = filter("Antisymmetric" => x -> coalesce(x,false) == true, AllRelationCategories)."Relation";
input_file = base_folder * "Knowledge_Data/RelationFiles/non_Augmented/train1.tsv";
All_triples = DelimitedFiles.readdlm(input_file);
valid_indexes_i = [];
valid_indexes_j = [];
valid_indexes_k = [];
anti_symmetric_indexes_i = [];
anti_symmetric_indexes_j = [];
anti_symmetric_indexes_k = [];
nodenames = ["index i", "index j", "index k", "value"]
SparseRelationTensorDataframe = DataFrame([[] for _ = nodenames] , nodenames)
for (head,relation,tail) in eachrow(All_triples)
index_i_val = findfirst(x -> x == head,entities[:,1]);
index_k_val = findfirst(x -> x == relation,AllRelations);
index_j_val = findfirst(x -> x == tail,entities[:,1]);
if((isnothing(index_i_val) || isnothing(index_k_val) || isnothing(index_j_val)) == false)
push!(SparseRelationTensorDataframe,[index_i_val, index_j_val, index_k_val, 1]);
if(relation ∈ AntiSymmetricRelations)
push!(SparseRelationTensorDataframe,[index_j_val, index_i_val, index_k_val, -1]);
end
end
if(size(SparseRelationTensorDataframe)[1] % 1000 == 0)
print("done 1000")
end
end
SparseTensor = Vector{SparseMatrixCSC}(undef,length(AllRelations));
RelationPredictionTensor = Vector{Vector{ComplexF64}}(undef,length(AllRelations));
#We are looking at only diagonal elements
for z_index in 1:length(AllRelations)
current_tensor_data = filter("index k" => x -> x == z_index, SparseRelationTensorDataframe)
SparseTensor[z_index] = sparse(current_tensor_data."index i",current_tensor_data."index j",current_tensor_data."value")
RelationPredictionTensor[z_index] = rand(ComplexF64,embedding_size);
end
A = zeros(ComplexF64,(size(entities)[1],embedding_size));
SymmetricRelations = filter("Symmetric" => x -> coalesce(x,false) == true, AllRelationCategories)."Relation";
SymmetricRelationIndexes = map(y -> findfirst(x -> x == y,AllRelations),SymmetricRelations);
filter("index k" => x -> x ∈ SymmetricRelationIndexes,SparseRelationTensorDataframe)