{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: transformers in /home/divya/.venv/lib/python3.8/site-packages (4.31.0)\n",
"Requirement already satisfied: filelock in /home/divya/.venv/lib/python3.8/site-packages (from transformers) (3.12.2)\n",
"Requirement already satisfied: huggingface-hub<1.0,>=0.14.1 in /home/divya/.venv/lib/python3.8/site-packages (from transformers) (0.16.4)\n",
"Requirement already satisfied: numpy>=1.17 in /home/divya/.venv/lib/python3.8/site-packages (from transformers) (1.24.3)\n",
"Requirement already satisfied: packaging>=20.0 in /home/divya/.venv/lib/python3.8/site-packages (from transformers) (23.1)\n",
"Requirement already satisfied: pyyaml>=5.1 in /home/divya/.venv/lib/python3.8/site-packages (from transformers) (6.0.1)\n",
"Requirement already satisfied: regex!=2019.12.17 in /home/divya/.venv/lib/python3.8/site-packages (from transformers) (2023.6.3)\n",
"Requirement already satisfied: requests in /home/divya/.venv/lib/python3.8/site-packages (from transformers) (2.31.0)\n",
"Requirement already satisfied: tokenizers!=0.11.3,<0.14,>=0.11.1 in /home/divya/.venv/lib/python3.8/site-packages (from transformers) (0.13.3)\n",
"Requirement already satisfied: safetensors>=0.3.1 in /home/divya/.venv/lib/python3.8/site-packages (from transformers) (0.3.2)\n",
"Requirement already satisfied: tqdm>=4.27 in /home/divya/.venv/lib/python3.8/site-packages (from transformers) (4.65.0)\n",
"Requirement already satisfied: fsspec in /home/divya/.venv/lib/python3.8/site-packages (from huggingface-hub<1.0,>=0.14.1->transformers) (2023.6.0)\n",
"Requirement already satisfied: typing-extensions>=3.7.4.3 in /home/divya/.venv/lib/python3.8/site-packages (from huggingface-hub<1.0,>=0.14.1->transformers) (4.7.1)\n",
"Requirement already satisfied: charset-normalizer<4,>=2 in /home/divya/.venv/lib/python3.8/site-packages (from requests->transformers) (3.1.0)\n",
"Requirement already satisfied: idna<4,>=2.5 in /home/divya/.venv/lib/python3.8/site-packages (from requests->transformers) (3.4)\n",
"Requirement already satisfied: urllib3<3,>=1.21.1 in /home/divya/.venv/lib/python3.8/site-packages (from requests->transformers) (1.26.16)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /home/divya/.venv/lib/python3.8/site-packages (from requests->transformers) (2023.5.7)\n",
"Requirement already satisfied: torch in /home/divya/.venv/lib/python3.8/site-packages (2.0.1)\n",
"Requirement already satisfied: filelock in /home/divya/.venv/lib/python3.8/site-packages (from torch) (3.12.2)\n",
"Requirement already satisfied: typing-extensions in /home/divya/.venv/lib/python3.8/site-packages (from torch) (4.7.1)\n",
"Requirement already satisfied: sympy in /home/divya/.venv/lib/python3.8/site-packages (from torch) (1.12)\n",
"Requirement already satisfied: networkx in /home/divya/.venv/lib/python3.8/site-packages (from torch) (3.1)\n",
"Requirement already satisfied: jinja2 in /home/divya/.venv/lib/python3.8/site-packages (from torch) (3.1.2)\n",
"Requirement already satisfied: nvidia-cuda-nvrtc-cu11==11.7.99 in /home/divya/.venv/lib/python3.8/site-packages (from torch) (11.7.99)\n",
"Requirement already satisfied: nvidia-cuda-runtime-cu11==11.7.99 in /home/divya/.venv/lib/python3.8/site-packages (from torch) (11.7.99)\n",
"Requirement already satisfied: nvidia-cuda-cupti-cu11==11.7.101 in /home/divya/.venv/lib/python3.8/site-packages (from torch) (11.7.101)\n",
"Requirement already satisfied: nvidia-cudnn-cu11==8.5.0.96 in /home/divya/.venv/lib/python3.8/site-packages (from torch) (8.5.0.96)\n",
"Requirement already satisfied: nvidia-cublas-cu11==11.10.3.66 in /home/divya/.venv/lib/python3.8/site-packages (from torch) (11.10.3.66)\n",
"Requirement already satisfied: nvidia-cufft-cu11==10.9.0.58 in /home/divya/.venv/lib/python3.8/site-packages (from torch) (10.9.0.58)\n",
"Requirement already satisfied: nvidia-curand-cu11==10.2.10.91 in /home/divya/.venv/lib/python3.8/site-packages (from torch) (10.2.10.91)\n",
"Requirement already satisfied: nvidia-cusolver-cu11==11.4.0.1 in /home/divya/.venv/lib/python3.8/site-packages (from torch) (11.4.0.1)\n",
"Requirement already satisfied: nvidia-cusparse-cu11==11.7.4.91 in /home/divya/.venv/lib/python3.8/site-packages (from torch) (11.7.4.91)\n",
"Requirement already satisfied: nvidia-nccl-cu11==2.14.3 in /home/divya/.venv/lib/python3.8/site-packages (from torch) (2.14.3)\n",
"Requirement already satisfied: nvidia-nvtx-cu11==11.7.91 in /home/divya/.venv/lib/python3.8/site-packages (from torch) (11.7.91)\n",
"Requirement already satisfied: triton==2.0.0 in /home/divya/.venv/lib/python3.8/site-packages (from torch) (2.0.0)\n",
"Requirement already satisfied: setuptools in /home/divya/.venv/lib/python3.8/site-packages (from nvidia-cublas-cu11==11.10.3.66->torch) (68.0.0)\n",
"Requirement already satisfied: wheel in /home/divya/.venv/lib/python3.8/site-packages (from nvidia-cublas-cu11==11.10.3.66->torch) (0.40.0)\n",
"Requirement already satisfied: cmake in /home/divya/.venv/lib/python3.8/site-packages (from triton==2.0.0->torch) (3.26.4)\n",
"Requirement already satisfied: lit in /home/divya/.venv/lib/python3.8/site-packages (from triton==2.0.0->torch) (16.0.6)\n",
"Requirement already satisfied: MarkupSafe>=2.0 in /home/divya/.venv/lib/python3.8/site-packages (from jinja2->torch) (2.1.3)\n",
"Requirement already satisfied: mpmath>=0.19 in /home/divya/.venv/lib/python3.8/site-packages (from sympy->torch) (1.3.0)\n"
]
}
],
"source": [
"# Install Transformers\n",
"!pip install transformers\n",
"# To get model summary\n",
"!pip install torch"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: seaborn in /home/divya/.venv/lib/python3.8/site-packages (0.12.2)\n",
"Requirement already satisfied: numpy!=1.24.0,>=1.17 in /home/divya/.venv/lib/python3.8/site-packages (from seaborn) (1.24.3)\n",
"Requirement already satisfied: pandas>=0.25 in /home/divya/.venv/lib/python3.8/site-packages (from seaborn) (2.0.2)\n",
"Requirement already satisfied: matplotlib!=3.6.1,>=3.1 in /home/divya/.venv/lib/python3.8/site-packages (from seaborn) (3.7.1)\n",
"Requirement already satisfied: contourpy>=1.0.1 in /home/divya/.venv/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (1.1.0)\n",
"Requirement already satisfied: cycler>=0.10 in /home/divya/.venv/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (0.11.0)\n",
"Requirement already satisfied: fonttools>=4.22.0 in /home/divya/.venv/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (4.40.0)\n",
"Requirement already satisfied: kiwisolver>=1.0.1 in /home/divya/.venv/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (1.4.4)\n",
"Requirement already satisfied: packaging>=20.0 in /home/divya/.venv/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (23.1)\n",
"Requirement already satisfied: pillow>=6.2.0 in /home/divya/.venv/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (10.0.0)\n",
"Requirement already satisfied: pyparsing>=2.3.1 in /home/divya/.venv/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (3.1.0)\n",
"Requirement already satisfied: python-dateutil>=2.7 in /home/divya/.venv/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (2.8.2)\n",
"Requirement already satisfied: importlib-resources>=3.2.0 in /home/divya/.venv/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (5.12.0)\n",
"Requirement already satisfied: pytz>=2020.1 in /home/divya/.venv/lib/python3.8/site-packages (from pandas>=0.25->seaborn) (2023.3)\n",
"Requirement already satisfied: tzdata>=2022.1 in /home/divya/.venv/lib/python3.8/site-packages (from pandas>=0.25->seaborn) (2023.3)\n",
"Requirement already satisfied: zipp>=3.1.0 in /home/divya/.venv/lib/python3.8/site-packages (from importlib-resources>=3.2.0->matplotlib!=3.6.1,>=3.1->seaborn) (3.15.0)\n",
"Requirement already satisfied: six>=1.5 in /home/divya/.venv/lib/python3.8/site-packages (from python-dateutil>=2.7->matplotlib!=3.6.1,>=3.1->seaborn) (1.16.0)\n"
]
}
],
"source": [
"!pip install seaborn"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2023-08-14 03:17:51.971632: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n",
"To enable the following instructions: AVX2 AVX512F FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n",
"2023-08-14 03:17:52.770602: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n"
]
}
],
"source": [
"#import required package\n",
"import numpy as np\n",
"import pandas as pd\n",
"import seaborn as sns\n",
"import re\n",
"import torch\n",
"import random\n",
"import torch.nn as nn\n",
"import transformers\n",
"from transformers import BertModel, BertTokenizer, AdamW, get_linear_schedule_with_warmup\n",
"import matplotlib.pyplot as plt\n",
"from torch.utils.data import Dataset, DataLoader\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.metrics import confusion_matrix, classification_report\n",
"from collections import defaultdict\n",
"import pickle\n",
"from tqdm import tqdm\n",
"import gradio as gr"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# specify GPU\n",
"device = torch.device(\"cuda\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"os.environ[\"CUDA_DEVICE_ORDER\"]=\"PCI_BUS_ID\" \n",
"os.environ['CUDA_VISIBLE_DEVICES']='1'"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"#read the reviews of fine food from .csv file\n",
"reviews_df=pd.read_csv(\"/home/divya/vivek5/amazon question answer/Reviews.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Id | \n",
" ProductId | \n",
" UserId | \n",
" ProfileName | \n",
" HelpfulnessNumerator | \n",
" HelpfulnessDenominator | \n",
" Score | \n",
" Time | \n",
" Summary | \n",
" Text | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" B001E4KFG0 | \n",
" A3SGXH7AUHU8GW | \n",
" delmartian | \n",
" 1 | \n",
" 1 | \n",
" 5 | \n",
" 1303862400 | \n",
" Good Quality Dog Food | \n",
" I have bought several of the Vitality canned d... | \n",
"
\n",
" \n",
" 1 | \n",
" 2 | \n",
" B00813GRG4 | \n",
" A1D87F6ZCVE5NK | \n",
" dll pa | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 1346976000 | \n",
" Not as Advertised | \n",
" Product arrived labeled as Jumbo Salted Peanut... | \n",
"
\n",
" \n",
" 2 | \n",
" 3 | \n",
" B000LQOCH0 | \n",
" ABXLMWJIXXAIN | \n",
" Natalia Corres \"Natalia Corres\" | \n",
" 1 | \n",
" 1 | \n",
" 4 | \n",
" 1219017600 | \n",
" \"Delight\" says it all | \n",
" This is a confection that has been around a fe... | \n",
"
\n",
" \n",
" 3 | \n",
" 4 | \n",
" B000UA0QIQ | \n",
" A395BORC6FGVXV | \n",
" Karl | \n",
" 3 | \n",
" 3 | \n",
" 2 | \n",
" 1307923200 | \n",
" Cough Medicine | \n",
" If you are looking for the secret ingredient i... | \n",
"
\n",
" \n",
" 4 | \n",
" 5 | \n",
" B006K2ZZ7K | \n",
" A1UQRSCLF8GW1T | \n",
" Michael D. Bigham \"M. Wassir\" | \n",
" 0 | \n",
" 0 | \n",
" 5 | \n",
" 1350777600 | \n",
" Great taffy | \n",
" Great taffy at a great price. There was a wid... | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Id ProductId UserId ProfileName \\\n",
"0 1 B001E4KFG0 A3SGXH7AUHU8GW delmartian \n",
"1 2 B00813GRG4 A1D87F6ZCVE5NK dll pa \n",
"2 3 B000LQOCH0 ABXLMWJIXXAIN Natalia Corres \"Natalia Corres\" \n",
"3 4 B000UA0QIQ A395BORC6FGVXV Karl \n",
"4 5 B006K2ZZ7K A1UQRSCLF8GW1T Michael D. Bigham \"M. Wassir\" \n",
"\n",
" HelpfulnessNumerator HelpfulnessDenominator Score Time \\\n",
"0 1 1 5 1303862400 \n",
"1 0 0 1 1346976000 \n",
"2 1 1 4 1219017600 \n",
"3 3 3 2 1307923200 \n",
"4 0 0 5 1350777600 \n",
"\n",
" Summary Text \n",
"0 Good Quality Dog Food I have bought several of the Vitality canned d... \n",
"1 Not as Advertised Product arrived labeled as Jumbo Salted Peanut... \n",
"2 \"Delight\" says it all This is a confection that has been around a fe... \n",
"3 Cough Medicine If you are looking for the secret ingredient i... \n",
"4 Great taffy Great taffy at a great price. There was a wid... "
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"reviews_df.head()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"def itemfreq(data):\n",
" items, inv = np.unique(data, return_inverse=True)\n",
" freq = np.bincount(inv)\n",
" return items,freq"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([ 18296., 0., 10575., 0., 0., 15624., 0.,\n",
" 29118., 0., 126387.]),\n",
" array([1. , 1.4, 1.8, 2.2, 2.6, 3. , 3.4, 3.8, 4.2, 4.6, 5. ]),\n",
" )"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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avr06Ro3bpxuvvlmvf7662ppadFDDz3k72kDAIAA1CU3S5/Pa6+9puDgYE2ZMkWtra1KSUnRG2+8YY/36tVLJSUlevTRR5WUlKQ+ffpo+vTpev755+2auLg4rVu3To8//rgWL16sQYMG6a233lJKSopdM3XqVB08eFD5+flyu91KSEhQaWnpaTdQAwAAM3XZc4R6Ap4jBAAIJDxH6AeXxXOEAAAALncEIQAAYCyCEAAAMBZBCAAAGIsgBAAAjEUQAgAAxiIIAQAAYxGEAACAsQhCAADAWAQhAABgLIIQAAAwFkEIAAAYiyAEAACMRRACAADGIggBAABjEYQAAICxCEIAAMBYBCEAAGAsghAAADAWQQgAABiLIAQAAIxFEAIAAMYiCAEAAGP17u4GAAA935C8dd3dQqd9uSi1u1vAJcAVIQAAYCyCEAAAMBZBCAAAGIsgBAAAjEUQAgAAxiIIAQAAYxGEAACAsQhCAADAWAQhAABgLIIQAAAwFkEIAAAYiyAEAACMRRACAADGIggBAABjEYQAAICxCEIAAMBYBCEAAGAsghAAADAWQQgAABiLIAQAAIzl9yC0cOFC3XTTTerbt68iIyOVlpam3bt3+9QcPXpUWVlZGjBggK666ipNmTJFjY2NPjX79u1TamqqrrzySkVGRuqpp57SiRMnfGo2bNigMWPGKDQ0VNdee62KiopO62fZsmUaMmSIwsLClJiYqC1btvh7ygAAIED5PQht3LhRWVlZ+uyzz1RWVqbjx49r0qRJamlpsWsef/xxffDBB1qzZo02btyoAwcO6Oc//7k93tbWptTUVB07dkybN2/WO++8o6KiIuXn59s1e/fuVWpqqu666y7V1tYqJydHjzzyiD7++GO7ZvXq1crNzdX8+fO1bds2jR49WikpKWpqavL3tAEAQAAKsizL6soTHDx4UJGRkdq4caNuv/12eTweXX311Vq1apXuu+8+SVJDQ4NGjBihyspKjR8/Xh999JHuueceHThwQFFRUZKkwsJCzZkzRwcPHlRISIjmzJmjdevWaefOnfa50tPT1dzcrNLSUklSYmKibrrpJi1dulSS1N7ertjYWD322GPKy8s7b+9er1dOp1Mej0cOh8PfHw0AGGNI3rrubqHTvlyU2t0tdBqf8w868/O7y+8R8ng8kqT+/ftLkmpqanT8+HElJyfb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N954oz7//PMu6u7HCQkJ0bXXXitJGjt2rKqrq7V48WK9+eabp9UG4tpJnZvjqS739aupqVFTU5PPFeO2tjZVVFRo6dKlam1tVa9evXzeE0jreDHzO9XlvoanioiI0HXXXXfWfrtr/bhH6DKQlJSk8vJyn31lZWXn/F1/T1BbW6uYmJjubuOMLMtSdna21q5dq/Xr1ysuLu687wmkdbyY+Z2qra1NdXV1l+0anqq9vV2tra1nHAuktTuXc83xVJf7+k2cOFF1dXWqra21t3HjxikjI0O1tbVnDAmBtI4XM79TXe5reKojR47oiy++OGu/3bZ+XXortqG+/fZba/v27db27dstSdarr75qbd++3frqq68sy7KsvLw864EHHrDr//znP1tXXnml9dRTT1m7du2yli1bZvXq1csqLS3trimcV2fn+Nprr1nFxcXWnj17rLq6OmvWrFlWcHCw9Yc//KG7pnBOjz76qOV0Oq0NGzZY33zzjb199913ds0DDzxg5eXl2a83bdpk9e7d23r55ZetXbt2WfPnz7euuOIKq66urjumcE4XM7/nnnvO+vjjj60vvvjCqqmpsdLT062wsDCrvr6+O6ZwTnl5edbGjRutvXv3Wjt27LDy8vKsoKAg65NPPrEsK7DXrkNn5xhI63c2p36rqies48nON79AW8MnnnjC2rBhg7V3715r06ZNVnJysjVw4ECrqanJsqzLZ/0IQl2g46vip27Tp0+3LMuypk+fbt1xxx2nvSchIcEKCQmxfvKTn1hvv/32Je+7Mzo7xxdffNH66U9/aoWFhVn9+/e37rzzTmv9+vXd0/wFONPcJPmsyx133GHPt8N7771nXXfddVZISIh1/fXXW+vWrbu0jV+gi5lfTk6Odc0111ghISFWVFSUNXnyZGvbtm2XvvkL8PDDD1uDBw+2QkJCrKuvvtqaOHGiHRAsK7DXrkNn5xhI63c2pwaFnrCOJzvf/AJtDadOnWrFxMRYISEh1l/8xV9YU6dOtT7//HN7/HJZvyDLsqyuveYEAABweeIeIQAAYCyCEAAAMBZBCAAAGIsgBAAAjEUQAgAAxiIIAQAAYxGEAACAsQhCAADAWAQhAABgLIIQAAAwFkEIAAAYiyAEAACM9f8AQxIzkurvBREAAAAASUVORK5CYII=",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.hist(reviews_df.Score)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Id | \n",
" ProductId | \n",
" UserId | \n",
" ProfileName | \n",
" HelpfulnessNumerator | \n",
" HelpfulnessDenominator | \n",
" Score | \n",
" Time | \n",
" Summary | \n",
" Text | \n",
" sentiment | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" B001E4KFG0 | \n",
" A3SGXH7AUHU8GW | \n",
" delmartian | \n",
" 1 | \n",
" 1 | \n",
" 5 | \n",
" 1303862400 | \n",
" Good Quality Dog Food | \n",
" I have bought several of the Vitality canned d... | \n",
" 2 | \n",
"
\n",
" \n",
" 1 | \n",
" 2 | \n",
" B00813GRG4 | \n",
" A1D87F6ZCVE5NK | \n",
" dll pa | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" 1346976000 | \n",
" Not as Advertised | \n",
" Product arrived labeled as Jumbo Salted Peanut... | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Id ProductId UserId ProfileName HelpfulnessNumerator \\\n",
"0 1 B001E4KFG0 A3SGXH7AUHU8GW delmartian 1 \n",
"1 2 B00813GRG4 A1D87F6ZCVE5NK dll pa 0 \n",
"\n",
" HelpfulnessDenominator Score Time Summary \\\n",
"0 1 5 1303862400 Good Quality Dog Food \n",
"1 0 1 1346976000 Not as Advertised \n",
"\n",
" Text sentiment \n",
"0 I have bought several of the Vitality canned d... 2 \n",
"1 Product arrived labeled as Jumbo Salted Peanut... 0 "
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def get_sentiment(score):\n",
" if score<=2:\n",
" return 0 # negative sentiment\n",
" elif score==3:\n",
" return 1 # neutral sentiment\n",
" else:\n",
" return 2 # positive sentiment\n",
" \n",
"\n",
"reviews_df['sentiment'] = reviews_df.Score.apply(get_sentiment)\n",
"reviews_df.head(2)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkYAAAGzCAYAAADKathbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA+UklEQVR4nO3df1gVdd7/8ReI/BA9B38EeDZUWl2VYjWxEDctizymuVG2aVqSka4GlaL5owztJ0VrmWmSu3tHdeuVed/JbVokacqmhIqaSmK2q2npgUrhBCYizPcPh/l6xDIURO35uK65rj2fz3s+85lzNc5r58wMXoZhGAIAAIC8G3sCAAAAFwqCEQAAgIlgBAAAYCIYAQAAmAhGAAAAJoIRAACAiWAEAABgIhgBAACYCEYAAAAmghGA34SMjAx5eXlp7969jT0VABcwghGAS8pzzz2nzMzMxp7GWXvttdeUkZHR2NMAfrO8+FtpAC4lzZs315133lkrXFRVVamyslJ+fn7y8vJqnMn9CldddZXatGmjNWvWNPZUgN8kn8aeAACcD02aNFGTJk0aexoALnD8lAagwfz4448aP368OnToID8/PwUHB+vmm2/W5s2brZq8vDwNGDBAdrtdzZo10/XXX69169Z5jDNz5kx5eXnpq6++0n333aegoCDZ7XaNGjVKR44cseq8vLxUXl6uN998U15eXvLy8tJ9990n6fT3GHXo0EG33nqr1qxZo549eyogIECRkZHW1Zr33ntPkZGR8vf3V1RUlLZs2VJrHwsLC3XnnXeqVatW8vf3V8+ePbVs2TKPmpptr1u3TsnJybrssssUGBio22+/Xd99953HfAoKCrR27Vpr/jfccMNZfvsAzgbBCECDGTt2rObPn68hQ4botdde06RJkxQQEKCdO3dKklavXq2+ffvK7XZrxowZeu6551RSUqIbb7xRGzZsqDXeXXfdpR9//FGpqam66667lJGRoSeffNLqf/vtt+Xn56c+ffro7bff1ttvv62//vWvvzjHr776SsOHD9fgwYOVmpqqw4cPa/DgwVq4cKEmTJige+65R08++aT+/e9/66677lJ1dbW1bkFBgXr16qWdO3dq6tSpmjVrlgIDAxUXF6elS5fW2tZDDz2kzz//XDNmzNC4ceP0/vvvKykpyeqfPXu2Lr/8cnXp0sWa/+OPP17n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U1P15JNPns1uAwCAS0C9XzF69913tXDhQi1atEibN2/Wm2++qb/97W96880363tT9W7atGkqLS21lv379zf2lAAAwHlU71eMHn30UU2dOlXDhg2TJEVGRurrr79Wamqq4uPjFRoaKkkqKipS27ZtrfWKiorUvXt3SVJoaKiKi4s9xj1+/LgOHTpkrR8aGqqioiKPmprPZ6qp6T+Vn5+f/Pz8zma3AQDAJaDerxgdOXJE3t6ewzZp0kTV1dWSpPDwcIWGhmrVqlVWv9vtVl5enmJiYiRJMTExKikpUX5+vlWzevVqVVdXKzo62qrJyclRZWWlVZOdna3OnTurZcuWVs3J26mpqdkOAADAyeo9GA0ePFjPPvusVqxYob1792rp0qV66aWXdPvtt0uSvLy8NH78eD3zzDNatmyZtm/frpEjR8rhcCguLk6S1LVrVw0YMECjR4/Whg0btG7dOiUlJWnYsGFyOBySpOHDh8vX11cJCQkqKCjQ4sWL9corryg5OdmayyOPPKKsrCzNmjVLhYWFmjlzpjZt2qSkpKT63m0AAHAJqPef0l599VU98cQTevDBB1VcXCyHw6G//vWvSklJsWomT56s8vJyjRkzRiUlJbruuuuUlZUlf39/q2bhwoVKSkrSTTfdJG9vbw0ZMkRz5syx+u12u1auXKnExERFRUWpTZs2SklJ8XjXUe/evbVo0SJNnz5djz32mDp16qTMzExdddVV9b3bAADgElDv7zG6lPAeIwDAxYT3GJ1wQb3HCAAA4GJFMAIAADARjAAAAEwEIwAAABPBCAAAwEQwAgAAMBGMAAAATAQjAAAAE8EIAADARDACAAAwEYwAAABMBCMAAAATwQgAAMBEMAIAADARjAAAAEwEIwAAABPBCAAAwEQwAgAAMBGMAAAATAQjAAAAE8EIAADARDACAAAwEYwAAABMBCMAAAATwQgAAMBEMAIAADARjAAAAEwEIwAAABPBCAAAwEQwAgAAMBGMAAAATAQjAAAAE8EIAADARDACAAAwEYwAAABMDRKMvv32W91zzz1q3bq1AgICFBkZqU2bNln9hmEoJSVFbdu2VUBAgGJjY7V7926PMQ4dOqQRI0bIZrMpKChICQkJKisr86jZtm2b+vTpI39/f4WFhSktLa3WXJYsWaIuXbrI399fkZGR+uCDDxpilwEAwCWg3oPR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CZHL5bJqTg5FNf01fb9U43a79dNPP+nw4cOqqqo6bU1hYeFp552amqonn3zy1+8oAAC4pNT7FaP9+/frkUce0cKFC+Xv71/fwzeoadOmqbS01Fr279/f2FMCAADnUb0Ho/z8fBUXF6tHjx7y8fGRj4+P1q5dqzlz5sjHx0chISE6duyYSkpKPNYrKipSaGioJCk0NLTWU2o1n89UY7PZFBAQoDZt2qhJkyanrakZ41R+fn6y2WweCwAA+O2o92B00003afv27dq6dau19OzZUyNGjLD+d9OmTbVq1SprnV27dmnfvn2KiYmRJMXExGj79u0eT49lZ2fLZrMpIiLCqjl5jJqamjF8fX0VFRXlUVNdXa1Vq1ZZNQAAACer93uMWrRooauuusqjLTAwUK1bt7baExISlJycrFatWslms+mhhx5STEyMevXqJUnq37+/IiIidO+99yotLU0ul0vTp09XYmKi/Pz8JEljx47V3LlzNXnyZN1///1avXq13n33Xa1Y8f/vyE9OTlZ8fLx69uypa6+9VrNnz1Z5eblGjRpV37sNAAAuAQ1y8/WZvPzyy/L29taQIUNUUVEhp9Op1157zepv0qSJli9frnHjxikmJkaBgYGKj4/XU089ZdWEh4drxYoVmjBhgl555RVdfvnl+sc//iGn02nVDB06VN99951SUlLkcrnUvXt3ZWVl1bohGwAAQGrA9xhdCniPEQDgYsJ7jE64IN9jBAAAcLEhGAEAAJgIRgAAACaCEQAAgIlgBAAAYCIYAQAAmAhGAAAAJoIRAACAiWAEAABgIhgBAACYCEYAAAAmghEAAICJYAQAAGAiGAEAAJgIRgAAACaCEQAAgIlgBAAAYCIYAQAAmHwaewK/ZR2mrmjsKdTZ3ucHNfYUAABoMFwxAgAAMBGMAAAATAQjAAAAE8EIAADARDACAAAwEYwAAABMBCMAAAATwQgAAMBEMAIAADARjAAAAEwEIwAAABPBCAAAwEQwAgAAMBGMAAAATAQjAAAAU70Ho9TUVF1zzTVq0aKFgoODFRcXp127dnnUHD16VImJiWrdurWaN2+uIUOGqKioyKNm3759GjRokJo1a6bg4GA9+uijOn78uEfNmjVr1KNHD/n5+aljx47KyMioNZ958+apQ4cO8vf3V3R0tDZs2FDfuwwAAC4R9R6M1q5dq8TERH322WfKzs5WZWWl+vfvr/LycqtmwoQJev/997VkyRKtXbtWBw4c0B133GH1V1VVadCgQTp27JjWr1+vN998UxkZGUpJSbFq9uzZo0GDBqlfv37aunWrxo8frwceeEAfffSRVbN48WIlJydrxowZ2rx5s7p16yan06ni4uL63m0AAHAJ8DIMw2jIDXz33XcKDg7W2rVr1bdvX5WWluqyyy7TokWLdOedd0qSCgsL1bVrV+Xm5qpXr1768MMPdeutt+rAgQMKCQmRJKWnp2vKlCn67rvv5OvrqylTpmjFihXasWOHta1hw4appKREWVlZkqTo6Ghdc801mjt3riSpurpaYWFheuihhzR16tQzzt3tdstut6u0tFQ2m62+vxp1mLqi3sdsaHufH9TYUwAA/AzOKyecy/m7we8xKi0tlSS1atVKkpSfn6/KykrFxsZaNV26dFG7du2Um5srScrNzVVkZKQViiTJ6XTK7XaroKDAqjl5jJqamjGOHTum/Px8jxpvb2/FxsZaNaeqqKiQ2+32WAAAwG9Hgwaj6upqjR8/Xn/605901VVXSZJcLpd8fX0VFBTkURsSEiKXy2XVnByKavpr+n6pxu1266efftL333+vqqqq09bUjHGq1NRU2e12awkLCzu7HQcAABelBg1GiYmJ2rFjh955552G3Ey9mTZtmkpLS61l//79jT0lAABwHvk01MBJSUlavny5cnJydPnll1vtoaGhOnbsmEpKSjyuGhUVFSk0NNSqOfXpsZqn1k6uOfVJtqKiItlsNgUEBKhJkyZq0qTJaWtqxjiVn5+f/Pz8zm6HAQDARa/erxgZhqGkpCQtXbpUq1evVnh4uEd/VFSUmjZtqlWrVlltu3bt0r59+xQTEyNJiomJ0fbt2z2eHsvOzpbNZlNERIRVc/IYNTU1Y/j6+ioqKsqjprq6WqtWrbJqAAAATlbvV4wSExO1aNEi/d///Z9atGhh3c9jt9sVEBAgu92uhIQEJScnq1WrVrLZbHrooYcUExOjXr16SZL69++viIgI3XvvvUpLS5PL5dL06dOVmJhoXdEZO3as5s6dq8mTJ+v+++/X6tWr9e6772rFiv9/R35ycrLi4+PVs2dPXXvttZo9e7bKy8s1atSo+t5tAABwCaj3YDR//nxJ0g033ODR/sYbb+i+++6TJL388svy9vbWkCFDVFFR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08Z46623rP67777bGDp0qGEYhnH06FGjWbNmxvr16z3GSEhIMO6+++5f/jKAC0h9HJuGYRiSjKVLl3rU2O1244033jAMwzD27NljSDK2bNlSa/shISFGRUXFL85z48aNhiTjxx9/NAzDMD755BNDknH48OE67jFwYTn5GKyurjays7MNPz8/Iy4uzpBkrFu3zqr9/vvvjYCAAOPdd981DMMwIiMjjZkzZ5523FOPkQvp3HfJ/620unrhhRd044031kqrn3/+ubZt26aFCxdabYZhqLq6Wnv27NGXX34pHx8f9ejRw+rv2LGjWrZs6THOxx9/rNTUVBUWFsrtduv48eM6evSojhw58qt/R/Xx8dFdd92lhQsX6t5771V5ebn+7//+T++8844k6auvvtKRI0d08803e6x37NgxXX311XX6PoALxdkem127dj2n7UZGRsrX19ejLT8/XzNnztTnn3+uw4cPq7q6WpK0b98+RUREnNP2gAvN8uXL1bx5c1VWVqq6ulrDhw/XHXfcoeXLlys6Otqqa926tTp37qydO3dKkh5++GGNGzdOK1euVGxsrIYMGaI//vGPZz2P83XuIxidom/fvnI6nZo2bZrHpfGysjL99a9/1cMPP1xrnXbt2unLL78849h79+7VrbfeqnHjxunZZ59Vq1at9OmnnyohIUHHjh2r0w1mI0aM0PXXX6/i4mJlZ2crICBAAwYMsOYqSStWrNDvfvc7j/UupD/UB9TF2R6b0ol7jIxT/ixkzeX+MwkMDPT4XF5eLqfTKafTqYULF+qyyy7Tvn375HQ6uTkbl6R+/fpp/vz58vX1lcPhkI+Pj5YtW3bG9R544AE5nU6tWLFCK1euVGpqqmbNmqWHHnrorOdyPs59BKPTeP7559W9e3frRktJ6tGjh7744gt17NjxtOt07txZx48f15YtWxQVFSXpRHo9+Uma/Px8VVdXa9asWfL2PnF717vvvusxjq+vr6qqqs44x969eyssLEyLFy/Whx9+qL/85S9q2rSpJCkiIkJ+fn7at2+frr/++rrtPHABO5tjUzrxZMvBgwetz7t379aRI0eszzVXhH7NsVdYWKgffvhBzz//vMLCwiRJmzZtqvO+ABeLwMDAWsdX165ddfz4ceXl5al3796SpB9++EG7du3yuGoaFhamsWPHauzYsZo2bZr+/ve/nzYYXUjnPoLRaURGRmrEiBGaM2eO1TZlyhT16tVLSUlJeuCBBxQYGKgvvvhC2dnZmjt3rrp06aLY2FiNGTNG8+fPV9OmTTVx4kQFBARYjyN27NhRlZWVevXVVzV48GCtW7dO6enpHtvu0KGDysrKtGrVKnXr1k3NmjX72StJw4cPV3p6ur788kt98sknVnuLFi00adIkTZgwQdXV1bruuutUWlqqdevWyWazKT4+vgG+NaDhnc2xKUk33nij5s6dq5iYGFVVVWnKlCnWP6aSFBwcrICAAGVlZenyyy+Xv7+/9X6VU7Vr106+vr569dVXNXbsWO3YsUNPP/10w+44cIHp1KmTbrvtNo0ePVqvv/66WrRooalTp+p3v/udbrvtNknS+PHjdcstt+gPf/iDDh8+rE8++eRnf9q+oM59v/pupEvYyTeX1dizZ4/h6+trnPwVbdiwwbj55puN5s2bG4GBgcYf//hH49lnn7X6Dxw4YNxyyy2Gn5+f0b59e2PRokVGcHCwkZ6ebtW89NJLRtu2bY2AgADD6XQab731Vq2bNMeOHWu0bt3akGTMmDHDMAzPG9BqfPHFF4Yko3379kZ1dbVHX3V1tTF79myjc+fORtOmTY3LLrvMcDqdxtq1a8/tywLOo/o6Nr/99lujf//+RmBgoNGpUyfjgw8+8Lj52jAM4+9//7sRFhZmeHt7G9dff/3Pbt8wDGPRokVGhw4dDD8/PyMmJsZYtmyZx83b3HyNS8XPHQOGYRiHDh0y7r33XsNut1vntC+//NLqT0pKMn7/+98bfn5+xmWXXWbce++9xvfff28YxumPkQvl3OdlGKf88I5688033ygsLEwff/yxbrrppsaeDgAAOAOCUT1avXq1ysrKFBkZqYMHD2ry5Mn69ttv9eWXX3pctgcAABcm7jGqR5WVlXrsscf0n//8Ry1atFDv3r21cOFCQhEAABcJrhgBAACY+JMgAAAAJoIRAACAiWAEAABgIhgBAACYCEYAAAAmghEAAICJYAQAAGAiGAEAAJj+H9L5thjgcTKkAAAAAElFTkSuQmCC",
"text/plain": [
"