{ "cells": [ { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "%%capture\n", "%load_ext autoreload\n", "%autoreload 2\n", "%matplotlib inline\n", "# %cd .. \n", "import sys\n", "sys.path.append(\"..\")\n", "import statnlpbook.util as util\n", "import statnlpbook.sequence as seq\n", "import pandas as pd\n", "import matplotlib\n", "import warnings\n", "warnings.filterwarnings('ignore')\n", "matplotlib.rcParams['figure.figsize'] = (8.0, 5.0)" ] }, { "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": 3, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%HTML\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Sequence Labelling \n", "assigns labels to each element in a sequence" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Example: PoS tagging\n", "\n", "assign each token in a sentence its **Part-of-Speech tag**\n", "\n", "| 1 | 2 | 3 | 4 | 5| 6 | 7 | 8 |\n", "|-|\n", "| I | predict | I | won't | win | a | single | game |\n", "| O | V | O | V | V | D | A | N |\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Example: Named Entity Recognition\n", "\n", "label tokens as beginning (B), inside (I) our outside (O) a **named entity**\n", "\n", "| Barack | Obama | was | born | in | Hawaii |\n", "|-|\n", "| B-PER | I-PER | O | O | O | B-LOC |\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Sequence Labelling as Structured Prediction\n", "\n", "* Input Space $\\Xs$: sequences of items to label\n", "* Output Space $\\Ys$: sequences of output labels labels\n", "* Model: $s_{\\params}(\\x,\\y)$\n", "* Prediction: $\\argmax_\\y s_{\\params}(\\x,\\y)$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Conditional Models\n", "model probability distributions over label sequences $\\y$ conditioned on input sequences $\\x$\n", "$$\n", "s_{\\params}(\\x,\\y) = \\prob_\\params(\\y|\\x)\n", "$$ \n", "\n", "* analog to conditional models of [text classification](doc_classify.ipynb) chapter" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Part-of-Speech Tagging as Sequence Labelling\n", "Example data: tagging for tweets for the [Tweebank dataset](http://www.cs.cmu.edu/~ark/TweetNLP/#pos) " ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "def show_instance(x,y,begin=0,end=-1):\n", " return pd.DataFrame([x[begin:end],y[begin:end]]) " ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
01234567891011
0IpredictIwon'twinasinglegameIbeton.
1OVOVVDANOVP,
\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 7 8 9 10 11\n", "0 I predict I won't win a single game I bet on .\n", "1 O V O V V D A N O V P ," ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train = seq.load_tweebank(\"../data/oct27.splits/oct27.train\")\n", "dev = seq.load_tweebank(\"../data/oct27.splits/oct27.dev\")\n", "test = seq.load_tweebank(\"../data/oct27.splits/oct27.test\")\n", "show_instance(*train[0],0,12)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tags (such as \"O\", \"V\" and \"^\") are described in the [Tweebank annotation guideline](http://www.cs.cmu.edu/~ark/TweetNLP/annot_guidelines.pdf)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "# count tags here?`xw\n", "from collections import defaultdict\n", "import pandas as pd\n", "examples = {}\n", "counts = defaultdict(int)\n", "words = defaultdict(set)\n", "for x,y in train:\n", " for i in range(0, len(x)):\n", " if y[i] not in examples:\n", " examples[y[i]] = [x[j] + \"/\" + y[j] if i == j else x[j] for j in range(max(i-2,0),min(i+2,len(x)-1))]\n", " counts[y[i]] += 1\n", " words[y[i]].add(x[i])\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 Words','Example'])" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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 WordsExample
0V2219873I predict/V I
1N20031377a single game/N I
2,171584bet on ./, Got
3P1252126I bet on/P .
4O106397I/O predict
5^890741. Got Cliff/^ Lee
6D86968won't win a/D single
7A755449win a single/A game
8@713694me RT @e_one/@ :
9R689217but I still/R hate
\n", "
" ], "text/plain": [ " Tag Count Unique Words Example\n", "0 V 2219 873 I predict/V I\n", "1 N 2003 1377 a single game/N I\n", "2 , 1715 84 bet on ./, Got\n", "3 P 1252 126 I bet on/P .\n", "4 O 1063 97 I/O predict\n", "5 ^ 890 741 . Got Cliff/^ Lee\n", "6 D 869 68 won't win a/D single\n", "7 A 755 449 win a single/A game\n", "8 @ 713 694 me RT @e_one/@ :\n", "9 R 689 217 but I still/R hate" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sorted_tags_table[:10] " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "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)\n", "$$\n", "\n", "* labels are independent of each other\n", "* inference in this model is trivial\n", "* Compare to [\"Naive Translation Model\"](word_mt.ipynb)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Example\n", "\n", "$$\n", "\\prob_\\params(\\text{\"D A N\"} \\bar \\text{\"a single game\"}) = \\\\\\\\ \\prob_\\params(\\text{\"D\"}\\bar \\text{\"a single game\"},1) \\prob_\\params(\\text{\"A\"} \\bar \\text{\"a single game\"},2) \\ldots\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Parametrisation\n", "\n", "**Log-linear 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) = \\frac{1}{Z_\\x} \\exp \\langle \\repr(\\x,i),\\params_y \\rangle\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "What are good\n", "### Features?" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "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", "
01234567891011
0IpredictIwon'twinasinglegameIbeton.
1OVOVVDANOVP,
\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 7 8 9 10 11\n", "0 I predict I won't win a single game I bet on .\n", "1 O V O V V D A N O V P ," ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "show_instance(*train[0],0,12)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Bias:\n", "$$\n", "\\repr_0(\\x,i) = 1\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "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": 9, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "def feat_1(x,i):\n", " return {\n", " 'bias':1.0, \n", " 'word:' + x[i]: 1.0,\n", " }\n", "local_1 = seq.LocalSequenceLabeler(feat_1, train, class_weight='balanced')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "We can assess the accuracy of this model on the development set." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.6964544889073191" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "seq.accuracy(dev, local_1.predict(dev))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### How to Improve?\n", "\n", "Look at **confusion matrix**" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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\nAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "seq.plot_confusion_matrix(dev, local_1.predict(dev))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Shows:\n", "\n", "* strong diagonal (good predictions)\n", "* `N` receives a lot of wrong counts \n", "* `@` complete failure" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Let us start with @ ... " ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "scrolled": false, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "image/png": "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\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "local_1.plot_lr_weights('@')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Features for **specific users** such as \"word=@justinbieber\" do not generalise well\n", "\n", "How to address this? " ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "0.7484967862326353" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def feat_2(x,i):\n", " return {\n", " **feat_1(x,i),\n", " 'first_at:' + str(x[i][0:1] == '@'): 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": [ "To confirm that these results actually from improved '@' prediction, let us look at the confusion matrix again" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n4NBT9QAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "seq.plot_confusion_matrix(dev, local_2.predict(dev))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Solved! " ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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\nYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "local_2.plot_lr_weights('@')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Other errors?" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n4NBT9QAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "seq.plot_confusion_matrix(dev, local_2.predict(dev))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Look for errors with high frequency:\n", "\n", "* distinguishing **proper nouns** (label '^') \n", " * such as \"McDonalds\" or \"Thursday\" \n", "* from **common nouns** (label 'N') \n", " * such as \"wife\" or \"rain\". " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Micro View\n", "How do these errors look like?" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Previous\n", "  \n", " Next\n", "
\n", "
Senate#ArtsGradesarein!
^NVP,
NNVP,
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseword:Senate
1.01.01.0
-2.930.301.67
-2.971.451.94
1 / 12
\n", "
passedandwhomadetheDirtyDozen.#artshttp://t.co/BAh2iUL
V&OVD^^,#U
N&OVDNN,NN
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseword:Dirty
1.01.01.0
-2.930.300.00
-2.971.450.00
2 / 12
\n", "
andwhomadetheDirtyDozen.#artshttp://t.co/BAh2iULvia
&OVD^^,#UP
&OVDNN,NNP
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseword:Dozen
1.01.01.0
-2.930.300.00
-2.971.450.00
3 / 12
\n", "
29p11rPalGasolwentdafuck
NN^^VDN
NNNNVDV
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseword:Pal
1.01.01.0
-2.930.300.00
-2.971.450.00
4 / 12
\n", "
29p11rPalGasolwentdafuckoff
NN^^VDNP
NNNNVDVT
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseword:Gasol
1.01.01.0
-2.930.300.00
-2.971.450.00
5 / 12
\n", "
@comicsguy024Idon'tuseChromeduetothelack
@OVV^PPDN
@OVVNAPDN
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseword:Chrome
1.01.01.0
-2.930.300.00
-2.971.450.00
6 / 12
\n", "
Sowho'sgoingtotheEthernetExponextweekin
PLVPD^^ANP
PLVPDN^ANP
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseword:Ethernet
1.01.01.0
-2.930.300.00
-2.971.450.00
7 / 12
\n", "
EthernetExponextweekinNYC?
^^ANP^,
N^ANPN,
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseword:NYC
1.01.01.0
-2.930.300.00
-2.971.450.00
8 / 12
\n", "
X)RT@DarCoxaj:TETRIS!(:\"
EE~@~^,E,
N,~@~N,E,
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseword:TETRIS
1.01.01.0
-2.930.300.00
-2.971.450.00
9 / 12
\n", "
tiedup,PhysedatForestGreen-havea
VT,NP^^,VD
NT,NPNA,VD
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseword:Forest
1.01.01.0
-2.930.300.00
-2.971.450.00
10 / 12
\n", "
togoforHalloweenonfriandsat...Thinking
PVP^P^&^,V
PVP^PN&V,N
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseword:fri
1.01.01.0
-2.930.300.00
-2.971.450.00
11 / 12
\n", "
friandsat...Thinkingpyramidonsat...
^&^,V^P^,
N&V,NNPV,
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseword:pyramid
1.01.01.0
-2.930.300.00
-2.971.450.00
12 / 12
\n", "
\n", "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "util.Carousel(local_2.errors(dev[10:20], \n", " filter_guess=lambda y: y=='N',\n", " filter_gold=lambda y: y=='^'))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Proper nouns tend to be capitalised!" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "0.771511507360564" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def feat_3(x,i):\n", " return {\n", " **feat_2(x,i),\n", " 'is_lower:' + str(x[i].islower()): 1.0,\n", "# 'first_char:' + str(x[i][0:1]): 1.0\n", " 'is_lower:' + str(x[i].islower()): 1.0\n", " }\n", "local_3 = seq.LocalSequenceLabeler(feat_3, train)\n", "seq.accuracy(dev, local_3.predict(dev))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "This improvement indeed comes from being able to identify proper nouns when they are capitalised:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Previous\n", "  \n", " Next\n", "
\n", "
Senate#ArtsGradesarein!
^NVP,
N^VP,
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseis_lower:Falseword:Senate
1.01.01.01.0
-2.450.850.010.78
-2.281.80-1.672.49
1 / 3
\n", "
togoforHalloweenonfriandsat...Thinking
PVP^P^&^,V
PVP^PN&V,^
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseis_lower:Trueword:fri
1.01.01.01.0
-2.450.85-2.460.00
-2.281.80-0.610.00
2 / 3
\n", "
friandsat...Thinkingpyramidonsat...
^&^,V^P^,
N&V,^NPV,
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseis_lower:Trueword:pyramid
1.01.01.01.0
-2.450.85-2.460.00
-2.281.80-0.610.00
3 / 3
\n", "
\n", "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "util.Carousel(local_3.errors(dev[10:20], \n", " filter_guess=lambda y: y=='N',\n", " filter_gold=lambda y: y=='^'))\n", "# seq.find_contexts(train, lambda w: w == 'Senate')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Find more problems:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "seq.plot_confusion_matrix(dev, local_3.predict(dev))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "High frequency error: \n", "\n", "* misclassifying verbs ('V') as common nouns ('N')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Inspect examples... " ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Previous\n", "  \n", " Next\n", "
\n", "
theplayersandhiswifeownsmashburger
DN&DNV^^
DN&DNNNN
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseis_lower:Trueword:own
1.01.01.01.0
-2.491.37-0.57-0.78
-2.281.80-0.612.30
1 / 9
\n", "
RT@TheRealQuailman:CurrentlylaughingatLakerhaters.
~@~RVP^N,
~@~^NP^N,
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseis_lower:Trueword:laughing
1.01.01.01.0
-2.491.37-0.570.00
-2.281.80-0.610.00
2 / 9
\n", "
@ShiversTheNinjaforgivemeforblowingup
@VOPVT
@NOPNT
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseis_lower:Trueword:forgive
1.01.01.01.0
-2.491.37-0.570.00
-2.281.80-0.610.00
3 / 9
\n", "
@ShiversTheNinjaforgivemeforblowingupyouryoutubecomment
@VOPVTD^N
@NOPNTDNN
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseis_lower:Trueword:blowing
1.01.01.01.0
-2.491.37-0.570.00
-2.281.80-0.610.00
4 / 9
\n", "
Question:HowCANyoumendabrokenheart?
N,RVOVDAN,
^~RVONDVV,
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseis_lower:Trueword:mend
1.01.01.01.0
-2.491.37-0.570.00
-2.281.80-0.610.00
5 / 9
\n", "
lastnight,butdidn'tbothercallingShawnbecauseI'd
AN,&VVV^PL
AN,&VNV^PL
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseis_lower:Trueword:bother
1.01.01.01.0
-2.491.37-0.570.00
-2.281.80-0.610.00
6 / 9
\n", "
arein!Seewhopassedandwhomadethe
VP,VOV&OVD
VP,VON&OVD
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseis_lower:Trueword:passed
1.01.01.01.0
-2.491.37-0.570.00
-2.281.80-0.610.00
7 / 9
\n", "
andwatchthenewsandtuneoutoversomefresh
&VDN&VTPDA
&VDN&NTPDA
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseis_lower:Trueword:tune
1.01.01.01.0
-2.491.37-0.57-0.78
-2.281.80-0.612.30
8 / 9
\n", "
that,regretfullyIwastiedup,Physedat
P,ROVVT,NP
P,NOVNT,^P
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseis_lower:Trueword:tied
1.01.01.01.0
-2.491.37-0.570.00
-2.281.80-0.610.00
9 / 9
\n", "
\n", "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "util.Carousel(local_3.errors(dev[:20], \n", " filter_guess=lambda y: y=='N',\n", " filter_gold=lambda y: y=='V'))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "* \"laughing\", \"blowing\" or \"passed\" are misclassified as common nouns \n", "* For $f_{\\text{word},w}$ feature template weights are $0$ \n", "\n", "Suggests that word has not appeared (or not appeared as a verb) in the training set! " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "However, we can tell that these words may be verbs:\n", "\n", "* check suffixes such as \"ing\" or \"ed\". \n", "\n", "Incorporate as features!" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "0.7876840140991085" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def feat_4(x,i):\n", " return {\n", " **feat_3(x,i),\n", " 'last_3:' + \"\".join(x[i][-3:]): 1.0,\n", " 'last_2:' + \"\".join(x[i][-2:]): 1.0,\n", " }\n", "local_4 = seq.LocalSequenceLabeler(feat_4, train)\n", "seq.accuracy(dev, local_4.predict(dev))" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Previous\n", "  \n", " Next\n", "
\n", "
theplayersandhiswifeownsmashburger
DN&DNV^^
DN&DNNVN
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseis_lower:Truelast_2:wnlast_3:ownword:own
1.01.01.01.01.01.0
-3.171.01-1.03-0.150.07-0.28
-2.961.82-1.021.01-0.452.63
1 / 4
\n", "
Question:HowCANyoumendabrokenheart?
N,RVOVDAN,
N~RVONDVV,
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseis_lower:Truelast_2:ndlast_3:endword:mend
1.01.01.01.01.01.0
-3.171.01-1.030.392.050.00
-2.961.82-1.021.021.570.00
2 / 4
\n", "
lastnight,butdidn'tbothercallingShawnbecauseI'd
AN,&VVV^PL
AN,&VNVNPL
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseis_lower:Truelast_2:erlast_3:herword:bother
1.01.01.01.01.01.0
-3.171.01-1.03-0.47-1.530.00
-2.961.82-1.022.08-1.210.00
3 / 4
\n", "
andwatchthenewsandtuneoutoversomefresh
&VDN&VTPDA
&VDN&NTPDA
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseis_lower:Truelast_2:nelast_3:uneword:tune
1.01.01.01.01.01.0
-3.171.01-1.030.17-0.27-0.27
-2.961.82-1.020.951.481.48
4 / 4
\n", "
\n", "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "util.Carousel(local_4.errors(dev[:20], \n", " filter_guess=lambda y: y=='N',\n", " filter_gold=lambda y: y=='V' ))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Markov Models\n", "We have **dependencies** between consecutive labels" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Example\n", "\n", "after non-possessive pronoun (\"O\") such as \"I\" a verb (\"V\") is more likely than a noun (\"N\")\n", "\n", "*local* model cannot *directly* capture this" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Maximum Entropy Markov Model\n", "$$\n", "p_\\params(\\y|\\x) = \\prod_{i=1}^n p_\\params(y_i|\\x,y_{i-1},i)\n", "$$\n", "\n", "a product of local logistic regression (aka Maximum Entropy) classifiers $\\prob_\\params(y_i|\\x,y_{i-1},i)$\n", "\n", "* but classifiers can use the previous label as observed feature \n", "* makes a **first-order Markov assumption**\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Example\n", "\n", "$$\n", "\\prob_\\params(\\text{\"D A N\"} \\bar \\text{\"a single game\"}) = \\\\\\\\ \\prob_\\params(\\text{\"D\"}\\bar \\text{\"a single game\"},\\text{\"PAD\"},1) \\\\\\\\ \\prob_\\params(\\text{\"A\"} \\bar \\text{\"a single game\"},\\text{\"D\"},2) \\ldots\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "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 $Z_{\\x,y_{i-1},i}=\\sum_y \\exp \\langle \\repr(\\x,y_{i-1},i),\\params_{y_i} \\rangle $ is a *local* per-token normalisation factor" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Training MEMMs\n", "Optimising the conditional likelihood \n", "\n", "$$\n", "\\sum_{(\\x,\\y) \\in \\train} \\log \\prob_\\params(\\y|\\x)\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "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": "fragment" } }, "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": "subslide" } }, "source": [ "Let's specify a MEMM using \n", "### Feature Functions" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "def memm_feat_1(x,i,hist):\n", " return {\n", " **feat_4(x,i),\n", " 'prev_y': hist[0],\n", " }\n", "\n", "memm_1 = seq.MEMMSequenceLabeler(memm_feat_1, train, order=1, C=10)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Prediction in MEMMs\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": "subslide" } }, "source": [ "### Greedy Prediction\n", "We cannot simply choose each label in isolation because **decisions depend on each other**" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Simple alternative:\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": "code", "execution_count": 51, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "'D'" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "memm_1.predict_next([\"the\",\"man\"],0,[])" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "'N'" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "memm_1.predict_next([\"the\",\"man\"],1,['D'])" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "def memm_greedy_predict(memm: seq.MEMMSequenceLabeler, data, use_gold_history=False):\n", " result = []\n", " for x, y in data:\n", " y_guess = []\n", " for i in range(0, len(x)):\n", " prediction = memm.predict_next(x, i, y_guess if not use_gold_history else y)\n", " y_guess.append(prediction)\n", " result.append(y_guess)\n", " return result" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "0.8100767157370931" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "seq.accuracy(dev,memm_greedy_predict(memm_1, dev))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Some Noun vs Verb errors fixed:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Previous\n", "  \n", " Next\n", "
\n", "
theplayersandhiswifeownsmashburger
DN&DNV^^
DN&DNNVN
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseis_lower:Truelast_2:wnlast_3:ownprev_yword:own
1.01.01.01.01.0N1.0
-3.360.90-1.11-0.16-0.020.00-0.01
-3.011.52-1.151.11-0.520.001.41
1 / 2
\n", "
andwatchthenewsandtuneoutoversomefresh
&VDN&VTPDA
&VDN&NPPDA
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_at:Falseis_lower:Truelast_2:nelast_3:uneprev_yword:tune
1.01.01.01.01.0&1.0
-3.360.90-1.11-0.04-0.010.00-0.01
-3.011.52-1.150.590.780.000.78
2 / 2
\n", "
\n", "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "util.Carousel(seq.errors(dev[:20], memm_greedy_predict(memm_1, dev[:20]), \n", " 'V', 'N',model=memm_1))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "For the case of verbs ('V') we observe a high weight for $f_{\\text{prev_y},\\text{O}}$\n", "\n", "* indicating that pronouns are often followed by verbs, as we expected earlier " ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAe8AAAFcCAYAAADh1zYWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xm4JVV5qPH3owdxQAjpFhBpGgTEMYodVDCKUVAGRY0a\niGhC4u3opQ1Gw3C9iQQSDUSiUVEQBZUEUeKARDEOqHFA1KavwTEJGhEIRpxA4pSW7/6x6ti7t2fY\nQ9U5e/V+f8+zn7OHOqtWVa1aX61Vq6oiM5EkSfXYbqkzIEmShmPwliSpMgZvSZIqY/CWJKkyBm9J\nkipj8JYkqTIGb0mSKmPwliSpMgZvSZIqs3ypMzCfVatW5dq1a5c6G5IkLYprrrnmO5m5eqHpJjp4\nr127lo0bNy51NiRJWhQRcf0g09ltLklSZQzekiRVxuAtSVJlDN6SJFXG4C1JUmUM3pIkVcbgLUlS\nZQzekiRVxuAtSVJlDN6SJFXG4C1JUmUm+t7mbVt76vvG+v9vnHlkSzmRJGl0trwlSaqMwVuSpMoY\nvCVJqozBW5Kkyhi8JUmqjMFbkqTKGLwlSaqMwVuSpMoYvCVJqozBW5Kkyhi8JUmqjMFbkqTKGLwl\nSaqMwVuSpMoYvCVJqozBW5KkyowdvCNij4j4aER8OSK+FBEnzjLNIRFxa0R8vnm9ZNz5SpI0rZa3\nkMZm4EWZuSkidgCuiYgPZeaX+6b7RGYe1cL8JEmaamO3vDPz5szc1Lz/IfAVYPdx05UkSbNr9Zx3\nRKwFHgJ8ZpafD4qIayPi/RFx/3nSWB8RGyNi4y233NJm9iRJ2ia0Frwj4m7AO4EXZOZtfT9vAtZk\n5oOA1wCXzZVOZp6fmesyc93q1avbyp4kSduMVoJ3RKygBO6LM/Nd/b9n5m2ZeXvz/gpgRUSsamPe\nkiRNmzZGmwdwAfCVzHzFHNPs2kxHRBzYzPe7485bkqRp1MZo84OBZwFfiIjPN9+9GFgDkJnnAU8D\nnhcRm4EfA8dkZrYwb0mSps7YwTszPwnEAtOcA5wz7rwkSZJ3WJMkqToGb0mSKmPwliSpMgZvSZIq\nY/CWJKkyBm9Jkipj8JYkqTIGb0mSKmPwliSpMgZvSZIqY/CWJKkyBm9Jkipj8JYkqTIGb0mSKmPw\nliSpMgZvSZIqY/CWJKkyBm9Jkipj8JYkqTIGb0mSKmPwliSpMgZvSZIqY/CWJKkyBm9Jkipj8JYk\nqTIGb0mSKmPwliSpMgZvSZIqY/CWJKkyBm9JkiozdvCOiD0i4qMR8eWI+FJEnDjLNBERr46I6yLi\n2og4YNz5SpI0rZa3kMZm4EWZuSkidgCuiYgPZeaXe6Y5HNi3eT0MOLf5K0mShjR2yzszb87MTc37\nHwJfAXbvm+xo4KIsrgZ2iojdxp23JEnTqNVz3hGxFngI8Jm+n3YHbuj5fCO/HOAlSdIAWgveEXE3\n4J3ACzLztjHSWR8RGyNi4y233NJW9iRJ2ma0ErwjYgUlcF+cme+aZZKbgD16Pt+r+e6XZOb5mbku\nM9etXr26jexJkrRNaWO0eQAXAF/JzFfMMdnlwLObUecPB27NzJvHnbckSdOojdHmBwPPAr4QEZ9v\nvnsxsAYgM88DrgCOAK4DfgQc38J8JUmaSmMH78z8JBALTJPACePOS5IkeYc1SZKqY/CWJKkyBm9J\nkipj8JYkqTIGb0mSKmPwliSpMgZvSZIqY/CWJKkyBm9Jkipj8JYkqTIGb0mSKmPwliSpMgZvSZIq\nY/CWJKkyBm9Jkipj8JYkqTIGb0mSKmPwliSpMgZvSZIqY/CWJKkyBm9Jkipj8JYkqTIGb0mSKmPw\nliSpMgZvSZIqY/CWJKkyBm9Jkipj8JYkqTIGb0mSKmPwliSpMq0E74i4MCK+HRFfnOP3QyLi1oj4\nfPN6SRvzlSRpGi1vKZ03A+cAF80zzScy86iW5idJ0tRqpeWdmR8HvtdGWpIkaX6Lec77oIi4NiLe\nHxH3X8T5SpK0TWmr23whm4A1mXl7RBwBXAbsO9uEEbEeWA+wZs2aRcqeJEn1WJSWd2belpm3N++v\nAFZExKo5pj0/M9dl5rrVq1cvRvYkSarKogTviNg1IqJ5f2Az3+8uxrwlSdrWtNJtHhGXAIcAqyLi\nRuA0YAVAZp4HPA14XkRsBn4MHJOZ2ca8JUmaNq0E78w8doHfz6FcSiZJksbkHdYkSaqMwVuSpMoY\nvCVJqozBW5Kkyhi8JUmqjMFbkqTKGLwlSaqMwVuSpMoYvCVJqozBW5Kkyhi8JUmqjMFbkqTKGLwl\nSaqMwVuSpMoYvCVJqozBW5Kkyhi8JUmqjMFbkqTKGLwlSaqMwVuSpMoYvCVJqozBW5Kkyhi8JUmq\njMFbkqTKGLwlSaqMwVuSpMoYvCVJqozBW5Kkyhi8JUmqjMFbkqTKLF/qDNRs7anvGzuNb5x5ZAs5\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "memm_1.plot_lr_weights('V',feat_filter=lambda s: s.startswith(\"prev_\"))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Greedy decoding may lead to\n", "## Search Errors\n", "\n", "when returned $\\y^*$ is not highest scoring **global** solution" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "[('O', -0.21551259764203171),\n", " ('D', -2.0962312777396073),\n", " ('#', -3.7029947994500017)]" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "memm_1.predict_label_scores([\"What\",\"better\",\"way\"],0,[])[:3]" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "[('R', -0.5630160447367506),\n", " ('A', -1.0671842955591822),\n", " ('V', -2.6373919064817759)]" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "memm_1.predict_label_scores([\"What\",\"better\",\"way\"],1,['O'])[:3]" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "[('N', -0.036587380196569194),\n", " ('R', -3.8313002827728648),\n", " ('A', -5.9863085075420566)]" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "memm_1.predict_label_scores([\"What\",\"better\",\"way\"],2,['O','A'])[:3]" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Use\n", "### Beam Search\n", "and remember a beam of previous solutions" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "[(('O', 'R'), -0.5630160447367506),\n", " (('O', 'A'), -1.0671842955591822),\n", " (('O', 'V'), -2.6373919064817759)]" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = [\"What\",\"better\",\"way\"]\n", "init_beam = [] \n", "for y, score in memm_1.predict_label_scores(x,1,['O']):\n", " init_beam.append((('O',y),score))\n", "beam_size = 3\n", "beam = init_beam[:beam_size]\n", "beam" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "[(('O', 'A', 'N'), -1.1037716757557514),\n", " (('O', 'R', 'N'), -1.1870333223939724),\n", " (('O', 'R', 'R'), -1.9702637950583792)]" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_beam = []\n", "for prev_y, prev_s in beam:\n", " for y,s in memm_1.predict_label_scores(x,2,prev_y):\n", " new_beam.append((prev_y + (y,), prev_s + s))\n", "sorted(new_beam, key=lambda p: -p[1])[:3]" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "def memm_beam_search(memm, x, width=2):\n", " beam = [([],0.)]\n", " history = [beam]\n", " for i in range(0, len(x)):\n", " # use priority queue \n", " candidates = []\n", " for (prev,score) in beam:\n", " scores = memm.predict_scores(x, i, prev)\n", " for label_index,label_score in enumerate(scores):\n", " candidates.append((prev + [memm.labels()[label_index]], score + label_score))\n", " beam = sorted(candidates, key=lambda x: -x[1])[:width]\n", " history.append(beam)\n", " return beam, history\n", " \n", "def batch_predict(data, beam_predictor):\n", " return [beam_predictor(x)[0][0][0] for x,y in data]\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Full Example:" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Previous\n", "  \n", " Next\n", "
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
0.00
\n", " 1 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
A-0.10
\n", " 2 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AN-0.73
\n", " 3 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
ANN-1.40
\n", " 4 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
ANNP-1.41
\n", " 5 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
ANNPN-1.76
\n", " 6 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
ANNPN,-1.77
\n", " 7 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
ANNPN,O-1.93
\n", " 8 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
ANNPN,OR-2.49
\n", " 9 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
ANNPN,ORN-3.11
\n", " 10 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
ANNPN,ORNP-3.12
\n", " 11 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
ANNPN,ORNPN-3.73
\n", " 12 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
ANNPN,ORNPNP-3.78
\n", " 13 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
ANNPN,ORNPNPV-3.88
\n", " 14 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
ANNPN,ORNPNPVP-4.07
\n", " 15 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
ANNPN,ORNPNPVPP-4.07
\n", " 16 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
ANNPN,ORNPNPVPPZ-4.83
\n", " 17 / 17
\n", "
\n", "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "example = 56\n", "beam, history = memm_beam_search(memm_1, dev[example][0],1)\n", "seq.render_beam_history(history, dev[example], end=17)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Does it this help?" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.8127721335268505" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "seq.accuracy(dev, batch_predict(dev, lambda x: memm_beam_search(memm_1, x, 10)))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Beam search is wasteful for first-order models, instead use \n", "## Viterbi Algorithm" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Consider a beam of size 2:" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Previous\n", "  \n", " Next\n", "
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
0.00
\n", " 1 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
A-0.10
^-3.44
\n", " 2 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AN-0.73
AA-1.01
\n", " 3 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AAN-1.18
ANN-1.40
\n", " 4 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANP-1.19
ANNP-1.41
\n", " 5 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN-1.54
ANNPN-1.76
\n", " 6 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,-1.54
ANNPN,-1.77
\n", " 7 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,O-1.70
ANNPN,O-1.93
\n", " 8 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,OR-2.26
ANNPN,OR-2.49
\n", " 9 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,ORN-2.89
ANNPN,ORN-3.11
\n", " 10 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,ORNP-2.89
ANNPN,ORNP-3.12
\n", " 11 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,ORNPN-3.51
ANNPN,ORNPN-3.73
\n", " 12 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,ORNPNP-3.56
ANNPN,ORNPNP-3.78
\n", " 13 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,ORNPNPV-3.65
ANNPN,ORNPNPV-3.88
\n", " 14 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,ORNPNPVP-3.84
ANNPN,ORNPNPVP-4.07
\n", " 15 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,ORNPNPVPP-3.85
ANNPN,ORNPNPVPP-4.07
\n", " 16 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,ORNPNPVPPZ-4.61
AANPN,ORNPNPVPPL-4.80
\n", " 17 / 17
\n", "
\n", "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "example = 56\n", "beam, history = memm_beam_search(memm_1, dev[example][0],2)\n", "seq.render_beam_history(history, dev[example], end=17) " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Histories differ in early positions, but does all the past matter?" ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "[('N', -0.62401727765722192),\n", " ('R', -1.4072477503216287),\n", " ('V', -1.8299397831261677)]" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "memm_1.predict_label_scores([\"What\",\"better\",\"way\"],2,['O','R'])[:3]" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Past only matters until the **previous token**" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "**Viterbi Algorithm** = Remember only the best history per last label " ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "from collections import defaultdict\n", "import math\n", "def memm_viterbi_search(memm, x, width=2):\n", " labels = memm.labels()\n", " # initialise\n", " alpha = [{}]\n", " beta = [{}]\n", " for label_index, label_score in enumerate(memm.predict_scores_hist(x, 0, [\"PAD\"])):\n", " label = labels[label_index]\n", " alpha[0][label] = label_score\n", " beta[0][label] = \"PAD\"\n", " \n", " # prune\n", " seq.prune_alpha_beta(alpha[0], beta[0], width)\n", " \n", " # recursion \n", " for i in range(1, len(x)):\n", " alpha.append(defaultdict(lambda: -math.inf))\n", " beta.append({})\n", " for p in alpha[i-1].keys():\n", " for label_index, label_score in enumerate(memm.predict_scores_hist(x, i, [p])):\n", " label = labels[label_index]\n", " new_score = alpha[i-1][p] + label_score\n", " if new_score > alpha[i][label]:\n", " alpha[i][label] = new_score\n", " beta[i][label] = p\n", " # prune\n", " seq.prune_alpha_beta(alpha[i], beta[i], width)\n", " \n", " # convert to beam history to be used in the same way beam search was used. \n", " history = seq.convert_alpha_beta_to_history(x, alpha, beta)\n", " return history[-1], history" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "In action:" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Previous\n", "  \n", " Next\n", "
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
0.00
\n", " 1 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
A-0.10
^-3.44
\n", " 2 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AN-0.73
AA-1.01
\n", " 3 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AAN-1.18
ANV-1.98
\n", " 4 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANP-1.19
AANN-7.50
\n", " 5 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN-1.54
AANP^-2.57
\n", " 6 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,-1.54
AANP^^-5.17
\n", " 7 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,O-1.70
AANPN,D-4.21
\n", " 8 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,OR-2.26
AANPN,OA-2.77
\n", " 9 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,OAN-2.81
AANPN,ORR-3.67
\n", " 10 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,OANP-2.81
AANPN,OANN-9.36
\n", " 11 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,OANPN-3.42
AANPN,OANPV-4.07
\n", " 12 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,OANPNP-3.48
AANPN,OANPNV-6.93
\n", " 13 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,OANPNPV-3.57
AANPN,OANPNPN-6.18
\n", " 14 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,OANPNPVP-3.76
AANPN,OANPNPVT-5.41
\n", " 15 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,OANPNPVPP-3.77
AANPN,OANPNPVP^-10.03
\n", " 16 / 17
\n", "
\n", " \n", " \n", " \n", " \n", "
HappyInternationalYearofBiodiversity!WhatbetterwaytocelebratethantuningintoCropLife'sBiodiversity
AANPN,OANPVPVTPZ^
AANPN,OANPNPVPPZ-4.52
AANPN,OANPNPVPPL-4.71
\n", " 17 / 17
\n", "
\n", "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "beam, history = memm_viterbi_search(memm_1, dev[example][0],2)\n", "seq.render_beam_history(history, dev[example], 17)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "Now, does this help?" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "text/plain": [ "0.8138088326767572" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "seq.accuracy(dev, batch_predict(dev, lambda x: memm_viterbi_search(memm_1, x, 2)))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Check Models on Test Set:" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
01
0word0.703440
1+ first @0.757271
2+ cap0.776007
3+ suffix0.796980
4MEMM0.811102
\n", "
" ], "text/plain": [ " 0 1\n", "0 word 0.703440\n", "1 + first @ 0.757271\n", "2 + cap 0.776007\n", "3 + suffix 0.796980\n", "4 MEMM 0.811102" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame([\n", " [\"word\", seq.accuracy(test, local_1.predict(test))],\n", " [\"+ first @\", seq.accuracy(test, local_2.predict(test))],\n", " [\"+ cap\", seq.accuracy(test, local_3.predict(test))],\n", " [\"+ suffix\", seq.accuracy(test, local_4.predict(test))],\n", " [\"MEMM\", seq.accuracy(test, memm_1.predict(test))],\n", " ])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Summary\n", "* Many problems can be cast as sequence labeling\n", "* Solution 1: sequence of classifiers\n", " * rely on good feature engineering\n", "* Solution 2: MEMM to model label dependencies\n", " * require non-trivial search algorithms\n", " * but greedy and beam search often works well\n", "* Other Options:\n", " * CRFs (in notes)\n", " * RNNs (discussed later)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Background Material \n", "* [MEMM](http://www.ai.mit.edu/courses/6.891-nlp/READINGS/maxent.pdf)" ] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.2" } }, "nbformat": 4, "nbformat_minor": 1 }