{"action":"created","comment":{"url":"https://api.github.com/repos/HazyResearch/ddlite/pulls/comments/67080131","id":67080131,"diff_hunk":"@@ -1297,6 +1313,355 @@ def show_log(self, idx=None):\n     except:\n       raise ValueError(\"Index must be for one of {} logs\".format(len(self.logger)))\n \n+  ######################################################\n+  ######################## LSTM ########################\n+  ######################################################\n+\n+  def ortho_weight(self):\n+    u, s, v = np.linalg.svd(np.random.randn(self.lstm_settings['dim'], self.lstm_settings['dim']))\n+    return u.astype(config.floatX)\n+\n+  def init_lstm_params(self):\n+    params = OrderedDict()\n+    # embedding\n+    randn = np.random.rand(self.lstm_settings['word_size'], self.lstm_settings['dim'])\n+    params['Wemb'] = (0.01 * randn).astype(config.floatX)\n+    # lstm\n+    params['lstm_W'] = np.concatenate([self.ortho_weight(), self.ortho_weight(), self.ortho_weight(), self.ortho_weight()], axis = 1)\n+    params['lstm_U'] = np.concatenate([self.ortho_weight(), self.ortho_weight(), self.ortho_weight(), self.ortho_weight()], axis = 1)\n+    params['lstm_b'] = np.zeros((4 * self.lstm_settings['dim'],)).astype(config.floatX)\n+    # classifier\n+    params['U'] = 0.01 * np.random.randn(self.lstm_settings['dim'], self.lstm_settings['label_dim']).astype(config.floatX)\n+    params['b'] = np.zeros((self.lstm_settings['label_dim'],)).astype(config.floatX)\n+    self.lstm_params=params\n+\n+  def init_lstm_theano_params(self):\n+    tparams = OrderedDict()\n+    for k, v in self.lstm_params.items():\n+        tparams[k] = theano.shared(self.lstm_params[k], name = k)\n+    self.lstm_tparams=tparams\n+\n+  def dropout_layer(self, state_before, use_noise, rnd):\n+    proj = tensor.switch(use_noise,\n+                         (state_before * rnd.binomial(state_before.shape, p=0.5, n=1, dtype=state_before.dtype)),\n+                         state_before * 0.5)\n+    return proj\n+\n+  def adadelta(lr, tparams, grads, x, mask, y, w, cost):\n+    \"\"\"\n+    An adaptive learning rate optimizer\n+\n+    Parameters\n+    ----------\n+    lr : Theano SharedVariable\n+        Initial learning rate\n+    tpramas: Theano SharedVariable\n+        Model parameters\n+    grads: Theano variable\n+        Gradients of cost w.r.t to parameres\n+    x: Theano variable\n+        Model inputs\n+    mask: Theano variable\n+        Sequence mask\n+    y: Theano variable\n+        Targets\n+    cost: Theano variable\n+        Objective fucntion to minimize\n+\n+    Notes\n+    -----\n+    For more information, see [ADADELTA]_.\n+\n+    .. [ADADELTA] Matthew D. Zeiler, *ADADELTA: An Adaptive Learning\n+       Rate Method*, arXiv:1212.5701.\n+    \"\"\"\n+\n+    zipped_grads = [theano.shared(p.get_value() * np.asarray(0., dtype = config.floatX), name='%s_grad' % k) for k, p in tparams.items()]\n+    running_up2 = [theano.shared(p.get_value() * np.asarray(0., dtype = config.floatX), name='%s_rup2' % k) for k, p in tparams.items()]\n+    running_grads2 = [theano.shared(p.get_value() * np.asarray(0., dtype = config.floatX), name='%s_rgrad2' % k) for k, p in tparams.items()]\n+\n+    zgup = [(zg, g) for zg, g in zip(zipped_grads, grads)]\n+    rg2up = [(rg2, 0.95 * rg2 + 0.05 * (g ** 2)) for rg2, g in zip(running_grads2, grads)]\n+\n+    f_grad_shared = theano.function([x, mask, y, w], cost, updates=zgup + rg2up, name='adadelta_f_grad_shared')\n+\n+    updir = [-tensor.sqrt(ru2 + 1e-6) / tensor.sqrt(rg2 + 1e-6) * zg for zg, ru2, rg2 in zip(zipped_grads, running_up2, running_grads2)]\n+    ru2up = [(ru2, 0.95 * ru2 + 0.05 * (ud ** 2)) for ru2, ud in zip(running_up2, updir)]\n+    param_up = [(p, p + ud) for p, ud in zip(tparams.values(), updir)]\n+\n+    f_update = theano.function([lr], [], updates=ru2up + param_up, on_unused_input='ignore', name='adadelta_f_update')\n+    return f_grad_shared, f_update\n+\n+  def build_lstm(self):\n+    def _slice(_x, n, dim):\n+      if _x.ndim  == 3:\n+        return _x[:, :, n * dim:(n + 1) * dim]\n+      else:\n+        return _x[:, n * dim:(n + 1) * dim]\n+\n+    def _step(m_, x_, h_, c_):\n+      preact = tensor.dot(h_, self.lstm_tparams['lstm_U'])\n+      preact += x_\n+      i = tensor.nnet.sigmoid(_slice(preact, 0, self.lstm_settings['dim']))\n+      f = tensor.nnet.sigmoid(_slice(preact, 1, self.lstm_settings['dim']))\n+      o = tensor.nnet.sigmoid(_slice(preact, 2, self.lstm_settings['dim']))\n+      c = tensor.tanh(_slice(preact, 3, self.lstm_settings['dim']))\n+\n+      c = f * c_ + i * c\n+      c = m_[:, None] * c + (1. - m_)[:, None] * c_\n+      h = o * tensor.tanh(c)\n+      h = m_[:, None] * h + (1. - m_)[:, None] * h_\n+      return h, c\n+\n+    rnd = RandomStreams(self.lstm_SEED)\n+    # Used for dropout.\n+    use_noise = theano.shared(np.asarray(0., dtype = config.floatX))\n+\n+    x = tensor.matrix('x', dtype='int64')\n+    mask = tensor.matrix('mask', dtype=config.floatX)\n+    y = tensor.vector('y', dtype='int64')\n+    w = tensor.vector('w', dtype=config.floatX)\n+\n+    n_timesteps = x.shape[0]\n+    n_samples = x.shape[1]\n+    emb = self.lstm_tparams['Wemb'][x.flatten()].reshape([n_timesteps, n_samples, self.lstm_settings['dim']])\n+\n+    state_below = (tensor.dot(emb, self.lstm_tparams['lstm_W']) + self.lstm_tparams['lstm_b'])\n+    rval, updates = theano.scan(_step,\n+                                sequences = [mask, state_below],\n+                                outputs_info = [tensor.alloc(np.asarray(0., dtype = config.floatX),\n+                                                             n_samples,\n+                                                             self.lstm_settings['dim']),\n+                                                tensor.alloc(np.asarray(0., dtype = config.floatX),\n+                                                             n_samples,\n+                                                             self.lstm_settings['dim'])],\n+                                name = 'lstm_layers',\n+                                n_steps = n_timesteps)\n+\n+    proj = rval[0]\n+    proj = (proj * mask[:, :, None]).sum(axis=0)\n+    proj = proj / mask.sum(axis=0)[:, None]\n+\n+    if self.lstm_settings['dropout']:\n+      proj = self.dropout_layer(proj, use_noise, rnd)\n+\n+    pred = tensor.nnet.softmax(tensor.dot(proj, self.lstm_tparams['U']) + self.lstm_tparams['b'])\n+\n+    f_pred_prob = theano.function([x, mask], pred, name='f_pred_prob')\n+    f_pred = theano.function([x, mask], pred.argmax(axis=1), name='f_pred')\n+\n+    eps = 1e-6\n+\n+    cost = -(w * tensor.log(pred[tensor.arange(n_samples), y] + eps) + (1. - w) * tensor.log(1. - pred[tensor.arange(n_samples), y] + eps)).mean()\n+    return use_noise, x, mask, y, f_pred_prob, f_pred, cost, w\n+\n+  def mini_batches(self, n, batch_size, shuffle = False):\n+    ids = np.arange(n, dtype = \"int32\")\n+    if shuffle:\n+      np.random.shuffle(ids)\n+    minibatches = []\n+    start = 0\n+    for i in range(n // batch_size):\n+      minibatches.append(ids[start: start + batch_size])\n+      start = start + batch_size\n+    if start != n:\n+      minibatches.append(ids[start:])\n+    return zip(range(len(minibatches)), minibatches)\n+\n+  def process_data(self, x, y, w, maxlen = None):\n+    lengths = [len(i) for i in x]\n+\n+    # filter all examples which length > maxlen\n+    if maxlen is not None:\n+      _x, _y, _w, _lengths = [], [], [], []\n+      for __x, __y, __l, __w in zip(x, y, lengths, w):\n+        if __l <= maxlen:\n+          _x.append(__x)\n+          _y.append(__y)\n+          _lengths.append(__l)\n+          _w.append(__w)\n+      lengths = _lengths\n+      x = _x\n+      y = _y\n+      w = _w\n+      if len(lengths) == 0:\n+        return None, None, None\n+\n+    nsamples = len(x)\n+    maxlen = np.max(lengths)\n+    _x = np.zeros((maxlen, nsamples)).astype('int64')\n+    _x_mask = np.zeros((maxlen, nsamples)).astype(theano.config.floatX)\n+\n+    for idx, sample in enumerate(x):\n+      _x[:lengths[idx], idx] = sample\n+      _x_mask[:lengths[idx], idx] = 1.\n+\n+    return _x, _x_mask, y, w\n+\n+  def transfer_params_from_gpu_to_cpy(self):\n+    params = OrderedDict()\n+    for k, v in self.lstm_tparams.items():\n+      params[k] = v.get_value()\n+    return params\n+\n+  def pred(self, f_pred, data, minibatches):\n+    error = 0\n+    for id, samples in minibatches:\n+      x = [data[1][i] for i in samples]\n+      y = [data[2][i] for i in samples]\n+      w = [data[3][i] for i in samples]\n+      x, mask, y, w = self.process_data(x, y, w, maxlen = None)\n+      preds = f_pred(x, mask)\n+      error += (preds == y).sum()\n+    error = 1. - np.asarray(error, dtype = config.floatX) / len(data[0])\n+    return error\n+\n+  def pred_p(self, f_pred_prob, data, minibatches):\n+    error = 0\n+    res = []\n+    for id, samples in minibatches:\n+      l = [data[0][i] for i in samples]\n+      x = [data[1][i] for i in samples]\n+      y = [data[2][i] for i in samples]\n+      w = [data[3][i] for i in samples]\n+      x, mask, y, w = self.process_data(x, y, w, maxlen = None)\n+      preds = f_pred_prob(x, mask)\n+      pred_l = preds.argmax(axis = 1)\n+      res.extend([(a, b[1]) for a, b in zip(l, preds)])\n+    return res\n+\n+  def lstm(self,\n+           dim = 50,                # word embedding dimension\n+           batch_size = 100,        # batch size\n+           learning_rate = 0.01,    # learning rate for sgd\n+           optimizer = adadelta,    # optimizer\n+           epoch = 300,             # learning epoch\n+           maxlen = 1000,           # max sequence len\n+           dropout = True,\n+           verbose = True):\n+\n+    self.lstm_settings = locals().copy()\n+\n+    self.lstm_settings['label_dim'] = 2\n+    self.lstm_settings['word_size'] = len(self.word_dict)\n+    self.init_lstm_params()\n+\n+    self.init_lstm_theano_params()\n+\n+    use_noise, x, mask, y, f_pred_prob, f_pred, cost, w = self.build_lstm()\n+\n+    f_cost = theano.function([x, mask, y, w], cost, name='f_cost')\n+    grads = tensor.grad(cost, wrt=list(self.lstm_tparams.values()))\n+    f_grad = theano.function([x, mask, y, w], grads, name='f_grad')\n+\n+    lr = tensor.scalar(name='lr')\n+    f_grad_shared, f_update = optimizer(lr, self.lstm_tparams, grads, x, mask, y, w, cost)\n+\n+    train_data, x, y, w = [], [], [], []\n+    lf_probs = self.get_predicted_probability_lf()\n+    for idx in self.training():\n+        x.append(self.lstm_X[idx])\n+        if lf_probs[idx]>0.5:","path":"ddlite.py","position":282,"original_position":282,"commit_id":"ed68829a5e6cbac1bacbe10506564ec53470c0ee","original_commit_id":"ed68829a5e6cbac1bacbe10506564ec53470c0ee","user":{"login":"SenWu","id":5580008,"avatar_url":"https://avatars.githubusercontent.com/u/5580008?v=3","gravatar_id":"","url":"https://api.github.com/users/SenWu","html_url":"https://github.com/SenWu","followers_url":"https://api.github.com/users/SenWu/followers","following_url":"https://api.github.com/users/SenWu/following{/other_user}","gists_url":"https://api.github.com/users/SenWu/gists{/gist_id}","starred_url":"https://api.github.com/users/SenWu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SenWu/subscriptions","organizations_url":"https://api.github.com/users/SenWu/orgs","repos_url":"https://api.github.com/users/SenWu/repos","events_url":"https://api.github.com/users/SenWu/events{/privacy}","received_events_url":"https://api.github.com/users/SenWu/received_events","type":"User","site_admin":false},"body":"Just to get likely-labels","created_at":"2016-06-15T00:10:03Z","updated_at":"2016-06-15T00:10:03Z","html_url":"https://github.com/HazyResearch/ddlite/pull/240#discussion_r67080131","pull_request_url":"https://api.github.com/repos/HazyResearch/ddlite/pulls/240","_links":{"self":{"href":"https://api.github.com/repos/HazyResearch/ddlite/pulls/comments/67080131"},"html":{"href":"https://github.com/HazyResearch/ddlite/pull/240#discussion_r67080131"},"pull_request":{"href":"https://api.github.com/repos/HazyResearch/ddlite/pulls/240"}}},"pull_request":{"url":"https://api.github.com/repos/HazyResearch/ddlite/pulls/240","id":73698470,"html_url":"https://github.com/HazyResearch/ddlite/pull/240","diff_url":"https://github.com/HazyResearch/ddlite/pull/240.diff","patch_url":"https://github.com/HazyResearch/ddlite/pull/240.patch","issue_url":"https://api.github.com/repos/HazyResearch/ddlite/issues/240","number":240,"state":"open","locked":false,"title":"add LSTM module in DDLite","user":{"login":"SenWu","id":5580008,"avatar_url":"https://avatars.githubusercontent.com/u/5580008?v=3","gravatar_id":"","url":"https://api.github.com/users/SenWu","html_url":"https://github.com/SenWu","followers_url":"https://api.github.com/users/SenWu/followers","following_url":"https://api.github.com/users/SenWu/following{/other_user}","gists_url":"https://api.github.com/users/SenWu/gists{/gist_id}","starred_url":"https://api.github.com/users/SenWu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SenWu/subscriptions","organizations_url":"https://api.github.com/users/SenWu/orgs","repos_url":"https://api.github.com/users/SenWu/repos","events_url":"https://api.github.com/users/SenWu/events{/privacy}","received_events_url":"https://api.github.com/users/SenWu/received_events","type":"User","site_admin":false},"body":"1. add LSTM module in DDLite\r\n2. update GeneTaggerExample_Learning.ipynb to show how to run LSTM in DDLite","created_at":"2016-06-14T08:25:35Z","updated_at":"2016-06-15T00:10:03Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e77a820daa7d675184e9ddc9b2cf718fb64ddc49","assignee":{"login":"ajratner","id":1585405,"avatar_url":"https://avatars.githubusercontent.com/u/1585405?v=3","gravatar_id":"","url":"https://api.github.com/users/ajratner","html_url":"https://github.com/ajratner","followers_url":"https://api.github.com/users/ajratner/followers","following_url":"https://api.github.com/users/ajratner/following{/other_user}","gists_url":"https://api.github.com/users/ajratner/gists{/gist_id}","starred_url":"https://api.github.com/users/ajratner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ajratner/subscriptions","organizations_url":"https://api.github.com/users/ajratner/orgs","repos_url":"https://api.github.com/users/ajratner/repos","events_url":"https://api.github.com/users/ajratner/events{/privacy}","received_events_url":"https://api.github.com/users/ajratner/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/HazyResearch/ddlite/milestones/5","html_url":"https://github.com/HazyResearch/ddlite/milestones/Refactored%20Features%20interface%20(w/%20TDL%20and%20LSTMs)","labels_url":"https://api.github.com/repos/HazyResearch/ddlite/milestones/5/labels","id":1821640,"number":5,"title":"Refactored Features interface (w/ TDL and LSTMs)","description":"","creator":{"login":"ajratner","id":1585405,"avatar_url":"https://avatars.githubusercontent.com/u/1585405?v=3","gravatar_id":"","url":"https://api.github.com/users/ajratner","html_url":"https://github.com/ajratner","followers_url":"https://api.github.com/users/ajratner/followers","following_url":"https://api.github.com/users/ajratner/following{/other_user}","gists_url":"https://api.github.com/users/ajratner/gists{/gist_id}","starred_url":"https://api.github.com/users/ajratner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ajratner/subscriptions","organizations_url":"https://api.github.com/users/ajratner/orgs","repos_url":"https://api.github.com/users/ajratner/repos","events_url":"https://api.github.com/users/ajratner/events{/privacy}","received_events_url":"https://api.github.com/users/ajratner/received_events","type":"User","site_admin":false},"open_issues":4,"closed_issues":0,"state":"open","created_at":"2016-06-11T17:58:43Z","updated_at":"2016-06-14T17:02:18Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/HazyResearch/ddlite/pulls/240/commits","review_comments_url":"https://api.github.com/repos/HazyResearch/ddlite/pulls/240/comments","review_comment_url":"https://api.github.com/repos/HazyResearch/ddlite/pulls/comments{/number}","comments_url":"https://api.github.com/repos/HazyResearch/ddlite/issues/240/comments","statuses_url":"https://api.github.com/repos/HazyResearch/ddlite/statuses/ed68829a5e6cbac1bacbe10506564ec53470c0ee","head":{"label":"HazyResearch:sen_lstm","ref":"sen_lstm","sha":"ed68829a5e6cbac1bacbe10506564ec53470c0ee","user":{"login":"HazyResearch","id":2165246,"avatar_url":"https://avatars.githubusercontent.com/u/2165246?v=3","gravatar_id":"","url":"https://api.github.com/users/HazyResearch","html_url":"https://github.com/HazyResearch","followers_url":"https://api.github.com/users/HazyResearch/followers","following_url":"https://api.github.com/users/HazyResearch/following{/other_user}","gists_url":"https://api.github.com/users/HazyResearch/gists{/gist_id}","starred_url":"https://api.github.com/users/HazyResearch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/HazyResearch/subscriptions","organizations_url":"https://api.github.com/users/HazyResearch/orgs","repos_url":"https://api.github.com/users/HazyResearch/repos","events_url":"https://api.github.com/users/HazyResearch/events{/privacy}","received_events_url":"https://api.github.com/users/HazyResearch/received_events","type":"Organization","site_admin":false},"repo":{"id":52581991,"name":"ddlite","full_name":"HazyResearch/ddlite","owner":{"login":"HazyResearch","id":2165246,"avatar_url":"https://avatars.githubusercontent.com/u/2165246?v=3","gravatar_id":"","url":"https://api.github.com/users/HazyResearch","html_url":"https://github.com/HazyResearch","followers_url":"https://api.github.com/users/HazyResearch/followers","following_url":"https://api.github.com/users/HazyResearch/following{/other_user}","gists_url":"https://api.github.com/users/HazyResearch/gists{/gist_id}","starred_url":"https://api.github.com/users/HazyResearch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/HazyResearch/subscriptions","organizations_url":"https://api.github.com/users/HazyResearch/orgs","repos_url":"https://api.github.com/users/HazyResearch/repos","events_url":"https://api.github.com/users/HazyResearch/events{/privacy}","received_events_url":"https://api.github.com/users/HazyResearch/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/HazyResearch/ddlite","description":"A low calorie platform for developing information extraction systems using data programming","fork":false,"url":"https://api.github.com/repos/HazyResearch/ddlite","forks_url":"https://api.github.com/repos/HazyResearch/ddlite/forks","keys_url":"https://api.github.com/repos/HazyResearch/ddlite/keys{/key_id}","collaborators_url":"https://api.github.com/repos/HazyResearch/ddlite/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/HazyResearch/ddlite/teams","hooks_url":"https://api.github.com/repos/HazyResearch/ddlite/hooks","issue_events_url":"https://api.github.com/repos/HazyResearch/ddlite/issues/events{/number}","events_url":"https://api.github.com/repos/HazyResearch/ddlite/events","assignees_url":"https://api.github.com/repos/HazyResearch/ddlite/assignees{/user}","branches_url":"https://api.github.com/repos/HazyResearch/ddlite/branches{/branch}","tags_url":"https://api.github.com/repos/HazyResearch/ddlite/tags","blobs_url":"https://api.github.com/repos/HazyResearch/ddlite/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/HazyResearch/ddlite/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/HazyResearch/ddlite/git/refs{/sha}","trees_url":"https://api.github.com/repos/HazyResearch/ddlite/git/trees{/sha}","statuses_url":"https://api.github.com/repos/HazyResearch/ddlite/statuses/{sha}","languages_url":"https://api.github.com/repos/HazyResearch/ddlite/languages","stargazers_url":"https://api.github.com/repos/HazyResearch/ddlite/stargazers","contributors_url":"https://api.github.com/repos/HazyResearch/ddlite/contributors","subscribers_url":"https://api.github.com/repos/HazyResearch/ddlite/subscribers","subscription_url":"https://api.github.com/repos/HazyResearch/ddlite/subscription","commits_url":"https://api.github.com/repos/HazyResearch/ddlite/commits{/sha}","git_commits_url":"https://api.github.com/repos/HazyResearch/ddlite/git/commits{/sha}","comments_url":"https://api.github.com/repos/HazyResearch/ddlite/comments{/number}","issue_comment_url":"https://api.github.com/repos/HazyResearch/ddlite/issues/comments{/number}","contents_url":"https://api.github.com/repos/HazyResearch/ddlite/contents/{+path}","compare_url":"https://api.github.com/repos/HazyResearch/ddlite/compare/{base}...{head}","merges_url":"https://api.github.com/repos/HazyResearch/ddlite/merges","archive_url":"https://api.github.com/repos/HazyResearch/ddlite/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/HazyResearch/ddlite/downloads","issues_url":"https://api.github.com/repos/HazyResearch/ddlite/issues{/number}","pulls_url":"https://api.github.com/repos/HazyResearch/ddlite/pulls{/number}","milestones_url":"https://api.github.com/repos/HazyResearch/ddlite/milestones{/number}","notifications_url":"https://api.github.com/repos/HazyResearch/ddlite/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/HazyResearch/ddlite/labels{/name}","releases_url":"https://api.github.com/repos/HazyResearch/ddlite/releases{/id}","deployments_url":"https://api.github.com/repos/HazyResearch/ddlite/deployments","created_at":"2016-02-26T05:52:45Z","updated_at":"2016-06-14T16:25:33Z","pushed_at":"2016-06-14T20:11:49Z","git_url":"git://github.com/HazyResearch/ddlite.git","ssh_url":"git@github.com:HazyResearch/ddlite.git","clone_url":"https://github.com/HazyResearch/ddlite.git","svn_url":"https://github.com/HazyResearch/ddlite","homepage":"","size":28961,"stargazers_count":14,"watchers_count":14,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":7,"mirror_url":null,"open_issues_count":80,"forks":7,"open_issues":80,"watchers":14,"default_branch":"master"}},"base":{"label":"HazyResearch:pipeline-clean","ref":"pipeline-clean","sha":"7f3a10b2b3ebae7c52fec540560a6e0c4605e848","user":{"login":"HazyResearch","id":2165246,"avatar_url":"https://avatars.githubusercontent.com/u/2165246?v=3","gravatar_id":"","url":"https://api.github.com/users/HazyResearch","html_url":"https://github.com/HazyResearch","followers_url":"https://api.github.com/users/HazyResearch/followers","following_url":"https://api.github.com/users/HazyResearch/following{/other_user}","gists_url":"https://api.github.com/users/HazyResearch/gists{/gist_id}","starred_url":"https://api.github.com/users/HazyResearch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/HazyResearch/subscriptions","organizations_url":"https://api.github.com/users/HazyResearch/orgs","repos_url":"https://api.github.com/users/HazyResearch/repos","events_url":"https://api.github.com/users/HazyResearch/events{/privacy}","received_events_url":"https://api.github.com/users/HazyResearch/received_events","type":"Organization","site_admin":false},"repo":{"id":52581991,"name":"ddlite","full_name":"HazyResearch/ddlite","owner":{"login":"HazyResearch","id":2165246,"avatar_url":"https://avatars.githubusercontent.com/u/2165246?v=3","gravatar_id":"","url":"https://api.github.com/users/HazyResearch","html_url":"https://github.com/HazyResearch","followers_url":"https://api.github.com/users/HazyResearch/followers","following_url":"https://api.github.com/users/HazyResearch/following{/other_user}","gists_url":"https://api.github.com/users/HazyResearch/gists{/gist_id}","starred_url":"https://api.github.com/users/HazyResearch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/HazyResearch/subscriptions","organizations_url":"https://api.github.com/users/HazyResearch/orgs","repos_url":"https://api.github.com/users/HazyResearch/repos","events_url":"https://api.github.com/users/HazyResearch/events{/privacy}","received_events_url":"https://api.github.com/users/HazyResearch/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/HazyResearch/ddlite","description":"A low calorie platform for developing information extraction systems using data programming","fork":false,"url":"https://api.github.com/repos/HazyResearch/ddlite","forks_url":"https://api.github.com/repos/HazyResearch/ddlite/forks","keys_url":"https://api.github.com/repos/HazyResearch/ddlite/keys{/key_id}","collaborators_url":"https://api.github.com/repos/HazyResearch/ddlite/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/HazyResearch/ddlite/teams","hooks_url":"https://api.github.com/repos/HazyResearch/ddlite/hooks","issue_events_url":"https://api.github.com/repos/HazyResearch/ddlite/issues/events{/number}","events_url":"https://api.github.com/repos/HazyResearch/ddlite/events","assignees_url":"https://api.github.com/repos/HazyResearch/ddlite/assignees{/user}","branches_url":"https://api.github.com/repos/HazyResearch/ddlite/branches{/branch}","tags_url":"https://api.github.com/repos/HazyResearch/ddlite/tags","blobs_url":"https://api.github.com/repos/HazyResearch/ddlite/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/HazyResearch/ddlite/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/HazyResearch/ddlite/git/refs{/sha}","trees_url":"https://api.github.com/repos/HazyResearch/ddlite/git/trees{/sha}","statuses_url":"https://api.github.com/repos/HazyResearch/ddlite/statuses/{sha}","languages_url":"https://api.github.com/repos/HazyResearch/ddlite/languages","stargazers_url":"https://api.github.com/repos/HazyResearch/ddlite/stargazers","contributors_url":"https://api.github.com/repos/HazyResearch/ddlite/contributors","subscribers_url":"https://api.github.com/repos/HazyResearch/ddlite/subscribers","subscription_url":"https://api.github.com/repos/HazyResearch/ddlite/subscription","commits_url":"https://api.github.com/repos/HazyResearch/ddlite/commits{/sha}","git_commits_url":"https://api.github.com/repos/HazyResearch/ddlite/git/commits{/sha}","comments_url":"https://api.github.com/repos/HazyResearch/ddlite/comments{/number}","issue_comment_url":"https://api.github.com/repos/HazyResearch/ddlite/issues/comments{/number}","contents_url":"https://api.github.com/repos/HazyResearch/ddlite/contents/{+path}","compare_url":"https://api.github.com/repos/HazyResearch/ddlite/compare/{base}...{head}","merges_url":"https://api.github.com/repos/HazyResearch/ddlite/merges","archive_url":"https://api.github.com/repos/HazyResearch/ddlite/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/HazyResearch/ddlite/downloads","issues_url":"https://api.github.com/repos/HazyResearch/ddlite/issues{/number}","pulls_url":"https://api.github.com/repos/HazyResearch/ddlite/pulls{/number}","milestones_url":"https://api.github.com/repos/HazyResearch/ddlite/milestones{/number}","notifications_url":"https://api.github.com/repos/HazyResearch/ddlite/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/HazyResearch/ddlite/labels{/name}","releases_url":"https://api.github.com/repos/HazyResearch/ddlite/releases{/id}","deployments_url":"https://api.github.com/repos/HazyResearch/ddlite/deployments","created_at":"2016-02-26T05:52:45Z","updated_at":"2016-06-14T16:25:33Z","pushed_at":"2016-06-14T20:11:49Z","git_url":"git://github.com/HazyResearch/ddlite.git","ssh_url":"git@github.com:HazyResearch/ddlite.git","clone_url":"https://github.com/HazyResearch/ddlite.git","svn_url":"https://github.com/HazyResearch/ddlite","homepage":"","size":28961,"stargazers_count":14,"watchers_count":14,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":7,"mirror_url":null,"open_issues_count":80,"forks":7,"open_issues":80,"watchers":14,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/HazyResearch/ddlite/pulls/240"},"html":{"href":"https://github.com/HazyResearch/ddlite/pull/240"},"issue":{"href":"https://api.github.com/repos/HazyResearch/ddlite/issues/240"},"comments":{"href":"https://api.github.com/repos/HazyResearch/ddlite/issues/240/comments"},"review_comments":{"href":"https://api.github.com/repos/HazyResearch/ddlite/pulls/240/comments"},"review_comment":{"href":"https://api.github.com/repos/HazyResearch/ddlite/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/HazyResearch/ddlite/pulls/240/commits"},"statuses":{"href":"https://api.github.com/repos/HazyResearch/ddlite/statuses/ed68829a5e6cbac1bacbe10506564ec53470c0ee"}}}}
{"actor":{"display_login":"SenWu"}}