transform

old TransE-like models
git clone https://esimon.eu/repos/transform.git
Log | Files | Refs | README

commit f3629a2ce1f606baa6447e1d7fb4ee25a4cc58ff
Author: Étienne Simon <esimon@esimon.eu>
Date:   Fri, 11 Apr 2014 19:20:19 +0200

Add class for Embeddings

Diffstat:
Aembeddings.py | 57+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 57 insertions(+), 0 deletions(-)

diff --git a/embeddings.py b/embeddings.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python2 + +import numpy +import theano +import theano.tensor as T +import theano.sparse as S + +class Embeddings(object): + """ Embeddings matrix class. + + This class has one parameter: + E -- the "Embeddings" + """ + def __init__(self, rng, number, dimension, tag): + """ Initialise the parameter. + + Keyword arguments: + rng -- module for random number generation + number -- number of embeddings + dimension -- dimension of the embeddings + tag -- name of the embeddings for parameter declaration + """ + + self.number = number + self.dimension = dimension + + E_bound = numpy.sqrt(6. / dimension) + E_values = rng.uniform(low=-E_bound, high=E_bound, size=(number, dimension)) + E_values = E_values / numpy.sqrt(numpy.sum(E_values **2, axis=1)) + self.E = theano.shared(name=tag, value=numpy.asarray(E_values, dtype=theano.config.floatX)) + + self.params = [E] + + def embed(self, entities): + """ Embed given entities. + + Keyword arguments: + entities -- a sparse matrix of size ('x', self.number) + """ + return S.dot(entities, self.E) + + def L1_norm(self): + """ Compute the L1-norm of the embeddings parameter. """ + return T.sum(T.abs(self.E)) + + def sqrL2_norm(self): + """ Compute the squared L2-norm of the embeddings parameter. """ + return T.sum(T.sqr(self.E)) + + def sgd_updates(self, cost, learning_rate): + """ Compute the updates to perform a SGD step w.r.t. a given cost. + + Keyword arguments: + cost -- The cost to optimise. + learning_rate -- The learning rate used for gradient descent. + """ + return [(self.E, self.E - learning_rate * T.grad(cost=cost, wrt=self.E))]