{ "cells": [ { "cell_type": "code", "execution_count": 213, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "%%capture\n", "%load_ext autoreload\n", "%autoreload 2\n", "%matplotlib inline\n", "# %cd .. \n", "import sys\n", "sys.path.append(\"..\")\n", "import statnlpbook.util as util\n", "import matplotlib\n", "matplotlib.rcParams['figure.figsize'] = (10.0, 5.0)\n", "import random \n", "from collections import defaultdict\n", "random.seed(2)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "\n", "$$\n", "\\newcommand{\\Xs}{\\mathcal{X}}\n", "\\newcommand{\\Ys}{\\mathcal{Y}}\n", "\\newcommand{\\y}{\\mathbf{y}}\n", "\\newcommand{\\weights}{\\mathbf{w}}\n", "\\newcommand{\\balpha}{\\boldsymbol{\\alpha}}\n", "\\newcommand{\\bbeta}{\\boldsymbol{\\beta}}\n", "\\newcommand{\\aligns}{\\mathbf{a}}\n", "\\newcommand{\\align}{a}\n", "\\newcommand{\\source}{\\mathbf{s}}\n", "\\newcommand{\\target}{\\mathbf{t}}\n", "\\newcommand{\\ssource}{s}\n", "\\newcommand{\\starget}{t}\n", "\\newcommand{\\repr}{\\mathbf{f}}\n", "\\newcommand{\\repry}{\\mathbf{g}}\n", "\\newcommand{\\bar}{\\,|\\,}\n", "\\newcommand{\\x}{\\mathbf{x}}\n", "\\newcommand{\\prob}{p}\n", "\\newcommand{\\Pulp}{\\text{Pulp}}\n", "\\newcommand{\\Fiction}{\\text{Fiction}}\n", "\\newcommand{\\PulpFiction}{\\text{Pulp Fiction}}\n", "\\newcommand{\\pnb}{\\prob^{\\text{NB}}}\n", "\\newcommand{\\vocab}{V}\n", "\\newcommand{\\params}{\\boldsymbol{\\theta}}\n", "\\newcommand{\\param}{\\theta}\n", "\\DeclareMathOperator{\\perplexity}{PP}\n", "\\DeclareMathOperator{\\argmax}{argmax}\n", "\\DeclareMathOperator{\\argmin}{argmin}\n", "\\newcommand{\\train}{\\mathcal{D}}\n", "\\newcommand{\\counts}[2]{\\#_{#1}(#2) }\n", "\\newcommand{\\length}[1]{\\text{length}(#1) }\n", "\\newcommand{\\indi}{\\mathbb{I}}\n", "$$" ] }, { "cell_type": "code", "execution_count": 214, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%HTML\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Text Classification " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Automatically classify input text into a set of **atomic classes**" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Motivation\n", "* **Information retrieval**: classify documents into topics, such as \"sport\" or \"business\"\n", "* **Sentiment analysis**: classify tweets into being \"positive\" or \"negative\" \n", "* **Spam filters**: distinguish between \"ham\" and \"spam\"\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Text Classification as Structured Prediction\n", "Simplest instance of [structured prediction](/template/statnlpbook/02_methods/00_structuredprediction) \n", "\n", "* Input space $\\Xs$ are sequences of words\n", "* output space $\\Ys$ is a set of labels\n", " * $\\Ys=\\{ \\text{sports},\\text{business}\\}$ in document classification\n", " * $\\Ys=\\{ \\text{positive},\\text{negative}, \\text{neutral}\\}$ in sentiment prediction\n", "* model $s_{\\params}(\\x,y)$ \n", " * scores $y$ highly if it fits text $\\x$\n", " " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Overview\n", "\n", "* **Generative** model: Naive Bayes\n", " * Learn how to *explain input and output*\n", "* **Discriminative** model: *Logistic Regression*\n", " * Learn how to *discriminate best output based on input*" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Sentiment Analysis as Text Classification\n", "Let us focus on a specific task: sentiment analysis\n", "\n", "* load data for this task from the [Movie Review dataset](https://www.cs.cornell.edu/people/pabo/movie-review-data/)" ] }, { "cell_type": "code", "execution_count": 215, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "from os import listdir\n", "from os.path import isfile, join\n", "def load_from_dir(directory,label):\n", " \"\"\"\n", " Load documents from a directory, and give them all the same label `label`.\n", " Params:\n", " directory: the directory to load the documents from.\n", " label: the label to assign to each document.\n", " Returns:\n", " a list of (x,y) pairs where x is a tokenised document (list of words), and y is the label `label`.\n", " \"\"\"\n", " result = []\n", " for file in listdir(directory):\n", " with open(directory + file, 'r') as f:\n", " text = f.read()\n", " tokens = [t.strip() for t in text.split()]\n", " result.append((tokens,label))\n", " return result\n", " \n", "data_pos = load_from_dir('../data/rt-2k/txt_sentoken/pos/', 'pos') \n", "data_neg = load_from_dir('../data/rt-2k/txt_sentoken/neg/', 'neg')\n", " \n", "data_all = data_pos + data_neg" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Let us look at some example data ..." ] }, { "cell_type": "code", "execution_count": 216, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"in 1970s , many european intellectuals , especially those on the left political hemisphere , became obsessed with the rise of fascism . which wasn't so hard to expect , because the social turmoil of 1960s and economic decline of 1970s seemed to be the breeding ground for many dangerous ideologies . in such times , when political involvement could be associated with noble passion , many filmmakers tried to warn the present generations of dangers that lurk ahead by giving the look of pre-war europe and circumstances that led to phenomena like fascist italy and nazi germany . of course , there were authors who jumped on the bandwagon for other , less noble reasons . for them , moral depravity of fascism could be explained to the audience by explicitly showing sexual depravity of those era . which , naturally , made some of those films very popular among teen audience . one of such filmmakers was italian director tinto brass , who later made career shooting expensive , stylish soft porn . salon kitty , his 1976 film , is very losely based on the novel by peter nordern , book that deals with bizarre yet true\"" ] }, "execution_count": 216, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\" \".join(data_neg[11][0][:200])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Setup\n", "\n", "Divide dataset in **train**, **test** and **development** set" ] }, { "cell_type": "code", "execution_count": 217, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "815" ] }, "execution_count": 217, "metadata": {}, "output_type": "execute_result" } ], "source": [ "random.seed(0)\n", "shuffled = list(data_all)\n", "random.shuffle(shuffled)\n", "train, dev, test = shuffled[:1600], shuffled[1600:1800], shuffled[1800:]\n", "len([(x,y) for (x,y) in train if y == 'pos']) # check balance " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "The simplest and most\n", "\n", "## Naive Bayes Model\n", "\n", "uses a distribution $p^{\\mbox{NB}}_{\\params}$ for $s_\\params$: \n", "\n", "\\begin{equation}\n", " s_{\\params}(\\x,\\y)\\ = p^{\\text{NB}}_{\\params}(\\x,y)\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Naive Bayes is an instance of a \n", "\n", "### Noisy Channel Model\n", "\n", "\\begin{equation}\n", "\\prob^{\\text{NB}}_{\\params}(\\x,y)= p^\\text{NB}_{\\params}(y) p^{\\text{NB}}_{\\params}(\\x|y) \n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Why Naive?\n", "\n", "Makes a naive conditional independence assumption\n", "\n", "\\begin{equation}\n", " p^{\\text{NB}}_{\\params}(\\x|y) = \n", " \\prod_i^{\\text{length}(\\x)} p^{\\text{NB}}_{\\params}(x_i|y)\n", "\\end{equation}\n", "\n", "observed words are independent of each other\n", "* when *conditioned on the label* $y$ " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "For example:\n", "\n", "$$\n", "p^{\\text{NB}}_{\\params}(\\text{great,tremendous}\\bar+) = p^{\\text{NB}}_{\\params}(\\text{great}\\bar+) p^{\\text{NB}}_{\\params}(\\text{tremendous}\\bar+)\n", "$$\n", "\n", "* Sometimes this is (approximately) true! \n", "* Even when it isn't NB may still work...\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Parametrization\n", "The NB model has the parameters $\\params=(\\balpha,\\bbeta)$ where \n", "\n", "\\begin{split}\n", " p^{\\text{NB}}_{\\params}(w|y) & = \\alpha_{w,y} \\\\\\\\\n", " p^{\\text{NB}}_{\\params}(y) & = \\beta_{y}.\n", "\\end{split}\n", "\n", "* $\\balpha$ for per-class feature probabilities\n", "* $\\bbeta$ for class priors " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Training Naive Bayes \n", "\n", "Maximum Likelihood estimation: \n", "\n", "\\begin{split}\n", " \\alpha_{w,y} & = \\frac{\\counts{\\train}{w,y}}{\\sum_{w'}\\counts{\\train}{w',y}}\\\\\\\\\n", " \\beta_{y} & = \\frac{\\counts{\\train}{y}}{\\left| \\train \\right|}\n", "\\end{split}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "MLE can produce zero probabilities for unseen events in two ways:\n", "\n", "* Words in the training set, unseen for specific class\n", " * address via [Laplace Smoothing](language_models.ipynb) \n", "* Words outside of the training set\n", " * address later ..." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Laplace Smoothing\n", "\n", "Let $V$ be the full training set vocabulary, and $\\gamma$ a pseudo-count, then\n", "\n", "\\begin{split}\n", " \\alpha^\\gamma_{w,y} & = \\frac{\\counts{\\train}{w,y} + \\gamma}{|V|\\gamma + \\sum_{w'}\\counts{\\train}{w',y}}\\\\\\\\\n", "\\end{split}" ] }, { "cell_type": "code", "execution_count": 218, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "def train_nb(data, pseudo_count=0.0):\n", " alpha = defaultdict(float)\n", " beta = defaultdict(float)\n", " vocab = set(w for x,_ in data for w in x)\n", " labels = set(y for _,y in data)\n", " norm = 0\n", " for x,y in data:\n", " for w in x:\n", " beta[y] += 1.0\n", " alpha[w,y] += 1\n", " norm += 1\n", " for y in labels:\n", " for w in vocab:\n", " alpha[w,y] = (alpha[w,y]+pseudo_count) / (beta[y] + len(vocab) * pseudo_count)\n", "\n", " for y in list(beta.keys()):\n", " beta[y] = beta[y] / norm\n", " return (alpha, beta)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Train NB on data:" ] }, { "cell_type": "code", "execution_count": 219, "metadata": {}, "outputs": [], "source": [ "theta = (alpha, beta) = train_nb(train) " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "**Inspect** the learned parameters of the NB model! \n", "\n", "* they are easy to interpret" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "The class prior $\\bbeta$ looks sensible:" ] }, { "cell_type": "code", "execution_count": 220, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "defaultdict(float, {'neg': 0.46393907123093997, 'pos': 0.53606092876906})" ] }, "execution_count": 220, "metadata": {}, "output_type": "execute_result" } ], "source": [ "beta" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "The per-class word distributions $\\balpha$:" ] }, { "cell_type": "code", "execution_count": 221, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "def plot_top_k(alpha, label='pos', k=10):\n", " positive_words = [w for (w,y) in alpha.keys() if y == label]\n", " sorted_positive_words = sorted(positive_words, key=lambda w:-alpha[w,label])[:k]\n", " util.plot_bar_graph([alpha[w,label] for w in sorted_positive_words],sorted_positive_words,rotation=45)" ] }, { "cell_type": "code", "execution_count": 222, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nX+hwx+8LSd7W3f+7u/84s6Mqz6yqq5KNfU5RVf1Ikhdn9mz95CRPSHJNkh+rqmV59v6EJG+oqnck\neUlmkfX4w1HS3Vcn+eskX7e4EefX3YcyOyr8tKr6R0n+PMnjk+xO8oEkL88sVDZkzK+2MiKncwV3\nZPYzck53fy7JG5N8NsmFVfUdCxz1qHX3H3T3hxY9xyiiax119wczO9T7l4ue5WisePZ0VlU9bDo3\n4I+SPDPJnu7+u6q6KMnLkvy/xU167Lr775P8xBQuy+yvMnvG/vokr0vymmV7hvhljlr9XZJnHz5i\n191/neQ3kpxXVY/dqEe6Jk9M8l+7+/2ZPZjfl+RrklyY5KlV9ehFDjeP7j6Y5OYkP5Tk97r72sxC\n+F9W1bOnI5HfkORvFjjmUenu+5I8IrOAvLO7L01yQXf/bpKvzSxa7lvgiHNbEZE/kORR3f2aJG/K\n7OjjP5vWvymz388HFzcpa3Ei/TpbhhN/D6uqpyR5andfMZ2kfWmSO5P8l8yeDe5K8qIk1yf5riQv\n8IHlizedO/i4JF/o7jsXPc/RWHUS8E9m9kD+3iTvSPIfMwv9S5I8Jck5SV4yPaBsWFX1zMzOf3pl\nd394WvbHmb3888nDT2o2uqr6+iTfntmTq1dldnToBzM7F+pQktd3982Lm/DYVNXOJG9OsqO7P1lV\nF2b2UvDzl+0Iy/Rv7c1J/mmSTyV5ZZJvSfLa7n7fdM7XUvx7O1GJrhPUdOTgB5L8dGbPBP9xkhdm\n9gv2KZn9wv31JE/O7GT6v+nupTqCx8ZVVd+TWWTtS3JGkr9P8m+THA6xr88sYjb8g3xVnZLZz1Fl\ndoT4EUl+NsnOjR6MR1JVz8jsVIkXJ3lYZiH2hu7+5EIHOw5TeP3nJOcmeXiSk7r7jsVOdWymN5y8\nKbOXGD+V5OeTnJnkXye5f1me9J+oRNcJqKoek+RruvvW6ZyT709yR3f/8LT+BZkd2fqLJO9cxrci\ns3FN/75+KsnF3f2B6TzBZ2d2usNrp6MRJy/TeWpV9fjMjmw9I8lnMnvZ9wOLnerYTZHyuiSfT3Jh\nd390wSMdt+ko0asyOw9qqR/4pneX/qck397d91TV13b30rz0eyITXSeg6RIDb0lyR2Ynxr41swfB\na7v7immbf5Pkm5L8XHffu6hZWX6rX3KvqjMyO3/o7d394mnZtyT5scyOeL0yyeeX8YGxqr4qs9+r\nf7voWY7XdPJ2lvFo3ZdTVY/q7s8seo71MEXkqzN72XTpflZOVKLrBDVdlG53kld091XTM9sXJnlP\nd79x2uarp0sVwDFZdQ7XZZmF/AczO49rf5LXdffrpvVPzuyE503zIA8Pps0UkSeKpf+YCo7Z3sxO\nln9ZVX2iu3+zqu5O8paq+pvu/jXBxfFaEVwvyux8wedndpRrb5IfT/Lmqnpkd//s9O4/YE6Ca/mI\nrhPU9Bbxg1V1T2YXCbwnsxNM70/yvxY6HJtKffHV9J+V5KbMPp/wsUlemuTyqnpjkk94mQTYzETX\nCa67f7eqPpfkl5L8bZIf7+7/u+Cx2ES6+1NVdWmSb8zsavrfO7179p7MPmLmyd396YUOCTCA6CLd\n/e6qet/sW+fTsP66+7NVtfJq+l+X5N1J9gsu4EThRHpgiOkjmF6a2fXhHp/Zhw9/eLFTAYwjuoBh\nlvlq+gDHS3QBAAzgA68BAAYQXQAAA4guAIABRBcAwACiCwBgANEFADCA6AIAGOD/A4peOA0BzxAd\nAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_top_k(alpha, 'pos')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Fairly uninformative! For most words \n", "\n", "* Clearly *any* document will contain these words with high probability\n", "* Don't **discriminate** between document classes " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Remove such words apriori, using a so-called **stop-word** list" ] }, { "cell_type": "code", "execution_count": 223, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "import string\n", "\n", "stop_words = set(['i', 'me', 'my', 'myself', 'we', 'our', 'ours', 'ourselves', 'you', 'your', 'yours',\n", "'yourself', 'yourselves', 'he', 'him', 'his', 'himself', 'she', 'her', 'hers',\n", "'herself', 'it', 'its', 'itself', 'they', 'them', 'their', 'theirs', 'themselves',\n", "'what', 'which', 'who', 'whom', 'this', 'that', 'these', 'those', 'am', 'is', 'are',\n", "'was', 'were', 'be', 'been', 'being', 'have', 'has', 'had', 'having', 'do', 'does',\n", "'did', 'doing', 'a', 'an', 'the', 'and', 'but', 'if', 'or', 'because', 'as', 'until',\n", "'while', 'of', 'at', 'by', 'for', 'with', 'about', 'against', 'between', 'into',\n", "'through', 'during', 'before', 'after', 'above', 'below', 'to', 'from', 'up', 'down',\n", "'in', 'out', 'on', 'off', 'over', 'under', 'again', 'further', 'then', 'once', 'here',\n", "'there', 'when', 'where', 'why', 'how', 'all', 'any', 'both', 'each', 'few', 'more',\n", "'most', 'other', 'some', 'such', 'no', 'nor', 'not', 'only', 'own', 'same', 'so',\n", "'than', 'too', 'very', 's', 't', 'can', 'will', 'just', 'don', 'should', 'now', '\\n', 'the'] + list(string.punctuation))" ] }, { "cell_type": "code", "execution_count": 224, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "def filter_dataset(data):\n", " \"\"\"\n", " Removes stop words from a dataset of (x,y) pairs.\n", " \"\"\"\n", " return [([w for w in x if w not in stop_words],y) for x,y in data]\n", "\n", "train_filtered = filter_dataset(train)\n", "dev_filtered = filter_dataset(dev)\n", "test_filtered = filter_dataset(test)\n", "\n", "theta_filtered = (alpha_filtered, beta_filtered) = train_nb(train_filtered,pseudo_count=0.01)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Let us look at $\\balpha$ again:" ] }, { "cell_type": "code", "execution_count": 225, "metadata": { "scrolled": true, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "image/png": "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\nkyRJatH/B027mhVP4YPeAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_top_k(alpha_filtered,'neg',k=20)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "See words that \n", "* indicate positive movie reviews (\"good\", \"like\"), \n", "* are generally likely (\"movie\", \"story\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "How about negative reviews?" ] }, { "cell_type": "code", "execution_count": 226, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nkyRJatH/B027mhVP4YPeAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ " plot_top_k(alpha_filtered,'neg', 20)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Observations\n", "* Negative reviews fairly similar\n", "* Mention \"good\" just as often as the positive reviews\n", "* Subtle differences: \n", " * Negative reviews contain \"movie\" more than positive ones\n", " * For \"film\" this effect is reversed\n", "\n", "* \"bad\" appears with high probability only in the negative reviews" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "\"good\" in negative reviews?" ] }, { "cell_type": "code", "execution_count": 227, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "def show_context(word, label=\"neg\", index=0, window=5): \n", " docs_with_word = [x for x,y in train if word in x and y==label]\n", " word_index = docs_with_word[index].index(word)\n", " return docs_with_word[index][max(word_index-window,0):min(word_index+window,len(docs_with_word[index]))]" ] }, { "cell_type": "code", "execution_count": 228, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'to be censored in some manner . in an early scene of the film , for example , the lead good guy and bad guy have a minor confrontation in the streets . when the good guy spouts out a'" ] }, "execution_count": 228, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\" \".join(show_context(\"good\", \"neg\", 2, 20))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Looking at the most likely words not that helpful:\n", "\n", "* Discriminative words may be rare\n", "* Look at probability *ratios* or *differences*, e.g. $p(\\text{bad}\\bar +) - p(\\text{bad}\\bar -)$ " ] }, { "cell_type": "code", "execution_count": 229, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "def diff(alpha, w):\n", " return alpha[w,'pos'] - alpha[w,'neg'] \n", "\n", "def plot_discriminative_features(alpha, threshold = 0.0, reverse=False):\n", " frequent_words = {w for ((w,y),p) in alpha.items() if p > threshold}\n", " sorted_by_ratio = sorted(frequent_words, key=lambda w: diff(alpha, w),reverse=reverse)[-20:]\n", " util.plot_bar_graph([diff(alpha,w) for w in sorted_by_ratio],sorted_by_ratio,rotation=45)" ] }, { "cell_type": "code", "execution_count": 230, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmoAAAFdCAYAAACzRUH3AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xv8bfWc+PHXu3M6XSiVTkm3E05xkqgjKYXuFzlJpQyF\nSJRcxuVkhkEyZdyVmoZMuUzFkEMRwhhMo3KdqFGJSkoZ/AhJ798f78/Xd/d1zvnu8937+/2u7zmv\n5+OxH3vvdfustfbaa73X57YiM5EkSVL3rDbdKyBJkqSlM1CTJEnqKAM1SZKkjjJQkyRJ6igDNUmS\npI4yUJMkSeooAzVJkqSOMlCTJEnqKAM1SZKkjjJQkyRJ6qjZ070Cw7DhhhvmvHnzpns1JEmSxnXV\nVVfdkZlz+5l2pQjU5s2bx5VXXjndqyFJkjSuiPhJv9Na9ClJktRRBmqSJEkdZaAmSZLUUX0FahGx\nX0RcGxHXRcTipYyPiHhPG/+9iNhhvHkj4rCIuDoi7o2IhT3D946IqyLi++19j0E3UpIkaSYaN1CL\niFnAGcD+wALgyIhYMGay/YH57XUscGYf8/4PcAjw1THLugM4KDO3A44GPrTimyVJkjTz9dPqcyfg\nusy8ASAizgcWAT/omWYRcF5mJnB5RKwXEZsA85Y1b2b+sA27T2KZ+e2er1cDa0XEGpn5xwlsnyRJ\n0ozVT9HnpsBNPd9vbsP6maafeZfn6cC3DNIkSdKqqLP9qEXEtsBpwD7LGH8sVczKFltsMYVrJkmS\nNDX6yVG7Bdi85/tmbVg/0/Qz71+JiM2ATwJHZeb1S5smM8/OzIWZuXDu3L4695UkSZpR+gnUrgDm\nR8RWETEHOAJYMmaaJcBRrfXnzsCvM/PWPue9j4hYD7gYWJyZX1/B7ZEkSVppjBuoZeY9wAnApcAP\ngQsz8+qIOC4ijmuTXQLcAFwH/Avw4uXNCxART4uIm4HHAxdHxKVtWScADwNeHxHfaa+NhrO5kiRJ\nM0dUQ82ZbeHChemzPiVJWrXMW3zx0Jd546kHDn2ZY0XEVZm5cPwpfTKBJElSZxmoSZIkdZSBmiRJ\nUkcZqEmSJHWUgZokSVJHGahJkiR1lIGaJElSRxmoSZIkdZSBmiRJUkcZqEmSJHWUgZokSVJHGahJ\nkiR1lIGaJElSRxmoSZIkdZSBmiRJUkcZqEmSJHWUgZokSVJHGahJkiR1lIGaJElSRxmoSZIkdZSB\nmiRJUkcZqEmSJHWUgZokSVJHGahJkiR1lIGaJElSRxmoSZIkdZSBmiRJUkcZqEmSJHWUgZokSVJH\nGahJkiR1lIGaJElSRxmoSZIkdZSBmiRJUkcZqEmSJHWUgZokSVJH9RWoRcR+EXFtRFwXEYuXMj4i\n4j1t/PciYofx5o2IwyLi6oi4NyIWjlneSW36ayNi30E2UJIkaaYaN1CLiFnAGcD+wALgyIhYMGay\n/YH57XUscGYf8/4PcAjw1THpLQCOALYF9gPe15YjSZK0SuknR20n4LrMvCEz7wbOBxaNmWYRcF6W\ny4H1ImKT5c2bmT/MzGuXkt4i4PzM/GNm/hi4ri1HkiRpldJPoLYpcFPP95vbsH6m6WfeiaQnSZK0\n0puxjQki4tiIuDIirvzFL34x3asjSZI0dP0EarcAm/d836wN62eafuadSHpk5tmZuTAzF86dO3ec\nRUqSJM08/QRqVwDzI2KriJhDVfRfMmaaJcBRrfXnzsCvM/PWPucdawlwRESsERFbUQ0UvrkC2yRJ\nkrRSmD3eBJl5T0ScAFwKzALOycyrI+K4Nv4s4BLgAKri/13Ac5c3L0BEPA14LzAXuDgivpOZ+7Zl\nXwj8ALgHOD4z/zzUrZYkSZoBIjOnex0GtnDhwrzyyiunezUkSdIUmrf44qEv88ZTDxz6MseKiKsy\nc+H4U87gxgSSJEkrOwM1SZKkjjJQkyRJ6qhxGxNIkiStqGHXH5uKumNdZI6aJElSRxmoSZIkdZSB\nmiRJUkcZqEmSJHWUgZokSVJHGahJkiR1lIGaJElSRxmoSZIkdZSBmiRJUkcZqEmSJHWUgZokSVJH\nGahJkiR1lIGaJElSRxmoSZIkdZSBmiRJUkcZqEmSJHXU7OleAUmSNHXmLb546Mu88dQDh75MFXPU\nJEmSOspATZIkqaMM1CRJkjrKQE2SJKmjDNQkSZI6ykBNkiSpowzUJEmSOspATZIkqaMM1CRJkjrK\nQE2SJKmjDNQkSZI6ykBNkiSpowzUJEmSOspATZIkqaP6CtQiYr+IuDYirouIxUsZHxHxnjb+exGx\nw3jzRsQGEfGFiPhRe1+/DV89Is6NiO9HxA8j4qRhbKgkSdJMM26gFhGzgDOA/YEFwJERsWDMZPsD\n89vrWODMPuZdDFyWmfOBy9p3gMOANTJzO2BH4IURMW+C2ydJkjRj9ZOjthNwXWbekJl3A+cDi8ZM\nswg4L8vlwHoRsck48y4Czm2fzwUObp8TuF9EzAbWAu4GfjOxzZMkSZq5+gnUNgVu6vl+cxvWzzTL\nm3fjzLy1ff45sHH7/HHgd8CtwE+Bt2XmL/tYT0mSpJVKJxoTZGZSOWlQuXB/Bh4MbAX8bUQ8ZOw8\nEXFsRFwZEVf+4he/mLqVlSRJmiL9BGq3AJv3fN+sDetnmuXNe1srHqW9396GPxP4XGb+KTNvB74O\nLBy7Upl5dmYuzMyFc+fO7WMzJEmSZpZ+ArUrgPkRsVVEzAGOAJaMmWYJcFRr/bkz8OtWrLm8eZcA\nR7fPRwOfap9/CuwBEBH3A3YGrpnQ1kmSJM1gs8ebIDPviYgTgEuBWcA5mXl1RBzXxp8FXAIcAFwH\n3AU8d3nztkWfClwYEccAPwEOb8PPAD4YEVcDAXwwM783lK2VJEmaQcYN1AAy8xIqGOsddlbP5wSO\n73feNvxOYM+lDP8t1UWHJEmrlHmLLx7q8m489cChLk9TrxONCSRJkvTXDNQkSZI6ykBNkiSpowzU\nJEmSOspATZIkqaMM1CRJkjrKQE2SJKmjDNQkSZI6ykBNkiSpowzUJEmSOspATZIkqaMM1CRJkjrK\nQE2SJKmjDNQkSZI6ykBNkiSpowzUJEmSOspATZIkqaMM1CRJkjrKQE2SJKmjDNQkSZI6ykBNkiSp\nowzUJEmSOspATZIkqaMM1CRJkjrKQE2SJKmjZk/3CkiS1HXzFl881OXdeOqBQ12eVl7mqEmSJHWU\ngZokSVJHGahJkiR1lIGaJElSRxmoSZIkdZSBmiRJUkcZqEmSJHWU/ahJkmasYfdvBvZxpm7pK0ct\nIvaLiGsj4rqIWLyU8RER72njvxcRO4w3b0RsEBFfiIgftff1e8Y9KiL+KyKujojvR8Sag26oJEnS\nTDNuoBYRs4AzgP2BBcCREbFgzGT7A/Pb61jgzD7mXQxclpnzgcvadyJiNvBh4LjM3BZ4EvCniW+i\nJEnSzNRPjtpOwHWZeUNm3g2cDywaM80i4LwslwPrRcQm48y7CDi3fT4XOLh93gf4XmZ+FyAz78zM\nP09w+yRJkmasfgK1TYGber7f3Ib1M83y5t04M29tn38ObNw+bw1kRFwaEd+KiFf3sY6SJEkrnU40\nJsjMjIhsX2cDTwAeC9wFXBYRV2XmZb3zRMSxVDErW2yxxVSuriRJ0pToJ0ftFmDznu+btWH9TLO8\neW9rxaO099vb8JuBr2bmHZl5F3AJsANjZObZmbkwMxfOnTu3j82QJEmaWfoJ1K4A5kfEVhExBzgC\nWDJmmiXAUa31587Ar1ux5vLmXQIc3T4fDXyqfb4U2C4i1m4NC54I/GCC2ydJkjRjjVv0mZn3RMQJ\nVAA1CzgnM6+OiOPa+LOoXK8DgOuo4srnLm/etuhTgQsj4hjgJ8DhbZ7/i4h3UEFeApdk5vA7ypEk\nSeq4vuqoZeYlVDDWO+ysns8JHN/vvG34ncCey5jnw1QXHZKkGWrYndHaEa1WRT5CSpIkqaMM1CRJ\nkjrKQE2SJKmjDNQkSZI6ykBNkiSpowzUJEmSOspATZIkqaMM1CRJkjrKQE2SJKmjDNQkSZI6qq9H\nSEmSVh7DfrQT+HgnabIYqElSh/h8TEm9LPqUJEnqKAM1SZKkjjJQkyRJ6igDNUmSpI4yUJMkSeoo\nAzVJkqSOMlCTJEnqKAM1SZKkjjJQkyRJ6igDNUmSpI4yUJMkSeooAzVJkqSO8qHsktQHH5YuaToY\nqEma0YYdQIFBlKTusOhTkiSpowzUJEmSOspATZIkqaOsoyZp0lgBX5IGY46aJElSRxmoSZIkdZSB\nmiRJUkcZqEmSJHWUgZokSVJH9dXqMyL2A94NzALen5mnjhkfbfwBwF3AczLzW8ubNyI2AC4A5gE3\nAodn5v/1LHML4AfAGzLzbRPfRElj2Zu/JM0M4+aoRcQs4Axgf2ABcGRELBgz2f7A/PY6Fjizj3kX\nA5dl5nzgsva91zuAz05gmyRJklYK/RR97gRcl5k3ZObdwPnAojHTLALOy3I5sF5EbDLOvIuAc9vn\nc4GDRxYWEQcDPwaunuB2SZIkzXj9FH1uCtzU8/1m4HF9TLPpOPNunJm3ts8/BzYGiIj7A68B9gZe\n2cf6SSsNiyQlSb068WSCzMyIyPb1DcA7M/O3VfVt6SLiWKqYlS222GLS11Gyl31J0lTrJ1C7Bdi8\n5/tmbVg/06y+nHlvi4hNMvPWVkx6exv+OODQiHgrsB5wb0T8ITNP700wM88GzgZYuHBhIkmStJLp\np47aFcD8iNgqIuYARwBLxkyzBDgqys7Ar1ux5vLmXQIc3T4fDXwKIDN3y8x5mTkPeBfwlrFBmiRJ\n0qpg3By1zLwnIk4ALqW62DgnM6+OiOPa+LOAS6iuOa6juud47vLmbYs+FbgwIo4BfgIcPtQtkyRJ\nmuH6qqOWmZdQwVjvsLN6PidwfL/ztuF3AnuOk+4b+lk/SZKklVEnGhNIg7ClpCRpZeUjpCRJkjrK\nQE2SJKmjLPrUpLLvMUmSJs5ArWOmqr6VAZQkSd1noLYCDG4kSdJUso6aJElSRxmoSZIkdZSBmiRJ\nUkcZqEmSJHWUgZokSVJHGahJkiR1lIGaJElSRxmoSZIkdZSBmiRJUkcZqEmSJHWUgZokSVJHGahJ\nkiR1lIGaJElSRxmoSZIkdZSBmiRJUkcZqEmSJHWUgZokSVJHGahJkiR1lIGaJElSRxmoSZIkdZSB\nmiRJUkcZqEmSJHWUgZokSVJHGahJkiR1lIGaJElSRxmoSZIkdZSBmiRJUkcZqEmSJHWUgZokSVJH\n9RWoRcR+EXFtRFwXEYuXMj4i4j1t/PciYofx5o2IDSLiCxHxo/a+fhu+d0RcFRHfb+97DGNDJUmS\nZppxA7WImAWcAewPLACOjIgFYybbH5jfXscCZ/Yx72LgssycD1zWvgPcARyUmdsBRwMfmvDWSZIk\nzWD95KjtBFyXmTdk5t3A+cCiMdMsAs7LcjmwXkRsMs68i4Bz2+dzgYMBMvPbmfmzNvxqYK2IWGOC\n2ydJkjRj9ROobQrc1PP95jasn2mWN+/GmXlr+/xzYOOlpP104FuZ+cc+1lOSJGmlMnu6VwAgMzMi\nsndYRGwLnAbss7R5IuJYqpiVLbbYYtLXUZIkaar1k6N2C7B5z/fN2rB+plnevLe14lHa++0jE0XE\nZsAngaMy8/qlrVRmnp2ZCzNz4dy5c/vYDEmSpJmln0DtCmB+RGwVEXOAI4AlY6ZZAhzVWn/uDPy6\nFWsub94lVGMB2vunACJiPeBiYHFmfn2AbZMkSZrRxi36zMx7IuIE4FJgFnBOZl4dEce18WcBlwAH\nANcBdwHPXd68bdGnAhdGxDHAT4DD2/ATgIcBr4+I17dh+2TmX3LcJEmSVgV91VHLzEuoYKx32Fk9\nnxM4vt952/A7gT2XMvzNwJv7WS9JkqSVmU8mkCRJ6igDNUmSpI4yUJMkSeooAzVJkqSOMlCTJEnq\nKAM1SZKkjjJQkyRJ6igDNUmSpI4yUJMkSeooAzVJkqSOMlCTJEnqKAM1SZKkjjJQkyRJ6igDNUmS\npI4yUJMkSeooAzVJkqSOMlCTJEnqKAM1SZKkjjJQkyRJ6igDNUmSpI4yUJMkSeooAzVJkqSOMlCT\nJEnqKAM1SZKkjjJQkyRJ6igDNUmSpI4yUJMkSeooAzVJkqSOMlCTJEnqKAM1SZKkjjJQkyRJ6igD\nNUmSpI4yUJMkSeooAzVJkqSO6itQi4j9IuLaiLguIhYvZXxExHva+O9FxA7jzRsRG0TEFyLiR+19\n/Z5xJ7Xpr42IfQfdSEmSpJlo3EAtImYBZwD7AwuAIyNiwZjJ9gfmt9exwJl9zLsYuCwz5wOXte+0\n8UcA2wL7Ae9ry5EkSVql9JOjthNwXWbekJl3A+cDi8ZMswg4L8vlwHoRsck48y4Czm2fzwUO7hl+\nfmb+MTN/DFzXliNJkrRK6SdQ2xS4qef7zW1YP9Msb96NM/PW9vnnwMYrkJ4kSdJKLzJz+RNEHArs\nl5nPb9+fDTwuM0/omeYzwKmZ+bX2/TLgNcC8Zc0bEb/KzPV6lvF/mbl+RJwOXJ6ZH27DPwB8NjM/\nPma9jqWKWQG2Aa6d6E6YBBsCd6wk6bgtq3Y6K9O2TFU6bsuqnY7bYjr92DIz5/Yz4ew+prkF2Lzn\n+2ZtWD/TrL6ceW+LiE0y89ZWTHr7CqRHZp4NnN3H+k+5iLgyMxeuDOm4Lat2OivTtkxVOm7Lqp2O\n22I6w9ZP0ecVwPyI2Coi5lAV/ZeMmWYJcFRr/bkz8OtWrLm8eZcAR7fPRwOf6hl+RESsERFbUQ0U\nvjnB7ZMkSZqxxs1Ry8x7IuIE4FJgFnBOZl4dEce18WcBlwAHUBX/7wKeu7x526JPBS6MiGOAnwCH\nt3mujogLgR8A9wDHZ+afh7XBkiRJM0U/RZ9k5iVUMNY77Kyezwkc3++8bfidwJ7LmOcU4JR+1q2j\npqpIdirScVtW7XRWpm2ZqnTcllU7HbfFdIZq3MYEkiRJmh4+QkqSJKmjDNQkSZI6ykBNmiIREdO9\nDl0WEfdr7+6nIXFfdoO/gwZhoLYK8CQxvXr2/0r1f4uI1Xo+T/gYa936bAVcGRHbZWauLMds65po\nyp9VHBHbRMSaOYmVkCNiy0lc9iMiYvtJWva6EfHA9nnziFh9MtIZ48GTteD2/9m0fd4iItafrLQm\n02T/52fyOWWlunB01XQeIBERIyfriHhgRKzbPnf6t++9uE3G/htZZkTsHhEvGPbye9NpgcfewAci\n4sSIOHjcGYeU9iQuew1gt4hYPSK2BfYYIL212nN9zwc+FBELuhqs9Rw3465bRDwHeB2wxiSv1th0\n16Va4W/fvg/9v94CnZMiYv4kLHsd4OnASyNiuyEvew6wM3BIRJwGvJnqOmrStH11RkQ8apKS2BZ4\ndkS8HjgLWHNYC56q/+CY69RjWgA9tEdHRsRqPcufExFD20dTodMX65ksIp7UDrj503XRGXPwvwr4\nOPD5iNgtM+9dkRN4RDwtIvaJiP0ma3170joeeFtEvBmq+5dh77+2zKcCZwLXj0l/aCfuls5ewNuA\nfwOeBBzcLhhD0RM8PDEiDomIw0bSHlYaS/EA6hFxF1GdVN84kfQiYhvgwy04eyMVrF3YxWCtJ+h+\nEvC69p942DKmfQbwaOAdmXnXVK4n8HvqYn0wQGbeOwlpBLARMNRe3ts+/n/AR4CfAi+KiK2HtfzM\nvJt6tvTzgWcCH8rMPwxr+ctxM7AeTErg/DPg4cArgC+OPEN7GP+dnuvHEyPigEGX10c6LwPOAN4L\nvCUiFg1p+fe25Z8IfAA4d+Q8ORMYqE2CFmi8BdgD+M+I2GKSL5pL1XPw7wbsBTwb+Gfg0xGxewvW\nxg1KojotfiWwAfDvbXmTogVPxwBfAJ4SEf8Gww/W2l3uccBBmfmliNg5Iv4+IuZk5p8HSSsiNhlz\nN7g19fSN31GPR3tdZt4dEUMpDmn7Zl/qBPdn4IKWmzNpMvN24DfAfsBV1MVvhS9CmXktdaF5fUQ8\nPDNPBT5MB4O1npzRM4EfAm8FDl9G7u+hwGHA2mOGD1VE3C9a0V1EPCQiHp2ZfwJeDzw6InYfcnpb\nRMQDM/MO4HTguGUFqwPaF9gO2A14+aC5UWP2//XAh4DPAdv1LnuYQVREzIO/9Bl6BfDeiNhwWIHz\nyDZl5i+BLwEfBbaMiH3a8IwJFuv27q92/n8PcHJEnBMRmy97zomLiAXUNWo/4GXAJ4HnRsSOAyxz\nm4jYuH0+Bngq8CpgLeo/OiMYqA1ZVL2Kp1KB0erAd4GbJ+Euqt/12QV4NfC/mXlzZn6Q+hN8IiL2\nXN5TH6JsCexNBZ2bAv8BfGOiJ4Bx1nVv6uL2lsy8JDMfDWwTER+B4eYQtZPnr4CzI+L9VHC4F5Xr\nOGhazwfW6dlH9wIXAG8HDszMm1rO5NMGzVmLiNUiYm3gWGrf/Rb4FvD5QZa7nPRGcu92BL5MHeuX\nU3e/W7fgf8Pxjo92bK0GkJknUM/zfcuYYO2jEfGo6bjJGaut75pUAPEM4MfUvv7XFtiv3SZ9AEBm\nHkYFAm+MiLUmI+CMiPtTOU9PaxejI6h9dhyV2/klYKSqw8BpR8Rc4OXApS0AvI3qzHzgnKKImA1/\nCS6eDJxI/Y8WAzdRAeGEc9Z6blpfBLwzM0+nOj/dnMrh3igqp/RxE02jV7sO/GNEfD4idqD+j+dQ\nxZQDB4QRf8ndfXTbL5/PzBdTT/k5LCJ2jCqWPmxFz9Ujy26f5wDrADtn5o7AHGBxRGw2yPqPpLOU\nwb/JzN9k5o3Af1LnhS0muPy9qKLg3n39fOp/sjrwNxExOyImtPwplZm+hvgCtgL+njrBfA5Ysw1/\nJrDBFKQfY77fHzgZ+HdgF2BWG34c9adea+w8PfOuRuUInEE9KWIJsHYb93xg6yGv+0FUTtrbgM1H\ntoe6KH5gGPsFeDxwILAjdRE7GXhcG7c1dTJdY9B9DzyICjbmUUVEFwDvbuN2pXJk9ptgOmsCD+5J\nZy0qB+V1wFeBbdq4ZwG7T8Ixtl87dh7fvi9s+/EdwFFtH27c537aqufzG6i76Ie3728CvgHMGfY2\nTOC4mdPeX0w9Eu8KYLM27BDgKVS9sHPbeo8cvx8CPg3cb8jrdf/2fnRbn/2oJ81sTz2e713AncD3\ngS2GkN4Dej4fTeWwfAC4gyr+njXAsndov/0D2/enAp/oGb8TdVPwYeARA6RzPPXc6G16hs2nzjef\noIKChwzhWNkJ+C9gE+Ck9t/4GvA9BjyPjUnvAOpRi4uB/wYe1Y6Bl7Vj7jZgzxVc5mo9n19JnY9/\nCBzahq3VjunzgE0H3Vft80HATu3z54BTe8a9A3jNim4DFYidDryx/Sd2Bf6ROm9d0DPtC9uxt/qw\nfpfJeE37CqwsL2BuOzjmUDkMt/aMexbwRWDuJK9D78E/kqs3n6ose0o7ue4KzG7TPGA5y3oC8OL2\n+YPAH3rGPbNt44OHtN5Pbn+mjdrJ5iPU82I37ZlmqyGk81TqAruYCmiePmbcd4CDh5DO1u1k8RGq\nqHlr4InURfxr7SR+0ADL3xV4AZVT+nkqGH8L8MeRfQY8pl0YHj/kY2zjtg93GzN8YTuxfwdY1Oey\nRoKetwKvbcPeRgW127bvDxzm+q/gto5ceA8C3kfllh1IBQ3PauN2oC6Wb6WCynnADVQx1MjF51PA\nx4a4XutRweCG7fuhbZ0Oad/nUBfUV1MX1We04atNML2nAJdRAdkj2rB1gIe14/siWkDAMm76xln+\nlsBXgL9ry92AChCO7pnmLCpH+kET3Ib7Af8CPLT9Ri+kgpsntN91FwYI0nrS2av99gf0DFutLf/M\ndoxM+L/fs8xt239tK+B5wP+2427kmHs4sHCA5e8KfAbYHXgtdZO+Txu3dtuXE/otxqRzIvBt2k1/\n264PUue1l7X/1sNW9P/R3jejbiRu6xn3Feq8vBZVCnE17cawy69pX4GV4UXdqV1CVYB8CVVEeE37\nfip1YdtuCtfnFVS28cntInEQFay9kcrtGMlB+quTajupzGoH8T9T2cRrUTlylwHvHub2tH33Deqi\n8jMql2sR8K/UhXyTIaQRbbkXtZPys6lgaWOqRd56VDHIomXtl3GWvz4t14K6i76Y0RyY91MXma3a\n941oAfsE0tmcCmg3pHIAfgm8pGf8BVRx15lU8WdfAVO/+7C9Pwi4uGf4Wu19JOd4/X62jcoN+Dp1\ng/MJ4NyecadTd+yrr+g+GvaLKvL/NqOByGzgNe13/RJVP+9NwDvbsXVi+5+8rZ0TRi6cQ7mp6Vmv\nB1NFQiPB2SHURehgenKEqSL99w2Qzo5te3ZmNIjevef3Xrtt/6sGPK4WAp+lzlEbUcXL51A3l89t\nx/PmK7rcMcMWU+eYf6eCgFdTAe66Q/xd/oaq6vDCnuNltfZ5HeBvgWOGkM6mwIL2W3ybOr+9Bbgd\nePIElvdw2o0r8NiR47p9X5+6MfwU8JQB1/shPZ93Aq5kNHd4V+DIlt7LqPP/ghX5zamg/3wqMN+C\nykG7GvibnuP1Eur6cumKLH86X9O+AjP9RQUyX6Gi9w8D57fhGwMvpYoYh1pEOM76PAH4TPv8j9TF\n8N+o4Gc2dde6vGKpkYBjbUaLOJ7Zhj2VylEY+M6zLW/79mdZu51Ev9Az7ilU8LTMXL8VSGekSOU8\nKpv7q7S7NKr+3da0i9vSTvDjLHsNqmj4tVSQdn/gQnqKuam7zwsH2W/tJHQw1ZIwqOD7Q+33fNKY\n/bYrsONEtmdp6bb33u25CHhrz/c92zG2Jn3k2lC5C4cB+1CBxOcZDWxHfpeNJuP/MYHtXwwc1z6P\nBKVzGM39fRRVzPgcKvf60p7f60aq+4e1hrg+vUVTL6KKig9u359G5UQdymggdSR10V1nAmltSuU+\nfLhn2Entt35yTxp/SwVZa/R7vHHf3P8XUtVFtqYuoq+hcoq2pW5y3g08aoL76wVUIPla6obzsbRz\nCpXL/VlaoDDg/2OjnmP4UOAPwK7t++ye6U6hcqr+MmwF09mUnvM3FdC8tH0+euS3mcB2vIy6wTuw\nfT+t7ZsEoYqaAAAYuElEQVSHtO8PoDIhLqCCoBU9TwZ1fvghcHIbtj6VGXB++40vpYLoF0zwtxgp\nKXpgOz5HqlBsT9UVP65n2lm0ajwz4TXtKzCTX9RF+RDqrvNY6oKzehs3lGCmj3XoPeGtSeVQbEkV\nt36Zyn15L3VH+rRxlvVg6g5k//b9fm27LqXqHs0e8rovqz7fEcP6I1E5QJdQgfSrqHoou7VxT2wn\njgldBHrS2J3Krn8V1f3G6WPGr0blEm0/YDpz2knoc1RruPtRd9GnUhe1bUZOtEP+nfZrx/Yb2zZu\n107Yn6ByJ7/LcnLvxhyj61IX39Opu///6hn3IurGYNrqpC1l3U9jTI4UVay8Me1unCp6eg0VqF3T\nxu9P1ROacD2eZe1HWt249vkIWoOC9v1wKjd9o/b9CbRi5AmkN3KzeTlwWM/wN1IX1JHc02Mm+h9q\n55V3MVqvch4VIPwdo/VhJ1pkeyJV5WQk1+nve8ad1IYN9N9vyzqo/Sc/SwWEG1A3VXcAT+zdhnac\nTHRfHUgF3edQ5/bZ7ff5MFUy8ZdzGf0HzDtTuWnrUoHY+4C927h3tWProe37urRixQms+8j2P6zt\n9zdQ58Unt//8I6lz/kuBV09g+RtSN0YbtO+L239x5/Z9D6ok6OWD/t7T8Zr2FZipLypb9uXUxeU3\nVP81I+NeQF0815zC9Xke8A+M3lW8htE77cXUndwyi1+oYoCnU1n336bVR2jjvkwVe0zoT7qUtMar\nz/dlBqjPx30Dg7nthLMzFeS8uf1hX0fVf5hwVj73zd3YhspOP73tv4uo4rC3tX0/oYtN7/YweuF6\nGVVnZCF1UTiFyi38JbDXEH6fBzFa121nqkL6o6icwYuoAPEBVJD4CkbrroxX3DkS2BzTjtWTqPo8\ne7Rh3wIeORX/l3HWcyHV+m9tKqfk+8BJbdyuVPcOz6Nual5I5QT9F5Wj8UyqKP87k7EtVNB8Q/st\njqcudke23//wNs3G/fwe42z/oxkNnl7Y0uut0/nQAY/lkQv3F6nz54Y902xJ1eVcvCLb0LPMkTT+\niTrP/C11sza7/aazqBuMCQWwY9LcmtHg/ECqnuaZPcf576iqFRNubNGWtR11rtycOkdf37ZnTtu+\nd7CC9WupnL9fAA+hziOrASdQJQQjwdrbqXPNhOsIj/0NqVzB7wKLxww/mioKnVBxJBUwX8PoDcTx\nLZ2Rqj77UqUp6030vzFdr2lfgZn4aieubzJ6MTuNunveggrgvjuMk0Af6zFyYnoBFRzM7xl3AvBr\n6u73BpaTw0fVF7qE0WLPZwL/0048T23jBq4r1pY9afX5uG/dnN5ch1dQFYdHiiae1v7UI60WJ1IB\neuRisC9VrBlUscpHqaz8V1LFkIfSikAG3G9bAdcyWun2RW0/7thOsI8GHjuEdOZTdTpG6tTt17Zh\nl/bbzGvDt1zB5T6e+wY2X6UCzEXtQvCvTGOQ1vN7PpFqZfxF6k5/Zypw+BaVc/Gtts6bUQHZt9p/\n5O1U443HUHf3y6xeMMC6bUDddDypHb/vooLd1aicqfMHTbf9569u/5lvM5oj9IJ2bB8+wLJ7b2zW\n6/n8aeCrY6bdnBWokzZm3q2ogOyT7T/ySUZLOo4FnjrE3+YRtKomPd/PpxU/TnQbxvzu67X98Szq\n3PzfjBZJ7rC0efpY9oZUXdrt2nH1Yep8NYvRnLWReplvYYJ1LLnvTfNLqOLVE6lz5Q8ZbUT0GKpr\npIHqPlM52dczGqy9hAr+RoqhZ0xx5322a7pXYKa9qHoOF1EX6A2pOmgnU339nEddtCc1SKPngkzl\nbnxwZBj3DVae3k64jxgz/xxGczeeQwVKnxkzzaFULsGXGELxQFvmpNXna8t4SdsfG7ff4iM9f9hT\nqIvN0O6kqIv6/9LTBJ5qBXgOlds6lOC2Z9n/QAUDI/W4Xtj2555jppvwNlIX/H+niswWUYHKLVTu\n40hrqn2pIKavStjteOsNbBZRuR292zLhHMch7t9dqIBxPlV/5hVtOxdSuRcbUEH+G6mi5odQQeZz\nqADgXuAfJmndnkzlnFzAaPcDe1G5tm9owwY63qhc4avadh1NBWw/pnUjQ90cDNyIqO2rj1H1kw5q\nwy6ip47qBH63I9rnl1AB5jupQOTnjFaSfw4VHEw4N5CqW7kBFSyfRlV/+Srw/J7p3gWc0D6PdIc0\n0dzNfajczH3a7/EdRuvT7kY19NhyAstdhyquPZ+q1/ZiqoHMflSw9mLqHPqkIR2/L6b64NyM6jbm\nNOpm47sj/xkGqCs4Jq2xwdqrqeoAa070d5ju17SvwEx8tRPNt6k7wbdSAcZpVBA31Hpcy0j//fQ0\njW4nvNdy3yBtL5bRbxtVT+DzVHcRX6aKAa4CThwz3QMYUv9PTHJ9PurCOp8q3nwSVWT1Aao+1Jnt\n93nzkH+HExmtaD6H0TvgkZy1CV0QxqSx1Zjf+jVU0DSS4/VihpCT1rP8Dang4w5GL6Jvbifz7ajg\n9Hv0mStB5aQtL7B5HQMWCw1pu4MKeO5h9CZmHhVw/wujlaw3o/oQvJIq/nwhoy0vjxnGb76UdduV\nupl6NdVJ8/Ft+GrURemMQdOlGgJsRlUV2J26gN6fqpP4a1q91SFsy0jx1I5te94FHNvGfRO4aALL\nPJAKKE8e+d9Rgc3LqfPbrdTN0xUM2MqPytW6k/vWf3oadQ5+Z9t31zKEbnGoVp0fAJ7Qvj+Hqte5\niAqav89g3fy8iuq0eSRX6/ltP+1LBWsvYDhdcKxLXbM2oc6Zl7bf6YNt332TIfcx2v4X1zBaZ239\nYS5/ql/TvgIz8UVF5o/tOQie2U4Ik5qt2ntBo+7yv9k+P6WdJA5o3w+j7rSWeYdN1Z36DfCi9n1/\n6q72JZOw3pNan4/Ru9YtqRyRf2I0p+bhVDHwrVRgMJ8h5d5Qd++f5b4tIp9IFVMMoyHEQ6kcszdx\n35ZeHwSuYwh9y/UscyTIfCRVP+jjVI7S/ak6ay+lclg/TgvS6OPulGkIbCawzb3FM2e17Ryp57UV\ndUEbmyu9PVWs9p/ANZO4jg+lWgke1b4/DvhRz/92NQbsa466WH6ayj3crZ0LXtPGHUEFC3sMYVt2\npS7UI+u+djt3fbT3PzzBZe9NVdf4SPu+BlUM+daWxgYMVu91pJrJg6mi1B8z2un0A9vxcB5VZDhw\n0Sp1U/PFdizu3ZP+s6mbzvfQ6qP28z9cRhpbUjf011CZDWu3/+jHGEJd1zFprdH20ZdH1pm6ATie\nCbRI7jPNRVSGymoT3UddeU37CszkVzsAjqHubCa1fs2Yi8lh7f1yWi/LVBB0AZVTdQXjFFdSuWrP\nbgfySIeYO1L1H44c4npPan0+Ri+227dlL6Zy0N5ET/2NNn6ird+iJ52tgUe3z3OpgPfE9vkxVECy\ny5C25xTqiQOfa9v1oDbuSCpI2G2i6Swjzd2pQOxh1I3Ie1r692vj78/EuzGZksBmAtv8lLaf39Yz\n7jQqQN6kfV/qTQSVa3tk+x/Om6T1fAIVGFzc8x/aiSrSG/imiqr/dFHbjhdQRWsfoxrFvJIqQnrM\nBH/zsa1930dVR/jv3vMTdc6acOesPctZBPwf7XzWhn2K1qv+EJZ/MHW+fCh1k/bDnnPBZmOmHaTe\n6/ZU10qvpc6Vf8cQcraWk+4OVPB/DFV15NkMudpGS2d++/9v1/53FzDBwHwF0hxKcep0v0YODE1A\ne77fM4DLM/OHU5TmIVQW/8LM/H1EfA34WWYe3p4ft4DqifkXfS7vIOpC9Soqp/CV1N37j4ewrmtR\nRWZnUkWrh1KNB55D5UCuCbwxM68eMJ2DqPVeA/hpS2trqrn2lzLz62Om/8uz7FYwnQOpwGzkZPN0\nqjXk/lQR35+oC/4nJ7wx3Gd71qJyzn5IBVH/TbUiOwx4dmZePdFtWUqaj6VO0Fdk5ofag8b3oOqs\n/Ak4JTP/34BpbET1ufZSqk7RjYOt9WAi4gCqovRRVFcj1wDPy8zbI+LdVO7V7sA9uZwHaUfE6lkP\nQh/GOs3KenboZsCd7T++NZXjcTf1GLJbI2JnKoD8ygBpPY66SG+YmSe3YYdSDRRuo/bJ7Zm5ZMBt\nWpCZP2gPxd6Kamn4aOrcsHZLb1Fm/nyQdFpaT6FuMM6jgs6TqdaQ1w+43EdTVUUOz8xr27CPUDlf\nH6BuDA/MzG8PmM7If39NqhHYD6j6iZcC52XmrYMsfznpbk/VR35FZp47SWmsQbVY34vKmTwsM38w\nGWmtbAzUBjSsC2WfaT2GOrm9ITPP7xn+Fapu3BMmuNz9qOLC31G9Zg8UOI1Z9rFUbt/NVMBxA3Wy\nfgPwp8y8Z8Dlb0xVfn9+Zl4TEcdTdSHupC5CP6GCp19NYNmbA6/PzBe0E/VHqcBlB+p3+Aa1v25s\nF9Y/ZeZtgxwTLZj5BFVv5wcRcQJVb+x3VL2Rdaki74smsvzlpHsCdRL9APXQ6j+0wH8fKhA9PTN/\nNKS0hhbYDLAOa1DFnO+hLhqLqe5N5lIX9tsjYpuRi/IUrM+W1Pn4xhZAnkJVX1g3M4+NiG2pG5w5\nwGmZ+bM230RvOnZhtAh9I6q+2Ncy808RcSRVd3C3zLxzwOP58VSF9bdQgcAHqE64r6SCz99QPeB/\ndyLLX0aaB1PnhM9Q/WbdMIRlPoKqHzryRJPdqKcczKVuDP8zMz8/YBpjz2Uj//0/UC2LP0v99ncP\nks5y0n8k9ajA6yZj+S2N1amqFPdm5i2Tlc5KZ7qz9Hwt+8Vf9z+zOdVa8krGZE1TRSMTfvgyPY82\nGvI2TGp9PqoRwTcYbX69OqP9fQ3cSo0qhtiSyt3ajArUvtm+X8Dw64qtTxWljXTKuzpVEfdS6kI9\n0jv+oP0yjdykPYTR/tkOoXq2730e7MB1oLry6tnm3kf6PLTt75HH2NzRftcp63SXarRwDZUruwuV\nE7QN1crzNmBJz7H4LgZ8NiGVU/iFkf8Glev0Xqp+5UgDn4E76mWc1r5UlYI1Bk1nGWk/kSEWR1PF\n/ie0bTmEKrl4IZWrPqw6r0s7l72fqo7wMlp/YL5WvddqqJN672IjYs+WpX83VUxwCfCOiNhkZPrM\nPDAzfzrR9DLz9uyzuHQFl/uHzLwC+FUr+jiJqltz15CW/3/UXegeEfHIrJyaj1PFoDtQLbBWWERE\nW/53qZPl1zPzZkYfE/R7qi7Pb6nWsUPRtudC4Mk92/MxKkftkcBzImKtzPzzgOlkROzf0jopIi6m\nWmR+hvqNnhARszPz3sy8c5C0uqJt8+7AiyPiSVlFuXdR3Y9sFRE7UHWa3puTlGsxVjvOFlL7/Saq\nTtpR1M3BM6igap2I+FQ7Fv8+M68ZMNkHUMVpe7fvb6JyE49u6ZMD5na0nLS/a2k9i8pRX5+qC/VI\n6oZttcz84yDpLEtm/kcOsWg9M3+bmadT3VV8gqrL9RLgV7mcYvEVTGNp57KPtbQWUMGuVkEGah3V\nE6S9jDqR7kndBW9CFR/8L/D+iHjQtK3kilmTanV5eGb+z5CXfQF19/5PEXEKVZz1D1QRxSMmssCR\n/d8+7w38LCK+SF1MHxgRb6JaRb4gM78z4PqPdSG1Pe9o2/NeqpjuB9QFfM6gCUTEAqp47XCq9dWG\nVJ2nd1NFbq+jcpxWGhGxkCqyngtcFBHPporIr6WCiiVU45yvjQTqk60dZ1+kepv/H6ovse9RuTan\ntWDjq8CWEbFDZv52CGl+nsoJOiYintkCgpOpBgq3D7r85qb2OpfqLudi4DeZeTbVaOEjg95sTJM/\nR8SOVGOLv8vMy4a8/GWdyx5EBWtaBVlHrcPaxfTkzHx6q3v1tMzcq43bkroD/sCgd79TZTLr80XE\nulSx0UjrwrWpItC9M/O2AZa72sgdc0R8ktH+n3amelP/xKDrvox016GKwh4JfDszv9wq+K+TE6hv\n15bZm0v7UKq/pB9T/ZwdmZnXR8QumfmNiNhikBzarhjZ5ojYlNEHWn86IvYCzqa6jfkCVU9t3cyc\n8lyLVhfwM9Rv/brMPLc1ZriFqtN5HNWlxVDqCPakewCt2DMz/3WYy+5JY6QF4zpU1YqHT0Y6Uyki\n7kc9S/XHk3FOm6xzmWYuA7UOGfunj4j1qboJm1MXmQMz855W2ffTwO9n6F3ppIqIJ1MXhxfmECop\njwnWPkEFS3u377Om4jcYVjoRsStVL+uPVK7AHVSHub9txYKvoSozT0rrsunQGsv8C1X89kvg6My8\nIyL2pCq6v2qyApUVERFbULmZp1C5a8+nfqt/zsyPT1KaT6X6MdyLai0+9GM5OtbadyYZ9rlMM5OB\nWkeMye3YBPhzVsuz91Odth6emT+LiGdROTr7ZWv5pftq+29OZv5kiMvsDdYuAv43M189rOVPpp5c\npV2oYvOrqA6A96CKWd4G/J6qm/aGzPzUtK3skLUcnaOoumerUf03/Z5q2frLlrP258z88jSu5l9E\ntez+KPD2zHx/q4/4+0nOjZ47GfVTl5LOtLf2nWkm41ymmcdArWMiYjHVseLd1IOer6D6IbsTSKoF\n5ZE5xC401J+RYC0inke1KjsmB+xeZKpExE5UR64nZeblrejzKVTx6ppU69XLMvOzkxkUTIWewHQT\nqoXx7VQx793U77Y/1eLwH0caSnRpm1sdqI9TD/a+cZpXR9I0mz3dK7CqG5OTdj+qVeHT2/snqdyA\nI6g6CxtTddZunJ61XbX1tO66gerkeEYEac0DqM5b96C6o/gp1SHw5pn5ypGJuhSwTERPkLYP1YP/\nUVSr3Rdn5tuBL0XEbOAA6tE/d8J9G49Mt8y8KiIelQN2MCxp5WCgNo3GBGnHUC0UZwG/zMyvRMQi\nqvPT17bWUuqAHKA3+OmSmV+IeqrF2yPix5n5bxHxK+CJUR1t3p7NNK/qQFqQtjuVg/a5zPxmRPwN\n8PGIuDcz35mZn4+IKzPzl9O8usszcOtOSSsHiz47oNWTeQv1fMHtqWKPf291aPagehDfnmrePpQ+\ne7RqinpEzUeo5yveC3w4B3xEUFf0FE1/juo5fn6O9uD/SKrT4Hdl5j9N53pK0oowUJtmrXHAq4Bn\nZj278SiqC4irgU+01mlrZXWwKg2stfR7E9WX1T+N9Bk2E3PTetc9ItbMzD+04ZdST1fYs2fa7agn\nZPzH9KytJK04A7UptpQuODanHqnyocw8sQ17FtVz+NeoDiNnfJGUuqXV4ToHODEnqS+4qRQRe1N1\nOe8ELmlVBz5LPVPwwDHTzuh6eJJWLQZqU2hMnbQTqA4uv091l3AJ8NbMPLWNfwbwFTs41GRpwc31\nOYSHVk+1qCdyzMrMW2L0wd8vpx7HtC7w3cz8l4i4gqrzue80rq4kTZiB2jSIiBdTz/H7Gyo37Syq\nG47TgXMy83XTuHpSp0XEfOAi4ClZvcM/C3hIZr6ptZx+AvV8yWNbH2SPz8z/ms51lqSJ8lmfU6w9\nHmQHqpjmECpAm0f1afUy4JkR8cCRujeS/srjgWuATVvjiDuAwyJi28z8XWZeSj3PcyGAQZqkmcxA\nbYpl5m+A44GNqGd37kvlrB1KPRj70Zl5p3VopGW6BFidylWLzPwc9bD1EyJi54jYhgrUutz9hiT1\nxX7UpkFm/jEi7gJmt5ZoWwKfoypB28mltBQ9dTwfBGxAdWfzsFbc+a9ULvXI80vf4tM7JK0MrKM2\nTSJiDaqocy/gwcBhmfmD6V0rqZt6njiwO3AisBhYH3g2FZi9LTPviogNgT9l5q9t3SlpZWCgNo0i\nYnUqd+DezLxlutdH6rKIeCwVmF2RmR+KiFnUI7H2A/4EnGKOtKSVjUWf0ygz/wTcNN3rIc0Qj6Oe\n0XnrSOe2EXEZ9di1/ambHgM1SSsVc9QkdVJPcedDgJ+3os1DgBcBbwD+OzPviYjVgPUz887pXF9J\nmgy2+pTUSS1I2x+4EDgpIi4GlgCfAU4CnhARszPzXoM0SSsrAzVJnRQRC4BTgMOBX1Pd16yZme8G\nLgNeB6wzfWsoSZPPok9JnTHmMWsPBfYFfgy8ETgyM6+PiF0y8xsRsUVm/nQ611eSJpuBmqROiYhd\ngYcCf2S0X7THZuZvW/ccrwGen5m3TuNqStKUsNWnpGnX03BgF+D9wFXArcBPgTnA0yPi91TdtDcY\npElaVZijJqkTImIn4DTgpMy8vBV9PoV6tueawHXAZZn5WTuzlbSqMEdNUlc8ANid6sT2cio37UZg\n88x85chEBmmSViW2+pTUCZn5BeAQ4HkRcWTrEPpXwBMjYuOIiDadQZqkVYY5apI6IzM/FRH3Ah+J\niKcD9wInZ+Zt07xqkjQtzFGT1CmZ+WngWcDDqOd6LolmmldNkqacOWqSOqcFZ38AzomI6zPzE9O9\nTpI0HWz1KamzImJv4PrMvGG610WSpoOBmiRJUkdZR02SJKmjDNQkSZI6ykBNkiSpowzUJEmSOspA\nTZIkqaMM1CRJkjrq/wNov2ouyvjFGAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_discriminative_features(alpha_filtered,reverse=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Many of these words seem to match our intuition for negative reviews." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Naive Bayes Prediction\n", "Given a trained NB model, how do we predict the class of a given text? \n", "\n", "Like in [MT](word_mt.ipynb) and [parsing](word_mt.ipynb), search for the $y\\in\\Ys$ with maximum *a posteriori* probability:\n", "\n", "$$\n", "\\argmax_{y\\in\\Ys} \\prob_\\params(y|\\x) = \\argmax_{y\\in\\Ys} \\frac{\\prob(\\x|y) \\prob(y) }{ \\prob(\\x) } =\\\\ \\argmax_{y\\in\\Ys} \\prob(\\x|y) \\prob(y) \n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "What to do with words outside of the training vocabulary? \n", "* Ignore them, assuming that unseen words are equally likely in both classes" ] }, { "cell_type": "code", "execution_count": 231, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "from math import log, exp\n", "def log_prob_nb(theta, x, y):\n", " \"\"\"\n", " Calculates the log probability log(p_theta(x|y)).\n", " \"\"\"\n", " alpha, beta = theta\n", " result = util.safe_log(beta[y])\n", " for w in x:\n", " if (w,y) in alpha:\n", " result += util.safe_log(alpha[w,y])\n", " return result" ] }, { "cell_type": "code", "execution_count": 232, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "('neg', 'neg')" ] }, "execution_count": 232, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def predict_nb(theta, x):\n", " \"\"\"\n", " Finds y^*=argmax_y p_theta(y|x)\n", " \"\"\"\n", " if log_prob_nb(theta, x, 'pos') > log_prob_nb(theta, x, 'neg'):\n", " return 'pos'\n", " else:\n", " return 'neg'\n", "\n", "i = 0\n", "predict_nb(theta_filtered,train_filtered[i][0]), train_filtered[i][1]" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Evaluation\n", "Use **accuracy**, the ratio of the \n", "\n", "* number of correct predictions and the \n", "* number of all predictions \n", "\n", "$\\y^*$ is predicted sequence of labels, $\\y$ the true labels:" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "$$\n", "\\mathrm{Acc}(y_1,\\ldots,y_n, y^*_1,\\ldots,y^*_n) = \\frac{\\sum_i \\indi [ y_i = y^*_i]}{n}\n", "$$" ] }, { "cell_type": "code", "execution_count": 233, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "def accuracy(data, guess):\n", " correct = 0\n", " for (x,y),y_guess in zip(data,guess):\n", " if y_guess == y:\n", " correct += 1\n", " return correct / len(data)\n", "\n", "def batch_predict_nb(theta, data):\n", " return [predict_nb(theta, x) for x,_ in data]\n", "\n", "def accuracy_nb(theta,data):\n", " return accuracy(data, batch_predict_nb(theta,data))" ] }, { "cell_type": "code", "execution_count": 234, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "(0.98625, 0.805)" ] }, "execution_count": 234, "metadata": {}, "output_type": "execute_result" } ], "source": [ "theta_filtered = (alpha_smoothed, beta_smoothed) = train_nb(train_filtered,pseudo_count=1.0)\n", "accuracy_nb(theta_filtered, train_filtered), \\\n", "accuracy_nb(theta_filtered, dev_filtered) " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Broken Assumptions\n", "\n", "Naive Bayes assumption can make sense, e.g.\n", "\n", "$\\prob(\\text{... great ... awesome}\\bar +) \\approx \\ldots \\prob(\\text{great}\\bar +) \\ldots \\prob(\\text{awesome}\\bar +) \\ldots$\n", "\n", "\n", "When is it violated?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "What is $p(\\text{Fiction}\\bar \\text{Pulp},+)$ according to NB?\n", "\n", "* $\\approx 1$\n", "* $p(\\text{Fiction}\\bar+)$\n", "* $p(\\text{Fiction})$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "|$\\x$ |$y$| \n", "|---------------------|---|\n", "|Pulp Fiction | + |\n", "|Pulp Fiction | + |\n", "|Pulp Fiction | + |\n", "|Fiction | - |\n", "|Fiction | - |\n", "|Pulp Fiction | - |" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "What is $p(\\text{Fiction}\\bar \\text{Pulp},+)$ according to this **data**? What about $p(\\text{Fiction}\\bar +)$?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "$1$, $\\frac{1}{2}$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Therefore NB will **underestimate** \n", "$$\n", "p(\\text{Pulp Fiction}\\bar +)\n", "$$ \n", "\n", "which should be\n", "\n", "$$\n", "p(\\text{Pulp}\\bar+,\\text{Fiction}) p(\\text{Fiction}\\bar +) = p(\\text{Pulp}\\bar+)\n", "$$\n", "\n", "but is \n", "$$\n", "p(\\text{Pulp}\\bar +)p(\\text{Fiction}\\bar +)\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "This means a positive instance with \"Pulp Fiction\" may be **misclassified**" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Bigram Representation\n", "\n", "Problem can be partially addressed by using a **bag of bigrams**\n", "\n", "* Count bigrams (like Pulp Fiction) and not just single words" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "\n", "Turn\n", "\n", "* like, Pulp, Fiction\n", "\n", "into\n", "\n", "* (like,Pulp),(Pulp,Fiction)\n" ] }, { "cell_type": "code", "execution_count": 235, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "def bigram_dataset(data):\n", " return [([tuple(x[i:i+2]) for i in range(0,len(x)-1)] + x,y) for x,y in data] " ] }, { "cell_type": "code", "execution_count": 236, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "[('paul', 'verhoeven'),\n", " ('verhoeven', 'dutch'),\n", " ('dutch', 'auteur'),\n", " ('auteur', 'dragged'),\n", " ('dragged', 'violent'),\n", " ('violent', 'sexually'),\n", " ('sexually', 'aggressive'),\n", " ('aggressive', 'aesthetic'),\n", " ('aesthetic', 'american'),\n", " ('american', 'film')]" ] }, "execution_count": 236, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train_bigram = bigram_dataset(train_filtered)\n", "dev_bigram = bigram_dataset(dev_filtered)\n", "test_bigram = bigram_dataset(test_filtered)\n", "train_bigram[0][0][:10]" ] }, { "cell_type": "code", "execution_count": 237, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "0.82" ] }, "execution_count": 237, "metadata": {}, "output_type": "execute_result" } ], "source": [ "theta_bigram = (alpha_bigram, beta_bigram) = train_nb(train_bigram, 1.0)\n", "accuracy_nb(theta_bigram, dev_bigram) " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Look at features" ] }, { "cell_type": "code", "execution_count": 238, "metadata": { "scrolled": false, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_discriminative_features({(f,y):p for (f,y),p in alpha_bigram.items() if len(f)==2}, reverse=True)\n", "# alpha_bigram" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Observe:\n", "\n", "* Presence of entities such as movies and actors\n", "\n", "For example\n", "* Mentions of \"pulp fiction\" suggest positive reviews" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "How do such reviews look like?" ] }, { "cell_type": "code", "execution_count": 239, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "in essence , this is the science fiction equivolence of pulp fiction . the easiest way to write a review\n", "than anything actually shown--like most of the violence in \" pulp fiction \" . \" se7en \" is gory ,\n", ", the film is paced at half the speed of pulp fiction , which avary co-wrote with quentin tarantino .\n", "this statement , but you need look no further than pulp fiction for an example ) . and , while\n", "\n", "since this is a gritty crime comedy , flashbacks of pulp fiction should arise ) . at first , i\n", ", stock & two smoking barrels ( 8/10 ) - pulp fiction ( 8/10 ) - reservoir dogs ( 9/10\n", "incredibly fun to watch . it starts off as a pulp fiction-type crime story , with criminal brothers george clooney\n", "can be even more graphic ( e . g . pulp fiction ) . pulp fiction did it in a\n", "you couldn't find in any of the two dozen \" pulp fiction \" wannabes ; fortunately , the reappearance of\n", "but if most of those movies have their roots in pulp fiction , exploring a modern myth of the doomed\n", "the three years since the release of the groundbreaking success pulp fiction , the cinematic output from its creator ,\n", "first movie quentin tarantino has directed since the highly touted pulp fiction . to say he has been inactive in\n", "me give you an example . do you know in pulp fiction where jules and vincent go on brain detail\n" ] } ], "source": [ "docs_with_good = [x for x,y in train if 'pulp' in x and 'fiction' in x and y=='pos']\n", "for doc_index in range(0,14):\n", " good_index = docs_with_good[doc_index].index(\"pulp\")\n", " print(\" \".join(docs_with_good[doc_index][good_index-10:good_index+10]))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Still problems, like longer distance dependencies: \n", "\n", "$$\n", "p(\\text{Quentin} \\bar \\text{Pulp},+)\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Can we do more with unigrams?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Let $\\hat{\\prob}$ be the empirical distribution\n", "\n", "The problem is: $\\pnb(\\text{Pulp Fiction}\\bar +)$ is **too small** \n", "\n", "\\begin{split}\n", "\\pnb(\\text{Pulp Fiction}\\bar +) &= \\pnb(\\text{Pulp}\\bar +)\\pnb(\\text{Fiction} \\bar +) \\\\\\\\\n", " &\\approx \\hat{\\prob}(\\text{Pulp}\\bar +) \\hat{\\prob}(\\text{Fiction} \\bar +) \\\\\\\\\n", " & < \\hat{\\prob}(\\text{Pulp}\\bar +) \\hat{\\prob}(\\text{Fiction}\\bar \\Pulp, +) \\\\\\\\\n", " &\\approx \\hat{\\prob}(\\text{Pulp}\\bar +) \\\\\\\\\n", "\\end{split}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "How to fix this for a unigram model?\n", "\n", "* Increase $\\prob(\\text{Pulp}\\bar +)$ " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "If \n", "\n", "$$\n", "\\pnb(\\text{Pulp}\\bar +)\\approx \\frac{\\hat{\\prob}(\\text{Pulp}\\bar +)}{\\hat{\\prob}(\\text{Fiction}\\bar +)}\n", "$$ \n", "\n", "we'd get\n", "\n", "\\begin{split}\n", "\\pnb(\\text{Pulp Fiction}\\bar +) & \\approx \\frac{\\hat{\\prob}(\\text{Pulp}\\bar +)}{\\hat{\\prob}(\\text{Fiction}\\bar +)} \\hat{\\prob}(\\text{Fiction}\\bar +) \\\\\\\\ & = \\hat{\\prob}(\\text{Pulp}\\bar +)\n", "\\end{split}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Note: $\\pnb(\\text{Pulp}\\bar +)$ may be **larger than 1**" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "But this is **not the maximum likelhood estimate**..." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "If you were to generate data from it, it could look like\n", "\n", "---------------------------\n", "|$\\x$ |$y$| \n", "|---------------------|---|\n", "|... Pulp Pulp ... | + |\n", "|... Pulp Pulp ... | + |\n", "|... Pulp Pulp ... | + |\n", "|... Fiction ... | - |\n", "|... Fiction ... | - |\n", "|... Pulp Fiction ... | - |" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "But it **doesn't matter** for us, because we get $\\prob(\\text{Pulp Fiction}|+)$ right and we may never encounter \"Pulp Pulp\" anyway. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Discriminative Text Classification\n", "\n", "Ignore generation, care about **discrimination**" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "How can we set probabilities algorithmically?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Turn it into an optimisation problem and \n", "\n", "maximise $\\prob(+ \\bar \\text{...Pulp Fiction...})$ directly" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Maximum Conditional Log-Likelihood\n", "\n", "Directly optimise the **conditional likelihood** of the correct labels\n", "\n", "$$\n", "\\mathit{CL}(\\params) = \\sum_{(\\x,y) \\in \\train} \\log(\\prob_\\params(y|\\x)) = \\sum_{(\\x,y) \\in \\train} \\log\\left(\\frac{\\prob_\\params(y,\\x)}{\\sum_y \\prob_\\params(y,\\x)}\\right)\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Unfortunately less trivial to optimise (no closed form solution)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Log-Linear Models\n", "Present NB (and other following models) in log-space:\n", "* Does not require per-word normalisation\n", "* Simplify math\n", "* easier to optimise\n", "* enables rich generalisations\n", "* resemblance to linear models like linear SVMs... " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Feature Function\n", "\n", "For log-linear models we need **feature functions** $f_i(\\x)$ mapping input to a real value, e.g.\n", "\n", "$$\n", "f_{\\text{Pulp}}(\\x) = \\counts{\\x}{\\text{Pulp}}\n", "$$\n", "i.e., the number of times *Pulp* appears in the input $\\x$. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Features don't have to correspond to single words\n", "$$\n", "f_{\\text{Pulp Fiction}}(\\x) = \\counts{\\x}{\\text{Pulp Fiction}}\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "or even correspond to n-grams\n", "$$\n", "f_{\\text{RT}}(\\x) = \\text{Lowest rotten tomatoes score of all mentioned movies in }\\x\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Joint Probability\n", "\n", "Assume we have a weight vector $\\weights_y$ for each class $y$, then a log linear model defines\n", "\n", "$$\n", " p_{\\weights}(\\x,y)= \\frac{1}{Z} \\exp \\left( \\sum_{i \\in \\mathcal{I}} f_i(x) w_{y,i} \\right) = \\frac{1}{Z} \\exp \\langle \\mathbf{f}(\\x), \\mathbf{w}_y \\rangle \n", "$$\n", "\n", "where $Z = \\sum_{y,\\x} \\exp \\langle \\mathbf{f}(\\x), \\mathbf{w}_y \\rangle$ is the partition function (or Zustandssumme) and **intractable in general**" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Note: **weights do not need to normalise**" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "You can convert a Naive Bayes model into log-linear form with\n", "$$\n", "f_{\\text{w}}(\\x) = \\counts{\\x}{w}\n", "$$\n", "and \n", "$$\n", "\\weights_{w,y} = \\log(\\alpha_{w,y})\n", "$$\n", "\n", "and a bias feature $f_0(\\x)=1$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Conditional Distributions\n", "\n", "We care only about conditional probabilities: \n", "\\begin{equation}\n", " p_{\\params}(y|\\x)= \\frac{1}{Z_\\x} \\exp \\langle \\mathbf{f}(\\x), \\mathbf{w}_y \\rangle = \\frac{1}{Z_\\x} \\exp s_\\weights(\\x,y)\n", "\\end{equation}\n", "\n", "with a tractable *conditional* normalizer: \n", "\n", "$$\n", "Z_\\x=\\sum_{y\\in\\Ys} \\exp s_\\weights(\\x,y)\n", "$$ \n", "\n", "where $s_\\weights(\\x,y)= \\langle \\mathbf{f}(\\x), \\mathbf{w}_y \\rangle$ is the linear score of $\\x$ and $y$.\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "For binary tasks corresponds to **logistic regression model**:\n", "\n", "\\begin{split}\n", "\\frac{1}{Z_\\x} \\exp s_\\weights(\\x,y) & = \\frac{\\exp s_\\weights(\\x,y)}{\\exp s_\\weights(\\x,+)+\\exp s_\\weights(\\x,-)} \\\\\\\\ & = \\operatorname{sigmoid}_y\\left(s_\\weights(\\x,y)\\right) \n", "\\end{split}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Conditional log-likelihood in log-linear form:\n", "\n", "$$\n", "\\mathit{CL}(\\weights) = \\sum_{(\\x,y) \\in \\train} \\log(\\prob_\\params(y|\\x)) = \\sum_{(\\x,y) \\in \\train} \\log \\left (\\frac{1}{Z_\\x} \\exp s_\\weights(\\x,y) \\right) =\\\\ \\sum_{(\\x,y) \\in \\train} s_\\weights(\\x,y) - \\log Z_\\x.\n", "$$" ] }, { "cell_type": "code", "execution_count": 240, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "p,f = \"Pulp\", \"Fiction\"\n", "data = [((p,f),True),((p,f),True),((p,f),True), ((f,),False), ((f,),False),((p,f),False)]\n", "from math import log, exp\n", "\n", "def cl(data, w_p_true, w_f_true, w_true, l=0.0):\n", " loss = 0.0\n", " for x,y in data:\n", " count_p = len([w for w in x if w==p])\n", " count_f = len([w for w in x if w==f])\n", " score_true = w_true + count_p * w_p_true + count_f * w_f_true\n", " log_z = log(exp(score_true) + exp(0))\n", "# print(count_p)\n", "# print(count_f)\n", "# print(log_z)\n", " if y:\n", " loss += score_true - log_z\n", " else:\n", " loss += 0 - log_z\n", " return loss - l * (w_p_true * w_p_true + w_f_true * w_f_true + w_true * w_true)\n", "\n", "def jl(data, w_p_true, w_f_true, w_true, w_p_false, w_f_false, w_false):\n", " loss = 0.0\n", " for x,y in data:\n", " count_p = len([w for w in x if w==p])\n", " count_f = len([w for w in x if w==f])\n", " score_true = w_true + count_p * w_p_true + count_f * w_f_true\n", " score_false = w_false + count_p * w_p_false + count_f * w_f_false\n", " if y:\n", " loss += score_true\n", " else:\n", " loss += score_false\n", " return loss \n", "\n", "\n", "# cl(data,log(0.5),log(0.5),log(0.5))\n", "\n", "import matplotlib.pyplot as plt\n", "import mpld3\n", "import numpy as np\n", "\n", "# x = np.linspace(-10, 10, 100)\n", "# cl_loss = np.vectorize(lambda w: cl(data,w,log(0.5),log(0.5),1))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Consider a log-linear model\n", "$$\n", "\\mathbf{f}(\\x) = \n", "\\begin{bmatrix}\n", " \\counts{\\x}{\\text{Pulp}} \\\\\n", " \\counts{\\x}{\\text{Fiction}} \\\\\n", " 1\n", " \\end{bmatrix}\n", "$$\n", "\n", "and loss on the following data:" ] }, { "cell_type": "code", "execution_count": 241, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
xy
0(Pulp, Fiction)True
1(Pulp, Fiction)True
2(Pulp, Fiction)True
3(Fiction,)False
4(Fiction,)False
5(Pulp, Fiction)False
\n", "
" ], "text/plain": [ " x y\n", "0 (Pulp, Fiction) True\n", "1 (Pulp, Fiction) True\n", "2 (Pulp, Fiction) True\n", "3 (Fiction,) False\n", "4 (Fiction,) False\n", "5 (Pulp, Fiction) False" ] }, "execution_count": 241, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "pd.DataFrame(data, columns = [\"x\",\"y\"])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "What is $\\pnb(\\Pulp \\bar +)$?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Set $w_{\\Fiction,+}=\\log 0.5$ and $w_{+}=\\log 0.5$, \n", "vary \n", "\n", "$$\n", "\\prob(\\Pulp \\bar +) = \\exp(w_{\\Pulp,+})\n", "$$\n", "\n", "to show that increasing $w_{\\Pulp,+} > \\log(0.5)$ helps to improve the CL" ] }, { "cell_type": "code", "execution_count": 242, "metadata": { "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 242, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nEbgAAABC9v8BXNq26NU4NBcAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(0.01, 20.0, 100)\n", "cl_loss = np.vectorize(lambda p: cl(data,log(p),log(0.5),log(0.5)))\n", "plt.plot(x, cl_loss(x))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Compare to the **joint likelihood** we optimised before:\n", " \n", "$$\n", "\\sum_{(\\x,y) \\in \\train} \\log(\\prob_\\params(y,\\x))\n", "$$\n", "\n", "and see that MLE encourages $w=\\log(0.5)$" ] }, { "cell_type": "code", "execution_count": 243, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 243, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nifOSuDg3iYtzk5gS5rwwpgwAACAB0FIGAACQAAhlAAAACSClQpmZXWJmm8xsq5l9pZ/9ZmY/iO9f\na2Yne1FnqhnGefl4/Hy8aWYvmdliL+pMRUOdmz7HnWpmETP7yHjWl8qGc27M7FwzW21m683s2fGu\nMRUN4/+zXDP7o5mtiZ+XG7yoM9WY2c/MrM7M1g2wPyG+/1MmlJmZT9J/SXqfpPmSPmZm84857H2S\nZsdvN0v673EtMgUN87zskPRe59wiSd9QAg3KnMiGeW6OHPctSU+Mb4WpazjnxszyJP1I0uXOuQWS\nrhr3QlPMMH9mPifpLefcYknnSvqemQXGtdDU9AtJlwyyPyG+/1MmlEk6TdJW59x251y3pPslXXHM\nMVdI+qWLWSkpz8zKx7vQFDPkeXHOveScOxx/uFLSlHGuMVUN52dGkm6V9KCkuvEsLsUN59z8jaTf\nO+d2S5JzjvMz9oZzXpykbDMzSVmSDkmKjG+Zqcc595xif9cDSYjv/1QKZZMl7enzeG/8ueM9BqPr\neP/Ob5L02JhWhCOGPDdmNlnSlaJVebwN5+dmjqR8M3vGzFaZ2XXjVl3qGs55uUPSPEn7JL0p6QvO\nuej4lIdBJMT3v3+8PxB4t8zsPMVC2Xu8rgVH/T9JX3bORWO/+COB+CWdIukCSZmSXjazlc65zd6W\nlfIulrRa0vmSZkp60syed841e1sWEkEqhbIaSRV9Hk+JP3e8x2B0Devv3MxOlHS3pPc55xrGqbZU\nN5xzUyXp/nggK5J0qZlFnHN/GJ8SU9Zwzs1eSQ3OuTZJbWb2nKTFkghlY2c45+UGSd90sUlCt5rZ\nDklzJb06PiViAAnx/Z9K3ZevSZptZtPjgyqvkfTIMcc8Ium6+FUYZ0hqcs7tH+9CU8yQ58XMpkr6\nvaRr+S1/XA15bpxz051zlc65Skm/k/S/CGTjYjj/nz0s6T1m5jezkKTTJW0Y5zpTzXDOy27FWi9l\nZqWSTpC0fVyrRH8S4vs/ZVrKnHMRM/u8pMcl+ST9zDm33sxuie+/U9KfJV0qaaukdsV+o8EYGuZ5\n+WdJhZJ+FG+RiTjnqryqOVUM89zAA8M5N865DWb2F0lrJUUl3e2c63c6AIyOYf7MfEPSL8zsTUmm\nWPf/Qc+KThFm9hvFrnYtMrO9kr4mKV1KrO9/llkCAABIAKnUfQkAAJCwCGUAAAAJgFAGAACQAAhl\nAAAACYBQBgAAkAAIZQAAAAmAUAYAAJAA/j/5aXtYrNRBaQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(0.01, 0.999, 100)\n", "jl_loss = np.vectorize(lambda p: jl(data,log(p),log(1-p),log(0.5),\n", " log(0.1),log(0.9),log(0.5)))\n", "plt.plot(x, jl_loss(x)) # CHANGE to jl" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Other Objectives\n", "Other structured prediction losses replace $\\log Z_\\x$ with other terms:\n", "\n", "$$\n", "\\mathit{PERCEPTRON}(\\weights) = \\sum_{(\\x,y) \\in \\train} s_\\weights(\\x,y) - s_\\weights(\\x,y^*(\\x))\n", "$$\n", "\n", "where $y^*(\\x)=\\argmax_{y\\in\\Ys} s_\\weights(\\x,y)$ \n", "\n", "Aka **structured perceptron** loss!" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Regularisation\n", "Estimating a log-linear models can lead to *overfitting*\n", "\n", "* For example, reviews of movies may often contain the **name** of the movie to reviewed.\n", "* False *killer feature*: only appears in one training instance \n", "* weight can be set in way that we get perfect accuracy on this instance " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "*regularise* the model by **penalising** large weights:\n", "\n", "* add a regularisation penalty to the training objective\n", "* For example, $||\\weights||_2$ and $||\\weights||_1$, the L2 and L1 norm of the weight vector\n", "\n", "$$\n", "\\mathit{RCL}_C(\\weights) = \\sum_{(\\x,y) \\in \\train} \\log(\\prob_\\weights(y|\\x)) - \\frac{1}{C} ||\\weights||_2\n", "$$\n", "\n", "$C$ controls inverse strength of regularisation" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Both L1 and L2 have their strength and weaknesses. \n", "* L1 regularisation can lead to sparse vectors with zero weights, and this can improve the memory footprint of your model. \n", "* L2 seems to often lead to [better results](http://www.csie.ntu.edu.tw/~cjlin/liblinear/FAQ.html#l1_regularized_classification). " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Vary regularisation:" ] }, { "cell_type": "code", "execution_count": 436, "metadata": { "scrolled": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 436, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nCUkPVnCpDZL2V3AdHD/6ZGWiX1Ye+mTloU9Wpir65V+4+8bjOXBFBa6qmNkOdx8fdjswjz5ZmeiX\nlYc+WXnok5VppfULU4oAAACBEbgAAAACizVwbRl2A3AE+mRlol9WHvpk5aFPVqYV1S9R1nABAABU\nKdYRLgAAgMoQuAAAAAKLKnCZ2WvN7Mdmdp+ZvWfY7YmRmZ1vZv9gZj8ys11m9s5y++lm9k0z+2n5\n+gvDbmuMzKxuZt83s78rP9MvQ2Rmp5nZl83sXjPbbWZX0yfDZ2Z/WP79tdPMPm9mo/RL9czsU2a2\nz8x29mw7aj+Y2U3lv/8/NrNfrbq90QQuM6tL+pik10m6XNKbzezy4bYqSh1Jf+Tul0u6StI7yn54\nj6Rvufulkr5Vfkb13ilpd89n+mW4Pirp6+7+LEkvUNE39MkQmdm5kv5A0ri7P1dSXdKNol+G4W8k\nvXbRtiX7ofx35kZJzym/89/LXFCZaAKXpCsk3efu97t7IukLkq4bcpui4+6Puftd5fvDKv4BOVdF\nX3y6POzTkt4wnBbGy8zOk/Trkj7Rs5l+GRIzWy/plZI+KUnunrj7QdEnK0FD0ioza0haLelR0S+V\nc/fvSDqwaPPR+uE6SV9w97a775F0n4pcUJmYAte5kh7u+by33IYhMbMLJb1I0u2SznL3x8pdj0s6\na0jNitl/k/RuSXnPNvpleC6SNCHpr8tp3k+Y2Zjok6Fy90ckfUjSQ5Iek/SUu39D9MtKcbR+GHoG\niClwYQUxszWS/lbSu9z9UO8+L9YqYb2SCpnZ6yXtc/c7j3YM/VK5hqQXS/pLd3+RpCktmqaiT6pX\n1gRdpyIQnyNpzMze0nsM/bIyrLR+iClwPSLp/J7P55XbUDEzG1ERtj7r7l8pN//czM4u958tad+w\n2hepl0n6l2b2gIrp9leb2WdEvwzTXkl73f328vOXVQQw+mS4rpW0x90n3D2V9BVJvyj6ZaU4Wj8M\nPQPEFLi+J+lSM7vIzJoqiue+NuQ2RcfMTEVNym53/3DPrq9Jemv5/q2Sbqm6bTFz95vc/Tx3v1DF\nfxvfdve3iH4ZGnd/XNLDZvbMctM1kn4k+mTYHpJ0lZmtLv8+u0ZFLSr9sjIcrR++JulGM2uZ2UWS\nLpV0R5UNi2qleTP7NRV1KnVJn3L3Dwy5SdExs5dL+idJ92i+VuhPVNRxfVHSBZIelPSb7r64GBIV\nMLNfkvTH7v56MztD9MvQmNkLVdzE0JR0v6TfUvE/yvTJEJnZ+yX9axV3XX9f0tskrRH9Uikz+7yk\nX5K0QdKaqF6yAAAAU0lEQVTPJf0nSV/VUfrBzG6W9Nsq+u1d7v73lbY3psAFAAAwDDFNKQIAAAwF\ngQsAACAwAhcAAEBgBC4AAIDACFwAAACBEbgAAAACI3ABAAAE9v8BWUlP9uJO2DgAAAAASUVORK5C\nYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(0.01, 100.0, 100)\n", "C = 10000.0\n", "cl_loss = np.vectorize(lambda p: cl(data,log(p),log(0.5),log(0.5),1/C))\n", "plt.plot(x, cl_loss(x))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Can be understood as maximum-a-posteriori inference of the parameters under [specific priors](http://www.stat.columbia.edu/~gelman/research/published/priors11.pdf) for weights\n", "\n", "For example, L2 regularisation assumes a Gaussian prior. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Optimising the Conditional Loglikelihood\n", "No closed form solution, use **iterative methods** such as \n", "\n", "* (Stochastic) Gradient Descent\n", "* L-BFGS (quasi-Newton)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "\"Easy\" because **concave** in weights $\\weights$" ] }, { "cell_type": "code", "execution_count": 245, "metadata": { "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 245, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nQzo6NwcuDgAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(-10, 10, 100)\n", "C = 1\n", "cl_loss = np.vectorize(lambda w: cl(data,w,log(0.5),log(0.5),1/C))\n", "plt.plot(x, cl_loss(x)) " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Can we characterise the optimum?" ] }, { "cell_type": "code", "execution_count": 246, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "def prob_log_reg(x, w_p_true, w_f_true, w_true):\n", " count_p = len([w for w in x if w==p])\n", " count_f = len([w for w in x if w==f])\n", " score_true = w_true + count_p * w_p_true + count_f * w_f_true\n", " log_z = log(exp(score_true) + exp(0))\n", " return exp(score_true - log_z)\n", "\n", "def indi(pred, value=1.0):\n", " return value if pred else 0.0\n", "\n", "def expectations(data, w_p_true, w_f_true, w_true): \n", " data_probs = [(x,\n", " indi(y),\n", " prob_log_reg(x,w_p_true,w_f_true,w_true),\n", " indi(p in x and y),\n", " indi(p in x, prob_log_reg(x,w_p_true,w_f_true,w_true)),\n", " indi(f in x and y),\n", " indi(f in x, prob_log_reg(x,w_p_true,w_f_true,w_true)),\n", " cl([(x,y)],w_p_true,w_f_true,w_true)) \n", " for x,y in data]\n", " last_row = [('[Avg]',\n", " sum(data[1] for data in data_probs)/6,\n", " sum(data[2] for data in data_probs)/6,\n", " sum(data[3] for data in data_probs)/6,\n", " sum(data[4] for data in data_probs)/6,\n", " sum(data[5] for data in data_probs)/6,\n", " sum(data[6] for data in data_probs)/6,\n", " sum(data[7] for data in data_probs)/6\n", " )]\n", " return pd.DataFrame(data_probs + last_row, columns = ['x','y','p(+)','#(Pulp) * p_data(+)','#(Pulp) * p(+)', \n", " '#(Fiction) * p_data(+)','#(Fiction) * p(+)','CL'])\n", " " ] }, { "cell_type": "code", "execution_count": 444, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
xyp(+)#(Pulp) * p_data(+)#(Pulp) * p(+)#(Fiction) * p_data(+)#(Fiction) * p(+)CL
0(Pulp, Fiction)1.00.7502601.00.7502601.00.750260-0.287335
1(Pulp, Fiction)1.00.7502601.00.7502601.00.750260-0.287335
2(Pulp, Fiction)1.00.7502601.00.7502601.00.750260-0.287335
3(Fiction,)0.00.0001360.00.0000000.00.000136-0.000136
4(Fiction,)0.00.0001360.00.0000000.00.000136-0.000136
5(Pulp, Fiction)0.00.7502600.00.7502600.00.750260-1.387335
6[Avg]0.50.5002190.50.5001730.50.500219-0.374936
\n", "
" ], "text/plain": [ " x y p(+) #(Pulp) * p_data(+) #(Pulp) * p(+) \\\n", "0 (Pulp, Fiction) 1.0 0.750260 1.0 0.750260 \n", "1 (Pulp, Fiction) 1.0 0.750260 1.0 0.750260 \n", "2 (Pulp, Fiction) 1.0 0.750260 1.0 0.750260 \n", "3 (Fiction,) 0.0 0.000136 0.0 0.000000 \n", "4 (Fiction,) 0.0 0.000136 0.0 0.000000 \n", "5 (Pulp, Fiction) 0.0 0.750260 0.0 0.750260 \n", "6 [Avg] 0.5 0.500219 0.5 0.500173 \n", "\n", " #(Fiction) * p_data(+) #(Fiction) * p(+) CL \n", "0 1.0 0.750260 -0.287335 \n", "1 1.0 0.750260 -0.287335 \n", "2 1.0 0.750260 -0.287335 \n", "3 0.0 0.000136 -0.000136 \n", "4 0.0 0.000136 -0.000136 \n", "5 0.0 0.750260 -1.387335 \n", "6 0.5 0.500219 -0.374936 " ] }, "execution_count": 444, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#expectations(data, w_p_true=10, w_f_true=-10, w_true=1.1) \n", "expectations(data, w_p_true=10, w_f_true=-10, w_true=1.1) " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Expectations Match: Why? \n", "\n", "Let's look at the $\\mathit{CL}$ gradient:\n", "\n", "\\begin{split}\n", " \\nabla_{\\weights_{y'}} CL(\\params) &= \\sum_{(\\x,y) \\in \\train} \\mathbf{f}(\\x) \\delta(y,y') - p_\\params(y'|\\x) \\mathbf{f}(\\x) \\\\\\\\ &= \\sum_{(\\x,y) \\in \\train} \\mathbf{f}(\\x) \\delta(y,y') - \\sum_{(\\x,y) \\in \\train} p_\\params(y'|\\x) \\mathbf{f}(\\x).\n", "\\end{split}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Solution $\\weights^*$ when this gradient is zero:\n", "\n", "* **empirical** expectations $\\sum_{(\\x,y) \\in \\train} \\mathbf{f}(\\x) \\delta(y,y')$ for class $y'$ \n", "\n", "match \n", "\n", "* **model** expectations $\\sum_{(\\x,y) \\in \\train} p_\\params(y'|\\x) \\mathbf{f}(\\x)$\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Maximum Entropy Models\n", "In fact, the Conditional Likelihood solution is the **unique distribution** that\n", "\n", "* **Matches empirical expectations** of features\n", "* Has **maximal entropy** (most ignorant)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### How to Find Optimum?\n", "\n", "In practice one of the following:\n", "* implement both optimisation and gradient calculation\n", "* use off-the-shelf gradient descent library, provide the gradients (Example: [factorie](http://factorie.cs.umass.edu/), scipy)\n", "* You have a back-propagation framework (such as Tensorflow) \n", "* You have a library (such as scikit-learn) for a specific model class \n", "\n", "Here: scikit-learn \n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Logistic Regression Toolkits\n", "A log-linear model trained by maximising the CL corresponds to training a **logistic regression** model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[logistic regression](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html) implementation of [scikit-learn](http://scikit-learn.org/stable/index.html)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Convert $\\x \\in \\Xs$ to a (sparse) feature vector $\\mathbf{f}(\\x)$:" ] }, { "cell_type": "code", "execution_count": 445, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "defaultdict(float, {'fiction': 2.0, 'pulp': 1.0})" ] }, "execution_count": 445, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def feats(x):\n", " result = defaultdict(float)\n", " for w in x:\n", " result[w] += 1.0\n", " return result\n", "\n", "feats(['pulp','fiction','fiction'])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Apply to training and test instances:" ] }, { "cell_type": "code", "execution_count": 267, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "<200x45329 sparse matrix of type ''\n", "\twith 52209 stored elements in Compressed Sparse Row format>" ] }, "execution_count": 267, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.feature_extraction import DictVectorizer\n", "vectorizer = DictVectorizer()\n", "\n", "train_X = vectorizer.fit_transform([feats(x) for x,_ in train_filtered])\n", "dev_X = vectorizer.transform([feats(x) for x,_ in dev_filtered])\n", "dev_X" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "scikit-learn prefers numbers as classes:\n", "\n", "* $\\text{positive}\\rightarrow 0$\n", "* $\\text{negative}\\rightarrow 1$" ] }, { "cell_type": "code", "execution_count": 250, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 1, 0, 0, 0, 1, 0, 0, 1, 1])" ] }, "execution_count": 250, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.preprocessing import LabelEncoder\n", "label_encoder = LabelEncoder()\n", "\n", "train_Y = label_encoder.fit_transform([y for _,y in train_filtered])\n", "dev_Y = label_encoder.transform([y for _,y in dev_filtered])\n", "\n", "dev_Y[:10] " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Train the logistic regression with l1 regularisation $C=1000$" ] }, { "cell_type": "code", "execution_count": 433, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LogisticRegression(C=1000, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l1', random_state=1, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)" ] }, "execution_count": 433, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.linear_model import LogisticRegression\n", "import numpy as np\n", "\n", "lr = LogisticRegression(C=1000, penalty=\"l1\", random_state=1)\n", "lr.fit(train_X, train_Y)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Weights learned:\n", "* single weight vector $\\weights=\\weights_\\text{positive} - \\weights_\\text{negative}$" ] }, { "cell_type": "code", "execution_count": 386, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAl8AAAFkCAYAAAAe6l7uAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmYJFWVsPH30A0IzSr71gKCbAoMNgiKArLIJq2gCMgq\ngiKIAo6CuKGgCI47yLSAg4qgoohKo4L7LuCCCzAqMio6ijNuM+oger8/zs0vo8uq7qrKyKiu6vf3\nPPlURmZW3IjMiBvnrhGlFCRJktSN5aZ6AyRJkpYlBl+SJEkdMviSJEnqkMGXJElShwy+JEmSOmTw\nJUmS1KFWgq+I2D8i7o6IH0XE2aO8HxHx1vr+HRGxUxvpSpIkTTcDB18RMQu4BDgA2BY4MiK2HfGx\nA4At6+Nk4B2DpitJkjQdtVHztQvwo1LKPaWUB4BrgfkjPjMfeHdJXwPWiIgNWkhbkiRpWmkj+NoI\n+Flj+ef1tYl+RpIkacabPdUbMFJEnEw2TTJnzpxHb7311kNN77v3/b7V9T1qo9WnLJ220+gqnZm0\nL12lM9P3pat0ZtJ3NpP2pat0ZtJ3Nl33pat0xjrO2nb77bf/ppSyzpI+10bwdR+wSWN54/raRD8D\nQCllAbAAYN68eeW2225rYRPHtunZN7a6vtsuPGjK0mk7ja7SmUn70lU6M31fukpnJn1nM2lfukpn\nJn1n03VfukpnrOOsbRHxH+P5XBvNjrcCW0bEZhGxAnAE8NERn/kocGwd9bgr8PtSyi9bSFuSJGla\nGbjmq5TyYEScBnwSmAVcWUr5fkQ8t75/GbAQOBD4EfAn4IRB05UkSZqOWunzVUpZSAZYzdcuazwv\nwKltpCVJkjSdOcO9JElShwy+JEmSOmTwJUmS1CGDL0mSpA4ZfEmSJHXI4EuSJKlDBl+SJEkdMviS\nJEnqkMGXJElShwy+JEmSOmTwJUmS1CGDL0mSpA4ZfEmSJHXI4EuSJKlDBl+SJEkdMviSJEnqkMGX\nJElShwy+JEmSOmTwJUmS1CGDL0mSpA4ZfEmSJHXI4EuSJKlDBl+SJEkdMviSJEnqkMGXJElShwy+\nJEmSOmTwJUmS1CGDL0mSpA4ZfEmSJHXI4EuSJKlDBl+SJEkdMviSJEnqkMGXJElShwy+JEmSOmTw\nJUmS1CGDL0mSpA7NHuSfI+KhwPuBTYF7gcNLKb8d5XP3An8E/gY8WEqZN0i6kiRJ09WgNV9nA58u\npWwJfLouj2WvUsqOBl6SJGlZNmjwNR+4qj6/CnjKgOuTJEma0QYNvtYrpfyyPv9PYL0xPleAWyLi\n9og4eXErjIiTI+K2iLjt/vvvH3DzJEmSli5L7PMVEbcA64/y1rnNhVJKiYgyxmp2L6XcFxHrAjdH\nxF2llC+M9sFSygJgAcC8efPGWp8kSdK0tMTgq5Syz1jvRcSvImKDUsovI2ID4NdjrOO++vfXEXE9\nsAswavAlSZI0kw3a7PhR4Lj6/DjghpEfiIg5EbFq7zmwH/C9AdOVJEmalgYNvi4E9o2IHwL71GUi\nYsOIWFg/sx7wpYj4DvAN4MZSyicGTFeSJGlaGmier1LKfwF7j/L6L4AD6/N7gB0GSUeSJGmmcIZ7\nSZKkDhl8SZIkdcjgS5IkqUMGX5IkSR0y+JIkSeqQwZckSVKHDL4kSZI6ZPAlSZLUIYMvSZKkDhl8\nSZIkdcjgS5IkqUMGX5IkSR0y+JIkSeqQwZckSVKHDL4kSZI6ZPAlSZLUIYMvSZKkDhl8SZIkdcjg\nS5IkqUMGX5IkSR0y+JIkSeqQwZckSVKHDL4kSZI6ZPAlSZLUIYMvSZKkDhl8SZIkdcjgS5IkqUMG\nX5IkSR0y+JIkSeqQwZckSVKHDL4kSZI6ZPAlSZLUIYMvSZKkDhl8SZIkdcjgS5IkqUMDBV8R8fSI\n+H5E/D0i5i3mc/tHxN0R8aOIOHuQNCVJkqazQWu+vgccCnxhrA9ExCzgEuAAYFvgyIjYdsB0JUmS\npqXZg/xzKeVOgIhY3Md2AX5USrmnfvZaYD7wg0HSliRJmo666PO1EfCzxvLP62uSJEnLnCXWfEXE\nLcD6o7x1binlhrY3KCJOBk4GmDt3bturlyRJmlJLDL5KKfsMmMZ9wCaN5Y3ra2OltwBYADBv3rwy\nYNqSJElLlS6aHW8FtoyIzSJiBeAI4KMdpCtJkrTUGXSqiadGxM+B3YAbI+KT9fUNI2IhQCnlQeA0\n4JPAncAHSinfH2yzJUmSpqdBRzteD1w/yuu/AA5sLC8EFg6SliRJ0kzgDPeSJEkdMviSJEnqkMGX\nJElShwy+JEmSOmTwJUmS1CGDL0mSpA4ZfEmSJHXI4EuSJKlDBl+SJEkdMviSJEnqkMGXJElShwy+\nJEmSOmTwJUmS1CGDL0mSpA4ZfEmSJHXI4EuSJKlDBl+SJEkdMviSJEnqkMGXJElShwy+JEmSOmTw\nJUmS1CGDL0mSpA4ZfEmSJHXI4EuSJKlDBl+SJEkdMviSJEnqkMGXJElShwy+JEmSOmTwJUmS1CGD\nL0mSpA4ZfEmSJHVo9lRvgCRJUtO9Fx401ZswVAZfkiRpXGZ6UNQVgy9Jkoaoi4DFoGh6sc+XJElS\nhwYKviLi6RHx/Yj4e0TMW8zn7o2I70bEtyPitkHSlCRJms4GbXb8HnAo8K/j+OxepZTfDJieJEmt\nsKlOU2Wg4KuUcidARLSzNZIkSTNcV32+CnBLRNweESd3lKYkSdJSZ4k1XxFxC7D+KG+dW0q5YZzp\n7F5KuS8i1gVujoi7SilfGCO9k4GTAebOnTvO1UuSJE0PSwy+Sin7DJpIKeW++vfXEXE9sAswavBV\nSlkALACYN29eGTRtSZKkpcnQmx0jYk5ErNp7DuxHdtSXJEla5gw61cRTI+LnwG7AjRHxyfr6hhGx\nsH5sPeBLEfEd4BvAjaWUTwySriRJ0nQ16GjH64HrR3n9F8CB9fk9wA6DpCNJkjRTOMO9JElShwy+\nJEmSOmTwJUmS1CGDL0mSpA4Nem9HSZJa530XNZNZ8yVJktQhgy9JkqQOGXxJkiR1yOBLkiSpQwZf\nkiRJHTL4kiRJ6pDBlyRJUocMviRJkjpk8CVJktQhgy9JkqQOeXshSdK4edsfaXDWfEmSJHXI4EuS\nJKlDBl+SJEkdMviSJEnqkMGXJElShwy+JEmSOmTwJUmS1CHn+ZKkGcD5t6Tpw5ovSZKkDhl8SZIk\ndcjgS5IkqUMGX5IkSR0y+JIkSeqQox0lacgciSipyZovSZKkDlnzJWmZZY2UpKlg8CVpqWRgJGmm\nMviSZoiughWDIkkajH2+JEmSOmTwJUmS1KGBmh0j4mLgycADwI+BE0opvxvlc/sDbwFmAZeXUi4c\nJF1purGpTpLUM2jN183AI0sp2wP/Dpwz8gMRMQu4BDgA2BY4MiK2HTBdSZKkaWmg4KuU8qlSyoN1\n8WvAxqN8bBfgR6WUe0opDwDXAvMHSVeSJGm6arPP17OAm0Z5fSPgZ43ln9fXRhURJ0fEbRFx2/33\n39/i5kmSJE29Jfb5iohbgPVHeevcUsoN9TPnAg8CVw+6QaWUBcACgHnz5pVB1ydJkrQ0WWLwVUrZ\nZ3HvR8TxwMHA3qWU0YKl+4BNGssb19ckSZKWOYOOdtwfeDGwRynlT2N87FZgy4jYjAy6jgCOGiRd\nqS2OQpQkdW3QPl9vB1YFbo6Ib0fEZQARsWFELASoHfJPAz4J3Al8oJTy/QHTlSRJmpYGqvkqpWwx\nxuu/AA5sLC8EFg6SliRJ0kzgvR21VLI5UJI0U3l7IUmSpA4ZfEmSJHXI4EuSJKlDBl+SJEkdMviS\nJEnqkMGXJElShwy+JEmSOmTwJUmS1CGDL0mSpA4ZfEmSJHXI2wtpwrz1jyRJk2fNlyRJUocMviRJ\nkjpk8CVJktQhgy9JkqQOGXxJkiR1yOBLkiSpQwZfkiRJHTL4kiRJ6pDBlyRJUocMviRJkjpk8CVJ\nktQhgy9JkqQOGXxJkiR1yOBLkiSpQwZfkiRJHTL4kiRJ6pDBlyRJUocMviRJkjpk8CVJktQhgy9J\nkqQOGXxJkiR1yOBLkiSpQwZfkiRJHZo9yD9HxMXAk4EHgB8DJ5RSfjfK5+4F/gj8DXiwlDJvkHQ1\nunsvPGiqN0GSJC3BoDVfNwOPLKVsD/w7cM5iPrtXKWVHAy9JkrQsGyj4KqV8qpTyYF38GrDx4Jsk\nSZI0c7XZ5+tZwE1jvFeAWyLi9og4ucU0JUmSppUl9vmKiFuA9Ud569xSyg31M+cCDwJXj7Ga3Usp\n90XEusDNEXFXKeULY6R3MnAywNy5c8exC5IkSdPHEoOvUso+i3s/Io4HDgb2LqWUMdZxX/3764i4\nHtgFGDX4KqUsABYAzJs3b9T1SZIkTVcDNTtGxP7Ai4FDSil/GuMzcyJi1d5zYD/ge4OkK0mSNF0N\n2ufr7cCqZFPityPiMoCI2DAiFtbPrAd8KSK+A3wDuLGU8okB05UkSZqWBprnq5SyxRiv/wI4sD6/\nB9hhkHQkSZJmCme4lyRJ6pDBlyRJUocMviRJkjpk8CVJktQhgy9JkqQOGXxJkiR1yOBLkiSpQwZf\nkiRJHTL4kiRJ6pDBlyRJUocMviRJkjpk8CVJktQhgy9JkqQOGXxJkiR1yOBLkiSpQwZfkiRJHTL4\nkiRJ6pDBlyRJUocMviRJkjpk8CVJktQhgy9JkqQOGXxJkiR1yOBLkiSpQwZfkiRJHTL4kiRJ6pDB\nlyRJUodmT/UGLCvuvfCgqd4ESZK0FLDmS5IkqUMGX5IkSR0y+JIkSeqQwZckSVKHDL4kSZI6tMyP\ndnQUoiRJ6pI1X5IkSR0y+JIkSeqQwZckSVKHBgq+IuI1EXFHRHw7Ij4VERuO8bn9I+LuiPhRRJw9\nSJqSJEnT2aA1XxeXUrYvpewIfBx4xcgPRMQs4BLgAGBb4MiI2HbAdCVJkqalgYKvUsofGotzgDLK\nx3YBflRKuaeU8gBwLTB/kHQlSZKmq4GnmoiIC4Bjgd8De43ykY2AnzWWfw48ZjHrOxk4GWDu3LmD\nbp4kSdJSZYk1XxFxS0R8b5THfIBSyrmllE2Aq4HTBt2gUsqCUsq8Usq8ddZZZ9DVSZIkLVWWWPNV\nStlnnOu6GlgIvHLE6/cBmzSWN66vSZIkLXMGHe24ZWNxPnDXKB+7FdgyIjaLiBWAI4CPDpKuJEnS\ndDVon68LI2Ir4O/AfwDPBahTTlxeSjmwlPJgRJwGfBKYBVxZSvn+gOlKkiRNSwMFX6WUw8Z4/RfA\ngY3lhWSTpCRJ0jItShltdoilQ0TcT9aoLQ3WBn4zQ9KZSfvSVTozaV+6Ssd9WbbTcV+W7XRm0r5M\nxMNKKUscLbhUB19Lk4i4rZQybyakM5P2pat0ZtK+dJWO+7Jsp+O+LNvpzKR9GQbv7ShJktQhgy9J\nkqQOGXyN34IZlM5M2peu0plJ+9JVOu7Lsp2O+7JspzOT9qV19vmSJEnqkDVfkiRJHTL4ktSpiNgo\nIh4+1dshSVPF4EtSZ2rQ9YWp3g71RURM9TZMlWV536fasv7dG3wNWfMAi4iVp3JbJmppPTkiYsuI\n2Lo+X6q2MSLWHNJ6NxzGersUEbOBjYDvA4+IiOcNOb1o/h12OmMtt7nuIax/VWCN+nzjttY7jnRH\nfmdTdS1aoaY/7u90jN9k6Ns/7OO5i7x0RBrLDzu9MdJdKq4bBl9DFBFR6oiGiDgdOCkiVhl2mvXv\nYyJis0HW09j250fEK9raxkG2KSJWBM4FDgIoExwxEhGbR8TjhnHyRcTJwOkRsWrLF8gzgLMjYomz\nJg+QxqaDHC/jWP+2wOuBe4G/AVcB/13fa/W3aKyv930NLZMfcZ4cHRGbTfSYHOe6HxER28HEj/nF\nrH95YB/gkIh4LfCvEbFCG+teQrrN/XpaRKxVSvn7sNMdZTseDlwREauO9zsdse17RcTjI2KjUsrf\nh3lBb6YLtF6IH7Ff+0TEQTVPaPXcaaRxInBJRJwWEU9sM42RRuzbZrUSZNYw0xwPg68havzgpwBH\nAh8ppfzPMEtJpZQSEQcA1wLrD7IegIg4E3gG8KF2tnDiehlASf8HXAo8LSK2Gef/9wLS3YF3Aq8E\ndmw5QDoZOBn4t1LKH2npgh8RzwIOA84vpdwfESsPIVg5C/hX4F0R8ba2Cwh1fW8Grgb+l7x43AJs\nFRGb1GO2lX3qZbQRcRBwVUS8DnhBRKzexvpHahZQgBcDKw66zt530Vj3C4FryIvVR6OFWt+IWK6U\n8leyFvIFwPHAG0opDwy4+UvU2K8XkAWpdRvbNfRaykYas4E/Ua+D48mXG9v+POC1wB7AnRExt62g\neAnpPocMGF8REUcPut5RjrWzgJcD+wPvAh4zaBqjpPls4Li6/hOBx7adRtOIfXsLOTXFKRHx0GGm\nuyQGX0PQO4kjYlZErATsB7wM+FNEnAS8ISKOHVLamwFvAJ5WSvlqRGwdEf803gOtmflFxEOAnYFD\ngP+JiGdGxHsiYouRnx2GWvKaXUr5a92H/SJi41LKN4DPA+vVzy22FFMvxnsDbyVP+NnAs2gpY6nB\nxf7AWcAfawZ5VQ3IBrU9GbSsERH/DLwbeEtbAXxEHAjsU0p5EvBtYHMyQGrT38nv/PnAFcBzyQvX\nSmRgtEFbAVhdz07A64BTgE2AxwEPDrruphHnyXbA0cC+pZS7as3BE2LyTdBrNNY9jyz87FVK2RP4\nd+BlEbH8ZC/2EbEGeVxBfi9vAr4EbBtZQzl0EbEjcBTwhFLKnRGxW0RsO6wAJrLJu3chXqs+vxuY\nA1xUl8esfYuI9UZs+8FkreHvgNuBnzfeH1az4AlkIf4C4AnAo1tY7aqN9W8N7FZK2YPcn78AX2mz\n9iuy5WJD4JnAFuQ9GS+sMfEwa/YPAA4spRxCBvs7AL8dZkXIkhh8DUHjJJ5bSvkz8HXgpcC/AQ8H\n/gBsPaTk/wB8EnhSRLyRjPIvAA4Yzz83SgnblVL+QvaJuJoMXDYjay3Oan52iM4G7q3B1TwyCLwu\nIh5LZppn1ovQ38ZaQT2plwOeClxVSnkv8BQyIDinXqgnrZbeDyS/8/eQNWub1OV9JluLFNlsPAv4\nNHA4cBnwfzWN5YC2anL+ALw3Il4FbAM8pQYwbQWmUUr5E3A5meH+bynlJ6WU7wE3khn8SyNiwwGC\nic0j4pDGS+sB7wA2BrYEziil/G8tiLSS5zXOk+WBXwI/JJucFwAvAS5kEiX6yH5Xl9WLFOTF/ZfU\ni2Qp5UVkjfYLB9j8zcn84Rrg+lLKe4DzqAWtiFgrIg6JiF0HSGMREbFa1H6Lkc19DwXuA54ZEW8n\nm6RviIhd2kqzkfb6wHMim5zWA66MiLMim1jPIAvFWyzm/zep/99r7rsP+AxwDpkn7V+bHY+PiNWH\nmC+uTtYU7UzmX/9ct2/Tia6o5otzgY9Gv6n5j8AvI+JKskbvkHote3IN2CdsZCBaWy7+TH5/R5dS\n9i2lPAg8D9h3iAX61YAPRcSp5Hf3vPo7jfm7D10pxUfLD/LiuFn9kfetrz0WWL8+fybwWWDlFtLq\nTZS7KfAIIMgS/yVkv6jZZEb9+gmsczPgOrKUtQJZytukvncA8ME2tn0x6W/YeH4V8DVgVl0+hsyo\n30P2GXpy83tYzDqfV7+T3m+wKnAXGZjOmeR2HkY2B81t/MZr1ufzgZuBlSax3ucD3wHWJpsv1+2t\np6b5TeChA37Hs+qxsgtZcv9o41h6Lpk5rtrib/pYMgD+KfC6xut71t9z6wHWvQ8ZRD6lLm8HfLf+\nvuvW1w4iA+M292n3+r0tT9bivAp4dH3vVcAFE1xf7/tfHXgiWWM+qx5jT+795mTh56QBt/0y4H+A\nsxqv7QhcWR+/Bh7R0vc0G9gbOI1sfv5gff0istbt8Y3l09v6fXrfKbAV8BGyefWfyBqj6+q2fARY\nSLYUjPb/qzd+k53IgtBKZE3hjxqfOxL4IjV/aWG71wP+qT5/JrABcCoZiH+q8bnnAqcDsyeZzqpk\n/v7Yuvy2uh8Pr8snkHnRQPtVj+Wj6++xA3kNOaO+dxRwxyB5wIi0lms8X7H+nUdeRz7feO+F5HVk\nxTaPuXFv51QkOtMfvR+fvFA2A4SHkM1d3wO2azG9g8kmo/eSNS4Pa7w3D/gWsN8E1rdW3fargBMa\nr59ZT8RHDfn7uwzYvrF8DXkxXb4ur0FWXV8BXDLK//cuYjuSF7G1yIDyippJrk+WeD5FBh6nTHD7\ngiy5fwf44ii/+3Pr7zHh74ksSd8OrFWXt6r7+pC67XcOeuyQF+/Lyaa5lWrmfQvZ7+elNSMcNI3e\nb7Ar2Wy2d13eGPgZ8OrGZ9ccIJ1eUP4c4CfA4XX5fPJCcgAZJH2bLMkPvE+N5U3qsfouGoUR+heT\nrSazbrK27ulkE+Mjgd2Aj5G1zxfVY2CbAbd9C7KP4kVkbcrK9fVtySBj7iDf1SjpP4zsKvBL4LBR\n3n8G2f9sixbTXIes2XooWat7FVlbtBLZN28tsv/n18jWiU1H/P/GwE30C9AvIPPY3cjg6D/IAO6S\nes62li/WY+srwPuBb5B51jpk68mbyYD/ODJf3HaC615uxPJZZG3UI8kC/DvJoPSS+ptMOC8YcTw/\np54PnwauBx5FBrGXk5UQXwAe2ebxVtM9CXgjcHJdfjPZ3eFE8jr87WGkO+7tm6qEZ+qDbIvfl37E\n/WSyaeXAuvx8Worw6/q2Aj5H1o4cRpb2e7UvO9RMe/4413UC/RLPmnXbrwKOqa+dP9ETfYL70jxh\nNwWubSxfTQats0f8z1ebmSb9AGhf4Bc1s/yPmnHtQXbW/0zNtB5R9/n5E9zOFerfHYG7gZc33lsT\nOHay3xOwF9mccQbZFHRXzQx3J2t4Bro41ePlC2TA/hby4rIi8DSyX+IbmUDQsIS09iVHN76m/nbn\nAKuQ0038kUYN2IDpHFyPj2uBB8gatg3IYPIzZOn2kJHH2ADpbdN4vlHN1N9PNoVvQ9aGTSpTB55N\nBikrkheJO8iavLlk8P0yYMsBtv15dR2vq8vH1+PgCLLQ8KKR59gAaY28yJ9Yz79zgd0brx9I5mGt\nXgjJvn7vJLsvrEkGlu8mA7DNGp/bsh73j2m8FvV/TgJuIGvLVqjLV5E1xmvX3+REar7ZwjY388BT\n6nnykrrc64P7TrJW/ZZBvjOyUNe7Th1PVhRsXY+9/ckAabMB92Flssazd026hCwEb12X1wZWa/t4\nI2vUvw8cSvZfO50MYI8ha3Yvaft4m/D2TmXiM+FBv4S/XH1cTEb0e9JvKnoF2QT52BbSW6GR5kr1\n4D2tPr4ObF7fe0L9u2FzO0fb9sbyRcBvG+tYm8yYvw48tcPvdFeypPx14N2N168C7qFeHMgmhB/W\n7ZzT+Nw25Oi93eryq8nmrl6T49Y149m/nqDjDpTIEtObyQvVI8jS4leBc8b6Xse53l7JdsN6DH2A\nDMQeRvbb26eF73UfsrbjWb3trPtyE/0mreVaSCfIC8VV9IOe7etv8sK6PJdaGzZgOuuQtQ771dcO\nIJvMnt44X3oXmIECL7IJcEOyk/Bze98XWVD4RP3NlmeSTZtkwe2LLNrs/iyymXmPFn6X55A1DQ8j\nC4TPJ5sETyBr1e5mODUQB5OB0Fyy783ryRqILesxuQe1eXgIae9JNm2ey6IB2Bk0mlXJ4Pm8kccJ\nWSh5HxnszKu/93PIAGKgmtQlbPejyK4Le9bf5ZTGe70C5oS6fpBB/FH1+en0a52Oq8f2ccCvgF0H\n2O7md/cistbu33vnfX39bcDHabGWc8Q27Eo2c/ZanLYAfsCiTezLD+u3G/d2TvUGTOfHiANtY/pB\n0Vlkh98n1uVeDdJANQo1o9yL7DD+JDKo26lm/N8ENqif252s2RmzNLaYbX9hPQF7AdipZPPURh19\npzuR1cEb1+VPA1c33r+WfmC5EVk9vwZZml+nfkdvJy/IT2/833lkv6Defq1FNtGOu6mALOF+iey/\n9DP6fRYeWU/uF01yn19E1lB+layZWLPxexwC3La433KcaRxXt/FrZEn+kb3jgAyKFtYMeODgq5Hm\n68m+T71CyBOAW4G1RzsOB0jn8nrc9JogX0AWdgYuMIw4T3oXvZ3JGsmTGu9dRDaPbzDRddffYA4Z\nDP2MEc3gZA3Il8hahEn9PmTQ8FYyeDy1/t4rjnh/oH6EY3xnx5Ed1C8l86l5ZGHpArLf1a9o+SI8\n8pgimwnfQj8A24bsc/RiMhhckQwGHjni/04n89WTyQLQjeSFfXY9xt5K9pka+BhubjuZH78beHF9\nbR7wI7LP1HPq97b8RNKlH2S/t56TN5N54PFkIPyi+rkzyeb7hwySF5B55IfqeflsMs85esT50so1\nZcTxdlI93r5IXju2qq9vTraEnNNGmq1s91RvwEx4kBfMr5Al33fW184g2+c/TDa5bNxCOrPIjP+z\n9QDrdVQ9nOzXdWrNUL5HjfrHsc7TySDk4/XEW7FmLL8A/gX4MTVg6eB73Lym1ywlzarb9+HF/N+6\nZCC2EVmKnkM2I7yW2mm1fu41NGqQgIeMc7uCvPBdVLfxmTXz6tXALU+WKjedxD4/BfhEff4esk9E\n76J8GPBlBuxLQjYpXVd/24eSBYPzaPTloMWah/p9Rd3+f6FfK7U1edGfdDND47tZs/HaW+o+9foE\n7lbT2aPFfTqWvAC/pP7WW5EB2Fn1tc8B6010P0Yeh/RrVZ464vOrT3B7Z41YXo6scfgQWYDpBcQv\nptaGtP0gm3xeQxaQZpEX/8/RH5SwHe33LesdH3uQ+dje9bjfiQyWzq7nwHbADo3/G9mdYTmyaWqn\nurx+Xd9CMg+eDawxjO+tprcvWSh6EVl7O4/+4IAdJrnOdepx/AHg/Y3X9yebujety5Pug1n/f2ey\nP+xb6vIqNS/4CAMOFFlCuvPJAt9GZA3nK8ma/UfU9x9GR9eycW3vVG/AdHywaBNXb36kLckg4Cbg\nuvreTvVgb6UPTV3nWmTtwY1kTUyvNH4gWWt1Hjkn0CIZ/Bjr2pOsIVuPrF4/F7iovvdksn28tW0f\nx74tT/Yl8LrMAAAgAElEQVTd+QmNi03NuD8P7Dji8yvSr+1Yh7xwXUM2caxG1oCdD+w84v9639mE\nSqw1870duLnx2hmMMVJqnOvcl+xc/XIyyOwFEJvVTGvg0VP1d/0bMK8ub0kGK29ggh23F5NGM5jo\n9YlbvR6Pl5PB/TcZpbP1JNI6oB4PryGb5WaRhZz3kU1Md9MfvdVGzdpJZOHmmPo73ViPsa3IgPw9\nTP6CeHo9Zq+gBov1OF4AHNHCtu9BTm/zkHqs/QXYpb53BNmnrJWaJ/qBT++c/AxZY9PrRzqHDMC+\nRa29HsaDbOb8FlmYXEhO+7Ea2Qd2Qf0NRwZbo3XLuAZ4V2N5V7IrxAcZZ8Ftgtv9ROCyxvJeZAH+\nZfW7W4EJjszmH/vdzSFru75G7ctbX7+e/mjhieaLo313Z5GVBDvU5ZXIgSjX1t+ijfPy/x9v9bv5\nJhn09QYr7UzW8l3e1jHe6u891Rsw3R41I7uUWhtBNqVcPOIzN1NHyLSU5iKlfTJI2b1mJGf13qMx\nynFx66nPVyJrXa5svPYYsnp40h16J7lfm9EI8sgS+udYTDNIPeH2IWv9DiJLtNvRrznoBWCXk6Wh\nSdW21AxxPhlYP5kMIo6o7z2jnuwTHkBRv/v9yODkI/V779WknU5e4AcaAk0NgurzC8jAsVcNvzVZ\nKlx7wDSi+bfx+hb1d9yarPnYnUZT5wDp7UH209uJrPG6Ezi7vrc/GSjtNeA+bceiNaavpl+gWY0s\nqFxO1o7MZkQt0wTSObUe55vVY+Be+v1Ues1aq0xwnbuT89lBNvn9nGxqupRs7juKLLy9j2yaaaWP\nF4vmLRs0nl8DvK+xvErdhoe1kW5d5zrUghnZrHptPebmk60Al5AFjTlkP9FtF7PtB9bzfHmyBuW9\nwGvre08j89xWaolHOWd2qr/LGxqvHUUOGDqFAQZC1GPhhcBBdfn4mtaFdb/uGvQ3IZtnz6M/OrTX\nnaI3ZcZDaGmqlxG/2ar178pkAfbSxnu7kSO4x10r3dVjyjdguj3IjsOvJjP+R5AdI+9h0RFQl1JH\nN7aY7kE1o34rdXQe/bmL3k1G/eMqfZPNpG8kL5BfppZ46nvvZ5xNli3t18E1g3wfjSYpstP5rYwS\ngFEDBrLvRm/4eu/iOLdmVAvIC/XqTHLahJpZfZmsTfkmGZyeSjYHfIbsrDqZ6SSOqNv8arIkfS95\ncTiULK23MdXDmfU4vLbxnb6ULPFuV5db6XRKBpFXkH2WehnvzTRGgQ64/l6At3G9UGxd07y1/v0C\n8KoWj8mTyGC7V4K+mNo0XJcfTgbLE+ojxYj5h8hBG2uRtQQfJoP5e+hfICfcrEXWAPyYbFp6bd2P\nrcjCyb/V5dXIZrTWO7nXc+9GssDTG5TwKeA9I3/PltJbvn6PD6fWRpFdA3as5+xmZL/Ju8ia8FnN\n7Rjxm5xA5kVfIPP3vcj8/rN1n+6ezPm+uGO6Pt+WWuAl87R/A95cl/erv+WEasBHrP8AsjWhN09Y\n73c5th4rH2RyBchmGvuQnesvIPPHXn+1M+r3uf1E1z/ObXh2PXfeRI5yXoG8Tr6t8ZnWaylb2fap\n3oDp8hhxoJ1IluguJUtTxwD/WQ/mM+tJ38rQ45re3jVT2KEe3L+mPzJn+/raAeNc1xFkM8lmdfk4\nMnh7BVnK+i51QtUOvtNdyZqjjckLzwM1k+vV8L2ZESNvyJqG64G31+Vb6v88l/6otvXJ2qMrmWT/\nBTKwvqE+PxX4TO84IC+ccyez7vp/z6DfFDO/fgefq/twOQM2BZK1f58nA8+f1Oe93/t8MnBcnsE6\n1Paabh9N1qCcSb8W71QWnWuujRGU+5EXz03J2pPr6DefXV33cdDvbWv6TX9b1PNkV7JW+VKyoBNk\nkPxZJllrWH/z/YDH12Ppc8A69b1P13Nwos1LQb+570xywMEPGu9vQwZg1zGkefrqcf15stbpY8AV\njfe+DFzecnq9oHxFMqi8iH4/2CcACxrPr+Afa7xmN54fVLc56rlxARlA9vqnrUMNxlvY7mbAdwY5\nEObr1DkLyWD542RB6fuDHNdk5cD+9Ed+Pwr4L/oB2JFMolaIRa+HDycLXo+ry/uStd7/XJdPYwjX\nlLrtd5DdZ04ir8knkTVsd1K70CytjynfgOn2IGtDvlJPzo+SF4RVyOrq15A1LgPPhdXIWHpTImxH\nlmC+QjYt3EkNwEb+z1ivkaWCBcDv6Zfq1yOrZt9LlvaGUkIZYx83Jqva96sZzVpkYPB1FnNhqyf7\nLcDL6vLOZGmrNx/OGnWdkzrhyaaJOWRAeiVZld1rEnwmE2wKaqz39LpvPyBLbL2S+lPIUW47T3K9\nK/SOuXqsXE0GoGeSHawX1Ey8F/BN+iLCok1KW5FTfTy78b3vT5bcx5ziZBJpbktePHevy6uRNU/7\nk6OqFjJgU3nNsF9KBln7kM3a59fzew+yn9w1Na2vTeQ8GXEOHkEW1C4ka+5OIIOG7esx8UYGaCIh\nawavqNv7XRbts/RIMv/acLLrX0Lax5AXwhPI2q5e/8XeFC+tXYDr77VNff6wmu5FZL78GLJT/e/I\nCXB/zojCKRlMfZQMtmaTnbP/QJ3rq75/fj13Jj31wijbvXzj+a5krdbqZH5zN4s2me3DBEcEjjjW\nTiFrUu8g88feOfkoMjg/sYX9eSE5Gvte+sHjcnXb30Vj8FQLaY1spj0VOL4+X5nsavI+MnhenUnM\nUdblY8o3YDo9yGHF19G/1c5O9YR/G/2pEdqsUt+PnKJi05r29fSb1y4n567aaqw0R5yIB9XPziGb\nFj/BiGYnJtl3ZQL70wsoV2PRDvUX05//6XgysPyHvigj9mczsjq7N1lkb3TQNTWzmewkl8eTTWbb\nkDUdn29kWkeTtVQTHiJNBljvJmvULiID3T3pB3VHMMmROPRn67+azMw3rBnsFxqf+SVZkzNIv5Go\n30kv0Fu5flffa3xmbfKi1sqoIrIJ6RZyGo69G8fQyfUYvo3GlCKTTKNXi7cCecG9lGy2Wo68KL+d\nfi3bHCbQb2XEMTuy1rM3E/6dZBP0jxmg8EP2UfoZcE1dXqWuu9mvc4XJrn8x6T6VLBDuTc6B1jzu\nTiEDzVbzlnp8n042N91J5o+bk7Wvb6jf9VrkYJbdxljHyjXfWKMuX0DmsdvX5fXIAlhbfby2rts8\niwwYP1mP4d4UQauQhaRrW0jraWTN3QZkTe2/kLVTvUB4Wwaf+mg/soZuBbJV5t+BU+t7s8j8rZW+\nViPOo21qms8iCxi9/HmFuj1DvQNLa8fwVG/A0vzgHyPt5chmgeaM5keTTYIXkdXfrQRf9UT9ALU2\npGYU76Q/x9e1jLO0T/bx+h79Oa5Wquu6YRiZ8RK2ZT7ZzHIL/Qk4TyIDgzPJ5px5i/n/J9Kfk2ZT\nMjjqBWCPIEcG7T/JbXscOVq1l/k+vmbGl5O1CZPqi0VeFH9KbYYhS+2vIYP2fWlhRnHygvMH4LTG\nd/Nh8qL4DPI2OJMuCY7I/PZo7MsKZJ+Rm8jAa9uaCU+6zxr9AGsHco65l5JNQuc2M/Oa3lojt2+A\ndJ9LXhB/QJagd6/n/MvJwHbUi/g4v7Oxaj0PIQOmp9JCZ2TyQvsr4Jl1eUWypu3SQdc9RnqzyNqP\nl9Tj+o1kgXE7+iMbhzKTeD3m/wKc33htKzJgfhuNGesXs46nkDVjq5OFi5dS56eq77c5792O9G91\ntDKZl32YLHitVz+zKlkjusFkjun6e6xUj4HbG68/o/42L6aFgKhu3zvIwLd3/9TH1OVJzXc4znTP\nIrs2bFSXX0HWRj+KnM7iK0xgrr2pfEz5BiytjxEZ52PoV0c/niwZn1iXDyUvzG2VjpYjS9dXkrUs\nBzfee37N2O5gMUP2WfQCtW09IHu1db1S/hxqTUmH3+nWZNC1ez1Rfk8GknPIfgEfYQmzRteT7AH6\nNWWbkgHxW8f6/cb5nfcmTryNLD33+o9tQ3a8PYJJzOPVSONQcu60I+vy7JoZvoF2brC+BVkQ+Cb9\nC29v1OQ3Gbw/VC8g2o3svPxzah8e8qL7CeB+svl690HSqut8MhlYf52szXw52ST9EobQbEbWYt9e\nj4VNyFshXUI2Qc8iL1qTmvaDJdd6Hk6L8w+Rg1juYNEArLU+qKOkdxBZaFqVrC06mwzG30/7twxq\n5svb1ePidWTf1Tn19R3Jws24anbI5usf0g/AzifzxlYK0yzax2sNMjC8mAzADqxpHUW/BmyiUz00\n19+b5mUdsr/nvzTeO7Z+VxPqq8o/Dkzo9S3chiyYXtjY9sfV82igucLG2I4jycmGe7/zenUbnlfz\nnxvpsNvMwPsz1RuwtD/IduU7yNL8y8nS+GFkM8jH6kk78E2y6V/ceiXitcnaivNYdCTl6vRH+43W\nx2sTsjTQu1HuutTmJrItvHfibEAGPQPPI7WYfdoAOLQ+35ysybuq8f5TyM6fvfte9i5Go+3X2tSm\nSvqdRv+5se4vkoHmZEqLzWD1GLKZ6ShausddY90H1WOpGYCt03IaT65p7EFe1N9OS8P6yULI5+jP\n3fNlFq0BuxRYOPKYnszvUTPZ3v3fTiPn6zmbLEi8nAFrbEduG9lv8PbGMbYJGVAsZLDbrQy91nOM\ndA8ga9QOH9L696YxwpQMKi9l0YmHh7VvTyRr1fapy8eRgfJh9G+hNaF+jWQQdCf9JshWOtePSOMQ\nsqnu+WRtYe/G9vuT15Knk4H+ZM+b3kTAL6154erkPGsXNz4z4dpVGn1c63a/nTpoi6yMeH3dl17X\nm1ZGF45yjp5EFlYPqvnBLWQz4xpkoDzQ1DxdP6Z8A5bmRz2RP1afb0gGDy8hOzOvQpawWqvirAfV\nR+oJ9EwycLqCLIUvsQTZuHCsTpbkD68H5a3A6Y3PHUtOWTHUJseaQW9Lf6qDc8jSyV70g8ynA38m\nL7ijZtbkBezdZNNMb13b1v/rzXM2qROeDK4/RZZEj6uvPYusnTie9vuq9C6KA/VTGkca3yVrvNqc\n4Hc/crLWc3rfORmgNPsYfQR474DprEkGWb3RU8uTJezraua/xOakJax/ZD+s5cmCyOvJpsde4eZl\nZAFooACZIdd6LibdfWmv793IC+ET629/bc1PDiAv+kNp8qFfOH002bn7zWSXgN6gm2PJ4O+XTPKe\ni2Rh8PaR+9rScXYE2RR4Pjklw3lkN4vz6fc9G6Rz/TFk8HhoPa7eSeazDwX+B3j1JPfhEPoFh6PJ\n2ueVyZrv19TXdyObIF9FS7coG7FvvT5dO5PXrS+SgfZOZF+2CU+TsTQ8pnwDltYHGWC9jazZ6jXZ\nbUFWpV9My3PkkM0Qt5Ijkt5Eba8n+zC8j+zHMObwc3Lk4E3051l6AVmd/RjyAnNvPUF6c1YNrXqW\nDJaeWp+vQo5+693M+dyaSe5Jv2nvH77LRma7af17Jtmh/iD6U1G8BfgrWUsx4ROeDK6+TDZdfoBs\n5u3NT3MqWZqf9K1wFpNuaxfFxaSxLi3XqtX1zidHZTWbtL5Kv5/cKrTQLEj27Xg5/YlZn1SP7wW0\nNz/ZmeQF/Epy+pgTyQvXwpr2Yu+POsG0hl7rOcRjaeQkpPvRb956Rs2bfkxe5F88xO14Qs2/evfM\n3Z7sM3Vu41h8+MhtnmAakxrJvITvbORAi8PrsfCKmh++YsD1P5qc0PSAuty7jVBvOp71mcRoYHLA\nwi1kd5G5ZMA7r+aNN7HovUEfxRAmMiWvYx8kg66jav7Sq109lOzL3MnUSK3v21RvwNLyGHEw94ZI\nb0GWfC+iH4BtRfa7Gmhm8FHSP5QcNn9QvZhtWl9fvR74Y47gINvk1ySrZW+oJ+MKdfkqYJd6Ih1N\nto8PbQZ7ss/MAWTzVO8CfRRZEjuqLp9NDkPei0Z/gpEZJtl35Wb6ExC+gKwJPI4spV7OJIPImokc\nVr+308g+A3uQ0wj0OvRP6H56y8qDvADfDpww2u/WUhobk81zN5Gj0O6ux/FHmeStfEasfz/g8/X5\nl+hParklWfP5MlouUdNBrWfL2zvWJKRfJJv5dmm8dzBZOBq4C8Zitue5wB/pz1E1i7zo38RSNKcT\njGugxeH1WDiHiU/W21z/sXXd7yJr8HsDUDYi+8JOOjAh+/B9guxz+eF6Hn6qPu9dI1/BkG5WXfPn\nz5HXstuo/Xrrds2v+z20423ox8lUb8DS9iAnvXsHWcP1CDIgeh3ZJLFp/czAJe+RF6yasf2YnD7h\nofW1J5ER/5hNaiNOxKeRtWQ3k8HFcvRvtzOpqvgB9u8YstR0YGPbrqR/a57/X6sxxv/PI6vRe7dx\n6pV2DiFLYN8G5o/1fS5h204hazy2IEuJH6Hf1PRhsh/BhDLEZe3RyPw2ZEhTlJBTkuxPNvU/iqzF\nvYPJTQq5Lv2Z/feo6zyunh+fpH9R7E1G23pAWdc79FrPFrd1cZOQnk/WEj6h8ZlWaiQb6+vVfm9O\nvw/rYWRrRO8+pbPIGrCdpvr7GmX7lzTQ4tBBjgWyMPpNckTpU2qe+iayf+whZLPwQH3XyIEm/wP8\nc80r7yIL8RuQTanfZgj3h63Lx5FB6on1HO3Vts4lK0E2nurfeKD9neoNWJoe9ce+hay+vhe4sL6+\nM9nJ8NVkc0FbfQIeTwZdvZqdK8hS5WyyduEHjPM2RWQJ65tkZ9MFZN+qXemP4nsrLd1XaxzbcjA5\nXPtmMpg8vL5+KFmKOnox/9urBTuGrLXbhGyCuoWsbek1VfYC1ImODDqEvIA/rC5vQPZjeCzZDHkd\nLddqztQHHTabkbWkX2PyN7Dekv5caNeT/Qe/Dny28ZkzabFZczo/GP8kpJfSwujWxWzHQWT/v9fR\nHzj0PHI+rMdO9fe0mO0e6kCLej58kawVOpXsI7wNGeTdXPPLHVvYj4eRfZ/vIlswHk9WTFxL1ji2\ndW/QZg3rC8gC8t71mvbZxnsvqvs4lMEcnR4jU70BU7rz/xhpn1EDltNotGnXDGgbWujnRb80t2s9\noD9C9ok6tp6gV9APXMZ9f0iytq43N8369QBeSAaOs5nEfeImuX/r0b/x8SZkSfXj9G8YfDijNBU2\nvpdV6t9VyZLbN+qJuEn9nvZtfn4S2/dc4KX1ea/q/CwyKPxyGxmWj6EcVxsw+I1/e3Oh9ZqtriAL\nVIeTgffQ5qSajg86noR0lPS3rr/JRmSg9zn6g4pOI2dvX2q7BjDEgRZk7Vavtv711LnOyNaSZw+6\n/lHSezQ5cvJIsrZx+WF892SwfRPZHWQ9sjn1HDIQ602lMyPO0SnfgCnb8UWb655VD6ozyVqQDzUu\nzC8HXtly2ruSVfi9ZpBjyJqpoxufGdeBTX8kyHtY9FYiu5Il+w/S0Y1FyergR5DzM/VqsNYiq8K/\nQ512YjH/f0A98V5Jv4m319ywPVkTONBAgZrGJ2iMAiRr6o4HVprq49LH8B5kM/Mx9YJ+MDkS7HCy\nhudNTJOZsTv+zrqchHS5Ectb1Px3X7LWs9dhfdf6d6nvaE0308vMp97UniysbjGkfdmBvIPB81pc\n524sOjH0B4EvN95/LDnC+cP1GjdjztEp34CpfpBt8J+tGcvW9UR5Vg0kjqpBw8D3ahyR5lPJe2v1\nSuAPIauNLyer1JcbT6ZWA6x3kKWSjckJLl9b33sa2YQylFJpYxt6NVa7kB2XVyJrkRbQD8BOqNv5\nD/cupN//YReyWejIepK9gazink1O3HcPtfZswO1djaz+f129AB9NjjIdSoblY+l7kE3P3yVL0/uS\nw/4ndCPrZenBkCchrWmsSL9WZS8yyFuN7FP0U/odyfchu1S0PrJuiN/fUAdakH0h/1y/q6HWCpGj\n8VubsLdeZzegX9jejyyAv6jxmeXqo5NKhM6Oi6negM53eNEarz3JPj7vbbz2RLLT+tX1JB/4YG4E\nKBtS+12RzXE/oN8ctyLZ9DhqoMeIkUf1tfXIaS8uqtu9PVk1fyM5OqyTUkK9iL2/sS8PJ0c+fZ6s\nabiHEbdmIUu1ve9iE7L/Qm/OnvXJJo7X1f1aD3j0yN9vgO3dgGx+XEgGitNmVmQf7TxqQHEH2Ywx\nLecJ6vj76mIS0ucD95EjKnu1W0fUc/RFZC3Sd2gMtJkuD4Y40IKswf0IQxzFPoRtXpf+NDJPIWvU\nXl2XD6jXj9Zuyr00PnpBwTIhIqLUHY6IY8mS1bpk0PJm4CullAciYnVySPMqpZQ/tJT2U8harf+k\nPzT48WQJ74JSyoea2zfK/88upTxYnx8A/KqU8s2IWIesll2RbHb8fn3t76WU/2pj25ckIg4jq4vP\nKKW8JSJmkyWVl5Alsh+UUhaO+J/HAYWcVmM5si/Ek4BnlFK+U/fhHDLoPK+U8rshbPcKAKWUB9pe\nt5Z+9RijlHL/VG/LdFDzsJeTIw1bu3D08r2IWJnsKL42ObDizxGxLlmYewHZf+rTpZQbF5dXLosi\nYsVSyv9N9XaMV0RsSU5X8ityguM3ki0Sny2lvDoinkRWRnyplPKOqdvSIZrq6G8qHmQ78yfp10hd\nQI5CeQJDGOlEDpP/OlltfwmZwfRqfZ5BvTkpYzQ1kpnRvfRH+L2arLVpdnz9NNmPbOgjgBrf23r0\n+2QdBPwftUP8WP8z4rVVyVqx3qSp57Joh951aXGGdh8+fAz2oKVJSBvr6+Ula1MHBpEDYL5DrSli\nRB+p0fISH9PvQX8AzPPr8nbkoKeX1+V9GeLt76b6sdwEY7VpLdL2ZH+k/yb7J0H2+fgt2Tdp5zbT\nq0/XJTv17kmOAjy5lPLHiNi6lPJ+YK9Syq9LKX8fbT2llN+QVfJfqbVyrySncHhlROxYSvkV2dT4\nW/IelENVSikR8WSyb9b1EfEKchK8+cC1EbH/aP8zymt/JEeY9vbrtWSQ+oaI2KF+J3cPc18kjV8p\n5X9aXl+p+cX7yT6vLyCnr3gvcF1EHAfcHhGPbP5Pm9ugKXMZOU3GCRHxzFLK98kmyBMj4pRSys2l\nlP+c2k0cntlTvQHD1qyern/viIiLyMkVHx0RXy/Z1HgBOZHcPS0mvxU5ncTd5GR1R5L9on5Sg5dT\nIuLo8RxgpZSPRcTfyCBnHjm8+CXA+yLi42RH1KfXQG2oIuLhZD+zI6ht92QAeyoZJH44IjYBfjtW\nQNlTSrkhIv7Kovu1PMvAsSkt6yJiO3IOxRPImvCdgQWllGMi4o/kCLvnlFK+N4WbqSEopfwI+FFE\n/A64ICJ+T3b3+QrZOjSjzfgLXC/wiohnkhMt/posVT1IzlFzXkR8o2R7+fmDptfov7Al8I2IeFcp\n5QUR8Tlyvpp9I+KnZGfyc0op/z2BfVlYK9NuI/tdXBgRPyHnIDuqlPLjQbd/nNYE7i2lfAeg7s8u\nwN6llPdFxOfKBPqb1f36Oxmobl1Kec1QtlrSlBvRX2tF4OZSyhcjYjlyEMT5EfGEUsplEfGQUspf\n7OM1c9WKhb+SBfoHgGNKKT+c4s0aumWiw31EnEqOuruGvFXFLmQfpQPJyfrOKKV8tcX0DiGnjriX\n7DR4dSnlRRHx9JrmX4CPl0l2HI2IA8kOio8rpfxXRCy3pBqmQTQCylmllL9FxIpkn7MPlVIurZ+5\nGLivlPLmxucmtG8RcRDwv6WUzw1lRyQtFeqAm83IWu6LgWNLHZQTEe8AbiulXDGFm6iO1cEVpSwj\nA2BmZPDVC0YaQcNlwJWllG/U919KduZ8dg3MPlZK+WlLac8h+1+9qTaprUnOI3VdKeXs+pmVSyl/\nGqQ0FxHzyaa+ncgDdig/ZOM73I8MWn9D9s04kByduBzwAXJo8PGllK+0leag65G09GjkJY8l7y5w\nOznabS+yxuNd5N0xLiHnQGytQCwtbWZkh/tGLdCWEbE8OQHpno2PfJy676WUS9oKvKo/AT8hZ4Wm\nlPJbsh/UaRHx2vran+rfSQcYpZQbyHuq/X2YgUrNLA8gZwD/MhnwXUDW6l1K3ltsPnBWG4FXL802\n1iNp6VHzkl3I/OOEUsrRZKD1bnIi1aeTfb9eaeClmW5GBV8R8diIOKI+fz7ZNPZactjy6RHxrPrR\nRwGbRsQajRGJk00z6t+taifzOeQtHq6u89ZAdiL8V2DviHj8IOk1tT3yqKmxXyuQgxN6s0//kvz+\nXgjcX0o5ETizttsP9F1KmvFWJ6f0eWJd/hk5yOmnwH6llBNLKR8xL9FMN9M63K8JvC4itiZru55E\n3q5gNXL0xPkR8U9kNfczSgsTdzZqhl5PzpZ/JDn6bzvgixHxafI2RYcAfyNvK7RUazQPHEoGjkeR\ngwVeTd7KaGUyCPvPiDi/jZo8STNfKeXmmq/8S0T8pJRyTR3ltgewdkTcX6op3lRpqGZU8FU7sD9A\ndkb/WinlxxFxJXkrH8jZ5RcAr5rIaLyRasfAfYAbyMDuPPJ+jY8hg6uVSymnRcQTyUDlcnJC0v3I\nuU2Wao3mgeeRs+//qY5EeoAMcNcib0B+fS/wkqTxqH1h/062DhxG5pmvKaX8eoo3TerMjGp2hCxZ\nAS8D5kfEEXUKiWuB+8mT/L8HDLyCnHl3bzKoewhwJVkj9ELyvmN/rB3UbyulfJz+iJ7jSiltziPW\nmmY1fx0k8CKAUspn68u/Jm8FdDXZnHtJKeXWrrdT0vRXSvkYeVP7LYBbSykfjWqKN03qxIwc7Qj/\nf9qC1wGvLaVcW2tu5pScVb2N9Z9FZhx3AaeTAdbmpZQHI2JXsq/ZSbX2bXVg9iBB3zBFxEOA/Wtf\ni0eRgeRvyIDxklLK2+vnNiBvgk1v5KgkTVYtpF4JnF5K+fBUb4/UlRnV7NhUmyD/DiyIiAdLKdeR\n/ZcGFnnTz0PImsM1gQ8BxwMvjIi/ACeSTZs/rtvy+zbSHaIHga0i4gdkv7T5pZR76sR3z6nf32Wl\nlF+Sfb0kaWCllE9FxAlAVxNES0uFGVvz1RMR+wI/bqu5r/b3+jB5f8YfRMRp5E1hg7zVzg+B79aO\npZjNz14AAAIkSURBVNNmvqrax+ta4L9KKTvX11YDdiXvv3hTKeWtU7iJkiTNCDOuz9dIJW/O2WY/\nq7+SNYZr1+V/BTYEdif7Lryx9jubNqP/ImIHcoqMg4EvRcSnImK1UsofyGHgbwS+OJXbKEnSTDHj\ng6+21UlTPwDsGRGPLKX8lWx27N0QdNqoE9BCDhTYp5TyA+DlZO3d9bXW8ELgh6WUb03RZkqSNKMY\nfE3OB8iZ3d8YERcAbwXeXkq5a2o3a8I2qn8/DPwWcuLWUsqpwLeAVwH/Vkq5d0q2TpKkGWjG9/ka\nlohYFdiNnFD19lLK56d4kyYkIlYhbxd0K7A9OSntscCfyf35S0SsXkr5/XTquyZJ0tLO4GsZ0pi5\nfhfgoWTftbvJqSXeSw753oAc/Xh6KeVnU7axkiTNUDN2qgn9oxp4zQdeAdwE7AxcUedBewxwTSnl\nGxGxuYGXJEnDYZ+vZUhErAEcQd7b8lvkbYK+VCdZnQvsVD/6k6nZQkmSZj6bHZchETGHnDbiz8A8\n4Ng6mepO5HQZ/11KmVYjNiVJmm6s+VqGlFL+F/gueYPv82rgtQc5evMnBl6SJA2fNV/LmIhYD3g+\n8BjgO+TEqmeVUm6c0g2TJGkZYfC1DKrNj/PI+1LeV0q5dYo3SZKkZYbBlyRJUofs8yVJktQhgy9J\nkqQOGXxJkiR1yOBLkiSpQwZfkiRJHTL4kiRJ6pDBlyRJUocMviRJkjr0/wDyz2dswvRd5wAAAABJ\nRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "weights = vectorizer.inverse_transform(lr.coef_)[0]\n", "sorted_weights = sorted(weights.items(), key=lambda t: t[1])\n", "util.plot_bar_graph([w for _,w in sorted_weights[:20]],\n", " [f for f,_ in sorted_weights[:20]],rotation=45)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "More obvious **discriminative** features for the negative class \n", "\n", "* Conditional log-likelihood down-weighs a feature $f_i$ for $y=-$ \n", " * if $f_i$ is active in $\\x$\n", " * but gold label is $y=+$\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Positive weights? " ] }, { "cell_type": "code", "execution_count": 384, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n810RERGRzqDJoMvMGoDJwChgMHCImQ2umO0d4CTg0hZ8V0RERKTDq6amaxgwz91fdfePgNuAMdkZ\n3P1Nd58NfNzc74qIiIh0BtUEXX2B1zPv56dp1ajluyIiIiIdRpvpSG9m481sjpnNWbhwYWtnR0RE\nRCRX1QRdC4B+mfdrp2nVqPq77j7V3Ye6+9A+ffpUuXgRERGR9qGaoGs2MMjMBppZN2AcMKPK5dfy\nXREREZEOo2tTM7j7IjObCMwCGoBp7v68mU1In08xszWAOcAKwKdmNgkY7O7vNfbdeq2MiIiISFvV\nZNAF4O4zgZkV06ZkXv+daDqs6rsiIiIinU2b6UgvIiIi0pEp6BIREREpgIIuERERkQIo6BIREREp\ngIIuERERkQIo6BIREREpgIIuERERkQIo6BIREREpgIIuERERkQIo6BIREREpgIIuERERkQIo6BIR\nEREpgIIuERERkQIo6BIREREpgIIuERERkQIo6BIREREpgIIuERERkQIo6BIREREpgIIuERERkQIo\n6BIREREpgIIuERERkQIo6BIREREpgIIuERERkQIo6BIREREpQFVBl5mNNLOXzGyemZ3ZyOdmZlem\nz581sy0zn71mZnPN7Gkzm5Nn5kVERETai65NzWBmDcBkYAQwH5htZjPc/YXMbKOAQelvG+Ca9L9k\nF3d/K7dci4iIiLQz1dR0DQPmufur7v4RcBswpmKeMcANHp4AVjKzNXPOq4iIiEi7VU3Q1Rd4PfN+\nfppW7TwOPGBmT5rZ+CUlYmbjzWyOmc1ZuHBhFdkSERERaT+K6Eg/3N03J5ogTzCzHRubyd2nuvtQ\ndx/ap0+fArIlIiIiUpxqgq4FQL/M+7XTtKrmcffS/zeB6URzpYiIiEinUk3QNRsYZGYDzawbMA6Y\nUTHPDOCIdBfjtsA/3f0NM+tpZr0AzKwnsDvwXI75FxEREWkXmrx70d0XmdlEYBbQAExz9+fNbEL6\nfAowE9gTmAf8B/hS+vrqwHQzK6V1i7vfm/taiIiIiLRxTQZdAO4+kwisstOmZF47cEIj33sVGFJj\nHkVERETaPY1ILyIiIlIABV0iIiIiBVDQJSIiIlIABV0iIiIiBVDQJSIiIlIABV0iIiIiBVDQJSIi\nIlIABV0iIiIiBVDQJSIiIlIABV0iIiIiBVDQJSIiIlIABV0iIiIiBVDQJSIiIlIABV0iIiIiBVDQ\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "util.plot_bar_graph([w for _,w in sorted_weights[-20:]],\n", " [f for f,_ in sorted_weights[-20:]],rotation=45)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Discriminative training helps! \n", "\n", "(Compare 0.82 with unigram model before)" ] }, { "cell_type": "code", "execution_count": 455, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.805" ] }, "execution_count": 455, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lr = LogisticRegression(C=1000, penalty=\"l2\",random_state=1, tol=0.00001)\n", "lr.fit(train_X, train_Y)\n", "lr_guess = label_encoder.inverse_transform(lr.predict(dev_X))\n", "accuracy(dev_filtered, lr_guess)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Summary\n", "\n", "* NB Bayes effective text classifier\n", "* Makes independence assumptions that can be violated\n", "* Compensate with more complex models or\n", "* Training **discriminatively**\n", "* Increase relative/conditional probability of classes, not joint probability" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Background Material\n", "* [Tackling the Poor Assumptions of Naive Bayes Text Classifiers](https://people.csail.mit.edu/jrennie/papers/icml03-nb.pdf), Rennie et al, ICML 2003 \n", "* [Simple Sentiment Classification](http://nlp.stanford.edu/pubs/sidaw12_simple_sentiment.pdf), Sida Wang and Christopher D. Manning, ACL 2012 " ] } ], "metadata": { "celltoolbar": "Slideshow", "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.6.2" } }, "nbformat": 4, "nbformat_minor": 1 }