{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Classical pipeline" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "os.environ[\"TOKENIZERS_PARALLELISM\"] = \"false\"" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import torch\n", "\n", "BATCH_SIZE = 30\n", "EPOCHS = 25\n", "LEARNING_RATE = 3e-2\n", "SEED = 0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Input data" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "def read_data(filename):\n", " labels, sentences = [], []\n", " with open(filename) as f:\n", " for line in f:\n", " t = float(line[0])\n", " labels.append([t, 1-t])\n", " sentences.append(line[1:].strip())\n", " return labels, sentences\n", "\n", "\n", "train_labels, train_data = read_data('datasets/mc_train_data.txt')\n", "dev_labels, dev_data = read_data('datasets/mc_dev_data.txt')\n", "test_labels, test_data = read_data('datasets/mc_test_data.txt')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "nbsphinx": "hidden" }, "outputs": [], "source": [ "TESTING = int(os.environ.get('TEST_NOTEBOOKS', '0'))\n", "\n", "if TESTING:\n", " train_labels, train_data = train_labels[:2], train_data[:2]\n", " dev_labels, dev_data = dev_labels[:2], dev_data[:2]\n", " test_labels, test_data = test_labels[:2], test_data[:2]\n", " EPOCHS = 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Create diagrams" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Tagging sentences.\n", "Parsing tagged sentences.\n", "Turning parse trees to diagrams.\n", "Tagging sentences.\n", "Parsing tagged sentences.\n", "Turning parse trees to diagrams.\n", "Tagging sentences.\n", "Parsing tagged sentences.\n", "Turning parse trees to diagrams.\n" ] } ], "source": [ "from lambeq import BobcatParser\n", "\n", "reader = BobcatParser(verbose='text')\n", "\n", "train_diagrams = reader.sentences2diagrams(train_data)\n", "dev_diagrams = reader.sentences2diagrams(dev_data)\n", "test_diagrams = reader.sentences2diagrams(test_data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Create circuits" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from lambeq.backend.tensor import Dim\n", "\n", "from lambeq import AtomicType, SpiderAnsatz\n", "\n", "ansatz = SpiderAnsatz({AtomicType.NOUN: Dim(2),\n", " AtomicType.SENTENCE: Dim(2)})\n", "\n", "train_circuits = [ansatz(diagram) for diagram in train_diagrams]\n", "dev_circuits = [ansatz(diagram) for diagram in dev_diagrams]\n", "test_circuits = [ansatz(diagram) for diagram in test_diagrams]\n", "\n", "train_circuits[-1].draw(figsize=(7, 1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Parameterise" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "from lambeq import PytorchModel\n", "all_circuits = train_circuits + dev_circuits + test_circuits\n", "model = PytorchModel.from_diagrams(all_circuits)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define Evaluation Metric" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "sig = torch.sigmoid\n", "\n", "def accuracy(y_hat, y):\n", " return torch.sum(torch.eq(torch.round(sig(y_hat)), y))/len(y)/2 # half due to double-counting" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Initialize Trainer" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "from lambeq import PytorchTrainer\n", "\n", "trainer = PytorchTrainer(\n", " model=model,\n", " loss_function=torch.nn.BCEWithLogitsLoss(),\n", " optimizer=torch.optim.AdamW, # type: ignore\n", " learning_rate=LEARNING_RATE,\n", " epochs=EPOCHS,\n", " evaluate_functions={\"acc\": accuracy},\n", " evaluate_on_train=True,\n", " verbose='text',\n", " seed=SEED)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "from lambeq import Dataset\n", "\n", "train_dataset = Dataset(\n", " train_circuits,\n", " train_labels,\n", " batch_size=BATCH_SIZE)\n", "\n", "dev_dataset = Dataset(dev_circuits, dev_labels)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Train" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Epoch 5: train/loss: 0.6386 valid/loss: 0.7189 train/time: 0.68s valid/time: 1.47s train/acc: 0.5786 valid/acc: 0.5333\n", "Epoch 10: train/loss: 0.5280 valid/loss: 0.6392 train/time: 0.49s valid/time: 0.15s train/acc: 0.5857 valid/acc: 0.5833\n", "Epoch 15: train/loss: 0.4138 valid/loss: 0.4924 train/time: 0.38s valid/time: 0.27s train/acc: 0.7500 valid/acc: 0.7500\n", "Epoch 20: train/loss: 0.1306 valid/loss: 0.2794 train/time: 0.60s valid/time: 0.14s train/acc: 0.9857 valid/acc: 0.9500\n", "Epoch 25: train/loss: 0.0120 valid/loss: 0.0595 train/time: 0.37s valid/time: 0.21s train/acc: 0.9929 valid/acc: 0.9833\n", "\n", "Training completed!\n", "train/time: 2.52s train/time_per_epoch: 0.10s train/time_per_step: 0.03s valid/time: 2.23s valid/time_per_eval: 0.09s\n" ] } ], "source": [ "trainer.fit(train_dataset, dev_dataset, log_interval=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Show results" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test accuracy: 0.9833333492279053\n" ] }, { "data": { "image/png": "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f4yhQ4cavr6+RmRkpNnRCtWTTz5pLFu2zDh06JCxatUqo3379oa/v78RHR1tdrQCl5iYaGzevNnYvHmzARjvvvuusXnzZuPIkSOGYRjG66+/bvj6+hpz5841tm3bZnTr1s0IDQ01zp07Z3Ly/HeltkhMTDSeeuopIyIiwjh06JCxaNEi46abbjKqVatmpKammh09Xw0fPtzw8fExli1bZpw6dSr7lpKSkr3Pww8/bFSsWNFYsmSJsWHDBqNFixZGixYtTExdMK7WFvv37zcmTJhgbNiwwTh06JAxd+5co0qVKkabNm1MTl68qW+yUd+kvskw1Dedp77pgqLQN9ll4WQYhvHRRx8ZFStWNFxcXIxmzZoZa9asMTtSoevbt69Rrlw5w8XFxShfvrzRt29fY//+/WbHKhRLly41gEtu/fv3NwzDtuzriy++aAQGBhqurq5Gu3btjD179pgbuoBcqS1SUlKM22+/3Shbtqzh7OxsVKpUyRgyZEiJ/Idcbm0AGF988UX2PufOnTMeeeQRw8/Pz/Dw8DB69OhhnDp1yrzQBeRqbXH06FGjTZs2RunSpQ1XV1ejatWqxtNPP23Ex8ebG7wEUN+kvkl9k436Jhv1TRcUhb7J8m8QERERERERuQy7O8dJREREREQkr1Q4iYiIiIiIXIUKJxERERERkatQ4SQiIiIiInIVKpxERERERESuQoWTiIiIiIjIVahwEhERERERuQoVTiIiIiIiIlehwklEREREROQqVDiJiIiIiIhchQonERERERGRq1DhJCIiIiIichUqnERERERERK5ChZOIiIiIiMhVqHASERERERG5ChVOIiIiIiIiV6HCSURERERE5CpUOImIiIiIiFyFCicREREREZGrcDI7QGGzWq2cPHkSLy8vLBaL2XFEROyKYRgkJiYSHByMg4O+uztPfZOIiDny0i/ZXeF08uRJQkJCzI4hImLXjh07RoUKFcyOUWSobxIRMde19Et2Vzh5eXkBtsbx9vY2OY2IiH1JSEggJCQk+1gsNuqbRETMkZd+ye4Kp/NTILy9vdU5iYiYRNPRclLfJCJirmvpl0ydYL5ixQq6dOlCcHAwFouFOXPmXPU5y5Yt46abbsLV1ZWqVasyY8aMAs8pIiIiIiL2zdTCKTk5mQYNGjB58uRr2v/QoUPceeed3HrrrWzZsoXHH3+c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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "fig1, ((ax_tl, ax_tr), (ax_bl, ax_br)) = plt.subplots(2, 2, sharey='row', figsize=(10, 6))\n", "\n", "ax_tl.set_title('Training set')\n", "ax_tr.set_title('Development set')\n", "ax_bl.set_xlabel('Epochs')\n", "ax_br.set_xlabel('Epochs')\n", "ax_bl.set_ylabel('Accuracy')\n", "ax_tl.set_ylabel('Loss')\n", "\n", "colours = iter(plt.rcParams['axes.prop_cycle'].by_key()['color'])\n", "range_ = np.arange(1, trainer.epochs + 1)\n", "ax_tl.plot(range_, trainer.train_epoch_costs, color=next(colours))\n", "ax_bl.plot(range_, trainer.train_eval_results['acc'], color=next(colours))\n", "ax_tr.plot(range_, trainer.val_costs, color=next(colours))\n", "ax_br.plot(range_, trainer.val_eval_results['acc'], color=next(colours))\n", "\n", "# print test accuracy\n", "test_acc = accuracy(model.forward(test_circuits), torch.tensor(test_labels))\n", "print('Test accuracy:', test_acc.item())" ] } ], "metadata": { "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 4 }