be the nearest neighbor of $\vec{u_{tl}} + \vec{tl}$. Hence the the score function can be defined as: $$\begin{aligned}
\label{score}
\small
  \nonumber s_{tl}(u, v) = \parallel \vec{u_{tl}} + \vec{tl} - \vec{v_{tl}} \parallel _2^2\\
  \nonumber   s.t. \parallel \vec{u} \parallel _2 \leq 1, \parallel \vec{v} \parallel _2 \leq 1, \parallel \vec{tl} \parallel _2 \leq 1,  \\
   \parallel \vec{u_{tl}} \parallel _2 \leq 1, \parallel \vec{v_{tl}} \parallel _2 \leq 1\end{aligned}$$

Given the score function defined in Eq. \[score\] for a triple ($u$, $tl$, $v$), the entire objective function for training is as follows. $$\label{obj}
\small
    L = \sum_{(u,tl,v) \in T} \sum_{(u',tl,v') \in T'} max(0, s_{tl}(u, v) + \gamma - s_{tl}(u', v')),$$ where max(*a*,*b*) is used to get the maximum between *a* and *b*, $\gamma$ is the margin, *T* and *T’* are the sets of correct and corrupted triples, respectively. The corrupted triples are generated by replacing the head and tail entities in correct triples using the same sampling method as that in [@Wang_aaai14].

We adopt stochastic gradient descent (SGD) (in mini-batch mode) to minimize the objective function in Eq. \[obj\]. A small set of triplets, is sampled from the training data. For each such triplet, we sample its corresponding incorrect triplets. All the correct and 