{ "metadata": { "name": "", "signature": "sha256:4d5df4e5c29899f08f881e5b2db123b3775e7f465c04d74f1adeccce063d4545" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "# Utils\n", "from scipy.stats import bernoulli\n", "from scipy.stats import beta\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from numpy.random import multinomial\n", "from numpy.random import dirichlet\n", "%matplotlib inline" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Yet another very gentle Tutorial on Latent Dirichlet Allocation and Inference using Gibbs Sampling

\n", "

by C\u0103lin-Rare\u0219 Turliuc (raresct @ Github)

\n", "\n", "## A very gentle Introduction\n", "\n", "Latent Dirichlet Allocation (LDA) is one of the probabilistic models proposed for topic modelling of a corpus of documents. Let's dissect this statement. A document is simply a list of words (or tokens if you prefer NLP terminology). A corpus of documents is simply a list of documents. Topic modelling aims to discover the underlying topics in a corpus. For example, we might have a corpus with documents related to politics and sports. To perform manual topic modelling, we have to read the whole corpus and classify the documents, and the resulting set of topics will be politics and sports. This is a tedious task which we aim to automate.\n", "\n", "Why probablistic modelling? In our politics and sports example, we have made the distinction between politics and sports as mutually exclusive topic options, i.e. a document can either talk about politics, or about sports. However, perhaps in some documents, politics and sports are not mutually exclusive, e.g. the document is about the political impact of the outcome of a sporting event, or about a basketball player (like Dennis Rodman) meeting diplomatic officials of some country (like North Korea) et caetera. The point is we want to treat a document as a mixture of topics: some may have higher weights, some lower. For instance, if a document is ineed about sports and makes absolutely no reference to politics, we will give sports a very high weight, and politics a very low weight.\n", "\n", "The vocabulary of a corpus is simply the set of all the words appearing in its documents. For humans, the term \"topic of a document\" has an intuitive semantics. For a computer, not so much. So let us define a topic in a quantified manner. A topic is represented by a categorical distribution on the vocabulary of the corpus. What does that mean? Let's look at only some possible words in our vocabulary: \"baseball\", \"racket\", \"president\", \"parliament\". The topics will assign different weights to these words: \"baseball\" will be assigned a very high weight by \"sports\" and a very low one by \"politics\". \"Racket\" will be assigned a high but no very high weight by \"sports\" and a low but not very low weight by \"politics\", due to its polysemy, i.e. tennis racket vs. racketeering. \"President\" will be assigned fairly similar weigths, perhaps a little higher weight by \"politics\", and parliament will be assigned a low weight by \"sports\" and a high weight by \"politics\". This is mapping our intuitive definition of the topics \"politics\" and \"sports\" to these particular words. LDA will help us uncover these topics automatically, and the results might not always correspond to one's intuition. After all, there is a degree of subjectivity in everything, and especially in problems of language and topic modelling." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Genesis of Documents (Generative Story)\n", "\n", "Unfortunately LDA cannot be described without probabilistic terminology. Fortunately, the distributions involved are only of two kinds: categorical and Dirichlet. The former distribution is easy to understand, as it corresponds to the chances of a $k$-sided die of landing on a particular side, i.e. $Cat(\\frac{1}{6}, \\frac{1}{6}, \\frac{1}{6}, \\frac{1}{6}, \\frac{1}{6}, \\frac{1}{6})$ is a categorical distribution describing the behaviour of a fair 6 sided die. The latter, i.e. Dirichlet, is harder to intuitively explain, but, briefly, it is a probability over the all the possible values of the probabilities of a categorical distribution. This concept of a probability of a probability can be a mindfuck for a non-Bayesian, but it is impossible to explain it in this tutorial, as it would take too long.\n", "\n", "LDA, like any probabilistic model for topic modelling, describes a way in which a corpus is generated. It is not perfect, nor is it likely to be true from a neuro-scientific perspective. But that doesn't matter that much, because it is flexible, due to the Dirichlet priors. This story of the genesis of a corpus is called a generative story. For LDA, we assume that each document of the corpus is generated independently, so if we have created $0$ or $n>0$ documents, we have the same beliefs about the generation of the first, respectively of the $n+1$-th document. As we already established, each document will be characterized by a topic mixture, described as a categorical distribution over all the possible topics. Furthermore, each document consists of a list of words. How are these words generated? The LDA model states that each word has an associated unknown topic. We will prefer the terminology of a \"latent topic (of a word)\". The topic of a word is no longer a mixture, it is either \"sports\" or \"politics\", but the same word in a different position in a corpus (or even a document) can have a different latent topic. According to this topic, each word is chosen independently from the word distribution associated to the topic. What is this word distribution? Well, we have seen it already in an informal way, in the \"baseball\", \"racket\", \"president\", \"parliament\" example. The weights that we talked about are actually the probabilities (or parameters as we will prefer) of a categorical distribution over words, given a particular topic. Then, a word is chosen by tossing a $W$ sided weighted die (where $W$ is the number of words in the vocabulary) and observing the side, i.e. the word on which it lands. Similarly, the topic of a word is chosen by tossing a $T$ sided weighted die according to the topic distribution, where $T$ is the number of topics in the corpus. The generative story is completed by adding the priors on the word and topic distributions, i.e. the parameters of these distributions are sampled from a corresponding Dirichlet distribution. Usually, the Dirichlet priors for topic distributions are common for all documents, and the priors for word distributions are common for all topics.\n", "\n", "The rest of this tutorial consists of a formal description of LDA and a common example used to concretely illustrate LDA." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##The Probabilistic Model\n", "\n", "Let us recapitulate the generative story, introducing some notation. Feel free to skip to the plate model or to the example if you get bored. Let $D$ denote the number of documents in the corpus and each document has a length of $L_d$ words and a topic distribution $\\theta_d$, a categorical distribution with $T$ categories. Each topic $t$ has a word distribution $\\phi_t$, a categorical distribution with $W$ categories. To generate a document, we generate each word independently. For each document $d$ and word position $l$, a topic $z_{dl}$ corresponding to that position is sampled from the topic distribution:\n", "\n", "$P(z_{dl} = t) = \\theta_d(t)$\n", "\n", "According to the sampled topic, the word $w_{dl}$ is generated according to:\n", "\n", "$P(w_{dl} = w) = \\phi_{z_{dl}}(w)$\n", "\n", "We place Dirichlet conjugate priors on $\\theta$:\n", "\n", "$\\theta \\sim Dirichlet(\\alpha)$ \n", "\n", "and $\\phi$: \n", "\n", "$\\phi \\sim Dirichlet(\\beta)$.\n", "\n", "Furthermore, to simplify things, we assume $\\alpha$ and $\\beta$ are symmetric priors, and in experiments we initalize them to $1$.\n", "\n", "The probabilistic model in plate model notation is illustrated below:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "lda_pm = Image(filename='images/lda_pm.png')\n", "lda_pm" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "png": "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\ntEOpbtBKAAAAAElFTkSuQmCC\n", "prompt_number": 164, "text": [ "" ] } ], "prompt_number": 164 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Our goal is to infer $\\phi$, and possibly $\\theta$. We will focus on $\\phi$ in the following example. The inference algorithm we will use is Gibbs Sampling. To keep things decoupled, we have chosen to describe it in a very gentle tutorial fashion in a separate notebook found at this [link](http://nbviewer.ipython.org/github/raresct/lda/blob/master/lda.ipynb). Therefore, we shall dive right in to an example." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A common example of Gibbs sampling for LDA\n", "\n", "In this example, we will play with artificial data, and in a future notebook we will look at real data. So, for now, our purpose is to choose a $\\phi$, generate a corpus according to it, use it as input to our Gibbs sampler, and check that the output $\\hat{\\phi}$ is somewhat similar to the original $\\phi$.\n", "\n", "Let's assume we have a 25 word vocabulary, 10 topics, 100 documents, and 100 words per document. We arrange the word distribution $\\phi$ in a 5X5 matrix and plot it as an image (the blacker the pixel, the lower the probability)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# 25 word vocabulary\n", "W = 25\n", "# image size\n", "L = np.sqrt(W)\n", "# 10 topics\n", "T = 10\n", "# 100 documents\n", "D = 100\n", "# 100 words per document\n", "N = 100\n", "\n", "# phi is given as the horizontal and vertical topics on the 5X5 images\n", "phi = [np.zeros((L, L)) for i in range(T)]\n", "line = 0\n", "for phi_t in phi:\n", " if line >= L:\n", " trueLine = int(line - L)\n", " phi_t[:,trueLine] = 1/L*np.ones(L)\n", " else:\n", " phi_t[line] = 1/L*np.ones(L)\n", " line += 1" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 152 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We chose the topics to be parallel or perpendicular to each other simply for the purpose of identifying them easily by just looking at the images." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# plot the topics\n", "f, axs = plt.subplots(1,T+1,figsize=(15,1))\n", "ax = axs[0]\n", "ax.text(0,0.4, \"Topics: \", fontsize = 16)\n", "ax.axis(\"off\")\n", "ax.get_yaxis().set_visible(False)\n", "ax.get_xaxis().set_visible(False)\n", "for (ax, (i,phi_t)) in zip(axs[1:], enumerate(phi)):\n", " ax.get_yaxis().set_visible(False)\n", " ax.get_xaxis().set_visible(False)\n", " ax.imshow(phi_t, interpolation='none', cmap='Greys_r')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nAAAY+AfiJGFrWluPUQAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 153 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next we sample $\\theta$ from its prior $\\alpha$. (Note that we could have done the same thing for $\\phi$, but for visualization purposes, we chose a particular $\\phi$." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# sample theta from alpha = 1\n", "theta = [dirichlet(np.ones(T)) for i in range(D)]\n", "\n", "B = []\n", "# sample documents from theta and phi\n", "for d in range(D):\n", " doc = np.zeros(W)\n", " theta_sample = multinomial(N, theta[d])\n", " for t,count in enumerate(theta_sample):\n", " doc += multinomial(count, phi[int(t)].flatten())\n", " doc = doc.reshape(L,L)\n", " B.append(doc)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 154 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now have all the ingredients to generate some artificial data. A document will also be represented by a 5X5 image, and a word or pixel will be blacker the less frequently it appears in the document." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# plot the documents\n", "j = int(np.sqrt(D))\n", "\n", "for row in range(j):\n", " f, axs = plt.subplots(1,j+1,figsize=(10,1))\n", " ax = axs[0]\n", " if row==0:\n", " ax.text(0,0.4, \"Docs: \", fontsize = 12)\n", " ax.axis(\"off\")\n", " ax.get_yaxis().set_visible(False)\n", " ax.get_xaxis().set_visible(False)\n", " for (ax, doc) in zip(axs[1:], B[row*j:row*j+j]): \n", " ax.get_yaxis().set_visible(False)\n", " ax.get_xaxis().set_visible(False)\n", " ax.imshow(doc, interpolation='none', cmap='Greys_r')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAABGCAYAAADIKU4UAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAChBJREFUeJzt3X1o1eUbx/HPmceHHI2mYnMP6nzA8qAoR2m4rWWGojT1\nDx+Y6KjlQ6SSJGGlklqWS6lZ+FDLP3KJTCtQUipUqNkTpmE4JPJpc1shWqQJReX5/SFJ/X6e+7p1\n5+fy9v0C//rc3+t73/tu8/K4XSeSSCQSAgAACFhaW28AAADg/42GBwAABI+GBwAABI+GBwAABI+G\nBwAABI+GBwAABI+GBwAABI+GBwAABI+GBwAABI+GBwAABI+GBwAABI+GBwAAhC9xCxk8eHBC0k3x\np6SkxHmWe++9t833mKqzJBKJRP/+/dt8n6k6Tzweb/M9pvLZ9OrVq833marzFBQUtPkeU/lsBg0a\n1Ob7TNV5hg0b1uZ7TOWzCenrpri4uM33mIqzRBKJW+fd0iORiCorK5Pmhw4duiH7aGhocOZjx47V\ns88+K9ejiUQiunTpkrPOY4895swHDx7szCXphx9+MNccOXLEmb/33nvOs0iXz/Pggw+a93L59NNP\nnXlmZqZZ46effnLmkyZNUnV1tfls1q9f76yTnZ3tzD/88ENnLkmrV68215SXlztz32eTn5+fNH/h\nhRfMfVjuuecec81LL73kzOPxuGbNmmU+m88++8xZ54MPPnDmu3btcuaS1NLSYq559913nfmIESO8\nno3r43/fffeZ+9i8ebN5D8uqVauceTQaVXp6equ/bgYMGODMd+/e7cx9zZ4929yHz7PJy8tLmvft\n29fcx4gRI5x5Tk6OWWPu3LnOfPz48dq5c6f5bH755RdnnQMHDjjzHTt2OHNJmjBhgrnGqlNVVZX0\nLPyXFgAACB4NDwAACB4NDwAACB4NDwAACB4NDwAACB4NDwAACB4NDwAACF60rTdwo61duzZp5jNv\nYvLkyc582LBhZo3m5mZnHovFzBqStHHjRmd+5swZZ75p0yav+1is8/gaMmRI0uz5559PyT0s1hye\nixcvetWx5hft3bvXmY8aNcq8hzWXRro8ZycVXDM6nnnmmZTcozV7kKR27dqlpI41y6WiosK8hzX7\nRJLWrFljrvHhmrWTlZVlXm/NvvGZF2NxfW3/3f333+/MS0tLnfl3331n3sPn+/ypU6fMNT5GjhyZ\nNCsoKDCvnz59ujOvq6sza1hz32677TZ1797drLNkyRJn/v333zvzbdu2mffweTbWrJ6qqqqkGa/w\nAACA4NHwAACA4NHwAACA4NHwAACA4NHwAACA4NHwAACA4NHwAACA4NHwAACA4N1ygweLi4uTZtaA\nJskerrRo0SKzhjW8MCcnx6whSeXl5c58z549zvyRRx4x72EN0JOkI0eOOHPf4XcPPPBA0mzdunVe\nNVorMzPTmaenp3vVsYY+Wh8Tn8/Ft99+21yTqmezZcuWpFljY6N5/dixY515RkaGWePzzz935l27\ndvX6PDl8+LAzb2pqcubz5s0z7+HD5xn7WLFiRdLMGiooSatWrXLmY8aMMWu8+OKLzjwajWrOnDlm\nnfHjxzvzBQsWOHNroKevb775JiV1XKzPM8keLFhbW2vWsAb+DR061KwhSV988YUzt74PZGdnm/ew\nBktK9sBdF/MVnt69e6tz587KyMhQZmamCgsL9frrr5vTSgEAAP4tzIYnEono/fff1/nz59XY2Kin\nnnpKlZWVXq8OAAAA/Btc08/w3H777SotLVVtba3eeust1dfXS5J+/vlnlZeXq3v37urdu7dWrlz5\nj1eAqqurNXDgQGVkZCgWi+nrr7+WJFVWVio3N1cZGRm66667tG/fvhQeDQAA4LLr+hme4cOHKzc3\nV/v371csFtP8+fN14cIFnTx5UmfPntXo0aPVo0cPVVRUaPv27Vq+fLl27NiheDyuEydOKBqN6ttv\nv9W6dev01VdfKSsrS42Njfrjjz8kSfv371dpaan5Ro4AAAA+rvuHlrOzs/Xjjz/qzz//VG1trQ4f\nPqz09HSlp6dr4cKFqqmpUUVFhd58800tWrRI8XhcktSnTx9J0rFjx/Tbb7+pvr5eXbt2Vc+ePa/U\nLioqotkBAAApc92/lt7U1KQuXbro7Nmz+v3339WrV68rWc+ePdXc3HxlXd++ff/n+n79+qmqqkrL\nli3TnXfeqbKyMvM3oAAAAK7HdTU8Bw4cUEtLi4qKitStWze1b99ep06dupI3NjYqNzdXkpSXl6dj\nx45dtU5ZWZnq6urU0NCgSCTi9SvdAAAA18rrv7T++gHk8+fP65NPPtGCBQs0Y8YMxWIxSdKUKVO0\nePFibd68WefOndMrr7yiJ598UpI0c+ZMPfHEEyoqKtLQoUN1/PhxdejQQb/++quamppUWFiojh07\nqlOnTjfkV9179OiRNHv00UfN60tKSpz5xYsXr3lP/y0ajWr69OnmugsXLrTqPps2bTLXtLS0mGtm\nzZrlzH1nvbhmsRQWFprXDxkyxJnfqFk+0uV/FLhMnDjRmVszLyTp6NGj5hrfj73FNWNj3Lhxra4f\niUTMNR9//LEzv/vuu73uZX2dW7OnfL5P7d6921zz6quvOnOfz3lrPz5zWqZOnerMR40aZdb4+z94\nr8b3LI8//rgzX7t2rTP/8ssvzXts3brVXPPOO+8487Q0v9cKTp8+nTR77rnnzOuXLl3qzH1mYB0/\nftyZt2vXzqzhw5ovZ32+S9LOnTvNNa6/wy1eDU9paami0ajS0tIUi8W0cOHCf3zTeO211zR//nz1\n6dNHnTp10uzZs/Xwww9LkiZNmqRz585p2rRpam5uVn5+vmpqapSWlqann35aR48eVfv27VVYWKg3\n3nhD0uVhS+PGjWv1X+gAAACSR8Nz8uRJs8gdd9yhmpqapPmcOXOuOmUzWTdeXFxMswMAAFKG99IC\nAADBo+EBAADBo+EBAADBo+EBAADBo+EBAADBo+EBAADBu+730rpZuQZX+QytSoW5c+c68/z8fK86\nGzZscObW0LmsrCyv+1hWrFiRkjquwYE+H5M9e/Y488WLF5s1GhoanHk8Hld1dbVZ56+3Vklm+PDh\nzjwnJ8e8x4QJE8w1qTJt2rRWXW8NFqyrqzNrWM9vypQpXnvZuHGj17pk6uvrzTUHDx4011hD9nx9\n9NFHrbreGqQ4YMCAVtfwHSp74sSJVtWZOXOmeQ+fvVj78JWXl5c0e+ihh8zr9+7d68yXLFli1vj7\n+1RezaBBg8waklRQUODMrWGp1vWS9PLLL5trysrKzDXJ8AoPAAAIHg0PAAAIHg0PAAAIHg0PAAAI\nHg0PAAAIHg0PAAAIHg0PAAAIX+IWUlJSkpB0U/wpKSm5Zc4S2nlCOkto5wnpLKGdJ6SzhHaeUM4S\nSSQ8J0IBAADcpPgvLQAAEDwaHgAAEDwaHgAAEDwaHgAAEDwaHgAAEDwaHgAAEDwaHgAAEDwaHgAA\nEDwaHgAAEDwaHgAAEDwaHgAAEDwaHgAAELz/AMWSYPgLH8OpAAAAAElFTkSuQmCC\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nQmCC\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n5aAAAAAASUVORK5CYII=\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nAACAe/8BFaVFRnaHjgoAAAAASUVORK5CYII=\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n934D5EQ8Rj53o0wAAAAASUVORK5CYII=\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nAAAAAElFTkSuQmCC\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAABGCAYAAADIKU4UAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAABx5JREFUeJzt3d1LVGsUx/G1D+cmEoIpIZsmlaI0sAKDSqhtRYEYvWAm\nFHXVVVf2RhFeJUwImRlooWWR3ShRBEG3RqDjdRdR0HtIr0L/QPtcBYfD2Ws9MXOY0/L7Aa9+az/7\nedoz02KEZZQkSSIAAACO/VHuDQAAAPzXaHgAAIB7NDwAAMA9Gh4AAOAeDQ8AAHCPhgcAALhHwwMA\nANyj4QEAAO7R8AAAAPdoeAAAgHs0PAAAwD0aHgAA4F8yh9TV1SUi8lv8xHGsnmXdunVl32OpzpIk\nSZLL5cq+z1KdZ/Xq1WXfI8/m39XX15d9j6V8Ntlstuz7LNV5Ghoayr7HUj6b6urqsu+zVOeJ47js\neyzFWaIkmTt/LT2KIjly5EhqvnHjRnONQqGg5h0dHeYaVVVVap7JZKSmpka0RxNFkZw7d05dZ//+\n/eZeLP39/WbNrVu31DyKIvUsP2sWLVqUmj948MDcx+7du82aYrW1tcnQ0JD5bJqbm9V1mpqa1Hxy\nctLcy8uXL82aw4cPq3k+nw96NplMJjVfuHChuY9v376pufXvJSLy6dMnNd+2bZt0d3ebz8Z6n1v5\n9PS0mouIDA8PmzVfvnxR861btwY9myiKUvOBgQFzH319fWq+Zs0ac418Pq/mFRUVks1mzWdjfX4+\nefJEzWdmZtRcRKSzs9OsGR8fN+8T8mxyuZx5L431/h0dHS1qfRGRHTt2yMjIiPlsrPNeuHBBzUPe\n4yHnGRwcVHNtr/xKCwAAuEfDAwAA3KPhAQAA7tHwAAAA92h4AACAezQ8AADAPRoeAADg3p/l3sD/\niTVHQETUmRehJiYm1LytrS1onTt37qj51NSUmre3t5v3ePv2rVnT1dVl1oTQ5gYtXbq06PUrKyvN\nGms2SqhTp06puTXnI2TGzvLly39pT8WYnZ1Nzerr683rrTk8tbW15hrWHJ5Q7969U3NrDk/Ie6K7\nu/uX9lSMffv2pWaXL182r29oaFDze/fumWvcvXvXrAlhzdnZvHmzmoc8G+u9JxI2zyfE1atXUzPr\ndSgi0traquYfPnww17BezzU1NTIyMmKuE/L/o+bQoUNmzZs3b4q6h4VveAAAgHs0PAAAwD0aHgAA\n4B4NDwAAcI+GBwAAuEfDAwAA3KPhAQAA7tHwAAAA9+bc4MENGzakZiGDoJYtW6bmIWs0NzereV1d\nnbmGiMiZM2fUvKenR82ts4iIPH782KwJWSfEihUrirreGqD28ePHotb/Fb29vWqey+XU/P379+Y9\nQoaOnT592qwJkclkUrNnz56Z11uv+devX5trtLS0qHnIAEQR+/Xa2Nio5tPT0+Y9rl+/btZ8//5d\nzcfGxsw1LLt27TJrLl26pOYrV64013jx4oWaV1RUmGuUwt69e82aK1eumDXWsL5CoRC0n8nJydQs\nZJiqNejW2qeISHV1tZqHDGQVEYnjWM1HR0fV/OjRo+Y9hoeHzZotW7aouTbskW94AACAezQ8AADA\nPRoeAADgHg0PAABwj4YHAAC4R8MDAADco+EBAADuzbk5PJs2bUrNQmZWWPNTHj16ZK5RVVWl5trM\nk7+zZjBYs08uXrwYdB9LR0eHmt++fTtonRs3bqRmJ06cMK9/+vSpmm/fvt1c4/Pnz2puPf+f2tvb\ng+rS3Lx506ypra01a6zZRKFmZ2dTs5DXq/VsQty/f1/NDxw4ELSONUcnZLaJZf78+WbN4OBg0fex\n9PX1mTXWe+vhw4fmGiGzekLMzMyouTXnLOQzPGRuWMg8tRDabJqQOVqtra1qPj4+/st7+qempqag\nuvPnz6v58+fP1XzVqlXmPUJqQmbDpeEbHgAA4B4NDwAAcI+GBwAAuEfDAwAA3KPhAQAA7tHwAAAA\n92h4AACAezQ8AADAvTk3eLCxsTE1GxgYMK+3hpZls1lzjampKTXfuXOnuYaISH9/f1Bdmt7eXrPm\n5MmTZo01SDGUNiSvq6vLvL6yslLNraGCIiITExNqvmTJEnMNEXt4XaFQUPOhoSHzHtYgPhGRr1+/\nmjUhfvz4kZpdu3bNvH79+vVqPjY2Zq5x/PhxNZ83b17QOpbFixerufXsREQOHjxo1oQMyQuRz+dT\ns5DhlC0tLWoeMniwVDo7O9V8z549ah7HsXmPKIrMmrVr16p56EDPs2fPpmY9PT3m9dag01evXplr\nWJ8TCxYsUF9DP1lDdY8dO6bmIQMfrWG5IbTPI77hAQAA7tHwAAAA92h4AACAezQ8AADAPRoeAADg\nHg0PAABwj4YHAAD4l8whcRwnIvJb/MRxPGfO4u08ns7i7TyezuLtPJ7O4u08Xs4SJUmSCAAAgGP8\nSgsAALhHwwMAANyj4QEAAO7R8AAAAPdoeAAAgHs0PAAAwD0aHgAA4B4NDwAAcI+GBwAAuEfDAwAA\n3KPhAQAA7tHwAAAA9/4CLcU0Cee2wRkAAAAASUVORK5CYII=\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAABGCAYAAADIKU4UAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAB0BJREFUeJzt3U1IlfsWx/G1D3dSg0glS+wFKhC31S4ryRpsFSOi6MXC\nKAo1KLMiJwkRCIVgUE5TLIjUGmRgTWrSC0EQUkFEpImjKMltaVANg+cOLsHlcvda/87e58hZfj/Q\n6Lee/wuPWxcKq1gURZEAAAA49sd0HwAAAOCvRsMDAADco+EBAADu0fAAAAD3aHgAAIB7NDwAAMA9\nGh4AAOAeDQ8AAHCPhgcAALhHwwMAANyj4QEAAO7R8AAAAP+iGaSwsDASkX/Ev2Qyqd4lkUhM+xmz\ndZcoiqIVK1ZM+zmzdR9Pd4miKFqzZs20nzNb94nH49N+xmy+m+XLl0/7OXk3/9+iRYum/ZzZuo+X\nr7NYFM2c/y09Foup+dq1azPeY2xszKw5evSomicSCdmzZ49oryYWi0lLS4u6zqVLl8yzWBKJhFlz\n8OBBNW9paVHvIvKf+5w9ezZt3t7ebp7Der+XL1821xgcHFTz8vJyaWpqMt9NTU2Nuk51dbWa19XV\nqbmIyOzZs82arq4uNT9+/HjQu+np6UmbP3nyxDzHtWvX1Lyjo8Nco7KyUs1zcnJk2bJl5rupqKhQ\n18nG52rjxo1mTV9fn5p/+PAh6N1o9xkfHzfPYVm1alXGa5SVlcnp06fNd7Np0yZ1nfnz56t5KpUy\nzzIxMWHWWEZHR4PeTW5ubtq8uLjY3Gd4ePi3z/a/Ghoa1LykpEQOHz5svhvr++v79+/VPOR7+NTU\nlFnT399v1qS7C3/SAgAA7tHwAAAA92h4AACAezQ8AADAPRoeAADgHg0PAABwj4YHAAC496/pPsDf\n7cePH2mz3t5e8/ndu3er+cDAgLnGmzdv1Pzbt2/mGiIiQ0NDal5fX6/m8+bNC9rn7/Lx48e0mTU7\nJVsWLlyo5tpcjd/x8OFDNW9razPX2LVrl1mTrTFbBQUFabN4PG4+b82cCXm/t27dUvPQeTHWjJyt\nW7dmdA4R++tIROTt27dqPmfOHHMNEZH8/Py0WXl5ufn8lStXgvbRPHr0SM1nzZoVtM7nz5/V/MCB\nA2re2tpq7pGXl2fWjI6OmjUhtM/x169fzeeLiorUfGRkxFzD2kf7mfjfGhsb1dz6udbZ2WnuUVVV\nZdbU1taquTanh9/wAAAA92h4AACAezQ8AADAPRoeAADgHg0PAABwj4YHAAC4R8MDAADco+EBAADu\nzbjBgxcvXkyb3b9/33w+FoupeVNTk7nGuXPn1Dx04Jg1ONC6z/r16809Xr58adZYg9pCNTc3p81C\nhuxZTp48adb8/PnTrNm3b59Zc+fOHTUfHh5W85s3b5p7XL161azJlgcPHqTNOjo6zOetoYDj4+Pm\nGqlUSs2tgWS/3LhxQ83HxsbUPGSo4O3bt80abdDm73j8+HFGz09NTal5yPcJa/BgKGvgX8iwvkz3\nyCbte471PUDEHpJp/TwSEXn69KlZc+rUKbOmu7vbrNH09PSYNdbwQhGRycnJP30GfsMDAADco+EB\nAADu0fAAAAD3aHgAAIB7NDwAAMA9Gh4AAOAeDQ8AAHBvxs3hmZiYSJuFzJyxZnS8fv3aXOPFixdm\nTYj9+/er+atXrzLeY926dWZNZWWlml+/fj1oL22mxJkzZ8znrXcTMvekoaFBzTds2GCuISJSWlqq\n5tbslIKCAnOP1tZWs+bEiRNmTYihoaG0WRRF5vPW7JqQz822bdvUvLS0VPr7+811li5dqubWfS5c\nuGDucejQIbOmvb3drAmhfb5C5rTU1dWpecicLWs+TklJSdAcltzcXDW3Pn/FxcXmHufPnzdrqqur\nzZoQOTk5abMdO3ZkvH7IZ+/IkSNqvnr16qC9ioqK1Hz79u1q3tvba+6xcuVKs8aa2fXu3bu0Gb/h\nAQAA7tHwAAAA92h4AACAezQ8AADAPRoeAADgHg0PAABwj4YHAAC4R8MDAADcm3GDB+/evZs2W7Bg\nQcbrb9myxazJ1uDBzZs3q/mnT58yel5EpK+vz6xpbm42azJVXl5u1gwODqp5Y2OjuUZ3d7eaW4PR\nflmyZImat7W1qfnOnTvNPayziojU1NSo+cDAgLmGiMi9e/eC6v6s/Px8syYej6t5YWFh0F6LFy9W\nc+vruba21twjZICa9TVgfQ39Ul9fH1SXzuTkpJrn5eWZa+zdu1fNv3//HnQW6y5VVVVq3tnZae7R\n1dVl1jx//lzNy8rKzDVERCoqKtJmqVTKfP7Lly9qHjJY8tixY2o+d+5ccw0RkZGRETV/9uxZ0DqZ\n0gYLWvgNDwAAcI+GBwAAuEfDAwAA3KPhAQAA7tHwAAAA92h4AACAezQ8AADAv2gGSSaTkYj8I/4l\nk8kZcxdv9/F0F2/38XQXb/fxdBdv9/Fyl1gURZEAAAA4xp+0AACAezQ8AADAPRoeAADgHg0PAABw\nj4YHAAC4R8MDAADco+EBAADu0fAAAAD3aHgAAIB7NDwAAMA9Gh4AAOAeDQ8AAHDv3+Q2SteemN27\nAAAAAElFTkSuQmCC\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAABGCAYAAADIKU4UAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAABz1JREFUeJzt3UtoU9sXx/GVyx9EEB1obFNrrdqmiglFsdpiJdRA0UAV\nB1J8CyI6cOBEEIWC1kd9EAQRxJkIEVFQqi10UG1HFkRBcCYirW+dWMWBo9yBFP784ay1703+5N7V\n7wc6+u2zzt45TVyksIwVi8WiAAAAOPZHpTcAAADw/0bDAwAA3KPhAQAA7tHwAAAA92h4AACAezQ8\nAADAPRoeAADgHg0PAABwj4YHAAC4R8MDAADco+EBAADu0fAAAAD/itNIXV1dUUT+FT+ZTEY9SyqV\nqvgey3UWb+dpaWmp+B7L+WyWLFlS8X2W6zxNTU0V32M5n82yZcsqvs9ynaehoaHieyzns2lvb6/4\nPst1npUrV1Z8j+U4S6xYnD7/W3osFpP58+dH5i0tLSXf4/379+aaCxcuqHkikZB0Oi3ao4nFYtLd\n3a3WuX37tprX1NSouYjI+vXrzTXj4+NqPjY2pp5F5Pd5enp6IvPr16+b+4jFYmp+9+5ds8a6devU\nfMeOHVIoFMxnc+vWLbXO6OiouRfLnj17zDUnT55U86GhoaBn09ra+pf29r/GxsbU/MiRI2aNLVu2\nqHk8HpdUKmU+m2QyqdZ58OCBmg8PD6t5qGw2q+ZNTU1Bz2bfvn2R+eDgoLkP63NvYGDArNHc3Kzm\n2WxW8vm8+Wwse/fuVfMrV66YNQ4fPmyumZiYUPORkZGgZ/Pt27fI/PPnz+Y+LFVVVeaaQqGg5vX1\n9ZLL5cxnc/z4cbXOzZs31byjo0PNRUTevn1rrrlx44aa19XVRZ6FP2kBAAD3aHgAAIB7NDwAAMA9\nGh4AAOAeDQ8AAHCPhgcAALhHwwMAANz7T6U38E8Sj8fNNV+/flXzFy9emDU+fvyo5jNnzjRriIgc\nPHhQza05PCESiYS5xprDE+rly5eRWVtbm3n9/fv31XxoaMisUV1dreZz5swxa4j8ntej6ezsVPNM\nJmPeY2RkxFxj1Ql5TUREncNj/T6H+PTpk7nGen/Onj076F5dXV1q3tjYqOYhM6GsWT4iv+fslIP2\nmRQyW+zdu3dqbs3YERGpra1V87lz55o1REQWLlyo5mvXrlVzbe5NJfT29kZm+XzevP7q1atq/vr1\na7NGf3+/mlvzoKacO3dOza3fAWtOj0jY5541i0nDNzwAAMA9Gh4AAOAeDQ8AAHCPhgcAALhHwwMA\nANyj4QEAAO7R8AAAAPdoeAAAgHvTbvDgly9fIrPBwcGS64cML3z8+LGa//r1K+heyWRSzbu7u4Pq\nlGpiYqIsdXbv3h2ZnTlzxrzeGtJ16NAhs8apU6fUfHJy0qwhIrJo0aKgdVFOnDhhrrGGF5bTnTt3\nIrO+vj7z+mfPnql5OYYXhrIGvjU0NKh5Lpcz77F06dK/tKdSaIMDQ17XkOGEloGBATWfMWNGUJ1d\nu3apufZ7KBL2vivX51WIixcv/q1syrVr1/52/SmbNm1S83nz5pn3EREpFotqrn1+h1wvIvLkyRNz\njTWcUsM3PAAAwD0aHgAA4B4NDwAAcI+GBwAAuEfDAwAA3KPhAQAA7tHwAAAA96bdHJ7m5ubIrBwz\nK54+fWrWWLFihZovWLDArCEiUlNTo+bj4+NBdTSJRKLkGqFisVhkFjLDobe3V82t10tEpKenR83T\n6bQUCgWzzsaNG9X8zZs3al7qHJ8pmUxGzYeGhoLqtLe3R2bWjB0R+72lPfsp1vsmVGNjo5p3dHSo\n+ebNm817pNNpc002mzXXhNi5c2dkNjo6al6/fPlyNb906ZJZQ/tcFRGpr683a4iIfPjwQc2Hh4eD\n6mhCPhe12UYiIiMjI0H3+v79e2QW8jli2bZtm7nGeu1D31cPHz5Uc+s9XF1dbd4jZMaO9Ww0fMMD\nAADco+EBAADu0fAAAAD3aHgAAIB7NDwAAMA9Gh4AAOAeDQ8AAHCPhgcAALg37QYPdnZ2Rmbnz583\nr3/+/LmahwxO+vHjh5rPmjXLrCFiD3M7e/asmocMe1u9enXQXjSXL18OWme9tpa2traSrhcRWbVq\nlZrX1tYG1bEGC1oDAa1cROTYsWPmmr6+PnNNqfbv32+uOXDggJqHDFrcvn27mre2tpo1RERSqZSa\nV1VVqXlXV5d5j1wuZ65JJpPmmhAbNmyIzLZu3WpePzk5qeZHjx41a8TjcXNNPp831zx69EjNFy9e\nrOb37t0z7xEyuK6U4Xb/bc2aNZHZq1evzOtDnp+lv79fzX/+/BlUxxrcav17FPI7EuL06dNqrv27\nxzc8AADAPRoeAADgHg0PAABwj4YHAAC4R8MDAADco+EBAADu0fAAAAD/itNIJpMpisi/4ieTyUyb\ns3g7j6ezeDuPp7N4O4+ns3g7j5ezxIrFYlEAAAAc409aAADAPRoeAADgHg0PAABwj4YHAAC4R8MD\nAADco+EBAADu0fAAAAD3aHgAAIB7NDwAAMA9Gh4AAOAeDQ8AAHCPhgcAALj3JyNTMoZtYRMWAAAA\nAElFTkSuQmCC\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 155 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that some of the documents in our corpus have a clear dominant topic (or even 2). However, there are many documents that are difficult to decipher topic-wise based on visual inspection." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# convert from bag of words to word list\n", "words = []\n", "for b in B:\n", " doc = []\n", " for idx,el in enumerate(b.flatten()):\n", " doc += [idx]*el\n", " words += doc" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 156 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we are ready to feed the corpus to the Gibbs sampler. Note that this is a particularly bad implementation, for multiple reasons: it is not OO, it is written in Python without any help from our C cousin or other optimization options and I'm sure you can find many more programming flaws. However, it is a quick and dirty readable close-to-pseudocode implementation, so we'll have to settle for it in this small example." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# naive implementation of the LDA Gibbs Sampler\n", "def ldaGibbsSampler(maxIt,words,T,D,N, W, alpha, beta):\n", " # initialize z\n", " theta = [dirichlet(alpha*np.ones(T)) for i in range(D)]\n", " z = np.zeros(D*N)\n", " for i in range(D):\n", " for j in range(N):\n", " cat_val = multinomial(1, theta[i])\n", " z[i*N+j] = np.flatnonzero(cat_val>0)[0]\n", " CWT, CDT, sum_CWT, sum_CDT = compute_counts(words, z, N, W, T, D)\n", " # iterate the sampler\n", " phis, phi_iter = [], []\n", " for it in range(maxIt):\n", " if it%10 == 0:\n", " phi_l, theta_l = uncollapse(CWT, CDT, sum_CWT, sum_CDT, alpha, beta, T, W, D)\n", " phis.append(phi_l)\n", " phi_iter.append(it)\n", " for i in range(D):\n", " for j in range(N):\n", " idx = i*N+j\n", " CWT, CDT = update_counts(False, CWT, CDT, sum_CWT, sum_CDT, words, z, idx, N)\n", " z_ij = update_conditional(idx, CWT, CDT, sum_CWT, sum_CDT, alpha, beta, W, T)\n", " z[idx] = z_ij\n", " CWT, CDT = update_counts(True, CWT, CDT, sum_CWT, sum_CDT, words, z, idx, N)\n", " phi_l, theta_l = uncollapse(CWT, CDT, sum_CWT, sum_CDT, alpha, beta, T, W, D)\n", " phis.append(phi_l)\n", " phi_iter.append(maxIt)\n", " return CWT, CDT, sum_CWT, sum_CDT, phis, phi_iter\n", "\n", "def update_counts(increment, CWT, CDT, sum_CWT, sum_CDT, words, z, idx, N):\n", " w = words[idx]\n", " t = int(z[idx])\n", " d = idx/N\n", " if increment:\n", " CWT[w,t] += 1 \n", " CDT[d,t] += 1\n", " sum_CWT[t] += 1\n", " sum_CDT[d] += 1\n", " else:\n", " CWT[w,t] -= 1 \n", " CDT[d,t] -= 1\n", " sum_CWT[t] -= 1\n", " sum_CDT[d] -= 1\n", " return CWT, CDT\n", "\n", "def compute_counts(words, z, N, W, T, D):\n", " CWT = np.zeros((W,T))\n", " CDT = np.zeros((D,T))\n", " sum_CWT = np.zeros(T)\n", " sum_CDT = np.zeros(D)\n", " for (idx, (t, w)) in enumerate(zip(z, words)):\n", " t = int(t)\n", " CWT[w,t] += 1\n", " sum_CWT[t] += 1\n", " d = idx/N\n", " CDT[d,t] += 1\n", " sum_CDT[d] += 1\n", " return CWT, CDT, sum_CWT, sum_CDT\n", "\n", "def update_conditional(idx, CWT, CDT, sum_CWT, sum_CDT, alpha, beta, W, T, eps = 10**-10):\n", " probs = np.zeros(T)\n", " sum_probs = 0\n", " w = words[idx]\n", " d = idx/N\n", " for k in range(T):\n", " val = (CWT[w,k]+beta)*(CDT[d,k]+alpha)/(sum_CWT[k]+beta*W+eps)/(sum_CDT[d]+alpha*T+eps)\n", " probs[k] = val\n", " sum_probs += val\n", " probs_norm = probs/sum_probs\n", " z_ij_cat = multinomial(1, probs_norm)\n", " return np.flatnonzero(z_ij_cat>0)[0]\n", "\n", "def uncollapse(CWT, CDT, sum_CWT, sum_CDT, alpha, beta, T, W, D):\n", " phi_learned = np.zeros((T, W))\n", " theta_learned = np.zeros((D, T))\n", " for w in range(W):\n", " for t in range(T):\n", " f1 = CWT[w,t]+beta\n", " f2 = sum_CWT[t]+beta*W\n", " phi_learned[t,w] = f1/f2\n", " for d in range(D):\n", " for t in range(T):\n", " g1 = CDT[d,t]+alpha\n", " g2 = sum_CDT[d]+alpha*T\n", " theta_learned[d,t] = g1/g2\n", " return phi_learned, theta_learned" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 157 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's run it!" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%time\n", "CWT, CDT, sum_CWT, sum_CDT, phis, phi_iter = ldaGibbsSampler(100,words,T,D,N,W,1,1)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "CPU times: user 3min 48s, sys: 564 ms, total: 3min 49s\n", "Wall time: 3min 48s\n" ] } ], "prompt_number": 158 }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see, it is indeed very bad in terms of performance, but let's not worry about that for now. Let's see if we managed to recover $\\phi$! We have traced $\\phi$ along the iterations of the sampler, and we plot it as a series of images, then as a gif." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%bash\n", "mkdir -p phi_gif\n", "rm phi_gif/*.png" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 159 }, { "cell_type": "code", "collapsed": false, "input": [ "# let's plot phi\n", "for (row, (it,phi_learned)) in enumerate(zip(phi_iter, phis)):\n", " f, axs = plt.subplots(1,T+1,figsize=(15,1))\n", " ax = axs[0]\n", " ax.text(0,0.4, \"Iter. {}\".format(it), fontsize = 16)\n", " ax.axis(\"off\")\n", " ax.get_yaxis().set_visible(False)\n", " ax.get_xaxis().set_visible(False)\n", " for ((i,phi_t),ax) in zip(enumerate(phi_learned),axs[1:]):\n", " i += 1\n", " ax.get_yaxis().set_visible(False)\n", " ax.get_xaxis().set_visible(False)\n", " ax.imshow(phi_t.reshape(5,5), interpolation='none', cmap='Greys_r')\n", " f.savefig('phi_gif/{0:04d}.png'.format(row), format='png')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAA08AAABGCAYAAAAU2a9PAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADQJJREFUeJzt3X1MlXUbwPHrkAFxQN48vBjESVJehMglCaSxJoaWMqzJ\n1rQ6QbRyyB+2mmHK0BpRLK220taLleRYb1g2JLc0tEmrEa2RpMLAzTRTBixhhp3z/NFsD1pw/c7D\n/Ryx72frH/h2cd+/bg7n13mzeTwejwAAAAAARuXn6wMAAAAAgImAzRMAAAAAKLB5AgAAAAAFNk8A\nAAAAoMDmCQAAAAAU2DwBAAAAgIYHlpszZ45HRK7Yf3Jzc8d9zSIjI31+XhNtzZxOp8/Pa6Ktmcfj\n8WRmZvr83CbamiUkJPj83CbausXFxfn8vCbamqWnp/v8vCbamnk8Hs+MGTN8fm4Tbc241sylpqb6\n/Lx8tWY2j4fPebKazWaT7u5uVfvqq6+q59bU1KjbwsJCdWu329XtwoUL5b777pPxvoxsNpsUFBSo\n2iNHjqjnnj17Vt2uW7dO3YqIOJ1OVRccHCzZ2dmWrFlRUZGq3bVrl9HswcFBdZuRkaFu77jjDnX7\n/PPPj/uaify5bocPH1a1zc3N6rkxMTHqtry8XN12dXWpWxGxbM0qKytVrcltT0NDg7eHNKqIiAh1\nO3PmTMnLy7Pk97OsrGxcZ4qI3HXXXep23759RrO1f2OmTZsmXV1dlqzZa6+9pmoffvhho9kpKSnq\n9tSpU+r2wQcfVLe1tbWW/X6+8cYbqra/v3/cf76IyN69e9Xte++9p25DQkIsW7PGxkZVa3I97Nmz\nR92+++676tbkb5HD4ZDU1FRLfj/feecdVZuenq6ee+bMGW8PaUyzZ89WdTabTUJDQ/9xzXjaHgAA\nAAAosHkCAAAAAAU2TwAAAACgwOYJAAAAABTYPAEAAACAApsnAAAAAFBg8wQAAAAACmyeAAAAAECB\nzRMAAAAAKEzy9QH8W5w8eVLVtba2qme63W51a/LJ1d3d3erW4XCoW1NbtmxRdfPnz1fPXLJkibpt\na2tTtyIidrtd1Q0PDxvNNfHtt9+quueee86yY7DZbJbNtkpYWJiqi42NVc/86quv1O1LL72kbk0s\nXrzYkrkiInFxcapuYGBAPTMwMFDdVlRUqNuSkhJ1q70WvJGYmKjqHn30UfVMf39/dVtUVKRuRUTq\n6+tVnd1ut+xaO3z4sKqLjIw0mnvPPfeoW+3fIhGRVatWqdva2lp1ayo/P1/VtbS0qGf29fWp287O\nTnWblZWlbi8HhYWF6tblcqnbjIwML45mbCkpKZbMFRF5++23Vd3GjRvVM6urq42OQXuti+jvYwcF\nBY36fR55AgAAAAAFNk8AAAAAoMDmCQAAAAAU2DwBAAAAgAKbJwAAAABQYPMEAAAAAApsngAAAABA\ngc0TAAAAACiweQIAAAAABTZPAAAAAKAwaaxg27ZtUlxcLEePHpVp06aJiMjmzZslISFBli5davkB\n/h2PxyPPPvusbN26VX755RdJSkqS9evXy9133+2T49FYt26dqrPb7eqZ+/fvV7c9PT3qtrS0VN2a\nHK+pxx57TNXdfvvt6pmvvPKKunW5XOpWRCQ+Pl7VBQUFGc01kZKSouoOHTpkNPfs2bPqNjMzU93+\n+uuvRsfha9999526bW9vV7cLFixQtw899JC6tdKUKVNU3dDQkHpmdna2uvV4POo2IiJC3Vp5m9bV\n1aXqTpw4oZ7Z0dGhbjds2KBuRURsNtu4dt44c+aMqrvxxhuN5h4/flzdRkVFqduBgQGj47DK1KlT\nVV1DQ4N6ZmFhobptampSt59//rm6LSkpUbem9u3bp+o++ugj9cyamhp1+9NPP6nbefPmqdvJkyer\nW1PafYD2PrCISEZGhtExbN26Vd1qb4Ojo6NH/b5Xjzxt3rxZPv74Y2/+1XHx1FNPSVVVlZSXl8vu\n3bslKytLli1bJo2NjT47JgAAAABXtjEfefonJv/XT+P3338Xf3//MbtTp05JbW2tVFRUyOrVq0VE\nJDc3V44ePSpr1qyRRYsWjetxAQAAAICIF488OZ1OOXbsmNTV1Ymfn5/4+flJcXHxX9///vvvpaCg\nQCIiIiQoKEjmzp0rBw4cGDHD5XJJfHy8HDx4UHJyciQoKEieeOIJ1c9vamqS4eFhWbFixYivr1ix\nQn744Qejp6cBAAAAgJbx5qmhoUFiYmJk4cKF0tLSIi0tLX89l7G1tVVycnKkr69PXn/9dfnwww8l\nMjJS8vLypLW1dcSc/v5+uffee2X58uWye/duWb58uernt7e3S0BAgCQmJo74empqqoiI/Pjjj6an\nBAAAAABjMn7a3k033SQBAQEyZcoUueWWW0Z87/HHHxen0ylffPGFTJr05+j8/HxJS0uTjRs3jnid\n1G+//SZ1dXWyZMkSo5/f29sr4eHhl3z9wguCe3t7TU8JAAAAAMY0bm9VPjQ0JM3NzbJs2TIRETl/\n/rycP39e3G63zJ8/X5qbm0f0/v7+snjxYq9+1ni/3goAAAAAxuL1G0ZcrLe3V/744w/ZsGHD374d\n6sVvZepwOLx6e9Pw8HDp6+v7258vYvaWtAAAAACgNW6bp7CwMPHz85OysjK5//77x2vsJWbOnCnn\nzp2Tzs7OEa97uvBapwuvfQIAAACA8eTV5ikgIEAGBwdHfM1ut8u8efOkra1NNm3aNOajSt5+qN6i\nRYvk6quvlrq6Olm/fv1fX9++fbukp6dLQkKCV3MBAAAAYDRebZ5SU1Nl//798tlnn0l0dLQ4HA5J\nSEiQF154QW677TbJz8+XkpISiYmJkdOnT0tra6u43W6prq7+a8bFr1vq6emRxMREqaysHPWTiB0O\nh6xevVqqq6slJCREZs2aJfX19bJ371759NNPvTkdAAAAABiTavN08aNE1dXVUlpaKkVFRTI0NCQu\nl0vefPNNmTVrlnzzzTdSVVUl5eXl0t/fLw6HQ26++WZ55JFHRsy7eKbH4xG32616M4hnnnlGgoOD\n5cUXX5STJ09KcnKyvP/++3LnnXdqTscntm3bpurq6urUM59++ml1u3TpUnW7Z88edZuSkqJuTb38\n8suqrrKyUj3T5XKp2zVr1qhbEVE/XfWGG24wmmuipqZG1R0/ftxo7ieffOLN4YzJ4XBYMteU5gO6\nRURKS0vVM03+OwcFBanbi9/ldDSdnZ3q1lRubq6q016TIiJlZWXqdvv27erW5L+FlddkRUWFqgsJ\nCVHPDAsLU7dJSUnqVkRk586dqi40NNRoron//hzJ0Rw7dsxobkdHh7rNzs5Wt7t27TI6Dqv8/PPP\nqm769OnqmbGxserW5FlATU1N6tZKmZmZqm727NnqmVFRUeo2MDBQ3W7ZskXdnjt3Tt2aWrlypaoz\nue1pbGw0OoaLP0t2NNrbVpvNJna7/R+/P+bmyeVyXXKHMykp6ZJ3z7sgOTlZduzYMerMt95665Kv\nOZ1OcbvdYx2OiIj4+fnJ2rVrZe3ataoeAAAAAP5X4/ZW5QAAAABwJWPzBAAAAAAKbJ4AAAAAQIHN\nEwAAAAAosHkCAAAAAAU2TwAAAACgwOYJAAAAABTYPAEAAACAApsnAAAAAFBg8wQAAAAACpN8fQD/\nFrfeequqW7BggXrmjh071G17e7u6TUtLU7cBAQHq1lRvb6+qmzFjhnrmzp071W1sbKy6FRE5ePCg\nuq2rqzOarZWamqrqPvjgA0vmioh0d3er24KCAqPjsEpbW5uqa2hoUM80+V3OzMxUt5eLnp4eVZeV\nlaWeefr0aXUbHx+vbufMmaNurVRfX6/qkpKS1DO//PJLdfvAAw+oWxGRlStXqtvi4mKj2VoHDhxQ\ndXPnzjWaOzg4qG7tdru6LS0tVbdPPvmkujV16NAhVZeXl6eeaXL719HRoW6rqqrUrZVycnJU3ZEj\nR9QzN23apG6rq6vV7fXXX69uHQ6HujU1MDCg6k6cOKGeuWrVKqNj+Prrr9VtcnKyqrvqqqtG/T6P\nPAEAAACAApsnAAAAAFBg8wQAAAAACmyeAAAAAECBzRMAAAAAKLB5AgAAAAAFNk8AAAAAoMDmCQAA\nAAAU2DwBAAAAgMIkXx/Av0VaWpqqu+6669Qzx/oE5P8WHBxsyVw/P+v23wEBAarO5NOzp0+frm6t\nPDdfi42NNerDw8PV7fDwsLq12+1Gx2EV7e9HXFyceubkyZO9PZxROZ1OS+aauuaaa1RdaGjouM8U\nEXG73er2chEVFaXqTK6dqVOnqlvtbeoFNpvNqLdCdHS0qjO9LYmMjFS3Jtfl5SIkJETVBQYGqmde\ne+216tbkWrtcbtMmTdLdJTa5P2XyN8Pk983kNsLK61d7PykiIkI909/f3+gYTP7GaK/LMe8He2C5\n3Nxcj4hcsf/k5uayZqzZhFyzK33dWLPLZ91YM9bs/7FmV/q6sWaXz7r9m9fM5vF4PAIAAAAAGNWV\n+7wkAAAAABhHbJ4AAAAAQIHNEwAAAAAosHkCAAAAAAU2TwAAAACg8B8uDB2k7/NVOAAAAABJRU5E\nrkJggg==\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAA08AAABGCAYAAAAU2a9PAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADYNJREFUeJzt3W1MFWTcx/H/4VHAkodzVEDkhKYmmPgw26ikRZs2q60X\nWs0ypqGMNbNczs2UlMqWYTZla8EyM1IkzV60WUvb1AkWIm6lNVw+0IM0RFGmZMi5X3TjbsyH3+XN\nidDvZ/PN4duf61xxDlwczjmeQCAQMAAAAADANYX09AIAAAAAoDfg8AQAAAAAAg5PAAAAACDg8AQA\nAAAAAg5PAAAAACDg8AQAAAAAigCCLisrK2BmN+2/7Ozsbt+zsLCwHr9evW3P4uLievx69bY9CwQC\ngcTExB6/br1tz7h9ugsNDe3x69Xb9mz8+PE9fr16254FAoFAampqj1+33rZnPX29euO+TZgwocev\nV0/tmed/v2gQRB6Px5qamqR24cKF8tyJEyfKbV1dndyuW7dObvPz8+3111+37v4y8ng8Fh8fL7Wn\nTp2S54aE6A+2hoaGyq2Z2fDhw6Vu2LBhtnnz5qDsmXr9xo4d6zS7trZWbm+77Ta5ffjhh+V248aN\n3b5nZn/vW0FBgdRu2bJFntvW1ia3CxYskNs33nhDbltbW4O2Z16vV2rPnDkjz/X5fHLr9/vl9t13\n35Vbr9drfr+/R2+fxcXF8twxY8bI7fvvvy+3ZmYVFRVSl5aWZvX19UHZs127dknt6tWrnWaPGjVK\nbsvKyuTW5XttXFxc0G6fy5Ytk9qamhp57p49e+Q2OTlZbhsaGuS2ubk5aHumioiI6PbPb2b2yiuv\nyG1RUZHcPvnkk7Z+/fqg3D7r6+uldujQofLcgwcPOq3jo48+ktvFixdLncfjsZiYmKvuGX+2BwAA\nAAACDk8AAAAAIODwBAAAAAACDk8AAAAAIODwBAAAAAACDk8AAAAAIODwBAAAAAACDk8AAAAAIODw\nBAAAAACCsJ5ewK1i06ZNUrdlyxZ5ZkJCgtxWVlbKbd++feU2MjJSbl01NzdLXVJSkjzzxIkTcjt5\n8mS5NTP79ddfpS48PNxprot58+ZJ3fz5853mPvvss3J7xx13yO2MGTPkduPGjXLrau7cuVL3ySef\nyDPV/xdmZrW1tXJ77tw5uQ2m+Ph4qYuOjpZnutyn7d+/X24TExPl1mW9rqZNmyZ1GRkZ8syJEyfK\n7Z49e+TWzKxfv35S5/V6raioyGm2qrS0VOoeeOABp7k5OTly63LfU1VV5bSOYGloaJC6n3/+WZ6p\nfk82M2tqapLbqKgouQ0m9WeJBx98UJ5ZXl4uty774PJ91ufzya0r9bbh8jNobGys0xra2trk9ttv\nv5W6uLi4a36cR54AAAAAQMDhCQAAAAAEHJ4AAAAAQMDhCQAAAAAEHJ4AAAAAQMDhCQAAAAAEHJ4A\nAAAAQMDhCQAAAAAEHJ4AAAAAQMDhCQAAAAAEYdcLPvzwQ5s5c6YdPnzY0tLSzMxs1apVlpqaao8/\n/njQF3glK1eutG+++cZqamqssbHRCgsLrbCw8IptaWmpFRcX29GjR83v99uLL75oc+bM+ZdXbHbs\n2DGpO3XqlDwzLy9PbkNDQ+X2xIkTcnvnnXfKrauUlBSpa2hokGeGh4fL7f79++XWzKyjo0Pq4uLi\nnOa62LRpk9S9/fbbTnMPHTokt9u3b5fb4uJip3UES2trq9QtWLBAnhkbGyu3FRUVchsTEyO3bW1t\ncutq3759Ujd9+nR5ZmVlpdy++eabcpuUlCS3wVRXVyd1a9askWeWlZXJ7datW+XWzCwiIkLq/H6/\n01wXNTU1UldVVeU097XXXpPblpYWuR0/frzTOoLljz/+kLr+/fvLM3/44Qe5TUxMlFuX/Q2m5uZm\nqfv888/lmerPMa4aGxvl9syZM0FZg5nZ3r17pW7GjBnyzA0bNjitQf1eZGaWnJwsdT6f75ofv6FH\nnlatWmWfffbZjfyn3aKsrMyampouHd48Hs8Vu9LSUsvPz7epU6fal19+aVOnTrWCggJ77733/s3l\nAgAAALgJXPeRp6sJBALduQ67cOGC/FuugwcPmpnZxYsXr3oQam9vt0WLFtmMGTOsqKjIzMyys7Pt\nt99+s8WLF9tzzz1nYWE3fPUBAAAA3GKcH3ny+/12/PhxKy8vt5CQEAsJCbGZM2de+viBAwfsscce\ns/j4eIuOjrb77rvPdu/e3WVGbm6upaSkWFVVlWVlZVl0dLTTn8N0utYBrqqqypqamuzpp5/ucvkz\nzzxjJ0+e/MeaAAAAAOBanA9PW7dutYEDB9rkyZOturraqqurbfHixWZmVltba1lZWXb69GkrKyuz\nzZs3W0JCgj300ENWW1vbZU5LS4s99dRTNn36dNu2bZvT38UrOv82NyMjo8vlI0eONDO353AAAAAA\ngPPfrWVmZlpkZKR5vV6bMGFCl4+9/PLL5vf7bceOHZf+JG7SpEmWkZFhRUVFXZ4n1draauXl5fbo\no4/+P6/ClXU+8e/yJ+fHx8d3+TgAAAAAKLrtpcrPnz9vO3futKlTp5rZ3885am9vt46ODsvJybGd\nO3d26SMiIuyRRx7prk8PAAAAAEHVbYen5uZmu3jxoi1btswiIiK6/CspKbHTp0936X0+31VfJa87\ndD7idPlLf3c+4tT5CBQAAAAAKLrt5eZiY2MtJCTEnn/+eafXcw+W9PR0MzP7/vvvbcCAAZcu73yl\nvs7nPgEAAACA4oYOT5GRkXbu3Lkul8XExNj9999vdXV19s4771z3UaVgPupkZpaVlWVer9fKy8st\nJyfn0uUff/yxJSQk2L333hvUzw8AAADg5nJDh6eRI0farl277IsvvrABAwaYz+ez1NRUW7lypU2c\nONEmTZpks2bNsoEDB1pTU5PV1tZaR0eHLV++/NKMy19m/NixYzZkyBArLCy89Op9V1NTU2NHjx61\njo4OM/v7lfU+/fRTMzObMmWKRUVFWVhYmBUVFVlBQYElJydbTk6O7dixw9auXWtr1qzhPZ4AAAAA\nOJFOEJc/SrR8+XLLy8uzadOm2fnz5y03N9c++OADGzNmjH333Xe2dOlSmzt3rrW0tJjP57Nx48ZZ\nfn5+l3mXzwwEAtbR0SG9+W5JSYmtW7fu0qzKykqrrKw0j8djR44cscGDB5uZ2Zw5c8zj8VhxcbGt\nWLHCUlNTraSkpMta/i1VVVVSFxkZKc9csmSJ3O7fv19ujxw5IrcJCQly62rcuHFS19raKs/8888/\n5db1FRmTkpKkrk+fPk5zXTQ2Nkrd/33lS0VMTIzcFhYWym2wH4FWjRgxQupeeukleebV3sD7ShYt\nWiS3bW1tchtMeXl5Urdt2zZ55j333CO3Lm83MWjQILkdNmyY3Lr66aefpO6tt96SZ3799ddym5mZ\nKbdm+npDQ0Od5rrYvn271Ll83zJz+1pz+WVrbGys0zqCRb2Pf+KJJ+SZ8+bNk9sff/xRbi9/bvq1\nVFdXy62rzl/IX4/L97iKigq5nT9/vtzu27dPbkePHi23rmpqaqTuq6++kme6/Lxh5vYzVXh4uNRd\n7zZ/3XuE3Nxcy83N7XLZ8OHD//HqeZ1GjBhhGzZsuObMtWvX/uMyv98vf+GuXbv2ijOuZPbs2TZ7\n9mypBQAAAICr6bZX2wMAAACAmxmHJwAAAAAQcHgCAAAAAAGHJwAAAAAQcHgCAAAAAAGHJwAAAAAQ\ncHgCAAAAAAGHJwAAAAAQcHgCAAAAAAGHJwAAAAAQhPX0Am4V2dnZUhcXFyfPfPXVV+V2yJAhctu/\nf3+5jYiIkFtXS5culbrt27fLM3///Xe5XbJkidyamcXExMhtSEhwfm8xZcoUqUtJSQnK5zczW7Fi\nhdyOGjUqaOtwsWjRIqn75Zdf5JkvvPCC3CYnJ8vtf8WBAwekrqOjQ56Znp7e7Z/fzOz48eNy6/V6\n5dZVYmKi1K1evVqe6ff75fbw4cNya2bWp08fqYuMjHSa6yIQCEjd+vXrnea63JZHjx4ttxcvXnRa\nR7AsXLhQ6k6fPi3PrK+vl9u7775bbnft2iW3wXThwgWpW7dunTzTZc8yMzPl9q+//pLbQYMGya0r\ndR2zZs2SZ548edJpDdXV1XJ79uxZqYuKirrmx3nkCQAAAAAEHJ4AAAAAQMDhCQAAAAAEHJ4AAAAA\nQMDhCQAAAAAEHJ4AAAAAQMDhCQAAAAAEHJ4AAAAAQMDhCQAAAAAEYT29gFuF+s7yra2t8sxgvau7\nyzuDJyUlBWUNZtd/h+dO/fv3l2eGhOi/L3Bp/yvS0tKkLjo62mluenq63Pp8PrmNjY11WkewqO/A\n7rIPLu/q7vI1PHbsWLmtra2VW1cjR46Uur59+8oz/X6/3Lrsg3r/a2bWr18/uXU1atQoqVNvx2Zu\n98Eu9+1mZmFh2o8ISUlJtnfvXqfZ3b2GlJQUp7ku9z133XWX3Ho8Hqd1BEtycrLUnT17Vp7p9Xrl\nNjU1VW4zMzPldvfu3XLrSr1PGTp0qDzT5f5v8ODBctve3i636tfCjVDvU1xun7fffrvTGlx+bj5/\n/rzUxcfH26FDh64eBBB02dnZATO7af9lZ2ezZ+xZr9yzm33f2LP/zr6xZ+zZv7FnN/u+sWf/nX27\nlffMEwgEAgYAAAAAuKbe93dJAAAAANADODwBAAAAgIDDEwAAAAAIODwBAAAAgIDDEwAAAAAI/gfY\n3oP8gtIuugAAAABJRU5ErkJggg==\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAA08AAABGCAYAAAAU2a9PAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADfJJREFUeJzt3XtM1fUfx/HXOSIgTEWBQCVB0bxhaJpzVjCDZlthNqeT\nLGOYaGqWW3fnXJLTal4qbW46tQXZP8w2L+sypWFLFmU61JwV5SV1iqDoQPHA+f3hTwopfX+QE6LP\nx+Yfcp578z0fOd/j55zDOR6/3+8XAAAAAOC6vK19AAAAAADQFrB5AgAAAAADNk8AAAAAYMDmCQAA\nAAAM2DwBAAAAgAGbJwAAAACw8CPg+vTp45d02/5JTU1t8TULCgpq9evV1tasS5curX692tqa+f1+\nf/v27Vv9urW1NWvt69UW1y04OLjVr1dbW7PY2NhWv15tbc38fr//nnvuafXr1tbWrLWvV1tct9TU\n1Fa/Xq21Zp7//9AggDwej1atWmVqjxw5Yp6bm5trbo8dO2ZuMzMzze2kSZM0d+5ctfSPkcfjUdeu\nXU1tZWWlea7LcYaHh5tbSaqrqzN1gwcPVklJSUDWzOPxmNotW7Y4zR43bpy59fl85nby5MnmNi8v\nr8XXTLqybrGxsab25MmTLf79JWn8+PHmtqCgwGl2oNasXbt2prZ9+/bmub169TK3Bw8eNLfx8fHm\ndtKkSVqyZElAbp+dO3c2tRkZGea5jzzyiLldtGiRuZWkQ4cOmbrevXurrKwsIGvWrVs3U3v+/Hmn\n2YmJiebW5Xbv0no8noDdPteuXWtq3377bfNcl+t2+fJlc2u935Ku3L8Eas2sgoKCzK3Xa3+B1xNP\nPGFu9+zZY24zMjK0bNmygNw+rTOt/z+SpG3btjkdR3p6urmtqKgwdV6vV927d//X68fL9gAAAADA\ngM0TAAAAABiweQIAAAAAAzZPAAAAAGDA5gkAAAAADNg8AQAAAIABmycAAAAAMGDzBAAAAAAGbJ4A\nAAAAwMD+Mcm4KZs3bzZ1xcXF5pkrV640t9XV1ea2c+fO5vb06dPm1tWFCxdMncsng7sYMWKEU+/z\n+UxdYmKiSkpKmnNINzRmzBhTFxcX5zS3vr7e3Pbv39/cvvnmm+Y2Ly/P3LoaPXq0qSstLTXPTElJ\nMbdff/21uQ0NDTW3Fy9eNLeuMjMzTV1RUZF55lNPPWVuDxw4YG6XL19ubjt06KAlS5aYexfJycmm\n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\n84G5ggAAAABJRU5ErkJggg==\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAA08AAABGCAYAAAAU2a9PAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADedJREFUeJzt3X1MlfX/x/HXOdwfJAUPipgB3XhDZJqrJlFs6tLu3PxD\no0jHMLyb09msVc6p+Ic6J+i0VVpaG+hqalHTmVtuUajdDHPLXGg3Wpo0IFQQ5O58//hNfqEl7w9x\nwpvnY+Mfzos3n+tzrpvzPtc51+UJBAIBAQAAAACuytvTAwAAAACA6wHNEwAAAAAY0DwBAAAAgAHN\nEwAAAAAY0DwBAAAAgAHNEwAAAABYBBB0KSkpAUk37E9mZma3z5nX6+3x5bre5iwuLq7Hl+t6m7NA\nIBDweDw9vmzM2bX1E4x5CwkJ6fHlut7mLDExsceX63qbs0AgEBg9enSPL9v1Nmfs09xlZGT0+HL1\n1Jx5AgHu8xRsHo9HK1asMGXLysrMdTdv3mzObty40ZxdunSpOTt//nytWbNG3b0aeTweRUVFmbIX\nL14013UZZ58+fcxZSWppaTHl0tLSdODAgR6ds927dzvVHjNmjDnrslwej8epbjB2Vx6PRz6fz5Rt\namoy142IiDBn161bZ87Onj3bnG1ubg7anEVGRpqyISEh5rr19fXmbHh4uDnr8lzk5ORo/fr1Qdk+\nrXORnZ1truuybbocMyTpq6++MuVSUlJ09OjRoMzZ4MGDTdnjx4871e7du7c5e+7cOXPWehyQ/m/5\ngrV9VlZWmrIZGRnmuseOHTNne/XqZc42NDSYs62trUGbM+vx0+U40Nraas5a13VJ+umnn8zZrKws\nFRUVBWX7rKur69aaktv8SpLXa/8Qnct2f7Xtk4/tAQAAAIABzRMAAAAAGNA8AQAAAIABzRMAAAAA\nGNA8AQAAAIABzRMAAAAAGNA8AQAAAIABzRMAAAAAGNA8AQAAAIBBaE8P4Gaxfv16Uy401P6UpKSk\nmLMej8ecdblDeltbmznrynrXcetdwSWpsbHRnL3lllvMWUmKiYkx5QYMGOBU10V+fr4pl5mZ6VTX\n5/OZs/X19ebsxIkTzdmSkhJz1tXs2bNNuXPnzplr7tmzx5xtbm42Z++8805z9ujRo+asq/j4eFPO\nZZ/28ssvm7NLly41Z++//35zdsiQIeasK7/fb8r16tXLXHPatGnm7JEjR8xZyT4Xfr8/aOtaRUVF\nUOrW1taasy7r8HvvvdeV4XS7uro6U+7MmTPmml6v/f12l+OAS91gsm6fLuM9efKkORsdHW3Ouuwj\nIiMjzVlXkyZNMuXKysrMNV1fIy1btsycffvtt0252NjYqz5+bayxAAAAAHCNo3kCAAAAAAOaJwAA\nAAAwoHkCAAAAAAOaJwAAAAAwoHkCAAAAAAOaJwAAAAAwoHkCAAAAAAOaJwAAAAAwoHkCAAAAAIPQ\nzgLvvPOOcnNzdfz4cd1+++2SpLVr1yopKUmTJk0K+gAvV1dXp9zcXB06dEi///67wsLCNHjwYM2b\nN0/Z2dlX5Ddt2qQ1a9bol19+UXJyshYsWKCZM2f+5+NuaGgw5aqrq801f/31V3P2yJEj5uyUKVPM\n2fDwcHPWVWRkpCnX2Nhorun12t8vOHXqlDkrSb179zbl4uLinOq6WLRokSk3bdo0p7qtra3mrMsc\n19fXO40jWAKBgClXUlJirnnvvfeasy77pCVLlpizwbRz505TbtWqVeaaeXl55uzKlSvN2cLCQnM2\nJiZGc+fONeddVFVVmXKvv/66uebu3bvN2d9++82claSoqChTLjk52amuC+t+9cKFC051Q0JCzNmL\nFy+as/369XMaR7D88ccf3V7TZc7i4+PN2crKyq4Mp9udOXPGlBswYIC5psfjMWf79u1rzh46dMic\ndd02XHzxxRemXHNzs7nmzz//7DSGGTNmmLPW/Uln62+XzjytXbtWH3zwQVf+9F9rampSWFiYXn31\nVX388cfatm2bhg0bpqlTp2rdunUdsps2bdKsWbM0efJkffLJJ5o8ebLmzJmjN954o0fGDgAAAOD6\n1emZp39ifafWqqmpyXQWIy4uTsXFxR1+N2HCBFVUVGjz5s2aP3++JKmlpUWLFi3StGnTtHz5cklS\nZmamTp8+rcWLF+v5559XaGiXFx8AAADATcb5zFNycrJOnjyp4uJieb1eeb1e5ebmtj9++PBhTZw4\nUXFxcfL5fMrIyLjitF5OTo4GDRqkAwcOKD09XT6fTy+99NK/WpC4uLgOp5QPHDigqqoqPffccx1y\nU6dOVXV1tflUIwAAAABIXWiePvzwQyUkJGjChAk6ePCgDh48qMWLF0uSysvLlZ6ertraWr311lva\nsWOH+vbtq3Hjxqm8vLxDnbNnz+qZZ55Rdna29uzZ87ffV+pMS0uLqqurtXHjRu3du1fz5s1rf+zS\n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\nRK5CYII=\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAA08AAABGCAYAAAAU2a9PAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADbFJREFUeJzt3X9MVfUfx/HXReDKjwSEmzcRQWtlZgq5ZZHCFjXaLDf/\nwE1IY/5AR2b2R26tuVK27JfGmlabLWxJ+Yet/nHV1thSS7fmndgP/sgsUskRCCg/BC73fv/wK4ma\nvD/EDdHnY+Ofe19738/53HPPOW/Oved4wuFwWAAAAACAa4oa6QEAAAAAwGhA8wQAAAAABjRPAAAA\nAGBA8wQAAAAABjRPAAAAAGBA8wQAAAAAFmFEXEJCQljSDfuXn58/7HPm8XhGfLlG25ylpqaO+HKN\ntjkLh8Mjvlyjcc6io6NHfNlG27zFxsaO+HKNtjnz+Xwjvlyjbc7C4XD4gQceGPFlG21zNtLLNRrn\nbd68eSO+XCM1Z57/rzSIII/Ho+zsbFP22WefNdedMmWKOdvR0WHOFhcXm7Pl5eXavHmzhns18ng8\nio6ONmVjYmLMdbu6usxZv99vzkpSc3OzKXfvvfcqEAhEZM5SUlJM2ZqaGqfac+bMMWdjY2PNWZf1\nMhwOD/ucSRfmzboOhUIhc12fz2fOHjhwwJydOXOmOdvZ2RmxObv11ltN2cbGRqe6VtZ1XZISEhLM\n2cWLF+v111+PyOczKSnJlD179qy57ttvv23Obty40ZyVpKamJlNu6tSpOn78eETmLD4+3pTt6elx\nqh0MBs1Z675Isu8HJCkpKSlin8+TJ0+asrm5uea61pqSNG7cOHO2u7vbnO3q6orYnFm3P4mJiea6\nLsccfX195qzLHBQXF+vjjz+OyOfT+t5FRdm/6Oayn5WkDz/80JxduXKlOevxeP5xzvjaHgAAAAAY\n0DwBAAAAgAHNEwAAAAAY0DwBAAAAgAHNEwAAAAAY0DwBAAAAgAHNEwAAAAAY0DwBAAAAgAHNEwAA\nAAAY2G+bjX/l6NGjptyKFSvMNfPy8szZuro6c3by5MnmbEpKijnrynq3bZc7V7tIS0tzyicnJ5ty\nGRkZCgQCQxnSoJYvX27KzZo1y6luamqqOetyR/WJEyeas6dOnTJnXc2fP9+Ua2hoMNesra01Z3/5\n5RdzNjY21pzt7Ow0Z13l5OSYcr29veaaTz31lDm7bt06c3bu3Lnm7B133GHOulqwYIEpl52dba75\n9NNPm7Pp6enmrCQdP37clEtKStLKlSudalt5vV5TLiYmxqnuuXPnzNlQKGTOHjt2zGkckdLY2GjK\ntbS0mGvGxcWZs62treZsUlKSOeuyf3E1ZswYU85lfXDZd7a3t5uz3d3d5mykjpEkafr06abctGnT\nzDWPHDniNIY777zTnH3mmWdMuQkTJlzzec48AQAAAIABzRMAAAAAGNA8AQAAAIABzRMAAAAAGNA8\nAQAAAIABzRMAAAAAGNA8AQAAAIABzRMAAAAAGNA8AQAAAIABzRMAAAAAGEQPFti5c6eWLVumY8eO\naerUqZKkyspKZWZmauHChREf4GB2796t4uJipaen68SJE1c8v2PHDm3ZskW///67srKy9Nxzz2nV\nqlX/+TgfffRRU66qqspc0+/3m7NffPGFObtixQpztqOjw5x1FQ6HTbnY2FhzzWAwaM7++OOP5qwk\neTweU87r9TrVdbFz505TbuPGjU51o6Ls/2dpbW01Z/Py8szZU6dOmbOufvjhh2Efw6RJk8zZwsJC\nc9ZlfiNpz549ppzL9mTJkiXm7P79+83Zl19+2ZyNj49XWVmZOe9i165dptxnn31mrmn9zEvSTz/9\nZM5KUlxcnCk3ZcoUp7ou2tvbTbmMjAynun19febsLbfcYs5mZmY6jSNSuru7Tbmuri5zTZf9p3Xd\nkezvcaRZ93M+n89cs6mpyZx1OTbo6ekxZ63HJkPR0NBgyh0/ftxc0+V4Q3LbLyclJZlyg70XQzrz\nVFlZ6bRxj5TW1latW7dOfr//qivHjh07tHr1ahUVFemrr75SUVGRysvL9d57743AaAEAAACMZoOe\nefon1rMCVj09PU5nECRp/fr1ysnJkd/v19dffz3guWAwqBdffFFLly5VRUWFJCk/P18NDQ3asGGD\nVqxYoejoIS8+AAAAgJuM85mnrKws/fHHH6qurlZUVJSioqK0bNmy/udra2u1YMECjR8/XvHx8Zo7\nd64OHDgwoEZpaakyMjJ08OBB5ebmKj4+XuvXr3cax7fffqvq6mpt3779qo3cwYMH1dTUpCeffHLA\n40uWLFFzc/MVYwIAAACAa3Funj7//HP5/X499thjOnTokA4dOqQNGzZIkgKBgHJzc9Xa2qr3339f\nn376qVJTU/XII48oEAgMqNPW1qbFixerpKREX375pUpKSsxj6O3tVVlZmdavX9//O6zLXfxu94wZ\nMwY8Pn36dElSXV2d+fUAAAAAwPl7a9nZ2fJ6vUpLS9P9998/4Lnnn39eWVlZqqmp6f9KXGFhoWbM\nmKGKiooBv5Nqb29XdXW1nnjiCedBv/baa+rt7dULL7zwj5kzZ85IklJSUgY8Pn78+AHPAwAAAIDF\nsF2qvKurS/v27VNRUZGkC785CgaDCoVCKigo0L59+wbkY2Nj9fjjjzu/zrFjx/TKK69o27ZtA34j\nFcmriQAAAADAsF0x4cyZM+rr69OmTZu0adOmK56/vLnx+XxDanjWrl2rhx9+WHPmzOm/ZG9PT49C\noZDa2trk9Xo1duzY/jNOLS0tmjBhwoBxSn+fgQIAAAAAi2FrnpKTkxUVFaU1a9Zo6dKlw1X2CnV1\ndaqvr7/i63jSha/orVu3Tlu3btU999wj6cK9ei5tnn7++WdJf//2CQAAAAAshtQ8eb1edXZ2Dngs\nISFB8+bN05EjR/TWW28NelZpqF+z271794Cbv4XDYb366qs6fPiw9uzZo/T0dEnSgw8+qLS0NFVX\nV6ugoKA/v2vXLqWmpuqhhx4a0usDAAAAuDkNqXmaPn269u/fr71792rChAny+XzKzMzU1q1blZeX\np8LCQi1fvlx+v19NTU0KBAIKhULavHlzf43LLy9eX1+v22+/XS+99FL/1fuuZs6cOVc8VlVVJa/X\nq7y8vP7HYmJiVFFRofLycqWnp6ugoEA1NTWqqqrStm3buMcTAAAAACemDuLys0SbN2/WypUrtWjR\nInV1dam0tFQffPCBcnJy9P3332vjxo1au3at2tra5PP5NHv2bK1evXpAvctrhsNhhUKhId1892r1\nJGnVqlXyeDzasmWL3njjDWVmZmr79u0DxvJfqa2tNeXeffddc83Zs2ebswsXLjRnJ06caM5G8kId\nCQkJppzP5zPX/PPPP4f99S9qbm425Yb7BtOXsl5F8uLvBa1aWlrM2ctvD3At18v91pqamky5S896\nD6a+vt6cfeedd8xZl/Wyo6PDnHXl9/tNub6+PnPN3Nxcc/bw4cPm7K+//mrOzp8/35x1lZmZacqd\nP3/eXDM7O9ucPXv2rDkrSY2NjaZcKBRyquvCuj86ffq0U920tDRz9sSJE+Zsamqq0zgi5Wr/aL6a\nxMREc02X/calF/QaTDAYNGddtieuvvnmG1PO5Tfzl/5sZDDjxo0zZ998801z9u6779ZHH31kzruw\njtnlPU5KSnIag8sxx3fffWfKDbYNHrR5Ki0tVWlp6YDH7rrrriuunnfRtGnT9Mknn1yzZlVV1RWP\nZWVlDXkDfLV6F5WVlamsrGxIdQEAAADgomG7VDkAAAAA3MhongAAAADAgOYJAAAAAAxongAAAADA\ngOYJAAAAAAxongAAAADAgOYJAAAAAAxongAAAADAgOYJAAAAAAxongAAAADAIHqkB3CzOH36tClX\nWVlprrl3715zNjk52Zz966+/zNn29nZz1tVvv/1myqWlpZlrnj9/fqjDGdTZs2dNuejoaKcxuygp\nKTHlmpqanOomJiaasy0tLeZsRkaGOXvmzBlz1lV3d7cp5/V6zTWDwaA5W1RUZM6uWbPGnI0k65xN\nnTrVXDMrK8ucDQQC5qzLutPR0WHOujpx4oQpFwqFzDXr6urM2dbWVnNWksLh8LDmhsK6P+rq6nKq\na30vpAvbbKtIrj8ujh49asq5jNfj8Ziz586dM2cjuf64yM3NNeViY2PNNV32GdZtquS2Ti5atMic\ndWXdtsbHx5truh6f1NfXm7PDtU3jzBMAAAAAGNA8AQAAAIABzRMAAAAAGNA8AQAAAIABzRMAAAAA\nGNA8AQAAAIABzRMAAAAAGNA8AQAAAIABzRMAAAAAGNhvUYx/5b777jPlEhISzDUTExPN2VmzZpmz\nLndqT09PN2ddudxB28rlDumurOMdM2ZMxMaQlZVlysXFxTnVnTlzpjnr8r4lJyebs7W1teasq5yc\nnGGvGQwGzVmXObNuSyQpEAiYs66sczZp0iRzzSlTpgz767vWve2228xZV9b3LhQKmWtOmzbNnI2P\njzdnJam3t9eUS09PV11dnVNtq+zsbFOuu7s7Iq8vuW2zo6Kuj/9JW7fxLp+jvr4+c9ZlXxsOh83Z\nw4cPm7OurJ/PmJgYc02XrPXzJrmtk5MnTzZnXVnXn7Fjx5prtre3O43B5TjU5/OZcqmpqTp58uQ/\nB8KIuPz8/LCkG/YvPz+fOWPORuWc3ejzxpxdP/PGnDFn/8Wc3ejzxpxdP/N2M8+ZJxx2aPkBAAAA\n4CZ1fZxfBgAAAIDrHM0TAAAAABjQPAEAAACAAc0TAAAAABjQPAEAAACAwf8AL17bUpTWcmIAAAAA\nSUVORK5CYII=\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAA08AAABGCAYAAAAU2a9PAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADY1JREFUeJzt3VtsVNX7xvFnT0tPw6FHWyhND9qqQAwtilKFxoBpE6VJ\nFU0ExQYVGgSjRg2BENTGEGNQYuhVVTBSCBdGRE1IVFQ0AVEbJJwCSCqIFFoKlcqUTpn5XfAHGeTw\nLv4dSuH7SXrB9OGdtdes2Xve7pk9XjgcDgsAAAAAcEm+3h4AAAAAAPQFNE8AAAAAYEDzBAAAAAAG\nNE8AAAAAYEDzBAAAAAAGNE8AAAAAYBFG1Em6rn/KysqYs2tgztLS0np9u/ranIXD1/dai9aceZ7X\n69vW1+YtJiam17err81ZVlZWr29XX5uzcDgcHj16dK9vW1+bs97err44b2VlZb2+Xb01Z97/LRpE\nked55uydd95pzm7atMmcnT17tjn70UcfmbPPPfec3nrrLfX0MvI8TzExMabsqVOnzHWzsrLM2UAg\nYM5KUjAYNOVGjBihTZs2RWXOUlJSTNnNmzc71c7PzzdnQ6GQOevz2U9+h0KhHp8z6fS89evXz5Tt\n7u7u8fuXpO3bt5uzd9xxhzkbDAajNmeJiYmmbGdnp7lucnKyOVtcXGzOuoyhsrJSc+bM6dV9Wlpa\nmrmuy5p0mQdJOnHihClXUFCgvXv3RmXOsrOzTdkDBw706H2fa+DAgebsvn37zNnk5OSoPT/37Nlj\nyhYVFZnr+v1+c9a6diS3Y7ikqM2ZVUJCgjnrcoyzHockqb293ZydPHmyVqxYEZXnp7Wmy2NsXbtn\nNDQ0mLMvvPCCKed5nlJTUy+6fbxtDwAAAAAMaJ4AAAAAwIDmCQAAAAAMaJ4AAAAAwIDmCQAAAAAM\naJ4AAAAAwIDmCQAAAAAMaJ4AAAAAwIDmCQAAAAAMYnt7ADeKxMREU27nzp3mmv379zdnA4GAOeui\nq6srKnUlKRQKmXIu38p96NAhczYzM9OclaSOjg5TLhgMOtV1cf/995tyOTk5TnWt61eSCgoKzNlj\nx46Zs/v37zdnXU2ePNmUW7Nmjbmmy+O8detWc9bv95uzLvPrqqSkxJRraWkx14yLizNnOzs7zdk/\n//zTnD169Kg562rWrFmmnPV5LEmVlZXm7IIFC8xZSWptbTXl0tPTVVtb61Tb6p9//jHlXPZRktta\n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\nmicAAAAAMPgfz9L1SQ/A18QAAAAASUVORK5CYII=\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nOXKkEhMTlZ6erjFjxkT97ZlnnlFubq42btzY/ZG4kpISDR8+XBUVFfrggw+6s62traqurtYdd9zh\n9PiHDx+WJM2fP1+lpaVasmSJ9u/fr8WLF2vv3r3avn27PB5PdyOVlpYW9f8DgYAkRTVaAAAAAHAx\nPfaln7a2Nm3atElLliyRFH3VkOLiYr3zzjtR+YSEBN1+++3Oj9PV1SVJKioq0urVqyVJkydPVkpK\nimbPnq0NGzZo2rRpl7oYAAAAAHBePXafp+PHj6uzs1PLli1TQkJC1E9lZeXfLj2YkZHhdInVs85e\nMnnq1KlRvz/77927d0v66x2nEydO/G2c0l/vQAEAAACARY+985Samiqv16tHH33U6Z4lrs79DtM/\nGTZsmCRpz549yszM7P793r17Jf313ScAAAAAsLik5ikxMVG///571O+Sk5M1ceJE7dq1S2+88cZF\n31W6lHedJGns2LEKhUKqra2NuiFobW2tJOmmm26SJN1yyy1KT09XdXW1iouLu3Nvv/22gsGgxo8f\nf0mPDwAAAODKdEnN09ChQ7V582Z99NFHyszMVEZGhnJycrRy5UpNmjRJJSUleuCBBxQKhdTU1KSd\nO3eqq6tLy5cv765x7n2ifvnlF+Xl5emFF17ovnrf+cTFxemVV15RWVmZHn74YU2fPl0HDhzQ888/\nr6KiIt16662S/rzbeEVFhRYtWqTs7GwVFxdr48aNWrt2rd58803u8QQAAADAiamDOPddouXLl+uh\nhx7SrFmz1NbWprKyMr311lsaNWqUduzYoZdeekmPP/64WlpalJGRodGjR6u8vDyq3rk1I5GIurq6\nTDffLS0tldfr1auvvqq1a9cqGAxq3rx5Uc2ZJC1cuFAej0crVqzQ66+/rpycHFVWVkaN5d9SV1dn\nyq1Zs8Zcc8aMGebs2asUWrS1tZmzp06dMmddWb+X5jKGc6++eCGuDfbRo0dNOZf5deX3+025/Px8\np7ouV6dcvHixOVtZWWnOHjx40Jx1lZycbMq5bD/19fXmbE1NjTmbk5Njzu7fv9+cdXXujcn/ybFj\nx8w1U1NTzVmXY1pWVpY5a71txqVISkoy5c6cOWOuGR8fb86ePn3anJX+/JSJhfUG95eis7MzJmMY\nPHiwOXvkyBFzdsCAAU7jiJWZM2eacufeC/NCzl6wy8L6fChd+ieRetp7771nyt11113mml6v/dIC\n//dCaxfT1NRkzvr9fq1du9acd2E9/ric97huDydPnjRnredIF8td9OywrKxMZWVlUb/Lz8/Xpk2b\nzpsvKCjQu+++e8Ga51uJubm5Tjvm3LlzTTv9ggULtGDBAnNdAAAAADifHrvaHgAAAABczmieAAAA\nAMCA5gkAAAAADGieAAAAAMCA5gkAAAAADGieAAAAAMCA5gkAAAAADGieAAAAAMCA5gkAAAAADGie\nAAAAAMDA19sDuFKkpqaacocOHTLXvPrqq81Zj8djziYlJZmz8fHx5qyrjz/+2JQbM2aMuebJkyfN\nWa/X7bUFn8+2O3k8HvXr18+ptpXf7zflampqnOpGIhFz9vvvvzdnXbb3WGpoaDDlrOvYVVpamjlb\nV1cXkzG46ujoMOWKiorMNTdt2mTOBgIBczYcDpuzXV1d5qyrI0eOmHIux2uX41QoFDJnJfu8JSYm\nOtV10b9/f1POZR1LUlNTkznrsk0MHDjQaRyx0tjYaMq5LJvLdtnW1mbOxvI8wsW9995rynV2dppr\nuuwb7e3t5mxKSoo5O2PGDHPWlfW5MyMjw1zzt99+cxqDy/mJdY4vluOdJwAAAAAwoHkCAAAAAAOa\nJwAAAAAwoHkCAAAAAAOaJwAAAAAwoHkCAAAAAAOaJwAAAAAwoHkCAAAAAAOaJwAAAAAw8PX2AK4U\nw4YNM+XS09PNNX0+++obOXKkOesiOzs7JnUlKSkpqcdrer321wtcspL97uuudV2MGDHClAsEAk51\nb7jhBnM2JyfHnB01apQ5u2PHDnPWlXX54uLizDW7urrM2QEDBpizLuvi22+/NWddXXfddaZcXl6e\nuWZLS4s567IfWfdNKbbHNOu6cxlvv379zNn+/fubs5LU2dlpyg0cOFDbtm1zqm1lfe4Kh8NOdV3m\n+MyZM061/wus5wcuxxOX7cdlX3Y5l9m+fbs568r6fORybI+PjzdnOzo6zFmXdTF48GBz1pV1ztLS\n0sw1s7KynMYQiUR6PBsMBvXZZ59dsBBirLCwMCLpsv0pLCxkzpizPjlnl/u8MWf/nXljzpizf2PO\nLvd5Y87+O/N2Jc+ZJxJxaNkAAAAA4ArFd54AAAAAwIDmCQAAAAAMaJ4AAAAAwIDmCQAAAAAMaJ4A\nAAAAwOB/AEmurr1C7/iYAAAAAElFTkSuQmCC\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAA08AAABGCAYAAAAU2a9PAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADTtJREFUeJzt3UtsVOUbx/FnpnPpldbOjK2ll4EKClZaJFEoSmNag5pi\n4gIVURwvQEVj1ERNNMRIF8QYWlBwg4HW0LAwRlwYXQgmoKHYWCW2KKBJFVJI7dTe6GXazvwXpvU/\nQNvnLXOohe8nYcH0l6fvec9tns6cc2yRSCQiAAAAAIAJ2ad7AAAAAAAwE9A8AQAAAIACzRMAAAAA\nKNA8AQAAAIACzRMAAAAAKNA8AQAAAIBGBJaz2WwREblm/5WUlMR8zqZ7mWbinHk8nmlfrpk2Z5HI\ntb1/WjVn071cM3HeHA7HtC/XTJuzzMzMaV+umTZnkUgkUlxcPO3LNtPmzG63T/uyzbR5W7p06bQv\n13TNmS0S4TlPVrPZbJKQkKDKer1edd2ysjJ19tixY+rsr7/+qs6+/PLLUlVVJbHejGw2m8TFxamy\nbrdbXXfu3LnqbFNTkzorIhIfH6/K3X777dLQ0GDJnM2aNUuVPXnypFHtnJwcddZkuZxOpzo7MDAQ\n8zkT+WfetOvOZFvr6+tTZ/v7+9XZ3Nxcdba1tdWyOXO5XKpsKBRS17Xb9V+GcDgc6qz2WCIi8vTT\nT8uHH35oyf5psr1rafd5EZFgMGhUOykpSZWbM2eONDU1WTJnWVlZMa05qru7W529cOGCOmuyL8fH\nx1u2f2rXdWZmprru0NCQOmuyf2q3MxGRrq4uy+YsJSVFlTU5D/h8PnXWZP/s6elRZx999FGpqamx\nZP88c+ZMTGuKiGRnZxvlT506pc6Gw2FVLi4uTubPnz/unPG1PQAAAABQoHkCAAAAAAWaJwAAAABQ\noHkCAAAAAAWaJwAAAABQoHkCAAAAAAWaJwAAAABQoHkCAAAAAAWaJwAAAABQ0D8CGldkcHBQlTN5\nkvn8+fPV2ZqaGnXW6XSqs3a7df23trbJU89PnDihzqanp6uzIvp5S05ONqpr4oEHHlDlMjIyjOqO\njIyosybL19/fbzQOq6SmpqpyCQkJ6pomy9bQ0KDO9vX1qbNWys/PV+VOnz6trun1etXZlJQUddbh\n0J/qTMZgqrq6WpVbvny5umZhYaE6e/z4cXVWRCQUCqlybrdbioqKjGpr3XvvvapcfX29Ud1z586p\nszabTZ3t6OgwGodVDh48qMqZnD9N5sHkfYR2O7NaT0+PKmdyPGlra4v57xcRSUpKUmdN1oWp1atX\nq3LNzc3qmsuWLTMag0lt7fqY7D0SnzwBAAAAgALNEwAAAAAo0DwBAAAAgALNEwAAAAAo0DwBAAAA\ngALNEwAAAAAo0DwBAAAAgALNEwAAAAAo0DwBAAAAgALNEwAAAAAoOCYL1NTUyDPPPCO//fabzJ07\nV0REtm/fLnl5efLwww9bPsDxxjOe8+fPy4033jj2/927d8u2bdukpaVF/H6/vPLKK7Jx48arMdQo\ngUBAlcvNzVXXfOONN9TZLVu2qLMjIyPqrJWGhoZUucTERHVNm82mznZ0dKizIiJOp1OV6+rqMqpr\n4ssvv1Tldu7caVQ3Eomosw7HpIeVKdW1ks/nU+VOnjyprjlv3jx19q677lJne3t71VkrPfXUU6pc\neXm5uub777+vzq5fv16dXbJkiTorYna8NPHqq6/GvGZKSoo6293dbVRbu3+Ovjewwv79+1W5+Ph4\ny8Zgco5pbW21bBwmsrOzVbm0tDR1Tbfbrc6abGsm52UrpaamqnLJycnqmibHa5P3Xib7vZX7hsvl\nUuV6enrUNVtaWozGYPI+IisrS5Xzer1y9uzZcX+uf5fzf7Zv3y4rVqyYluapvLxc6uvro14Lh8Oy\natUqyc/Pv6RxqqiokDfffFPKysrk66+/lk2bNkkkEpGKioqrPXQAAAAAM9iUmieR2P/FOBQKqTpY\nr9crXq836rUjR45IMBiM+mvh8PCwvPXWW7Ju3TqprKwUEZGSkhJpbW2VzZs3y3PPPWf0F3IAAAAA\n1zfja578fr/8+eefUldXJ3a7Xex2e9TX6I4fPy4PPfSQpKenS2Jiotx9993y7bffRtUIBAKSk5Mj\nR48eleLiYklMTJTXX399ygtRW1srbrdb1qxZM/ba0aNHpb29XZ544omo7JNPPinBYPCSMQEAAADA\nRIybpwMHDkhmZqbcf//9Ul9fL/X19bJ582YREWlsbJTi4mLp7OyUjz76SD799FPxeDxSVlYmjY2N\nUXW6urpkzZo1snbtWvnqq69k7dq1U1qA/v5++eSTT6S8vDzqu7vNzc0iIlJQUBCVX7hwoYiI/PLL\nL1P6fQAAAACuT8bfWysqKhK32y1er1fuvPPOqJ+99tpr4vf75dChQ2NfiVu5cqUUFBRIZWWlfPbZ\nZ2PZ3t5eqaurk1WrVl3RAhw4cEB6enouuXh59GL/G264Ier19PT0qJ8DAAAAgEbMblXe398vhw8f\nltWrV4vIP9ccDQ8PSzgcltLSUjl8+HBU3uVyGd2FaTy1tbWSkZEhDz744BXXAgAAAIDxxKx56ujo\nkJGREdmyZYu4XK6of7t27ZLOzs6ovM/nu+LbU547d04OHjwojz/+uNjt0Ysy+onT33//fck4Rf79\nBAoAAAAANGJ2u7m0tDSx2+3y4osvyrp162JVdkL79u2TkZGRyz5v5LbbbhMRkaamJsnIyBh7/cSJ\nEyLy77VPAAAAAKAxpebJ7XZLX19f1GtJSUlyzz33yE8//STV1dWTfqoUi4eiffzxx1JYWCiLFi26\n5GfFxcXi9Xqlrq5OSktLx17ft2+feDweWb58+RX/fgAAAADXjyk1TwsXLpQjR47IF198IRkZGeLz\n+SQvL0+qqqpkxYoVsnLlSnn22WclMzNT2tvbpbGxUcLhsGzdunWsxsXPifrjjz8kPz9f3n777bG7\n902ksbFRmpubpaqq6vIL5nBIZWWlbNq0SWbPni2lpaVy6NAh2bt3r+zcuZNnPAEAAAAwouogLv6U\naOvWrbJ+/Xp55JFHpL+/XwKBgOzZs0cWL14sDQ0N8s4778hLL70kXV1d4vP5ZMmSJVJRURFV7+Ka\nkUhEwuGw+uG7tbW14nQ6J7zF+caNG8Vms8m2bdvkvffek7y8PNm1a1fUWK6WPXv2qHKJiYnqmjfd\ndJM6OzAwoM46nU511kracXg8HnXNuLg4dbalpUWdFREZGhpS5YaHh43qmigqKlLlnn/+eaO67777\nrjpbW1urzpaVlRmNwyrBYFCVM9k/T58+rc4eO3ZMnTW5XrOtrU2dNVVdXa3K7d69W13z999/V2f3\n7t2rzi5btkydjcWNjMajPaaFw2F1Tb/fr86aPqIjNTVVlbPyGmLtt0R+/vlno7oXXyc9EZfLpc7e\nfPPNRuOwytKlS1U5k2X766+/1FmT+bXynGji888/V+VycnLUNefMmaPOXnyN/kRGL0HR8Pl88sEH\nH6jzJkYfCzQZkw8sTp06ZTQGk9ra94uDg4MT/87JCgQCAQkEAlGv3XLLLZfcPW/UrbfeKvv375+w\n5uVOen6/3+iEsWPHDtmxY8ekuQ0bNsiGDRvUdQEAAADgcmJ2tz0AAAAAuJbRPAEAAACAAs0TAAAA\nACjQPAEAAACAAs0TAAAAACjQPAEAAACAAs0TAAAAACjQPAEAAACAAs0TAAAAACjQPAEAAACAgmO6\nB3C98Hq9qlw4HFbXnD17tjobiUTU2eHhYXXWZLymzp49q8r5fD51zYGBgakOJ2ZsNpskJCRYUru7\nu1uV+/77743qtra2qrMvvPCCOuvxeNTZYDCozprq7OxU5ex2/d+bHA794XXBggXqbFtbmzprpZ6e\nHlVuaGhIXdNkzubNm6fO/vjjj+psYWGhOmuqr68v5jWbm5vVWdPjTigUUuVM1rGpM2fOqHIm5zgR\ns/PchQsX1NnU1FSjcVilqalJlTPZJtPS0tRZk3Ot2+1WZ03Whan77rtPlXO5XOqaycnJ6mx7e7s6\na7PZ1NnHHntMnTXV0dGhypmM12TORMzWh/b8Odl4+eQJAAAAABRongAAAABAgeYJAAAAABRongAA\nAABAgeYJAAAAABRongAAAABAgeYJAAAAABRongAAAABAgeYJAAAAABT0j3PHFVm0aJEqZ/KU9Fmz\nZqmzd9xxhzprt+t76uzsbHXWlMMR+83T5CnXVjGZX1MLFixQ5ZKSkozqmmw/ubm56mxnZ6c6+803\n36izpoqKilQ5k3UXDofVWZO6JuuisbFRnTWlnTO3262u2dvbq87m5eWpsx6PR5218phmsu60XC6X\nOmuyLkT0x8usrCz54YcfjGprFRQUqHLd3d1GdYeGhtTZUChkVPu/ID4+XpXT7sciIk6nU50dHBxU\nZ03Oy9999506a2rx4sWqnMk8JCYmqrMm50MTfr/fkroi+mOayTrWbrujTNaH9jjh8Xjk/Pnz4wci\nsFxJSUlERK7ZfyUlJcwZczYj5+xanzfm7L8zb8wZc3Y15uxanzfm7L8zb9fznNkiEYOPOgAAAADg\nOsU1TwAAAACgQPMEAAAAAAo0TwAAAACgQPMEAAAAAAo0TwAAAACg8D8fMopDphmUtwAAAABJRU5E\nrkJggg==\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nZWVJkvbv3y/pys/bDxs2TJL022+/uT51AAAAALcw58+t5eTkKCIiQomJibr//vs73ffiiy8qPT1d\nO3bs6PhI3JQpU5Sdna2ioiJt3ry5I9vQ0KDi4mJNnz7dedCbN2/WrFmzdN9993XcNm3aNH366acd\nv9fV1UmS4uLiOv1t+xeS2+8HAAAAAItuO1V5Y2OjSkpKNGvWLEl/nZWltbVVgUBAEydOVElJSad8\neHi4pk2b5vw4gUBAM2fO1L59+7RhwwaVlJTo7bffVllZmWbOnNnt38UCAAAAAOlfnDDicnV1dWpr\na9OqVau0atWqK+6//HSN/fv3dzqFY7stW7boq6++0rfffttx+uRx48YpIyNDkydP1pYtW5Sfn9/x\njtOZM2eUlJTUaZyS2ylxAQAAAKDbmqd+/frJ7/dr6dKlmjdvXneVvcKBAwckSaNGjep0e/tH+Coq\nKpSfn99x3ZRff/21U/PU/vft330CAAAAAIsuNU8RERFXXMwrJiZG48eP108//aR169Zd912lrrzr\nJEmDBw+WJJWVlWnChAkdt//www+S/v9ilw888IASExNVXFysiRMnduQ++ugjJSQkaOzYsV16fAAA\nAAC3pi41T8OGDdPOnTv1xRdfKCkpSf3791daWpreeOMN5ebmasqUKXrqqaeUnJys2tpalZeXKxAI\naPXq1R01Lv9u0qFDh5SZmanly5d3nL3vnxQUFOjVV1/V3LlztWzZMmVlZamiokIrV65Uampqx4V7\nw8LCVFRUpCVLlmjQoEGaOHGiduzYoU2bNunNN9/kGk8AAAAAnJg6iMvfJVq9erUWLFigxx57TI2N\njSosLNR7772nESNGqKysTCtXrtSzzz6r+vp69e/fXyNHjtTixYs71bu8ZjAYVCAQuO4JH2JjY1Va\nWqoVK1ZozZo1On78uJKTk/Xoo49qxYoVio6O7sguWrRIPp9Pa9eu1Zo1a5SWlqa33nqr01j+K7/8\n8osp59LUHTlyxJwNCQkxZ1109R1EC7/fdj4Trxrh9muKWZ0+fdqUq6+v78pwTGJiYky5S5cuOdV1\nyT/xxBPm7CeffGLONjQ0mLOuzpw5Y8pduHDBXNP6WkjSyZMnzdlz586Zs16aMWOGKee6rFm5bHvy\n8vLM2alTp3ZlOCbt1yHsTi7rxd/3jxaHDx825bz8Z6R1eQ8LC3Oq2/4pFYtTp06Zs5d/paCnPPjg\ng6ZcS0uLuabL8nP5p5OuxWW76qVt27aZcrm5ueaaTU1N5qzLMrxp0yZzNjMzU8XFxea8i4iICFPO\n5TV2Wd8kt31BRkaGKZeYmKiqqqqr3n/dLV5hYaEKCws73ZaVlXXF2fPaDRkyRB9//PE1a/7Ti56e\nnm7esaSkpOidd94xZRcuXKiFCxeasgAAAABwNd12qnIAAAAAuJnRPAEAAACAAc0TAAAAABjQPAEA\nAACAAc0TAAAAABjQPAEAAACAAc0TAAAAABjQPAEAAACAAc0TAAAAABjQPAEAAACAQWhPD+BW0dra\naspNnjzZXDMnJ8ec9fvtfXJzc7M5GwgEzFlX1dXVplxLS4u5Zp8+fczZiooKc1aSRo0aZc66vB4u\n4uPjTbmdO3c61a2pqTFnU1NTzdkLFy44jcMrFy9eNOVcXjefz2fOjh492pxta2szZ71k3aZFRUV5\n8vgudb/77jtz9s477+zCaGysy1lYWJi5pks2IiLCnJWkxMREUy45OVmVlZVOta2s2/fz58871a2t\nrTVnXebt2LFjTuPwyoEDB0y5zMxMc82qqipzNiQkxJy9UUyYMMGUc9m2uxwjhYbaD8lHjhxpzroc\nV7qyrkeu2x4X1n2RJB08eNCUO3fu3DXv550nAAAAADCgeQIAAAAAA5onAAAAADCgeQIAAAAAA5on\nAAAAADCgeQIAAAAAA5onAAAAADCgeQIAAAAAA5onAAAAADCwX84Y/8o999xjymVkZJhrRkVFmbMj\nRowwZ61XdJekwYMHm7OuXK62beX32/9fEB0d3e2P77Xs7GxTrk+fPp7UlaS0tDRz9t577zVn9+7d\na866so7D5crykZGRXR3ONbnMWVlZmSdjkOzblLCwME8e3+WK9de7WvzfpaamdmU4JtbXzmXb55IN\nDw83ZyX7NnDgwIHatWuXU22rnJwcU665udmpbiAQMGdd5s2r5d2VdfszfPhwc82+ffuasyEhIeas\nCy+3aV7sB1yWM5c5y8rKMmcHDhxozrqyHtu6rBdnzpxxGkNbW5s5a33tEhISdOLEiasHgvBcXl5e\nUNJN+5OXl8ecMWe9cs5u9nljzm6ceWPOmLP/Ys5u9nljzm6cebuV58wXDAaDAgAAAABcE995AgAA\nAAADmicAAAAAMKB5AgAAAAADmicAAAAAMKB5AgAAAACD/wHK5OL7c2WyXgAAAABJRU5ErkJggg==\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAA08AAABGCAYAAAAU2a9PAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADeZJREFUeJzt3W9MleUfx/HPOYe/BxTlACLmwEwC//9prQhlZUWbZtPS\nTS1lWupca/Ugt9ZcqZvOOcsHudq0dC1Xmyt7kCt74EpbIC5MI7XUhkpWeCQglP/cvwcO+qEl34s4\nIfl+bc4NPnzv6764z7nPl/uc+/J5nucJAAAAAHBD/r4eAAAAAAD0BzRPAAAAAGBA8wQAAAAABjRP\nAAAAAGBA8wQAAAAABjRPAAAAAGDhIeIk/af/FRQU9Pqc+f3+Pt+v/jZnqampfb5f/W3OPM/zoqKi\n+nzf+tucRUdH9/m+9bd5CwQCfb5f/W3OMjIy+ny/+tuceZ7nTZo0qc/3rb/NGY9Pd/fcc0+f71df\nzZnP81jnKdJ8Pp856/fbLwZeuHDBnJ08ebI5e+XKFXN25cqVWr9+vXr7MPL5fIqLizNlW1tbzXWt\nNSWpoaHBnJWk2NhYU27s2LEqLS2NyJylp6ebsj/88INT7aSkJHN21qxZ5uynn35qzra0tPT6nElX\n5y0lJcWUvXTpkrmuy7F25MgRczY3N9ec9TwvYnNmPdZqamrMdRsbG81Z6/YlKSYmxpydP3++Nm7c\nGJHHp9WMGTPM2VOnTpmzLs+VkvTbb7+ZciNGjFB5eXlE5iw7O9uUraysdKrtcp5zOX6amprMWZ/P\nF7HHZ2lpqSl77733muu6vD5xOdaioqLM2UieB5KTk03Z2tpac9329nZz1mW/gsGgOTtv3jzt3Lkz\nIo/PiooKUzYjI8NcNzo62mkcv/76qzlr/d0FAgGNGjXqb+eMt+0BAAAAgAHNEwAAAAAY0DwBAAAA\ngAHNEwAAAAAY0DwBAAAAgAHNEwAAAAAY0DwBAAAAgAHNEwAAAAAY0DwBAAAAgIF9WWf8I4mJiabc\nuHHjzDXT0tLM2XA4bM4+/vjj5mxOTo45Gykuq7+3tbWZs8OGDXMah3XF76FDhzrVdZGfn2/KDRgw\nwKluUlKSOXvq1ClzNj093Zw9f/68OevKurJ8QkKCuabLqufl5eXm7M2isbHRlIuPjzfXjIqyn5Iu\nX75szjY3N5uzTU1N5qyr6upqU85l36zHruT2u5Ckd99915RLTEzUE0884VTbqq6uzpRz3TeXc+13\n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\nrkJggg==\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 160 }, { "cell_type": "code", "collapsed": false, "input": [ "%%bash\n", "convert -delay 60 -loop 0 phi_gif/*.png phi_gif/phi.gif" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 161 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pretty gif time! @_@" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusions\n", "\n", "Alright, let's interpret what we have just seen. Notice that at iteration 0, our $\\phi$ is garbage, and by garbage, I mean random. Then, using necromancy, we summon Reverend Thomas Bayes and Josiah Willard Gibbs from their graves, and give them some pen and paper to constantly improve our $\\phi$, based on the evidence, i.e. the corpus we have generated. ...Uhm, forget that, I mean we let the number crunching magic do its work! We can see the patterns become clearer and clearer, and by the end of our small sampling routine (100 iterations is a very small number for a sampler), we have mostly recovered our original topics. Hurray! Let's go get some ice-cream and celebrate. Oh, and in a future notebook, we'll use a proper implementation to learn topics from documents written by pesky humans rather than generating them artificially. See ya, tsch\u00fc\u00df and au revoir!" ] } ], "metadata": {} } ] }