{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Structured Prediction Exercises\n", "\n", "In the lecture we have looked at a simple toy structured prediction application and model. In this exercise you will change and improve it. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setup 1: Load Libraries" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "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 matplotlib\n", "import matplotlib.pyplot as plt\n", "matplotlib.rcParams['figure.figsize'] = (10.0, 6.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 1: Different Representation\n", "Find a different representation and model that also achieves perfect accuracy. " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Yesterday I ate a red apple Gestern aß ich einen roten Apfel
Yesterday I ate a red apply with a friend Gestern aß ich einen roten Apfel mit einem Freund
" ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import math\n", "import numpy as np\n", "\n", "x_space = ['I ate an apple', \n", " 'I ate a red apple', \n", " 'Yesterday I ate a red apple', \n", " 'Yesterday I ate a red apply with a friend']\n", "y_space = ['Ich aß einen Apfel',\n", " 'Ich aß einen roten Apfel',\n", " 'Gestern aß ich einen roten Apfel',\n", " 'Gestern aß ich einen roten Apfel mit einem Freund']\n", "data = list(zip(x_space,y_space))\n", "train = data[:2]\n", "test = data[2:]\n", "\n", "def f(x):\n", " \"\"\"Calculate a representation of the input `x`.\"\"\"\n", " return len(x)\n", "def g(y):\n", " \"\"\"Calculate a representation of the output `y`.\"\"\"\n", " return len(y)\n", "\n", "def s(theta,x,y):\n", " \"\"\"Measure the compatibility of sentences `x` and `y` using parameter `theta`\"\"\"\n", " return -abs(theta * f(x) - g(y))\n", "\n", "def loss(theta, data):\n", " \"\"\"Measure the total number of errors made when predicting with parameter `theta` on training set `data`\"\"\"\n", " total = 0.0\n", " for x,y in data:\n", " max_score = -math.inf\n", " result = None\n", " for y_guess in y_space:\n", " score = s(theta,x,y_guess)\n", " if score > max_score:\n", " result = y_guess\n", " max_score = score\n", " if result != y:\n", " total += 1.0\n", " return total\n", "\n", "\n", "thetas = np.linspace(0.0, 2.0, num=1000)\n", "theta_star = thetas[np.argmin([loss(theta,train) for theta in thetas])]\n", "\n", "def predict(theta, x):\n", " \"\"\"Find the most compatible output sentence given the input sentence `x` and parameter `theta`\"\"\"\n", " max_score = -math.inf\n", " result = None\n", " for y_guess in y_space:\n", " score = s(theta,x,y_guess)\n", " if score > max_score:\n", " result = y_guess\n", " max_score = score\n", " return result\n", "\n", "util.Table([(x,predict(theta_star, x)) for x,_ in test])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 2: Smoother Objective\n", "\n", "Can you find a \"smoother\" objective that is continuous and has optima that also optimise the original objective?" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def my_loss(theta, data):\n", " \"\"\"Measure the total number of errors made when predicting with parameter `theta` on training set `data`\"\"\"\n", " total = 0.0\n", " for x,y in data:\n", " max_score = -math.inf\n", " result = None\n", " for y_guess in y_space:\n", " score = s(theta,x,y_guess)\n", " if score > max_score:\n", " result = y_guess\n", " max_score = score\n", " if result != y:\n", " total += 1.0\n", " return total\n", "\n", "plt.plot(thetas, [my_loss(theta,train) for theta in thetas])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Solutions\n", "\n", "You can find the solutions to this exercises [here](structured_prediction_solutions.ipynb)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1" } }, "nbformat": 4, "nbformat_minor": 1 }