diff --git a/examples/User_and_product_embeddings.ipynb b/examples/User_and_product_embeddings.ipynb index 565ccd2890..877775f797 100644 --- a/examples/User_and_product_embeddings.ipynb +++ b/examples/User_and_product_embeddings.ipynb @@ -1,13 +1,15 @@ { "cells": [ { - "cell_type": "markdown", - "metadata": {}, + "cell_type": "raw", "source": [ "## User and product embeddings\n", "\n", - "We calculate user and product embeddings based on the training set, and evaluate the results on the unseen test set. We will evaluate the results by plotting the user and product similarity versus the review score. The dataset is created in the [Obtain_dataset Notebook](Obtain_dataset.ipynb)." - ] + "We calculate user and product embeddings based on the training set, and evaluate the results on the unseen test set. We will evaluate the results by plotting the user and product similarity versus the review score." + ], + "metadata": { + "collapsed": false + } }, { "cell_type": "markdown", @@ -21,13 +23,16 @@ { "cell_type": "code", "execution_count": 2, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2023-06-21T23:42:37.817424499Z", + "start_time": "2023-06-21T23:42:35.111594233Z" + } + }, "outputs": [ { "data": { - "text/plain": [ - "(24502, 19035)" - ] + "text/plain": "(577, 706)" }, "execution_count": 2, "metadata": {}, @@ -39,12 +44,12 @@ "import numpy as np\n", "from sklearn.model_selection import train_test_split\n", "\n", - "df = pd.read_csv('output/embedded_babbage_similarity_50k.csv', index_col=0) # note that you will need to generate this file to run the code below\n", - "df['babbage_similarity'] = df.babbage_similarity.apply(eval).apply(np.array)\n", + "df = pd.read_csv('data/fine_food_reviews_with_embeddings_1k.csv', index_col=0)\n", + "df['embedding'] = df.embedding.apply(eval).apply(np.array)\n", "X_train, X_test, y_train, y_test = train_test_split(df, df.Score, test_size = 0.2, random_state=42)\n", "\n", - "user_embeddings = X_train.groupby('UserId').babbage_similarity.apply(np.mean)\n", - "prod_embeddings = X_train.groupby('ProductId').babbage_similarity.apply(np.mean)\n", + "user_embeddings = X_train.groupby('UserId').embedding.apply(np.mean)\n", + "prod_embeddings = X_train.groupby('ProductId').embedding.apply(np.mean)\n", "len(user_embeddings), len(prod_embeddings)\n" ] }, @@ -67,7 +72,12 @@ { "cell_type": "code", "execution_count": 3, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2023-06-21T23:42:38.241991598Z", + "start_time": "2023-06-21T23:42:37.819696246Z" + } + }, "outputs": [], "source": [ "from openai.embeddings_utils import cosine_similarity\n", @@ -99,26 +109,27 @@ }, { "cell_type": "code", - "execution_count": 18, - "metadata": {}, + "execution_count": 4, + "metadata": { + "ExecuteTime": { + "end_time": "2023-06-21T23:42:38.452315248Z", + "start_time": "2023-06-21T23:42:38.243944540Z" + } + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Correlation between user&vector similarity percentile metric and review number of stars (score): 22.11%\n" + "Correlation between user & vector similarity percentile metric and review number of stars (score): 17.25%\n" ] }, { "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" + "text/plain": "
", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjMAAAHNCAYAAADrIvo2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA46UlEQVR4nO3de3RU1f3+8SfXyY1wEUgIhLsQ7kgokAIC5RLBgrqwoiABimhbUpDoV8EWwqUVVFSsoqgthkpVvFShRYGIRkVhqbFREAKCCMglJCgEEgiTZP/+gMzPmACZ6Mxkh/drrays2XP22Z8zO5N51jl7ZvyMMUYAAACW8vd1AQAAAD8FYQYAAFiNMAMAAKxGmAEAAFYjzAAAAKsRZgAAgNUIMwAAwGqEGQAAYDXCDAAAsBphBrCAn5+f5s6d6+syar2MjAz5+fkpIyPjotvNnTtXfn5+ysvL805hAC6KMIPLWlpamvz8/Mr9NG7cWIMGDdJbb73l6/J+su3bt2vu3Ln65ptvfF0KqqG0tFT//Oc/1bt3bzVo0EB16tRRu3btlJSUpC1btvi6PKDGCPR1AUBNMH/+fLVq1UrGGOXk5CgtLU0jRozQf/7zH/3617/2dXnVtn37ds2bN08DBw5Uy5YtfV0O3DRt2jQtXbpU1113ncaNG6fAwEDt3LlTb731llq3bq0+ffr4ukSgRiDMAJKGDx+unj17um5PnjxZUVFRevHFF60OM95UXFys0tJSBQcH+7qUWiEnJ0dPPvmkpkyZomeeeabcfUuWLFFubq7XamFuUdNxmQmoRL169RQaGqrAwPJ5v6CgQHfddZdiY2PlcDjUvn17LV68WGVfPn/69GnFxcUpLi5Op0+fdvX77rvv1KRJE/3yl79USUmJJGnixImKiIjQ119/rcTERIWHhysmJkbz589XVb7M/n//+5+GDx+uyMhIRUREaPDgweUuPaSlpek3v/mNJGnQoEGuy2iXWg/yyiuvqGPHjgoJCVHnzp31+uuva+LEieXO7HzzzTfy8/PT4sWLtWTJErVp00YOh0Pbt2+XJL3zzjvq37+/wsPDVa9ePV133XXasWNHuXF+vM8yZetRfsjPz0/Jycn617/+pfbt2yskJETx8fF6//33K/Q/ePCgfvvb3yoqKkoOh0OdOnXS8uXLK2z37bff6vrrr1d4eLgaN26sGTNmqKio6KKPzY/l5eXppptuUmRkpK644gpNnz5dZ86ccd0/YMAAdevWrdK+7du3V2Ji4gX3vXfvXhlj1Ldv3wr3lV0O/aHjx49rxowZatmypRwOh5o1a6akpKRy63qOHj3qCuohISHq1q2bVqxYUW4/l5rb7Oxs3XjjjWrQoIFCQkLUs2dPrVmz5tIPFuBBnJkBJJ04cUJ5eXkyxujo0aN6/PHHderUKd16662ubYwxGjVqlN59911NnjxZ3bt31/r16/V///d/OnjwoB599FGFhoZqxYoV6tu3r/70pz/pkUcekSRNnTpVJ06cUFpamgICAlz7LCkp0TXXXKM+ffrowQcf1Lp165Samqri4mLNnz//gvV++eWX6t+/vyIjI3XPPfcoKChITz/9tAYOHKj33ntPvXv31tVXX61p06bpb3/7m+677z516NBBkly/K7N27VqNGTNGXbp00cKFC/X9999r8uTJatq0aaXbP/fcczpz5oxuv/12ORwONWjQQG+//baGDx+u1q1ba+7cuTp9+rQef/xx9e3bV5999lm1L3e99957WrVqlaZNmyaHw6Enn3xS11xzjT7++GN17txZ0rmzGX369HGFn0aNGumtt97S5MmTlZ+frzvvvFPSudA5ePBg7d+/X9OmTVNMTIyef/55vfPOO27VdNNNN6lly5ZauHChtmzZor/97W/6/vvv9c9//lOSNH78eE2ZMkXbtm1z1ShJn3zyiXbt2qU///nPF9x3ixYtJJ0Ll7/5zW8UFhZ2wW1PnTql/v37a8eOHfrtb3+rHj16KC8vT2vWrNG3336rhg0b6vTp0xo4cKB2796t5ORktWrVSq+88oomTpyo48ePa/r06eX2Wdncfvnll+rbt6+aNm2qmTNnKjw8XC+//LKuv/56vfbaa7rhhhvcevyAn40BLmPPPfeckVThx+FwmLS0tHLbvvHGG0aS+ctf/lKu/cYbbzR+fn5m9+7drrZZs2YZf39/8/7775tXXnnFSDJLliwp12/ChAlGkvnjH//oaistLTXXXnutCQ4ONrm5ua52SSY1NdV1+/rrrzfBwcFmz549rrZDhw6ZOnXqmKuvvtrVVjb2u+++W6XHo0uXLqZZs2bm5MmTrraMjAwjybRo0cLVtnfvXiPJREZGmqNHj5bbR/fu3U3jxo3NsWPHXG2ff/658ff3N0lJSeWO/4f7LJOammp+/K+pbF4+/fRTV9u+fftMSEiIueGGG1xtkydPNk2aNDF5eXnl+t98882mbt26prCw0BhjzJIlS4wk8/LLL7u2KSgoMG3btq3S41VW46hRo8q1/+EPfzCSzOeff26MMeb48eMmJCTE3HvvveW2mzZtmgkPDzenTp266DhJSUlGkqlfv7654YYbzOLFi82OHTsqbDdnzhwjyfz73/+ucF9paWm5Y165cqXrvrNnz5qEhAQTERFh8vPzjTEXn9vBgwebLl26mDNnzpTb/y9/+Utz5ZVXXvRYAE8izOCyVhZmli5datLT0016erpZuXKlueaaa0xgYKB57bXXXNvefvvtJiAgwPVPv8zmzZuNJPP444+72oqKikyXLl1Mq1atTKNGjcyAAQNcLyplysLMzp07y7W/9dZbRpJ58cUXXW0/DDPFxcUmLCzM3HTTTRWO54477jD+/v7mxIkTxhj3wszBgweNJHPfffdVuK9Lly6VhplJkyaV2+7QoUNGkrnnnnsq7CMxMdE0bNiw3PG7E2YSEhIqbDtmzBgTFhZmiouLTWlpqalXr565/fbbTW5ubrmfsnnetGmTMcaYYcOGmSZNmlSYkwcffNCtMLN+/fpy7Tt27DCSzMKFC8vV2Lx5c9dYxcXFJioqyowbN+6iYxhjTElJiXniiSdMjx49yoXtX/3qV+bbb791bdepUyfTrVu3i+5r2LBhJjo62pSUlJRrf/HFF40k85///McYc+G5PXbsmPHz8zMLFiyo8PjOmzfPSCpXE+BNrJkBJPXq1UtDhgzRkCFDNG7cOK1du1YdO3ZUcnKyzp49K0nat2+fYmJiVKdOnXJ9yy7b7Nu3z9UWHBys5cuXa+/evTp58qSee+65CutAJMnf31+tW7cu19auXTtJuuDbqXNzc1VYWKj27dtXuK9Dhw4qLS3VgQMHqn7w55XV37Zt2wr3VdYmSa1atap0HxeqLS8vTwUFBW7XJklXXnllhbZ27dqpsLBQubm5ys3N1fHjx/XMM8+oUaNG5X4mTZok6dyakbI627ZtW2FOKqvbnZratGkjf3//cnOXlJSk/fv364MPPpAkvf3228rJydH48eMvuX9/f39NnTpVmZmZysvL0+rVqzV8+HC98847uvnmm13b7dmzp9xlrMrs27dPV155pfz9y//br+zvV6o4t7t375Yx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" }, + "metadata": {}, "output_type": "display_data" } ], @@ -152,8 +163,9 @@ "hash": "be4b5d5b73a21c599de40d6deb1129796d12dc1cc33a738f7bac13269cfcafe8" }, "kernelspec": { - "display_name": "Python 3.7.3 64-bit ('base': conda)", - "name": "python3" + "name": "python3", + "language": "python", + "display_name": "Python 3 (ipykernel)" }, "language_info": { "codemirror_mode": {