{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Emotion Analysis" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "This tutorial is available as an IPython notebook at [Malaya/example/emotion](https://github.com/huseinzol05/Malaya/tree/master/example/emotion).\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "This module trained on both standard and local (included social media) language structures, so it is save to use for both.\n", " \n", "
" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 6.41 s, sys: 1.3 s, total: 7.71 s\n", "Wall time: 9.2 s\n" ] } ], "source": [ "%%time\n", "import malaya" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Models accuracy\n", "\n", "We use `sklearn.metrics.classification_report` for accuracy reporting, check at https://malaya.readthedocs.io/en/latest/models-accuracy.html#emotion-analysis" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### labels supported\n", "\n", "Default labels for emotion module." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['anger', 'fear', 'happy', 'love', 'sadness', 'surprise']" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "malaya.emotion.label" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Example texts\n", "\n", "Copy pasted from random tweets." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "anger_text = 'babi la company ni, aku dah la penat datang dari jauh'\n", "fear_text = 'takut doh tengok cerita hantu tadi'\n", "happy_text = 'bestnya dapat tidur harini, tak payah pergi kerja'\n", "love_text = 'aku sayang sgt dia dah doh'\n", "sadness_text = 'kecewa tengok kerajaan baru ni, janji ape pun tak dapat'\n", "surprise_text = 'sakit jantung aku, terkejut dengan cerita hantu tadi'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load multinomial model\n", "\n", "```python\n", "def multinomial(**kwargs):\n", " \"\"\"\n", " Load multinomial emotion model.\n", "\n", " Returns\n", " -------\n", " result : malaya.model.ml.Bayes class\n", " \"\"\"\n", "```" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "model = malaya.emotion.multinomial()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Predict batch of strings\n", "\n", "```python\n", "def predict(self, strings: List[str]):\n", " \"\"\"\n", " classify list of strings.\n", "\n", " Parameters\n", " ----------\n", " strings: List[str]\n", "\n", " Returns\n", " -------\n", " result: List[str]\n", " \"\"\"\n", "```" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['anger']" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.predict([anger_text])" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['anger', 'fear', 'happy', 'love', 'sadness', 'surprise']" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.predict(\n", " [anger_text, fear_text, happy_text, love_text, sadness_text, surprise_text]\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Predict batch of strings with probability\n", "\n", "```python\n", "def predict_proba(self, strings: List[str]):\n", " \"\"\"\n", " classify list of strings and return probability.\n", "\n", " Parameters\n", " ----------\n", " strings: List[str]\n", "\n", " Returns\n", " -------\n", " result: List[dict[str, float]]\n", " \"\"\"\n", "```" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'anger': 0.32948272681734814,\n", " 'fear': 0.13959708810717708,\n", " 'happy': 0.14671455153216045,\n", " 'love': 0.12489192355631354,\n", " 'sadness': 0.1285972541671178,\n", " 'surprise': 0.13071645581988448},\n", " {'anger': 0.11379406005377896,\n", " 'fear': 0.4006934391283133,\n", " 'happy': 0.11389665647702245,\n", " 'love': 0.12481915233837086,\n", " 'sadness': 0.0991261507380643,\n", " 'surprise': 0.14767054126445014},\n", " {'anger': 0.14667998117610198,\n", " 'fear': 0.1422732633232615,\n", " 'happy': 0.29984520430807293,\n", " 'love': 0.1409005078277281,\n", " 'sadness': 0.13374705318404811,\n", " 'surprise': 0.13655399018078768},\n", " {'anger': 0.1590563839629243,\n", " 'fear': 0.14687344690114268,\n", " 'happy': 0.1419948160674701,\n", " 'love': 0.279550441361504,\n", " 'sadness': 0.1285927908584157,\n", " 'surprise': 0.14393212084854254},\n", " {'anger': 0.13425914937312508,\n", " 'fear': 0.12053328146716755,\n", " 'happy': 0.14923350911233682,\n", " 'love': 0.10289492749919464,\n", " 'sadness': 0.36961334597699913,\n", " 'surprise': 0.12346578657117815},\n", " {'anger': 0.06724850384395685,\n", " 'fear': 0.1283628050361525,\n", " 'happy': 0.05801958643852813,\n", " 'love': 0.06666524240157067,\n", " 'sadness': 0.06537667186293224,\n", " 'surprise': 0.6143271904168589}]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.predict_proba(\n", " [anger_text, fear_text, happy_text, love_text, sadness_text, surprise_text]\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### List available Transformer models" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Size (MB)Quantized Size (MB)macro precisionmacro recallmacro f1-score
bert425.6111.000.997860.997730.99779
tiny-bert57.415.400.996920.996960.99694
albert48.612.800.997400.997730.99757
tiny-albert22.45.980.993250.993780.99351
xlnet446.5118.000.997730.997750.99774
alxlnet46.813.300.996630.996970.99680
fastformer446.0113.000.991970.991940.99195
tiny-fastformer77.219.600.989260.987830.98853
\n", "
" ], "text/plain": [ " Size (MB) Quantized Size (MB) macro precision \\\n", "bert 425.6 111.00 0.99786 \n", "tiny-bert 57.4 15.40 0.99692 \n", "albert 48.6 12.80 0.99740 \n", "tiny-albert 22.4 5.98 0.99325 \n", "xlnet 446.5 118.00 0.99773 \n", "alxlnet 46.8 13.30 0.99663 \n", "fastformer 446.0 113.00 0.99197 \n", "tiny-fastformer 77.2 19.60 0.98926 \n", "\n", " macro recall macro f1-score \n", "bert 0.99773 0.99779 \n", "tiny-bert 0.99696 0.99694 \n", "albert 0.99773 0.99757 \n", "tiny-albert 0.99378 0.99351 \n", "xlnet 0.99775 0.99774 \n", "alxlnet 0.99697 0.99680 \n", "fastformer 0.99194 0.99195 \n", "tiny-fastformer 0.98783 0.98853 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "malaya.emotion.available_transformer()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load Transformer model\n", "\n", "```python\n", "def transformer(model: str = 'xlnet', quantized: bool = False, **kwargs):\n", " \"\"\"\n", " Load Transformer emotion model.\n", "\n", " Parameters\n", " ----------\n", " model : str, optional (default='bert')\n", " Model architecture supported. Allowed values:\n", "\n", " * ``'bert'`` - Google BERT BASE parameters.\n", " * ``'tiny-bert'`` - Google BERT TINY parameters.\n", " * ``'albert'`` - Google ALBERT BASE parameters.\n", " * ``'tiny-albert'`` - Google ALBERT TINY parameters.\n", " * ``'xlnet'`` - Google XLNET BASE parameters.\n", " * ``'alxlnet'`` - Malaya ALXLNET BASE parameters.\n", " * ``'fastformer'`` - FastFormer BASE parameters.\n", " * ``'tiny-fastformer'`` - FastFormer TINY parameters.\n", "\n", " quantized : bool, optional (default=False)\n", " if True, will load 8-bit quantized model.\n", " Quantized model not necessary faster, totally depends on the machine.\n", "\n", " Returns\n", " -------\n", " result: model\n", " List of model classes:\n", "\n", " * if `bert` in model, will return `malaya.model.bert.MulticlassBERT`.\n", " * if `xlnet` in model, will return `malaya.model.xlnet.MulticlassXLNET`.\n", " * if `fastformer` in model, will return `malaya.model.fastformer.MulticlassFastFormer`.\n", " \"\"\"\n", "```" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "model = malaya.emotion.transformer(model = 'albert')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load Quantized model\n", "\n", "To load 8-bit quantized model, simply pass `quantized = True`, default is `False`.\n", "\n", "We can expect slightly accuracy drop from quantized model, and not necessary faster than normal 32-bit float model, totally depends on machine." ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING:root:Load quantized model will cause accuracy drop.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loading sentence piece model\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loading sentence piece model\n" ] } ], "source": [ "quantized_model = malaya.emotion.transformer(model = 'albert', quantized = True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Predict batch of strings\n", "\n", "```python\n", "def predict(self, strings: List[str]):\n", " \"\"\"\n", " classify list of strings.\n", "\n", " Parameters\n", " ----------\n", " strings: List[str]\n", "\n", " Returns\n", " -------\n", " result: List[str]\n", " \"\"\"\n", "```" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['anger', 'fear', 'anger', 'love', 'sadness', 'surprise']" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.predict(\n", " [anger_text, fear_text, happy_text, love_text, sadness_text, surprise_text]\n", ")" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['anger', 'fear', 'happy', 'love', 'sadness', 'surprise']" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "quantized_model.predict(\n", " [anger_text, fear_text, happy_text, love_text, sadness_text, surprise_text]\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Predict batch of strings with probability\n", "\n", "```python\n", "def predict_proba(self, strings: List[str]):\n", " \"\"\"\n", " classify list of strings and return probability.\n", "\n", " Parameters\n", " ----------\n", " strings : List[str]\n", "\n", " Returns\n", " -------\n", " result: List[dict[str, float]]\n", " \"\"\"\n", "```" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'anger': 0.9998901,\n", " 'fear': 3.2524113e-05,\n", " 'happy': 2.620931e-05,\n", " 'love': 2.2871463e-05,\n", " 'sadness': 9.782951e-06,\n", " 'surprise': 1.8502667e-05},\n", " {'anger': 1.6941378e-05,\n", " 'fear': 0.9999205,\n", " 'happy': 9.070281e-06,\n", " 'love': 2.044179e-05,\n", " 'sadness': 6.7731107e-06,\n", " 'surprise': 2.6314676e-05},\n", " {'anger': 0.15370166,\n", " 'fear': 0.0013852724,\n", " 'happy': 0.8268689,\n", " 'love': 0.011433229,\n", " 'sadness': 0.0011807577,\n", " 'surprise': 0.005430276},\n", " {'anger': 1.2597201e-05,\n", " 'fear': 1.7600481e-05,\n", " 'happy': 9.667115e-06,\n", " 'love': 0.9999331,\n", " 'sadness': 1.3735416e-05,\n", " 'surprise': 1.3399296e-05},\n", " {'anger': 1.9176923e-05,\n", " 'fear': 1.1163729e-05,\n", " 'happy': 6.353941e-06,\n", " 'love': 7.004002e-06,\n", " 'sadness': 0.99994576,\n", " 'surprise': 1.0511084e-05},\n", " {'anger': 5.8739704e-05,\n", " 'fear': 1.9771342e-05,\n", " 'happy': 1.8316741e-05,\n", " 'love': 2.2319455e-05,\n", " 'sadness': 3.646786e-05,\n", " 'surprise': 0.9998443}]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.predict_proba(\n", " [anger_text, fear_text, happy_text, love_text, sadness_text, surprise_text]\n", ")" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'anger': 0.99988353,\n", " 'fear': 3.5938003e-05,\n", " 'happy': 2.7778764e-05,\n", " 'love': 2.3541537e-05,\n", " 'sadness': 9.574292e-06,\n", " 'surprise': 1.9607493e-05},\n", " {'anger': 1.6855265e-05,\n", " 'fear': 0.9999219,\n", " 'happy': 9.185196e-06,\n", " 'love': 2.0216348e-05,\n", " 'sadness': 6.6679663e-06,\n", " 'surprise': 2.5186611e-05},\n", " {'anger': 0.22842072,\n", " 'fear': 0.001628682,\n", " 'happy': 0.7477462,\n", " 'love': 0.014303649,\n", " 'sadness': 0.0013838055,\n", " 'surprise': 0.00651699},\n", " {'anger': 1.28296715e-05,\n", " 'fear': 1.7833345e-05,\n", " 'happy': 9.577061e-06,\n", " 'love': 0.9999324,\n", " 'sadness': 1.3832815e-05,\n", " 'surprise': 1.34745715e-05},\n", " {'anger': 1.9776813e-05,\n", " 'fear': 1.1116885e-05,\n", " 'happy': 6.3422367e-06,\n", " 'love': 6.905633e-06,\n", " 'sadness': 0.9999455,\n", " 'surprise': 1.0316757e-05},\n", " {'anger': 5.8218586e-05,\n", " 'fear': 2.07504e-05,\n", " 'happy': 1.8061248e-05,\n", " 'love': 2.1852256e-05,\n", " 'sadness': 3.5944133e-05,\n", " 'surprise': 0.99984515}]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "quantized_model.predict_proba(\n", " [anger_text, fear_text, happy_text, love_text, sadness_text, surprise_text]\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Open emotion visualization dashboard\n", "\n", "```python\n", "def predict_words(\n", " self,\n", " string: str,\n", " method: str = 'last',\n", " bins_size: float = 0.05,\n", " visualization: bool = True,\n", "):\n", " \"\"\"\n", " classify words.\n", "\n", " Parameters\n", " ----------\n", " string : str\n", " method : str, optional (default='last')\n", " Attention layer supported. Allowed values:\n", "\n", " * ``'last'`` - attention from last layer.\n", " * ``'first'`` - attention from first layer.\n", " * ``'mean'`` - average attentions from all layers.\n", " bins_size: float, optional (default=0.05)\n", " default bins size for word distribution histogram.\n", " visualization: bool, optional (default=True)\n", " If True, it will open the visualization dashboard.\n", "\n", " Returns\n", " -------\n", " dictionary: results\n", " \"\"\"\n", "```\n", "\n", "Default when you call `predict_words` it will open a browser with visualization dashboard, you can disable by `visualization=False`." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "model.predict_words(sadness_text)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Vectorize\n", "\n", "Let say you want to visualize sentence / word level in lower dimension, you can use `model.vectorize`,\n", "\n", "```python\n", "def vectorize(self, strings: List[str], method: str = 'first'):\n", " \"\"\"\n", " vectorize list of strings.\n", "\n", " Parameters\n", " ----------\n", " strings: List[str]\n", " method : str, optional (default='first')\n", " Vectorization layer supported. Allowed values:\n", "\n", " * ``'last'`` - vector from last sequence.\n", " * ``'first'`` - vector from first sequence.\n", " * ``'mean'`` - average vectors from all sequences.\n", " * ``'word'`` - average vectors based on tokens.\n", "\n", " Returns\n", " -------\n", " result: np.array\n", " \"\"\"\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Sentence level" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "texts = [anger_text, fear_text, happy_text, love_text, sadness_text, surprise_text]\n", "r = quantized_model.vectorize(texts, method = 'first')" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(6, 2)" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.manifold import TSNE\n", "import matplotlib.pyplot as plt\n", "\n", "tsne = TSNE().fit_transform(r)\n", "tsne.shape" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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efPmzT0nJ6fU9pYtW+b9+/cvcawO31b4/c033+y///3v3d198eLFDnhGRoZv3brVo6OjI/tMnjzZJ06c6O7uvXr18htuuKHEtiZOnOhdu3b13Nxcz8jI8CZNmviBAwfc3X337t3u7r5//36Pjo6OHDvgc+bMidTRq1cvX716dWTbokWL3N193Lhxft9990XaKXzeSutL4TLffPONFxQUuLv79OnT/bbbbitS7qGHHvKBAwdGrpHCKns+Knu9LFu2zE888UTftm2b5+fne5cuXfytt94q1o9evXr56NGj3d39zTffjJyjCRMm+KxZs9w9dG23adPGs7OzfcaMGd68efPI2E+ePNmvu+46d3dfv369R0VFRca6ZcuWnpGRUazNBg0a+FdffeWdOnXypUuXurv7VVddFenfZ5995u3atYuMZYcOHXz//v2R4zp0rWVlZXleXp67u7/66qt+6aWXlnTa5EcKSPNj4HeUXnrp9cN5BeoWhYVrtzN5yWY++yyd4xo1I+P4VgAMHz6cadOm0a9fPz788EPOP/98IPSR96mnngpAXFwcw4YNY9CgQQwaNKjUNgYNGkStWrVo3759ZJavV69e3HjjjWRkZDB//nwuu+wyateuzb59+7jppptYt24dUVFRfPTRR8Xqe+uttxg8eDDHH388AAMHDoxs+/DDD7nrrrvIzMwkOzub1NTUyLbLL7+cWrVq0aZNG84880w2bdpE69aty22vMlasWMGCBQsA6N+/PyeddFKF9rviiitK3da/f3/q1q1L3bp1adasGTt37qRFixZMmzaN559/HoBt27bx8ccfc/LJJxMVFcVll11WYl3HHXdcZAYwKSmJV199tTKHV8QXX3zBFVdcwZdffsmBAwdo3bp1ZNvTTz/N6aefzsKFC6lTp06J+1fmfFTleunUqRMtWrQAICEhgfT0dHr06FGsH1dddRUAPXv25NtvvyUzM5OlS5eyaNGiyKx2bm4un3/+OQDnn38+TZo0AeDtt9/m1ltvBSAmJoa4uLhyxy0vL48+ffrw17/+lV69egHw2muvFblP+ttvvyU7OxsIXd/169cvVk9WVhYjRozg448/xszIy8srt20REZHSBCbgLly7nQkL1pOTlw9AvjsTFqwH4ETAzHB3oqOjWblyZbH9X3rpJVasWMGLL77IH//4R9avX19iO3Xr1o0s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/watx79E/OW/pvXZ7enSpQvbtm3j448/BiAvL48+ffrwwAMPcP7551e47jPPPJNPP/2Um2++mX/961+ceOKJAHz44Yece+65xMbGMnv2bDZs2ADA6NGjmTFjBgAzZszg2muvLbM8hGada9WqRfv27dm5cycAb7/9NkOHDqVWrVr89Kc/pXfv3iX2Ly4ujmHDhvGPf/yD2rVrR/Y9NJvbr18/TjrppHKP86233mLw4MEcf/zxnHjiiQwcePg/ex6ybNkyOnfuTGxsLG+88UaR4zjknXfe4aqrrgLg6quvjqx3d+644w7i4uLo27cv27dvjxxv69atSUhIACApKanYTHpZ9b799ttcddVVREVFccopp9CrVy9Wrw798+udOnWiRYsW1KpVi4SEhBLrFRGRqlPAFTkKFq7dzoQF69memUPO5/8hY1Max136J34/82USExPJzc0FoHbt2iQlJbFkyZLIvrVr16agoCDy/lDZwk466SQ++OADUlJSePTRRxk9ejQQ+tj+4YcfZv369UycODGyb/fu3UlPT2f58uXk5+dHHp4qrTxA3bp1I8vulfsI/aWXXmLs2LG8//77dOzYkYMHD1Zq/8rIzc3lxhtvZN68eaxfv54xY8aUOGYAZlZs3ezZs8nIyGDNmjWsW7eOU045JbJ/4TGIiooq9ThKqrcsFa1XRESqRgFX5CiYvGQzOXn5ABR8t59a9RrwHXX4/axXee+99yLlzIwnn3ySTZs28ec//xmAVq1a8f777wPw/vvvs3Xr1mL179q1i4KCAi677DL+8Ic/RMrv3buXU089lby8PGbPnl1kn2uuuYaf//znkdnb8sqXpHv37syfP5+CggJ27tzJ8uXLi5UpKChg27Zt9O7dmz//+c9kZWWRnZ1N9+7dee655wBYunQpe/bsAeCEE05g7969JbbXs2dPFi5cSE5ODnv37uXFF18sVuZQGG3atCnZ2dkl3hN8qO/PPvssQJFjzcrKolmzZtSpU4dly5bx2WeflTsOFan33HPPZc6cOeTn55ORkcGKFSvo1KlTpeoWEZGqUcAVOQp2ZP7vYaT6rZPwggK2T7+ezYsfo0uXLkXKRkVF8c9//pM33niDRx55hMsuu4xvvvmG6OhoHn74Yc4+++xi9W/fvp2UlBQSEhIYPnw4//d//wfAfffdR+fOnenevTvt2rUrss+w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+6SkpJCWllZs/aJFi7j//vuLrZ85cyY33XRTlfsYNN26davyvq1atWLXrl3V7sPy5csZMGBAmWUqet5Kux5q0l/+8hf2799fbrmKjMO6det4+eWXj1TXKqwq53r06NFs3LixwusrYtKkSUyZMqVK+4qIyNGhgPs9GjhwIOPHj6/pbhzz3n333ZruQuBVNOBWRE0F3MrKz8/n73//O+3bty+2rbT1IiLyw6SAWwEHDx5k2LBhnHPOOQwZMiQSDO699146duxITEwM1113He4e2WfWrFkkJCQQExPDqlWrgIrN+L344ot07tyZxMRE+vbty86dO4uVyc/P57e//S0xMTHExcXx0EMPAfD666+TmJhIbGwso0aN4rvvvgNCM10TJkwgISGB5ORk3n//fVJTUznrrLN49NFHgdBMXc+ePenfvz9t27bl+uuvp6CgAIAbbriB5ORkoqOjmThxYqQfrVq1YuLEiXTo0IHY2Fg2bdpEQUEBbdq0ISMjA4CCggJ+9rOfRd4fMmnSJEaNGkVKSgpnnnkm06ZNi2xr2LBhueektD4dkpOTw4UXXsj06dOLjfuAAQNYvnx5sX3+9a9/0a5dOzp06MCCBQsi61etWkXXrl1JTEykW7dubN68ObJtx44d9OvXjzZt2nD77bdXu98QmvG99dZbi10/+/btY9SoUXTq1InExEReeOEFIHRdXXrppSX2o6T2pk2bxo4dO+jduze9e/eu1jgcOHCAe+65hzlz5pCQkMCcOXNKHa+y+vnEE09w9tln06lTJ8aMGVPiz8nu3bu54IILiI6OZvTo0UV+3gYNGkRSUhLR0dE8/vjjkfUNGzbkN7/5DfHx8axcubLU2fTC68u63g/NGKelpZGSkhLZtnHjxhKvZRERqSHufsy8kpKS/FizdetWB/ztt992d/drr73WJ0+e7O7uu3fvjpQbPny4L1q0yN3de/Xq5aNHj3Z39zfffNOjo6Pd3X3GjBk+duzYYm0UXv/NN994QUGBu7tPnz7db7vttmLlH3nkEb/ssss8Ly8v0o+cnBxv0aKFb9682d3dr776ap86daq7u7ds2dIfeeQRd3f/1a9+5bGxsf7tt9/6119/7c2aNXN392XLlnndunV9y5YtfvDgQe/bt6/PnTu3yHEePHjQe/Xq5R988EGk3mnTprm7+1//+lf/xS9+4e7ukyZNirS9ZMkSv/TSS4sdw8SJE71r166em5vrGRkZ3qRJEz9w4IC7uzdo0KCEM1FUWX3aunWr9+nTx5966qli4+vu3r9/f1+2bFmR+g6N30cffeQFBQU+dOhQ79+/v7u7Z2VlRcb61VdfjRzPjBkzvHXr1p6Zmek5OTl+xhln+Oeff16sr7169fLVq1eX2e/Dy5d0/UyYMMFnzZrl7u579uzxNm3aeHZ2dpn9KGucMjIyirVd1XEoPL6VHa/t27d7y5Ytfffu3X7gwAHv0aNHiT8nN998s//+9793d/fFixc7EDmGQ8e5f/9+j46O9l27drm7O+Bz5swp8VxU9hwVHrPVq1d7r1693L3sa1mODCDNj4HfUXrppdcP56UZ3FIsXLud7ve/QY8/v8FxjZqRcXwrAIYPH87bb78NwLJly+jcuTOxsbG88cYbbNiwIbL/VVddBUDPnj359ttvyczMrFC7X3zxBampqcTGxjJ58uQidR7y2muv8ctf/pLatWsD0KRJEzZv3kzr1q05++yzARgxYgQrVqyI7DNw4EAAYmNj6dy5MyeccAI/+clPqFu3bqRvnTp14swzzyQqKoqrrroqcpzPPfccHTp0IDExkQ0bNhS5V/HSSy8FICkpifT0dABGjRrF008/DcCTTz7JtddeW+Kx9u/fn7p169K0aVOaNWtW4mx1acrq0yWXXMK1117LNddcU+H6Nm3aROvWrWnTpg1mxvDhwyPbsrKyGDp0KDExMfz6178uck769OlDo0aNqFevHu3bt+ezzz6rcr8LK+n6Wbp0Kffffz8JCQmkpKSQm5vL559/XmY/KtpedcehsMqO16pVq+jVqxdNmjShTp06DB06tMR6V6xYEelP//79OemkkyLbpk2bRnx8PF26dGHbtm18/PHHAERFRXHZZZeVecyHq+yYHepPVa9lERE58hRwS7Bw7XYmLFjP9swcAPLdmbBgPQvXbgfAzMjNzeXGG29k3rx5rF+/njFjxpCbmxupw8yK1Hn4+9LcfPPN3HTTTaxfv57HHnusSJ3VUbduXQBq1aoVWT70/uDBg6X2eevWrUyZMoXXX3+d//znP/Tv379Inw7VFRUVFann9NNP55RTTuGNN95g1apVXHjhhWX26fD9y1Nen7p3786//vUv3EMfYdeuXTtyuwVQ6TG9++676d27Nx9++CEvvvhiicdfkWMor9+FlXQu3J358+ezbt061q1bx+eff84555xTaj8q015FlDUOFS1X1XNeluXLl/Paa6+xcuVKPvjgAxITEyNt1qtXj6ioqArXVdaYFb6ODj/2o3FcIiJSdQq4JZi8ZDM5efmR9/nfZpCZ/iGTl2zmmWeeoUePHpFfcE2bNiU7O5t58+YVqWPOnDkAvP322zRq1IhGjRpVqO2srCyaN28OwFNPPVVimfPPP5/HHnss8kv0m2++oW3btqSnp/PJJ58AoXuAe/XqVYmjDt1juXXrVgoKCpgzZw49evTg22+/pUGDBjRq1IidO3fyyiuvVKiu0aNHM3z4cIYOHVqpgHG4du3aFVtXXp/uvfdeTjrpJMaOHQuE7p1ct24dBQUFbNu2LXJP6+HtpKens2XLFgD++c9/RrYVPiczZ86s8rFUZixLun5SU1N56KGHIsF97dq1VW7vhBNOYO/evcX2qco4HF5XZcerY8eOvPnmm+zZs4eDBw8yf/78Esv17NmTZ555BoBXXnmFPXv2RNo76aSTOP7449m0aRPvvfdeuW2Wpqwxa9WqFWvWrAEotY8iInJsUMAtwY7wzO0htZu0YO/7L7F68gj27NnDDTfcQOPGjRkzZgwxMTGkpqbSsWPHIvvUq1ePxMRErr/+ep544okKtz1p0iSGDh1KUlISTZs2LbHM6NGjOeOMM4iLiyM+Pp5nnnmGevXqMWPGDIYOHUpsbCy1atXi+uuvr9Rxd+zYkZtuuolzzjmH1q1bM3jwYOLj40lMTKRdu3b8/Oc/p3v37hWqa+DAgWRnZ5d6e0JF7Nq1KxLmCqtInx588EFycnK4/fbb6d69O61bt6Z9+/bccsstdOjQoVj5evXq8fjjj9O/f386dOhAs2bNIttuv/12JkyYQGJiYrVm5iozliVdP3fffTd5eXnExcURHR3N3XffXeX2rrvuOvr161fsIbOqjEPv3r3ZuHFj5CGzyo5X8+bNueOOO+jUqRPdu3enVatWJf5BOHHiRFasWEF0dDQLFizgjDPOAKBfv34cPHiQc845h/Hjx9OlS5dy2yyJmZU5ZhMnTuTWW28lOTm5Wn+0iYjI0WclBYiakpyc7MfC94V2v/+NyO0JhTVvXJ93xp9XAz06+pYvX86UKVNYvHjxEakvLS2NX//617z11ltVrmPx4sV8+umn3HLLLUekTz8UKSkpTJkyheTk5JruyvcmOzubhg0bcvDgQQYPHsyoUaMYPHjw99Z+bGwsixYtonXr1t9bm1JxZrbG3X88PxAiUm21a7oDx6JxqW2ZsGB9kdsU6teJYlxq2xrs1Q/H/fffz9/+9jdmz55drXrK+wcGJDgmTZrEa6+9Rm5uLhdccAGDBg363to+//zziY2NVbgVEQkQzeCWYuHa7UxespkdmTmc1rg+41LbMiixeU13S0TkR0czuCJSWZrBLcWgxOYKtCIiIiI/QHrITEREREQCRQFXRERERAJFAVdEREREAkUBV0REREQCRQFXRERERAJFAVdEREREAkUBV0REREQCRQFXRERERAJFAVdEREREAkUBV0REREQCRQFXRERERAJFAVdEREREAkUBV0REREQCRQFXRERERAJFAVdEREREAkUBV0REREQCRQFXRERERAJFAVdEREREAkUBV0REREQCRQFXRERERAJFAVdEREREAkUBV0REREQCRQFXRERERAJFAVdEREREAkUBV0REREQCRQFXRERERAJFAVdEREREAkUBV0REREQCRQFXRERERAJFAVdEREREAkUBV0REREQCRQFXRERERAKlWgHXzBLM7D0zW2dmaWbWKbzezGyamX1iZv8xsw5HprsiIiIiImWr7gzuA8Dv3T0BuCf8HuBCoE34dR3wt2q2IyIiIiJSIdUNuA6cGF5uBOwIL18CPO0h7wGNzezUarYlIiIiIlKu2tXc/1fAEjObQigsdwuvbw5sK1Tui/C6L6vZnoiIiIhImcoNuGb2GvDTEjbdCfQBfu3u883scuAJoG9lOmBm1xG6jYEzzjijMruKiIiIiBRT7i0K7t7X3WNKeL0AjAAWhIvOBTqFl7cDpxeqpkV4XUn1P+7uye6e/JOf/KTqRyIiPyopKSmkpaUVW3/RRReRmZlJZmYmjzzySKn7d+vWrdRt5Zk5cyY7duwov+BRMmnSJKZMmVLtetatW8fLL79c6f2WL1/OgAEDKlz+nnvu4bXXXiu3znfffbdC9ZlZupk1rXAHfgDM7O9m1j68fEcV9j9iY1LF9gcd6n8l98sO//c0M5tX2f1FSlPde3B3AL3Cy+cBH4eXFwHXhL9NoQuQ5e66PUFEjrqXX36Zxo0blxtwKxqmSlLTAfdIqUrAPXjwYKXbuffee+nbt+wP9yoTcIPGzKLcfbS7bwyvqnTAPMKq0v4goNIB9xB33+HuQ6q6v8jhqhtwxwD/n5l9APyJ8K0GwMvAp8AnwHTgxmq2IyIBt2/fPvr37098fDwxMTHMmTMHCIWjjh07EhMTw3XXXYe7F9mvoKCAkSNHctdddwHQqlUrdu3axfjx49myZQsJCQmMGzeuWHsNGzYEIDs7mz59+tChQwdiY2N54YUXAEhPT+ecc85hzJgxREdHc8EFF5CTk8O8efNIS0tj2LBhJCQkkJOTE2kTIC0tjZSUFCA00zpq1ChSUlI488wzmTZtWqT9++67j7Zt29KjRw+uuuqqEmdkX3zxRTp37kxiYiJ9+/Zl586dxcpMnz6dCy+8kJycnMgxAcybN4+RI0eWOt4HDhzgnnvuYc6cOSQkJDBnzhz27dvHqFGj6NSpE4mJiZGxmDlzJgMHDuS8886jT58+RepZvXo1iYmJbNmyhTVr1tCrVy+SkpJITU3lyy9D8xojR45k3rx5Rc5P4bFKT0/n0UcfZerUqSQkJPDWW28d3t0oM1tqZhvM7O+AHdpgZsPNbFX46yofM7Oo8PpsM/ujmX0Q/jrLU8Lrzwq/X29mfyg0g9jQzF43s/fD2y4Jr29lZv81s+nh9peaWf3DO2hmp5jZ8+H2PjCzbhXo36Hfn13NbLmZJZvZ/UD9cPnZ4bILzWxNuP3rDm+7kJsL9b9deN9OZrbSzNaa2btm1ja8fqSZLTCzf5nZx2b2QHh9kfbDx/9hoeP8rZlNOuzYuwEDgcnh/c4yszFmtjo8FvPN7Phw2dbh/qw3sz8UqqNIOyLV5u7HzCspKclF5Mdp3rx5Pnr06Mj7zMxMd3ffvXt3ZN3w4cN90aJF7u7eq1cvX7lypV955ZX+hz/8IVKmZcuWnpGR4Vu3bvXo6OhS22vQoIG7u+fl5XlWVpa7u2dkZPhZZ53lBQUFvnXrVo+KivK1a9e6u/vQoUN91qxZkbZXr15drE1399WrV3uvXr3c3X3ixInetWtXz83N9YyMDG/SpIkfOHDAV61a5fHx8Z6Tk+Pffvut/+xnP/PJkycX6+M333zjBQUF7u4+ffp0v+222yL1Tp482R966CEfOHCg5+bmFjkmd/e5c+f6iBEjSj1+d/cZM2b42LFjI+8nTJgQOcY9e/Z4mzZtPDs722fMmOHNmzePnItly5Z5//79/Z133vEOHTr4Z5995gcOHPCuXbv6119/7e7uzz77rF977bXu7j5ixAifO3duuWNV0hi4uwM7gXtCi/Qn9A0+TYFzgBeBOuFtjwDXhJcduDi8/ABwV3h5MXBVePl6IDu8XBs4MbzclNAEjQGtgINAQnjbc8BwP+z3FzAH+FV4OYrQNwuV17/LC+2/HEgOL2cfVneT8H/rAx8CJ5fQfjpwc3j5RuDv4eUTgdrh5b7A/PDySEITUY2AesBnwOmHtx8+/g8Lvf8tMKmE9mcCQwq9P7nQ8h8K9W1RoTEYW2j8i7Sjl17VfVX3WxRERI6I2NhYfvOb3/C73/2OAQMGcO655wKwbNkyHnjgAfbv388333xDdHQ0F198MQC//OUvufzyy7nzzjur3K67c8cdd7BixQpq1arF9u3bIzOlrVu3JiEhAYCkpCTS09MrXX///v2pW7cudevWpVmzZuzcuZN33nmHSy65hHr16lGvXr3I8Rzuiy++4IorruDLL7/kwIEDtG7dOrLt6aef5vTTT2fhwoXUqVOn0v0qydKlS1m0aFFkNjk3N5fPP/8cgPPPP58mTZpEyv73v//luuuuY+nSpZx22ml8+OGHfPjhh5x//vkA5Ofnc+qpR+zbIU8A/gHg7i+Z2Z7w+j5AErDazCAUAL8ObztAKMwCrAHODy93JfRxOsAzwKGpcwP+ZGY9gQJC3/xzSnjbVndfV6iuViX08TzgmnAf84EsM7u6jP7lA/MrdvjcYmaDw8unE/qO+d0llDv0TMwa4NLwciPgKTNrQyhUF75YXnf3LAAz2wi0pOg3IFVHTHiGtjHQEFgSXt8duCy8PAv48xFqT6QIBVwRqVEL125n8pLN7MjModk1f+G74z7nrrvuok+fPtx+++3ceOONpKWlcfrppzNp0iRyc3Mj+3br1o1ly5bxm9/8hnr16lWp/dmzZ5ORkcGaNWuoU6cOrVq1irRRt27dSLmoqChycnJKrKN27doUFBQAFOlfSXVU5h7Wm2++mdtuu42BAweyfPlyJk2aFNkWGxvLunXr+OKLLyLBNxyiSuxHRbg78+fPp23btkXW//vf/6ZBgwZF1p166qnk5uaydu1aTjvtNNyd6OhoVq5cWWYbZY1VFRjwlLtPKGFbnrsfup8ln/J/3w0DfgIkuXuemaUTmtkE+K5QuXxCQbW6/csNB+GyKzBLITTz2tXd95vZ8kL9OtyhfhY+3vuAZe4+2MxaEZopPrz84fsUdpCitzNW9AdtJjDI3T8ws5FASqFtXtIOIkdSde/BFRGpsoVrtzNhwXq2Z+aQt3c3O/c7S747mx6XjuL999+PBKCmTZuSnZ0duY/zkF/84hdcdNFFXH755cWC4wknnMDevXvL7UNWVhbNmjWjTp06LFu2jM8++6zcfQ6vu1WrVqxZswaA+fPLn5Tr3r07L774Irm5uWRnZ7N48eISy2VlZdG8eXMAnnrqqSLbEhMTeeyxxxg4cGDkgbdTTjmF//73vxQUFPD8889Hyj7//PNMmFA8Yx1+HKmpqTz00EMcyoVr164t9RgaN27MSy+9xIQJE1i+fDlt27YlIyMjEnDz8vLYsGFDsf1KG6tyztde4OcAZnYhcFJ4/evAEDNrFt7WxMxaltrpkPf43wzilYXWNwK+Dofb3oRmMyvjdeCGcD+izKxRFfsHkGdmh2ZaGwF7wuG2HdClkv1qxP++xWhkBfcp3P5OoJmZnWxmdYHSvj5jL6GZ9kNOAL4M1zOs0Pp3+N+4F14vckQp4IpIjZm8ZDM5eaFJrLyMdL58+ja2PH4jD07+P+666y4aN27MmDFjiImJITU1lY4dOxar47bbbiMxMZGrr746MjMIcPLJJ9O9e3diYmJKfMjs0GznsGHDSEtLIzY2lqeffpp27dqV2++RI0dy/fXXRx4ymzhxIrfeeivJyclERUWVu3/Hjh0ZOHAgcXFxXHjhhcTGxtKoUaNi5SZNmsTQoUNJSkqiadPi3wDVo0cPpkyZQv/+/dm1axf3338/AwYMoFu3bkVuD9iyZQsnnnhisf179+7Nxo0bIw+Z3X333eTl5REXF0d0dDR33313mcdxyimnsHjxYsaOHcvatWuZN28ev/vd74iPjychIaHItyIcGu/Sxuriiy/m+eefL+0hsx1ATzPbQOij988BPPStA3cBS83sP8CrQHn3RfwKuC1c/mdAVnj9bCDZzNYTutVgUzn1HO5WoHd4/zVA+yr2D+Bx4D/hh8z+BdQ2s/8C9xMK6JXxAPB/ZraWin9qG2nf3fOAe4FV4f6XNi7PAuPCD7OdBdwN/JtQoC28z63A2PA4Na/ksYhUmP3vE5yal5yc7CV9r6WIBFPr8S+V+FmlAVvv73/U2t29ezcdOnSo0Gzt0ZKdnU3Dhg3Zv38/PXv25PHHH6dDhw5Hpa3hw4czdepUauq7xi+++GJuu+02evfuXaX9zWyNuycfib6En+bPcXc3sysJPXB2yZGoW0SOHboHV0RqzGmN67M9s/h9rac1rugtjpW3Y8cOUlJS+O1vf3vU2qiI6667jo0bN5Kbm8uIESOOWrgF+Mc//nHU6i7PqFGj2L9/Pz169KixPhwmCXjYQlPKmcComu2OiBwNmsEVkRpz6B7cQ7cpANSvE8X/XRrLoER9eikhR3IGV0R+HDSDKyI15lCIPfQtCqc1rs+41LYKtyIiUi0KuCJSowYlNlegFRGRI0rfoiAiIiIigaKAKyIiIiKBooArIiIiIoGigCsiIiIigaKAKyIiIiKBooArIiIiIoGigCsiIiIigaKAKyIiIiKBooArIiIiIoGigCsiIiIigaKAKyIiIiKBooArIiIiIoFi7l7TfYgwswzgs5ruxxHQFNhV0534gdMYVo/Gr/o0htV3pMawpbv/5AjUIyI/EsdUwA0KM0tz9+Sa7scPmcawejR+1acxrD6NoYjUFN2iICIiIiKBooArIiIiIoGigHt0PF7THQgAjWH1aPyqT2NYfRpDEakRugdXRERERAJFM7giIiIiEigKuCIiIiISKAq4R4GZ/cbM3Myaht+bmU0zs0/M7D9m1qGm+3gsMrPJZrYpPEbPm1njQtsmhMdvs5ml1mA3j3lm1i88Tp+Y2fia7s8PgZmdbmbLzGyjmW0ws1vD65uY2atm9nH4vyfVdF+PZWYWZWZrzWxx+H1rM/t3+FqcY2bH1XQfReTHQQH3CDOz04ELgM8Lrb4QaBN+XQf8rQa69kPwKhDj7nHAR8AEADNrD1wJRAP9gEfMLKrGenkMC4/LXwldc+2Bq8LjJ2U7CPzG3dsDXYCx4XEbD7zu7m2A18PvpXS3Av8t9P7PwFR3/xmwB/hFjfRKRH50FHCPvKnA7UDhp/cuAZ72kPeAxmZ2ao307hjm7kvd/WD47XtAi/DyJcCz7v6du28FPgE61UQffwA6AZ+4+6fufgB4ltD4SRnc/Ut3fz+8vJdQSGtOaOyeChd7ChhUIx38ATCzFkB/4O/h9wacB8wLF9H4icj3RgH3CDKzS4Dt7v7BYZuaA9sKvf8ivE5KNwp4Jbys8as4jVU1mVkrIBH4N3CKu38Z3vQVcEpN9esH4C+E/rgvCL8/Gcgs9EerrkUR+d7UrukO/NCY2WvAT0vYdCdwB6HbE6QUZY2fu78QLnMnoY+MZ3+ffRMxs4bAfOBX7v5taBIyxN3dzPS9iiUwswHA1+6+xsxSarg7IiIKuJXl7n1LWm9msUBr4IPwL8UWwPtm1gnYDpxeqHiL8LofndLG7xAzGwkMAPr4/76kWeNXcRqrKjKzOoTC7Wx3XxBevdPMTnX3L8O3FX1dcz08pnUHBprZRUA94ETgQUK3Y9UOz+LqWhSR741uUThC3H29uzdz91bu3orQx3Ed3P0rYBFwTfjbFLoAWYU+9pQwM+tH6CPOge6+v9CmRcCVZlbXzFoTelhvVU308QdgNdAm/PT6cYQezltUw3065oXvF30C+K+7/79CmxYBI8LLI4AXvu++/RC4+wR3bxH+f9+VwBvuPgxYBgwJF9P4icj3RjO434+XgYsIPRy1H7i2ZrtzzHoYqAu8Gp4Ff8/dr3f3DWb2HLCR0K0LY909vwb7ecxy94NmdhOwBIgCnnT3DTXcrR+C7sDVwHozWxdedwdwP/Ccmf0C+Ay4vGa694P1O+BZM/sDsJbQHxEiIked/qleEREREQkU3aIgIiIiIoGigCsiIiIigaKAKyIiIiKBooArIiIiIoGigCsiIiIigaKAKyIiIiKBooArIiIiIoHy/wP0+NULMIoYMAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize = (7, 7))\n", "plt.scatter(tsne[:, 0], tsne[:, 1])\n", "labels = texts\n", "for label, x, y in zip(\n", " labels, tsne[:, 0], tsne[:, 1]\n", "):\n", " label = (\n", " '%s, %.3f' % (label[0], label[1])\n", " if isinstance(label, list)\n", " else label\n", " )\n", " plt.annotate(\n", " label,\n", " xy = (x, y),\n", " xytext = (0, 0),\n", " textcoords = 'offset points',\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Word level" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "r = quantized_model.vectorize(texts, method = 'word')" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "x, y = [], []\n", "for row in r:\n", " x.extend([i[0] for i in row])\n", " y.extend([i[1] for i in row])" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(49, 2)" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tsne = TSNE().fit_transform(y)\n", "tsne.shape" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize = (7, 7))\n", "plt.scatter(tsne[:, 0], tsne[:, 1])\n", "labels = x\n", "for label, x, y in zip(\n", " labels, tsne[:, 0], tsne[:, 1]\n", "):\n", " label = (\n", " '%s, %.3f' % (label[0], label[1])\n", " if isinstance(label, list)\n", " else label\n", " )\n", " plt.annotate(\n", " label,\n", " xy = (x, y),\n", " xytext = (0, 0),\n", " textcoords = 'offset points',\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pretty good, the model able to know cluster top right as surprise emotion." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Stacking models\n", "\n", "More information, you can read at [https://malaya.readthedocs.io/en/latest/Stack.html](https://malaya.readthedocs.io/en/latest/Stack.html)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "multinomial = malaya.emotion.multinomial()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'anger': 0.5739743139312979,\n", " 'fear': 0.002130791264743306,\n", " 'happy': 0.0019609404077070573,\n", " 'love': 0.0016901068202818533,\n", " 'sadness': 0.001121633002361737,\n", " 'surprise': 0.0015551851123993595}]" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "malaya.stack.predict_stack([multinomial, model], [anger_text])" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'anger': 0.5739743139312979,\n", " 'fear': 0.002130791264743306,\n", " 'happy': 0.0019609404077070573,\n", " 'love': 0.0016901068202818533,\n", " 'sadness': 0.001121633002361737,\n", " 'surprise': 0.0015551858768478731},\n", " {'anger': 0.001604580129233267,\n", " 'fear': 0.0011600003908574707,\n", " 'happy': 0.0009737663531537643,\n", " 'love': 0.0008489265368074127,\n", " 'sadness': 0.6079418541812244,\n", " 'surprise': 0.001139192858067602}]" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "malaya.stack.predict_stack([multinomial, model], [anger_text, sadness_text])" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.7" } }, "nbformat": 4, "nbformat_minor": 2 }