diff --git a/docs/source/index.rst b/docs/source/index.rst index b8526bd3..bca4f73a 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -9,7 +9,7 @@ PyTorch-Struct README model networks - advanced + semiring refs diff --git a/docs/source/model.ipynb b/docs/source/model.ipynb index 955d4cdf..072b6468 100644 --- a/docs/source/model.ipynb +++ b/docs/source/model.ipynb @@ -27,7 +27,7 @@ "import torch_struct\n", "import torch\n", "import matplotlib.pyplot as plt\n", - "import matplotlib\n" + "import matplotlib" ] }, { @@ -43,7 +43,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Linear Chain" + "## Chain" ] }, { @@ -62,7 +62,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbQAAACSCAYAAAAttj/ZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAKx0lEQVR4nO3df6xfd13H8eeLe7vphmNjXeTSVjdiJRIl27gpkpllcUw6JKuJmGyJOojkJoYpaoxumozIX9M//BUJZOkqnSLDDNELaawjG0FjwN1hB2yj49qQ9HbTjnYMKsrsePvHPV3uLt+2Y99zv6f30+cj+eae8z2fnff75PttXzvnfO5pqgpJkta7lw3dgCRJfTDQJElNMNAkSU0w0CRJTTDQJElNMNAkSU0YK9CSvDLJfUm+0v286CTjnkuyr3vNj1NTkqRRMs7voSX5I+BoVd2R5Fbgoqr63RHjjlXVy8foU5KkUxo30PYD11TVk0lmgE9X1WtHjDPQJElratxA+3pVXdgtB3j6xPqqcceBfcBx4I6q+vuT7G8OmAOYYuoN53HBS+5Nw/rR139r6BbW1ONfOG/oFtZM659d61r+bgJ8k6e/VlWXjNp22kBL8ingVSM2/T6we2WAJXm6qr7rPlqSTVV1KMlrgPuBa6vqP05V94K8st6Ya0/Zm85ce5/YN3QLa+otr7586BbWTOufXeta/m4CfKrufaiqZkdtmz7df1xVbz7ZtiT/lWRmxSXHwyfZx6Hu54EknwauAE4ZaJIkfS/GnbY/D9zcLd8M/MPqAUkuSnJut7wRuAp4dMy6kiS9wLiBdgdwXZKvAG/u1kkym2RnN+bHgIUkDwMPsHwPzUCTJPXqtJccT6WqjgDfdaOrqhaAd3XL/wr8xDh1JEk6HZ8UIklqgoEmSWqCgSZJaoKBJklqgoEmSWqCgSZJaoKBJklqgoEmSWqCgSZJaoKBJklqgoEmSWqCgSZJaoKBJklqgoEmSWqCgSZJaoKBJklqgoEmSWqCgSZJaoKBJklqQi+BlmR7kv1JFpPcOmL7uUk+2m3/XJJL+6grSdIJYwdaking/cD1wOuAm5K8btWwXwGerqofAf4E+MNx60qStFIfZ2jbgMWqOlBVzwL3ADtWjdkB7O6W7wWuTZIeakuSBPQTaJuAgyvWl7r3Ro6pquPAM8DFq3eUZC7JQpKF/+PbPbQmSTpbnFGTQqrqzqqararZDZw7dDuSpHWkj0A7BGxZsb65e2/kmCTTwCuAIz3UliQJ6CfQHgS2JrksyTnAjcD8qjHzwM3d8tuB+6uqeqgtSRIA0+PuoKqOJ7kF2AtMAbuq6pEk7wMWqmoeuAv4qySLwFGWQ0+SpN6MHWgAVbUH2LPqvdtXLP8v8At91JIkaZQzalKIJEkvlYEmSWqCgSZJaoKBJklqgoEmSWqCgSZJaoKBJklqgoEmSWqCgSZJaoKBJklqgoEmSWqCgSZJaoKBJklqgoEmSWqCgSZJaoKBJklqgoEmSWqCgSZJaoKBJklqQi+BlmR7kv1JFpPcOmL7O5I8lWRf93pXH3UlSTphetwdJJkC3g9cBywBDyaZr6pHVw39aFXdMm49SZJG6eMMbRuwWFUHqupZ4B5gRw/7lSTpRRv7DA3YBBxcsb4EvHHEuJ9PcjXwOPCbVXVw9YAkc8AcwA9tmmbvwr4e2tMQ3vLqy4duYU3tfaLd72brn13rWv5uAkzNnHzbpCaFfAK4tKpeD9wH7B41qKrurKrZqpq95OKpCbUmSWpBH4F2CNiyYn1z997zqupIVX27W90JvKGHupIkPa+PQHsQ2JrksiTnADcC8ysHJFl5kngD8FgPdSVJet7Y99Cq6niSW4C9wBSwq6oeSfI+YKGq5oFfT3IDcBw4Crxj3LqSJK3Ux6QQqmoPsGfVe7evWL4NuK2PWpIkjeKTQiRJTTDQJElNMNAkSU0w0CRJTTDQJElNMNAkSU0w0CRJTTDQJElNMNAkSU0w0CRJTTDQJElNMNAkSU0w0CRJTTDQJElNMNAkSU0w0CRJTTDQJElNMNAkSU0w0CRJTegl0JLsSnI4yZdOsj1J/jzJYpIvJLmyj7qSJJ3Q1xnah4Dtp9h+PbC1e80BH+ipriRJQE+BVlWfAY6eYsgO4O5a9lngwiQzfdSWJAkmdw9tE3BwxfpS994LJJlLspBk4akjz02oNUlSC86oSSFVdWdVzVbV7CUXTw3djiRpHZlUoB0CtqxY39y9J0lSLyYVaPPAL3ezHX8SeKaqnpxQbUnSWWC6j50k+QhwDbAxyRLwXmADQFV9ENgDvBVYBL4FvLOPupIkndBLoFXVTafZXsC7+6glSdIoZ9SkEEmSXioDTZLUBANNktQEA02S1AQDTZLUBANNktQEA02S1AQDTZLUBANNktQEA02S1AQDTZLUBANNktQEA02S1AQDTZLUBANNktQEA02S1AQDTZLUBANNktQEA02S1IReAi3JriSHk3zpJNuvSfJMkn3d6/Y+6kqSdMJ0T/v5EPAXwN2nGPPPVfW2nupJkvQCvZyhVdVngKN97EuSpJeirzO0F+NNSR4GngB+u6oeWT0gyRww160em5pZ3D/B/jYCX5tgvUmb8PEtTq7Usoke39TMpCo9b4LHN/HPDtr+8+d3s18/fLINqapeKiS5FPhkVf34iG0XAN+pqmNJ3gr8WVVt7aVwT5IsVNXs0H2sFY9vffP41q+Wjw3OrOObyCzHqvpGVR3rlvcAG5JsnERtSdLZYSKBluRVSdItb+vqHplEbUnS2aGXe2hJPgJcA2xMsgS8F9gAUFUfBN4O/GqS48D/ADdWX9c6+3Pn0A2sMY9vffP41q+Wjw3OoOPr7R6aJElD8kkhkqQmGGiSpCYYaECS7Un2J1lMcuvQ/fTpdI8lW++SbEnyQJJHkzyS5D1D99SXJN+X5N+SPNwd2x8M3dNaSDKV5N+TfHLoXvqW5KtJvtg98m9h6H76luTCJPcm+XKSx5K8adB+zvZ7aEmmgMeB64Al4EHgpqp6dNDGepLkauAYcPeo3xFc75LMADNV9fkkPwA8BPxcC59fNzP4/O73NzcA/wK8p6o+O3BrvUryW8AscEFrj8dL8lVgtqqa/KXxJLtZfqzhziTnAOdV1deH6sczNNgGLFbVgap6FrgH2DFwT71p/bFkVfVkVX2+W/4m8Biwadiu+lHLjnWrG7pXU/8HmmQz8LPAzqF70fcmySuAq4G7AKrq2SHDDAw0WP7L7+CK9SUa+QvxbNM9reYK4HPDdtKf7nLcPuAwcF9VNXNsnT8Ffgf4ztCNrJEC/inJQ92j/VpyGfAU8JfdJeOdSc4fsiEDTU1I8nLgY8BvVNU3hu6nL1X1XFVdDmwGtiVp5rJxkrcBh6vqoaF7WUM/VVVXAtcD7+5uAbRiGrgS+EBVXQH8NzDoHAQDDQ4BW1asb+7e0zrR3V/6GPDhqvq7oftZC92lnAeA7UP30qOrgBu6+0z3AD+d5K+HbalfVXWo+3kY+DjLtzhasQQsrbhqcC/LATcYA215EsjWJJd1NzVvBOYH7kkvUjdx4i7gsar646H76VOSS5Jc2C1/P8sTl748bFf9qarbqmpzVV3K8p+7+6vqFwduqzdJzu8mKtFdivsZoJnZxlX1n8DBJK/t3roWGHQy1iT/+ZgzUlUdT3ILsBeYAnaN+qdt1qtRjyWrqruG7apXVwG/BHyxu9cE8HvdQ7DXuxlgdzcT92XA31ZVc1PbG/aDwMe7x9hOA39TVf84bEu9+zXgw93JwAHgnUM2c9ZP25cktcFLjpKkJhhokqQmGGiSpCYYaJKkJhhokqQmGGiSpCYYaJKkJvw/YzEJz1RVULwAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] @@ -74,7 +74,7 @@ } ], "source": [ - "batch, N, C = 3, 10, 2\n", + "batch, N, C = 3, 7, 2\n", "def show_chain(chain):\n", " plt.imshow(chain.detach().sum(-1).transpose(0, 1))\n", "\n", @@ -91,7 +91,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -109,11 +109,13 @@ { "cell_type": "code", "execution_count": 5, - "metadata": {}, + "metadata": { + "scrolled": true + }, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -125,7 +127,7 @@ } ], "source": [ - "event = dist.to_event(torch.tensor([[0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1]]), 2)\n", + "event = dist.to_event(torch.tensor([[0, 1, 0, 1, 1, 1, 0, 1]]), 2)\n", "show_chain(event[0])" ] }, @@ -133,7 +135,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## HMM" + "## Hidden Markov Model" ] }, { @@ -145,6 +147,43 @@ ".. autoclass:: torch_struct.HMM" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "batch, V, N, C = 10, 3, 7, 2\n", + "\n", + "transition = torch.rand(C, C).log_softmax(0)\n", + "emission = torch.rand(V, C).log_softmax(0)\n", + "init = torch.rand(C).log_softmax(0)\n", + "observations = torch.randint(0, V, size=(batch, N))\n", + "\n", + "dist = torch_struct.HMM(transition, emission, init, observations)\n", + "show_chain(dist.argmax[0])" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -163,12 +202,12 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -180,7 +219,7 @@ } ], "source": [ - "batch, N, C, K = 3, 20, 2, 6\n", + "batch, N, C, K = 3, 10, 2, 6\n", "def show_sm(chain):\n", " plt.imshow(chain.detach().sum(1).sum(-1).transpose(0, 1))\n", "\n", @@ -193,12 +232,12 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -215,12 +254,12 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -233,7 +272,7 @@ ], "source": [ "# Use -1 for segments.\n", - "event = dist.to_event(torch.tensor([[0, 1, -1, 1, -1, -1, 0, 1, 0, 1, 1]]), (2, 6))\n", + "event = dist.to_event(torch.tensor([[0, 1, -1, 1, -1, -1, 0, 1, 1, -1, -1]]), (2, 6))\n", "show_sm(event[0])" ] }, @@ -255,12 +294,12 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -276,7 +315,6 @@ "def show_deps(tree):\n", " plt.imshow(tree.detach())\n", "\n", - "# batch, N, z_n, z_n_1\n", "log_potentials = torch.rand(batch, N, M, 3)\n", "dist = torch_struct.AlignmentCRF(log_potentials)\n", "show_deps(dist.argmax[0])" @@ -284,19 +322,12 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n" - ] - }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -315,7 +346,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Dependency Trees" + "## Dependency Tree" ] }, { @@ -329,12 +360,12 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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A8AIgQFghMAAMEJgABghMACMEBgARiwUmKp6Y1WdrqqfVtWFqnrH9DAA1tuiv3Dsi0m+091/V1XXJDk8uAmAfWDHwFTVG5K8K8nfJ0l3X0pyaXYWAOtukafIbkjyXJKvVdUjVXVvVR155YOq6mRVnauqc5fz4p4PBWC9LBKYjSRvS/Ll7r45yQtJ7nnlg7r7VHdvdvfmwRza45kArJtFAnMxycXuPrv98elsBQcAXtOOgenuXyZ5qqresn3TiSSPja4CYO0t+i6yjyW5b/sdZE8k+cjcJAD2g4UC093nk2wObwFgH/Gd/ACMEBgARggMACMEBoARAgPACIEBYITAADBCYAAYITAAjBAYAEYIDAAjBAaAEQIDwIjq7j0/6J/Un/bb68SeHxeA1XK2v5fn+z/q1e5zBQPACIEBYITAADBCYAAYITAAjBAYAEYIDAAjBAaAEQIDwAiBAWCEwAAwQmAAGCEwAIwQGABGCAwAIwQGgBECA8AIgQFghMAAMEJgABghMACMEBgARggMACMEBoARAgPACIEBYITAADBCYAAYITAAjBAYAEYIDAAjBAaAEQIDwAiBAWCEwAAwQmAAGCEwAIwQGABGCAwAIwQGgBECA8AIgQFghMAAMEJgABghMACMEBgARggMACMEBoARAgPACIEBYITAADBCYAAYITAAjFgoMFX1yap6tKp+UlXfqKprp4cBsN52DExVHUvy8SSb3f3WJAeS3DU9DID1tuhTZBtJXldVG0kOJ3lmbhIA+8GOgenup5N8LsmTSZ5N8uvu/u4rH1dVJ6vqXFWdu5wX934pAGtlkafI3pTkziQ3JDma5EhVfeiVj+vuU9292d2bB3No75cCsFYWeYrs3Ul+3t3PdfflJA8keefsLADW3SKBeTLJrVV1uKoqyYkkF2ZnAbDuFnkN5myS00keTvLj7b9zangXAGtuY5EHdfdnk3x2eAsA+4jv5AdghMAAMEJgABghMACMEBgARggMACMEBoARAgPACIEBYITAADBCYAAYITAAjBAYAEYs9NOUASaceeb8sieslTuO3rTsCbviCgaAEQIDwAiBAWCEwAAwQmAAGCEwAIwQGABGCAwAIwQGgBECA8AIgQFghMAAMEJgABghMACMEBgARggMACMEBoARAgPACIEBYITAADBCYAAYITAAjBAYAEYIDAAjBAaAEQIDwAiBAWCEwAAwQmAAGCEwAIwQGABGCAwAIwQGgBECA8AIgQFghMAAMEJgABhR3b33B616Lsm/7dHh/izJv+/Rsa4GztfuOF+743ztztVwvv6iu//81e4YCcxeqqpz3b257B3rwvnaHedrd5yv3bnaz5enyAAYITAAjFiHwJxa9oA143ztjvO1O87X7lzV52vlX4MBYD2twxUMAGtIYAAYsbKBqar3VNXPqurxqrpn2XtWWVVdV1U/qKrHqurRqrp72ZvWQVUdqKpHqurby96y6qrqjVV1uqp+WlUXquody9606qrqk9tfjz+pqm9U1bXL3nSlrWRgqupAki8leW+SG5N8sKpuXO6qlfZSkk91941Jbk3yD87XQu5OcmHZI9bEF5N8p7v/KsnfxHn7varqWJKPJ9ns7rcmOZDkruWuuvJWMjBJbknyeHc/0d2Xktyf5M4lb1pZ3f1sdz+8/effZOuL/9hyV622qjqe5H1J7l32llVXVW9I8q4kX0mS7r7U3f+53FVrYSPJ66pqI8nhJM8sec8Vt6qBOZbkqZd9fDH+h7mQqro+yc1Jzi53ycr7QpJPJ/ndsoesgRuSPJfka9tPKd5bVUeWPWqVdffTST6X5Mkkzyb5dXd/d7mrrrxVDQz/D1X1+iTfTPKJ7n5+2XtWVVW9P8mvuvuhZW9ZExtJ3pbky919c5IXknhd9Peoqjdl61mXG5IcTXKkqj603FVX3qoG5ukk173s4+Pbt/EaqupgtuJyX3c/sOw9K+62JB+oql9k6+nX26vq68udtNIuJrnY3f9zVXw6W8Hhtb07yc+7+7nuvpzkgSTvXPKmK25VA/OjJG+uqhuq6ppsvTj2rSVvWllVVdl6fvxCd39+2XtWXXd/pruPd/f12frc+n53X3X/ulxUd/8yyVNV9Zbtm04keWyJk9bBk0lurarD21+fJ3IVvjFiY9kDXk13v1RVH01yJlvvvvhqdz+65Fmr7LYkH07y46o6v33bP3b3g0vcxP7ysST3bf+D74kkH1nynpXW3Wer6nSSh7P1Ls9HchX+2Bg/KgaAEav6FBkAa05gABghMACMEBgARggMACMEBoARAgPAiP8GLRUZmfQD6L8AAAAASUVORK5CYII=\n", "text/plain": [ "
" ] @@ -350,7 +381,6 @@ "def show_deps(tree):\n", " plt.imshow(tree.detach())\n", "\n", - "# batch, N, z_n, z_n_1\n", "log_potentials = torch.rand(batch, N, N)\n", "dist = torch_struct.DependencyCRF(log_potentials)\n", "show_deps(dist.argmax[0])" @@ -358,12 +388,12 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -380,7 +410,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -406,7 +436,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Non-Projective Dependency Trees" + "## Non-Projective Dependency Tree" ] }, { @@ -420,19 +450,12 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -448,7 +471,6 @@ "def show_deps(tree):\n", " plt.imshow(tree.detach())\n", "\n", - "# batch, N, z_n, z_n_1\n", "log_potentials = torch.rand(batch, N, N)\n", "dist = torch_struct.NonProjectiveDependencyCRF(log_potentials)\n", "show_deps(dist.marginals[0])" @@ -458,7 +480,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Binary Labeled Trees" + "## Binary Labeled Tree" ] }, { @@ -472,12 +494,12 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAGbCAYAAACRXATDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAXKElEQVR4nO3df6zldX3n8edrASFQGMCpyK/1R2VJbFOn7gRl1za4WH5MjNiu24U0W6xupro1W5M1Dbsmatx/1m2sicVIp0rUxiKpFku2UwfWNqEmgI5kQFCUkdA4A4Ij7qDVqmPf+8f9jrncOWfu7T1f5r7Pvc9HcnK+Pz7n833f7/3Oec33e773fFJVSJLUzb9Y6wIkSZrEgJIktWRASZJaMqAkSS0ZUJKklo5f6wImOX7TyXXiWZtG6eu4h344Sj+StFL/6he/P1pfX/nBGaP1Neb74aHNp4zSz4+++ySH/vEfMmldy4A68axN/Pz7Xz9KX5u27R2lH0laqV279ozW18v3vG60vsZ8Pzzw7y8epZ+vfup9U9d5iU+S1JIBJUlqyYCSJLVkQEmSWjKgJEktzRRQSa5I8tUke5NcN2H9iUluHtbfneT5s2xPkrRxrDqgkhwHfAC4EngxcE2SFy9p9kbgO1X1IuB9wHtWuz1J0sYyyxnURcDeqnq4qn4EfAK4akmbq4CPDtOfBC5NMvEPsiRJWmyWgDoX+Mai+X3DsoltquoQcBB49qTOkmxPsjvJ7kMHx/srbEnSfGpzk0RV7aiqrVW19fhNJ691OZKkNTZLQO0Hzl80f96wbGKbJMcDm4Bvz7BNSdIGMUtAfQG4IMkLkjwLuBq4dUmbW4Frh+nXAX9TjjEvSVqBVX9ZbFUdSvIWYBdwHHBjVT2Q5N3A7qq6Ffgw8KdJ9gJPshBikiQta6ZvM6+qncDOJcvesWj6H4H/MMs2JEkbU5ubJCRJWsyAkiS1ZEBJklpKx5vqTsuZ9bJcOkpfB7aPM+ojwOYdd47Wl9bOwZ0vGq2vu7Z8crS+Orv8nC1rXcJEY/77PuG13xqtrx9/+mdH62u9v+/cXZ/lqXpy4jcMeQYlSWrJgJIktWRASZJaMqAkSS0ZUJKklgwoSVJLBpQkqSUDSpLUkgElSWrJgJIktWRASZJaMqAkSS0ZUJKklgwoSVJLBpQkqSUDSpLUkgElSWrJgJIktbTuh3wfk8PHrw/+HqU+HPJdkjR3DChJUksGlCSpJQNKktSSASVJasmAkiS1ZEBJkloyoCRJLRlQkqSWDChJUksGlCSpJQNKktSSASVJasmAkiS1ZEBJklpadUAlOT/J3yb5cpIHkvzehDaXJDmYZM/weMds5UqSNorjZ3jtIeC/VdU9SU4Fvpjk9qr68pJ2f1dVr55hO5KkDWjVZ1BV9VhV3TNMfxf4CnDuWIVJkja2Wc6gfirJ84FfAu6esPriJPcCjwJvq6oHpvSxHdgOcBInj1HW6MYc3rvrsONd69r16J7R+oLx+rp8x5bR+pL0dDMHVJKfAT4FvLWqnlqy+h7geVX1vSTbgE8DF0zqp6p2ADsATsuZNWtdkqT5NtNdfElOYCGcPl5Vf7F0fVU9VVXfG6Z3Aick2TzLNiVJG8Msd/EF+DDwlar6wyltnju0I8lFw/a+vdptSpI2jlku8f1b4D8BX0py+KL+/wD+JUBV3QC8DnhzkkPAD4Crq8rLd5KkZa06oKrqc0CWaXM9cP1qtyFJ2rj8JglJUksGlCSpJQNKktSSASVJasmAkiS1ZEBJkloyoCRJLRlQkqSWDChJUksGlCSpJQNKktSSASVJasmAkiS1lI6jX5yWM+tluXSty5gbB3e+aK1LmGjTtr1rXYKk5u6uz/JUPTlxZAzPoCRJLRlQkqSWDChJUksGlCSpJQNKktSSASVJasmAkiS1ZEBJkloyoCRJLRlQkqSWDChJUksGlCSpJQNKktSSASVJasmAkiS1ZEBJkloyoCRJLRlQkqSWjl/rAjS7MYdWP7D94tH6Aod8l7R6nkFJkloyoCRJLRlQkqSWDChJUksGlCSpJQNKktTSzAGV5JEkX0qyJ8nuCeuT5P1J9ia5L8lLZ92mJGn9G+vvoF5ZVQemrLsSuGB4vAz44PAsSdJUx+IS31XAx2rBXcDpSc4+BtuVJM2xMQKqgNuSfDHJ9gnrzwW+sWh+37DsaZJsT7I7ye4f88MRypIkzbMxLvG9oqr2J3kOcHuSB6vqjn9uJ1W1A9gBcFrOrBHqkiTNsZnPoKpq//D8BHALcNGSJvuB8xfNnzcskyRpqpkCKskpSU49PA1cBty/pNmtwG8Nd/O9HDhYVY/Nsl1J0vo36yW+s4Bbkhzu68+q6jNJ3gRQVTcAO4FtLHy19feB355xm5KkDWCmgKqqh4GXTFh+w6LpAn53lu1IkjYev0lCktSSASVJasmAkiS15JDveprNO+4cra+DO180Wl9j2rTNoeileeAZlCSpJQNKktSSASVJasmAkiS1ZEBJkloyoCRJLRlQkqSWDChJUksGlCSpJQNKktSSASVJasmAkiS1ZEBJkloyoCRJLRlQkqSWDChJUksGlCSpJQNKktSSQ77rGTPm0OoHtl88Wl/gkO/SPPAMSpLUkgElSWrJgJIktWRASZJaMqAkSS0ZUJKklgwoSVJLBpQkqSUDSpLUkgElSWrJgJIktWRASZJaMqAkSS0ZUJKklgwoSVJLqw6oJBcm2bPo8VSSty5pc0mSg4vavGP2kiVJG8GqByysqq8CWwCSHAfsB26Z0PTvqurVq92OJGljGusS36XA16vq70fqT5K0wY015PvVwE1T1l2c5F7gUeBtVfXApEZJtgPbAU7i5JHK0nqxecedo/U15vDxY9Yl6elmPoNK8izgNcCfT1h9D/C8qnoJ8EfAp6f1U1U7qmprVW09gRNnLUuSNOfGuMR3JXBPVT2+dEVVPVVV3xumdwInJNk8wjYlSevcGAF1DVMu7yV5bpIM0xcN2/v2CNuUJK1zM30GleQU4FeB31m07E0AVXUD8DrgzUkOAT8Arq6qmmWbkqSNYaaAqqp/AJ69ZNkNi6avB66fZRuSpI3Jb5KQJLVkQEmSWjKgJEktGVCSpJYMKElSSwaUJKklA0qS1JIBJUlqyYCSJLVkQEmSWjKgJEktGVCSpJYMKElSS2MN+S7NjTGHaT+480Wj9bVp297R+pLWA8+gJEktGVCSpJYMKElSSwaUJKklA0qS1JIBJUlqyYCSJLVkQEmSWjKgJEktGVCSpJYMKElSSwaUJKklA0qS1JIBJUlqyYCSJLVkQEmSWjKgJEktGVCSpJYc8l2awZjDtO96dM9ofV1+zpbR+pLWimdQkqSWDChJUksGlCSpJQNKktSSASVJasmAkiS1tKKASnJjkieS3L9o2ZlJbk/y0PB8xpTXXju0eSjJtWMVLkla31Z6BvUR4Ioly64DPltVFwCfHeafJsmZwDuBlwEXAe+cFmSSJC22ooCqqjuAJ5csvgr46DD9UeC1E156OXB7VT1ZVd8BbufIoJMk6QizfJPEWVX12DD9TeCsCW3OBb6xaH7fsOwISbYD2wFO4uQZypIkrQej3CRRVQXUjH3sqKqtVbX1BE4coyxJ0hybJaAeT3I2wPD8xIQ2+4HzF82fNyyTJOmoZgmoW4HDd+VdC/zlhDa7gMuSnDHcHHHZsEySpKNa6W3mNwF3Ahcm2ZfkjcD/An41yUPAq4Z5kmxN8iGAqnoS+J/AF4bHu4dlkiQd1Ypukqiqa6asunRC293Af140fyNw46qqkyRtWH6ThCSpJQNKktSSASVJasmAkiS1NMs3SUga0eXnbBmtrwPbLx6tL4DNO+4ctT9pJTyDkiS1ZEBJkloyoCRJLRlQkqSWDChJUksGlCSpJQNKktSSASVJasmAkiS1ZEBJkloyoCRJLRlQkqSWDChJUksGlCSpJQNKktSSASVJasmAkiS1ZEBJklpyyHdpHRp7iPYxh5Afs7Zdj+4Zra/Lz9kyWl8ah2dQkqSWDChJUksGlCSpJQNKktSSASVJasmAkiS1ZEBJkloyoCRJLRlQkqSWDChJUksGlCSpJQNKktSSASVJasmAkiS1ZEBJklpaNqCS3JjkiST3L1r2B0keTHJfkluSnD7ltY8k+VKSPUl2j1m4JGl9W8kZ1EeAK5Ysux34har6ReBrwH8/yutfWVVbqmrr6kqUJG1EywZUVd0BPLlk2W1VdWiYvQs47xmoTZK0gY0x5PsbgJunrCvgtiQF/HFV7ZjWSZLtwHaAkzh5hLIkjaXrMO3/+l1vHq2vzYz3M2ocMwVUkrcDh4CPT2nyiqran+Q5wO1JHhzOyI4whNcOgNNyZs1SlyRp/q36Lr4krwdeDfxmVU0MlKraPzw/AdwCXLTa7UmSNpZVBVSSK4DfB15TVd+f0uaUJKcengYuA+6f1FaSpKVWcpv5TcCdwIVJ9iV5I3A9cCoLl+32JLlhaHtOkp3DS88CPpfkXuDzwF9V1WeekZ9CkrTuLPsZVFVdM2Hxh6e0fRTYNkw/DLxkpuokSRuW3yQhSWrJgJIktWRASZJaMqAkSS0ZUJKklgwoSVJLBpQkqSUDSpLUkgElSWrJgJIktWRASZJaMqAkSS0ZUJKklsYY8l2SVuzyc7aM1tcXH/3gaH1dvmO8ujQOz6AkSS0ZUJKklgwoSVJLBpQkqSUDSpLUkgElSWrJgJIktWRASZJaMqAkSS0ZUJKklgwoSVJLBpQkqSUDSpLUkgElSWrJgJIktWRASZJaMqAkSS0ZUJKklhzyXdLcGnP4+F2P7hmtrzHr2sg8g5IktWRASZJaMqAkSS0ZUJKklgwoSVJLywZUkhuTPJHk/kXL3pVkf5I9w2PblNdekeSrSfYmuW7MwiVJ69tKzqA+AlwxYfn7qmrL8Ni5dGWS44APAFcCLwauSfLiWYqVJG0cywZUVd0BPLmKvi8C9lbVw1X1I+ATwFWr6EeStAHN8hnUW5LcN1wCPGPC+nOBbyya3zcsmyjJ9iS7k+z+MT+coSxJ0nqw2oD6IPBzwBbgMeC9sxZSVTuqamtVbT2BE2ftTpI051YVUFX1eFX9pKr+CfgTFi7nLbUfOH/R/HnDMkmSlrWqgEpy9qLZXwPun9DsC8AFSV6Q5FnA1cCtq9meJGnjWfbLYpPcBFwCbE6yD3gncEmSLUABjwC/M7Q9B/hQVW2rqkNJ3gLsAo4DbqyqB56Rn0KStO4sG1BVdc2ExR+e0vZRYNui+Z3AEbegS5K0HL9JQpLUkgElSWrJgJIktWRASZJacsh3SWLcYdoPbL94tL4277hztL7mjWdQkqSWDChJUksGlCSpJQNKktSSASVJasmAkiS1ZEBJkloyoCRJLRlQkqSWDChJUksGlCSpJQNKktSSASVJasmAkiS1ZEBJkloyoCRJLRlQkqSWDChJUksO+S5JIxtzmPZdj+4Zra8xh7U/FjyDkiS1ZEBJkloyoCRJLRlQkqSWDChJUksGlCSpJQNKktSSASVJasmAkiS1ZEBJkloyoCRJLRlQkqSWDChJUksGlCSpJQNKktTSsuNBJbkReDXwRFX9wrDsZuDCocnpwP+rqiMGGknyCPBd4CfAoaraOlLdkqR1biUDFn4EuB742OEFVfUfD08neS9w8Civf2VVHVhtgZKkjWnZgKqqO5I8f9K6JAF+A/h345YlSdroZh3y/ZeBx6vqoSnrC7gtSQF/XFU7pnWUZDuwHeAkTp6xLElaH8Ycpv3A9otH6+uE135rlH5+8l8/N3XdrAF1DXDTUda/oqr2J3kOcHuSB6vqjkkNh/DaAXBazqwZ65IkzblV38WX5Hjg14Gbp7Wpqv3D8xPALcBFq92eJGljmeU281cBD1bVvkkrk5yS5NTD08BlwP0zbE+StIEsG1BJbgLuBC5Msi/JG4dVV7Pk8l6Sc5LsHGbPAj6X5F7g88BfVdVnxitdkrSereQuvmumLH/9hGWPAtuG6YeBl8xYnyRpg/KbJCRJLRlQkqSWDChJUksGlCSpJQNKktSSASVJasmAkiS1ZEBJkloyoCRJLRlQkqSWDChJUksGlCSpJQNKktTSrCPqSpLmxOYdd47W1wHGGT6+vjM9hjyDkiS1ZEBJkloyoCRJLRlQkqSWDChJUksGlCSpJQNKktSSASVJasmAkiS1ZEBJkloyoCRJLRlQkqSWDChJUksGlCSpJQNKktSSASVJasmAkiS1ZEBJklpKVa11DUdI8i3g75dpthk4cAzKeabMc/3zXDvMd/3zXDvMd/3zXDv0rf95VfWzk1a0DKiVSLK7qraudR2rNc/1z3PtMN/1z3PtMN/1z3PtMJ/1e4lPktSSASVJammeA2rHWhcwo3muf55rh/muf55rh/muf55rhzmsf24/g5IkrW/zfAYlSVrHDChJUkvtAyrJFUm+mmRvkusmrD8xyc3D+ruTPP/YV3mkJOcn+dskX07yQJLfm9DmkiQHk+wZHu9Yi1qnSfJIki8Nte2esD5J3j/s+/uSvHQt6pwkyYWL9uueJE8leeuSNm32f5IbkzyR5P5Fy85McnuSh4bnM6a89tqhzUNJrj12VT+thkn1/0GSB4dj45Ykp0957VGPs2falNrflWT/omNj25TXHvX96ViYUv/Ni2p/JMmeKa9d032/rKpq+wCOA74OvBB4FnAv8OIlbf4LcMMwfTVw81rXPdRyNvDSYfpU4GsTar8E+D9rXetRfoZHgM1HWb8N+GsgwMuBu9e65qMcR99k4Q8CW+5/4FeAlwL3L1r2v4HrhunrgPdMeN2ZwMPD8xnD9BlN6r8MOH6Yfs+k+ldynK1R7e8C3raC4+qo709rVf+S9e8F3tFx3y/36H4GdRGwt6oerqofAZ8ArlrS5irgo8P0J4FLk+QY1jhRVT1WVfcM098FvgKcu7ZVje4q4GO14C7g9CRnr3VRE1wKfL2qlvt2kjVTVXcATy5ZvPjY/ijw2gkvvRy4vaqerKrvALcDVzxjhU4xqf6quq2qDg2zdwHnHeu6VmLKvl+Jlbw/PeOOVv/wXvgbwE3HtKiRdA+oc4FvLJrfx5Fv8j9tM/xjOAg8+5hUt0LDZcdfAu6esPriJPcm+eskP39MC1teAbcl+WKS7RPWr+T308HVTP8H2nn/n1VVjw3T3wTOmtBmXn4Hb2DhbHuS5Y6ztfKW4fLkjVMur87Dvv9l4PGqemjK+q77HugfUHMvyc8AnwLeWlVPLVl9DwuXnV4C/BHw6WNd3zJeUVUvBa4EfjfJr6x1Qf9cSZ4FvAb48wmru+//n6qF6zFz+TchSd4OHAI+PqVJx+Psg8DPAVuAx1i4TDaPruHoZ08d9/1PdQ+o/cD5i+bPG5ZNbJPkeGAT8O1jUt0ykpzAQjh9vKr+Yun6qnqqqr43TO8ETkiy+RiXOVVV7R+enwBuYeGSxmIr+f2stSuBe6rq8aUruu9/4PHDl0yH5ycmtGn9O0jyeuDVwG8OIXuEFRxnx1xVPV5VP6mqfwL+ZEpN3ff98cCvAzdPa9Nx3y/WPaC+AFyQ5AXD/4SvBm5d0uZW4PCdS68D/mbaP4Rjabj2+2HgK1X1h1PaPPfw52VJLmLh99ElXE9JcurhaRY+8L5/SbNbgd8a7uZ7OXBw0SWpLqb+D7Lz/h8sPravBf5yQptdwGVJzhguQ102LFtzSa4Afh94TVV9f0qblRxnx9ySz1J/jck1reT9aS29CniwqvZNWtl13z/NWt+lsdyDhTvFvsbC3TJvH5a9m4WDHuAkFi7f7AU+D7xwrWse6noFC5dk7gP2DI9twJuANw1t3gI8wMLdP3cB/2at615U/wuHuu4dajy87xfXH+ADw+/mS8DWta57yc9wCguBs2nRspb7n4UQfQz4MQufZbyRhc9SPws8BPxf4Myh7VbgQ4te+4bh+N8L/Haj+vey8BnN4eP/8N225wA7j3acNaj9T4dj+j4WQufspbUP80e8P3Wof1j+kcPH+qK2rfb9cg+/6kiS1FL3S3ySpA3KgJIktWRASZJaMqAkSS0ZUJKklgwoSVJLBpQkqaX/D36Ig1JDrEwiAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] @@ -496,7 +518,6 @@ " 2 * t[ :,:, 1] +\n", " 3 * t[ :,:, 2])\n", "\n", - "# batch, N, z_n, z_n_1\n", "log_potentials = torch.rand(batch, N, N, NT)\n", "dist = torch_struct.TreeCRF(log_potentials)\n", "show_tree(dist.argmax[0])" @@ -504,12 +525,12 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "metadata": {}, "outputs": [ { "data": { - "image/png": "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AJREQAEASmLKd2AS+sg5v5Za7xu7bkqr9dvvuy6t1ilbnk6rNe3Is2m14tlDibXy+tLAQF6tccARFACgJAIKAFASAQUAKImAAgCUREABAEoioAAAJRFQAICSCCgAQEkEFACgJAIKAFASAQUAKImAAgCUREABAEoioAAAJRFQAICSRgwo22tt77G9uWXZx2w/avsh23fbPqXDY3fYftj2JtsbMxsHAExuozmCul3S0iHLNkj6lYj4NUk/kPRfh3n8ayPigohYNLYWAQBT0YgBFRH3Sto7ZNk9EdHf3L1P0oLnoTcAwBSWMeX7WyXd1WFdSLrHdkj664hY06mI7VWSVknSbJ2Y0BaALFfM/w9ptW7Y+r/Tan3q2uVptU44dCStlg8dTqulGRkv0w07rVSMw/TxXX3ltj8gqV/S5zsMuTgidtl+saQNth9tjsiO04TXGkma47nRTV8AgN435qv4bL9Z0uWSroqItoESEbuaz3sk3S1p8VifDwAwtYwpoGwvlfReSVdExIEOY06yffKx25KWSNrcbiwAAEON5jLzOyV9S9K5tnfaXinpZkkna/C03Sbbq5uxZ9he3zx0nqRv2n5Q0rcl/UNEfPV5+SoAAJPOiH+DiogVbRbf1mHsE5KWNbe3Szq/q+4AAFMW7yQBACiJgAIAlERAAQBKIqAAACURUACAkggoAEBJBBQAoCQCCgBQEgEFACiJgAIAlERAAQBKIqAAACURUACAkhLnEgaAkd268BVptb74+KfSar3xbden1TrhX4+m1VJ/f1ope2ZarbS+nu08DT1HUACAkggoAEBJBBQAoCQCCgBQEgEFACiJgAIAlERAAQBKIqAAACURUACAkggoAEBJBBQAoCQCCgBQEgEFACiJgAIAlERAAQBKIqAAACURUACAkggoAEBJTPkOoGdddeZvptX63L99Mq3WW666Lq3WzEOH02ppWt4xiQ8cTCrElO8AgB5DQAEASiKgAAAlEVAAgJIIKABASSMGlO21tvfY3tyy7EO2d9ne1Hws6/DYpba/b3ub7RsyGwcATG6jOYK6XdLSNss/GREXNB/rh660PV3SLZIuk3SepBW2z+umWQDA1DFiQEXEvZL2jqH2YknbImJ7RByW9AVJV46hDgBgCurmb1DX2n6oOQV4apv18yU93nJ/Z7OsLdurbG+0vfGIDnXRFgBgMhhr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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -528,7 +549,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Probabilistic Context-Free Grammars" + "## Probabilistic Context-Free Grammar" ] }, { @@ -541,26 +562,87 @@ ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 18, "metadata": {}, + "outputs": [], "source": [ - "## Autoregressive" + "batch, N, NT, T = 3, 20, 3, 3\n", + "def show_prob_tree(tree):\n", + " t = tree.detach().sum(-1).sum(-1)\n", + " plt.imshow(t[ :, : , 0] + \n", + " 2 * t[ :,:, 1] +\n", + " 3 * t[ :,:, 2])\n", + "\n", + "terminals = torch.rand(batch, N, T)\n", + "rules = torch.rand(batch, NT, NT+T, NT+T)\n", + "init = torch.rand(batch, NT).log_softmax(-1)\n", + "\n", + "dist = torch_struct.SentCFG((terminals, rules, init))\n", + "term, rules, init = dist.argmax" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ - " .. autoclass:: torch_struct.Autoregressive" + "# Rules\n", + "show_prob_tree(rules[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbQAAAA2CAYAAACvO2whAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAI2ElEQVR4nO3df+xVdR3H8ecrUdrU6RdpSuQ0qln0RwnfmZU5F0jqGvTDNVxbmDZyxcq2VmxszvkX2qqt1mqELHPOWJpKTacYuv6CBAcK/gIcTRmCIkGszcLe/XE+lx0v59x7+d7zvefc6+ux3d1z7/ncc94fP59733zPj7eKCMzMzIbde+oOwMzMrApOaGZmNhKc0MzMbCQ4oZmZ2UhwQjMzs5HghGZmZiOhr4QmaZqk9ZJ2puexknZvS9qaHuv62aeZmVkR9XMfmqQ7gDcjYqWk5cBYRPy4oN3RiDijjzjNzMw66jehvQhcERH7JM0AnoyIiwraOaGZmdmk6jeh/TMizk7LAg61Xre1OwZsBY4BKyPiwZLtLQWWApwOcz864chOtGVuUzcGc9lS2ba2UG1szK0utgo3VbmKh/Rd1VebmCrnSOVj2uhJsuWNiHhf0ZquCU3S48B5BatWAHflE5ikQxFxwnk0STMjYq+kWcAGYF5E7O6033EpNneM7OSoygpflW4MAlW2LVFxKbOoLrYKN1W5iof0XdVXm5gq50jlY9roSaItETFetGZKt49GxPzSzUr7Jc3IHXI8ULKNven5ZUlPAhcDHROamZnZyej3sv11wJK0vAR4qL2BpDFJU9PydOCzwHN97tfMzOwd+k1oK4ErJe0E5qfXSBqXtDq1+RiwWdI24Amyc2hOaGZmVqm+LgqZTD6HNjE+hzYxPodmg+ZzaBNVfg7NlULMzGwkVJLQJF0l6UVJu9IN1u3rp0pam9ZvknRhFfs1MzNr6TuhSToF+BVwNTAbuE7S7LZmN5Ldo/Zh4OfA7f3u18zMLK+Kv9AuAXZFxMsR8R/gD8CitjaLgLvS8n3AvHQjtpmZWSWqSGgzgVdyr19N7xW2iYhjwGHgnPYNSVoqabOkza9XEJiZmb17NOqikIhYFRHjETFeWNfEzMysRBUJbS9wfu71B9J7hW0kTQHOAg5WsG8zMzOgmoT2FPARSR+UdBqwmKyCSF6+osi1wIZo6g1wZmY2lLrWcuwmIo5JWgY8CpwCrImIHZJuAzZHxDrgTuBuSbuAN8mSnpmZWWVcKaT2jblSSBO4UogNmiuFTJQrhZiZ2YgbVKWQ6yW9Lmlrenyriv2amZm19H0OLVcp5Eqye9CekrSuoKL+2ohY1u/+zMzMigyqUoiZmdmk6vsvNIorhXyqoN1XJV0OvAT8ICJeaW8gaSmwNL08Knixh/1PB97o2qrSk/TVnvFXr33odWtV6n1zXfvQ4OskWsFVNg419rV7Hxo9EFV+F2rTUx8a/JMEqMnjcEHZiioSWi/+DNwbEW9J+jZZXcfPtzeKiFXAqpPZsKTNZVe8DAv3oRnch/oNe/zgPtRpIJVCIuJgRLyVXq4G5lawXzMzs+MGUilE0ozcy4XA8xXs18zM7LhBVQr5nqSFwDGySiHX97vfnJM6RNlQ7kMzuA/1G/b4wX2oTWMrhZiZmZ0MVwoxM7OR4IRmZmYjYWgSWg/ltaZKWpvWb5J04eCjLCfpfElPSHpO0g5J3y9oc4Wkw7kSYbfUEWsnkvZIejbFd0L9aGV+kcbhGUlz6oizjKSLcv99t0o6IunmtjaNGwdJayQdkLQ99940Sesl7UzPYyWfXZLa7JS0pKjNZCuJ/yeSXkjz5AFJZ5d8tuOcG5SSPtwqaW9urlxT8tmOv1+DUtKHtbn490jaWvLZRoxDRxHR+AfZxSa7gVnAacA2YHZbm+8Av0nLi8lKbdUeey6+GcCctHwm2Q3m7X24AvhL3bF26cceYHqH9dcAj5Dd6nkpsKnumLvMq9eAC5o+DsDlwBxge+69O4DlaXk5cHvB56YBL6fnsbQ81pD4FwBT0vLtRfH3Mudq7sOtwA97mGcdf7/q7EPb+p8CtzR5HDo9huUvtF7Kay0iu2Eb4D5gnqTG1ESIiH0R8XRa/hfZrQsz641qUiwCfh+ZjcDZbbdtNMk8YHdE/KPuQLqJiL+RXSGcl5/zdwFfKvjoF4D1EfFmRBwC1gNXTVqgJYrij4jHIuJYermR7B7WxioZg140pjxgpz6k38uvAfcONKgKDUtCKyqv1Z4MjrdJX5LDwDkDie4kpcOhFwObClZ/WtI2SY9I+vhAA+tNAI9J2pJKlbXrZayaYjHlX96mjwPAuRGxLy2/Bpxb0GZYxuMGsr/si3Sbc3Vblg6brik57DssY/A5YH9E7CxZ3/RxGJqENjIknQHcD9wcEUfaVj9NdvjrE8AvgQcHHV8PLouIOcDVwHeV1eccOqkIwELgjwWrh2Ec3iGyY0JDeQ+OpBVk96jeU9KkyXPu18CHgE8C+8gO2Q2r6+j811mTxwEYnoTWtbxWvo2kKcBZwMGBRNcjSaeSJbN7IuJP7esj4khEHE3LDwOnSpo+4DA7ioi96fkA8ADZ4ZS8XsaqCa4Gno6I/e0rhmEckv2tw7np+UBBm0aPh6TrgS8CX09J+QQ9zLnaRMT+iHg7Iv4H/Jbi2Bo9BnD8N/MrwNqyNk0eh5ZhSWhdy2ul160ruK4FNpR9QeqQjk/fCTwfET8raXNe67yfpEvIxqcxSVnS6ZLObC2TndTf3tZsHfCNdLXjpcDh3GGxJin912jTxyEnP+eXAA8VtHkUWCBpLB0OW5Deq52kq4AfAQsj4t8lbXqZc7VpOz/8ZYpj6+X3q27zgRci4tWilU0fh+Pqviql1wfZ1XMvkV0ttCK9dxvZlwHgvWSHj3YBfwdm1R1zW/yXkR0SegbYmh7XADcBN6U2y4AdZFdBbQQ+U3fcbX2YlWLbluJsjUO+DyL7H77uBp4FxuuOu6Afp5MlqLNy7zV6HMiS7z7gv2TnYG4kO0f8V2An8DgwLbUdB1bnPntD+l7sAr7ZoPh3kZ1ban0fWlcpvx94uNOca1Af7k7z/BmyJDWjvQ/p9Qm/X03pQ3r/d635n2vbyHHo9HDpKzMzGwnDcsjRzMysIyc0MzMbCU5oZmY2EpzQzMxsJDihmZnZSHBCMzOzkeCEZmZmI+H/XmRvo146rRcAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Terminals\n", + "plt.imshow(term[:1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Base Class" + "## Autoregressive / Beam Search" ] }, { @@ -569,8 +651,609 @@ "raw_mimetype": "text/restructuredtext" }, "source": [ - ".. autoclass:: torch_struct.StructDistribution\n", - " :members: " + " .. autoclass:: torch_struct.Autoregressive" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "batch, N, C, H, layer = 3, 10, 4, 5, 1\n", + "init = (torch.rand(batch, layer, H), \n", + " torch.rand(batch, layer, H))\n", + "def t(a): \n", + " return [t.transpose(0, 1) for t in a]\n", + "\n", + "def show_ar(chain):\n", + " plt.imshow(chain.detach().transpose(0, 1))\n", + "\n", + "class RNN_AR(torch.nn.Module): \n", + " def __init__(self): \n", + " super().__init__() \n", + " self.rnn = torch.nn.LSTM(H, H, batch_first=True) \n", + " self.proj = torch.nn.Linear(H, C) \n", + " self.embed = torch.nn.Embedding(C, H) \n", + "\n", + " def forward(self, inputs, state): \n", + " inputs = self.embed(inputs) \n", + " out, state = self.rnn(inputs, t(state))\n", + " return self.proj(out), t(state)\n", + " \n", + "dist = torch_struct.Autoregressive(RNN_AR(), init, C, N)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "path = dist.greedy_argmax()\n", + "show_ar(path[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[-11.9900, -11.9229, -11.8859]], grad_fn=)" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dist.log_prob(path.unsqueeze(0))" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "out = dist.beam_topk(5)[:, 0]\n", + "for i in range(3):\n", + " show_ar(out[i])\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "torch.Size([5, 10, 4])\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "out = dist.sample((5,))[:, 0 ]\n", + "print(out.shape)\n", + "for i in range(3):\n", + " show_ar(out[i])\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "out = dist.sample_without_replacement((5,))[:, 0]\n", + "for i in range(3):\n", + " show_ar(out[i])\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Base Class" + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/restructuredtext" + }, + "source": [ + ".. autoclass:: torch_struct.StructDistribution\n", + " :members: " + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "batch, N, C = 3, 7, 2\n", + "\n", + "# batch, N, z_n, z_n_1\n", + "log_potentials = torch.rand(batch, N, C, C)\n", + "dist = torch_struct.LinearChainCRF(log_potentials, lengths=torch.tensor([N-1, N, N+1]))\n", + "show_chain(dist.argmax[0])\n", + "plt.show()\n", + "show_chain(dist.argmax[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "show_chain(dist.marginals[0])\n", + "plt.show()\n", + "show_chain(dist.marginals[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "def show_samples(samples):\n", + " show_chain(samples[0, 0])\n", + " plt.show()\n", + " show_chain(samples[1, 0])\n", + " plt.show()\n", + " show_chain(samples[0, 1])" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbQAAACSCAYAAAAttj/ZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAKq0lEQVR4nO3df6xfd13H8eeL22664dhYF7m01Y1YiUTJNm6KZGZZHJMOyWoiJluiDiK5iWGKGqObJiPy1/QPf0UCWbpKp8gwQ/RCGuvIRtAYcHfYAdvouDYkvd20ox2DijI73v5xT5e7y7ft2Pf0e+793Ocj+eaeH5+e9/ukvffV7zmf77mpKiRJWuteNnQDkiT1wUCTJDXBQJMkNcFAkyQ1wUCTJDXBQJMkNWGsQEvyyiT3JflK9/WiU4x7Lsn+7jU3Tk1JkkbJOJ9DS/JHwLGquiPJrcBFVfW7I8Ydr6qXj9GnJEmnNW6gHQCuqaonk0wDn66q144YZ6BJks6qcQPt61V1Ybcc4OmT6yvGnQD2AyeAO6rq709xvFlgFmCKqTecxwUvubfV7kdf/62hW9AYHv/CeUO3IK1L3+Tpr1XVJaP2nTHQknwKeNWIXb8P7FkeYEmerqrvuo+WZHNVHU7yGuB+4Nqq+o/T1b0gr6w35trT9raW7Xti/9AtaAxvefXlQ7cgrUufqnsfqqqZUfs2nOkPV9WbT7UvyX8lmV52yfHIKY5xuPt6MMmngSuA0waaJEnfi3Gn7c8BN3fLNwP/sHJAkouSnNstbwKuAh4ds64kSS8wbqDdAVyX5CvAm7t1kswk2dWN+TFgPsnDwAMs3UMz0CRJvTrjJcfTqaqjwHfd6KqqeeBd3fK/Aj8xTh1Jks7EJ4VIkppgoEmSmmCgSZKaYKBJkppgoEmSmmCgSZKaYKBJkppgoEmSmmCgSZKaYKBJkppgoEmSmmCgSZKaYKBJkppgoEmSmmCgSZKaYKBJkppgoEmSmmCgSZKaYKBJkprQS6Al2ZHkQJKFJLeO2H9uko92+z+X5NI+6kqSdNLYgZZkCng/cD3wOuCmJK9bMexXgKer6keAPwH+cNy6kiQt18c7tO3AQlUdrKpngXuAnSvG7AT2dMv3AtcmSQ+1JUkC+gm0zcChZeuL3baRY6rqBPAMcPHKAyWZTTKfZP7/+HYPrUmS1otVNSmkqu6sqpmqmtnIuUO3I0laQ/oItMPA1mXrW7ptI8ck2QC8AjjaQ21JkoB+Au1BYFuSy5KcA9wIzK0YMwfc3C2/Hbi/qqqH2pIkAbBh3ANU1YkktwD7gClgd1U9kuR9wHxVzQF3AX+VZAE4xlLoSZLUm7EDDaCq9gJ7V2y7fdny/wK/0EctSZJGWVWTQiRJeqkMNElSEww0SVITDDRJUhMMNElSEww0SVITDDRJUhMMNElSEww0SVITDDRJUhMMNElSEww0SVITDDRJUhMMNElSEww0SVITDDRJUhMMNElSEww0SVITDDRJUhN6CbQkO5IcSLKQ5NYR+9+R5Kkk+7vXu/qoK0nSSRvGPUCSKeD9wHXAIvBgkrmqenTF0I9W1S3j1pMkaZQ+3qFtBxaq6mBVPQvcA+zs4biSJL1oY79DAzYDh5atLwJvHDHu55NcDTwO/GZVHVo5IMksMAvwQ5s3sG9+fw/trU5vefXlQ7egMex7ot1/m63ze69dk5oU8gng0qp6PXAfsGfUoKq6s6pmqmrmkounJtSaJKkFfQTaYWDrsvUt3bbnVdXRqvp2t7oLeEMPdSVJel4fgfYgsC3JZUnOAW4E5pYPSDK9bPUG4LEe6kqS9Lyx76FV1YkktwD7gClgd1U9kuR9wHxVzQG/nuQG4ARwDHjHuHUlSVquj0khVNVeYO+KbbcvW74NuK2PWpIkjeKTQiRJTTDQJElNMNAkSU0w0CRJTTDQJElNMNAkSU0w0CRJTTDQJElNMNAkSU0w0CRJTTDQJElNMNAkSU0w0CRJTTDQJElNMNAkSU0w0CRJTTDQJElNMNAkSU0w0CRJTegl0JLsTnIkyZdOsT9J/jzJQpIvJLmyj7qSJJ3U1zu0DwE7TrP/emBb95oFPtBTXUmSgJ4Crao+Axw7zZCdwN215LPAhUmm+6gtSRJM7h7aZuDQsvXFbtsLJJlNMp9k/qmjz02oNUlSC1bVpJCqurOqZqpq5pKLp4ZuR5K0hkwq0A4DW5etb+m2SZLUi0kF2hzwy91sx58EnqmqJydUW5K0Dmzo4yBJPgJcA2xKsgi8F9gIUFUfBPYCbwUWgG8B7+yjriRJJ/USaFV10xn2F/DuPmpJkjTKqpoUIknSS2WgSZKaYKBJkppgoEmSmmCgSZKaYKBJkppgoEmSmmCgSZKaYKBJkppgoEmSmmCgSZKaYKBJkppgoEmSmmCgSZKaYKBJkppgoEmSmmCgSZKaYKBJkppgoEmSmtBLoCXZneRIki+dYv81SZ5Jsr973d5HXUmSTtrQ03E+BPwFcPdpxvxzVb2tp3qSJL1AL+/QquozwLE+jiVJ0kvR1zu0F+NNSR4GngB+u6oeWTkgySww260en5peODDB/jYBX5tcuYXJlVoy4fObuIme39T0pCo9z7+/3vi917NJn98Pn2pHqqqXCkkuBT5ZVT8+Yt8FwHeq6niStwJ/VlXbeinckyTzVTUzdB9ni+e3tnl+a1fL5war6/wmMsuxqr5RVce75b3AxiSbJlFbkrQ+TCTQkrwqSbrl7V3do5OoLUlaH3q5h5bkI8A1wKYki8B7gY0AVfVB4O3AryY5AfwPcGP1da2zP3cO3cBZ5vmtbZ7f2tXyucEqOr/e7qFJkjQknxQiSWqCgSZJaoKBBiTZkeRAkoUktw7dT5/O9FiytS7J1iQPJHk0ySNJ3jN0T31J8n1J/i3Jw925/cHQPZ0NSaaS/HuSTw7dS9+SfDXJF7tH/s0P3U/fklyY5N4kX07yWJI3DdrPer+HlmQKeBy4DlgEHgRuqqpHB22sJ0muBo4Dd4/6jOBal2QamK6qzyf5AeAh4Oda+PvrZgaf331+cyPwL8B7quqzA7fWqyS/BcwAF7T2eLwkXwVmqqrJD1Yn2cPSYw13JTkHOK+qvj5UP75Dg+3AQlUdrKpngXuAnQP31JvWH0tWVU9W1ee75W8CjwGbh+2qH7XkeLe6sXs19T/QJFuAnwV2Dd2LvjdJXgFcDdwFUFXPDhlmYKDB0g+/Q8vWF2nkB+J60z2t5grgc8N20p/uctx+4AhwX1U1c26dPwV+B/jO0I2cJQX8U5KHukf7teQy4CngL7tLxruSnD9kQwaampDk5cDHgN+oqm8M3U9fquq5qroc2AJsT9LMZeMkbwOOVNVDQ/dyFv1UVV0JXA+8u7sF0IoNwJXAB6rqCuC/gUHnIBhocBjYumx9S7dNa0R3f+ljwIer6u+G7uds6C7lPADsGLqXHl0F3NDdZ7oH+Okkfz1sS/2qqsPd1yPAx1m6xdGKRWBx2VWDe1kKuMEYaEuTQLYluay7qXkjMDdwT3qRuokTdwGPVdUfD91Pn5JckuTCbvn7WZq49OVhu+pPVd1WVVuq6lKWvu/ur6pfHLit3iQ5v5uoRHcp7meAZmYbV9V/AoeSvLbbdC0w6GSsSf76mFWpqk4kuQXYB0wBu0f9apu1atRjyarqrmG76tVVwC8BX+zuNQH8XvcQ7LVuGtjTzcR9GfC3VdXc1PaG/SDw8e4xthuAv6mqfxy2pd79GvDh7s3AQeCdQzaz7qftS5La4CVHSVITDDRJUhMMNElSEww0SVITDDRJUhMMNElSEww0SVIT/h/MEQEo4Dh4oQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "show_samples(dist.sample((10,)))" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbQAAACSCAYAAAAttj/ZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAKrklEQVR4nO3df6xfd13H8eeL225zQ9iki5S2cTNUlChu46ZKZpbFMemQrCZgsiXqIJKbGKaoMbppMiJ/Tf/wVySQpat0CgxTRK+koW7ZCBIC7A47YBsd14akt5t2tGNQUWbH2z/u6XJ3/bYd+577Pfd++nwk39zz49Pzfp/c3Pvq95zP99xUFZIkrXUvGboBSZL6YKBJkppgoEmSmmCgSZKaYKBJkppgoEmSmjBWoCX5oST3JPla9/WiU4x7Nsn+7jU7Tk1JkkbJOJ9DS/KnwLGquj3JLcBFVfUHI8Ydr6qXjtGnJEmnNW6gHQCurqonkmwEPlVVrxkxzkCTJK2ocQPtm1V1Ybcc4KmT68vGnQD2AyeA26vqH09xvBlgBuCC8/P6H3/1OS+6t9XusS+dP3QLK+rHXvedoVuQRmr9Z6913+apb1TVxaP2nTHQktwLvHLErj8Cdi8NsCRPVdX/u4+WZFNVHU7yo8B9wDVV9e+nqzv90+fVF/ZtOW1va9mbXnXZ0C2sqH2P7x+6BWmk1n/2Wndv7XmwqqZH7Vt3pn9cVW881b4k/5lk45JLjkdOcYzD3deDST4FXA6cNtAkSfp+jDttfxa4qVu+Cfin5QOSXJTk3G55A3Al8MiYdSVJep5xA+124NokXwPe2K2TZDrJzm7MTwBzSR4C7mfxHpqBJknq1RkvOZ5OVR0FrhmxfQ54Z7f8WeCnxqkjSdKZ+KQQSVITDDRJUhMMNElSEww0SVITDDRJUhMMNElSEww0SVITDDRJUhMMNElSEww0SVITDDRJUhMMNElSEww0SVITDDRJUhMMNElSEww0SVITDDRJUhMMNElSEww0SVITegm0JNuTHEgyn+SWEfvPTfLRbv/nk1zSR11Jkk4aO9CSTAHvA64DXgvcmOS1y4b9OvBUVb0a+HPgT8atK0nSUn28Q9sGzFfVwap6Brgb2LFszA5gd7e8B7gmSXqoLUkS0E+gbQIOLVlf6LaNHFNVJ4CngVcsP1CSmSRzSeaePPpsD61Jks4Wq2pSSFXdUVXTVTV98Sumhm5HkrSG9BFoh4EtS9Y3d9tGjkmyDng5cLSH2pIkAf0E2gPA1iSXJjkHuAGYXTZmFripW34bcF9VVQ+1JUkCYN24B6iqE0luBvYBU8Cuqno4yXuBuaqaBe4E/jbJPHCMxdCTJKk3YwcaQFXtBfYu23bbkuX/AX65j1qSJI2yqiaFSJL0YhlokqQmGGiSpCYYaJKkJhhokqQmGGiSpCYYaJKkJhhokqQmGGiSpCYYaJKkJhhokqQmGGiSpCYYaJKkJhhokqQmGGiSpCYYaJKkJhhokqQmGGiSpCYYaJKkJvQSaEm2JzmQZD7JLSP2vz3Jk0n2d6939lFXkqST1o17gCRTwPuAa4EF4IEks1X1yLKhH62qm8etJ0nSKH28Q9sGzFfVwap6Brgb2NHDcSVJesHGfocGbAIOLVlfAH5mxLi3JrkKeAz4nao6tHxAkhlgBuA8zudNr7qsh/ZWp32P7x+6hRXV8vdO0uo0qUkh/wxcUlWvA+4Bdo8aVFV3VNV0VU2v59wJtSZJakEfgXYY2LJkfXO37TlVdbSqvtut7gRe30NdSZKe00egPQBsTXJpknOAG4DZpQOSbFyyej3waA91JUl6ztj30KrqRJKbgX3AFLCrqh5O8l5grqpmgd9Kcj1wAjgGvH3cupIkLdXHpBCqai+wd9m225Ys3wrc2kctSZJG8UkhkqQmGGiSpCYYaJKkJhhokqQmGGiSpCYYaJKkJhhokqQmGGiSpCYYaJKkJhhokqQmGGiSpCYYaJKkJhhokqQmGGiSpCYYaJKkJhhokqQmGGiSpCYYaJKkJhhokqQm9BJoSXYlOZLkK6fYnyR/lWQ+yZeSXNFHXUmSTurrHdoHge2n2X8dsLV7zQDv76muJElAT4FWVZ8Gjp1myA7grlr0OeDCJBv7qC1JEkzuHtom4NCS9YVu2/MkmUkyl2Tuf/nuhFqTJLVgVU0Kqao7qmq6qqbXc+7Q7UiS1pBJBdphYMuS9c3dNkmSejGpQJsFfq2b7fizwNNV9cSEakuSzgLr+jhIko8AVwMbkiwA7wHWA1TVB4C9wJuBeeA7wDv6qCtJ0km9BFpV3XiG/QW8q49akiSNsqomhUiS9GIZaJKkJhhokqQmGGiSpCYYaJKkJhhokqQmGGiSpCYYaJKkJhhokqQmGGiSpCYYaJKkJhhokqQmGGiSpCYYaJKkJhhokqQmGGiSpCYYaJKkJhhokqQmGGiSpCb0EmhJdiU5kuQrp9h/dZKnk+zvXrf1UVeSpJPW9XScDwJ/Ddx1mjH/WlVv6ameJEnP08s7tKr6NHCsj2NJkvRi9PUO7YV4Q5KHgMeB36uqh5cPSDIDzHSrx++tPQcm2N8G4BuTKja1cVKVnjPR84P5yZVaNOHzmzjPb+1q+dxg8uf3I6fakarqpUKSS4BPVNVPjtj3MuB7VXU8yZuBv6yqrb0U7kmSuaqaHrqPleL5rW2e39rV8rnB6jq/icxyrKpvVdXxbnkvsD7JhknUliSdHSYSaElemSTd8rau7tFJ1JYknR16uYeW5CPA1cCGJAvAe4D1AFX1AeBtwG8kOQH8N3BD9XWtsz93DN3ACvP81jbPb+1q+dxgFZ1fb/fQJEkakk8KkSQ1wUCTJDXBQAOSbE9yIMl8kluG7qdPZ3os2VqXZEuS+5M8kuThJO8euqe+JDkvyReSPNSd2x8P3dNKSDKV5N+SfGLoXvqW5OtJvtw98m9u6H76luTCJHuSfDXJo0neMGg/Z/s9tCRTwGPAtcAC8ABwY1U9MmhjPUlyFXAcuGvUZwTXuiQbgY1V9cUkPwg8CPxSC9+/bmbwBd3nN9cDnwHeXVWfG7i1XiX5XWAaeFlrj8dL8nVguqqa/GB1kt0sPtZwZ5JzgPOr6ptD9eM7NNgGzFfVwap6Brgb2DFwT71p/bFkVfVEVX2xW/428Ciwadiu+lGLjner67tXU/8DTbIZ+EVg59C96PuT5OXAVcCdAFX1zJBhBgYaLP7yO7RkfYFGfiGebbqn1VwOfH7YTvrTXY7bDxwB7qmqZs6t8xfA7wPfG7qRFVLAvyR5sHu0X0suBZ4E/qa7ZLwzyQVDNmSgqQlJXgp8DPjtqvrW0P30paqerarLgM3AtiTNXDZO8hbgSFU9OHQvK+jnquoK4DrgXd0tgFasA64A3l9VlwP/BQw6B8FAg8PAliXrm7ttWiO6+0sfAz5UVf8wdD8robuUcz+wfeheenQlcH13n+lu4OeT/N2wLfWrqg53X48AH2fxFkcrFoCFJVcN9rAYcIMx0BYngWxNcml3U/MGYHbgnvQCdRMn7gQerao/G7qfPiW5OMmF3fIPsDhx6avDdtWfqrq1qjZX1SUs/tzdV1W/MnBbvUlyQTdRie5S3C8Azcw2rqr/AA4leU236Rpg0MlYk/zzMatSVZ1IcjOwD5gCdo360zZr1ajHklXVncN21asrgV8FvtzdawL4w+4h2GvdRmB3NxP3JcDfV1VzU9sb9sPAx7vH2K4DPlxVnxy2pd79JvCh7s3AQeAdQzZz1k/blyS1wUuOkqQmGGiSpCYYaJKkJhhokqQmGGiSpCYYaJKkJhhokqQm/B8gRgMcTDRDtwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "show_samples(dist.topk(10))" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "torch.Size([256, 3, 7, 2, 2])\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Enumerate \n", + "x,_ = dist.enumerate_support()\n", + "print(x.shape)\n", + "for i in range(10):\n", + " show_chain(x[i][0])\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(dist.entropy.detach().unsqueeze(0))" ] } ], diff --git a/docs/source/semiring.ipynb b/docs/source/semiring.ipynb new file mode 100644 index 00000000..214e6f71 --- /dev/null +++ b/docs/source/semiring.ipynb @@ -0,0 +1,733 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Advanced: Semirings" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "import torch_struct\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWoAAADGCAYAAAD7ccrCAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAKwElEQVR4nO3df6zVdR3H8dfLey9evWjo0EX3kpAzHbESd4cazhVUg3S69ZdsstXayF+Fzc1p/7T+bGumc9ZG/mrJtEJ05ihlqTOboVfUEtCNqcklHJAoQiJceffHObd7ZRfv9+r53s87zvOxsXHvufvel1/kuS/fe+65jggBAPI6pvQAAMBHI9QAkByhBoDkCDUAJEeoASC5zjoO2j2tO3pmTK3j0JXtfa+76OcfdnLPvtITtHt32T+LYaee/E7pCTq140DpCZKkl9+YXnqCho5z6QmSpGN3D5WeoPjsodITtP/NPTrwzntj/qHUEuqeGVO15O5L6zh0ZX/Z9Pmin3/Y0nOeKT1BD665oPQESdLVS/9QeoKunra19ARJ0oVXLi89Qbvm1vLXf8JmPbCr9AQdvPW90hP07BWrjvgYtz4AIDlCDQDJEWoASI5QA0ByhBoAkiPUAJAcoQaA5Ag1ACRHqAEgOUINAMkRagBIjlADQHKVQm17se1XbG+xfUPdowAAI8YNte0OSbdJWiJpjqSltufUPQwA0FDlinq+pC0R8WpEHJB0n6Syr2EKAG2kSqh7JY1+Ed/B5vs+xPZy2wO2B/a/vb9V+wCg7bXsi4kRsTIi+iOiv3tajp+uAgBHgyqh3iZp5qi3+5rvAwBMgiqhflbSGbZn254i6TJJD9U7CwAwbNwfmhYRQ7avkfSIpA5Jd0bExtqXAQAkVfzhthGxVtLamrcAAMbAdyYCQHKEGgCSI9QAkByhBoDkCDUAJEeoASA5Qg0AyRFqAEiOUANAcoQaAJIj1ACQnCOi5Qc90SfHuV7U8uNOROdpM8f/oEkQU7pKT9Ch1wdLT5Akbf/96aUnqO+Kt0pPkCTFB4dKT9DaF9eVniBJWrTsu6UnaPArU0pP0NZf/Fz7t231WI9xRQ0AyRFqAEiOUANAcoQaAJIj1ACQHKEGgOQINQAkR6gBIDlCDQDJEWoASI5QA0ByhBoAkhs31LbvtL3D9kuTMQgA8GFVrqjvlrS45h0AgCMYN9QR8aSkHK8NCQBtiHvUAJBcZ6sOZHu5pOWS1K3jW3VYAGh7LbuijoiVEdEfEf1dOrZVhwWAtsetDwBIrsrT8+6V9LSkM20P2i7/A84AoI2Me486IpZOxhAAwNi49QEAyRFqAEiOUANAcoQaAJIj1ACQHKEGgOQINQAkR6gBIDlCDQDJEWoASI5QA0ByLXs96tGGpvfo3986v45DV/aNq/5a9PMPe/rGc0tP0O7Fny49QZL007l3lJ6ggUdnl54gSXryyvNKT9BZTy0rPUGSdPqmbaUnaN1dq0tP0CW/3XXEx7iiBoDkCDUAJEeoASA5Qg0AyRFqAEiOUANAcoQaAJIj1ACQHKEGgOQINQAkR6gBIDlCDQDJEWoASG7cUNueaftx25tsb7S9YjKGAQAaqrzM6ZCk6yJig+0TJD1ne11EbKp5GwBAFa6oI2J7RGxo/v5dSZsl9dY9DADQMKF71LZnSZonaf0Yjy23PWB7YGj/vtasAwBUD7XtqZLul3RtROw5/PGIWBkR/RHR39nd08qNANDWKoXadpcakV4VEWvqnQQAGK3Ksz4s6Q5JmyPipvonAQBGq3JFvUDSMkkLbb/Q/PXNmncBAJrGfXpeRDwlyZOwBQAwBr4zEQCSI9QAkByhBoDkCDUAJEeoASA5Qg0AyRFqAEiOUANAcoQaAJIj1ACQHKEGgOQcES0/6Ikn9Mb8s69q+XEnpIb/ro/DQ4dKT9DQ1CmlJ0iSTvjxYOkJeu3B00tPkCTt+eL7pSdIkeMlfE6a/m7pCeq5e1rpCXrxz7do7+6tY/6hcEUNAMkRagBIjlADQHKEGgCSI9QAkByhBoDkCDUAJEeoASA5Qg0AyRFqAEiOUANAcoQaAJIbN9S2u20/Y/tF2xtt/2QyhgEAGjorfMz7khZGxF7bXZKesv3HiPhbzdsAAKoQ6mi8Dure5ptdzV85XkMUANpApXvUtjtsvyBph6R1EbG+3lkAgGGVQh0RH0TE2ZL6JM23Pffwj7G93PaA7YGDB/e1eicAtK0JPesjIt6W9LikxWM8tjIi+iOiv6urp1X7AKDtVXnWxym2pzV/f5ykr0t6ue5hAICGKs/6mCHp17Y71Aj77yLi4XpnAQCGVXnWx98lzZuELQCAMfCdiQCQHKEGgOQINQAkR6gBIDlCDQDJEWoASI5QA0ByhBoAkiPUAJAcoQaA5Ag1ACRX5UWZJiyOsQ5OreXQle2b0VX08w976wulF0ife+A/pSdIkg5+u7v0BE25dVfpCZKkpb3lX4DywfsvKD1BkvSrr/6m9ATdsPN7pSfomKFDR35sEncAAD4GQg0AyRFqAEiOUANAcoQaAJIj1ACQHKEGgOQINQAkR6gBIDlCDQDJEWoASI5QA0ByhBoAkqscatsdtp+3/XCdgwAAHzaRK+oVkjbXNQQAMLZKobbdJ+kiSbfXOwcAcLiqV9Q3S7pe0hFf2dr2ctsDtgcOHtjXknEAgAqhtn2xpB0R8dxHfVxErIyI/ojo75rS07KBANDuqlxRL5B0ie3XJd0naaHte2pdBQD4n3FDHRE3RkRfRMySdJmkxyLi8tqXAQAk8TxqAEhvQj8qPCKekPRELUsAAGPiihoAkiPUAJAcoQaA5Ag1ACRHqAEgOUINAMkRagBIjlADQHKEGgCSI9QAkByhBoDkHBGtP6i9U9I/P8Ehpkva1aI5/+84FyM4FyM4FyOOlnNxWkScMtYDtYT6k7I9EBH9pXdkwLkYwbkYwbkY0Q7nglsfAJAcoQaA5LKGemXpAYlwLkZwLkZwLkYc9eci5T1qAMCIrFfUAIAmQg0AyaULte3Ftl+xvcX2DaX3lGJ7pu3HbW+yvdH2itKbSrPdYft52w+X3lKS7Wm2V9t+2fZm2+eX3lSK7R82/368ZPte292lN9UhVahtd0i6TdISSXMkLbU9p+yqYoYkXRcRcySdJ+nqNj4Xw1ZI2lx6RAK3SPpTRJwl6Utq03Niu1fSDyT1R8RcSR2SLiu7qh6pQi1pvqQtEfFqRByQdJ+kSwtvKiIitkfEhubv31XjL2Nv2VXl2O6TdJGk20tvKcn2pyRdKOkOSYqIAxHxdtlVRXVKOs52p6TjJf2r8J5aZAt1r6Sto94eVBvHaZjtWZLmSVpfdklRN0u6XtKh0kMKmy1pp6S7mreBbrfdU3pUCRGxTdLPJL0habukdyLi0bKr6pEt1DiM7amS7pd0bUTsKb2nBNsXS9oREc+V3pJAp6RzJP0yIuZJ2iepLb+WY/skNf7FPVvSZyT12L687Kp6ZAv1NkkzR73d13xfW7LdpUakV0XEmtJ7Clog6RLbr6txO2yh7XvKTipmUNJgRAz/62q1GuFuR1+T9FpE7IyIg5LWSPpy4U21yBbqZyWdYXu27SlqfGHgocKbirBtNe5Dbo6Im0rvKSkiboyIvoiYpcb/E49FxFF55TSeiHhT0lbbZzbftUjSpoKTSnpD0nm2j2/+fVmko/QLq52lB4wWEUO2r5H0iBpfwb0zIjYWnlXKAknLJP3D9gvN9/0oItYW3IQcvi9pVfNi5lVJ3ym8p4iIWG97taQNajxL6nkdpd9OzreQA0By2W59AAAOQ6gBIDlCDQDJEWoASI5QA0ByhBoAkiPUAJDcfwF7fVkrKKrRBAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Create two random tensors to experiment with.\n", + "v1 = torch.rand(5, 10)\n", + "v2 = torch.rand(5, 10)\n", + "plt.imshow(v1)\n", + "plt.show()\n", + "plt.imshow(v2)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "def show(x, title):\n", + " plt.title(title)\n", + " plt.imshow(x.detach())\n", + " plt.show()\n", + "def run(sr):\n", + " # Convert semiring form.\n", + " s1, s2 = sr.convert(v1), sr.convert(v2)\n", + " s1.requires_grad_(True)\n", + " s2.requires_grad_(True)\n", + "\n", + " # Times and sum out last dim.\n", + " s = sr.sum(sr.times(s1, s2))\n", + " \n", + " # Compute grad.\n", + " s.sum().backward()\n", + " \n", + " show(s, \"Sum\")\n", + " # Show the grads\n", + " show(sr.unconvert(s1.grad), \"v1 grad\") \n", + " show(sr.unconvert(s2.grad), \"v2 grad\")\n", + " m = torch_struct.Alignment(sr).marginals(torch.rand(1, 10, 10, 3), _raw=True)\n", + " show(m.sum(-1).sum(0).sum(0).transpose(0,1), \"Alignment example\")" + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/restructuredtext" + }, + "source": [ + ".. autoclass:: torch_struct.LogSemiring " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "run(torch_struct.LogSemiring)" + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/restructuredtext" + }, + "source": [ + ".. autoclass:: torch_struct.MaxSemiring " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "run(torch_struct.MaxSemiring)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "run(torch_struct.KMaxSemiring(3))" + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/restructuredtext" + }, + "source": [ + ".. autoclass:: torch_struct.StdSemiring " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "run(torch_struct.StdSemiring)" + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/restructuredtext" + }, + "source": [ + ".. autoclass:: torch_struct.SampledSemiring " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "run(torch_struct.SampledSemiring)" + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/restructuredtext" + }, + "source": [ + ".. autoclass:: torch_struct.MultiSampledSemiring " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "run(torch_struct.MultiSampledSemiring)" + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/restructuredtext" + }, + "source": [ + ".. autoclass:: torch_struct.EntropySemiring " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "run(torch_struct.EntropySemiring)" + ] + }, + { + "cell_type": "raw", + "metadata": { + "raw_mimetype": "text/restructuredtext" + }, + "source": [ + ".. autoclass:: torch_struct.SparseMaxSemiring " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "run(torch_struct.SparseMaxSemiring)" + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "all_sr = [(\"marginals\", torch_struct.LogSemiring), \n", + " (\"argmax\", torch_struct.MaxSemiring),\n", + " (\"sample\", torch_struct.SampledSemiring),\n", + " (\"multi-sample\", torch_struct.MultiSampledSemiring), \n", + " (\"multi-sample\", torch_struct.MultiSampledSemiring),\n", + " (\"kmax\", torch_struct.KMaxSemiring(4)), \n", + " (\"sparsemax\", torch_struct.SparseMaxSemiring), \n", + " ]\n", + "\n", + "fig=plt.figure(figsize=(10, 9))\n", + "columns = 4\n", + "rows = 3\n", + "\n", + "for i in range(2,5):\n", + " fig.add_subplot(rows, columns, i)\n", + " x = torch.arange(15).float()\n", + " y1 = torch.sin(x)\n", + " plt.plot(x, y1, \"-x\")\n", + " plt.xlim(0,15)\n", + " plt.ylim(-1, 4)\n", + "\n", + " plt.axis(\"off\")\n", + "\n", + "for i in [5, 9]:\n", + " fig.add_subplot(rows, columns, i)\n", + " x = torch.arange(10).float()\n", + " y2 = torch.sin(1.4 * x)\n", + " plt.plot(y2, x, \"-x\")\n", + " plt.ylim(-4, 14)\n", + " plt.xlim(-3, 1)\n", + " plt.axis(\"off\")\n", + "\n", + "\n", + "\n", + "v = torch.zeros(1, 15, 10, 3)\n", + "v[0, :, :, 1] = (y1.unsqueeze(1) - y2.unsqueeze(0)).abs()\n", + "v[0, :, :, 0] = 0\n", + "v[0, :, :, 2] = 0\n", + "\n", + "for i, (title, sr) in enumerate(all_sr, 2+columns):\n", + " if i == 9:\n", + " continue\n", + " m = torch_struct.Alignment(sr).marginals(v, _raw=True)\n", + " fig.add_subplot(rows, columns, i)\n", + " plt.title(title)\n", + " plt.xticks([])\n", + " plt.yticks([])\n", + " \n", + " plt.axis(\"off\")\n", + " plt.ylim(-0.5,10.5)\n", + " plt.xlim(-0.5,14.5)\n", + "\n", + " plt.imshow(m.sum(-1).sum(0).sum(0).transpose(0,1).detach())\n", + "plt.savefig(\"show.png\",)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "celltoolbar": "Raw Cell Format", + "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.7.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/setup.py b/setup.py index be9b3489..89c45f3d 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name="torch_struct", - version="0.2", + version="0.3", author="Alexander Rush", author_email="arush@cornell.edu", packages=["torch_struct", "torch_struct.data", "torch_struct.networks"], diff --git a/torch_struct/__init__.py b/torch_struct/__init__.py index e81f8af9..d472b19c 100644 --- a/torch_struct/__init__.py +++ b/torch_struct/__init__.py @@ -8,8 +8,9 @@ TreeCRF, SentCFG, AlignmentCRF, + HMM, ) -from .autoregressive import Autoregressive +from .autoregressive import Autoregressive, AutoregressiveModel from .cky_crf import CKY_CRF from .deptree import DepTree from .linearchain import LinearChain @@ -48,12 +49,14 @@ SelfCritical, StructDistribution, Autoregressive, + AutoregressiveModel, LinearChainCRF, SemiMarkovCRF, DependencyCRF, NonProjectiveDependencyCRF, TreeCRF, SentCFG, + HMM, AlignmentCRF, Alignment, ] diff --git a/torch_struct/autoregressive.py b/torch_struct/autoregressive.py index aef42e3c..f1c6ad34 100644 --- a/torch_struct/autoregressive.py +++ b/torch_struct/autoregressive.py @@ -3,48 +3,33 @@ from torch.distributions.distribution import Distribution -class AutoregressiveModel: +class AutoregressiveModel(torch.nn.Module): """ User should implement as their favorite RNN / Transformer / etc. """ - def sequence_logits(self, init, seq_inputs): - """ - Compute the logits for all tokens in a batched sequence :math:`p(y_1, ... y_{T})` + def forward(self, inputs, state=None): + r""" + Compute the logits for all tokens in a batched sequence :math:`p(y_{t+1}, ... y_{T}| y_1 \ldots t)` Parameters: - init (batch_size x hidden_shape): everything needed for conditioning. inputs (batch_size x N x C): next tokens to update representation + state (tuple of batch_size x ...): everything needed for conditioning. Retuns: - logits (batch_size x C): next set of logits. - """ - pass - - def local_logits(self, state): - """ - Compute the local logits of :math:`p(y_t | y_{1:t-1})` - - Parameters: - state (batch_size x hidden_shape): everything needed for conditioning. + logits (*batch_size x C*): next set of logits. - Retuns: - logits (batch_size x C): next set of logits. + state (*tuple of batch_size x ...*): next set of logits. """ pass - def update_state(self, prev_state, inputs): - """ - Update the model state based on previous state and inputs - Parameters: - prev_state (batch_size x hidden_shape): everything needed for conditioning. - inputs (batch_size x C): next tokens to update representation +def wrap(state, ssize): + return state.contiguous().view(ssize, -1, *state.shape[1:]) - Retuns: - state (batch_size x hidden_shape): everything needed for next conditioning. - """ - pass + +def unwrap(state): + return state.contiguous().view(-1, *state.shape[2:]) class Autoregressive(Distribution): @@ -56,60 +41,127 @@ class Autoregressive(Distribution): Parameters: model (AutoregressiveModel): A lazily computed autoregressive model. - init (tensor, batch_shape x hidden_shape): initial state of autoregressive model. + init (tuple of tensors, batch_shape x ...): initial state of autoregressive model. n_classes (int): number of classes in each time step n_length (int): max length of sequence - """ - def __init__(self, model, init, n_classes, n_length): + def __init__( + self, + model, + initial_state, + n_classes, + n_length, + normalize=True, + start_class=0, + end_class=None, + ): self.model = model - self.init = init + self.init = initial_state self.n_length = n_length self.n_classes = n_classes + self.start_class = start_class + self.normalize = normalize event_shape = (n_length, n_classes) - batch_shape = init.shape[:1] + batch_shape = initial_state[0].shape[:1] super().__init__(batch_shape=batch_shape, event_shape=event_shape) - def log_prob(self, value, normalize=True): + def log_prob(self, value, sparse=False): """ Compute log probability over values :math:`p(z)`. Parameters: - value (tensor): One-hot events (*sample_shape x batch_shape x event_shape*) + value (tensor): One-hot events (*sample_shape x batch_shape x N*) Returns: log_probs (*sample_shape x batch_shape*) """ - batch_shape, n_length, n_classes = value.shape value = value.long() - logits = self.model.sequence_logits(self.init, value) - if normalize: + if not sparse: + sample, batch_shape, n_length, n_classes = value.shape + value = ( + (value * torch.arange(n_classes).view(1, 1, n_classes)).sum(-1).long() + ) + else: + sample, batch_shape, n_length = value.shape + + value = torch.cat( + [torch.zeros(sample, batch_shape, 1).fill_(self.start_class).long(), value], + dim=2, + ) + value = unwrap(value) + state = tuple( + (unwrap(i.unsqueeze(0).expand((sample,) + i.shape)) for i in self.init) + ) + + logits, _ = self.model(value, state) + b2, n2, c2 = logits.shape + assert ( + (b2 == sample * batch_shape) + and (n2 == n_length + 1) + and (c2 == self.n_classes) + ), "Model should return logits of shape `batch x N x C` " + + if self.normalize: log_probs = logits.log_softmax(-1) else: log_probs = logits - # batch_shape x event_shape (N x C) - return log_probs.masked_fill_(value == 0, 0).sum(-1).sum(-1) + scores = log_probs[:, :-1].gather(2, value[:, 1:].unsqueeze(-1)).sum(-1).sum(-1) + return wrap(scores, sample) - def _beam_search(self, semiring, gumbel=True): + def _beam_search(self, semiring, gumbel=False): beam = semiring.one_(torch.zeros((semiring.size(),) + self.batch_shape)) - state = self.init.unsqueeze(0).expand((semiring.size(),) + self.init.shape) + ssize = semiring.size() + + def take(state, indices): + return tuple( + ( + s.contiguous()[ + ( + indices * self.batch_shape[0] + + torch.arange(self.batch_shape[0]).unsqueeze(0) + ) + .contiguous() + .view(-1) + ] + for s in state + ) + ) + + tokens = ( + torch.zeros((ssize * self.batch_shape[0])).long().fill_(self.start_class) + ) + state = tuple( + (unwrap(i.unsqueeze(0).expand((ssize,) + i.shape)) for i in self.init) + ) # Beam Search all_beams = [] for t in range(0, self.n_length): - logits = self.model.local_logits(state) + logits, state = self.model(unwrap(tokens).unsqueeze(1), state) + b2, n2, c2 = logits.shape + assert ( + (b2 == ssize * self.batch_shape[0]) + and (n2 == 1) + and (c2 == self.n_classes) + ), "Model should return logits of shape `batch x N x C` " + for s in state: + assert ( + s.shape[0] == ssize * self.batch_shape[0] + ), "Model should return state tuple with shapes `batch x ...` " + logits = wrap(logits.squeeze(1), ssize) if gumbel: - logits = logits + torch.distributions.Gumbel(0.0, 0.0).sample( + logits = logits + torch.distributions.Gumbel(0.0, 1.0).sample( logits.shape ) - + if self.normalize: + logits = logits.log_softmax(-1) ex_beam = beam.unsqueeze(-1) + logits ex_beam.requires_grad_(True) all_beams.append(ex_beam) - beam, tokens = semiring.sparse_sum(ex_beam) - state = self.model.update_state(state, tokens) + beam, (positions, tokens) = semiring.sparse_sum(ex_beam) + state = take(state, positions) # Back pointers v = beam @@ -121,43 +173,79 @@ def _beam_search(self, semiring, gumbel=True): ) marg = torch.stack(marg, dim=2) all_m.append(marg.sum(0)) - return torch.stack(all_m, dim=0) + return torch.stack(all_m, dim=0), v def greedy_argmax(self): """ - Compute "argmax" using greedy search + Compute "argmax" using greedy search. + + Returns: + greedy_path (*batch x N x C*) """ - return self._beam_search(MaxSemiring).squeeze(0) + return self._beam_search(MaxSemiring)[0].squeeze(0) + + def _greedy_max(self): + return self._beam_search(MaxSemiring)[1].squeeze(0) def beam_topk(self, K): """ Compute "top-k" using beam search + + Returns: + paths (*K x batch x N x C*) + """ - return self._beam_search(KMaxSemiring(K)) + return self._beam_search(KMaxSemiring(K))[0] + + def _beam_max(self, K): + return self._beam_search(KMaxSemiring(K))[1] def sample_without_replacement(self, sample_shape=torch.Size()): """ Compute sampling without replacement using Gumbel trick. + + Based on: + + * Stochastic Beams and Where to Find Them: The Gumbel-Top-k Trick for + Sampling Sequences Without Replacement :cite:`DBLP:journals/corr/abs-1903-06059` + + Parameters: + sample_shape (torch.Size): batch_size + + Returns: + paths (*K x batch x N x C*) + """ K = sample_shape[0] - return self._beam_search(KMaxSemiring(K), gumbel=True) + return self._beam_search(KMaxSemiring(K), gumbel=True)[0] def sample(self, sample_shape=torch.Size()): r""" Compute structured samples from the distribution :math:`z \sim p(z)`. Parameters: - sample_shape (int): number of samples + sample_shape (torch.Size): number of samples Returns: samples (*sample_shape x batch_shape x event_shape*) """ sample_shape = sample_shape[0] - state = self.init.unsqueeze(0).expand((sample_shape,) + self.init.shape) + state = tuple( + ( + unwrap(i.unsqueeze(0).expand((sample_shape,) + i.shape)) + for i in self.init + ) + ) all_tokens = [] + tokens = ( + torch.zeros((sample_shape * self.batch_shape[0])) + .long() + .fill_(self.start_class) + ) for t in range(0, self.n_length): - logits = self.model.local_logits(state) - tokens = torch.distributions.OneHotCategorical(logits).sample((1,))[0] - state = self.model.update_state(state, tokens) + logits, state = self.model(tokens.unsqueeze(-1), state) + logits = logits.squeeze(1) + tokens = torch.distributions.Categorical(logits=logits).sample((1,))[0] all_tokens.append(tokens) - return torch.stack(all_tokens, dim=2) + v = wrap(torch.stack(all_tokens, dim=1), sample_shape) + return torch.nn.functional.one_hot(v, self.n_classes) diff --git a/torch_struct/distributions.py b/torch_struct/distributions.py index aeb1ebd0..c24e477f 100644 --- a/torch_struct/distributions.py +++ b/torch_struct/distributions.py @@ -191,11 +191,39 @@ class LinearChainCRF(StructDistribution): Compact representation: N long tensor in [0, ..., C-1] + + Implementation uses linear-scan, forward-pass only. + + * Parallel Time: `O(\log(N))` parallel merges. + * Forward Memory: :math:`O(N \log(N) C^2)` + """ struct = LinearChain +class AlignmentCRF(StructDistribution): + r""" + Represents basic alignment algorithm, i.e. dynamic-time warping or Needleman-Wunsch. + + Event shape is of the form: + + Parameters: + log_potentials (tensor) : event_shape (*N x M x 3*), e.g. + :math:`\phi(i, j, op)` + Ops are 0 -> j-1, 1->i-1,j-1, and 2->i-1 + lengths (long tensor) : batch shape integers for length masking. + + + Implementation uses linear-scan. + + * Parallel Time: `O(\log (M +N))` parallel merges. + * Forward Memory: :math:`O((M+N)^3)` + + """ + struct = Alignment + + class HMM(StructDistribution): r""" Represents hidden-markov smoothing with C hidden states. @@ -203,12 +231,14 @@ class HMM(StructDistribution): Event shape is of the form: Parameters: - transition: C X C - emission: V x C - init: C - observations: b x N between [0, V-1] + transition (tensor): log-probabilities *C X C* :math:`p(z_n| z_n-1)` + emission (tensor): log-probabilities *V x C* :math:`p(x_n| z_n)` + init (tensor): log-probabilities *C* :math:`p(z_1)` + observations (long tensor): indices *batch x N* between [0, V-1] Compact representation: N long tensor in [0, ..., C-1] + + Implemented as a special case of linear chain CRF. """ def __init__(self, transition, emission, init, observations, lengths=None): @@ -230,6 +260,12 @@ class SemiMarkovCRF(StructDistribution): lengths (long tensor) : batch shape integers for length masking. Compact representation: N long tensor in [-1, 0, ..., C-1] + + Implementation uses linear-scan, forward-pass only. + + * Parallel Time: `O(\log(N))` parallel merges. + * Forward Memory: :math:`O(N \log(N) C^2 K^2)` + """ struct = SemiMarkov @@ -253,6 +289,12 @@ class DependencyCRF(StructDistribution): Compact representation: N long tensor in [0, .. N] (indexing is +1) + + Implementation uses linear-scan, forward-pass only. + + * Parallel Time: `O(N)` parallel merges. + * Forward Memory: :math:`O(N \log(N) C^2 K^2)` + """ struct = DepTree @@ -260,8 +302,8 @@ class DependencyCRF(StructDistribution): class TreeCRF(StructDistribution): r""" - Represents a 0th-order span parser with NT nonterminals. - + Represents a 0th-order span parser with NT nonterminals. Implemented using a + fast CKY algorithm. For example usage see: @@ -274,25 +316,14 @@ class TreeCRF(StructDistribution): :math:`\phi(i, j, nt)` lengths (long tensor) : batch shape integers for length masking. - Compact representation: *N x N x NT* long tensor (Same) - """ - struct = CKY_CRF - - -class AlignmentCRF(StructDistribution): - r""" - Represents basic alignment algorithm, i.e. dynamic-time warping or Needleman-Wunsch. - - Event shape is of the form: + Implementation uses width-batched, forward-pass only - Parameters: - log_potentials (tensor) : event_shape (*N x M x 3*), e.g. - :math:`\phi(i, j, op)` - Ops are 0 -> j-1, 1->i-1,j-1, and 2->i-1 - lengths (long tensor) : batch shape integers for length masking. + * Parallel Time: `O(N)` parallel merges. + * Forward Memory: :math:`O(N^2)` + Compact representation: *N x N x NT* long tensor (Same) """ - struct = Alignment + struct = CKY_CRF class SentCFG(StructDistribution): @@ -309,6 +340,11 @@ class SentCFG(StructDistribution): root (*NT*) lengths (long tensor) : batch shape integers for length masking. + Implementation uses width-batched, forward-pass only + + * Parallel Time: `O(N)` parallel merges. + * Forward Memory: :math:`O(N^2 (NT+T))` + Compact representation: *N x N x NT* long tensor """ @@ -341,6 +377,9 @@ class NonProjectiveDependencyCRF(StructDistribution): :math:`\phi(i, j)` where :math:`\phi(i, i)` is (root, i). Compact representation: N long tensor in [0, .. N] (indexing is +1) + + Note: Does not currently implement argmax (Chiu-Liu) or sampling. + """ struct = DepTree diff --git a/torch_struct/semirings.py b/torch_struct/semirings.py index af1f011a..7f012c31 100644 --- a/torch_struct/semirings.py +++ b/torch_struct/semirings.py @@ -3,17 +3,28 @@ class Semiring: + """ + Base semiring class. + + Based on description in: + + * Semiring parsing :cite:`goodman1999semiring` + + """ + @classmethod def size(cls): + "Additional *ssize* first dimension needed." return 1 @classmethod def dot(cls, *ls): - "Dot product along last dim" + "Dot product along last dim." return cls.sum(cls.times(*ls)) @classmethod def times(cls, *ls): + "Multiply a list of tensors together" cur = ls[0] for l in ls[1:]: cur = cls.mul(cur, l) @@ -21,12 +32,29 @@ def times(cls, *ls): @classmethod def convert(cls, potentials): + "Convert to semiring by adding an extra first dimension." return potentials.unsqueeze(0) @classmethod def unconvert(cls, potentials): + "Unconvert from semiring by removing extra first dimension." return potentials.squeeze(0) + @staticmethod + def zero_(xs): + "Fill *ssize x ...* tensor with additive identity." + raise NotImplementedError() + + @staticmethod + def one_(xs): + "Fill *ssize x ...* tensor with multiplicative identity." + raise NotImplementedError() + + @staticmethod + def sum(xs, dim=-1): + "Sum over *dim* of tensor." + raise NotImplementedError() + class _Base(Semiring): @staticmethod @@ -65,77 +93,52 @@ def prod(a, dim=-1): class StdSemiring(_Base): - @staticmethod - def sum(xs, dim=-1): - return torch.sum(xs, dim=dim) + """ + Implements the counting semiring (+, *, 0, 1). - -class EntropySemiring(Semiring): - # (z1, h1) ⊕ (z2, h2) = (logsumexp(z1,z2), h1 + h2), (65) - # (z1, h1) ⊗ (z2, h2) = (z1 + z2, z1.exp()h2 + z2.exp()h1), (66) - - @staticmethod - def size(): - return 2 - - @staticmethod - def convert(xs): - values = torch.zeros((2,) + xs.shape).type_as(xs) - values[0] = xs - values[1] = 0 - return values - - @staticmethod - def unconvert(xs): - return xs[1] + """ @staticmethod def sum(xs, dim=-1): - assert dim != 0 - d = dim - 1 if dim > 0 else dim - part = torch.logsumexp(xs[0], dim=d) - log_sm = xs[0] - part.unsqueeze(d) - sm = log_sm.exp() - return torch.stack((part, torch.sum(xs[1].mul(sm) - log_sm.mul(sm), dim=d))) - - @staticmethod - def mul(a, b): - return torch.stack((a[0] + b[0], a[1] + b[1])) + return torch.sum(xs, dim=dim) - @classmethod - def prod(cls, xs, dim=-1): - return xs.sum(dim) - @staticmethod - def zero_(xs): - xs[0].fill_(-1e5) - xs[1].fill_(0) - return xs - - @staticmethod - def one_(xs): - xs[0].fill_(0) - xs[1].fill_(0) - return xs +class LogSemiring(_BaseLog): + """ + Implements the log-space semiring (logsumexp, +, -inf, 0). + Gradients give marginals. + """ -class LogSemiring(_BaseLog): @staticmethod def sum(xs, dim=-1): return torch.logsumexp(xs, dim=dim) class MaxSemiring(_BaseLog): + """ + Implements the max semiring (max, +, -inf, 0). + + Gradients give argmax. + """ + @staticmethod def sum(xs, dim=-1): return torch.max(xs, dim=dim)[0] @staticmethod def sparse_sum(xs, dim=-1): - return torch.max(xs, dim=dim) + m, a = torch.max(xs, dim=dim) + return m, (torch.zeros(a.shape).long(), a) def KMaxSemiring(k): + """ + Implements the k-max semiring (kmax, +, [-inf, -inf..], [0, -inf, ...]). + + Gradients give k-argmax. + """ + class KMaxSemiring(_BaseLog): @staticmethod def size(): @@ -182,7 +185,7 @@ def sparse_sum(xs, dim=-1): xs = xs.permute((xs.dim() - 1,) + tuple(range(0, xs.dim() - 1))) xs2 = xs2.permute((xs.dim() - 1,) + tuple(range(0, xs.dim() - 1))) assert xs.shape[0] == k - return xs, xs2 + return xs, (xs2 % k, xs2 // k) assert False @staticmethod @@ -235,6 +238,14 @@ def sample(ls): class SampledSemiring(_BaseLog): + """ + Implements a sampling semiring (logsumexp, +, -inf, 0). + + "Gradients" give sample. + + This is an exact forward-filtering, backward-sampling approach. + """ + @staticmethod def sum(xs, dim=-1): return _SampledLogSumExp.apply(xs, dim) @@ -296,6 +307,12 @@ def sample(ls): class MultiSampledSemiring(_BaseLog): + """ + Implements a multi-sampling semiring (logsumexp, +, -inf, 0). + + "Gradients" give up to 16 samples with replacement. + """ + @staticmethod def sum(xs, dim=-1): return _MultiSampledLogSumExp.apply(xs, dim) @@ -308,7 +325,74 @@ def to_discrete(xs, j): return (((xs % mbits[i + 1]) - (xs % mbits[i]) + final) != 0).type_as(xs) +class EntropySemiring(Semiring): + """ + Implements an entropy expectation semiring. + + Computes both the log-values and the running distributional entropy. + + Based on descriptions in: + + * Parameter estimation for probabilistic finite-state transducers :cite:`eisner2002parameter` + * First-and second-order expectation semirings with applications to minimum-risk training on translation forests :cite:`li2009first` + """ + + @staticmethod + def size(): + return 2 + + @staticmethod + def convert(xs): + values = torch.zeros((2,) + xs.shape).type_as(xs) + values[0] = xs + values[1] = 0 + return values + + @staticmethod + def unconvert(xs): + return xs[1] + + @staticmethod + def sum(xs, dim=-1): + assert dim != 0 + d = dim - 1 if dim > 0 else dim + part = torch.logsumexp(xs[0], dim=d) + log_sm = xs[0] - part.unsqueeze(d) + sm = log_sm.exp() + return torch.stack((part, torch.sum(xs[1].mul(sm) - log_sm.mul(sm), dim=d))) + + @staticmethod + def mul(a, b): + return torch.stack((a[0] + b[0], a[1] + b[1])) + + @classmethod + def prod(cls, xs, dim=-1): + return xs.sum(dim) + + @staticmethod + def zero_(xs): + xs[0].fill_(-1e5) + xs[1].fill_(0) + return xs + + @staticmethod + def one_(xs): + xs[0].fill_(0) + xs[1].fill_(0) + return xs + + class SparseMaxSemiring(_BaseLog): + """ + + Implements differentiable dynamic programming with a sparsemax semiring (sparsemax, +, -inf, 0). + + Sparse-max gradients give a more sparse set of marginal like terms. + + * From softmax to sparsemax: A sparse model of attention and multi-label classification :cite:`martins2016softmax` + * Differentiable dynamic programming for structured prediction and attention :cite:`mensch2018differentiable` + """ + @staticmethod def sum(xs, dim=-1): return _SimplexProject.apply(xs, dim) @@ -318,20 +402,19 @@ class _SimplexProject(torch.autograd.Function): @staticmethod def forward(ctx, input, dim, z=1): w_star = project_simplex(input, dim) - ctx.save_for_backward(w_star.clone(), torch.tensor(dim)) - x = (w_star - input).norm(p=2, dim=dim) + ctx.save_for_backward(input, w_star.clone(), torch.tensor(dim)) + x = input.mul(w_star).sum(dim) - w_star.norm(p=2, dim=dim) return x @staticmethod def backward(ctx, grad_output): - w_star, dim = ctx.saved_tensors + input, w_star, dim = ctx.saved_tensors w_star.requires_grad_(True) grad_input = None if ctx.needs_input_grad[0]: - grad_input = grad_output.unsqueeze(dim).mul( - _SparseMaxGrad.apply(w_star, dim) - ) + wstar = _SparseMaxGrad.apply(w_star, dim) + grad_input = grad_output.unsqueeze(dim).mul(wstar) return grad_input, None, None @@ -344,14 +427,13 @@ def forward(ctx, w_star, dim): @staticmethod def backward(ctx, grad_output): w_star, dim = ctx.saved_tensors - print(grad_output.shape, w_star.shape, dim) return sparsemax_grad(grad_output, w_star, dim.item()), None def project_simplex(v, dim, z=1): v_sorted, _ = torch.sort(v, dim=dim, descending=True) cssv = torch.cumsum(v_sorted, dim=dim) - z - ind = torch.arange(1, 1 + len(v)).to(dtype=v.dtype) + ind = torch.arange(1, 1 + v.shape[dim]).to(dtype=v.dtype) cond = v_sorted - cssv / ind >= 0 k = cond.sum(dim=dim, keepdim=True) tau = cssv.gather(dim, k - 1) / k.to(dtype=v.dtype) diff --git a/torch_struct/test_algorithms.py b/torch_struct/test_algorithms.py index de57a739..bf3385f5 100644 --- a/torch_struct/test_algorithms.py +++ b/torch_struct/test_algorithms.py @@ -330,3 +330,9 @@ def test_sparse_max(data): sparsemax = model(semiring).marginals(vals) print(vals.requires_grad) sparsemax.sum().backward() + + +def test_sparse_max2(): + print(Alignment(SparseMaxSemiring).sum(torch.rand(1, 8, 8, 3))) + print(Alignment(SparseMaxSemiring).marginals(torch.rand(1, 8, 8, 3))) + # assert(False) diff --git a/torch_struct/test_distributions.py b/torch_struct/test_distributions.py index cb4a3931..41ac9e29 100644 --- a/torch_struct/test_distributions.py +++ b/torch_struct/test_distributions.py @@ -1,5 +1,6 @@ from .distributions import LinearChainCRF from .autoregressive import Autoregressive +from .semirings import KMaxSemiring import torch from hypothesis import given, settings from hypothesis.strategies import integers, data, sampled_from @@ -52,6 +53,7 @@ def test_autoregressive(data, seed): n_classes = 2 n_length = 5 batch = 3 + BATCH = 3 values = torch.rand(batch, n_length, n_classes) @@ -59,41 +61,46 @@ def test_autoregressive(data, seed): values2[:, 0, :, :] = -1e9 values2[:, 0, torch.arange(n_classes), torch.arange(n_classes)] = values[:, 0] - init = torch.zeros(batch, 5).long() - - class Model: - def update_state(self, prev_state, inputs): - K, batch, hidden = prev_state.shape - return prev_state + 1 - - def sequence_logits(self, init, seq_inputs): - return values - - def local_logits(self, state): - K, batch, hidden = state.shape - t = state[0, 0, 0] - x = values[:, t, :].unsqueeze(0).expand(K, batch, n_classes) - return x - - auto = Autoregressive(Model(), init, n_classes, n_length) + init = (torch.zeros(batch, 5).long(),) + + class Model(torch.nn.Module): + def forward(self, inputs, state): + if inputs.shape[1] == 1: + state, = state + in_batch, hidden = state.shape + t = state[0, 0] + batch = values.shape[0] + x = ( + values[:, t, :] + .unsqueeze(0) + .expand(in_batch // batch, batch, n_classes) + ) + state = (state + 1,) + return x.contiguous().view(in_batch, 1, n_classes), state + else: + return ( + torch.cat((values, torch.zeros(BATCH, 1, n_classes)), dim=1), + state, + ) + + auto = Autoregressive(Model(), init, n_classes, n_length, normalize=False) v = auto.greedy_argmax() + batch, n, c = v.shape + assert n == n_length + assert c == n_classes + assert (v == LinearChainCRF(values2).argmax.sum(-1)).all() crf = LinearChainCRF(values2) v2 = auto.beam_topk(K=5) - # print(crf.struct().score(crf.topk(5), values2, batch_dims=[0,1])) - # print(crf.topk(5)[0].nonzero()) - # print(crf.topk(5)[1].nonzero()) - assert (v2.nonzero() == crf.topk(5).sum(-1).nonzero()).all() assert (v2[0] == LinearChainCRF(values2).argmax.sum(-1)).all() - print(auto.log_prob(v, normalize=False)) + print(auto.log_prob(v.unsqueeze(0))) print(crf.struct().score(crf.argmax, values2)) assert ( - auto.log_prob(v, normalize=False) == crf.struct().score(crf.argmax, values2) + auto.log_prob(v.unsqueeze(0)) == crf.struct().score(crf.argmax, values2) ).all() - assert auto.sample((7,)).shape == (7, batch, n_length, n_classes) assert auto.sample_without_replacement((7,)).shape == ( @@ -102,3 +109,78 @@ def local_logits(self, state): n_length, n_classes, ) + + +def test_ar2(): + batch, N, C, H = 3, 5, 2, 5 + layer = 1 + + def t(a): + return tuple((t.transpose(0, 1) for t in a)) + + init = (torch.zeros(batch, layer, H),) + + class AR(torch.nn.Module): + def __init__(self): + super().__init__() + self.rnn = torch.nn.RNN(H, H, batch_first=True) + self.proj = torch.nn.Linear(H, C) + self.embed = torch.nn.Embedding(C, H) + + def forward(self, inputs, state): + inputs = self.embed(inputs) + out, state = self.rnn(inputs, t(state)[0]) + out = self.proj(out) + return out, t((state,)) + + dist = Autoregressive(AR(), init, C, N, normalize=False) + scores = dist._greedy_max() + path = dist.greedy_argmax() + assert torch.isclose(scores, dist.log_prob(path.unsqueeze(0))).all() + scores = dist._beam_max(7) + path = dist.beam_topk(7) + + a = torch.tensor([[1, 2, 5], [3, 4, 6]]) + print(KMaxSemiring(2).sparse_sum(a)) + + import itertools + + for i in range(5): + print(dist.log_prob(path)[i]) + print(scores[i]) + print(path[i, 0]) + + print(path.shape, scores.shape) + assert torch.isclose(scores, dist.log_prob(path)).all() + + v = torch.tensor(list(itertools.product([0, 1], repeat=N))) + + v = v.unsqueeze(1).expand(v.shape[0], batch, N) + all_scores = dist.log_prob(v, sparse=True) + best, ind = torch.max(all_scores, dim=0) + assert (scores[0, 0] == best[0]).all() + + print(v[ind[0], 0].shape, path[0, 0].shape) + assert (torch.nn.functional.one_hot(v[ind, 0], C) == path[0, 0].long()).all() + + dist = Autoregressive(AR(), init, C, N, normalize=True) + path = dist.sample((7,)) + + init = (torch.zeros(batch, layer, H), torch.zeros(batch, layer, H)) + + class AR(torch.nn.Module): + def __init__(self): + super().__init__() + self.rnn = torch.nn.LSTM(H, H, batch_first=True) + self.proj = torch.nn.Linear(H, C) + self.embed = torch.nn.Embedding(C, H) + + def forward(self, inputs, state): + inputs = self.embed(inputs) + out, state = self.rnn(inputs, t(state)) + out = self.proj(out) + return out, t(state) + + dist = Autoregressive(AR(), init, C, N) + dist.greedy_argmax() + dist.beam_topk(5)