{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%html\n", "\n", "
\n", "" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "%%capture\n", "%load_ext autoreload\n", "%autoreload 2\n", "%matplotlib inline\n", "import sys\n", "sys.path.append(\"..\")\n", "import statnlpbook.util as util\n", "import statnlpbook.sequence as seq\n", "from statnlpbook.gmb import load_gmb_dataset\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import warnings\n", "warnings.filterwarnings('ignore')\n", "matplotlib.rcParams['figure.figsize'] = (8.0, 5.0)\n", "from collections import defaultdict, Counter\n", "from random import random\n", "\n", "from IPython.display import Image" ] }, { "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{\\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{\\x}{\\mathbf{x}}\n", "\\newcommand{\\prob}{p}\n", "\\newcommand{\\bar}{\\,|\\,}\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": 26, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "skip" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The tikzmagic extension is already loaded. To reload it, use:\n", " %reload_ext tikzmagic\n" ] } ], "source": [ "%load_ext tikzmagic" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Sequence Labelling" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "+ POS tagging\n", "+ Log-linear models\n", "+ IOB encoding\n", "+ Named entity recognition\n", "+ Evaluating sequence labelers\n", "+ Maximum-entropy Markov models" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Sequence Labelling\n", "\n", "+ Assigning exactly one label to each element in a sequence\n", "\n", "+ In context of RNNs or other sequence models, example of **one-to-one** paradigm\n", "\n", "
\n", "\n", "\n", "(In the example: Universal Semantic Tags from [Abzianidze and Bos (2017)](https://www.aclweb.org/anthology/W17-6901.pdf))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Parts of speech (POS)\n", "\n", "- Group words with **similar grammatical properties**\n", "- [Penn Treebank](https://www.ling.upenn.edu/courses/Fall_2003/ling001/penn_treebank_pos.html) is the most commonly used POS tag set for English\n", " - Has 36 POS tags and 12 other tags (for punctuation and currency symbols)\n", " - For example, distinguishes four types of nouns and six types of verbs\n", "\n", "| | | |\n", "|-|-|-|\n", "| **NN** | noun, singular or mass | *cat, rain* |\n", "| **NNS** | noun, plural | *cats, tables* |\n", "| **NNP** | proper noun, singular | *John, IBM* |\n", "| **NNPS** | proper noun, plural | *Muslims, Philippines* |\n", "\n", "\n", "- Granularity of tags can differ" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Task: POS tagging\n", "\n", "Assign each word in a sentence its **part-of-speech (POS) tag**.\n", "\n", "| 1 | 2 | 3 | 4 | 5 | 6 | 7 |\n", "|-|-|-|-|-|-|-|\n", "| I | predict | that | it | will | rain | tonight |\n", "| PRP | VBP | IN | PRP | MD | VB | NN |" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "## Example\n", "\n", "Let's look at the [GMB (Groningen Meaning Bank) dataset](https://www.kaggle.com/shoumikgoswami/annotated-gmb-corpus/), annotated with the Penn Treebank tag set\n" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "fragment" } }, "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", "
012345678910111213
0TheymarchedfromtheHousesofParliamenttoarallyinHydePark.
1PRPVBDINDTNNSINNNTODTNNINNNPNNP.
\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 7 8 9 10 11 \\\n", "0 They marched from the Houses of Parliament to a rally in Hyde \n", "1 PRP VBD IN DT NNS IN NN TO DT NN IN NNP \n", "\n", " 12 13 \n", "0 Park . \n", "1 NNP . " ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tokens, pos, ents = load_gmb_dataset('../data/gmb/GMB_dataset_utf8.txt')\n", "\n", "pd.DataFrame([tokens[2], pos[2]])" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "examples = {}\n", "counts = Counter(tag for sent in pos for tag in sent)\n", "words = defaultdict(set)\n", "for x_s, y_s in zip(tokens, pos):\n", " for i, (x, y) in enumerate(zip(x_s, y_s)):\n", " if (y not in examples) or (random() > 0.97):\n", " examples[y] = [x_s[j] + \"/\" + y_s[j] if i == j else x_s[j] for j in range(max(i-2,0),min(i+3,len(x_s)))]\n", " words[y].add(x)\n", "sorted_tags = sorted(counts.items(),key=lambda x:-x[1])\n", "sorted_tags_with_examples = [(t,c,len(words[t]),\" \".join(examples[t])) for t,c in sorted_tags]\n", "\n", "sorted_tags_table = pd.DataFrame(sorted_tags_with_examples, columns=['Tag','Count','Unique Tokens','Example'])" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "pycharm": { "name": "#%%\n" }, "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", " \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", "
TagCountUnique TokensExample
0NN93072087's transitional government-in-exile/NN met Tue...
1NNP81892069restrictions on U.N./NNP peacekeepers in
2IN775994way out of/IN the stalemate
3DT631040The/DT chief investigating
4JJ48751214It is unclear/JJ how many
5NNS48031102Both men/NNS have yet
6.29923peace process ./.
7VBD2429470Israel completed/VBD its handover
8VBN20605882001 have put/VBN $ 880
9,19531said Hezbollah ,/, along with
\n", "
" ], "text/plain": [ " Tag Count Unique Tokens \\\n", "0 NN 9307 2087 \n", "1 NNP 8189 2069 \n", "2 IN 7759 94 \n", "3 DT 6310 40 \n", "4 JJ 4875 1214 \n", "5 NNS 4803 1102 \n", "6 . 2992 3 \n", "7 VBD 2429 470 \n", "8 VBN 2060 588 \n", "9 , 1953 1 \n", "\n", " Example \n", "0 's transitional government-in-exile/NN met Tue... \n", "1 restrictions on U.N./NNP peacekeepers in \n", "2 way out of/IN the stalemate \n", "3 The/DT chief investigating \n", "4 It is unclear/JJ how many \n", "5 Both men/NNS have yet \n", "6 peace process ./. \n", "7 Israel completed/VBD its handover \n", "8 2001 have put/VBN $ 880 \n", "9 said Hezbollah ,/, along with " ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sorted_tags_table[:10]" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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vvmmzp8/P9PvYz3ZsH7Rb9q0SVVTbvs//vhDHRwcdNeuXaqq+ttvv2nVqlV1//79di/zzJkzWqVKFf31119VVY3PZ3oHMIvFou+8845+9dVX+tZbb+mPP/6Yarljx47pSy+9pGvXrlVV1cOHD2uhQoX0t99+S/O9ly5dql26dDH+fejQIZ02bZpu27ZNr127lma9EydOaOXKlXX9+vW6bt06/eyzz3T9+vWqav+XTcGCBbV58+bGc6nts/fu3Xukk9DAwECtUKGCtmnTRp2dnbVv377G39sex48f13Hjxmn16tXVYrGkua727t9WP/30k1auXFmDgoJ02LBh2rVrV/3ll1/SbdP27du1ePHiunv3blVV7dOnj7733nsP/SK2BrsdO3Zk+EvbYrGom5ubLliwQAMCAnTUqFHplt+1a5e+9dZbumfPHo2NjdVff/1Vu3Tpog0aNHhocA0KCtJGjRpphQoVtHnz5jpmzBijnel9xnbs2KElSpRI93Of2nqVK1dOx44dq3Xr1k1zH0uvvpubm9aqVUvHjh370DY+ToGBgVqzZk397rvvHlo2JCRES5YsqdOnT9epU6dqxYoV9YsvvrAr7NnjwIED+u677+qBAwfSLFOzZk1t1KiRnjt3Tj/77DO7g6vFYtH8+fNrtWrVjOcy8v2mqurv769eXl527QNWwcHB+tZbb+mZM2f077//1nbt2mm/fv0eWu/atWvap08fbdWqVYZP3p4mQusTkvxDOnv2bK1bt64uWrTIri+7kSNHqpOTk27cuPGhy/jzzz+1cuXKeuLECd28ebMWK1bM6A192M52+vRp7du3r6qqRkRE6Ny5c7Vt27Zao0YNIyyn9R4REREPXY/o6GgtW7astmrVSlu0aKGDBg3SL774QmNiYh5aV1V19+7dWqJECWN9AgMDdejQofrDDz88tO7evXs1b968xpft7NmztUmTJhoSEmKEtQclJSVpv379UvSopOXq1atatWpVnT17tl6+fFmvXLmip0+ffmjP14N++eUXm0A3a9YsrVSpks2XonX7R0dHq6enp3bq1Mmo/9lnn+lPP/2U4eVZRUdHa/fu3fX8+fN648YN9ff314YNG2qFChV09erVKcLrb7/9pq+++qoGBwerqurXX3+t3bt31y1bttj0IO3fv18HDx5s9IpbPyNt27bVffv2pWjH9evX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/v7+6ufnp05OTsZ6nT59Wnv37q3ffvttiuU9uC2tx9DExET9888/1dXVVS9cuGCU++233x46nyC9Y7qVdR3Cw8O1V69e+tVXX+nMmTN1zpw5+sEHH2inTp20fPny+u9//1u3b9+eot758+e1R48eOmbMGKOn0fra6NGjtX///um28cHy6bGO22zWrJkmJCRoSEiIDhkyREeMGGFsh9jYWK1evbpeuHDB5j0f7HFt1aqVTpw4MdVlnD17Vk+cOKG///57iv2jQYMG2rp1a+PfyYfmTJ8+XUuWLKmenp46fvx4dXd31+nTp2vVqlW1devWumnTpjR7aePj47VXr17atGlTvXv3rt6+fVvHjx+vJUqU0Pfeey/FdrJePdy4caM2atRIFyxYoO3bt9eBAwdq+fLldfLkyVqiRAnt2LFjivG+ZkFofczWrVunXl5eGhwcrM2bN1cnJyebsZd37tzRJUuW6NChQ1MNQx06dNC6deuqk5OTBgQE6C+//KJjx45VX19fHThwoC5cuFBjYmK0TZs2+vfff2twcLCWKlVK+/btq82bN9cyZcrooEGDbN7zu+++05deeskYY6ZqOxZsypQpOnz4cJs61p1k6dKlWqZMGQ0PD093vXfu3JnicnpISIhWq1bNCD5RUVE2X5Zt2rSxuXyU/HLQ1q1bdcqUKTaBdP78+eru7q6nTp0yvkAmT56sEyZMsNmxt2/frj179tRFixbpiRMnVPV+cP300091ypQpRrlBgwapt7d3musVHh6uLVu2zFAYvH79ul6+fFlv3rype/fu1Q8++ECHDBmSZnnrScOQIUN0y5Yteu/ePV21apU2aNBAXV1djXKLFy9WV1dXHTp0qA4dOlQ7d+5sHOSjoqK0Y8eO2qlTpwxd0ntw3NP169fVy8tLBwwYkKLc8uXL9Z133tELFy7ojh07dOzYscaXZUJCgi5dulRbtWqlwcHBRtDt1KmTOjs7q6+vr964cUPj4+N11KhR+s033+ju3bt10KBBOmnSpBSTSh4cQ9asWTObkHjr1i3jsr11jKqqbdht0aKFDhs2TFXvB79GjRpp165dbZaR1ljyoKAg/fDDD7VatWr63nvv6ZQpU4xhDvHx8Xro0CH19vbWPn36PHTbpicoKEg7deqkFy9e1L///ltHjx6tQ4YMSTHcoG3btunua927d9dGjRppmzZt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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.xticks(rotation=45, fontsize=7)\n", "plt.bar(sorted(counts.keys(), key=counts.get), sorted(counts.values()))" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "slide" } }, "source": [ "## Sequence Labelling as Structured Prediction\n", "\n", "* Input Space $\\Xs$: sequences of items to label\n", "* Output Space $\\Ys$: sequences of output labels\n", "* Model: $s_{\\params}(\\x,\\y)$\n", "* Prediction: $\\argmax_\\y s_{\\params}(\\x,\\y)$" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "source": [ "## Conditional Models\n", "Model probability distributions over label sequences $\\y$ conditioned on input sequences $\\x$\n", "\n", "$$\n", "s_{\\params}(\\x,\\y) = \\prob_\\params(\\y|\\x)\n", "$$\n", "\n", "* Just like the conditional models from the [text classification](doc_classify_slides_short.ipynb) chapter\n", "\n", "* But the label space is *exponential* (as a function of sequence length)!\n", "\n", "* Most unique $\\y$ are never even seen in training\n", "\n", "* Might be useful to **break it up**?" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "source": [ "## Local Models / Classifiers\n", "A **fully factorised** or **local** model:\n", "\n", "$$\n", "p_\\params(\\y|\\x) = \\prod_{i=1}^n p_\\params(y_i|\\x,i,y_{1,\\ldots,i-1}) \\approx \\prod_{i=1}^n p_\\params(y_i|\\x,i)\n", "$$\n", "\n", "* Assumption: labels are independent of each other given the input\n", "* Inference in this model is trivial: **greedy decoding**" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "scrolled": false, "slideshow": { "slide_type": "fragment" } }, "source": [ "$$\n", "\\prob_\\params(\\text{\"PRP MD VB\"} \\bar \\text{\"it will rain\"}) \\approx \\\\\\\\ \\prob_\\params(\\text{\"PRP\"}\\bar \\text{\"it will rain\"},1) \\cdot \\\\ \\prob_\\params(\\text{\"MD\"} \\bar \\text{\"it will rain\"},2) \\cdot \\\\ \\prob_\\params(\\text{\"VB\"} \\bar \\text{\"it will rain\"},3)\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "scrolled": true, "slideshow": { "slide_type": "fragment" } }, "source": [ "Does this remind you of anything you've seen in previous lectures?" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "scrolled": false, "slideshow": { "slide_type": "skip" } }, "source": [ "$$\n", "\\prob_\\params(\\text{\"it will rain\"}) \\approx \\prob_\\params(\\text{\"it\"}) \\cdot \\prob_\\params(\\text{\"will\"} \\bar \\text{\"it\"}) \\cdot \\prob_\\params(\\text{\"rain\"} \\bar \\text{\"it will\"})\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "scrolled": false, "slideshow": { "slide_type": "skip" } }, "source": [ "### Graphical Representation\n", "\n", "- Models can be represented as factor graphs\n", "- Each variable of the model (our per-token tag labels and the input sequence $\\x$) is drawn using a circle\n", "- *Observed* variables are shaded\n", "- Each factor in the model (terms in the product) is drawn as a box that connects the variables that appear in the corresponding term\n", " - For example, the term $p_\\params(y_3|\\x,3)$ would connect the variables $y_3$ and $\\x$. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Parametrisation\n", "\n", "**Log-linear multiclass classifier** $p_\\params(y\\bar\\x,i)$ to predict class for sentence $\\x$ and position $i$\n", "\n", "$$\n", " p_\\params(y\\bar\\x,i) \\approx \\frac{1}{Z_\\x} \\exp \\langle \\repr(\\x,i),\\params_y \\rangle\n", "$$\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "+ $\\repr(\\x,i)$ is a **feature function**\n", "+ ${Z_\\x} > 0$ is a normalisation factor to ensure that $\\sum_{y} p_\\params(y\\bar\\x,i) = 1$\n", "\n", "+ How far can we get with very simple features that only consider the word types (and no context)?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Bias:\n", "$$\n", "\\repr_0(\\x,i) = 1\n", "$$\n", "\n", "Word at token to tag:\n", "$$\n", "\\repr_w(\\x,i) = \\begin{cases}1 \\text{ if }x_i=w \\\\\\\\ 0 \\text{ else} \\end{cases}\n", "$$" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "def feat_1(x,i):\n", " return {\n", " 'bias': 1.0,\n", " 'word:' + x[i]: 1.0,\n", " }\n", "\n", "train = list(zip(tokens[:-200], pos[:-200]))\n", "dev = list(zip(tokens[-200:], pos[-200:]))\n", "\n", "local_1 = seq.LocalSequenceLabeler(feat_1, train, class_weight='balanced')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "We can assess the accuracy of this model on the development set." ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "0.8872215709261431" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "seq.accuracy(dev, local_1.predict(dev))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Problem 1: unknown words\n", "\n", "Many words are new, but we should still be able to tag them based on form or context:\n", "\n", "> ’Twas brillig, and the slithy toves \n", "Did gyre and gimble in the wabe: \n", "All mimsy were the borogoves, \n", "And the mome raths outgrabe.\n", "\n", "(Jabberwocky by Lewis Carroll)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### How to Improve?\n", "\n", "Look at **confusion matrix**" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "plt.rcParams['figure.figsize'] = [7, 7]\n", "import matplotlib.pylab as plb\n", "plb.rcParams['figure.dpi'] = 120" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "image/png": "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paenO/xsAAAAoCozTZJx7Ngx/fHHH7r22mud0l9BYvHrr78WWychIUFxcXFOeR4AAAAqD3aXqlimSTKcLT+/9AO6YmNjFRERYXctPT1d4eHhFRQVAAAA4PlMk2Q0bNhQNWrU0OHDh53SX8FajEaNGhVbx2KxyGKxOOV5AAAAAC4zzcJvb29v3XzzzdqzZ49+/vlnh/t79913ZRiGevXq5YToAAAA4FH+M13KTEUeNF3KNEmGJD3xxBPKz8/Xvffeq4sXLxa6f+nSJb333nul9pOUlKQNGzZo5MiRuuaaayoiVAAAAADFMM10KUnq3r27Xn31VcXGxqpLly568MEH1b59e126dElfffWVFi1apJCQEN16662SpPPnz2vHjh22///DDz8oJSVF77//vnr37q3XXnvNna8DAAAAVEmmSjIk6d5779Xf//53vfDCC4qPj9dvv/0mX19ftWnTRnfeeaceeughW90ffvhB3bt3lyTVrFlTgYGB6ty5s9566y0NHz5cXl6mGqgBAACASVyenWSu6UkmC8chpksyJKlTp05KTk4usU5qaqpLYsGVaXyVf7nbtnn4XYee/X8vlH5QIzyPt5cHfUcGAMBD8Kt+AAAAAE5lypEMAAAAoCJxGF/FYiQDAAAAgFOZLslITk622y/Yz89PV199tfr06aOnn35aWVlZkqQjR46Uec/hI0eOuPelAAAAgCrEtNOlkpKS1LZtW126dElZWVn67LPPFB8fr2effVarVq1Sz549tX37drs2sbGxOnXqlJYvX253PSgoyJWhAwAAwOyM/xQzMVs8DjBtkhESEqLQ0FDb59tuu00PP/ywbrrpJg0fPlzfffedunXrZtemTp06unjxYqHrAAAAAFzHdNOlSnLNNdfoueee05kzZ7Rw4UJ3hwMAAACgCKYdySjOoEGD5O3trW3btjncV1ZWlrKzs+2upaenO9wvAAAAzM2QCXeX8qD5UpUuyahZs6YaNmyoX3/91eG+EhISFBcX54SoAAAAABSodEmGJOXn5zuln9jYWEVERNhdS09PV3h4uFP6BwAAAKqiSpdknDt3TsePH1eHDh0c7stischisTghKgAAAFQmHMZXsSrVwm9J+uCDD2S1WhUWFubuUAAAAAAUoVIlGT/++KMeffRR1a1bV/fff7+7wwEAAABQBNNOl0pLS1Nubq5yc3OV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7Gy7a+np6c4OFQAAAKhSKvWv+1esWKH69etr4sSJCg4OVt26dXXrrbfq3//+t/Lz80ttn5CQoJCQELsSHh5e8YEDAADAvf6zu5SZiifNl6q0IxmSdMMNNyg9PV2bN2/Wtm3btHv3bn3yySd6//33tXr1ar377rsljmzExsYqIiLC7lp6ejqJBgAAAOCASp1kSJKvr6/69++v/v37S5KOHz+uESNG6P3339eGDRs0aNCgYttaLBZZLBZXhQoAAABUCZV6ulRRGjRooAkTJkiS0tLS3BsMAAAATOny7CT3T5GyL+7+qjhPpU0yLl26pOPHjxd57+DBg5KkRo0auTIkAAAAAKoE06X+uqai4POpU6fUvHlzRUREqG/fvmratKnOnj2r1NRUvfjiiwoODtbw4cPdETIAAABQpZk2yfjjjz8kSdWrVy/yc506dRQXF6dPPvlETz75pDIzM2UYhq699lpNmDBBkydPVo0aNdwTPAAAAFCFmTbJ+Pbbb+Xl5aVmzZrZPgcEBKhWrVqSpGrVqmnixImaOHGiO8METMHXp9LOfAQAwC3MuGOs2eJxhOmSjD179mjXrl1KTEzUkCFDtG/fPn3xxRdav369HnroIXeHBwAAAKAUpksyRowYoVOnTmnIkCFasGCBAgICFBAQoPvuu09z5sxxd3gAAAAASuHSORbJyckyDEO7d+8u8v6RI0d05MgR/f7771qxYoUCAgJUt25dhYSEaOjQofL397erP2PGDLttv7y8vBQUFKRBgwbp888/d8UrAQAAoBIy5O7taoso8pz5UqacyD127Fht375dn376qZ599ll99913GjRokLZt21Zk/Y0bN2r79u367LPP9MILL+i3335TWFiY/vd//9fFkQMAAAAw3XQpSbrmmmvUrVs3SVKPHj3UunVr9e7dW2+88YZ69epVqH6XLl3UsGFDSdKNN96ov//972rZsqXWrFmjzp07uzR2AAAAoKozZZLxV6GhoZKkzMzMMtWvW7euJMnX17fCYgIAAEDlxe5SFatSJBmHDx+WJLVp06bI+1arVbm5ucrLy9OPP/6oqVOnqnr16hoxYkSJ/WZlZSk7O9vuWnp6unOCBgAAAKooUyYZeXl5ys3NldVq1aFDh/Tggw8qKChIjzzySJH1r776arvPderU0cqVK9WhQ4cSn5OQkKC4uDinxQ0AAADA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7t0rSYxUAAAAAC7m1iSjfv36euKJJ3Tw4EGtWLGixLp33323OnTooGeffVanT5+2u/fjjz9qx44d2rFjhz755BPNnj1bTz31lJo1a6bhw4dX5CsAAAAA+Au3jxKNHTtW11xzjWbOnCmr1VpsPS8vL82dO1cnTpzQ/Pnz7e699NJL6t69u7p3767Bgwfr3//+t+677z7t2LFDderUqeA3AAAAQGVTsLuU2YqncMmajKioKEVFRRV5z8/PTxkZGbbPqampxfYzaNAg5efn2z43b97c7jMAAAAA93PrYXwAAODKHPj5dOmVStC+CSP8ACoeSQYAAACqHEPm283JbPE4wu1rMgAAAAB4FtMkGWVdDPPnNRs//fSTHnroIbVs2VJ+fn6qX7++wsLCtHz5ctZqAAAAAG5imulS27dvt/s8a9YsbdmyRZs3b7a73q5dO0nS559/bjuY77HHHlPHjh116tQprV69WnfddZfee+89rVixQl5epsmjAAAAYBKGzLebk+FBE6ZMk2R069bN7nNAQIC8vLwKXZekkydPavjw4apbt6527typwMBA272hQ4eqY8eOevzxx3X99dfr8ccfr/DYAQAAAPxXpfw1/+uvv66srCzNnTvXLsEoMGnSJLVt21bPPPOMLl265IYIAQAAgKrLNCMZV2LTpk3y9vbWrbfeWuR9wzA0ZMgQzZs3T3v27ClyNESSsrKylJ2dbXctPT3d6fECAADAXAyZ77ftnjNZqpImGT/++KMCAgJUs2bNYutce+21trrFJRkJCQmKi4urkBgBAACAqqpSJhllUbC7VEkLemJjYxUREWF3LT09XeHh4RUZGgAAAODRKmWScc011+i7777TuXPnih3NOHLkiCSpadOmxfZjsVhksVgqIkQAAACYWMHxCGZitngcYbapaGXSr18/Wa1Wvffee0Xez8/P17vvvqurrrpKXbp0cXF0AAAAQNVWKZOMe+65RxaLRU888YSysrIK3Z83b54OHTqkSZMmydfX1w0RAgAAAFVXpZwuVa9ePb3zzjsaPHiwunTposcee0ydOnXS6dOntWrVKi1fvlx33HGHHnvsMXeHCgAAABMyZL7dnMwWjyMqZZIhST169NDXX3+t+Ph4vfjii/r555/l7++vTp06admyZbrzzjs9al4bAAAAUFmYNslITk5WcnJyiXWaNm2ql19+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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "seq.plot_confusion_matrix(dev, local_1.predict(dev), normalise=True)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* mostly strong diagonal (good predictions)\n", "* `NN` receives a lot of wrong counts, often confused with `NNP`" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Previous\n", "  \n", " Next\n", "
\n", "
Thewalkoutwillshutdownthecity
DTNNMDVBDTNN
DTNNPMDNNDTNN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:walkout
1.01.0
3.730.00
3.730.00
1 / 60
\n", "
,andthrowthedailycommuteofitssevenmillion
,CCVBDTJJNNINPRP$CDCD
,CCVBDTRBNNPINPRP$CDCD
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:commute
1.01.0
3.730.00
3.730.00
2 / 60
\n", "
Contracttalksbetweenthetwo
NNNNSINDTCD
NNPNNSINDTCD
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:Contract
1.01.0
3.730.00
3.730.00
3 / 60
\n", "
deadlockedoversuchissuesaswageincreasesandatwhat
VBNINJJNNSINNNNNSCCINWP
NNPRPPDTNNSINNNPNNSCCINWP
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:wage
1.01.0
3.730.00
3.730.00
4 / 60
\n", "
eligibletoreceiveafullpension.
JJTOVBDTJJNN.
JJTOVBDTJJNNP.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:pension
1.01.0
3.730.00
3.730.00
5 / 60
\n", "
UnionheadRogerToussaintcalls
NNNNNNPNNPVBZ
NNPVBNNPNNPVBZ
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:Union
1.01.0
3.73-0.52
3.734.19
6 / 60
\n", "
ineffecttopreventmassivetrafficjamsonNewYork
INNNTOVBJJNNNNSINNNPNNP
INNNTOVBJJNNPNNPINNNPNNP
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:traffic
1.01.0
3.730.00
3.730.00
7 / 60
\n", "
hopeCambodiacanbeamodelfortherestof
NNNNPMDVBDTNNINDTNNIN
VBPNNPMDVBDTNNPINDTNNIN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:model
1.01.0
3.730.00
3.730.00
8 / 60
\n", "
Clinton'svisitwillraiseawarenessaboutH.I.V.andhelp
NNPPOSNNMDVBNNINNNPCCVB
NNPPOSVBMDVBNNPINNNPCCVB
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:awareness
1.01.0
3.730.00
3.730.00
9 / 60
\n", "
allactsofabuseandbrutalityandtreatsallegationsof
DTNNSINNNCCNNCCVBZNNSIN
PDTNNSINNNCCNNPCCNNPNNSIN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:brutality
1.01.0
3.730.00
3.730.00
10 / 60
\n", "
itwasreleasedbytheNewsoftheWorldnewspaper
PRPVBDVBNINDTNNINDTNNPNN
PRPVBDVBNINDTNNPINDTNNPNN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:News
1.01.0
3.73-0.39
3.732.51
11 / 60
\n", "
isheadofMogadishu'sambulanceservice,saysat
VBZNNINNNPPOSNNNN,VBZIN
VBZVBINNNPPOSNNPNN,VBZIN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:ambulance
1.01.0
3.730.00
3.730.00
12 / 60
\n", "
promptingsoldierstolaunchanartillerybarrage.
VBGNNSTOVBDTNNNN.
VBGNNSTOVBDTNNPNNP.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:artillery
1.01.0
3.730.00
3.730.00
13 / 60
\n", "
soldierstolaunchanartillerybarrage.
NNSTOVBDTNNNN.
NNSTOVBDTNNPNNP.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:barrage
1.01.0
3.730.00
3.730.00
14 / 60
\n", "
twodecadesofviolenceandlawlessnesssincethefallof
CDNNSINNNCCNNINDTNNIN
CDNNSINNNCCNNPINDTVBIN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:lawlessness
1.01.0
3.730.00
3.730.00
15 / 60
\n", "
ThefounderofMicrosoft,Bill
DTNNINNNP,NNP
DTNNPINNNP,NNP
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:founder
1.01.0
3.730.00
3.730.00
16 / 60
\n", "
universitystudentseagerforaglimpseoftheworld's
NNNNSJJINDTNNINDTNNPOS
NNNNSNNPINDTNNPINDTNNPOS
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:glimpse
1.01.0
3.730.00
3.730.00
17 / 60
\n", "
thegovernmentlandedahightechdealwhenleadingchipmaker
DTNNVBDDTJJNNNNWRBVBGNN
DTNNVBNDTJJNNPNNWRBVBGNNP
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:tech
1.01.0
3.730.00
3.730.00
18 / 60
\n", "
hightechdealwhenleadingchipmakerIntelCorporationannouncedit
JJNNNNWRBVBGNNNNPNNPVBDPRP
JJNNPNNWRBVBGNNPNNPNNPVBDPRP
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:chipmaker
1.01.0
3.730.00
3.730.00
19 / 60
\n", "
Theingredient,calledartemisinin,isextractedfrom
DTNN,VBNNN,VBZVBNIN
DTNN,VBDNNP,VBZVBNIN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:artemisinin
1.01.0
3.730.00
3.730.00
20 / 60
\n", "
formofmalaria,calledfalciparum.
NNINNN,VBDNN.
VBINNN,VBDNNP.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:falciparum
1.01.0
3.730.00
3.730.00
21 / 60
\n", "
usingtheeuroastheircurrencyhavenotdoneas
VBGDTNNINPRP$NNVBPRBVBNRB
VBGDTNNINPRP$NNPVBPRBVBNIN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:currency
1.01.0
3.730.00
3.730.00
22 / 60
\n", "
donotyetknowtheoriginofthedeadbirds
VBPRBRBVBDTNNINDTJJNNS
VBRBRBVBDTNNPINDTJJNNS
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:origin
1.01.0
3.730.00
3.730.00
23 / 60
\n", "
,ValerySitnikov,saidbio-terrorismcannotberuled
,NNPNNP,VBDNNMDRBVBVBN
,NNPNNP,VBDNNPMDRBVBVBN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:bio-terrorism
1.01.0
3.730.00
3.730.00
24 / 60
\n", "
fourmurdersandwastheco-founderoftheinfamousCrips
CDNNSCCVBDDTNNINDTJJNNP
CDNNSCCVBDDTNNPINDTNNPNNP
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:co-founder
1.01.0
3.730.00
3.730.00
25 / 60
\n", "
Intwootherdeathpenaltycaseshehasrefused
INCDJJNNNNNNSPRPVBZVBN
INCDJJNNNNPNNSPRPVBZVBN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:penalty
1.01.0
3.730.00
3.730.00
26 / 60
\n", "
Aftertheregistrationperiodends,applicants
INDTNNNNVBZ,NNS
INDTNNPNNVBZ,NNS
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:registration
1.01.0
3.730.00
3.730.00
27 / 60
\n", "
,whichwilldeterminethemake-upofthepresidentialballot
,WDTMDVBDTNNINDTJJNN
,WDTMDVBDTNNPINDTJJNN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:make-up
1.01.0
3.730.00
3.730.00
28 / 60
\n", "
Competitivedivingisoneofthe
JJNNVBZCDINDT
NNPNNPVBZCDINDT
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:diving
1.01.0
3.730.00
3.730.00
29 / 60
\n", "
Recreationaldivingisalsoagrowing
JJNNVBZRBDTVBG
NNPNNPVBZRBDTVBG
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:diving
1.01.0
3.730.00
3.730.00
30 / 60
\n", "
divingisalsoagrowingamateursportintheU.S.
NNVBZRBDTVBGNNNNINDTNNP
NNPVBZRBDTVBGNNPNNINDTNNP
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:amateur
1.01.0
3.730.00
3.730.00
31 / 60
\n", "
Unfortunately,thejoyofjumpingoffthe
RB,DTNNINVBGRPDT
NNP,DTNNPINNNPRPDT
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:joy
1.01.0
3.730.00
3.730.00
32 / 60
\n", "
divingboardatthelocalswimmingpoolhastoooften
VBGNNINDTJJNNNNVBZRBRB
NNPNNINDTJJNNPNNPVBZRBRB
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:swimming
1.01.0
3.730.00
3.730.00
33 / 60
\n", "
boardatthelocalswimmingpoolhastoooftenbeen
NNINDTJJNNNNVBZRBRBVBN
NNINDTJJNNPNNPVBZRBRBVBN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:pool
1.01.0
3.730.00
3.730.00
34 / 60
\n", "
AnofficialwithCanada'sspyagencyhassaidthat
DTNNINNNPPOSNNNNVBZVBNIN
DTJJINNNPPOSNNPNNVBZVBDWDT
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:spy
1.01.0
3.730.00
3.730.00
35 / 60
\n", "
beforeMr.Chavez'safternoondeparture.
INNNPNNPPOSNNNN.
INNNPNNPPOSNNNNP.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:departure
1.01.0
3.730.00
3.730.00
36 / 60
\n", "
cancellationsonthepope'sschedule,butdidnot
NNSINDTNNPOSNN,CCVBDRB
NNPINDTNNPOSNNP,CCVBDRB
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:schedule
1.01.0
3.730.00
3.730.00
37 / 60
\n", "
fromParkinson'sdiseaseandarthritis,butcontinuesto
INNNPPOSNNCCNN,CCVBZTO
INNNPPOSNNCCNNP,CCVBZTO
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:arthritis
1.01.0
3.730.00
3.730.00
38 / 60
\n", "
tomaintainafulltravelschedule,holdaudiencesand
TOVBDTJJNNNN,NNNNSCC
TOVBDTJJVBNNP,VBNNPCC
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:schedule
1.01.0
3.730.00
3.730.00
39 / 60
\n", "
holdaudiencesandperformhispapalduties.
NNNNSCCVBPRP$NNNNS.
VBNNPCCVBPPRP$NNPNNS.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:papal
1.01.0
3.730.00
3.730.00
40 / 60
\n", "
IsraelcompleteditshandoveroftheWestBank
NNPVBDPRP$NNINDTNNPNNP
NNPVBNPRP$NNPINDTNNPNNP
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:handover
1.01.0
3.730.00
3.730.00
41 / 60
\n", "
armedmenstormedintoabarinwesternMexicoand
JJNNSVBDINDTNNINJJNNPCC
JJNNSVBDINDTNNPINJJNNPCC
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:bar
1.01.0
3.730.00
3.730.00
42 / 60
\n", "
airastheyenteredthebarinMichoacanstatebefore
NNINPRPVBDDTNNINNNPNNIN
NNINPRPVBDDTNNPINNNPNNIN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:bar
1.01.0
3.730.00
3.730.00
43 / 60
\n", "
barinMichoacanstatebeforedawnWednesday.
NNINNNPNNINNNNNP.
NNPINNNPNNINNNPNNP.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:dawn
1.01.0
3.730.00
3.730.00
44 / 60
\n", "
Thegroupalsoleftanotesayingthekillingswere
DTNNRBVBDDTNNVBGDTNNSVBD
DTNNRBVBDDTNNPVBGDTNNSVBD
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:note
1.01.0
3.730.00
3.730.00
45 / 60
\n", "
ofwhatitcalled\"divinejustice.\"
INWPPRPVBD``NNNN.``
INWPPRPVBD``NNPNN.``
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:divine
1.01.0
3.730.00
3.730.00
46 / 60
\n", "
childrenwerekilledinastampedeinthesoutherncity
NNSVBDVBNINDTNNINDTJJNN
NNSVBDVBNINDTNNPINDTJJNN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:stampede
1.01.0
3.730.00
3.730.00
47 / 60
\n", "
werewaitingtogetfreeflour.
VBDVBGTOVBJJNN.
VBDVBGTOVBVBNNP.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:flour
1.01.0
3.730.00
3.730.00
48 / 60
\n", "
groupwasgivingouttheflourinhonorofthe
NNVBDVBGRPDTNNINNNINDT
NNVBDVBGRPDTNNPINVBINDT
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:flour
1.01.0
3.730.00
3.730.00
49 / 60
\n", "
ofthevictimsdiedofsuffocation.
INDTNNSVBDINNN.
INDTNNSVBDINNNP.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:suffocation
1.01.0
3.730.00
3.730.00
50 / 60
\n", "
50membersofIsrael'stheatercommunityhavesigneda
CDNNSINNNPPOSNNNNVBPVBNDT
CDNNSINNNPPOSNNPNNVBPVBNDT
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:theater
1.01.0
3.730.00
3.730.00
51 / 60
\n", "
theatercommunityhavesignedapetitiontoboycottperformancesat
NNNNVBPVBNDTNNTOVBNNSIN
NNPNNVBPVBNDTNNPTOVBNNSIN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:petition
1.01.0
3.730.00
3.730.00
52 / 60
\n", "
boycottperformancesatastate-fundedtheaterinthenorthernWest
VBNNSINDTJJNNINDTJJNNP
VBNNSINDTNNPNNPINDTJJNNP
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:theater
1.01.0
3.730.00
3.730.00
53 / 60
\n", "
Somalia'stransitionalgovernment-in-exilemetTuesdaytotry
NNPPOSJJNNVBDNNPTOVB
NNPPOSJJNNPVBDNNPTOVB
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:government-in-exile
1.01.0
3.730.00
3.730.00
54 / 60
\n", "
weretoperformtheminorpilgrimageknownasOmra.
VBDTOVBDTJJNNVBNINNNP.
VBDTOVBPDTJJNNPVBNINNNP.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:pilgrimage
1.01.0
3.730.00
3.730.00
55 / 60
\n", "
rangingfrommaintainingthestatusquotoafullwithdrawal
VBGINVBGDTNNNNTODTJJNN
VBGINVBGDTNNNNPTODTJJNN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:quo
1.01.0
3.730.00
3.730.00
56 / 60
\n", "
theoperationtoeitheranobserverorliaisoneffort.
DTNNTODTDTNNCCNNNN.
DTNNTORBDTNNPCCNNPNN.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:observer
1.01.0
3.730.00
3.730.00
57 / 60
\n", "
toeitheranobserverorliaisoneffort.
TODTDTNNCCNNNN.
TORBDTNNPCCNNPNN.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:liaison
1.01.0
3.730.00
3.730.00
58 / 60
\n", "
anyparticularoptionandsaidnoneofferedanidealway
DTJJNNCCVBDNNVBDDTJJNN
DTNNPNNCCVBDNNPVBNDTNNPNN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:none
1.01.0
3.730.00
3.730.00
59 / 60
\n", "
InthisphotographreleasedbytheIraqi
INDTNNVBNINDTJJ
INDTNNPVBNINDTJJ
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:photograph
1.01.0
3.730.00
3.730.00
60 / 60
\n", "
\n", "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "util.Carousel(local_1.errors(dev,\n", " filter_gold=lambda y: y=='NN',\n", " filter_guess=lambda y: y=='NNP'))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* \"walkout\", \"commute\", \"wage\" are misclassified as proper nouns\n", "* For $f_{\\text{word},w}$ feature template weights are $0$\n", "\n", "The word has not appeared in the training set!" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "Proper nouns tend to be capitalised! Can we capture that with a feature?" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "0.9087924970691676" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def feat_2(x,i):\n", " return {\n", " 'bias': 1.0,\n", " 'word:' + x[i].lower(): 1.0,\n", " 'first_upper:' + str(x[i][0].isupper()): 1.0,\n", " }\n", "local_2 = seq.LocalSequenceLabeler(feat_2, train)\n", "seq.accuracy(dev, local_2.predict(dev))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Are these results actually caused by improved `NN`/`NNP` prediction?" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "image/png": "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AMCpmC4FAACA6ofD+CqUyX6yAAAAAKo6igwAAAAATsV0KQAAAFQ/HMZXoRjJAAAAAOBUFBkAAAAAnIrpUgAAAKiGTHgYnxv9/t993gQAAACAKVBkAAAAAHAqpksBAACg+mF3qQrFSAYAAAAAp6LIAAAAAOBUTJf6i1OnTmnr1q1q1qyZatas6ep0AAAAqqwLFy7op59+Uu/evdWgQQNXp4NKRJHxF1u3blV4eLir0wAAAHAbKSkpGjp0qKvTsGcY5tvC1o3WZFBk/EWzZs0kSavXpKhV69YuzgYAAKDq+j49XbePCLf9/QrVB0XGXxRMkWrVurXad+jg4mwAAACqPqagVz8mGyNyTGpqqqKiolydBgAAAMyuYAtbszU34VZFBgAAAADXc4siIzExUe3bt1f//v21ZMkSNWjQQN26ddPGjRtdnRoAAABQ7VT5NRkffPCBYmJi9M9//lP33XefNm3apPvuu087duxQVlaWq9MDAACACRmGIcNk05PMlo8jqnyR8dFHH6lBgwZasmSJtm7dqr1792ro0KFl2iYtKytL2dnZdtfS09MrKlUAAACgWqjyRUZgYKDOnDmjHTt2XHHfhIQExcXFVUBWAAAAQPVV5YuMhx56SB9++KF69OihwMBA1a5dWy+++KJuvfVWtWzZssS+sbGxioiIsLuWnp7OYXwAAABujulSFavKL/yuXbu2Nm/erF27dum2227TH3/8oWeffVbXXXednnnmmRL7WiwWdejQwa615gA+AAAAwCFVvsgo0LVrVw0bNkw333yzjhw5osjISE2ePFnHjh1zdWoAAABAtVLli4z8/PxC1zw9PdWrVy/l5+cXWtgNAAAASJIMkzU3UuXXZIwfP15eXl4aPHiwjh07pt9//12rV6/WrFmz1Lp1awUFBbk6RQAAAKBaqfJFxm233abXXntNMTExOnbsmC5duqQdO3aod+/eeuqpp+Tt7e3qFAEAAIBqpcoXGb1791bv3r0lSampqUpOTlZycrJLc/r26Jly970usK4TMwEAAEBR2F2qYlX5NRkAAAAAzMWtiowWLVpwxgUAAADgYlV+utSftWjRQi1atHB1GgAAADA7E06XktnycYBbjWQAAAAAcD2KDAAAAABO5VbTpQAAAICyMAzz7eZksnQcUq2LjKysrEIngqenp7soGwAAAMA9VOsiIyEhQXFxca5OAwAAAHAr1brIiI2NVUREhN219PR0tsEFAABwcxzGV7GqdZFhsVhksVhcnQYAAADgVthdCgAAAIBTVeuRDAAAAFRTxn+amZgtHwe49UiGYRgKCwtzdRoAAABAteK2RcbZs2clSQEBAS7OBAAAAKhe3Ha61LZt22QYhp588slK/+7rAuuWu+87X//s0HcP79TUof4AAADVgSET7i7lRvOl3HYkY8uWLYqMjFTHjh1dnQoAAABQrbjtSMYzzzzj6hQAAACAasltiwwAAACgOBzGV7HcdroUAAAAANegyAAAAADgVBQZAAAAAJyKNRkAAACodliTUbGqdZGRlZWl7Oxsu2vp6ekuygYAAABwD9W6yEhISFBcXJyr0wAAAADcSrUuMmJjYxUREWF3LT09XeHh4a5JCAAAAJXDhNOlZLZ8HFCtiwyLxSKLxeLqNAAAAAC3wu5SAAAAAJyqWo9kAAAAoJoy/tPMxGz5OMBtRzK2bt0qLy8vzZw509WpAAAAANWK2xYZ+fn5slqtysvLc3UqAAAAQLXittOlwsLClJ+f7+o0rtjwTk1dnUK15ej/Xky3QwUAACiWIfP9t9tc2TjGbUcyAAAAALgGRQYAAAAAp3Lb6VIAAABAcQwTHsZntnwcwUgGAAAAAKeiyAAAAADgVEyXAgAAQLXDdKmKxUgGAAAAAKdy25EMwzDUu3dvpaamFhuTlZWl7Oxsu2vp6ekVnBkAAADg3ty2yPD09JSnp2eJMQkJCYqLi6ukjAAAAGAahsx3+p3Z8nGA2xYZubm5pcbExsYqIiLC7lp6errCw8MrKCsAAADA/VXrNRkWi0UdOnSwa61bt3Z1WgAAAMAVOXv2rCZMmKDAwED5+Pjo+uuv15tvvlmmvlu2bFG/fv1ksVhUp04dderUSQsWLJDVai13Pm47kgEAAAAUx912lxo+fLh27dqluXPnqm3btlqxYoVGjhypvLw83XnnncX2+/jjj9W/f3/16tVLixcvVu3atfXuu+9q/Pjx+v777/Xiiy+WKx+KDAAAAKAKW79+vTZt2mQrLCSpT58+ysjI0GOPPaY77rij2LXKycnJ8vb21vvvv6/atWtLkvr27atvv/1WycnJ5S4y3Ha6lJeXl26++WZXpwEAAABUqLVr16pOnTqF1hpHR0fr6NGj2rlzZ7F9vb29VaNGDfn6+tpdb9CggXx8fMqdk9sWGVar1aF5ZAAAAHBfBdOlzNakyxsRHThwwK5lZWUV+y5paWkKCgqSl5f9JKVOnTrZ7hfngQce0MWLFzVu3DgdPXpUp06d0r///W+tXbtWkyZNKvfP122nS+Xn57s6hSrpSPY5h/q38KvtpEwqn9nmZQIAgOqpqJ1Op0+frhkzZhQZf+LECbVs2bLQ9auuusp2vzjdunXT5s2bFRERoVdeeUXS5aMgnn76aU2cOPHKk/8Pty0yAAAAgKooJSWl0I6nfn5+JfYp6ZelJd3bs2ePhg0bpm7dumnhwoWqXbu2Nm/erKlTpyonJ0f/+te/riz5/6DIAAAAQDVkvt2lCk7ja926tTp06FDmXo0aNSpytOLkyZOS/juiUZT//d//lb+/v9auXWtbHN6nTx95eHhoxowZGjVqVJGjJKVx2zUZAAAAQHXQsWNHHTx4sNBh1Pv375ckBQcHF9t379696tq1a6Hdp2644Qbl5eXp4MGD5crJtEXG119/rejoaF177bXy8fFRnTp11KVLF82bN89WlUlSXl6e/v3vf6tv375q3LixvL29ZbFYNHjwYL333nvKy8tz4VsAAAAAFWvYsGE6e/as3n77bbvrS5YsUWBgoLp161Zs38DAQO3evbvQhknbt2+XJDVt2rRcOZlyutTixYsVGxur6667To899pjat2+vS5cuaffu3Xrttde0fft2rV27Vjk5OQoPD9dHH32kyMhIvfrqq7r66quVnZ2tjRs3KiIiQqtWrdLQoUNd/UoAAAAwEcMw36Yv5U1n4MCB6tevnx588EH9/vvvat26tVauXKmNGzdq2bJltlGKmJgYLVmyRN9//72aN28uSXr44Yc1btw43Xrrrbr//vtVq1YtffLJJ3ruuefUt29fde7cuVw5ma7I2L59ux588EH169dPKSkpqlmzpu1ev379NHHiRG3cuFGS9Mgjj+jDDz/UkiVLdPfdd9s9Z/jw4Xrsscd0/vz5Ss0fAAAAqGzvvPOOpkyZomnTpunkyZNq166dVq5cqcjISFtMwREPf96FdezYsWrSpIleeOEF3XPPPTp//rxatGih6dOn6+GHHy53Pka+yfZ6vfXWW7Vx40b98MMPatasWbFxv/76q6655hr94x//sBUdznDgwAEFBwdrz940tb+CBTfuojpvYQsAAJzrmwMH1PX6YKWlpV3RQuaKVPB3vcYjXpD3Vde4Oh07l07+qONrHjbVz6u8TDWSYbVatXnzZnXt2rXEAkOStmzZokuXLhW5j3BZZWVlKTs72+5aenp6uZ8HAACAKsJQwWZO5mG2fBxgqiLj+PHj+uOPP3TttdeWGvvjjz9KUplii5OQkKC4uLhy9wcAAABQmKmKjMoWGxuriIgIu2vp6ekOjY4AAAAA1Z2piozGjRurVq1aOnz4cKmx11xzeQ5dWWKLY7FYZLFYyt0fAAAAQGGmOifD09NTN998s/bs2aOff/65xNg+ffrI29tbKSkplZMcAAAA3IZhGKZs7sJURYYkPfHEE8rPz9e9996rixcvFrp/6dIlvffee7r66qt1zz336MMPP9TSpUuLfNb333+vr7/+uqJTBgAAAPAnppouJUmhoaF69dVXFRsbq65du+rBBx9Uhw4ddOnSJX311VdatGiRgoODdeutt+r555/XDz/8oKioKH344YcaNmyY/P39dfz4cW3atElJSUl688031alTJ1e/FgAAAFBtmK7IkKR7771Xf//73/XCCy8oPj5ev/76q7y9vdW2bVvdeeedeuihhyRJPj4++uCDD7R8+XItWbJE999/v37//Xc1bNhQISEhSkxM1K233uritwEAAIDZmHF6ktnycYQpiwxJ6ty5s5KTk0uN8/T01N13313oxG+Uj6OH6f16Kqfcfa9u4OPQd6NqyrXmOdTfy9N0sz4BAKj2+K8zAAAAAKcy7UgGAAAAUFGYLlWxTDmS8fXXXys6OlrXXnutfHx8VKdOHXXp0kXz5s3TyZMnJUlhYWG2/3F4eHiobt26at26tSIiIrRmzRrl5Tk2BQMAAABA+ZhuJGPx4sWKjY3Vddddp8cee0zt27fXpUuXtHv3br322mvavn271q5dK0lq2bKlli9fLkk6d+6cDh8+rJSUFEVERKhnz5567733VL9+fVe+DgAAAFDtmKrI2L59ux588EH169dPKSkpqlmzpu1ev379NHHiRG3cuNF2zdfXV927d7d7xj333KOkpCSNGTNG9913n1atWlVp+QMAAKAKcZ/ZSaZjqulSc+bMkWEYWrRokV2BUaBGjRoaMmRIqc+Jjo7WoEGD9NZbbykjI6MiUgUAAABQDNOMZFitVm3evFldu3ZVs2bNHH7ekCFDtH79en366adq3rx5kTFZWVnKzs62u5aenu7wdwMAAADVmWmKjOPHj+uPP/7Qtdde65TnFRQWR48eLTYmISFBcXFxTvk+AAAAVB3sLlWxTFNkOFt+fn6pMbGxsYqIiLC7lp6ervDw8ArKCgAAAHB/pikyGjdurFq1aunw4cNOeV7BWozAwMBiYywWiywWi1O+DwAAAMBlpln47enpqZtvvll79uzRzz//7PDz3n33XRmGoV69ejkhOwAAALiV/0yXMlOTG02XMk2RIUlPPPGE8vPzde+99+rixYuF7l+6dEnvvfdeqc9JSkrShg0bNHLkSF1zzTUVkSoAAACAYphmupQkhYaG6tVXX1VsbKy6du2qBx98UB06dNClS5f01VdfadGiRQoODtatt94qSTp//rx27Nhh+///8MMPSklJ0fvvv6/evXvrtddec+XrAAAAANWSqYoMSbr33nv197//XS+88ILi4+P166+/ytvbW23bttWdd96phx56yBb7ww8/KDQ0VJJUu3Zt+fv7q0uXLnrrrbc0fPhweXiYaqAGAAAAJnF5dpK5pieZLB2HmK7IkKTOnTsrOTm5xJjU1NRKyQVX5uoGPuXu22XaRw599//NvMWh/nANL09+GQAAgLvhv+4AAAAAnMqUIxkAAABAReIwvorFSAYAAAAApzJdkZGcnGy3X7CPj4+uvvpq9enTR08//bSysrIkSUeOHCnznsNHjhxx7UsBAAAA1Yhpp0slJSWpXbt2unTpkrKysvTZZ58pPj5ezz77rFatWqWePXtq+/btdn1iY2N1+vRpLV++3O56QEBAZaYOAAAAszP+08zEbPk4wLRFRnBwsEJCQmyfb7vtNj388MO66aabNHz4cH333Xfq3r27XZ969erp4sWLha4DAAAAqDymmy5VkmuuuUbPPfeczpw5o4ULF7o6HQAAAABFMO1IRnEGDRokT09Pbdu2zeFnZWVlKTs72+5aenq6w88FAACAuRky4e5SbjRfqsoVGbVr11bjxo119OhRh5+VkJCguLg4J2QFAAAAoECVKzIkKT8/3ynPiY2NVUREhN219PR0hYeHO+X5AAAAQHVU5YqMc+fO6cSJE+rYsaPDz7JYLLJYLE7ICgAAAFUJh/FVrCq18FuSPvjgA1mtVoWFhbk6FQAAAABFqFJFxo8//qhHH31U9evX1/333+/qdAAAAAAUwbTTpdLS0pSbm6vc3FxlZWXp008/VVJSkjw9PbV27Vr5+fm5OkUAAABUUYZxuZmJ2fJxhGmLjOjoaElSjRo11KBBAwUFBWny5Mm65557KDAAAAAAEzNdkREVFaWoqKhy9U1NTXVqLqhc/zfzFlenAAAAACcwXZEBAAAAVDgT7i7lTvOlqtTCbwAAAADmR5EBAAAAwKlMWWQkJyfbDkgpqqWmpurbb79VrVq1dOeddxbq/9tvv6lJkybq1q2brFarC94AAAAAqL5MvSYjKSlJ7dq1K3S9ffv2qlevnubMmaOHH35Yt912m2677Tbb/djYWJ08eVKffPKJPD09KzNlAAAAVAFsYVuxTF1kBAcHKyQkpNj748eP19q1a/Xggw+qZ8+eslgseuutt/Tmm2/queeeK7JAAQAAAFCxTDldqqwMw1BSUpL++OMPPfDAA/r1119tBceECRNcnR4AAABQLZl6JMNqtSo3N9fummEYdlOgWrZsqWeeeUaxsbH6+uuvlZOTo6SkJHl4lF4/ZWVlKTs72+5aenq6c5IHAACAaV2eLmWu+UkmS8chpi4yunfvXuiap6dnocLjgQce0IIFC3To0CE9++yzatWqVZmen5CQoLi4OKfkCgAAAOAyUxcZS5cuVVBQkN21oirOjRs36tChQ/Lw8NDHH3+siRMnlun5sbGxioiIsLuWnp6u8PDwcucMAAAAVHemLjKCgoJKXPgtSadOndI999yjG264Qffdd5/uvfdevfHGG4qJiSn1+RaLRRaLxVnpAgAAoIowZL7pSSZLxyGmLjLKYuzYsTp58qQ+/vhjBQUFae3atXrkkUfUv39/NW3a1NXpAQAAANVOld5dat26dVq2bJlmzZplm1a1aNEieXh46N5773VxdgAAAED1ZOqRjLS0tEKLvCWpVatWMgxD999/v2688UY98sgjtntNmjTRCy+8oOjo6DJPmwIAAED14uFhyMPDXBOUzJaPI0xdZERHRxd5ffHixfroo4905swZJScnF9quNioqSm+99ZYeeeQR3XLLLWrWrFllpAsAAABAJi0yoqKiFBUVVWLMPffcU+L9Dz74wIkZoTpoeu+bDvX/eXGkkzIBYGZ5efkO9Xen31QCQHFMWWQAAAAAFcow3+5S7rS9VJVe+A0AAADAfKpMkZGcnCzDMLR7925J0owZM2QYhiwWi86cOVMovkWLFho8eHBlpwkAAABUe1WmyChOdna25s2b5+o0AAAAUIUYhmHK5i6qfJExYMAAvfDCC/r1119dnQoAAAAAuUGRMXv2bOXm5mrGjBmuTgUAAACA3GB3qebNmys2NlYvvfSSHnnkEbVt27bMfbOyspSdnW13LT093dkpAgAAwGQME+4uZbZ8HFHlRzIkacqUKapdu7aefPLJK+qXkJCg4OBguxYeHl4xSQIAAADVhFsUGY0aNdLkyZP19ttva+fOnWXuFxsbq7S0NLuWkpJScYkCAAAA1UCVny5VYMKECXr55Zc1adIkbd26tUx9LBaLLBZLBWcGAAAAszFkvt2cDDc6jc8tRjIkydfXVzNmzNC2bdv0wQcfuDodAAAAoNpymyJDksaMGaOgoCA9/vjjysvLc3U6AAAAQLXkVkWGp6en5syZo7S0NP3000+uTgcAAAAm5epD9ziMr4oJDw/XjTfe6Oo0AAAAgGqryhQZUVFRys/PV0hIiCRpxowZys/PV+PGjQvFfv7558rPz9f7779f2WkCAAAA1Z7b7C4FOOrnxZEO9X9+a/kPcnykd2uHvrsqO3XuokP9a9V07I+xGl5V5nctMAkPD/eZzlDV5OfnO9TfnaaiwHEcxlex+K8rAAAAAKeiyAAAAADgVG5RZCQnJ8swDO3evVvS5fUahmHo+PHjLs4MAAAApmSCnaQK7SzlRvOl3KLIAAAAAGAeFBkAAAAAnIrdpQAAAFDtmHF2ktnycUS1LjKysrKUnZ1tdy09vfzbkAIAAACo5kVGQkKC4uLiXJ0GAAAA4FaqdZERGxuriIgIu2vp6ekKDw93TUIAAACAG6jWRYbFYpHFYnF1GgAAAKhkl9dkmGsRhMnScQi7SwEAAABwKooMAAAAAE7lVtOl/jrkZbYhMAAAAJiDIfNNTzJZOg5xi5GMP/74Q5JUs2bNIj8DAAAAqDxuMZLx7bffysPDQ82bN7d99vPzU506dVycGaqTR3q3LnffvLx8h77bw6Pq/u6jfi1vh/ozYglUH/z7DlQdVbrI2LNnj3bt2qXExEQNGTJE+/bt0xdffKH169froYcecnV6AAAAMCnDMExXuJotH0dU6SJjxIgROn36tIYMGaIFCxbIz89Pfn5+uu+++zRnzhxXpwcAAABUS1W6yDh8+LDd57y8PBdlAgAAAKCAKRd+JycnyzAM7d69W5I0Y8YMGYah48eP22KioqJsw1yGYahGjRpq1aqVHn30Uf3++++uSh0AAABVwOXD+MzX3EWVHsnw9fXV5s2bJUmnTp3SmjVr9Nxzz+nrr7/WRx995OLsAAAAgOqpShcZHh4e6t69u+3zgAED9MMPP2jTpk06fPiwrr32WhdmBwAAAFRPppwu5YiQkBBJUmZmposzAQAAgGn9adq9WZo7zZeq0iMZRTl8+LC8vLzUsmXLUmOzsrKUnZ1tdy09Pb2iUgMAAACqhSpfZOTm5kqSTp8+rbfeekvvvPOOHn/8cVksllL7JiQkKC4urqJTBAAAAKqVKl1knDt3Tt7e9qcFjxw5Uk899VSZ+sfGxioiIsLuWnp6usLDw52VIgAAAEzIjLOTzJaPI6p0keHr66tt27ZJkn799Vc999xzWrlypTp16qTHH3+81P4Wi6VMIx4AAAAAyq5KFxkeHh62hd6S1K9fP3Xt2lVxcXEaNWqUmjVr5sLsAAAAgOrJrXaXqlmzpl555RXl5ORo9uzZrk4HAAAAJuXqnaSK3WHKTZi6yPjrD7osP/jevXtr0KBBSkpK0uHDhysqNQAAAADFMGWR8ccff0i6PDJR1OfSxMfHy2q1atasWRWTIAAAAIBimXJNxrfffisPDw81b97c9tnPz0916tSxxSQnJys5ObnI/sHBwbJarZWRKuAUHh6ODY/mWvMc6u/lacrfNwAAUGEMmW83J5Ol4xBTFRl79uzRrl27lJiYqCFDhmjfvn364osvtH79ej300EOuTg8AAABAGZiqyBgxYoROnz6tIUOGaMGCBfLz85Ofn5/uu+8+zZkzx9XpAQAAACgDUxUZf12onZfn2BQQAAAAoChm3M3JbPk4wrQTsZOTk2UYhnbv3i1JmjFjhgzD0PHjx20x+fn5evPNN9WzZ09ZLBb5+PioadOm6t+/v15//XVXpQ4AAABUa6YtMsriiSee0MiRIxUUFKTXX39dGzZs0OzZs+Xv769169a5Oj0AAACgWjLVdKkrcf78ec2fP1933323Fi1aZHcvKiqKqVYAAAAolmGYcHcpk+XjiCo7knHu3DlduHBBAQEBRd738KiyrwYAAABUaVV2JKNx48Zq3bq1EhISZLFYNGjQIF133XVXtGAmKytL2dnZdtfS09OdnSoAAABQrVTpX/evWLFCDRs21MSJExUUFKT69evr1ltv1b///W/l5+eX2j8hIUHBwcF2LTw8vOITBwAAgGv9Z3cpMzV3mi9VZUcyJOmGG25Qenq6Nm/erG3btmn37t365JNP9P7772v16tV69913SxzZiI2NVUREhN219PR0Cg0AAADAAVW6yJAkb29v9e/fX/3795cknThxQiNGjND777+vDRs2aNCgQcX2tVgsslgslZUqAAAAUC1U6elSRWnUqJEmTJggSUpLS3NtMgAAADCly7OTXD9Fyr65+qfiPFW2yLh06ZJOnDhR5L2DBw9KkgIDAyszJQAAAACqAtOl/rqmouDz6dOn1aJFC0VERKhv375q1qyZzp49q9TUVL344osKCgrS8OHDXZEyAAAAUK2Ztsj4448/JEk1a9Ys8nO9evUUFxenTz75RE8++aQyMzNlGIauvfZaTZgwQZMnT1atWrVckzwAAABQjZm2yPj222/l4eGh5s2b2z77+fmpTp06kqQaNWpo4sSJmjhxoivTBEzBy7PKzny8orNtAABwFjPuGGu2fBxhuiJjz5492rVrlxITEzVkyBDt27dPX3zxhdavX6+HHnrI1ekBAAAAKIXpiowRI0bo9OnTGjJkiBYsWCA/Pz/5+fnpvvvu05w5c1ydHgAAAIBSVOoci+TkZBmGod27dxd5/8iRIzpy5Ih+++03rVixQn5+fqpfv76Cg4M1dOhQ+fr62sXPmDHDbtsvDw8PBQQEaNCgQfr8888r45UAAABQBRly9Xa1RTS5z3wpU07kHjt2rLZv365PP/1Uzz77rL777jsNGjRI27ZtKzJ+48aN2r59uz777DO98MIL+vXXXxUWFqb/+7//q+TMAQAAAJhuupQkXXPNNerevbskqUePHmrTpo169+6tN954Q7169SoU37VrVzVu3FiSdOONN+rvf/+7WrVqpTVr1qhLly6VmjsAAABQ3ZmyyPirkJAQSVJmZmaZ4uvXry9J8vb2rrCcAAAAUHWxu1TFqhJFxuHDhyVJbdu2LfK+1WpVbm6u8vLy9OOPP2rq1KmqWbOmRowYUeJzs7KylJ2dbXctPT3dOUkDAAAA1ZQpi4y8vDzl5ubKarXq0KFDevDBBxUQEKBHHnmkyPirr77a7nO9evW0cuVKdezYscTvSUhIUFxcnNPyBgAAAGDSImPy5MmaPHmy7XPdunW1ZcsWtWjRosj4jz/+WPXr11d+fr6ysrKUmJioyMhIvfnmmxo2bFix3xMbG6uIiAi7a+np6QoPD3fGawAAAMCkCnZ0MhOz5eMIUxYZ48eP11133aULFy5ox44dmjp1qoYOHap9+/apUaNGheI7d+5sW/gtSQMHDlTHjh31v//7vyUWGRaLRRaLpULeAQAAAKiuTLmFbdOmTRUSEqIePXpo4sSJev311/XLL79o+vTpZerv4eGhDh066NixY8rKyqrgbAEAAAD8mSmLjL8aNWqUwsLCtHjxYmVkZJQab7VatX//ftWsWVP16tWrhAwBAABQpRj/3WHKLM2NzuJzzXSpzZs368iRI4Wut2/fvtg+8fHx6tatm2bNmqXXX3/d7t6ePXts29ZmZmYqMTFRhw4d0sMPPywfHx+n5g4AAACgZC4pMv68qPvPCraqLcrf//53RUREaMmSJXriiSfUqlUr270BAwbY/v9XXXWV2rRpo8TERI0ePdp5SQMAAAAok0otMqKiohQVFVViTH5+frH3Vq9ebfd5xowZmjFjhhMyAwAAQHXiYRjyMNluTmbLxxGm3F0KQNVy7kJuufvWrskfQwAAuJsqsfAbAAAAQNXBrxABAABQ7dh2dDIRs+XjCJePZCQnJ9tOXExNTS10Pz8/X61bt5ZhGAoLC7NdL+hjGIY8PT3VsGFDde7cWffff7927NhReS8AAAAAwI7Li4wCdevW1RtvvFHo+tatW/X999+rbt26he6NGDFC27dv12effaY333xTd999t3bs2KHQ0FCNHz++MtIGAAAA8BemmS51xx13aPny5XrllVfsDtB74403FBoaqt9//71QH39/f3Xv3t32uX///powYYLuu+8+LViwQO3atdODDz5YKfkDAACg6jB0eUaMmRhudBqfaUYyRo4cKUlauXKl7drp06f19ttva8yYMWV+jqenp15++WU1btxYzzzzjNPzBAAAAFAy0xQZ9erV04gRI5SYmGi7tnLlSnl4eOiOO+64omf5+vqqb9++Onz4sH7++edi47KysnTgwAG7lp6eXu53AAAAAGCi6VKSNGbMGPXp00cHDhxQhw4dlJiYqIiIiCLXY5SmefPmkqSjR4+qadOmRcYkJCQoLi7OoZwBAABQ9RiG5GGy2Ukmm73lENOMZEhS79691apVKyUmJmr//v3atWvXFU2V+rOSTg4vEBsbq7S0NLuWkpJSru8D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zQAAAAAUpcKLjIEDByowMFCJiYlFFhkrV67U+fPn7bay9ff3V/fu3W2f+/btq4yMDC1fvlw5OTny8fFRvXr17GIKXLhwQePHj5enp6feeecdNWzYsGJeDAAAAFUX86UqVIVPl/L09NTo0aO1Z88e7d+/v9D9pKQkBQQEaODAgSU+p379+jIMQ56eniXGxcbG6ssvv9SiRYt0/fXXO5I6AAAAgHKolN2lxowZI8MwlJiYaHf9m2++0ZdffqnRo0fbFQ/5+fnKzc1Vbm6uTp06pXXr1mnJkiWKjIyUt7d3sd/z6quvKjExUWPHjtVdd91Val5ZWVk6cOCAXUtPTy//iwIAAAConCKjdevW6tWrl5YtW6ZLly7ZrhcUHWPGjLGLT0hIkLe3t7y9vdWwYUOFh4frpptu0sKFC4v9ji+++ELjx49Xz5499dxzz5Upr4SEBAUHB9u18PDwK39BAAAAADaVdk5GTEyMjh8/rnfffVeSlJubq2XLlqlnz55q06aNXeztt9+uXbt2adeuXdq2bZsWLFig3bt3a8CAAbpw4UKhZx87dkwjRoyQn5+fVq9eXeJox5/FxsYqLS3NrqWkpDj8rgAAADA3w6T/uItKOydjxIgRGjt2rJKSknTbbbdp/fr1yszMVHx8fKFYPz8/hYSE2D737NlTfn5+GjlypJKTk3X//ffb7l28eFG33XabTpw4odTUVF199dVlzslischisTj2YgAAAADsVNpIhq+vr0aOHKmNGzfq2LFjSkxMVN26dRUREVGm/p06dZIk7du3z+762LFjtX37ds2fP1+hoaFOzxsAAADAlam0IkO6PGXKarXqmWee0fr16xUZGalatWqVqe/evXslyW7k4fXXX9eiRYsUHR2tBx98sCJSBgAAgBsyDHO28jp79qwmTJigwMBA+fj46Prrr9ebb75Zar933nlHI0eOVOvWreXr66sWLVpo1KhR+u6778qfjCpxupQkhYSEqFOnTpo/f77y8/Ptzsb4s8zMTO3YsUOSlJOTo71792r27Nlq0KCBoqOjJUlffvmlHnroIV199dW6++67bfF/1apVK/n5+VXMCwEAAAAmMHz4cO3atUtz585V27ZttWLFCo0cOVJ5eXm68847i+0XHx+vq6++WlOmTFHLli31008/ac6cOerSpYt27NihDh06lCufSi0ypMujGePH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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "seq.plot_confusion_matrix(dev, local_2.predict(dev), normalise=True)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Previous\n", "  \n", " Next\n", "
\n", "
Contracttalksbetweenthetwo
NNNNSINDTCD
NNPNNSINDTCD
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:contract
1.01.01.0
6.713.722.25
6.728.41-0.01
1 / 3
\n", "
UnionheadRogerToussaintcalls
NNNNNNPNNPVBZ
NNPNNNNPNNPVBZ
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:union
1.01.01.0
6.713.721.44
6.728.412.39
2 / 3
\n", "
itwasreleasedbytheNewsoftheWorldnewspaper
PRPVBDVBNINDTNNINDTNNPNN
PRPVBDVBNINDTNNPINDTNNPNN
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:news
1.01.01.0
6.713.723.98
6.728.413.08
3 / 3
\n", "
\n", "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "util.Carousel(local_2.errors(dev,\n", " filter_gold=lambda y: y=='NN',\n", " filter_guess=lambda y: y=='NNP'))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Problem 2: ambiguity\n", "\n", "*Polysemous* words or *homonyms* have multiple senses. For example, *back*:\n", "\n", "Noun:\n", "\n", "| | | | | | |\n", "|-|-|-|-|-|-|\n", "| He | is | treated | for | **back** | injury |\n", "| PRP | VBP | VBN | IN | **NN** | NN |\n", "\n", "Adverb:\n", "\n", "| | | | | | |\n", "|-|-|-|-|-|-|\n", "| He | is | sent | **back** | to | prison |\n", "| PRP | VBP | VBN | **RB** | TO | NN |\n", "\n", "Verb:\n", "\n", "| | | | | |\n", "|-|-|-|-|-|\n", "| I | can | **back** | this | up |\n", "| PRP | MD | **VB** | DT | RP |" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### What other features would you try for English POS tagging?\n", "\n", "
\n", "\n", "# [tinyurl.com/diku-nlp-pos](https://tinyurl.com/diku-nlp-pos)\n", "\n", "([Responses](https://docs.google.com/forms/d/1K8l0D6sTWmC4KmKJwr61zEN0eNjgUOpaDj3WSGxTuIM/edit#responses))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Task: Named entity recognition (NER)\n", "\n", "\n", "| |\n", "|-|\n", "| \\[Barack Obama\\]per was born in \\[Hawaii\\]gpe |\n", "\n", "\n", " per = Person\n", " gpe = Geopolitical Entity" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "... but this is not sequence labeling, is it?" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "## IOB encoding\n", "\n", "Label tokens as beginning (B), inside (I), or outside (O) a **named entity:**\n", "\n", "| | | | | | |\n", "|-|-|-|-|-|-|\n", "| Barack | Obama | was | born | in | Hawaii |\n", "| B-per | I-per | O | O | O | B-gpe |\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "+ Many tasks can be framed as sequence labelling using this idea!" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "### Named entity types in GMB dataset\n", "\n", " geo = Geographical Entity\n", " org = Organization\n", " per = Person\n", " gpe = Geopolitical Entity\n", " tim = Time indicator\n", " art = Artifact\n", " eve = Event\n", " nat = Natural Phenomenon" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "fragment" } }, "source": [ "Example sentence from GMB:" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "-" } }, "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", "
012345678910
0Iran'snewPresidentMahmoudAhmadinejadsaidTuesdaythatEuropeanincentives
1NNPPOSJJNNPNNPNNPVBDNNPINJJNNS
2B-gpeOOB-perI-perI-perOB-timOB-gpeO
\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 7 8 \\\n", "0 Iran 's new President Mahmoud Ahmadinejad said Tuesday that \n", "1 NNP POS JJ NNP NNP NNP VBD NNP IN \n", "2 B-gpe O O B-per I-per I-per O B-tim O \n", "\n", " 9 10 \n", "0 European incentives \n", "1 JJ NNS \n", "2 B-gpe O " ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame([tokens[12][:11], pos[12][:11], ents[12][:11]])" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "examples = {}\n", "counts_ent = Counter(tag[2:] for sent in ents for tag in sent if tag.startswith(\"B-\"))\n", "in_entity = False\n", "for x_s, y_s in zip(tokens, ents):\n", " for i, (x, y) in enumerate(zip(x_s, y_s)):\n", " if y == \"O\":\n", " in_entity = False\n", " continue\n", " y_ent = y[2:]\n", " if y[0] == \"B\":\n", " if y_ent not in examples or random() > 0.6:\n", " examples[y_ent] = [x]\n", " in_entity = True\n", " else:\n", " in_entity = False\n", " if y[0] == \"I\" and in_entity:\n", " examples[y_ent].append(x)\n", "\n", "sorted_ents = sorted(counts_ent.items(),key=lambda x:-x[1])\n", "sorted_ents_with_examples = [(t,c,\" \".join(examples[t])) for t,c in sorted_ents]\n", "\n", "sorted_ents_table = pd.DataFrame(sorted_ents_with_examples, columns=['Entity Type','Count','Example'])" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "pycharm": { "name": "#%%\n" }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Entity TypeCountExample
0geo2070Dujail
1org1237Ethiopia and Eritrea
2gpe1230Iraqi
3tim11601982
4per1107Saddam Hussein
5art53USA Today
6eve45Summer Olympics
7nat20H5N1
\n", "
" ], "text/plain": [ " Entity Type Count Example\n", "0 geo 2070 Dujail\n", "1 org 1237 Ethiopia and Eritrea\n", "2 gpe 1230 Iraqi\n", "3 tim 1160 1982\n", "4 per 1107 Saddam Hussein\n", "5 art 53 USA Today\n", "6 eve 45 Summer Olympics\n", "7 nat 20 H5N1" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sorted_ents_table" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Can we run our simple **local model** on this?" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "0.9348182883939039" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train_ner = list(zip(tokens[:-200], ents[:-200]))\n", "dev_ner = list(zip(tokens[-200:], ents[-200:]))\n", "\n", "def feat_2(x,i):\n", " return {\n", " 'bias': 1.0,\n", " 'word:' + x[i].lower(): 1.0,\n", " 'first_upper:' + str(x[i][0].isupper()): 1.0,\n", " }\n", "local_2 = seq.LocalSequenceLabeler(feat_2, train_ner)\n", "local_2_pred_dev = local_2.predict(dev_ner)\n", "seq.accuracy(dev_ner, local_2_pred_dev)" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "This seems great, but tag distribution is also **highly skewed**:" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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bt26mddff9389a9/NQkJCUaSWb58uXvclTj3muxHxhiTmZlpJJn77rvPvPvuu2bp0qXm6quvNi1atDCfffbZRede0/l/+eWXZurUqUaSWbFihdm2bZvZtm2b+eabb4wxxvTr18/069fPPf6LL74wkkzHjh3NsGHDzJo1a8yyZctMaGioufbaa839999vxo8fb9auXWteeOEFExgYaIYNG1bjudblGK3pczZ27FjTpEkT06lTJ/PUU0+Z3Nxcs379enP27Flzyy23GF9fXzNv3jzz/vvvm4yMDHPNNdcYSeaJJ56wNt/aPNYTTzzhfs4fffRRs379evPss8+agIAA06tXL/Pdd9+5x9b2deXcbbnYfl5UVGTatm1rWrVqZV544QWzbt06M2XKFCPJTJw40T2uYh9p27atiY+PN2+//bZ5//33zRdffFGrY+VCc/X2ed+2bZvx8/MzgwcPdu/rFc/Lpk2bjCSzadMm9/ixY8eapk2bmuuuu84sXLjQfPDBByYpKclIMo8//ri59tprzcsvv2zWr19vhg4daiSZjz76qMbbcbHn/FL821e3/19srnU5Nm2/Zl9oH7ucx2ZNf97W9Nipq/LycuPv729iYmIuOO7GG280/v7+pry83NpjX0mI7Mus4qA7/8vpdJrs7OyL3n/btm1GknnmmWc8ln/55ZfGz8/PzJw5073s+uuvNzfddJPHuOzsbCPJ5OfnG2OMOXDggPHx8TFTp071GHfy5EnTunVrc/fdd1e7DRd7UR40aJBp166dO5IqTJkyxfj6+ppjx44ZY4z561//aiSZ999/3z2mvLzctGnTxtx1113uZQ899JAJDAw0+/fv91jfggULjKRqf3DXdt59+vQx7du3N2fOnHEvO3nypAkKCqoysv38/DyitLy83ERERJjw8PArdu413Y+OHz/uDoFzHThwwDidTjN69OgLzqe2858/f76RZL744otKt1UX2dHR0R7/gfbcc88ZSebnP/+5x/1nzJhhJFXaH6ubq7fHaG2es7FjxxpJ5pVXXvEY++677xpJ5vnnn/dY/tRTT1Ub2d7OtzaPVRFaDz/8sMfY1157zUgyy5Ytc29rbV9Xzt2Wi+0nycnJRpLZsWOHx/KJEycah8Nh9uzZY4z5cR/p0qWLRwQaU7vj/EJz9fZ5N8aYgIAAM3bs2ErLq4tsSeYvf/mL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6N///rf+9re/KTIy0uNgHDhwoNq1a6dJkybp0KFDlcK1U6dOevLJJ5WSkqK9e/e6r995+PBhffjhhwoICFBGRoZX27hw4ULdcsstuvXWWzVx4kR16tRJJ0+eVGFhoVavXl3p3K/x48froYce0tdff62bbrpJXbt29bj9ySef1AcffKCbbrpJ06ZNU9euXVVaWqp9+/bpvffe0wsvvFDlfy3X1pNPPqkhQ4Zo0KBBmj59us6ePav58+crMDBQx44dqzQ+ODhYt912m9LS0hQQEKDs7Gzt3r3b44XwSpt7Tfejli1bKi0tTbNmzdIDDzyg++67T8XFxcrIyJCvr6+eeOKJOs/5XJGRkZJ+2HfGjh2rJk2aqGvXrmrWrJnVx6kJb49RG89ZQkKCbr75Zj3yyCP6z3/+o969e2vbtm1aunSpJHmcg17X+XrzWCtWrJCPj48GDBigXbt2KS0tTdHR0e7/YLuUryuS9PDDD2vp0qUaMmSInnzySXXs2FHvvvuusrOzNXHiRF177bUXXUdtj/PqePu8Sz/s75s3b9bq1asVFhamZs2aVXrdu9LU97+9VLfnXLr8r9mX49is6c9bG8dOTd1888167rnnNGPGDN1yyy2aMmWKOnTooAMHDigrK0s7duzQc889p5tuusnaY15x6uGPLf+rVfXXxi1atDA9e/Y0zz77rCktLa3Rel555RUTExNjAgICjJ+fn+nSpYt54IEHqrxk06xZs9yXLTr/MnkVVq1aZeLj403z5s2N0+k0HTt2NCNHjjQbNmyodhsu9tfoxvzwl9fjx483bdu2NU2aNDGtWrUyN910k5kzZ06lsd98843x8/Or8tKDFY4cOWKmTZtmOnfubJo0aWJcLpfp3bu3SUlJMd9+++0F51Kbea9cudJERkaapk2bmg4dOph58+aZadOmmauuuspjnCQzefJkk52dbbp06WKaNGliIiIizGuvvXbFz92Ymu9Hf/zjH01UVJRp2rSpadGihbnzzjsvekUUb+f/+OOPmzZt2phGjRp5XGGhuquLzJ8/3+P+FVdmOPdyXLWZg61jtCbP2dixY01AQECV9z927JhJSkoyLVu2NP7+/mbAgAFm+/btRpJZuHCh1fnW9LEqrjDx8ccfm2HDhpnAwEDTrFkzc99991V5dYDavK6cuy012U/2799vRo8ebYKCgkyTJk1M165dzfz58z1e46rbRyrU5lipbq51ed4/+eQTc/PNNxt/f38jyb1/V3d1kar2lX79+pnu3btXWt6xY0czZMiQGm9HTa8uYvPf/kL7/4XmWpfn3PZr9oX2sct5bFbMpSY/b2ty7Ni0bds2M3LkSBMaGmp8fHxMSEiIGTFihNm6deslebwrCZEN1MB3331nunXrZgYMGOCxvOIF+0pW3dzR8FRcLu3vf/97vTxWRWgdOXLkkj9+feBYqd5P5d++IbxmX8zlfB1A3XC6CFCFX/7ylxowYIDCwsJ06NAhvfDCC/rnP/+phQsX1vfULqohzx0/ev3113Xw4EFFRkaqUaNG2r59u+bPn6+f/exn1n+9ejkf60rCsYIr3X/rsflTQWQDVTh58qR+/etf68iRI2rSpImuv/56vffee7r99tvre2oX1ZDnjh81a9ZMb7zxhubMmaNTp04pLCxM48aN05w5cxr0Y11JOFZwpftvPTZ/KhzG/P9XAgcAAABgBR9GAwAAAFhGZAMAAACWEdkAAACAZUQ2AAAAYBmRDQAAAFhGZAMAAACWEdkAAACAZUQ2AAAAYBmRDQAAAFhGZAMAAACWEdkAAACAZf8f+duoeDNdtXoAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "hist = Counter(tag for _, tags in dev_ner for tag in tags)\n", "plt.bar(sorted(hist.keys(), key=hist.get), sorted(hist.values()))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "A baseline that always predicts `O` is already pretty good:" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "0.8527549824150059" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "only_o = [tuple(['O'] * len(tags)) for _, tags in dev_ner]\n", "seq.accuracy(dev_ner, only_o)" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "def get_spans(labels):\n", " spans = []\n", " current = [None, None, None]\n", " for i, label in enumerate(labels):\n", " if label.startswith(\"I-\") and label[2:] == current[0]:\n", " # continued span\n", " continue\n", " # push span, if there is any\n", " if current[0] is not None:\n", " current[2] = i\n", " spans.append(current)\n", " current = [None, None, None]\n", " if label.startswith(\"B-\"):\n", " current[0] = label[2:]\n", " current[1] = i\n", " if current[0] is not None:\n", " current[2] = len(labels)\n", " spans.append(current)\n", " return spans\n", "\n", "def _calculate_prf(preds, golds):\n", " total_pred, total_gold, match = 0, 0, 0\n", " for pred, gold in zip(preds, golds):\n", " pred_s = get_spans(pred)\n", " gold_s = get_spans(gold)\n", " total_pred += len(pred_s)\n", " total_gold += len(gold_s)\n", " match += sum(s in pred_s for s in gold_s)\n", " # precision: % of entities found by the system that are correct\n", " p = match / total_pred if total_pred else 0.0\n", " # recall: % of entities in dataset found by the system\n", " r = match / total_gold if total_gold else 0.0\n", " # f-score: harmonic mean of precision and recall\n", " f = 2 * (p * r) / (p + r) if p + r else 0.0\n", "\n", " return p, r, f\n", "\n", "def print_prf(goldset, preds):\n", " p, r, f = _calculate_prf(preds, [s[1] for s in goldset])\n", " print(f\"precision: {p:.2f}\\nrecall: {r:.2f}\\nf-score: {f:.2f}\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Tasks like NER are more commonly evaluated with...\n", "\n", "### Precision, recall, and F-score\n", "\n", "\\begin{align}\n", "\\text{precision} & = \\frac{|\\text{predicted}\\cap\\text{annotated}|}{|\\text{predicted}|} \\\\[.5em]\n", "\\text{recall} & = \\frac{|\\text{predicted}\\cap\\text{annotated}|}{|\\text{annotated}|} \\\\[.5em]\n", "F & = 2 \\cdot \\frac{\\text{precision}\\cdot\\text{recall}}{\\text{precision}+\\text{recall}} \\\\\n", "\\end{align}\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Example:" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "slideshow": { "slide_type": "-" } }, "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", "
0123456789101112
0Thenewspapersaysthetapewasshotin2004insouthernIraq.
1OOOOOOOOB-timOB-geoI-geoO
2OOOOOOOOB-timOOB-geoO
\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 7 8 9 10 11 \\\n", "0 The newspaper says the tape was shot in 2004 in southern Iraq \n", "1 O O O O O O O O B-tim O B-geo I-geo \n", "2 O O O O O O O O B-tim O O B-geo \n", "\n", " 12 \n", "0 . \n", "1 O \n", "2 O " ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame([dev_ner[18][0], dev_ner[18][1], local_2_pred_dev[18]])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "predicted = {2004, Iraq}\n", "\n", "annotated = {2004, southern Iraq}" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "precision: 0.50\n", "recall: 0.50\n", "f-score: 0.50\n" ] } ], "source": [ "print_prf([dev_ner[18]], [local_2_pred_dev[18]])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "back to the full dev set..." ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "precision: 0.73\n", "recall: 0.59\n", "f-score: 0.65\n" ] } ], "source": [ "local_2_pred_dev = local_2.predict(dev_ner)\n", "print_prf(dev_ner, local_2_pred_dev)" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "precision: 0.00\n", "recall: 0.00\n", "f-score: 0.00\n" ] } ], "source": [ "print_prf(dev_ner, only_o)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Sequence labelling with neural networks" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "fragment" } }, "source": [ "We can use BiLSTMs for that!\n", "\n", "
\n", " \n", "
\n", "\n", "Source: https://guillaumegenthial.github.io/sequence-tagging-with-tensorflow.html" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "### Reminder\n", "A recurrent neural network (plain RNN, LSTM, GRU, ...) computes its output based on a hidden, internal state:\n", "\n", "$$\n", " {\\mathbf{y}}_{t} = \\text{RNN}(\\x_t, {\\mathbf{h}}_{t})\n", "$$\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "\n", "A **bi-directional** RNN is just two uni-directional RNNs combined:\n", "\n", "\\begin{align}\n", " \\overrightarrow{\\mathbf{y}_{t}} & = \\overrightarrow{\\text{RNN}}(\\x_t, \\overrightarrow{\\mathbf{h}_{t}})\\\\\n", " \\overleftarrow{\\mathbf{y}_{t}} & = \\overleftarrow{\\text{RNN}}(\\x_t, \\overleftarrow{\\mathbf{h}_{t}})\n", " \\\\\n", " {\\mathbf{y}}_{t} & = \\overrightarrow{\\mathbf{y}_{t}} \\oplus \\overleftarrow{\\mathbf{y}_{t}} \\\\\n", "\\end{align}\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "To predict label probabilities, we use the **softmax function**:\n", "\n", "\n", "$$\n", "\\begin{aligned}\n", " {\\mathbf{y}}_{t} & = \\overrightarrow{\\mathbf{y}_{t}} \\oplus \\overleftarrow{\\mathbf{y}_{t}} \\\\\n", " \\hat{\\mathbf{y}}_{t} & = \\text{softmax}(\\mathbf{W}^o \\mathbf{y}_{t}) \\in \\mathbb{R}^{|V|} \\\\\n", "\\end{aligned}\n", "$$\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "We can also use transformers such as BERT\n", "![bert_ner](../img/bert_ner.png)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "### Note on tokenisation\n", "\n", "Parts of speech are defined for *words*.\n", "\n", "Tagger must output one tag per word even if using other tokenisation internally." ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "skip" } }, "source": [ "### Tokenisation\n", "Combining word representations with character representations improves POS tagging:\n", "\n", "
\n", " \n", "
\n", "\n", "([Plank et al., 2016](https://aclanthology.org/P16-2067/))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "### An important technical detail\n", "\n", "The linear transformation $\\mathbf{W}^o \\mathbf{y}_{t}$ is usually not modelled as part of the RNN itself in most deep learning frameworks.\n", "\n", "Instead, look for one of\n", "\n", "+ **feed-forward layer**\n", "+ **dense layer** (*e.g. in Keras*)\n", "+ **linear layer** (*e.g. in PyTorch*)\n", "\n", "with a softmax activation" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "### Is it all the same?\n", "\n", "Remember the log-linear classifier:\n", "\n", "$$\n", " p_\\params(y\\bar\\x,i) = \\frac{1}{Z_\\x} \\exp \\langle \\repr(\\x,i),\\params_y \\rangle\n", "$$\n", "\n", "A neural sequence model with a softmax layer on top is also modelling $p_\\params(y\\bar\\x,i)$\n", "\n", "So if you take $\\params$ to be the set of parameters of the neural network, then:\n", "\n", "\\begin{align}\n", " \\hat{\\mathbf{y}}_{t} & = \\text{softmax}(\\hat{\\mathbf{h}}_{t}) \\\\\n", " &= \\frac{1}{Z_\\x} \\exp \\langle \\hat{\\mathbf{h}}_{t},\\params_y \\rangle \\\\\n", "\\end{align}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "### What is the difference?\n", "\n", "
\n", "\n", "# [tinyurl.com/diku-nlp-seq](https://tinyurl.com/diku-nlp-seq)\n", "\n", "([Responses](https://docs.google.com/forms/d/1X6LKsQ3a9_XcsZm5gpa8p-q9brXosjlbTubp2nqR1pk/edit#responses))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "### Solution\n", "\n", "* Incorrect: That neural sequence models can use context: log-linear models can too\n", "* Correct: That neural sequence models have more parameters (generally)\n", "* Incorrect: That neural sequence models are global (not local) models (both can be either local or global)\n", "* Correct: That neural sequence models learn features on their own\n", "* Correct: That log-linear models can only combine features linearly\n", "* Incorrect: That log-linear models perform greedy inference\n", "* Incorrect: That log-linear models can only use the left context (preceding tokens)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "What haven't we modelled yet?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "## There are *dependencies* between consecutive labels!" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "Can you think about fitting words for this POS tag sequence?\n", "\n", "| | | |\n", "|-|-|-|\n", "| DT | JJ | NN |\n", "| *determiner* | *adjective* | *noun (singular or mass)* |" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "What about this one?\n", "\n", "| | |\n", "|-|-|\n", "| DT | VB |\n", "| *determiner* | *verb (base form)* |" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "+ After determiners (`DT`), adjectives and nouns are much more likely than verbs\n", "+ *Local* models cannot *directly* capture this" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Previous\n", "  \n", " Next\n", "
\n", "
FormerU.S.presidentBillClintonhassignedan
OB-geoOB-perI-perOOO
OB-geoOI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:bill
1.01.01.0
0.601.141.72
1.270.962.54
1 / 85
\n", "
Mondayinthecapital,PhnomPenh.
B-timOOOOB-orgI-orgO
B-timOOOOI-perI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:phnom
1.01.01.0
0.840.880.00
1.270.960.00
2 / 85
\n", "
TheformerpresidentisinCambodiatotourAIDS-relatedprojects
OOOOOB-geoOOOO
OOOOOI-perOOI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:cambodia
1.01.01.0
1.340.520.00
1.270.960.00
3 / 85
\n", "
hisdevelopmentgroup,theClintonFoundationH.I.V./AIDSInitiative.
OOOOOB-perI-perI-perI-perO
OOOOOI-perOI-perI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:clinton
1.01.01.0
0.601.142.71
1.270.963.70
4 / 85
\n", "
HesaidthereishopeCambodiacanbeamodel
OOOOOB-geoOOOO
OOOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:cambodia
1.01.01.0
1.340.520.00
1.270.960.00
5 / 85
\n", "
Cambodiahasreducedadultinfection
B-geoOOOO
I-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:cambodia
1.01.01.0
1.340.520.00
1.270.960.00
6 / 85
\n", "
inthecity'sbusyBakaramarket.
OOOOOB-geoOO
OOOOOI-perOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:bakara
1.01.01.0
1.340.520.00
1.270.960.00
7 / 85
\n", "
Insurgentgroupsal-ShababandHizbulIslamaretryingto
OOOOB-perI-perOOO
OOOOI-perB-geoOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:hizbul
1.01.01.0
0.601.140.00
1.270.960.00
8 / 85
\n", "
ThefounderofMicrosoft,BillGates,
OOOB-orgOB-perI-perO
OOOI-perOI-perI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:microsoft
1.01.01.0
0.840.880.00
1.270.960.00
9 / 85
\n", "
ThefounderofMicrosoft,BillGates,hasreceived
OOOB-orgOB-perI-perOOO
OOOI-perOI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:bill
1.01.01.0
0.601.141.72
1.270.962.54
10 / 85
\n", "
andpushedthroughcrowdsatHanoiUniversitySaturday,where
OOOOOB-orgI-orgB-timOO
OOOOOI-perI-orgB-timOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:hanoi
1.01.01.0
0.840.880.00
1.270.960.00
11 / 85
\n", "
HanoiUniversitySaturday,whereGateswasdeliveringaspeech
B-orgI-orgB-timOOB-perOOOO
I-perI-orgB-timOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:gates
1.01.01.0
0.601.141.82
1.270.961.40
12 / 85
\n", "
Earlier,GatesmetPrimeMinisterPhan
OOB-perOB-perOB-per
OOI-perOB-perI-perI-per
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:gates
1.01.01.0
0.601.141.82
1.270.961.40
13 / 85
\n", "
,GatesmetPrimeMinisterPhanVanKhaiandPresident
OB-perOB-perOB-perI-perI-perOB-per
OI-perOB-perI-perI-perB-geoI-perOB-per
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:phan
1.01.01.0
0.601.140.00
1.270.960.00
14 / 85
\n", "
,theVietnameseleadersandGatessignedanagreementto
OOB-gpeOOB-perOOOO
OOB-gpeOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:gates
1.01.01.0
0.601.141.82
1.270.961.40
15 / 85
\n", "
signedanagreementtouseMicrosoftsoftwareinVietnam's
OOOOOB-orgOOB-geoO
OOOOOI-perOOB-geoO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:microsoft
1.01.01.0
0.840.880.00
1.270.960.00
16 / 85
\n", "
Gates'triptoHanoi
B-perOOOB-geo
I-perOOOI-per
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:gates
1.01.01.0
0.601.141.82
1.270.961.40
17 / 85
\n", "
Gates'triptoHanoiisseenasanother
B-perOOOB-geoOOOO
I-perOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:hanoi
1.01.01.0
1.340.520.00
1.270.960.00
18 / 85
\n", "
techdealwhenleadingchipmakerIntelCorporationannounceditwas
OOOOOB-orgI-orgOOO
OOOOOI-perI-orgOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:intel
1.01.01.0
0.840.880.00
1.270.960.00
19 / 85
\n", "
KandaniNgwira,whoworks
B-perI-perOOO
I-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:kandani
1.01.01.0
0.601.140.00
1.270.960.00
20 / 85
\n", "
AMalawijournalistwhoworksfor
OB-gpeOOOO
OI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:malawi
1.01.01.0
-2.953.920.00
1.270.960.00
21 / 85
\n", "
KandaniNgwiracontactedmediaoutlets
B-perI-perOOO
I-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:kandani
1.01.01.0
0.601.140.00
1.270.960.00
22 / 85
\n", "
NgwiraworksfortheWeekly
B-perOOOB-org
I-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:ngwira
1.01.01.0
0.601.140.00
1.270.960.00
23 / 85
\n", "
,anewspaperthattheMalawiangovernmenttriedtoban
OOOOOB-gpeOOOO
OOOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:malawian
1.01.01.0
-2.953.920.00
1.270.960.00
24 / 85
\n", "
Nationalpolicespokesman,WillyMwaluka,sayshe
OOOOB-perI-perOOO
B-orgOOOI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:willy
1.01.01.0
0.601.140.00
1.270.960.00
25 / 85
\n", "
hehadnoinformationaboutNgwira'sdetention.
OOOOOB-perOOO
OOOOOI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:ngwira
1.01.01.0
0.601.140.00
1.270.960.00
26 / 85
\n", "
sayshewasarrestedinBlantyreandtransportedtothe
OOOOOB-geoOOOO
OOOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:blantyre
1.01.01.0
1.340.520.00
1.270.960.00
27 / 85
\n", "
transportedtothecapital,Lilongwe.
OOOOOB-geoO
OOOOOI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:lilongwe
1.01.01.0
1.340.520.00
1.270.960.00
28 / 85
\n", "
BlantyreNewspapersLimited,which
B-orgI-orgI-orgOO
I-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:blantyre
1.01.01.0
0.840.880.00
1.270.960.00
29 / 85
\n", "
isprovidingalawyerforNgwira.
OOOOOB-perO
OOOOOI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:ngwira
1.01.01.0
0.601.140.00
1.270.960.00
30 / 85
\n", "
followeffortsbyPalestinianleaderMahmoudAbbastopersuademilitants
OOOB-gpeOB-perI-perOOO
OOOB-gpeOI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:mahmoud
1.01.01.0
0.601.143.73
1.270.964.44
31 / 85
\n", "
'schiefveterinaryofficial,ValerySitnikov,saidbio-terrorism
OOOOOB-perI-perOOO
OOOOOI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:valery
1.01.01.0
0.601.140.00
1.270.960.00
32 / 85
\n", "
MostofthevictimswereAsians.
OOOOOB-gpeO
OOOOOI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:asians
1.01.01.0
-2.953.920.00
1.270.960.00
33 / 85
\n", "
'sDeputyForeignMinister,ChoeSuHon,said
OOOOOB-orgI-orgI-orgOO
OOB-perI-perOI-perI-perI-perOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:choe
1.01.01.0
0.840.880.00
1.270.960.00
34 / 85
\n", "
Meanwhile,Japan'sKyodonewsagencyreportsPyongyang
OOB-geoOB-geoOOOB-geo
OOB-geoOI-perOOOB-tim
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:kyodo
1.01.01.0
1.340.520.00
1.270.960.00
35 / 85
\n", "
Stanley\"Tookie\"Williams
B-perOB-perOB-per
I-perOI-perOI-per
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:stanley
1.01.01.0
0.601.140.00
1.270.960.00
36 / 85
\n", "
Stanley\"Tookie\"Williamshasbeen
B-perOB-perOB-perOO
I-perOI-perOI-perOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:tookie
1.01.01.0
0.601.140.00
1.270.960.00
37 / 85
\n", "
Stanley\"Tookie\"Williamshasbeenconvictedof
B-perOB-perOB-perOOOO
I-perOI-perOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:williams
1.01.01.0
0.601.14-0.28
1.270.962.04
38 / 85
\n", "
theco-founderoftheinfamousCripsstreetgang.
OOOOOB-geoOOO
OOOOOI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:crips
1.01.01.0
1.340.520.00
1.270.960.00
39 / 85
\n", "
hasattractedinternationalattentionbecauseWilliamsistheauthorof
OOOOOB-perOOOO
OOOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:williams
1.01.01.0
0.601.14-0.28
1.270.962.04
40 / 85
\n", "
thebooksareevidencethatWilliamshasturnedhislife
OOOOOB-perOOOO
OOOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:williams
1.01.01.0
0.601.14-0.28
1.270.962.04
41 / 85
\n", "
Williamshasapologizedforhis
B-perOOOO
I-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:williams
1.01.01.0
0.601.14-0.28
1.270.962.04
42 / 85
\n", "
theCaliforniahighcourtupheldWilliams'conviction.
OB-geoOOOB-perOOO
OB-geoOOOI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:williams
1.01.01.0
0.601.14-0.28
1.270.962.04
43 / 85
\n", "
Mr.Schwarzenegger'sdecisiononclemency
B-perB-orgOOOO
B-perI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:schwarzenegger
1.01.01.0
0.840.880.00
1.270.960.00
44 / 85
\n", "
themhighlyfavoredtwo-timepresidentAkbarHashemiRafsanjani.
OOOOB-perB-orgI-orgI-orgO
OOOOOI-perI-perI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:akbar
1.01.01.0
0.840.880.00
1.270.960.00
45 / 85
\n", "
ofthenationalpolice,BagerQalibaf,andthe
OOOOOB-perI-perOOO
OOOOOI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:bager
1.01.01.0
0.601.140.00
1.270.960.00
46 / 85
\n", "
themayorofTehran,MahmoudAhmadinejad,arealso
OOOB-geoOB-geoI-geoOOO
OOOB-geoOI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:mahmoud
1.01.01.0
1.340.52-1.62
1.270.964.44
47 / 85
\n", "
willbescreenedbytheGuardiansCouncil,whichwill
OOOOOB-orgI-orgOOO
OOOOOI-perI-orgOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:guardians
1.01.01.0
0.840.880.00
1.270.960.00
48 / 85
\n", "
crowdinBeirutTuesday,HassanNasrallahaccusedMr.Bush
OOB-geoB-timOB-perI-perOB-perI-per
OOB-geoB-timOI-perI-perOB-perI-per
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:hassan
1.01.01.0
0.601.141.75
1.270.962.63
49 / 85
\n", "
HealsoassertedthattheBushadministrationorderedIsraelto
OOOOOB-perOOB-geoO
OOOOOI-perOOB-geoO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:bush
1.01.01.0
0.601.143.09
1.270.963.80
50 / 85
\n", "
ofasecurityconferenceinMunich,Mr.Annansaid
OOOOOB-orgI-orgB-perI-perO
OOOOOI-perOB-perI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:munich
1.01.01.0
0.840.880.00
1.270.960.00
51 / 85
\n", "
alargeaudienceattheSummerOlympicsinBeijing.
OOOOOB-eveI-eveOB-geoO
OOOOOI-eveOOB-geoO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:summer
1.01.01.0
-0.47-0.42-0.03
-1.330.353.15
52 / 85
\n", "
VOA'sMelindaSmithhasdetailsof
B-orgOB-perI-perOOO
B-orgOI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:melinda
1.01.01.0
0.601.140.00
1.270.960.00
53 / 85
\n", "
16prisonerswerekilledatUribanaprisonwhenrivalgangs
OOOOOB-geoOOOO
OOOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:uribana
1.01.01.0
1.340.520.00
1.270.960.00
54 / 85
\n", "
Service,spokeMondayinOttawatoalegislativecommittee
I-orgOOB-timOB-geoOOOO
OOOB-timOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:ottawa
1.01.01.0
1.340.520.00
1.270.960.00
55 / 85
\n", "
HoopertoldthelawmakersCanada
B-perOOOB-geo
I-perOOOB-org
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:hooper
1.01.01.0
0.601.140.00
1.270.960.00
56 / 85
\n", "
Hoopersaidthatmanyof
B-perOOOO
I-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:hooper
1.01.01.0
0.601.140.00
1.270.960.00
57 / 85
\n", "
SaturdaybeforeMr.Chavez'safternoondeparture.
B-timOB-perI-perOB-timOO
B-timOB-perI-perOI-timOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Falseword:afternoon
1.01.01.0
0.662.77-0.14
0.382.734.59
58 / 85
\n", "
sendelectionobserverstomonitorSuriname'sparliamentaryelectionsto
OOOOOB-geoOOOO
OOOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:suriname
1.01.01.0
1.340.520.00
1.270.960.00
59 / 85
\n", "
TheOASandSurinameofficialsagreedtothe
B-orgI-orgOB-geoOOOO
OI-perOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:suriname
1.01.01.0
1.340.520.00
1.270.960.00
60 / 85
\n", "
TherulingcoalitioninSurinamefacesoppositionfromthe
OOOOB-geoOOOO
OOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:suriname
1.01.01.0
1.340.520.00
1.270.960.00
61 / 85
\n", "
itsleader,formerdictatorDesiBouterse,wouldbecome
OOOOOB-perI-perOOO
OOOOOI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:desi
1.01.01.0
0.601.140.00
1.270.960.00
62 / 85
\n", "
haswarnedthatrelationswithSurinamewouldsufferifBouterse
OOOOOB-geoOOOB-per
OOOOOI-perOOOI-per
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:suriname
1.01.01.0
1.340.520.00
1.270.960.00
63 / 85
\n", "
withSurinamewouldsufferifBoutersetakespower.
OB-geoOOOB-perOOO
OI-perOOOI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:bouterse
1.01.01.0
0.601.140.00
1.270.960.00
64 / 85
\n", "
HewasconvictedintheNetherlandssixyearsagofor
OOOOOB-geoB-timOOO
OOOOOI-geoOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:netherlands
1.01.01.0
1.340.522.26
0.330.243.73
65 / 85
\n", "
wasneversenttotheNetherlandsasthetwocountries
OOOOOB-geoOOOO
OOOOOI-geoOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:netherlands
1.01.01.0
1.340.522.26
0.330.243.73
66 / 85
\n", "
Bouterse,whoisan
B-perOOOO
I-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:bouterse
1.01.01.0
0.601.140.00
1.270.960.00
67 / 85
\n", "
asuccessfulmilitarycoupinSurinamein1980,and
OOOOOB-geoOB-timOO
OOOOOI-perOB-timOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:suriname
1.01.01.0
1.340.520.00
1.270.960.00
68 / 85
\n", "
,84-year-oldpopesuffersfromParkinson'sdiseaseandarthritis
OOOOOB-geoOOOO
OOOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:parkinson
1.01.01.0
1.340.520.00
1.270.960.00
69 / 85
\n", "
overthreeothertowns-Qalqiliya,BethlehemandRamallah
OOOOOB-geoOB-geoOB-geo
OOOOOI-perOI-perOB-geo
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:qalqiliya
1.01.01.0
1.340.520.00
1.270.960.00
70 / 85
\n", "
othertowns-Qalqiliya,BethlehemandRamallah.
OOOB-geoOB-geoOB-geoO
OOOI-perOI-perOB-geoO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:bethlehem
1.01.01.0
1.340.520.00
1.270.960.00
71 / 85
\n", "
build3,500newhomesinMaaleAdumin,thelargest
OOOOOB-geoI-geoOOO
OOOOOI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:maale
1.01.01.0
1.340.520.00
1.270.960.00
72 / 85
\n", "
theyenteredthebarinMichoacanstatebeforedawnWednesday
OOOOOB-geoOOOB-tim
OOOOOI-perOOOB-tim
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:michoacan
1.01.01.0
1.340.520.00
1.270.960.00
73 / 85
\n", "
Mexico'sPresident-electFelipeCalderonhasvowedto
B-geoOOB-perI-perOOO
B-geoOI-perI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:felipe
1.01.01.0
0.601.141.74
1.270.962.23
74 / 85
\n", "
PrimeMinisterBenjaminNetanyahutoldhisCabinet
B-perOB-perI-perOOO
B-perI-perI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:benjamin
1.01.01.0
0.601.14-0.28
1.270.962.04
75 / 85
\n", "
Theregionalbloc-IGAD-hasdecidedto
OOOOB-orgOOOO
OOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:igad
1.01.01.0
0.840.880.00
1.270.960.00
76 / 85
\n", "
totheholycityofMecca,wheresomeof
OOOOOB-geoOOOO
OOOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:mecca
1.01.01.0
1.340.520.00
1.270.960.00
77 / 85
\n", "
theminorpilgrimageknownasOmra.
OOOOOB-geoO
OOOOOI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:omra
1.01.01.0
1.340.520.00
1.270.960.00
78 / 85
\n", "
OnlyMuslimsareallowedinMecca.
OOOOOB-geoO
OOOOOI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:mecca
1.01.01.0
1.340.520.00
1.270.960.00
79 / 85
\n", "
theterroristgrouphastargetedWesternersinthepast.
OOOOOB-orgOOOO
OOOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:westerners
1.01.01.0
0.840.880.00
1.270.960.00
80 / 85
\n", "
authoritiessayformerPrimeMinisterYvonNeptuneandformerInterior
OOOB-perOB-perI-perOOO
OOOB-perI-perI-perI-perOOB-per
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:yvon
1.01.01.0
0.601.140.00
1.270.960.00
81 / 85
\n", "
NeptuneandformerInteriorMinisterJocelermePrivertarebackin
I-perOOOOB-perI-perOOO
I-perOOB-perI-perI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:jocelerme
1.01.01.0
0.601.140.00
1.270.960.00
82 / 85
\n", "
areaccusedofviolenceagainstAristideopponents.
OOOOOB-perOO
OOOOOI-perOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:aristide
1.01.01.0
0.601.140.00
1.270.960.00
83 / 85
\n", "
TheSecurityCouncilhasthreatenedsanctions
OB-orgI-orgOOO
OI-orgI-orgOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:security
1.01.01.0
0.840.881.28
0.970.503.60
84 / 85
\n", "
ofdozensofvillagersinDujail.
OOOOOB-geoO
OOOOOI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:dujail
1.01.01.0
1.340.520.00
1.270.960.00
85 / 85
\n", "
\n", "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "util.Carousel(local_2.errors(dev_ner,\n", " filter_guess=lambda y: y.startswith(\"I-\"),\n", " filter_gold=lambda y: y.startswith(\"B-\")))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "In the IOB tagging scheme:\n", "\n", "+ `I-[label]` can logically **only** appear after `B-[label]`!\n", "\n", "The following can **never** be valid tag sequences:\n", "\n", "* `O I-per`\n", "\n", "* `B-per I-geo`\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "Remember that\n", "\n", "$$\n", "p_\\params(\\y|\\x) = \\prod_{i=1}^n p_\\params(y_i|\\x,i,y_{1,\\ldots,i-1})\n", "$$\n", "\n", "What if we went from this...\n", "\n", "$$\n", "\\approx \\prod_{i=1}^n p_\\params(y_i|\\x,i)\n", "$$\n", "\n", "...to this?\n", "\n", "$$\n", "\\approx \\prod_{i=1}^n p_\\params(y_i|\\x,\\color{red}{y_{i-1}},i)\n", "$$\n" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "scrolled": true, "slideshow": { "slide_type": "skip" } }, "source": [ "Does this remind you of anything you've seen in previous lectures?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "### First-order Markov assumption\n", "\n", "* Probability of a label depends only on (the input and) the previous label\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "### Example\n", "\n", "$$\n", "\\prob_\\params(\\text{\"O I-per I-per\"} \\bar \\text{\"president Bill Clinton\"}) = \\\\\n", "\\prob_\\params(\\text{\"O\"}\\bar \\text{\"president Bill Clinton\"},\\text{\"\"},1) ~ \\cdot \\\\\n", "\\prob_\\params(\\text{\"I-per\"} \\bar \\text{\"president Bill Clinton\"},\\text{\"O\"},2) ~ \\cdot \\\\\n", "\\prob_\\params(\\text{\"I-per\"} \\bar \\text{\"president Bill Clinton\"},\\text{\"I-per\"},3) \\\\\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "skip" } }, "source": [ "## Maximum Entropy Markov Models (MEMM)\n", "\n", "Log-linear version with access to previous label:\n", "\n", "$$\n", " p_\\params(y_i|\\x,y_{i-1},i) = \\frac{1}{Z_{\\x,y_{i-1},i}} \\exp \\langle \\repr(\\x,y_{i-1},i),\\params_{y_i} \\rangle\n", "$$\n", "\n", "where\n", "$$Z_{\\x,y_{i-1},i}=\\sum_y \\exp \\langle \\repr(\\x,y_{i-1},i),\\params_{y_i} \\rangle$$\n", "is a *local* per-token normalisation factor." ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "scrolled": false, "slideshow": { "slide_type": "skip" } }, "source": [ "### Graphical Representation\n", "\n", "- Reminder: models can be represented as factor graphs\n", "- Each variable of the model (our per-token tag labels and the input sequence $\\x$) is drawn using a circle\n", "- As before, *observed* variables are shaded\n", "- Each factor in the model (terms in the product) is drawn as a box that connects the variables that appear in the corresponding term" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "### Training MEMMs\n", "Optimising the conditional log-likelihood\n", "\n", "$$\n", "\\sum_{(\\x,\\y) \\in \\train} \\log \\prob_\\params(\\y|\\x)\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "Decomposes nicely:\n", "$$\n", "\\sum_{(\\x,\\y) \\in \\train} \\sum_{i=1}^{|\\x|} \\log \\prob_\\params(y_i|\\x,y_{i-1},i)\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "Easy to train\n", "* Equivalent to a **logistic regression objective** for a classifier that assigns labels based on previous gold labels" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "However...\n", "\n", "### Local normalisation introduces *label bias*\n", "\n", "+ Tag probabilities always sum to 1 at each position\n", "+ Can lead to MEMMs effectively \"ignoring\" the inputs" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "## Conditional Random Fields (CRF)\n", "\n", "Replace *local* with *global* normalisation.\n", "\n", "Instead of normalising across all possible next states $y_{i+1}$ given a current state $y_i$ and observation $\\x$,\n", "\n", "the CRF normalises across all possible *sequences* $\\y$ given observation $\\x$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "Formally:\n", "\n", "$$\n", " p_\\params(y_i|\\x,y_{i-1},i) = \\frac{1}{Z_{\\x}} \\exp \\langle \\repr(\\x,y_{i-1},i),\\params_{y_i} \\rangle\n", "$$\n", "\n", "where\n", "$$Z_{\\x}=\\sum_\\y \\prod_i^{|\\x|} \\exp \\langle \\repr(\\x,y_{i-1},i), \\params_{y_i} \\rangle$$\n", "is a *global* normalisation constant depending on $\\x$.\n", "\n", "Notably, each term $\\exp \\langle \\repr(\\x,y_{i-1},i), \\params_{y_i} \\rangle$ in the product can now take on values in $[0,\\infty)$ as opposed to the MEMM terms in $[0,1]$. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "***\n", "\n", "+ More precisely, this is a **linear-chain CRF**.\n", "\n", " (CRFs can be applied to any graph structure, but we are only considering sequences.)\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "## Pros and cons of CRFs\n", "\n", "\n", "### 👍\n", "\n", "+ Finds globally optimal label sequence\n", "+ Eliminates label bias\n", "\n", "### 👎\n", "\n", "+ More difficult to train (—cannot break down into local terms anymore!)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "The best of both worlds?\n", "\n", "## Neural CRF\n", "\n", "+ We can **combine** our neural sequence models with a CRF!\n", "\n", "\n", "$$\n", " p_\\params(y_i|\\x,y_{i-1},i) = \\frac{1}{Z_{\\x}} \\exp \\langle \\hat{\\mathbf{h}}_{t},\\params_{y_i} \\rangle\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "\n", "![](https://www.gabormelli.com/RKB/images/thumb/1/1e/N16-1030_fig1.png/400px-N16-1030_fig1.png)\n", "\n", "(from [Lample et al., 2016](https://www.aclweb.org/anthology/N16-1030))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "## Prediction in MEMMs, CRFs, neural CRFs, ...\n", "\n", "To predict the best label sequence, find a $\\y^*$ with maximal conditional probability\n", "\n", "$$\n", "\\y^* =\\argmax_\\y \\prob_\\params(\\y|\\x).\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "## Greedy Prediction\n", "\n", "Simplest option:\n", "* Choose highest scoring label for token 1\n", "* Choose highest scoring label for token 2, conditioned on best label from 1\n", "* etc." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "But...\n", "\n", "+ May lead to **search errors** when returned $\\y^*$ is not highest scoring **global** solution" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "### Problem\n", "\n", "We cannot simply choose each label in isolation because **decisions depend on each other.**" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "skip" } }, "source": [ "## Beam Search\n", "\n", "Keep a \"beam\" of the best $\\beta$ previous solutions\n", "\n", "1. Choose $\\beta$ highest scoring labels for token 1\n", "2. 1. For each of the previous $\\beta$ labels: predict probabilities for next label, conditioned on the previous label(s)\n", " 2. **Sum** the log-likelihoods for previous states and next label\n", " 3. **Prune** the beam by only keeping the top $\\beta$ paths\n", "3. Repeat until end of sequence" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "## Summary\n", "\n", "\n", "- Many problems can be cast as sequence labelling\n", " - POS tagging\n", " - Named entity recognition (with IOB encoding)\n", " \n", "- Models are similar to sequence **classifiers** but are sequential\n", " - Log-linear models rely on good feature engineering\n", " - Neural sequence labelers rely on substantial amounts of training data but generally perform better\n" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "## Background Material \n", "\n", "- Longer introduction to sequence labelling with linear chain models: [notes](chapters/sequence_labeling.ipynb)\n", "- Longer introduction to sequence labelling with CRFs: [slides](chapters/sequence_labeling_crf_slides.ipynb)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Jurafsky & Martin, Speech and Language Processing, [Chapter 17](https://web.stanford.edu/~jurafsky/slp3/17.pdf)\n", "- Tutorial on CRFs: Sutton & McCallum, [An Introduction to Conditional Random Fields for Relational Learning](https://people.cs.umass.edu/~mccallum/papers/crf-tutorial.pdf)\n", "- LSTM-CRF architecture: [Huang et al., Bidirectional LSTM-CRF for Sequence Tagging](https://arxiv.org/pdf/1508.01991v1.pdf)\n", "- Globally Normalized Transition-Based Neural Networks: [Andor et al., 2016](https://arxiv.org/abs/1603.06042)" ] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.12" } }, "nbformat": 4, "nbformat_minor": 1 }