{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Automatic autoencoding variational Bayes for latent dirichlet allocation with PyMC3\n", "\n", "For probabilistic models with latent variables, autoencoding variational Bayes (AEVB; Kingma and Welling, 2014) is an algorithm which allows us to perform inference efficiently for large datasets with an encoder. In AEVB, the encoder is used to infer variational parameters of approximate posterior on latent variables from given samples. By using tunable and flexible encoders such as multilayer perceptrons (MLPs), AEVB approximates complex variational posterior based on mean-field approximation, which does not utilize analytic representations of the true posterior. Combining AEVB with ADVI (Kucukelbir et al., 2015), we can perform posterior inference on almost arbitrary probabilistic models involving continuous latent variables. \n", "\n", "I have implemented AEVB for ADVI with mini-batch on PyMC3. To demonstrate flexibility of this approach, we will apply this to latent dirichlet allocation (LDA; Blei et al., 2003) for modeling documents. In the LDA model, each document is assumed to be generated from a multinomial distribution, whose parameters are treated as latent variables. By using AEVB with an MLP as an encoder, we will fit the LDA model to the 20-newsgroups dataset. \n", "\n", "In this example, extracted topics by AEVB seem to be qualitatively comparable to those with a standard LDA implementation, i.e., online VB implemented on scikit-learn. Unfortunately, the predictive accuracy of unseen words is less than the standard implementation of LDA, it might be due to the mean-field approximation. However, the combination of AEVB and ADVI allows us to quickly apply more complex probabilistic models than LDA to big data with the help of mini-batches. I hope this notebook will attract readers, especially practitioners working on a variety of machine learning tasks, to probabilistic programming and PyMC3. " ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%matplotlib inline\n", "import sys, os\n", "\n", "import theano\n", "theano.config.floatX = 'float64'\n", "\n", "from collections import OrderedDict\n", "from copy import deepcopy\n", "import numpy as np\n", "from time import time\n", "from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer\n", "from sklearn.datasets import fetch_20newsgroups\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "from theano import shared\n", "import theano.tensor as tt\n", "from theano.sandbox.rng_mrg import MRG_RandomStreams\n", "\n", "import pymc3 as pm\n", "from pymc3 import Dirichlet\n", "from pymc3.distributions.transforms import t_stick_breaking\n", "from pymc3.variational.advi import advi, sample_vp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Dataset\n", "Here, we will use the 20-newsgroups dataset. This dataset can be obtained by using functions of scikit-learn. The below code is partially adopted from an example of scikit-learn (http://scikit-learn.org/stable/auto_examples/applications/topics_extraction_with_nmf_lda.html). We set the number of words in the vocabulary to 1000. " ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Loading dataset...\n", "done in 1.923s.\n", "Extracting tf features for LDA...\n", "done in 2.227s.\n" ] } ], "source": [ "# The number of words in the vocaburary\n", "n_words = 1000\n", "\n", "print(\"Loading dataset...\")\n", "t0 = time()\n", "dataset = fetch_20newsgroups(shuffle=True, random_state=1,\n", " remove=('headers', 'footers', 'quotes'))\n", "data_samples = dataset.data\n", "print(\"done in %0.3fs.\" % (time() - t0))\n", "\n", "# Use tf (raw term count) features for LDA.\n", "print(\"Extracting tf features for LDA...\")\n", "tf_vectorizer = CountVectorizer(max_df=0.95, min_df=2, max_features=n_words,\n", " stop_words='english')\n", "\n", "t0 = time()\n", "tf = tf_vectorizer.fit_transform(data_samples)\n", "feature_names = tf_vectorizer.get_feature_names()\n", "print(\"done in %0.3fs.\" % (time() - t0))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each document is represented by 1000-dimensional term-frequency vector. Let's check the data. " ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqwAAAHcCAYAAAATCPhsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3XucFNWdP/xPzwzDDAMDwziggBgBERAEZA3qgtko0XWz\nPrvPCm7ybEzyerKvUTbRfSW7uCGaH3mM5qLRXOQn7g81G+NmgxuJmlV0jXEhMSpXBR1GZQaEUZhh\nYGDu3dPd9fzRTE/X5VSfuvbp6s/79VKmq6vrnKpzqupbp06dimmapoGIiIiISFFlhc4AEREREZEd\nBqxEREREpDQGrERERESkNAasRERERKQ0BqxEREREpDQGrERERESkNAasRERERKQ0BqxEREREpDQG\nrERERESkNNcBa2NjI9auXSv8/o9//COuv/56LFq0CF/84hdx5MgRt0kRERERUQlzFbA+99xz2LZt\nm/D7o0eP4stf/jJuuOEGPPXUU6irq8OXv/xl15kkIiIiotLlOGA9ffo07rvvPlx88cXCef7zP/8T\nCxYswBe/+EXMnDkT3/3ud/Hhhx9ix44dnjJLRERERKXHccD6/e9/H3/1V3+FmTNnCud56623cOml\nl2Y/V1VVYd68edizZ4+7XBIRERFRyXIUsL722mvYtWtX3tv7HR0dmDRpkm7aWWedhfb2duc5JCIi\nIqKSJh2wJhIJfOtb38K6detQWVlpO+/g4KBpnsrKSiQSCXe5JCIiIqKSVSE744MPPoj58+fjiiuu\nyDvv6NGjTcFpIpFAbW2to8xpmoZYLOboN0REFL7r/+kZAMCoijJs/v71Bc4NEUWNdMD6/PPP48SJ\nE1i8eDEAYGhoCADw4osvYvfu3bp5J0+ejOPHj+umdXZ2Yu7cuY4yF4vF0N09gFQq7eh3VHzKy8tQ\nW1vN8i4RLO/oSqc1dHX16aaxvEsLy7u0DJd30KQD1ieeeALJZDL7+b777gMArFmzxjTvwoULdUHs\nwMAAmpqacOuttzrOYCqVRjLJCl8qWN6lheUdTaIyZXmXFpY3+Uk6YD3nnHN0n2tqagAA5557LtLp\nNE6ePInx48dj1KhRuOGGG/DYY49h48aN+OQnP4n169dj+vTp+PjHP+5v7omIiIgo8nx5NevRo0ex\nfPlyvPnmmwCAqVOn4sEHH8RTTz2FVatWoaenB+vXr/cjKSIiIiIqMdItrEbf/e53s39PnToV+/fv\n132/fPlyvPDCC+5zRkREREQEn1pYiYiIiIiCwoCViIiIiJTGgJWIiIiIlMaAlYiIiIiUxoCViIiI\niJTGgJWIiIiIlMaAlYiIiIiUxoCViIiIiJTGgJWIiIiIlMaAlYiIiIiUxoCViIiIiJTGgJWIiIiI\nlMaAlYiIiIiUxoCViIiIiJTGgJWIiIiIlMaAlYiIiIiUxoCViIiIiJTGgJWIiIiIlMaAlYiIiIiU\nxoCViIiIiJTGgJWIiIiIlMaAlYiIiIiUxoCViIiIiJTGgJWIiIiIlMaAlYiIiIiUxoCViIiIiJTG\ngJWIiIiIlMaAlYiIiIiUxoCViIiIiJTGgJWIiIiIlMaAlYiIiIiUxoCViIiIiJTGgJWIiIiIlMaA\nlYiIiIiUxoCViIiIiJTGgJWIiIiIlMaAlYiIiIiUxoCViIg80TSt0FkgoohjwEpERERESmPASkRE\nnrB9lYiCxoCViIiIiJTmOGA9fPgwvvSlL2Hx4sW46qqr8OijjwrnXb16NebMmYO5c+dm/926daun\nDBMRERFRaalwMrOmaWhsbMTChQvxzDPP4NChQ/ja176Gs88+G5/+9KdN87e2tuL+++/HZZddlp1W\nW1vrPddERKQO9gkgooA5Clg7Ozsxb948rFu3DmPGjMH06dNx+eWXY9euXaaANZFIoK2tDfPnz0d9\nfb2vmSYiIiKi0uGoS0BDQwMeeOABjBkzBgCwa9cu7NixA0uXLjXNe/DgQcRiMUybNs2fnBIRERFR\nSXLUwprrqquuwtGjR/Fnf/ZnuOaaa0zft7S0YOzYsbj99tvxxhtv4JxzzsGtt96KK6+80lOGiYhI\nLRr7BBBRwFwHrA8++CA6Ozuxbt063HPPPbjzzjt137e2tiIej2P58uVobGzESy+9hNWrV+PJJ5/E\nRRddJJ1OeTkHMigFw+XM8i4NLO9oiaX1nysq9OXK8i4tLO/SElY5xzSPryh58cUXsWbNGuzevRsV\nFfr4t6enB+PGjct+vuWWWzBp0iTcddddXpIkIiKFJFNp/N+3/wYAUF4Ww9P3/V8FzhERRY2jFtYT\nJ05gz549WLFiRXbarFmzMDQ0hN7eXkyYMEE3f26wCgAzZ85ES0uLowx2dw8glUrnn5GKWnl5GWpr\nq1neJYLlHS1JQxl2dfXpPrO8SwvLu7QMl3fQHAWsbW1tuPXWW7Ft2zY0NDQAAPbt24eJEyeagtW1\n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\nEhGRJ2xhJaKgMWAlIiIiIqUxYCUiIiIipTFgJSIibzR2CiCiYDFgJSIiIiKlMWAlIiIiIqUxYCUi\nIk/YIYCIgsaAlYiIiIiUxoCViIi8YRMrEQWMASsRERERKY0BKxEREREpjQErERF5wh4BRBQ0BqxE\nREREpDQGrEREBcKWSSpWGmsvhYwBKxEReaLx1axEFDAGrERERESkNAasRERERKQ0BqxEREREpDQG\nrERERESkNAasRETkCZ+5IqKgMWAlIiIiIqUxYCUiIiIipTFgJSIiT9gjgIiC5jhgbW9vx2233Yal\nS5fiE5/4BL73ve8hkUhYzrt69WrMmTMHc+fOzf67detWz5kmIiIiotJR4fQHt912GyZMmIBf/OIX\nOHXqFL7xjW+gvLwca9asMc3b2tqK+++/H5dddll2Wm1trbccExEREVFJcRSwtra2Yu/evXj11Vcx\nceJEAJkA9t577zUFrIlEAm1tbZg/fz7q6+v9yzEREamFwwQQUcAcdQloaGjAxo0bs8EqkHmHdE9P\nj2negwcPIhaLYdq0ad5zSUREREQly1HAOm7cOCxbtiz7WdM0PPHEE7jiiitM87a0tGDs2LG4/fbb\nsWzZMqxatQrbtm3znmMiIlIK21eJokFT+G6J4z6sue699140NzfjqaeeMn3X2tqKeDyO5cuXo7Gx\nES+99BJWr16NJ598EhdddJF0GuXlHMigFAyXM8u7NJRqeVdUlKGsLJb9nPMnymIxVFQU5/aoMJSj\ncT1KtbyjrCw2UnnLy8t0Zc7yLl7GgFXmmBRWObsOWO+77z78/Oc/x49+9CPMnDnT9P1XvvIVfOEL\nX8C4ceMAABdeeCHefvttbNq0CXfddZd0OrW11W6zSEWI5V1aSq286+pqUFU1Kvu5qqoy+/foqlGo\nq6spRLY86x5M6T6L1qPUyjvKKitHwodx46osy5zlXXyMAatKxyRXAeu3v/1tbNq0Cffddx9WrFgh\nnG84WB02c+ZMtLS0OEqru3sAqVTaTTapiJSXl6G2tprlXSJKtby7uvowODiU/TwYH0LVmb/jg0Po\n6uorTMY8Ot09oPtsXI9SLe8oSySS2b97egZ1Zc7yLl7GgFXmmDRc3kFzHLCuX78emzZtwg9/+EN8\n6lOfEs63du1alJWV4Z577slOa25uxuzZsx2ll0qlkUyywpcKlndpKbXyTibTSKdHTghazt9pTSva\nbZEy5Fu0HqVW3lGWzglsROXK8i4+xoBVpfJz1PGgpaUFGzZsQGNjIxYvXozOzs7sfwDQ2dmJeDwO\nALj66qvx7LPP4umnn8bhw4exfv167N69GzfddJP/a0FEREREnij8zJWzFtaXX34Z6XQaGzZswIYN\nGwBkovFYLIb9+/dj2bJl+N73voe//uu/xooVK7Bu3Tps2LABx44dw6xZs/DII49gypQpgawIEREV\nhsLnOCKKCEcBa2NjIxobG4XfNzc36z6vXLkSK1eudJczIiIiUh+vWCJE3cLkmBNEROSJymM3ElE0\nMGAlIiIi13i5Eh0qX3syYCUiIiIipTFgJSIiIvdUbpajyGDASkRERERKY8BKRERErrF9NUIULkwG\nrERE5AnvCBNR0BiwEhERkXu8YIkMTeHCZMBKREREREpjwEpERERESreWM2AlIiIiIqUxYCUiIk9U\n7vdGweOreaND5ZJkwEpERERESmPASkRERERKN7EyYCUiIk94R5iIgsaAlYiIiFzjBUuUqFuYDFiJ\niIiISGkMWImIiIhI6dZyBqxEREREpDQGrERE5InKrTIUBlYACh4DViIiIiJSGgNWIiIico0t7NGh\nclkyYCUiIk/4alYiChoDViIiIiKCyv2RGbASERWKyvffiIgUwoCViIi8Ydxd0njdRWFgwEpERERE\nSmPASkREnrCBrdSxBkSFyq3lDFiJiApF5bMDEZFCGLASEYVEMwSoDFcpCnjdRWFgwEpERN4wYCGi\ngDFgJSIKi7Epik1TRKQQ410glTBgJSIiIiKlMWAlIiJP+GrWEsfipxAwYCUiKhSFb78REamEASsR\nUVgiOkoA4+7Sxhb26FB5X2bASkRUKCqfHYiIFMKAlYgoLAxQKYpYrSkEDFiJiIiISGkMWImICkTl\nMQ+JZLEWR4jCxyQGrEREBRIrdAaIiIqEo4C1vb0dt912G5YuXYpPfOIT+N73vodEImE5b1NTE268\n8UYsWrQIq1atwjvvvONLhomIilVUW1Sjul4kicUfGSoXpaOA9bbbbkM8HscvfvELPPDAA3jllVfw\n4x//2DTfwMAAGhsbcemll2Lz5s1YtGgRbr75ZgwODvqWcSKiosdAj4hIinTA2trair179+K73/0u\nZs6ciSVLluC2227Df/3Xf5nmfe6551BdXY01a9ZgxowZuOOOO1BTU4MXXnjB18wTERWXaI7DSqWO\n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\nRERERMRxi9IKa0RERERERERERMRMovTVrBEREREREREREREziaiwRkREREREREREzGpEhTUiIiIi\nIiIiImJWIyqsERERERERERERsxpRYY2IiIiIiIiIiJjVmJUK6+TkJFx//fWwbt06eOc73wmbN28+\n1ixF1MCrr74KH/3oR+GXfumX4F3vehfcfvvt+bW9P/nJT+AP/uAPYHh4GN73vvfBv//7vzt5v//9\n78OFF14IQ0NDcPnll8PLL798LF4hoiKuuOIKuO666/LnXbt2wSWXXAJDQ0Nw8cUXw3PPPeekf+yx\nx+DXfu3XYHh4GK6++mo4cODATLMcURKTk5Nw8803wy/+4i/COeecA3fffXceF9v7+MPevXvhj/7o\nj2Dt2rXw7ne/G77yla/kcbG9jx9MTk7ChRdeCD/84Q/zsLrz9d///d/DueeeC2vXroUbbrghP7df\ni1mpsN5xxx2wa9cuuO+++2Djxo2wadMm+O53v3us2YqoiI9+9KMwMTEBX/3qV+Fzn/scfO9734PP\nf/7zAADwx3/8x7B8+XJ46KGH4Dd/8zfh6quvhr179wIAwCuvvAJXXXUVXHTRRfDQQw/B0qVL4aqr\nrjqWrxJRAo8//jg8+eST+fPY2BhcccUVsG7dOvjGN74BQ0NDcOWVV8L4+DgAAOzYsQNuvPFGuOaa\na+CBBx6AgwcPOspuxOzEpz/9adi6dSt8+ctfhs9+9rPw4IMPwoMPPhjb+zjFxz72MVi4cCE8/PDD\ncP3118M999wDTzzxRGzv4wiTk5PwJ3/yJ/DCCy844VdddVXl+fo73/kO3HvvvXDLLbfAV77yFXj2\n2WfhzjvvLMeYmWUYHR01b3/7280Pf/jDPOzee+81l1566THkKqIq9uzZYwYHB83//u//5mGPPfaY\nOffcc83WrVvN8PCwGR8fz+Muv/xy84UvfMEYY8w999zjtPvY2JhZs2aN+cEPfjBzLxBRCSMjI+Zd\n73qXufjii821115rjDHm61//ulm/fr2T7vzzzzcPP/ywMcaYP//zP8/TGmPMK6+8YgYHB81PfvKT\nmWM8ohRGRkbMmWee6cjrL33pS+b66683W7Zsie19nOHgwYNmxYoV5j//8z/zsGuuucbccsstsb2P\nE7zwwgtmw4YNZsOGDWZwcDCfb7///e/Xmq9/7/d+z2zatCmPf+qpp8zq1asdeiHMOgvr7t27od1u\nw9DQUB62du1a2LFjxzHkKqIqli1bBn/zN38DP/MzP+OEHz58GJ599lk488wzob+/Pw9fu3YtbN++\nHQA6K/J169blca1WC9761rfCtm3bZob5iMq44447YMOGDXD66afnYTt27IC1a9c66dasWZO35/bt\n2532fuMb3wg/+7M/C88+++zMMB1RGk8//TQsWrQIzjrrrDzsD//wD+HWW2+FZ599Nrb3cYZWqwUD\nAwPw0EMPwfT0NLz44ovwzDPPwMqVK2N7Hyf4wQ9+AGeffTY88MADYKx7pXbs2FF5vk7TFHbu3OnI\niaGhIZiamoLdu3ereZt1Cuu+fftgyZIl0NfXl4eddNJJMDExEf1d5iAWLVoE55xzTv5sjIH7778f\nzj77bNi3bx8sX77cSX/SSSfBq6++CgAAr732Gop/wxvekMdHzE5s3boVnn76aeS+QbWn3d5Uf3jD\nG96Qf3KKmH14+eWX4dRTT4VvfvObcMEFF8D69evh3nvvBWNMbO/jEPPnz4ebbroJ/vEf/xFWr14N\nv/7rvw7nnnsuXHTRRbG9jxP87u/+LnziE59wFFMAuv208/WhQ4dgYmLCiW82m7BkyZJS7d8XTjKz\nGBsbg/nz5zth2XO2USdi7uIzn/kMPP/887BlyxbYvHkz2dZZO4+Pj4vxEbMPk5OT8MlPfhI2btyI\n2i7UnrG95x5GR0fhv/7rv+DrX/863H777bBv3z646aabYMGCBbG9j1Ps2bMHzjvvPPjQhz4E//Ef\n/wG33HILnH322bG9j3NwupmmfTM/5rrtP+sU1v7+fvQC2fPAwMCxYCmiR7jzzjvhvvvug3vuuQfO\nOOMM6O/vh4MHDzppJicnodVqAQDfFxYvXjxjPEeUwxe+8AVYtWoVvOMd70BxXHuG2juLj5h9aDab\ncOTIEbjrrrvgjW98IwAA/Pd//zd89atfhbe85S2xvY8zbN26FbZs2QJPPvkkzJ8/H9761rfC3r17\n4Ytf/CK8+c1vju19HKPOfM0ZHScnJ0vpdbPOJeDkk0+GkZERSNM0D9u/fz+0Wq2oqMxhZDsD77zz\nTli/fj0AdNp63759Trr9+/fDsmXLVPERsw/f/va34V/+5V9geHgYhoeH4dFHH4VHH30U1qxZE2zP\n5cuXw/79+1G8/5kpYvZg+fLl0N/fnyurAABvectbYO/evbB8+fLY3scZnnvuOfj5n/95x1K2cuVK\n+J//+Z/Y3sc56szXS5cuhf7+fqf92+02jIyMlJrPZ53CunLlSujr68sdeQEAnnrqKVi1atUx5Cqi\nDjZt2gQPPPAA3H333XDBBRfk4atXr4Zdu3Y5q66nn34633C3evVqeOaZZ/K4sbEx2LVrl7MhL2J2\n4f7774dHH30UHnnkEXjkkUfgvPPOg/POOw++9a1vwerVq9GGuW3btsHw8DAAdJzwn3766TzulVde\ngb1798Lq1atn9B0i9BgaGoKJiQl46aWX8rA9e/bAm970JhgaGnLGL0Bs77mO5cuXw0svvQTT09N5\n2Isvvgg/93M/F9v7OEfV+Xp4eBiSJIG3ve1tTvtv27YN5s2bB4ODg2oemp/85Cc/Wf9Veoe+vj54\n5ZVX4Gtf+xq87W1vg507d8JnP/tZ+NM//VM47bTTjjV7ESWxZ88e+PjHPw5XXnklnH/++TA6Opr/\nf8YZZ8Bjjz0G27Ztg9NPPx22bNkC3/72t+HWW2+FE044Ad70pjfBXXfdBc1mE0488US47bbbAADg\n4x//+DF+qwgOixYtghNPPDH/P/t0+P73vx/e/OY3w9/93d/Bq6++Cqeccgrce++9sHv3bvjUpz4F\nfX19sGzZMrj99tth2bJl0Gg0YOPGjbBixQr4nd/5nWP9WhEMlixZAj/60Y/g8ccfh1WrVsHzzz8P\nd9xxB3zoQx+C3/iN34jtfZzh1FNPha997WvwwgsvwBlnnAHPPPMMfOYzn4GPfOQj8N73vje293GG\nTZs2wfvf/3449dRT4ZRTTik9Xxtj8vm61WrB5z73OTjttNPg9ddfh5tuugne+973wq/+6q/qGap8\nWNdRxNjYmLn22mvN8PCwOffcc80//MM/HGuWIirir//6r83g4KDz/4oVK8zg4KAxxpiXXnrJ/P7v\n/755+9vfbt73vveZrVu3OvmffPJJ8573vMcMDQ2ZD37wg/HMvjmGa6+91jl7cceOHea3f/u3zerV\nq80ll1xinn/+eSf9ww8/bH7lV37FDA8Pm2uuucaMjIzMNMsRJXH48GHziU98wqxZs8b88i//svmr\nv/qrPC629/GHF154wXzwgx80Z511ljn//POd+Tm29/EF+xxWY4z58Y9/XGu+/tKXvmTe8Y53mHXr\n1pkbb7zRTExMlOInMcY6aCsiIiIiIiIiIiJilmHW+bBGRERERERERERE2IgKa0RERERERERExKxG\nVFgjIiIiIiIiIiJmNaLCGhERERERERERMasRFdaIiIiIiIiIiIhZjaiwRkRERB9lz/IAAABQSURB\nVEREREREzGpEhTUiIiIiIiIiImJWIyqsERERERERERERsxpRYY2IiIiIiIiIiJjViAprRERERERE\nRETErEZUWCMiIiIiIiIiImY1/j9U9TkQvkWLBQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(tf[:10, :].toarray().T);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We split the whole documents into training and test sets. The number of tokens in the training set is 480K. Sparsity of the term-frequency document matrix is 0.025%, which implies almost all components in the term-frequency matrix is zero. " ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of docs for training = 10000\n", "Number of docs for test = 1314\n", "Number of tokens in training set = 480263\n", "Sparsity = 0.0253936\n" ] } ], "source": [ "n_samples_tr = 10000\n", "n_samples_te = tf.shape[0] - n_samples_tr\n", "docs_tr = tf[:n_samples_tr, :]\n", "docs_te = tf[n_samples_tr:, :]\n", "print('Number of docs for training = {}'.format(docs_tr.shape[0]))\n", "print('Number of docs for test = {}'.format(docs_te.shape[0]))\n", "\n", "n_tokens = np.sum(docs_tr[docs_tr.nonzero()])\n", "print('Number of tokens in training set = {}'.format(n_tokens))\n", "print('Sparsity = {}'.format(\n", " len(docs_tr.nonzero()[0]) / float(docs_tr.shape[0] * docs_tr.shape[1])))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Log-likelihood of documents for LDA\n", "For a document $d$ consisting of tokens $w$, the log-likelihood of the LDA model with $K$ topics is given as\n", "\\begin{eqnarray}\n", " \\log p\\left(d|\\theta_{d},\\beta\\right) & = & \\sum_{w\\in d}\\log\\left[\\sum_{k=1}^{K}\\exp\\left(\\log\\theta_{d,k} + \\log \\beta_{k,w}\\right)\\right]+const, \n", "\\end{eqnarray}\n", "where $\\theta_{d}$ is the topic distribution for document $d$ and $\\beta$ is the word distribution for the $K$ topics. We define a function that returns a tensor of the log-likelihood of documents given $\\theta_{d}$ and $\\beta$. " ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def logp_lda_doc(beta, theta):\n", " \"\"\"Returns the log-likelihood function for given documents. \n", " \n", " K : number of topics in the model\n", " V : number of words (size of vocabulary)\n", " D : number of documents (in a mini-batch)\n", " \n", " Parameters\n", " ----------\n", " beta : tensor (K x V)\n", " Word distributions. \n", " theta : tensor (D x K)\n", " Topic distributions for documents. \n", " \"\"\"\n", " def ll_docs_f(docs):\n", " dixs, vixs = docs.nonzero()\n", " vfreqs = docs[dixs, vixs]\n", " ll_docs = vfreqs * pm.math.logsumexp(\n", " tt.log(theta[dixs]) + tt.log(beta.T[vixs]), axis=1).ravel()\n", " \n", " # Per-word log-likelihood times num of tokens in the whole dataset\n", " return tt.sum(ll_docs) / tt.sum(vfreqs) * n_tokens \n", " \n", " return ll_docs_f" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the inner function, the log-likelihood is scaled for mini-batches by the number of tokens in the dataset. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## LDA model\n", "With the log-likelihood function, we can construct the probabilistic model for LDA. `doc_t` works as a placeholder to which documents in a mini-batch are set. \n", "\n", "For ADVI, each of random variables $\\theta$ and $\\beta$, drawn from Dirichlet distributions, is transformed into unconstrained real coordinate space. To do this, by default, PyMC3 uses a centered stick-breaking transformation. Since these random variables are on a simplex, the dimension of the unconstrained coordinate space is the original dimension minus 1. For example, the dimension of $\\theta_{d}$ is the number of topics (`n_topics`) in the LDA model, thus the transformed space has dimension `(n_topics - 1)`. It shuold be noted that, in this example, we use `t_stick_breaking`, which is a numerically stable version of `stick_breaking` used by default. This is required to work ADVI for the LDA model. \n", "\n", "The variational posterior on these transformed parameters is represented by a spherical Gaussian distributions (meanfield approximation). Thus, the number of variational parameters of $\\theta_{d}$, the latent variable for each document, is `2 * (n_topics - 1)` for means and standard deviations. \n", "\n", "In the last line of the below cell, `DensityDist` class is used to define the log-likelihood function of the model. The second argument is a Python function which takes observations (a document matrix in this example) and returns the log-likelihood value. This function is given as a return value of `logp_lda_doc(beta, theta)`, which has been defined above. " ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "n_topics = 10\n", "minibatch_size = 128\n", "\n", "# Tensor for documents\n", "doc_t = shared(np.zeros((minibatch_size, n_words)), name='doc_t')\n", "\n", "with pm.Model() as model:\n", " theta = Dirichlet('theta', a=(1.0 / n_topics) * np.ones((minibatch_size, n_topics)), \n", " shape=(minibatch_size, n_topics), transform=t_stick_breaking(1e-9))\n", " beta = Dirichlet('beta', a=(1.0 / n_topics) * np.ones((n_topics, n_words)), \n", " shape=(n_topics, n_words), transform=t_stick_breaking(1e-9))\n", " doc = pm.DensityDist('doc', logp_lda_doc(beta, theta), observed=doc_t)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Mini-batch\n", "To perform ADVI with stochastic variational inference for large datasets, whole training samples are splitted into mini-batches. PyMC3's ADVI function accepts a Python generator which send a list of mini-batches to the algorithm. Here is an example to make a generator. \n", "\n", "TODO: replace the code using the new interface" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def create_minibatch(data):\n", " rng = np.random.RandomState(0)\n", " \n", " while True:\n", " # Return random data samples of a size 'minibatch_size' at each iteration\n", " ixs = rng.randint(data.shape[0], size=minibatch_size)\n", " yield [data[ixs]]\n", " \n", "minibatches = create_minibatch(docs_tr.toarray())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The ADVI function replaces the values of Theano tensors with samples given by generators. We need to specify those tensors by a list. The order of the list should be the same with the mini-batches sent from the generator. Note that `doc_t` has been used in the model creation as the observation of the random variable named `doc`. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# The value of doc_t will be replaced with mini-batches\n", "minibatch_tensors = [doc_t]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To tell the algorithm that random variable `doc` is observed, we need to pass them as an `OrderedDict`. The key of `OrderedDict` is an observed random variable and the value is a scalar representing the scaling factor. Since the likelihood of the documents in mini-batches have been already scaled in the likelihood function, we set the scaling factor to 1. " ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# observed_RVs = OrderedDict([(doc, n_samples_tr / minibatch_size)])\n", "observed_RVs = OrderedDict([(doc, 1)])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Encoder\n", "Given a document, the encoder calculates variational parameters of the (transformed) latent variables, more specifically, parameters of Gaussian distributions in the unconstrained real coordinate space. The `encode()` method is required to output variational means and stds as a tuple, as shown in the following code. As explained above, the number of variational parameters is `2 * (n_topics) - 1`. Specifically, the shape of `zs_mean` (or `zs_std`) in the method is `(minibatch_size, n_topics - 1)`. It should be noted that `zs_std` is defined as log-transformed standard deviation and this is automativally exponentiated (thus bounded to be positive) in `advi_minibatch()`, the estimation function. \n", "\n", "To enhance generalization ability to unseen words, a bernoulli corruption process is applied to the inputted documents. Unfortunately, I have never see any significant improvement with this. " ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "class LDAEncoder:\n", " \"\"\"Encode (term-frequency) document vectors to variational means and (log-transformed) stds. \n", " \"\"\"\n", " def __init__(self, n_words, n_hidden, n_topics, p_corruption=0, random_seed=1):\n", " rng = np.random.RandomState(random_seed)\n", " self.n_words = n_words\n", " self.n_hidden = n_hidden\n", " self.n_topics = n_topics\n", " self.w0 = shared(0.01 * rng.randn(n_words, n_hidden).ravel(), name='w0')\n", " self.b0 = shared(0.01 * rng.randn(n_hidden), name='b0')\n", " self.w1 = shared(0.01 * rng.randn(n_hidden, 2 * (n_topics - 1)).ravel(), name='w1')\n", " self.b1 = shared(0.01 * rng.randn(2 * (n_topics - 1)), name='b1')\n", " self.rng = MRG_RandomStreams(seed=random_seed)\n", " self.p_corruption = p_corruption\n", " \n", " def encode(self, xs):\n", " if 0 < self.p_corruption:\n", " dixs, vixs = xs.nonzero()\n", " mask = tt.set_subtensor(\n", " tt.zeros_like(xs)[dixs, vixs], \n", " self.rng.binomial(size=dixs.shape, n=1, p=1-self.p_corruption)\n", " )\n", " xs_ = xs * mask\n", " else:\n", " xs_ = xs\n", "\n", " w0 = self.w0.reshape((self.n_words, self.n_hidden))\n", " w1 = self.w1.reshape((self.n_hidden, 2 * (self.n_topics - 1)))\n", " hs = tt.tanh(xs_.dot(w0) + self.b0)\n", " zs = hs.dot(w1) + self.b1\n", " zs_mean = zs[:, :(self.n_topics - 1)]\n", " zs_std = zs[:, (self.n_topics - 1):]\n", " return zs_mean, zs_std\n", " \n", " def get_params(self):\n", " return [self.w0, self.b0, self.w1, self.b1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To feed the output of the encoder to the variational parameters of $\\theta$, we set an OrderedDict of tuples as below. " ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "encoder = LDAEncoder(n_words=n_words, n_hidden=100, n_topics=n_topics, p_corruption=0.0)\n", "local_RVs = OrderedDict([(theta, (encoder.encode(doc_t), n_samples_tr / minibatch_size))])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`theta` is the random variable defined in the model creation and is a key of an entry of the `OrderedDict`. The value `(encoder.encode(doc_t), n_samples_tr / minibatch_size)` is a tuple of a theano expression and a scalar. The theano expression `encoder.encode(doc_t)` is the output of the encoder given inputs (documents). The scalar `n_samples_tr / minibatch_size` specifies the scaling factor for mini-batches. \n", "\n", "ADVI optimizes the parameters of the encoder. They are passed to the function for ADVI. " ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "encoder_params = encoder.get_params()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## AEVB with ADVI\n", "`advi_minibatch()` can be used to run AEVB with ADVI on the LDA model. " ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Average ELBO = -3,237,774.14: 100%|██████████| 3000/3000 [00:46<00:00, 64.78it/s]\n", "Finished minibatch ADVI: ELBO = -3,221,686.06\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 1min 12s, sys: 3.13 s, total: 1min 15s\n", "Wall time: 2min 26s\n" ] }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nGRl+8xbLOZbp6OhCa+sNdHV6Vpu2tt7w+bczq9Xm8duVKzedptvR2noDbe2djt/unDAQY4uyEB+j\nd6TtHAR1748buHq1zSUfoXL0/Hb1muuAM11dNly+fFNwXmdtbR2C/wYAy5fbyJvrbZ0ev7VevgG9\nTodrbuW5erUNsApUUQPoEggyr19r95m3O+fuJC9fvuH3VavztgV872Pn9wrO+9b25X7yl8716xbB\n34WaKbmvt6Xdcxv36HDaP51dvds2O7UPvjl/RPfx7XJcuS4vdvsaDHokJsbh6tU2wePdG+cyOW83\n5/ILcS+X+3Hpa95AyZWOu3ZL7/67cV3aMe01Taft0f7l8eFt3zifo9Yu4WtIz/I9Ojt9n/dS3Lxh\nEfxdqe0tNe3W1huObQh4P1cDEeh544+v8gU6TYhzmVtbb/qtsAg3Su0fCl7PvlGabA3M2tvbsW7d\nOuTk5GDUqO7eFz744AMYjUYMGjQIZWVl+PnPf47r168jIaG7duX06dOODxxHjRrl6DkEANra2nDy\n5Ek88sgj0Ol0KC0txZEjRxwfHh47dgwxMTEoLCyE3W6H0WjE8ePHMXp0dz/Qhw8fRklJiSPtnTt3\noqOjw1ELfuTIEccHkt7y7vnYUgznZiE2mx1dXTbBNoFdXTaff7sQaPLonI/d3p2P3em3/mnxGJCR\n4JKuSxD0ZZ5Wt4BbqBw9v1ndptntdpc0va2H+zZxScMmnKev9KxdNth0Olitrml1WW1e07IKBJlW\nH/MLcU6hq8vm9wtS9+0lNi+X9bKLO1a8rYtQcO0+r68P1pyPCee3MmsXjERqX3P3MWRzPa78ldUX\nyfvEqUxdVs8V8bZu7nnYBR6+vM0bKLnSced8Tlmtvs+nQNLseaj0tm/cjyVv+bvMZ5Nve7hfU4Ty\nk5uUtN2vzXLtI2dSzxt/pF6TxUwT4txFrdUqfK+MBHLvHwofsj0upqenY8aMGdi8eTM++ugjHD58\nGBs3bsTixYsRHx+PCRMmYPDgwXj88cfxySefYN++fdi7d6/jg8fq6mocPXoUO3fuRFNTE9avX4/c\n3FxHML1o0SK89NJL2L9/P+rr67Fp0yYsXLgQJpMJZrMZ8+bNQ01NDRoaGrB//37s2rULS5cuBdBd\n496vXz88/vjjaGpqwosvvoiGhgbcfffdXvPOy8tDVVWV6PV3HbSl+1Ih1BZaCZJ6CwkgfTm++ZKa\n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\nERERyYTBNRERERGRTBhcR4DCgSmOf+dmJqhYEiIiIqLoZlS7ABS8EYNS8cCdRTDHGtAvLV7t4hAR\nERFFLQbXEWJiaT+1i0BEREQU9dgshIiIiIhIJgyuiYiIiIhkwuCaiIiIiEgmDK6JiIiIiGTC4JqI\niIiISCYMromIiIiIZMLgmoiIiIhIJgyuiYiIiIhkwuCaiIiIiEgmDK6JiIiIiGTC4JqIiIiISCYM\nromIiIiIZMLgmoiIiIhIJgyuiYiIiIhkwuCaiIiIiEgmDK6JiIiIiGTC4JqIiIiISCYMromIiIiI\nZMLgmoiIiIhIJgyuiYiIiIhkwuCaiIiIiEgmDK6JiIiIiGTC4JqIiIiISCYMromIiIiIZMLgmoiI\niIhIJooF108++SQWL17s8tvx48dx7733ory8HHfccQdef/11l+kHDhzAnDlzUFZWhmXLluHMmTMu\n019++WVMnjwZFRUVeOKJJ2CxWBzTOjo6sGHDBlRWVmLSpEnYtWuXy7Jnz57Ffffdh/LycsyePRvv\nvfeepLyJiIiIiPxRJLg+evQofv3rX0On0zl+a2lpwcqVKzFu3Dj89re/xZo1a/D9738ff/zjHwEA\n58+fx6pVq1BdXY29e/ciJSUFq1atciz/9ttvY8eOHdiyZQteeeUVnDhxAs8995xj+jPPPIOTJ09i\n9+7dqKmpwbZt2/DOO+84pq9atQqZmZnYu3cv5s6di9WrV+PixYsAgAsXLvjMm4iIiIhIDNmD687O\nTtTU1KC8vNzl9/379yMjIwPf+ta3kJeXh1mzZmHevHl48803AQCvv/46SktLsWzZMhQUFKC2thbn\nzp3DoUOHAAC7d+/G0qVLMWXKFJSUlGDTpk2oq6uDxWJBW1sb6urqsHHjRhQWFmL69OlYvnw5Xn31\nVQDAwYMHcebMGWzevBn5+flYuXIlysrKUFdXBwDYs2ePz7yJiIiIiMSQPbj+2c9+huHDh2PChAku\nv0+ePBm1tbUe81+7dg0AUF9fj8rKSsfvZrMZxcXFOHbsGGw2GxoaGjBmzBjH9LKyMnR2dqKxsRGN\njY2wWq0oKytzTK+oqEB9fb0j7REjRsBkMrlMP378uN+8iYiIiIjEkjW4Pn36NF577TVs2LDBY1r/\n/v0xcuRIx9+ff/459u3b5wjCP/vsM2RmZrosk56ejkuXLuHq1auwWCwu0w0GA5KTk3Hx4kU0Nzcj\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def run_advi():\n", " with model:\n", " v_params = pm.variational.advi_minibatch(\n", " n=3000, minibatch_tensors=minibatch_tensors, minibatches=minibatches, \n", " local_RVs=local_RVs, observed_RVs=observed_RVs, encoder_params=encoder_params, \n", " learning_rate=2e-2, epsilon=0.1, n_mcsamples=1 \n", " )\n", " \n", " return v_params\n", "\n", "%time v_params = run_advi()\n", "plt.plot(v_params.elbo_vals)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can see ELBO increases as optimization proceeds. The trace of ELBO looks jaggy because at each iteration documents in the mini-batch are replaced. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Extraction of characteristic words of topics based on posterior samples\n", "By using estimated variational parameters, we can draw samples from the variational posterior. To do this, we use function `sample_vp()`. Here we use this function to obtain posterior mean of the word-topic distribution $\\beta$ and show top-10 words frequently appeared in the 10 topics. " ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 100/100 [00:00<00:00, 483.07it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Topic #0: does question point believe true case think read evidence way\n", "Topic #1: key government use law public state used encryption president people\n", "Topic #2: space edu 10 00 20 15 university 12 11 30\n", "Topic #3: year team game play win games players season won second\n", "Topic #4: don know just think people like going ll did let\n", "Topic #5: thanks drive card mail new does price use used need\n", "Topic #6: years said people gun armenian 000 went ago armenians day\n", "Topic #7: windows use using file software program window version available data\n", "Topic #8: god people jesus life world bible israel man christian church\n", "Topic #9: good like ve just time better little car problem long\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "def print_top_words(beta, feature_names, n_top_words=10):\n", " for i in range(len(beta)):\n", " print((\"Topic #%d: \" % i) + \" \".join([feature_names[j]\n", " for j in beta[i].argsort()[:-n_top_words - 1:-1]]))\n", "\n", "doc_t.set_value(docs_te.toarray()[:minibatch_size, :])\n", "\n", "with model:\n", " samples = sample_vp(v_params, draws=100, local_RVs=local_RVs)\n", " beta_pymc3 = samples['beta'].mean(axis=0)\n", "\n", "print_top_words(beta_pymc3, feature_names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We compare these topics to those obtained by a standard LDA implementation on scikit-learn, which is based on an online stochastic variational inference (Hoffman et al., 2013). We can see that estimated words in the topics are qualitatively similar. " ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 13 s, sys: 102 ms, total: 13.1 s\n", "Wall time: 13.1 s\n", "Topic #0: people gun armenian war armenians turkish states said state 000\n", "Topic #1: government people law mr president use don think right public\n", "Topic #2: space science nasa program data research center output earth launch\n", "Topic #3: key car chip used keys bit bike clipper use number\n", "Topic #4: edu file com mail available ftp image files information list\n", "Topic #5: god people does jesus think believe don say just know\n", "Topic #6: windows drive use thanks does card know problem like db\n", "Topic #7: ax max g9v pl b8f a86 cx 34u 145 1t\n", "Topic #8: just don like know think good time ve people year\n", "Topic #9: 00 10 25 15 20 12 11 16 14 17\n" ] } ], "source": [ "from sklearn.decomposition import LatentDirichletAllocation\n", "\n", "lda = LatentDirichletAllocation(n_topics=n_topics, max_iter=5,\n", " learning_method='online', learning_offset=50.,\n", " random_state=0)\n", "%time lda.fit(docs_tr)\n", "beta_sklearn = lda.components_ / lda.components_.sum(axis=1)[:, np.newaxis]\n", "\n", "print_top_words(beta_sklearn, feature_names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Predictive distribution\n", "In some papers (e.g., Hoffman et al. 2013), the predictive distribution of held-out words was proposed as a quantitative measure for goodness of the model fitness. The log-likelihood function for tokens of the held-out word can be calculated with posterior means of $\\theta$ and $\\beta$. The validity of this is explained in (Hoffman et al. 2013). " ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def calc_pp(ws, thetas, beta, wix):\n", " \"\"\"\n", " Parameters\n", " ----------\n", " ws: ndarray (N,)\n", " Number of times the held-out word appeared in N documents. \n", " thetas: ndarray, shape=(N, K)\n", " Topic distributions for N documents. \n", " beta: ndarray, shape=(K, V)\n", " Word distributions for K topics. \n", " wix: int\n", " Index of the held-out word\n", " \n", " Return\n", " ------\n", " Log probability of held-out words.\n", " \"\"\"\n", " return ws * np.log(thetas.dot(beta[:, wix]))\n", "\n", "def eval_lda(transform, beta, docs_te, wixs):\n", " \"\"\"Evaluate LDA model by log predictive probability. \n", " \n", " Parameters\n", " ----------\n", " transform: Python function\n", " Transform document vectors to posterior mean of topic proportions. \n", " wixs: iterable of int\n", " Word indices to be held-out. \n", " \"\"\"\n", " lpss = []\n", " docs_ = deepcopy(docs_te)\n", " thetass = []\n", " wss = []\n", " total_words = 0\n", " for wix in wixs:\n", " ws = docs_te[:, wix].ravel()\n", " if 0 < ws.sum():\n", " # Hold-out\n", " docs_[:, wix] = 0\n", " \n", " # Topic distributions\n", " thetas = transform(docs_)\n", " \n", " # Predictive log probability\n", " lpss.append(calc_pp(ws, thetas, beta, wix))\n", " \n", " docs_[:, wix] = ws\n", " thetass.append(thetas)\n", " wss.append(ws)\n", " total_words += ws.sum()\n", " else:\n", " thetass.append(None)\n", " wss.append(None)\n", " \n", " # Log-probability\n", " lp = np.sum(np.hstack(lpss)) / total_words\n", " \n", " return {\n", " 'lp': lp, \n", " 'thetass': thetass, \n", " 'beta': beta, \n", " 'wss': wss\n", " }" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To apply the above function for the LDA model, we redefine the probabilistic model because the number of documents to be tested changes. Since variational parameters have already been obtained, we can reuse them for sampling from the approximate posterior distribution. " ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [], "source": [ "n_docs_te = docs_te.shape[0]\n", "doc_t = shared(docs_te.toarray(), name='doc_t')\n", "\n", "with pm.Model() as model:\n", " theta = Dirichlet('theta', a=(1.0 / n_topics) * np.ones((n_docs_te, n_topics)), \n", " shape=(n_docs_te, n_topics), transform=t_stick_breaking(1e-9))\n", " beta = Dirichlet('beta', a=(1.0 / n_topics) * np.ones((n_topics, n_words)), \n", " shape=(n_topics, n_words), transform=t_stick_breaking(1e-9))\n", " doc = pm.DensityDist('doc', logp_lda_doc(beta, theta), observed=doc_t)\n", "\n", "# Encoder has already been trained\n", "encoder.p_corruption = 0\n", "local_RVs = OrderedDict([(theta, (encoder.encode(doc_t), 1))])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`transform()` function is defined with `sample_vp()` function. This function is an argument to the function for calculating log predictive probabilities. " ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def transform_pymc3(docs):\n", " with model:\n", " doc_t.set_value(docs)\n", " samples = sample_vp(v_params, draws=100, local_RVs=local_RVs)\n", " \n", " return samples['theta'].mean(axis=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The mean of the log predictive probability is about -7.00. " ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 100/100 [00:01<00:00, 64.72it/s]\n", "100%|██████████| 100/100 [2:31:10<00:00, 90.71s/it]\n", "100%|██████████| 100/100 [00:02<00:00, 36.94it/s]\n", "100%|██████████| 100/100 [00:03<00:00, 25.35it/s]\n", "100%|██████████| 100/100 [00:03<00:00, 25.95it/s]\n", "100%|██████████| 100/100 [00:03<00:00, 44.83it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 49.86it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 37.12it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 34.07it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 40.57it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 40.53it/s]\n", "100%|██████████| 100/100 [00:04<00:00, 22.69it/s]\n", "100%|██████████| 100/100 [00:05<00:00, 12.18it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 43.22it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 47.62it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 35.62it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 36.89it/s]\n", "100%|██████████| 100/100 [00:03<00:00, 31.43it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 45.55it/s]\n", "100%|██████████| 100/100 [00:03<00:00, 14.44it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 39.82it/s]\n", "100%|██████████| 100/100 [00:03<00:00, 30.07it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 48.08it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 40.44it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 43.96it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 38.58it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 43.66it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 42.38it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 51.91it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 47.20it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 38.80it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 44.37it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 43.72it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 34.10it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 37.62it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 43.47it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 39.60it/s]\n", "100%|██████████| 100/100 [00:03<00:00, 32.30it/s]\n", "100%|██████████| 100/100 [00:03<00:00, 27.63it/s]\n", "100%|██████████| 100/100 [00:03<00:00, 33.30it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 33.82it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 34.26it/s]\n", "100%|██████████| 100/100 [00:03<00:00, 18.41it/s]\n", "100%|██████████| 100/100 [00:04<00:00, 24.33it/s]\n", "100%|██████████| 100/100 [00:04<00:00, 14.50it/s]\n", "100%|██████████| 100/100 [00:03<00:00, 22.96it/s]\n", "100%|██████████| 100/100 [00:03<00:00, 31.56it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 35.07it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 44.21it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 46.64it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 38.47it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 37.22it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 34.88it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 38.55it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 48.24it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 49.89it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 44.14it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 39.71it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 38.94it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 40.94it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 45.95it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 52.57it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 51.72it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 51.51it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 43.85it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 51.67it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 49.06it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 47.38it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 50.67it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 53.39it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 48.44it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 50.47it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 52.42it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 51.73it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 50.28it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 48.51it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 48.16it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 51.25it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 51.37it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 50.50it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 52.44it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 52.52it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 51.08it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 50.48it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 50.36it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 51.66it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 41.82it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 50.62it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 50.90it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 52.36it/s]\n", "100%|██████████| 100/100 [00:02<00:00, 51.39it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 51.64it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 51.21it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 53.22it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 51.59it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 52.44it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 50.35it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 50.31it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 50.05it/s]\n", "100%|██████████| 100/100 [00:01<00:00, 52.75it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 5min 46s, sys: 38.9 s, total: 6min 25s\n", "Wall time: 2h 36min 36s\n", "Predictive log prob (pm3) = -7.165695592003698\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "%time result_pymc3 = eval_lda(transform_pymc3, beta_pymc3, docs_te.toarray(), np.arange(100))\n", "print('Predictive log prob (pm3) = {}'.format(result_pymc3['lp']))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We compare the result with the scikit-learn LDA implemented The log predictive probability is significantly higher (-6.04) than AEVB-ADVI, though it shows similar words in the estimated topics. It may because that the mean-field approximation to distribution on the simplex (topic and/or word distributions) is less accurate. See https://gist.github.com/taku-y/f724392bc0ad633deac45ffa135414d3. " ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 37 s, sys: 163 ms, total: 37.2 s\n", "Wall time: 37.4 s\n", "Predictive log prob (sklearn) = -6.0147710652278965\n" ] } ], "source": [ "def transform_sklearn(docs):\n", " thetas = lda.transform(docs)\n", " return thetas / thetas.sum(axis=1)[:, np.newaxis]\n", "\n", "%time result_sklearn = eval_lda(transform_sklearn, beta_sklearn, docs_te.toarray(), np.arange(100))\n", "print('Predictive log prob (sklearn) = {}'.format(result_sklearn['lp']))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary\n", "We have seen that PyMC3 allows us to estimate random variables of LDA, a probabilistic model with latent variables, based on automatic variational inference. Variational parameters of the local latent variables in the probabilistic model are encoded from observations. The parameters of the encoding model, MLP in this example, are optimized with variational parameters of the global latent variables. Once the probabilistic and the encoding models are defined, parameter optimization is done just by invoking a function (`advi_minibatch()`) without need to derive complex update equations. \n", "\n", "Unfortunately, the estimation result was not accurate compared to LDA in sklearn, which is based on the conjugate priors and thus not relying on the mean field approximation. To improve the estimation accuracy, some researchers proposed post processings that moves Monte Carlo samples to improve variational lower bound (e.g., Rezende and Mohamed, 2015; Salinams et al., 2015). By implementing such methods on PyMC3, we may achieve more accurate estimation while automated as shown in this notebook. " ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## References\n", "* Kingma, D. P., & Welling, M. (2014). Auto-Encoding Variational Bayes. stat, 1050, 1.\n", "* Kucukelbir, A., Ranganath, R., Gelman, A., & Blei, D. (2015). Automatic variational inference in Stan. In Advances in neural information processing systems (pp. 568-576).\n", "* Blei, D. M., Ng, A. Y., & Jordan, M. I. (2003). Latent dirichlet allocation. Journal of machine Learning research, 3(Jan), 993-1022.\n", "* Hoffman, M. D., Blei, D. M., Wang, C., & Paisley, J. W. (2013). Stochastic variational inference. Journal of Machine Learning Research, 14(1), 1303-1347.\n", "* Rezende, D. J., & Mohamed, S. (2015). Variational inference with normalizing flows. arXiv preprint arXiv:1505.05770.\n", "* Salimans, T., Kingma, D. P., & Welling, M. (2015). Markov chain Monte Carlo and variational inference: Bridging the gap. In International Conference on Machine Learning (pp. 1218-1226)." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" }, "latex_envs": { "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 0 }, "nav_menu": {}, "toc": { "navigate_menu": true, "number_sections": true, "sideBar": true, "threshold": 6, "toc_cell": false, "toc_section_display": "block", "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 0 }