def EnergyVecFn(fnsim, embeddings, leftop, rightop): embedding, relationl, relationr = parse_embeddings(embeddings) idxl, idxo, idxr = T.ivector('idxl'), T.ivector('idxo'), T.ivector('idxr') lhs, rhs = embedding.E[:, idxl].T, embedding.E[:, idxr].T rell, relr = relationl.E[:, idxo].T, relationr.E[:, idxo].T energy = - fnsim(leftop(lhs, rell), rightop(rhs, relr)) return theano.function([idxl, idxr, idxo], [energy], on_unused_input='ignore')
def RankLeftFnIdx_Schema(fnsim, embeddings, prior, leftop, rightop, subtensorspec=None): embedding, relationl, relationr = parse_embeddings(embeddings) # Inputs idxr, idxo = T.iscalar('idxr'), T.iscalar('idxo') g = T.matrix('g') # Graph if subtensorspec is not None: # We compute the score only for a subset of entities lhs = (embedding.E[:, :subtensorspec]).T else: lhs = embedding.E.T rhs = (embedding.E[:, idxr]).reshape((1, embedding.D)) rell = (relationl.E[:, idxo]).reshape((1, relationl.D)) relr = (relationr.E[:, idxo]).reshape((1, relationr.D)) tmp = rightop(rhs, relr) simi = fnsim(leftop(lhs, rell), tmp.reshape((1, tmp.shape[1]))) pen_simi = g[0, :].T * prior.P[idxo, 0].T + g[1, :].T * prior.P[idxo, 1].T simi = simi - pen_simi return theano.function([idxr, idxo, g], [simi], on_unused_input='ignore')
def RankRightFnIdx_Schema(fnsim, embeddings, prior, leftop, rightop, subtensorspec=None): embedding, relationl, relationr = parse_embeddings(embeddings) # Inputs idxl, idxo = T.iscalar('idxl'), T.iscalar('idxo') g = T.matrix('g') # Graph lhs = (embedding.E[:, idxl]).reshape((1, embedding.D)) # lhs: 1xD vector containing the embedding of idxl if subtensorspec is not None: # We compute the score only for a subset of entities rhs = (embedding.E[:, :subtensorspec]).T else: rhs = embedding.E.T # rhs: NxD embedding matrix rell = (relationl.E[:, idxo]).reshape((1, relationl.D)) # rell: 1xD vector containing the embedding of idxo (relationl) relr = (relationr.E[:, idxo]).reshape((1, relationr.D)) # relr: 1xD vector containing the embedding of idxo (relationr) tmp = leftop(lhs, rell) # a = rell(lhs) # b = relr(rhs) # Negative Energy simi = fnsim(tmp.reshape((1, tmp.shape[1])), rightop(rhs, relr)) # simi = fnsim(a, b) pen_simi = g[0, :].T * prior.P[idxo, 0].T + g[1, :].T * prior.P[idxo, 1].T simi = simi - pen_simi return theano.function([idxl, idxo, g], [simi], on_unused_input='ignore')
def RankRightFnIdx_filtered(fnsim, embeddings, leftop, rightop, subtensorspec=None): """ This function returns a Theano function to measure the similarity score of all 'right' entities given couples of relation and 'left' entities (as index values). """ embedding, relationl, relationr = parse_embeddings(embeddings) # Inputs idxl, idxo = T.iscalar('idxl'), T.iscalar('idxo') rightparts = T.ivector('rightparts') # Graph lhs = (embedding.E[:, idxl]).reshape((1, embedding.D)) # lhs: 1xD vector containing the embedding of idxl if subtensorspec is not None: # We compute the score only for a subset of entities rhs = (embedding.E[:, :subtensorspec]).T else: rhs = embedding.E.T # rhs: NxD embedding matrix rhs = rhs[rightparts, :] # select the right parts not appearing # in the train/valid/test sets rell = (relationl.E[:, idxo]).reshape((1, relationl.D)) # rell: 1xD vector containing the embedding of idxo (relationl) relr = (relationr.E[:, idxo]).reshape((1, relationr.D)) # relr: 1xD vector containing the embedding of idxo (relationr) tmp = leftop(lhs, rell) # a = rell(lhs) # b = relr(rhs) simi = fnsim(tmp.reshape((1, tmp.shape[1])), rightop(rhs, relr)) # simi = fnsim(a, b) return theano.function([idxl, idxo, rightparts], [simi], on_unused_input='ignore')
def EnergyFn(fnsim, embeddings, leftop, rightop): embedding, relationl, relationr = parse_embeddings(embeddings) idxl, idxo, idxr = T.iscalar('idxl'), T.iscalar('idxo'), T.iscalar('idxr') lhs = (embedding.E[:, idxl]).reshape((1, embedding.D)) rhs = (embedding.E[:, idxr]).reshape((1, embedding.D)) rell = (relationl.E[:, idxo]).reshape((1, relationl.D)) relr = (relationr.E[:, idxo]).reshape((1, relationr.D)) energy = - fnsim(leftop(lhs, rell), rightop(rhs, relr)) return theano.function([idxl, idxr, idxo], [energy], on_unused_input='ignore')
def RankRightFnIdx(fnsim, embeddings, leftop, rightop, subtensorspec=None): """ This function returns a Theano function to measure the similarity score of all 'right' entities given couples of relation and 'left' entities (as index values). :param fnsim: similarity function (on Theano variables). :param embeddings: an Embeddings instance. :param leftop: class for the 'left' operator. :param rightop: class for the 'right' operator. :param subtensorspec: only measure the similarity score for the entities corresponding to the first subtensorspec (int) entities of the embedding matrix (default None: all entities). """ embedding, relationl, relationr = parse_embeddings(embeddings) # Inputs idxl, idxo = T.iscalar('idxl'), T.iscalar('idxo') # Graph lhs = (embedding.E[:, idxl]).reshape( (1, embedding.D)) # lhs: 1xD vector containing the embedding of idxl if subtensorspec is not None: # We compute the score only for a subset of entities rhs = (embedding.E[:, :subtensorspec]).T else: rhs = embedding.E.T # rhs: NxD embedding matrix rell = (relationl.E[:, idxo]).reshape( (1, relationl.D )) # rell: 1xD vector containing the embedding of idxo (relationl) relr = (relationr.E[:, idxo]).reshape( (1, relationr.D )) # relr: 1xD vector containing the embedding of idxo (relationr) tmp = leftop(lhs, rell) # a = rell(lhs) # b = relr(rhs) simi = fnsim(tmp.reshape((1, tmp.shape[1])), rightop(rhs, relr)) # simi = fnsim(a, b) """ Theano function inputs. :input idxl: index value of the 'left' member. :input idxo: index value of the relation member. Theano function output. :output simi: vector of score values. """ return theano.function([idxl, idxo], [simi], on_unused_input='ignore')
def RankRightFnIdx(fnsim, embeddings, leftop, rightop, subtensorspec=None): """ This function returns a Theano function to measure the similarity score of all 'right' entities given couples of relation and 'left' entities (as index values). :param fnsim: similarity function (on Theano variables). :param embeddings: an Embeddings instance. :param leftop: class for the 'left' operator. :param rightop: class for the 'right' operator. :param subtensorspec: only measure the similarity score for the entities corresponding to the first subtensorspec (int) entities of the embedding matrix (default None: all entities). """ embedding, relationl, relationr = parse_embeddings(embeddings) # Inputs idxl, idxo = T.iscalar('idxl'), T.iscalar('idxo') # Graph lhs = (embedding.E[:, idxl]).reshape((1, embedding.D)) # lhs: 1xD vector containing the embedding of idxl if subtensorspec is not None: # We compute the score only for a subset of entities rhs = (embedding.E[:, :subtensorspec]).T else: rhs = embedding.E.T # rhs: NxD embedding matrix rell = (relationl.E[:, idxo]).reshape((1, relationl.D)) # rell: 1xD vector containing the embedding of idxo (relationl) relr = (relationr.E[:, idxo]).reshape((1, relationr.D)) # relr: 1xD vector containing the embedding of idxo (relationr) tmp = leftop(lhs, rell) # a = rell(lhs) # b = relr(rhs) simi = fnsim(tmp.reshape((1, tmp.shape[1])), rightop(rhs, relr)) # simi = fnsim(a, b) """ Theano function inputs. :input idxl: index value of the 'left' member. :input idxo: index value of the relation member. Theano function output. :output simi: vector of score values. """ return theano.function([idxl, idxo], [simi], on_unused_input='ignore')
def RankLeftFnIdx_filtered(fnsim, embeddings, leftop, rightop, subtensorspec=None): """ This function returns a Theano function to measure the similarity score of all 'left' entities given couples of relation and 'right' entities (as index values). """ embedding, relationl, relationr = parse_embeddings(embeddings) # Inputs idxr, idxo = T.iscalar('idxr'), T.iscalar('idxo') leftparts = T.ivector('leftparts') # Graph if subtensorspec is not None: # We compute the score only for a subset of entities lhs = (embedding.E[:, :subtensorspec]).T else: lhs = embedding.E.T lhs = lhs[leftparts, :] # select the left parts not appearing # in the train/valid/test sets rhs = (embedding.E[:, idxr]).reshape((1, embedding.D)) rell = (relationl.E[:, idxo]).reshape((1, relationl.D)) relr = (relationr.E[:, idxo]).reshape((1, relationr.D)) tmp = rightop(rhs, relr) simi = fnsim(leftop(lhs, rell), tmp.reshape((1, tmp.shape[1]))) """ Theano function inputs. :input idxr: index value of the 'right' member. :input idxo: index value of the relation member. Theano function output. :output simi: vector of score values. """ return theano.function([idxr, idxo, leftparts], [simi], on_unused_input='ignore')
def RankRightFnIdx_Schema(fnsim, embeddings, prior, leftop, rightop, subtensorspec=None): embedding, relationl, relationr = parse_embeddings(embeddings) # Inputs idxl, idxo = T.iscalar('idxl'), T.iscalar('idxo') g = T.matrix('g') # Graph lhs = (embedding.E[:, idxl]).reshape( (1, embedding.D)) # lhs: 1xD vector containing the embedding of idxl if subtensorspec is not None: # We compute the score only for a subset of entities rhs = (embedding.E[:, :subtensorspec]).T else: rhs = embedding.E.T # rhs: NxD embedding matrix rell = (relationl.E[:, idxo]).reshape( (1, relationl.D )) # rell: 1xD vector containing the embedding of idxo (relationl) relr = (relationr.E[:, idxo]).reshape( (1, relationr.D )) # relr: 1xD vector containing the embedding of idxo (relationr) tmp = leftop(lhs, rell) # a = rell(lhs) # b = relr(rhs) # Negative Energy simi = fnsim(tmp.reshape((1, tmp.shape[1])), rightop(rhs, relr)) # simi = fnsim(a, b) pen_simi = g[0, :].T * prior.P[idxo, 0].T + g[1, :].T * prior.P[idxo, 1].T simi = simi - pen_simi return theano.function([idxl, idxo, g], [simi], on_unused_input='ignore')
def RankRightFnIdx_filtered(fnsim, embeddings, leftop, rightop, subtensorspec=None): """ This function returns a Theano function to measure the similarity score of all 'right' entities given couples of relation and 'left' entities (as index values). """ embedding, relationl, relationr = parse_embeddings(embeddings) # Inputs idxl, idxo = T.iscalar('idxl'), T.iscalar('idxo') rightparts = T.ivector('rightparts') # Graph lhs = (embedding.E[:, idxl]).reshape( (1, embedding.D)) # lhs: 1xD vector containing the embedding of idxl if subtensorspec is not None: # We compute the score only for a subset of entities rhs = (embedding.E[:, :subtensorspec]).T else: rhs = embedding.E.T # rhs: NxD embedding matrix rhs = rhs[rightparts, :] # select the right parts not appearing # in the train/valid/test sets rell = (relationl.E[:, idxo]).reshape( (1, relationl.D )) # rell: 1xD vector containing the embedding of idxo (relationl) relr = (relationr.E[:, idxo]).reshape( (1, relationr.D )) # relr: 1xD vector containing the embedding of idxo (relationr) tmp = leftop(lhs, rell) # a = rell(lhs) # b = relr(rhs) simi = fnsim(tmp.reshape((1, tmp.shape[1])), rightop(rhs, relr)) # simi = fnsim(a, b) return theano.function([idxl, idxo, rightparts], [simi], on_unused_input='ignore')