{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Predicting Good Amazon Reviews\n", "\n", "For this demo, we will be using the [Amazon Fine Food Reviews Data](https://www.kaggle.com/snap/amazon-fine-food-reviews). The Amazon Fine Food Reviews dataset consists of 568,454 food reviews Amazon users left up to October 2012.\n", "\n", "This script is based off of the [Craigslist Word2Vec Demo](https://github.com/h2oai/h2o-3/blob/master/h2o-py/demos/word2vec_craigslistjobtitles.ipynb).\n", "\n", "## Import Data\n", "\n", "We will begin by importing our review data into our H2O cluster. In this case, I will be starting up an H2O cluster on my local computer." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import h2o" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Checking whether there is an H2O instance running at http://localhost:54321..... not found.\n", "Attempting to start a local H2O server...\n", " Java Version: java version \"1.7.0_80\"; Java(TM) SE Runtime Environment (build 1.7.0_80-b15); Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)\n", " Starting server from /Users/megankurka/anaconda3/envs/py27/lib/python2.7/site-packages/h2o/backend/bin/h2o.jar\n", " Ice root: /var/folders/gv/w2f3zs_d33l3dt5j67k9nhhr0000gn/T/tmpmt_yBb\n", " JVM stdout: /var/folders/gv/w2f3zs_d33l3dt5j67k9nhhr0000gn/T/tmpmt_yBb/h2o_megankurka_started_from_python.out\n", " JVM stderr: /var/folders/gv/w2f3zs_d33l3dt5j67k9nhhr0000gn/T/tmpmt_yBb/h2o_megankurka_started_from_python.err\n", " Server is running at http://127.0.0.1:54321\n", "Connecting to H2O server at http://127.0.0.1:54321... successful.\n" ] }, { "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", "
H2O cluster uptime:02 secs
H2O cluster version:3.16.0.2
H2O cluster version age:7 days, 16 hours and 40 minutes
H2O cluster name:H2O_from_python_megankurka_xhw01z
H2O cluster total nodes:1
H2O cluster free memory:3.556 Gb
H2O cluster total cores:8
H2O cluster allowed cores:8
H2O cluster status:accepting new members, healthy
H2O connection url:http://127.0.0.1:54321
H2O connection proxy:None
H2O internal security:False
H2O API Extensions:AutoML, XGBoost, Algos, Core V3, Core V4
Python version:2.7.13 final
" ], "text/plain": [ "-------------------------- ----------------------------------------\n", "H2O cluster uptime: 02 secs\n", "H2O cluster version: 3.16.0.2\n", "H2O cluster version age: 7 days, 16 hours and 40 minutes\n", "H2O cluster name: H2O_from_python_megankurka_xhw01z\n", "H2O cluster total nodes: 1\n", "H2O cluster free memory: 3.556 Gb\n", "H2O cluster total cores: 8\n", "H2O cluster allowed cores: 8\n", "H2O cluster status: accepting new members, healthy\n", "H2O connection url: http://127.0.0.1:54321\n", "H2O connection proxy:\n", "H2O internal security: False\n", "H2O API Extensions: AutoML, XGBoost, Algos, Core V3, Core V4\n", "Python version: 2.7.13 final\n", "-------------------------- ----------------------------------------" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "h2o.init(max_mem_size=\"4G\")" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Parse progress: |█████████████████████████████████████████████████████████| 100%\n" ] } ], "source": [ "# Use local data file or download from GitHub\n", "import os\n", "docker_data_path = \"/home/h2o/data/nlp/AmazonReviews.csv\"\n", "if os.path.isfile(docker_data_path):\n", " data_path = docker_data_path\n", "else:\n", " data_path = \"https://s3.amazonaws.com/tomk/h2o-world/megan/AmazonReviews.csv\"\n", "\n", "\n", "# Load data into H2O\n", "reviews = h2o.import_file(data_path)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#' Add Target Column: \"PositiveReview\"\n", "reviews[\"PositiveReview\"] = (reviews[\"Score\"] >= 4).ifelse(\"1\", \"0\")" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
ProductId UserId Summary Score HelpfulnessDenominator IdProfileName HelpfulnessNumerator TimeText PositiveReview
B00141QYSQ A1YS02UZZGRDCTDo Not Buy 1 2 41471Evan Eberhardt 21.34836e+09These are made in China (do not buy ANY pet food from China). Dogswell has been using propylene glycol to soften their treats (what are they thinkng?). Do not purchase or support this company in any way until they clean up their act. And for whatever reason Amazon doesn't allow returns of this item, so I had to toss mine out. Bad business all around on this one. 0
B0089SPEO2 A3JOYNYL458QHPLess lemon and less zing 3 0 28582coleridge 01.32391e+09Everything is ok, except it just isn't as good as it is in the bags. Just considerably more bland -- less lemon and less zing. Boring. 0
B001PMCDK2 A14TTMM0Z03Y2Wmy cat goes crazy for these! 5 0389965Lindsay S. Bradford 01.3106e+09 Best cat treat ever. There isn't anything comparable to the love my cat has for these treats, he snubs away any other kind now.
I know he likes to manipulate me with his cattiness but these treats are my way of manipulating him to come sit on my lap and have some chill time. :)
1
B002Q8JOSI A17UQD2RSSQH5XMy dogs tell me these treats are YUMMY 5 1212536in the dark 11.31613e+09My two Corgis were thoroughly spoiled by my late husband (I spent a year and a half dieting them down a combined total of 25 pounds!)

They are accustomed to the finest of fare, and they absolutely love the Wellness brand of treats.
1
B00176G870 A2F2MZW8EOGH5JYummy to the tummy 5 0115971daemoncycler \"\"When you arrive at a fork in th.. 01.33479e+09We used to have drive down to the specialty pet food store for this product. So glad we discovered Amazon. As far as I can tell it is no more expensive & in some cases less - Prime membership is awesome. Loving Pets treats are some of the best according to my dog. They do not develop that nasty smell like some dog treats do. 1
B001CHFUGY A2M8VROSDPU4JTVery good coffee 5 1434484Officefan \"\"Officefankt 11.27725e+09I really liked this coffee, it was just as good as everyone claimed it was. Strong, bold and flavorful! I would recommend! 1
B0041CIR62 A16I6WJUEBJ1C3okay but not as healthy as it appears 2 1138997doctorsirena \"\"doctorsirena 11.34369e+09I am always looking for healthier, whole grain versions of foods I enjoy. Unfortunately, these Peacock brand noodles are yet another food masquerading as healthy. The product title in big letters on the front says \"\"Brown Rice Vermicelli\"\", making the consumer think \"\"this is made with brown rice, so it should be a healthy choice\"\". But the first indication that it is not is when looking at the fiber content on the nutrition facts - only 0.6g per 2oz serving. Then onto the ingredients list to see why so low... contains brown rice, sago starch and water. The sago starch comes from palms and must not have much (if any) fiber.

The Annie Chun's Maifun Brown Rice Noodles (sold on Amazon and in my local healthy grocer) has become one of my staples and is my frame of reference when comparing to the Peacock brand. The Annie Chun's product is made with 100% whole grain, with ingredients brown rice flour and water. Per 2oz serving, it has 4g fiber and pretty much the same calories and other nutrients as the Peacock brand.

If you do try this Peacock brand noodles and have not used rice noodles before, you will need to seek guidance elsewhere on preparation. As others have pointed out, the Peacock package gives almost no directions on how to prepare the product, aside from a brief mention in the recipes (in the header text it does say that they are \"\"easy-to-cook\"\" but does not say how). It also contains a very strange recipe for rice noodles: Aglio Olio style - this is an Italian recipe for noodles with olive oil/garlic/sprinkled with grated cheese that I think would not be very tasty. The second recipe appears to be for a soup with veggie strips. Neither recipe gives amounts or much direction. In comparison, the Annie Chun's package gives clear, specific directions on rice noodle preparation and two recipes.

I use rice noodles = maifun = rice sticks = sometimes called vermicelli for making the Vietnamese salad \"\"bun tofu\"\", to serve with stir-fried veggies or in lettuce rolls. They can also be used in spring rolls/egg rolls. When cooking with thin rice noodles, be careful not to oversoak/overcook/overmix or they tend to disintegrate. Asian rice noodle vermicelli (maifun) are not the same as Italian vermicelli and are not readily interchangeable. If making an Italian recipe, the best results would be expected from Italian pasta and not maifun.

A few final notes... Both Peacock and Annie Chun's brown rice noodles are gluten free. The Peacock is made in Singapore and the Annie Chun's in Thailand. The Peacock noodles do taste fine (kind of bland), but so do the Annie Chun's. At this time, they are both approximately the same price. Peacock come in an plastic bag with some noodle crushage upon shipping; Annie Chun's are perfect upon removal from their cellophane bag in a box. Overall, I highly recommend the Annie Chun's Maifun as a healthier option over the Peacock brand. On a related note, the Annie Chun's soba and brown rice pad thai noodles are also excellent.

Rating for this product: 2.5 stars rounded down to
0
B001R3BQFW AM50E42AFUVNL Taste great. 5 0126555T. Higley \"\"Tina 01.32356e+09I have tried many different drink mix, this is the best tasting by far. It does not have the after taste of the sweetener and I really like it, it is pretty strong, so I use a big water bottle (20 oz) for one tube, it still a little stronger than I like, but it is just my taste. 1
B005HGAV8I A2I5KDNOESGJ1Hvariety galore 5 1438837TJ 11.33402e+09This is my favorite item to order for my Keurig. There are so many flavors, my finicky palate never gets bored! The only downside is there are probably 5-6 decaf varieties. I don't drink decaf (I REQUIRE copious amounts of caffeine), so they sit on the shelf... 1
B000GFYRHQ A3A7YUR6FS6ZCIBigelow Earl Grey Green Tea 5 0245379Tea Lover 01.17841e+09Tastes like Earl Grey, but it's green tea so it's healthier. 1
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reviews.head()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
PositiveReview Count
0 21791
1 78209
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reviews[\"PositiveReview\"].table()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Train Baseline Model\n", "\n", "We will start by training a baseline model that does not use the review and instead uses other attributes in our dataset." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Find the 80th quantile of time in the dataset\n", "time_split = reviews[\"Time\"].quantile(prob = [0.8])[1]\n", "reviews[\"Train\"] = (reviews[\"Time\"] < time_split).ifelse(\"Yes\", \"No\")" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "train = reviews[reviews[\"Train\"] == \"Yes\"]\n", "test = reviews[reviews[\"Train\"] == \"No\"]" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "gbm Model Build progress: |███████████████████████████████████████████████| 100%\n" ] } ], "source": [ "from h2o.estimators import H2OGradientBoostingEstimator\n", "\n", "predictors = ['ProductId', 'UserId', 'HelpfulnessNumerator', 'HelpfulnessDenominator', 'Time']\n", "response = 'PositiveReview'\n", "\n", "gbm_baseline = H2OGradientBoostingEstimator(stopping_metric = \"AUC\", stopping_tolerance = 0.001,\n", " stopping_rounds = 5, score_tree_interval = 10,\n", " model_id = \"gbm_baseline.hex\"\n", " )\n", "gbm_baseline.train(x = predictors, y = response, \n", " training_frame = train, validation_frame = test\n", " )" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "AUC on Validation Data: 0.616\n" ] } ], "source": [ "print(\"AUC on Validation Data: \" + str(round(gbm_baseline.auc(valid = True), 3)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can see that there is a big room for improvement. Our error is 22%. To improve our model, we will train word embeddings for the review." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Confusion Matrix (Act/Pred) for max f1 @ threshold = 0.459316258112: \n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
01ErrorRate
0384.04276.00.9176 (4276.0/4660.0)
1128.015220.00.0083 (128.0/15348.0)
Total512.019496.00.2201 (4404.0/20008.0)
" ], "text/plain": [ " 0 1 Error Rate\n", "----- --- ----- ------- ----------------\n", "0 384 4276 0.9176 (4276.0/4660.0)\n", "1 128 15220 0.0083 (128.0/15348.0)\n", "Total 512 19496 0.2201 (4404.0/20008.0)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gbm_baseline.confusion_matrix(valid = True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The variable importance plot below shows us that the most important variable is `HelpfulnessNumerator`. Looking at the partial dependency plot for that variable, we see that the more people who find the review helpful, the more likely it is a good review." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6EAAAJTCAYAAAD5dhCMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xm4JVV5L+DfB40KojiAQ3DAGVQUEXDAAZU4BGcxXoco\nzmiixqgBxFw18UaMSVQcMI7g1YizoojBCUVRAQVpFUdEL4Q4i6II0qz7R9WRzWafoenudfo07/s8\n+9lnV61a9dXe1XB+Z62qXa21AAAAQA+bLXcBAAAAXHEIoQAAAHQjhAIAANCNEAoAAEA3QigAAADd\nCKEAAAB0I4QCsN5V1Req6qL10M9ZVfX9tWh/86pqVfWWdd03ALBhCKEAm4CqetcYvp65hLbHjm0f\n1qO2Tc0YsFtV3W25a9nQ1vaPAFcEVbX3+Pl/aoE2c38M+f7U8htU1XOq6hNVdWZVXVBVvxj/TT50\nkf1uUVVPqapPVtVPq+rC8fnYqnpSVa1ah2O6T1W9o6q+V1W/Hfv+n6r6VFUdUFXbz9hm7t/B5OOi\nqvpJVX2squ43Y5tVE23XVNWNF6jp+Im2j7u8xwZsnC73f7AA2Ki8OcljkjwlyRvma1RVOyTZO8k5\nST66Aet5TJItN2D/sBL9bZLnJTkjyWeS/CTJDkkeluTPq+qVrbW/n96oqm6U5Kgkt0/yP0k+Nj5f\nL8lfJPnzJM+sqge31v57qcVU1TWSHJHkwUkuTPL5se/fJ9kuyZ2SHJLkpVW1R2vttBndvD3Jj8ef\nt0yyU5IHJNmnqp7cWnvbjG0uyvA76JOT/O8Zde2Y5G4T7YBNjH/YAJuA1tpxVfXdJHeoql1ba1+b\np+mTk1SSt7fW1nm67AL1/HjxVnCF8+Uk92itHT+5sKpum+SEJC+oqne11r4+sW7rJJ/IEO7eluRv\nWmvnT6y/apI3Jnlcko9X1V0m189nHDn9YJJ7ZQjET2itnTWj3W2T/GOSq8/T1dtaa1+Y2uZRSY5M\n8sKx5mlnJ/lVkidV1Utba2um1j91fP5YkgVHiIGVyXRcgE3Hm8fnp85aWVWbJ3likpbkLRPLt6+q\nF1fVCeMUvAur6uxxiu+OM/r503WXVXWrqnpfVf2sqi6em6I665rQqrpyVT2rqo6pqh+NUxF/OU4v\nvMzUvaltr1FVb6iq/66qP1TVN6vqr6uqlvrmVNVVq+qFVfX1qvpdVZ03HvOjltrHIv2fVVXfr6qr\nV9VrxtfnV9UpVfXgsc2qqvqHcdrjH8b2z5jR19yUzxdV1Z5V9emq+s34OKaqdp2nhmtU1Ssm+v9l\nDVM/773IPu5cVR8f27eqelxVtSTbJ7nZ1JTLyXPn4eN58r2J9/TkqvqbqrrM7xhV9c6xjxtW1TOr\n6htjnf9TVW+sqplBZ2z/2onj+kVVnVhVB8/T9g1VdUZdMt31I1V1x4U+vx5aa++fDqDj8m8kef/4\ncq+p1c/PEEA/n+Qp0wGztfa7JPsl+UqGkdJnL7Gcx2cIoN9O8sBZAXSuttbawzME6KU6dnzeboE2\nb85wfj1gcmFVXWms7fNJvrMW+wRWECEUYNNxRIYpdY+uqq1mrH9Ahl/6PtVa++HE8nsl+fskv0zy\ngSSvTnJikr9McuI4EjLLLcd2N0jyzgy/VP52gfq2G/veOsknk/x7himGd0xyTFXtN892V84wUrN3\nkv8c93PtJK8b+1tUVV0zyReT/J8kf8wwOnNEkusmObKqXrKUfpbgykk+leR+ST6c4X25RZIPVtVe\nGd7fpyX5bJK3ZhhdekNVPWKe/u46tj0/w/H+V5L7JvlCVd116hivleRLueSzfHWSDyXZM8mnquop\n8+zjbhl+4b/SWNM7knwvyUszfJ6/Gn+eexw1se2/JNklQ0B5bZL/Ox7Ta8e+5vNvGT6LU5K8PsPU\n0qdneH8uparulOTrSf4myVlJXpPk3UnOy9RUzqraLcmpSfbPEK4OzTDtfK8kJ1TVfafaz12juMFm\nBayFP47P07XM/VHpZa21NmvDcSTxn8eXT1vi/ub6/ZeljJyu5cyJvcfnkxdo864M036nz8uHJdk2\nl/xRDdgUtdY8PDw8PDaRR5L3ZBjp3G/Guo+M6/adWn7dJFvPaH+HJL9L8tGp5Tcf+2lJ/nGeOr6Q\n5KKpZVdJsv2MttdIcnqSnyW58tS6s8b9fC7JlSaWb5vkh+O6u86o7S1T/bxzXP53U8u3zBCIL06y\n8xLf4y+Mfd1tnlo/PHkcGUJ+yxAMv5xkm4l1t8gQPk6a6mvvifd4/6l1jxiXfztJTSx/67j8DVPt\nd8wQJv+Q5Ibz7OPJ8xzrWUm+v8B7cbMZyzbLEDBakjvO8zn8MMkNJpZvkWE6akuy68TyK2e43rAl\n+csZ+5ru44wMgX36s7lBhuugz5o6j1aNfV803zHO2Ofc+3ZGkpfM8zh0bDPvezfj38DPkqxJcouJ\n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\nUAAAALoRQgEAAOhGCAUAAKAbIRQAAIBuhFAAAAC6EUIBAADoZtVyF8DKsPrsc7PDgUcvdxkAAECS\nMw/ZZ7lLuNyMhAIAANCNEAoAAEA3QigAAADdCKEAAAB0I4QCAADQjRAKAABAN0IoAAAA3QihAAAA\ndCOEAgAA0I0QCgAAQDdCKAAAAN0IoQAAAHQjhAIAANCNEAoAAEA3QigAAADdCKEAAAB0I4QCAADQ\njRAKAABAN0IoAAAA3QihAAAAdCOEAgAA0I0QCgAAQDdCKAAAAN0IoQAAAHQjhAIAANCNEAoAAEA3\nQigAAADdCKEAAAB0I4QCAADQjRAKAABAN0IoAAAA3QihAAAAdLPeQ2hVnTf1er+qet0i2yzaZmz3\n7qo6raqeu0CbvarqY0uv+PIZa764qm43sewbVbXDht73UlTVQ6vq1stdBwAAwKQVMxJaVddLsntr\n7XattVctdz2js5IcvFw7r6rNF1j90CRrFUKratW6VQQAALCwriG0qrarqg9U1UnjY88ZbQ6vqjdW\n1clV9d2qeuC46tgk21fVqVV196o6rqp2G7fZtqrOnNHXS6rqbWPbM6rq2RPrHldVJ479/UdVbT4+\nDh9HNFfPjbhW1bOr6lvjKOyRE7v4WJLbVNWtZuz7vImf962qwyeO77Cq+vJY015jjafPtRnb3beq\nvlRVX6uq91XV1uPyM6vqFVX1tSSPrKqnju/l18f3dququmuSByd55Xh8N6uqXcZ9nlZVH6qqa479\nHVdVr66qk5M8Z0kfJAAAwOW0IULolmPwObWqTk3yjxPrXpPkVa213ZM8Islb5uljhyR7JNknyRur\n6ioZQtUPWmu7tNaOX4t6dkxyv7G/F1fVFlW1U5JHJdmztbZLkjVJHptklyTbt9Zu21rbOcnbxz4O\nTHKH1trtkuw/0ffFSf4lyQvXop4kuWaSuyR5bpKjkrwqyW2S7DyGxW2TvCjJ3q21XZOcnOTvJrb/\nRWtt19bakUk+2FrbvbV2+ySnJ3lya+2Esd8XjO/XD5K8I8kB4zGsTvLiif6u1FrbrbX2b5NFVtXT\nxj8GnLzm9+eu5SECAABc1oYIoeePwWeXMeD974l1eyd53RhOj0py9bkRvinvba1d3Fr7XpIzMgTJ\ny+vo1toFrbWfJ/lpkusmuU+SOyY5aazlPkluOu7rplX12qq6f5LfjH2cluRdVfW4JBdN9f+fSe5c\nVTdZi5o+2lprGcLgT1prq1trFyf5ZoYAfucMU2m/ONb3hCQ3ntj+PRM/37aqjq+q1RmC9G2md1ZV\n2yS5Rmvtc+OiI5LcY57+/qS19qYxnO62+VbbrMXhAQAAzNb7GsDNkty5tfaHyYVVNd2uLfI6GcLg\nXIi+ygL7vGDi5zUZjrmSHNFaO2i6cVXdPsPI6f5J/jLJkzKMyN4jyYOSHFxVO/+psNYuqqp/S3LA\nAjVP1zdX08VT9V081rcmySdba4+e55h+N/Hz4Uke2lr7elXtl2SvebZZyO8WbwIAALDuet+Y6Ngk\nz5p7UVW7zNPukVW1WVXdLMMI5XdmtDkzw2hmkuy7lnV8Osm+VXWdsY5rVdWNx2mwm7XWPpBhOuyu\nVbVZkhu21j6bIWhuk2R69PbwDKO8200s+0lV7TRu/7C1rO/LSfasqpuP9V21qm45T9urJTmnqrbI\nMBI657fjurTWzk3yq6q6+7jur5J8LgAAAJ31DqHPTrLbeHOcb+XS11dO+nGSE5Mck2T/6ZHT0b8m\neUZVnZJk27UporX2rQwh89iqOi3JJ5NcP8n2SY4bp8C+M8lBSTZP8s5xuuspSQ5trf16qr8Lkxya\n5DoTiw/McOOiE5Kcs5b1/SzJfknePdb3pcw/JfkfknwlyReTfHti+ZFJXlBVp4xh/gkZblR0WoZr\nX//xMj0BAABsYDVcmrjxGO8Q+7HW2vuXuxYu8YyDX96OWXO7xRsCAAAb3JmH7LPcJcxymessZ1kx\n3xMKAADAytf7xkSLaq3tt9w1AAAAsGEYCQUAAKAbIRQAAIBuhFAAAAC6EUIBAADoRggFAACgGyEU\nAACAboRQAAAAuhFCAQAA6EYIBQAAoBshFAAAgG6EUAAAALoRQgEAAOhGCAUAAKAbIRQAAIBuhFAA\nAAC6EUIBAADoRggFAACgGyEUAACAboRQAAAAuhFCAQAA6EYIBQAAoBshFAAAgG6EUAAAALoRQgEA\nAOhGCAUAAKAbIRQAAIBuhFAAAAC6EUIBAADoZtVyF8DKsPP22+SwZ+6z3GUAAAArnJFQAAAAuhFC\nAQAA6EYIBQAAoBshFAAAgG6EUAAAALoRQgEAAOhGCAUAAKAbIRQAAIBuhFAAAAC6EUIBAADoRggF\nAACgGyEUAACAboRQAAAAuhFCAQAA6EYIBQAAoBshFAAAgG6EUAAAALpZtdwFsDKsPvvc7HDg0ctd\nBgAAy+TMQ/ZZ7hLYRBgJBQAAoBshFAAAgG6EUAAAALoRQgEAAOhGCAUAAKAbIRQAAIBuhFAAAAC6\nEUIBAADoRggFAACgGyEUAACAboRQAAAAuhFCAQAA6EYIBQAAoBshFAAAgG6EUAAAALoRQgEAAOhG\nCAUAAKAbIRQAAIBuhFAAAAC6EUIBAADoRggFAACgGyEUAACAboRQAAAAuhFCAQAA6EYIBQAAoBsh\nFAAAgG6EUAAAALoRQgEAAOhGCAUAAKAbIRQAAIBuhFAAAAC6EUIBAADoZtEQWlXnTb3er6pet8g2\ni7YZ2727qk6rqucu0GavqvrYYn2tq7Hmn1XVKVX1var6r6q664be7wL17F9Vj7+c2+5QVY9Z3zUB\nAACsq1XLteOqul6S3VtrN1+uGmZ4T2vtb5Kkqu6V5INVda/W2um9C2mtvXEdNt8hyWOS/OdSN6iq\nVa21i9ZhnwAAAItap+m4VbVdVX2gqk4aH3vOaHN4Vb2xqk6uqu9W1QPHVccm2b6qTq2qu1fVcVW1\n27jNtlV15oy+XlJVbxvbnlFVz55Y97iqOnHs7z+qavPxcXhVfaOqVs+NuFbVs6vqW+Mo7JGzjq21\n9tkkb0rytHGbm1XVJ6rqq1V1fFXtOHF8h1bVCWNN+47Lq6peObHvR43L96qqz1XVR8b2h1TVY8fa\nV1fVzSaO9fnjz8dV1SvGNt+tqruPy3cYa/na+JgbuT0kyd3H9+K5VXWVqnr72P8pY8CeG/09qqo+\nk+TTS//kAQAALp+ljIRuWVWnTry+VpKjxp9fk+RVrbUvVNWNkvxXkp1m9LFDkj2S3CzJZ6vq5kke\nnORjrbVdkqSqllrzjknuleRqSb5TVYcluXmSRyXZs7X2x6p6Q5LHJvlmku1ba7cd93GNsY8Dk9yk\ntXbBxLJZvpbk6ePPb0qyf2vte1V1pyRvSHLvcd31k9xtrO2oJO9P8vAkuyS5fZJtk5xUVZ8f298+\nw/v0yyRnJHlLa22PqnpOkmcl+dsZtawa2/xFkhcn2TvJT5P8eWvtD1V1iyTvTrLbeHzPb609cDzu\n5yVprbWdx/B8bFXdcux31yS3a639cnqHVfW0jCH8qX97QHLlBd4pAACAJVhKCD1/Ligmw+hZhqCT\nDEHo1hMB8upVtfWMPt7bWrs4yfeq6owMYe3Xl7Pmo1trFyS5oKp+muS6Se6T5I4Zgl6SbJkhoH00\n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\nSZLUzU/QHv7bNltY1gAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "gbm_baseline.varimp_plot()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "PartialDependencePlot progress: |█████████████████████████████████████████| 100%\n" ] }, { "data": { "image/png": "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\nrm11FWZmZmUqrvEvWzaSBQtaXYWZmVmZimv84El6zMzMBqvIxu+z+s3MzAbHjd/MzKxGimz8HR2t\nrsDMzKxMxTX+zs51bFFc1WZmZkNDcS10zJj1rS7BzMysWMU1fjMzMxs8N34zM7MaceM3MzOrETd+\nMzOzGnHjNzMzqxE3fjMzsxpx4zczM6sRN34zM7MaceM3MzOrETd+MzOzGnHjNzMzqxE3fjMzsxpx\n4zczM6sRN34zM7MaceM3MzOrETd+MzOzGnHjNzMzqxE3fjMzsxpx4zczM6sRN34zM7MaceM3MzOr\nkaY2fkmHS1oi6VFJ53bz+NGSHpB0v6T5kqY2sx4zM7O6G96sF5Y0DPg+cCiwArhb0uyIWFxZ7TZg\ndkSEpL2AWcAezarJzMys7pq5xT8FeDQiHo+I9cBVwNHVFSJiTUREvjsSCMzMzKxpmtn43wA8Wbm/\nIo/9D0nHSHoYuAE4tYn1mJmZ1Z42b3D/n19YOg44PCJOy/c/BOwXEWf0sP6BwBcj4pBuHvs48HGA\nzs7OfWbNmtWUmltlzZo1dHR0tLqM/5t2ywPOVIJ2ywPtl6nd8sDQyjR9+vR7IuJtfa3XtGP8wFPA\nrpX7u+SxbkXE7ZLeKGlsRKzq8tilwKUAEyZMiGnTpjWh3NaZN28e7ZSp3fKAM5Wg3fJA+2VqtzxQ\nZqZmbvEPB/4GHExq+HcDH4iIRZV13gw8lk/umwz8DtgleilK0mpgSVOKbp2xwKo+1ypHu+UBZypB\nu+WB9svUbnlgaGXaLSI6+1qpaVv8EfGypDOAm4BhwGURsUjS6fnxS4BjgQ9L2gD8Bzi+t6afLenP\nroySSJrfTpnaLQ84UwnaLQ+0X6Z2ywNlZmrmrn4i4kbgxi5jl1SWZwIzm1mDmZmZbeYr95mZmdVI\niY3/0lYX0ATtlqnd8oAzlaDd8kD7ZWq3PFBgpqad3GdmZmZDT4lb/GZmZjZIRTX+vib9GYokXSZp\npaSFlbHXSbpF0iP565jKY5/P+ZZIeldrqu6dpF0lzZW0WNIiSZ/J40XmkrSNpLskLch5zs/jReZp\nkDRM0n2S5uT7pedZJunBxqReeaz0TNtLukbSw5IeknRAyZkkTcjfn8btJUkzCs90Zv69sFDSlfn3\nRbF5AIiIIm6kPwl8DHgjsBWwAJjY6rr6UfeBwGRgYWXsG8C5eflcYGZenphzbQ2Mz3mHtTpDN5l2\n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\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline \n", "pdp_helpfulness = gbm_baseline.partial_plot(train, cols = [\"HelpfulnessNumerator\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tokenize Words in Review\n", "\n", "Our first step will be to tokenize the words in the review column. We will do this by creating a function called `tokenize`. This will split the reviews into words and remove any stop words, small words, or words with numbers in them." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Set Stop Words\n", "# The STOP WORDS we are importing are from the nltk package\n", "import pandas as pd\n", "import os\n", "\n", "# Use local data file or download from GitHub\n", "docker_data_path = \"/home/h2o/data/nlp/stopwords.csv\"\n", "if os.path.isfile(docker_data_path):\n", " data_path = docker_data_path\n", "else:\n", " data_path = \"https://raw.githubusercontent.com/h2oai/h2o-tutorials/master/h2o-world-2017/nlp/stopwords.csv\"\n", "\n", "STOP_WORDS = pd.read_csv(data_path, header=0)\n", "STOP_WORDS = list(STOP_WORDS['STOP_WORD'])" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def tokenize(sentences, stop_word = STOP_WORDS):\n", " tokenized = sentences.tokenize(\"\\\\W+\")\n", " tokenized_lower = tokenized.tolower()\n", " tokenized_filtered = tokenized_lower[(tokenized_lower.nchar() >= 2) | (tokenized_lower.isna()),:]\n", " tokenized_words = tokenized_filtered[tokenized_filtered.grep(\"[0-9]\",invert=True,output_logical=True),:]\n", " tokenized_words = tokenized_words[(tokenized_words.isna()) | (~ tokenized_words.isin(STOP_WORDS)),:]\n", " return tokenized_words" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Break reviews into sequence of words\n", "words = tokenize(reviews[\"Text\"])" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
C1
made
china
buy
pet
food
china
dogswell
using
propylene
glycol
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "words.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Train Word2Vec Model\n", "\n", "Now that we've tokenized our words, we can train a word2vec model. We can use the `find_synonms` function to sanity check our word2vec model after training." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Train Word2Vec Model\n", "from h2o.estimators.word2vec import H2OWord2vecEstimator\n", "\n", "# This takes time to run - left commented out\n", "#w2v_model = H2OWord2vecEstimator(vec_size = 100, model_id = \"w2v.hex\")\n", "#w2v_model.train(training_frame=words)\n", "\n", "# Pre-trained model available on s3: https://s3.amazonaws.com/tomk/h2o-world/megan/w2v.hex\n", "w2v_model = h2o.load_model(\"/home/h2o/data/megan/w2v.hex\")" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "OrderedDict([(u'coffe', 0.8426127433776855),\n", " (u'coffees', 0.7995628714561462),\n", " (u'starbucks', 0.7715724110603333),\n", " (u'espresso', 0.7529839873313904),\n", " (u'expresso', 0.7438507080078125)])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sanity check - find synonyms for the word 'coffee'\n", "w2v_model.find_synonyms(\"coffee\", count = 5)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "OrderedDict([(u'rancid', 0.6790934801101685),\n", " (u'unedible', 0.6622459888458252),\n", " (u'moldy', 0.6498295664787292),\n", " (u'expired', 0.6377609968185425),\n", " (u'experation', 0.6255136132240295)])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sanity check - find synonyms for the word 'stale'\n", "w2v_model.find_synonyms(\"stale\", count = 5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have a word embedding for each word in our vocabulary, we will aggregate the words for each review using the `transform` function. This will give us one aggregated word embedding for each review." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Calculate a vector for each review\n", "review_vecs = w2v_model.transform(words, aggregate_method = \"AVERAGE\")" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16 C17 C18 C19 C20 C21 C22 C23 C24 C25 C26 C27 C28 C29 C30 C31 C32 C33 C34 C35 C36 C37 C38 C39 C40 C41 C42 C43 C44 C45 C46 C47 C48 C49 C50 C51 C52 C53 C54 C55 C56 C57 C58 C59 C60 C61 C62 C63 C64 C65 C66 C67 C68 C69 C70 C71 C72 C73 C74 C75 C76 C77 C78 C79 C80 C81 C82 C83 C84 C85 C86 C87 C88 C89 C90 C91 C92 C93 C94 C95 C96 C97 C98 C99 C100
-0.104777 -0.0893138-0.0387239-0.108717 0.099523 0.03715 0.0624399-0.0641551-0.149306 -0.126409 -0.0721444-0.038156 0.116455 -0.0265259 -0.0956882-0.180707 0.0698114 -0.02441810.141046-0.203772 0.089841 0.02053820.286284 0.0915401 -0.0542666-0.0843399 -0.00547226 0.220826 -0.0782427 0.143206 0.000774583 0.00692318 0.0707228 -0.117155 0.20262 0.0173408 0.0366745 -0.0570107-0.0389025 0.169553 -0.138162 -0.0865503-0.176608 0.0379633 -0.00802229-0.168228 -0.114424 -0.136997 -0.0223337 0.150667 -0.177291 0.000573545 0.0569629-0.0718814 0.09043610.0910994-0.0899616 -0.04627840.0711335 0.26617 -0.0549781-0.0361706 -0.142266 -0.0018269 -0.0883591-0.0431854-0.19092 0.094706 -0.0546188 0.0716453-0.0616045 0.236506 -0.000376177-0.016742 0.0376703-0.173074 0.0474426 0.15021 0.0127241-0.0406291 0.0514672 -0.104053 0.0699488 0.0867302-0.0473722 0.0444304 -0.0635966 -0.115021 0.0436944 -0.00760587 0.109057 0.179448 -0.0137882 0.0239373 -0.0461031-0.102609 -0.0214486-0.129548 -0.0294118 -0.209036
-0.150943 -0.18015 0.0778386 0.08721040.0563445-0.24971 0.0175048 0.0280696-0.145466 -0.135046 -0.0253416-0.121022 0.0212608-0.0836051 -0.0258977-0.186726 0.0887503 0.092384 0.190242 0.184348 0.00708532 0.06425520.0441702-0.00202942 0.0220385-0.00437946-0.0803709 0.122429 -0.101544 -0.0196541 -0.0171053 -0.105091 0.0395368 -0.0367961 0.0533833-0.00683283-0.0268374 -0.128483 0.0172005-0.154467 -0.270173 -0.0830348-0.137496 -0.0550283 -0.0101595 -0.012558 0.00959401-0.214333 -0.0928339-0.0827343-0.0985919 0.0518963 0.0749577 0.150248 0.05105520.188824 -0.00526999 0.08812860.153188 0.0382074 -0.0933986-0.032291 0.0610677 0.0871974 -0.0214434-0.155718 -0.134393 0.0726165 -0.121445 0.0336814-0.0385515 0.0968749 0.0911647 -0.0175451 0.196648 -0.118069 0.14769 0.174018 0.176979 -0.00566942 0.0909446 -0.0588353 -0.006992130.121181 -0.0203108-0.00200737-0.00281995-0.165172 -0.0193035 -0.0236158 0.156242 -0.0956303 -0.0634159 0.00229758 0.0288154-0.0148597 0.0351692 0.0786452 -0.0978148 -0.214739
-0.0784339-0.177443 0.142632 -0.06502790.0404134-0.125338 0.0700381-0.0735972-0.107172 -0.00103557-0.0938815-0.0259808-0.0738917-0.0284076 -0.168088 -0.0821494-0.0301608 -0.04340490.147666-0.106854 -0.0290663 0.03010640.296466 -0.0221055 -0.0097013-0.0430679 0.0405026 0.0911821 -0.0533509 0.132035 0.0559074 -0.0556636 -0.0278374 -0.0757753 0.0602816-0.0362208 -0.0349378 -0.118651 0.0400976 0.0448786-0.177866 -0.0899878 0.0200344 0.0137393 -0.055251 0.00808215-0.244367 -0.0610968 0.114113 -0.0938133-0.0838846 0.086218 0.0763978-0.055101 0.161861 0.0677596-0.163391 -0.03692540.161951 0.147807 -0.0508916-0.0593187 0.0267307 0.0513137 -0.0530928-0.150629 -0.114022 -0.0121485 -0.106058 -0.0341939-0.140576 0.0854251 0.0648086 0.0184547 0.187935 -0.08410140.0374503 0.146254 0.024031 -0.14471 -0.0462424 -0.0357163 0.130185 0.137596 0.0922682 0.00303045-0.0148133 -0.0671439-0.131944 -0.0581845 0.177339 -0.0196272 -0.0119319 0.0924081 -0.0405273-0.153547 -0.0561063-0.013661 0.0313455 -0.173018
0.0207442-0.121042 0.205818 0.02718860.131417 0.00648422 0.0235201 0.0599329-0.0792963-0.033467 -0.0964103-0.122847 -0.0147825-0.0390897 -0.209295 -0.18769 -0.0368012 0.079366 0.193885 0.0612297-0.0492691 0.17026 0.187284 0.0582825 -0.0580818-0.0415637 -0.0146321 0.108514 0.0676035 0.136187 0.032809 0.0304932 0.0228237 0.0245993 0.0379505-0.119352 0.0148827 -0.0845919 0.142099 -0.0774023-0.135862 -0.110586 -0.0503919 0.035325 -0.0402904 -0.0338926 -0.199188 -0.0637347 0.0351021-0.071915 -0.134324 -0.00396956 0.0429275-0.00365068 0.188821 0.143321 -0.19803 -0.105554 0.0157162 0.00800393-0.0189451-0.115075 0.0210362 0.127758 -0.143485 -0.181347 -0.08403 -0.0366014 -0.0730024 0.071158 -0.175502 0.163554 0.0369658 0.0145968 0.112552 -0.046148 0.0350732 0.109729 -0.0259048-0.107765 0.0487584 -0.00650312 0.0863861 0.107657 0.014315 -0.00369959 0.0583035 -0.05895 0.0226024 0.0161003 0.0398932 0.0669144 -0.0038533 0.0188122 -0.0172771-0.11414 -0.123933 -0.0714784 -0.0979761 -0.198314
-0.124295 -0.207359 0.0547896-0.03043050.154015 -0.0205962 0.0842201-0.0706606-0.1647 -0.108152 -0.166922 -0.125771 -0.0260786-0.116414 -0.199608 -0.140634 -0.0916514 0.04946370.169558-0.0861265 0.0832132 0.03333960.200909 0.0498794 -0.0240786-0.064085 -0.0565524 0.0912165 -0.00639987 0.123293 -0.0445109 -0.00757608 -0.00151864-0.128118 0.124782 0.0386947 0.031987 -0.136752 0.0398239 0.120508 -0.110199 -0.139788 -0.0994056 0.0862307 -0.0789786 -0.00783531-0.210449 -0.0842535 0.0282057-0.0177935-0.0681635 0.0802795 0.0914081-0.0484351 0.137631 0.0856186-0.00482426-0.01604710.0915147 0.161145 -0.0337171-0.0471576 -0.0049108 0.0588171 -0.110549 -0.10001 -0.148354 0.126402 0.0349634 0.123471 -0.12269 0.114756 0.0349392 0.0251235 0.0982317-0.07835630.0864391 0.163656 -0.0442912-0.132373 0.00547678-0.0919847 0.0815413 0.167716 -0.0377526-0.049083 0.026563 -0.165197 0.0392436 -0.00345092 0.0228621-0.00681942 0.0554516 0.0590008 -0.0512865-0.174769 -0.0755073-0.120474 -0.110672 -0.162697
-0.0497291-0.172739 0.0526745-0.142728 0.0208205-0.101139 0.143159 -0.0821187-0.179903 -0.135258 -0.146455 -0.0688982-0.0514576-0.0955344 -0.0173929-0.16224 0.0854388 0.012287 0.304265 0.0418289-0.000875351 0.202401 0.151498 -0.0721573 -0.0903185-0.0546163 0.0770515 0.0813198 -0.0730298 0.000916828-0.0586318 -0.000736892-0.0893292 -0.105226 0.0503958 0.0178565 0.0753953 -0.164545 0.253618 -0.0652915-0.136067 -0.105342 0.0107835 0.0321385 0.175403 0.0523293 -0.167852 -0.14299 0.0454488 0.0140015 0.130307 0.102035 -0.0396289 0.244186 -0.03104980.230121 -0.0560533 -0.03126740.0940689-0.14132 0.0553402-0.0296196 0.0732143 -0.00124884-0.0622691-0.137447 -0.113088 0.0283403 -0.00681567 0.103245 -0.0336078 0.0141382 0.152744 0.0564579 0.158445 -0.08931260.217361 0.0182976 0.160799 -0.101119 0.12551 0.0114576 0.0421132 0.14134 0.0318897 0.146897 0.00573063-0.0559328-0.134932 0.0284711 0.10148 -0.0223586 -0.215844 0.0564748 -0.0546697 0.0067921-0.182821 0.0758764 -0.0962454 -0.227877
-0.0568149-0.0629231 0.0777229-0.02564290.101506 -0.0389447 -0.0793635-0.0593537-0.182863 -0.0729923 -0.097567 -0.016082 0.0663444 0.0590753 0.0231217-0.142591 -0.0415118 -0.102916 0.127864 0.130538 -0.055481 -0.180058 0.0150547 0.0358391 -0.071178 0.0049319 -0.116692 -0.0971365 -0.0252073 0.226713 0.0642868 0.051884 0.10772 -0.0272336-0.0262592-0.00905795 0.00874825-0.0462225 0.0685229 0.0395826-0.118837 -0.0460167-0.0951681 -0.0622147 0.0620888 0.0548181 -0.0196732 -0.138331 -0.079592 -0.0194914-0.15345 0.114051 -0.0405353 0.127597 0.164525 0.0668319-0.0204733 -0.06463560.181865 0.0436541 -0.072891 -0.00280418-0.0996457 -0.0440742 -0.107828 -0.216291 -0.0736526-0.00610611-0.077607 -0.040397 -0.0932192 0.19004 0.212368 -0.0100296 0.0669379-0.09600820.0811439 0.152575 0.193627 -0.142891 0.119491 0.0180099 0.0768278 0.224927 -0.17332 0.114557 -0.0118137 -0.152121 -0.000920415-0.0246056 0.19368 0.0926417 -0.0566742 0.0758347 0.0157395-0.119214 -0.112142 -0.00329384-0.0954762 -0.299782
-0.0797212-0.173617 0.108163 -0.107503 0.0216342-0.140633 0.0506238-0.0568952-0.150429 -0.121181 -0.0734269-0.0138049-0.0656658-0.0808302 -0.029532 -0.0875219 0.0553002 0.06037570.170599 0.103466 0.0334554 0.09030150.076366 -0.00445736-0.0411916-0.00386698-0.0204134 0.094304 -0.00568415-0.0182749 0.0240352 -0.115381 -0.00511071-0.0473832 0.0573445 0.0520178 0.0527058 -0.0603055 0.0703867-0.140389 -0.211046 -0.0921957-0.0302414 -0.0169181 0.0409367 -0.0538958 -0.145829 -0.180445 0.0426627-0.146734 -0.0118336 0.166017 0.0466829 0.0953235 0.06623680.172648 -0.0419875 0.06460480.0287446 0.0126064 -0.0556719 0.055117 -0.00705287 0.113799 -0.0981764-0.118228 -0.162 0.049193 -0.00897845 0.0112516-0.1093 0.0846343 0.123794 -0.0117476 0.187768 -0.112331 0.0810788 0.157419 0.146585 -0.0548345 0.106937 -0.0115633 0.0721555 0.0592547 0.0510364 0.0982434 -0.0223077 -0.0753102-0.0928342 0.0154012 0.0562391 0.0659295 0.000222585 0.0582499 -0.0134955-0.0377504-0.10022 0.171738 -0.0884614 -0.2505
-0.0732007-0.16155 0.169509 -0.05887090.137003 -0.101893 0.0712918 0.0538054-0.179305 -0.155106 -0.0516661-0.0432677-0.114111 -0.0995693 -0.0274235-0.0690333 0.00642208 0.02301320.226017-0.0343685 0.0156354 0.06414740.178739 -0.0415269 -0.0756107-0.109671 0.00291719 0.154853 0.0332205 0.0859559 -0.0376196 -0.0545254 -0.0172261 -0.0518112-0.0031721 0.00489847-0.031869 -0.068588 0.0180251-0.0965746-0.0793085-0.056131 -0.00547694 0.00476019-0.0106659 -0.140296 -0.199387 -0.116954 0.0926532-0.0951169-0.0162338 0.0793405 0.0164822 0.0691578 0.011476 0.114886 -0.148701 -0.05109240.0433333-0.00145437 0.0693071 0.0793733 0.0181438 -0.0414775 -0.0484972-0.140597 -0.0127534-0.044307 0.033697 0.0898299-0.0787719 0.138622 0.0639041 0.0005664450.179113 -0.117074 0.17331 0.135503 0.0465885-0.00409158 0.0979131 -0.0765709 0.192878 0.117089 0.0656053 0.109539 -0.0299847 -0.0677924-0.0797814 0.0141459 0.110807 0.036249 -0.0577235 0.118674 -0.147738 -0.0263496-0.239927 0.0611369 -0.00924327-0.27347
-0.355958 -0.196831 -0.015794 0.03487750.103654 0.018093 0.156415 -0.015333 -0.0551591-0.483309 -0.181961 -0.240734 -0.0356244-0.00285861 0.166403 -0.0125618 0.0389355 0.16153 0.211653 0.145215 -0.197268 0.214232 0.296793 0.201123 -0.0418813-0.00285069 0.121268 0.00162978 0.267035 0.0195831 -0.0611562 0.182813 -0.11171 -0.161658 -0.0988285-0.187027 0.0139657 0.0544618 0.0748887-0.130175 -0.25456 -0.0119142 0.0753773 0.0693355 -0.087481 -0.218356 -0.163171 -0.19476 -0.0369585-0.135052 0.114671 -0.142072 0.0492515 0.212625 -0.06532820.0682745-0.190866 0.07072190.0442442 0.0213841 0.169321 0.0725536 0.0927394 -0.18728 -0.0528623-0.493245 -0.344943 -0.170402 0.0942355 -0.24907 -0.0165013-0.0617929 0.337667 0.140358 0.179328 0.03742350.253994 -0.0305166 0.157847 0.307999 0.205927 0.16942 0.195855 0.0503341 0.317202 0.170732 0.128417 -0.17811 0.0888614 -0.106913 -0.0785357-0.0674368 -0.0956883 -0.0672496 -0.0158395 0.0901865-0.185872 0.187507 -0.0399294 -0.418681
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "review_vecs" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Add aggregated word embeddings \n", "ext_reviews = reviews.cbind(review_vecs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Train GBM Model to Predict Good Review\n", "\n", "We will train a GBM model with the same parameters as our baseline gbm. This time, however, we will add the aggregated word embeddings as predictors. " ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [], "source": [ "ext_train = ext_reviews[ext_reviews[\"Train\"] == \"Yes\"]\n", "ext_test = ext_reviews[ext_reviews[\"Train\"] == \"No\"]" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "gbm Model Build progress: |███████████████████████████████████████████████| 100%\n" ] } ], "source": [ "predictors = predictors + review_vecs.names\n", "response = 'PositiveReview'\n", "\n", "gbm_embeddings = H2OGradientBoostingEstimator(stopping_metric = \"AUC\", stopping_tolerance = 0.001,\n", " stopping_rounds = 5, score_tree_interval = 10,\n", " model_id = \"gbm_embeddings.hex\"\n", " )\n", "gbm_embeddings.train(x = predictors, y = response, \n", " training_frame = ext_train, validation_frame = ext_test\n", " )" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Baseline AUC: 0.616\n", "With Embeddings AUC: 0.874\n" ] } ], "source": [ "print(\"Baseline AUC: \" + str(round(gbm_baseline.auc(valid = True), 3)))\n", "print(\"With Embeddings AUC: \" + str(round(gbm_embeddings.auc(valid = True), 3)))" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Confusion Matrix (Act/Pred) for max f1 @ threshold = 0.54593742414: \n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
01ErrorRate
02034.02626.00.5635 (2626.0/4660.0)
1551.014797.00.0359 (551.0/15348.0)
Total2585.017423.00.1588 (3177.0/20008.0)
" ], "text/plain": [ " 0 1 Error Rate\n", "----- ---- ----- ------- ----------------\n", "0 2034 2626 0.5635 (2626.0/4660.0)\n", "1 551 14797 0.0359 (551.0/15348.0)\n", "Total 2585 17423 0.1588 (3177.0/20008.0)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gbm_embeddings.confusion_matrix(valid = True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Adding Summary\n", "\n", "We saw that the review column is not the only column with text. We also have a column called `Summary` which summarizes the review. We will add the word embeddings of the summary to see if this improves our model." ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Break summaries into sequence of words\n", "summary_words = tokenize(reviews[\"Summary\"].ascharacter())" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Add aggregated summary word embeddings\n", "summary_vecs = w2v_model.transform(summary_words, aggregate_method = \"AVERAGE\")\n", "summary_vecs.names = [\"summary_\" + s for s in summary_vecs.names]\n", "\n", "ext_reviews = ext_reviews.cbind(summary_vecs)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": true }, "outputs": [], "source": [ "ext_train = ext_reviews[ext_reviews[\"Train\"] == \"Yes\"]\n", "ext_test = ext_reviews[ext_reviews[\"Train\"] == \"No\"]" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "gbm Model Build progress: |███████████████████████████████████████████████| 100%\n" ] } ], "source": [ "predictors = predictors + summary_vecs.names\n", "response = 'PositiveReview'\n", "\n", "gbm_plus_summary = H2OGradientBoostingEstimator(stopping_metric = \"AUC\", stopping_tolerance = 0.001,\n", " stopping_rounds = 5, score_tree_interval = 10,\n", " model_id = \"gbm_plus_summary.hex\"\n", " )\n", "gbm_plus_summary.train(x = predictors, y = response, \n", " training_frame = ext_train, validation_frame = ext_test\n", " )" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Baseline AUC: 0.616\n", "With Embeddings AUC: 0.874\n", "With Summary and Review Embeddings AUC: 0.911\n" ] } ], "source": [ "print(\"Baseline AUC: \" + str(round(gbm_baseline.auc(valid = True), 3)))\n", "print(\"With Embeddings AUC: \" + str(round(gbm_embeddings.auc(valid = True), 3)))\n", "print(\"With Summary and Review Embeddings AUC: \" + str(round(gbm_plus_summary.auc(valid = True), 3)))" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nAAAAhhFCAQAAGEYIBQAAYBghFAAAgGE2zboA5sPWU7fknW/ZOesyAACAOWclFAAAgGGEUAAAAIYR\nQgEAABhGCAUAAGAYIRQAAIBhhFAAAACGEUIBAAAYRggFAABgGCEUAACAYTbNugDmw8LXH8xpb7t+\n1mXAXFi8dOesSwAAOGpZCQUAAGAYIRQAAIBhhFAAAACGEUIBAAAYRggFAABgGCEUAACAYYRQAAAA\nhhFCAQAAGEYIBQAAYBghFAAAgGGEUAAAAIYRQgEAABhGCAUAAGAYIRQAAIBhhFAAAACGEUIBAAAY\nRggFAABgGCF0zlXVD1bVB6vq76vq9qr6ZFWdMR27saq+VVWf2O+c66rqy1V1V1VdU1WbZ1M9AABw\nvBFCjyK1ZN1/J1VVST6a5Jbufm53n53kN5I8Y5pyWZLXH+DU65I8L8nWJE9N8suHVTgAAMA6HXch\ntKq+r6qur6o7p5XAn6mqxao6ZTq+o6pumb7+3ap6X1Xtqqp7q+qnq+oPq2phWmXcPM1brKpLquqO\nqrqtqrZX1aem1ck3T3NOrKqbqupvp/NfNY2fNq1Kvj/JXUl+q6quXFHvm6rqilVu55wku7v7XcsD\n3X1nd++avr4pyUP7n9Tdn+xJkr9O8qxVnqvzp/u57YlHHzy0JxoAAOAAjrsQmuTcJN/o7rO6+4VJ\nblxj/nOTvCTJK5Ncm+Qvu3trkseS7Fwx76vdvS3JriTvTfKaJC9K8nvT8X9Ncl53b89SeLx8WslM\nktOTXNXdL0hyeZKfWrFF9o1JrlmlthcmuX3tWz6w6RqvzyrPQXe/u7t3dPeOE5625cleBgAA4DuO\nxxC6kORlVfWOqnpxd6+1xHdDd++ezjsh+wLbQpLTVsz72Irxz3f3Q939L0ker6qTklSSP6iqLyT5\niySnZt+22Xu7+9Yk6e6Hk9yc5Cer6nlJNnf3wmHc78FcleQzyyunAAAAR9qmWRcwWnffU1Xbk7wi\nycVVdVOSPdkXyL93v1Men87bW1W7py2sSbI33/38Pb5i/PEV48vzXpfk6UnO7u7dVbW44lqP7HfN\nq5P8ZpIvJfnjg9zO3VlacT1kVfU7Uz2/8mTOBwAAeDKOu5XQqnpmkke7+9osfXDP9iSLSc6eprz6\nCF16S5L7pgB6TpLnrDaxuz+f5NlJXpvkAwd5zJuTPKWqzl8eqKozq+rFByukqn45yU8k+bnu3nsI\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "gbm_plus_summary.varimp_plot()" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "PartialDependencePlot progress: |█████████████████████████████████████████| 100%\n" ] }, { "data": { "image/png": "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\nauR/m7PXwC2Wb78AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pdp_word_vecs = gbm_plus_summary.partial_plot(data = ext_train, cols = [\"C43\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can see that a low `C43` is associated with a smaller probability of positive review. Let's see what words have a low `C43` value." ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Get Word Embeddings per Word\n", "unique_words = words.asfactor().unique().ascharacter()\n", "unique_words.col_names = [\"Word\"]\n", "word_embeddings = w2v_model.transform(unique_words, aggregate_method=\"None\")\n", "word_embeddings = unique_words.cbind(word_embeddings)\n", "word_embeddings = word_embeddings[~(word_embeddings[\"C1\"].isna())]" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY8AAAEWCAYAAACe8xtsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGk9JREFUeJzt3X+0XWV95/H3x4CIIiKTmMYEG7RRC7QqZBjsr8GihdFq\ncKalceoQXQxMC1bbmU4bnE51tStT7LK2UguVWmtQK02pSKqiA7TUcUbAa8VC+LGIEkoikAwdGlEK\nAt/54zy3Hi/35p6d3HPP/fF+rXXWefaz97PPs9eGfO7ez/6RqkKSpC6eMuoOSJLmH8NDktSZ4SFJ\n6szwkCR1ZnhIkjozPCRJnRkeWhCSbEty8qj7MUpJXp/kniQPJXnZqPujhc3w0JyXZEeSV06oe1OS\nz49PV9WxVXXdNOtZnaSSHDSkro7au4G3VNVhVfXliTPT89YktyT5ZpKdSf48yQ9MWO6pSW5LsnNC\n/V8n2ZNkb5KvJFk35O3RHGZ4SDNkDoTS9wLb9jH/vcDbgLcCRwIvBD4BvGbCcv8V2DNJ+18EVlXV\n4cA5wEeSrDjQTmt+Mjy0IPQfnSQ5MclY+wv5/iTvaYt9rn0/2E7tvDzJU5L8WpK7k+xOcmmSZ/Wt\n98w274Ek/33C77wzyeVJPpJkL/Cm9ttfSPJgknuTvC/JU/vWV0nOTXJnkm8k+c0kL0jyf1p/t/Qv\nP2EbJ+1rkkOSPAQsAb6S5KuTtF0DnAe8oar+qqoeqapvVdVHq+qCvuWOBt4I/NbEdVTVV6rqkfFJ\n4GDgqMH2kBYaw0ML0XuB97a/kF8AbGn1P9a+j2indr4AvKl9XgE8HzgMeB9AkmOAi4CfBVYAzwJW\nTvitdcDlwBHAR4HHgV8ClgIvB04Bzp3Q5lTgBOAk4FeAS+j9g30UcBzwhim2a9K+tiA4rC3zkqp6\nwSRtTwF2VtWNU6x73O8Dbwcenmxmkk8m+SfgBuA6YGya9WmBMjw0X3yi/TX/YJIH6f2jPpVvA9+X\nZGlVPVRV1+9j2Z8F3lNVX6uqh4DzgfXtFNRPAX9ZVZ+vqkeBX6f3F3e/L1TVJ6rqiap6uKq+VFXX\nV9VjVbUDeD/wrye0+e2q2ltV24BbgP/Zfv8fgauAqQa799XX6fwL4N59LZDk9cCSqrpiqmWq6ieB\nZwKvbv1+YoDf1gJkeGi+OL2qjhj/8OS/5vudRe98/u1JvpjkJ/ex7HOBu/um7wYOApa3efeMz6iq\nbwEPTGh/T/9Ekhe2v87va6ey/ge9o5B+9/eVH55k+jAmt6++TucBekdPk0ryDOC36Y2H7FNVfbuq\nrgJ+IsnrBvhtLUCGhxacqrqzqt4APAd4F3B5+8dxskdIf53eQPO45wGP0fsH/V5g1fiMJIfS+wv+\nu35uwvTFwO3Amnba7O1A9n9rBu7rdK4FViVZO8X8NcBq4H8luQ/4OLCiheDqKdocRO+0oBYhw0ML\nTpI3JlnWTqk82KqfoHcF0RP0xgvGfQz4pSRHJzmM3pHCn1XVY/TGMl6b5IfaIPY7mT4IngnsBR5K\n8mLg52dqu6bp6z5V1Z30TvV9LMnJ7XLcpyVZn2QjvdNnRwEvbZ//SC+UXgrck+TFSf5NkkOTHJzk\njfTGkP5mBrdP84jhoYXoNGBbuwLpvcD6Nh7xLWAT8L/b2MlJwAeBD9O7Eusu4J+AXwBoYxK/AFxG\n7yjkIWA38AhT+2Xg3wPfAP4I+LMZ3K4p+zqgt9K7GOAP6IXqV4HX0xvXeayq7hv/AP8APNGmH6cX\nmu+kt/176F3y+zNV9bczsmWad+LLoKTBtL/2H6R3SuquUfdHGiWPPKR9SPLaJE9vYybvBm4Gdoy2\nV9LoGR7Svq2jN1D9dXqDyuvLw3XJ01aSpO488pAkdTbqB7kNzdKlS2v16tWj7oYkzRtLly7ls5/9\n7Ger6rTpll2w4bF69WrGxnzsjiR1kWTiExEm5WkrSVJnhockqTPDQ5LUmeEhSerM8JAkdWZ4SJI6\nMzwkSZ0ZHpKkzgwPSVJnC/YOc2m+W73xUzO+zh0XvGbG16nFySMPSVJnQw2PJEckuTzJ7UluS/Ly\nJEcmuTrJne372X3Ln59ke5I7kpzaV39CkpvbvAuTTPceaUnSEA37yOO9wGeq6sXAS4DbgI3AtVW1\nBri2TZPkGGA9cCy9d1BflGRJW8/FwNn0Xsazps2XJI3I0MY8kjwL+DHgTQBV9SjwaJJ1wMltsc3A\ndcCv0ntj22VV9QhwV5LtwIlJdgCHV9X1bb2XAqcDVw2r79L+GMYYhTRXDfPI42hgD/AnSb6c5APt\nPdDLq+retsx9wPJWXgnc09d+Z6tb2coT658kyTlJxpKM7dmzZwY3RZLUb5jhcRBwPHBxVb0M+Cbt\nFNW49i7oGXsPblVdUlVrq2rtsmXLZmq1kqQJhhkeO4GdVXVDm76cXpjcn2QFQPve3ebvAo7qa7+q\n1e1q5Yn1kqQRGVp4VNV9wD1JXtSqTgFuBbYCG1rdBuDKVt4KrE9ySJKj6Q2M39hOce1NclK7yurM\nvjaSpBEY9k2CvwB8NMlTga8Bb6YXWFuSnAXcDZwBUFXbkmyhFzCPAedV1eNtPecCHwIOpTdQ7mC5\nJI3QUMOjqm4C1k4y65Qplt8EbJqkfgw4bmZ7J0naX95hLknqzPCQJHVmeEiSOjM8JEmdGR6SpM4M\nD0lSZ4aHJKkzw0OS1JnhIUnqzPCQJHVmeEiSOjM8JEmdGR6SpM4MD0lSZ4aHJKkzw0OS1JnhIUnq\nzPCQJHVmeEiSOjM8JEmdGR6SpM4MD0lSZ4aHJKkzw0OS1JnhIUnqbKjhkWRHkpuT3JRkrNUdmeTq\nJHe272f3LX9+ku1J7khyal/9CW0925NcmCTD7Lckad9m48jjFVX10qpa26Y3AtdW1Rrg2jZNkmOA\n9cCxwGnARUmWtDYXA2cDa9rntFnotyRpCqM4bbUO2NzKm4HT++ovq6pHquouYDtwYpIVwOFVdX1V\nFXBpXxtJ0ggMOzwKuCbJl5Kc0+qWV9W9rXwfsLyVVwL39LXd2epWtvLE+idJck6SsSRje/bsmalt\nkCRNcNCQ1/8jVbUryXOAq5Pc3j+zqipJzdSPVdUlwCUAa9eunbH1SpK+21CPPKpqV/veDVwBnAjc\n305F0b53t8V3AUf1NV/V6na18sR6SdKIDC08kjwjyTPHy8BPALcAW4ENbbENwJWtvBVYn+SQJEfT\nGxi/sZ3i2pvkpHaV1Zl9bSRJIzDM01bLgSvaVbUHAX9aVZ9J8kVgS5KzgLuBMwCqaluSLcCtwGPA\neVX1eFvXucCHgEOBq9pHkjQiQwuPqvoa8JJJ6h8ATpmizSZg0yT1Y8BxM91HSdL+8Q5zSVJnhock\nqTPDQ5LUmeEhSerM8JAkdWZ4SJI6MzwkSZ0ZHpKkzgwPSVJnhockqTPDQ5LUmeEhSerM8JAkdWZ4\nSJI6MzwkSZ0ZHpKkzgwPSVJnhockqTPDQ5LUmeEhSerM8JAkdWZ4SJI6MzwkSZ0ZHpKkzoYeHkmW\nJPlykk+26SOTXJ3kzvb97L5lz0+yPckdSU7tqz8hyc1t3oVJMux+S5KmNhtHHm8Dbuub3ghcW1Vr\ngGvbNEmOAdYDxwKnARclWdLaXAycDaxpn9Nmod+SpCkMNTySrAJeA3ygr3odsLmVNwOn99VfVlWP\nVNVdwHbgxCQrgMOr6vqqKuDSvjaSpBEY9pHH7wG/AjzRV7e8qu5t5fuA5a28Erinb7mdrW5lK0+s\nlySNyNDCI8lPArur6ktTLdOOJGoGf/OcJGNJxvbs2TNTq5UkTTBQeCT5gf1Y9w8Dr0uyA7gM+PEk\nHwHub6eiaN+72/K7gKP62q9qdbtaeWL9k1TVJVW1tqrWLlu2bD+6LEkaxKBHHhcluTHJuUmeNUiD\nqjq/qlZV1Wp6A+F/VVVvBLYCG9piG4ArW3krsD7JIUmOpjcwfmM7xbU3yUntKqsz+9pIkkZgoPCo\nqh8FfpbekcGXkvxpklft529eALwqyZ3AK9s0VbUN2ALcCnwGOK+qHm9tzqU36L4d+Cpw1X7+tiRp\nBhw06IJVdWeSXwPGgAuBl7UjgbdX1cenaXsdcF0rPwCcMsVym4BNk9SPAccN2ldJ0nANOubxg0l+\nl979Gj8OvLaqvr+Vf3eI/ZMkzUGDHnn8Pr3TRm+vqofHK6vq6+1oRJK0iAwaHq8BHh4fg0jyFOBp\nVfWtqvrw0HonSZqTBr3a6hrg0L7pp7c6SdIiNGh4PK2qHhqfaOWnD6dLkqS5btDw+GaS48cnkpwA\nPLyP5SVJC9igYx6/CPx5kq8DAb4H+Jmh9UqSNKcNFB5V9cUkLwZe1KruqKpvD69bkqS5bOCbBIF/\nCaxubY5PQlVdOpReSZLmtIHCI8mHgRcANwHjjwwZf7eGJGmRGfTIYy1wTHuEuiRpkRv0aqtb6A2S\nS5I08JHHUuDWJDcCj4xXVtXrhtIrSdKcNmh4vHOYnZAkzS+DXqr7N0m+F1hTVdckeTqwZLhdkyTN\nVYM+kv1s4HLg/a1qJfCJYXVKkjS3DTpgfh69d5Lvhd6LoYDnDKtTkqS5bdDweKSqHh2fSHIQvfs8\nJEmL0KDh8TdJ3g4c2t5d/ufAXw6vW5KkuWzQ8NgI7AFuBv4T8GnANwhK0iI16NVWTwB/1D6SpEVu\n0Gdb3cUkYxxV9fwZ75Ekac7r8myrcU8Dfho4cua7I0maDwYa86iqB/o+u6rq94DXDLlvkqQ5atDT\nVsf3TT6F3pFIl3eBSJIWkEED4Hf6yo8BO4Az9tUgydOAzwGHtN+5vKrekeRI4M/ovVhqB3BGVf2/\n1uZ84Cx67wx5a1V9ttWfAHwIOJTelV5v8/HwkjQ6g15t9Yr9WPcjwI9X1UNJDgY+n+Qq4N8C11bV\nBUk20rsM+FeTHAOsB44Fngtck+SFVfU4cDFwNnADvfA4DbhqP/okSZoBg562+s/7ml9V75mkroCH\n2uTB7VPAOuDkVr8ZuA741VZ/WVU9AtyVZDtwYpIdwOFVdX3ry6XA6RgekjQyg94kuBb4eXoPRFwJ\n/BxwPPDM9plUkiVJbgJ2A1dX1Q3A8qq6ty1yH7C8lVcC9/Q139n3ezsnqZ/s985JMpZkbM+ePQNu\nmiSpq0HHPFYBx1fVNwCSvBP4VFW9cV+N2imnlyY5ArgiyXET5leSGRu7qKpLgEsA1q5d65iIJA3J\noEcey4FH+6Yf5TtHDNOqqgeBv6Y3VnF/khUA7Xt3W2wXcFRfs1WtblcrT6yXJI3IoOFxKXBjkne2\no44b6I1XTCnJsnbEQZJDgVcBtwNbgQ1tsQ3Ala28FVif5JAkRwNrgBvbKa69SU5KEuDMvjaSpBEY\n9GqrTe1KqR9tVW+uqi9P02wFsDnJEnohtaWqPpnkC8CWJGcBd9Mu+a2qbUm2ALfSuxz4vHbaC+Bc\nvnOp7lU4WC5JI9XlRr+nA3ur6k/aUcXRVXXXVAtX1d8BL5uk/gHglCnabAI2TVI/Bhz35BaSpFEY\n9DW076B3Oe35repg4CPD6pQkaW4bdMzj9cDrgG8CVNXX2cclupKkhW3Q8Hi03fRXAEmeMbwuSZLm\nukHDY0uS9wNHJDkbuAZfDCVJi9agV1u9u727fC/wIuDXq+rqofZMkjRnTRse7VLba9rDEQ0MSdL0\np63avRZPJHnWLPRHkjQPDHqfx0PAzUmupl1xBVBVbx1KryRJc9qg4fHx9pE0j63e+KkZXd+OC3wb\n9WK1z/BI8ryq+vuq2udzrKT5aKb/IZUWk+nGPD4xXkjyF0PuiyRpnpguPNJXfv4wOyJJmj+mC4+a\noixJWsSmGzB/SZK99I5ADm1l2nRV1eFD7Z0kaU7aZ3hU1ZLZ6ogkaf4Y9NlWkiT9M8NDktSZ4SFJ\n6szwkCR1ZnhIkjozPCRJnRkekqTODA9JUmeGhySpM8NDktTZ0MIjyVFJ/jrJrUm2JXlbqz8yydVJ\n7mzfz+5rc36S7UnuSHJqX/0JSW5u8y5Mksl+U5I0O4Z55PEY8F+q6hjgJOC8JMcAG4Frq2oNcG2b\nps1bDxwLnAZclGT82VoXA2cDa9rntCH2W5I0jaGFR1XdW1V/28rfAG4DVgLrgPE3E24GTm/ldcBl\nVfVIVd0FbAdOTLICOLyqrq+qAi7tayNJGoFZGfNIshp4GXADsLyq7m2z7gOWt/JK4J6+Zjtb3cpW\nnlg/2e+ck2QsydiePXtmrP+SpO829PBIchjwF8AvVtXe/nntSGLGXjJVVZdU1dqqWrts2bKZWq0k\naYKhhkeSg+kFx0er6uOt+v52Kor2vbvV7wKO6mu+qtXtauWJ9ZKkERnm1VYB/hi4rare0zdrK7Ch\nlTcAV/bVr09ySJKj6Q2M39hOce1NclJb55l9bSRJIzDda2gPxA8D/wG4OclNre7twAXAliRnAXcD\nZwBU1bYkW4Bb6V2pdV5VPd7anQt8CDgUuKp9JEkjMrTwqKrP03vX+WROmaLNJmDTJPVjwHEz1ztJ\n0oHwDnNJUmeGhySpM8NDktSZ4SFJ6szwkCR1ZnhIkjozPCRJnRkekqTODA9JUmeGhySpM8NDktSZ\n4SFJ6szwkCR1ZnhIkjozPCRJnRkekqTODA9JUmeGhySpM8NDktSZ4SFJ6szwkCR1ZnhIkjozPCRJ\nnRkekqTOhhYeST6YZHeSW/rqjkxydZI72/ez++adn2R7kjuSnNpXf0KSm9u8C5NkWH2WJA1mmEce\nHwJOm1C3Ebi2qtYA17ZpkhwDrAeObW0uSrKktbkYOBtY0z4T1ylJmmVDC4+q+hzwDxOq1wGbW3kz\ncHpf/WVV9UhV3QVsB05MsgI4vKqur6oCLu1rI0kakdke81heVfe28n3A8lZeCdzTt9zOVreylSfW\nTyrJOUnGkozt2bNn5notSfouIxswb0cSNcPrvKSq1lbV2mXLls3kqiVJfWY7PO5vp6Jo37tb/S7g\nqL7lVrW6Xa08sV6SNEKzHR5bgQ2tvAG4sq9+fZJDkhxNb2D8xnaKa2+Sk9pVVmf2tZEkjchBw1px\nko8BJwNLk+wE3gFcAGxJchZwN3AGQFVtS7IFuBV4DDivqh5vqzqX3pVbhwJXtY8kaYSGFh5V9YYp\nZp0yxfKbgE2T1I8Bx81g1yRJB8g7zCVJnQ3tyEOaSas3fmrUXZDUxyMPSVJnhockqTPDQ5LUmWMe\nkvbbTI9F7bjgNTO6Pg2PRx6SpM4MD0lSZ4aHJKkzw0OS1JnhIUnqzPCQJHVmeEiSOjM8JEmdGR6S\npM4MD0lSZ4aHJKkzw0OS1JnhIUnqzPCQJHXmI9k1FL42VlrYPPKQJHVmeEiSOvO0laQ5wzcTzh8e\neUiSOps34ZHktCR3JNmeZOOo+yNJi9m8OG2VZAnwB8CrgJ3AF5NsrapbR9uzhcOroyR1MS/CAzgR\n2F5VXwNIchmwDpgX4eE/zNJoDOP/PcdReuZLeKwE7umb3gn8q4kLJTkHOKdNPpTkjlno26CWAv93\n1J2YJYtlWxfLdsLi2dZptzPvmqWeDN9k2zrwPp4v4TGQqroEuGTU/ZhMkrGqWjvqfsyGxbKti2U7\nYfFs62LZTjjwbZ0vA+a7gKP6ple1OknSCMyX8PgisCbJ0UmeCqwHto64T5K0aM2L01ZV9ViStwCf\nBZYAH6yqbSPuVldz8nTakCyWbV0s2wmLZ1sXy3bCAW5rqmqmOiJJWiTmy2krSdIcYnhIkjozPIYk\nyU8n2ZbkiSRTXg63EB67kuTIJFcnubN9P3uK5XYkuTnJTUnGZruf+2u6fZSeC9v8v0ty/Cj6eaAG\n2M6Tk/xj2383Jfn1UfTzQCX5YJLdSW6ZYv6C2J8w0Lbu/z6tKj9D+ADfD7wIuA5YO8UyS4CvAs8H\nngp8BThm1H3fj239bWBjK28E3jXFcjuApaPub8dtm3YfAa8GrgICnATcMOp+D2k7TwY+Oeq+zsC2\n/hhwPHDLFPPn/f7ssK37vU898hiSqrqtqqa7w/2fH7tSVY8C449dmW/WAZtbeTNw+gj7MtMG2Ufr\ngEur53rgiCQrZrujB2ih/Lc4rar6HPAP+1hkIexPYKBt3W+Gx2hN9tiVlSPqy4FYXlX3tvJ9wPIp\nlivgmiRfao+SmQ8G2UcLYT8Oug0/1E7lXJXk2Nnp2qxbCPuzi/3ap/PiPo+5Ksk1wPdMMuu/VdWV\ns92fYdrXtvZPVFUlmer67x+pql1JngNcneT29peR5oe/BZ5XVQ8leTXwCWDNiPukA7Pf+9TwOABV\n9coDXMW8eezKvrY1yf1JVlTVve3wfvcU69jVvncnuYLeqZK5Hh6D7KN5sx/3YdptqKq9feVPJ7ko\nydKqWmgPTFwI+3MgB7JPPW01WgvlsStbgQ2tvAF40lFXkmckeeZ4GfgJYNIrQOaYQfbRVuDMdpXO\nScA/9p3Gmy+m3c4k35MkrXwivX8/Hpj1ng7fQtifAzmQfeqRx5AkeT3w+8Ay4FNJbqqqU5M8F/hA\nVb26FsZjVwAuALYkOQu4GzgDoH9b6Y2DXNH+Oz0I+NOq+syI+juwqfZRkp9r8/8Q+DS9K3S2A98C\n3jyq/u6vAbfzp4CfT/IY8DCwvtolO/NJko/Ru8poaZKdwDuAg2Hh7M9xA2zrfu9TH08iSerM01aS\npM4MD0lSZ4aHJKkzw0OS1JnhIUnqzPCQZli7dv6yJF9tj2L5dJIXtnmHJ9mZ5H19y/9xkq+0R0Rc\nnuSw0fVeGozhIc2gdsPVFcB1VfWCqjoBOJ/vPO/rN3nyXfW/VFUvqaofBP4eeMusdVjaT94kKM2s\nVwDfbjdgAVBVXwFIcgK9EPkMsLZv/t42P8Ch9B4gKc1pHnlIM+s44EsTK5M8Bfgd4Jcna5TkT+g9\nkfjF9J5MIM1phoc0O84FPl1VOyebWVVvBp4L3Ab8zGx2TNofhoc0s7YBJ0xS/3LgLUl2AO+m9+C9\nC/oXqKrH6b2E6d8Nu5PSgTI8pJn1V8Ah/S+7SvKDwB9W1fOqajW9U1eXVtXG9uTW72vLBXgdcPsI\n+i11YnhIM6g9kfT1wCvbpbrbgN+iN54xmQCbk9wM3AysAH5jVjorHQCfqitJ6swjD0lSZ4aHJKkz\nw0OS1JnhIUnqzPCQJHVmeEiSOjM8JEmd/X+AV2OiGCrotwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "word_embeddings[\"C43\"].hist()" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Word C43
answered -1.22806
contacted -1.27295
credit -1.23765
email -1.3267
emails -1.30889
expiration-1.10804
expired -1.16901
phone -1.18508
refund -1.32436
refunded -1.26201
rep -1.4429
responded -1.10283
salmonella-1.22183
similac -1.16961
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "low_c43_words = word_embeddings[word_embeddings[\"C43\"] < -1.1]\n", "low_c43_words[[\"Word\", \"C43\"]].head(15)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The words with low `C43` like `contacted`, `answered`, `emails`, `phone` and `refund` all seem to be related to contacting for a refund. Words like: `salmonella` are obviously an indicator of a negative review for a food product." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Predict on New Reviews\n", "\n", "Now that we've built a model we are satisifed with, we will see how the model performs on new reviews.\n", "\n", "* *\"The taste is great! especially when you cook it with some vegetable and egg. I like it very much, though it's more expensive than the other noodles\"*\n", "\n", "\n", "* *\"Quite tasteless and they make you order so many. I am stuck with 12 bags of this tasteless stuff. I am not ordering large amounts of anything from Amazon again. So often I don't like it and I am stuck with so much on hand.\"*" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def predict(reviews, w2v, gbm):\n", " \n", " words = tokenize(reviews[\"Text\"].ascharacter())\n", " reviews_vec = w2v.transform(words, aggregate_method=\"AVERAGE\")\n", " \n", " summary_words = tokenize(reviews[\"Summary\"].ascharacter())\n", " summary_vec = w2v.transform(summary_words, aggregate_method=\"AVERAGE\")\n", " \n", " model_data = reviews.cbind(reviews_vec).cbind(summary_vec)\n", " print(gbm.predict(model_data))" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Parse progress: |█████████████████████████████████████████████████████████| 100%\n" ] } ], "source": [ "good_review = h2o.H2OFrame([[\"B000EQT574\", \"AISQLBDGS2KXR\", 1, 1, 1263340800, \n", " \"Delicious\",\n", " \"These chips are delicious. Salty sweet with a hint of spice. I have no idea how Tamari is supposed to taste, but these chips are awesome. I just finished an entire bag in one day!\"]])\n", "\n", "good_review.col_names = [\"ProductId\",\"UserId\",\"HelpfulnessNumerator\",\"HelpfulnessDenominator\",\"Time\",\"Summary\",\"Text\"]" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Parse progress: |█████████████████████████████████████████████████████████| 100%\n" ] } ], "source": [ "bad_review = h2o.H2OFrame([[\"B003BJZMSM\", \"A2JBZHQVQF7MV0\", 1, 2, 1274832000, \n", " \"Pretty tasteless\",\n", " \"Quite tasteless and they make you order so many. I am stuck with 12 bags of this tasteless stuff. I am not ordering large amounts of anything from Amazon again. So often I don't like it and I am stuck with so much on hand.\"]])\n", "\n", "bad_review.col_names = [\"ProductId\",\"UserId\",\"HelpfulnessNumerator\",\"HelpfulnessDenominator\",\"Time\",\"Summary\",\"Text\"]" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Good Review: \n", "gbm prediction progress: |████████████████████████████████████████████████| 100%\n" ] }, { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
predict p0 p1
10.135510.86449
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "None\n", "Bad Review: \n", "gbm prediction progress: |████████████████████████████████████████████████| 100%\n" ] }, { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
predict p0 p1
00.935530.0644696
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "None\n" ] } ], "source": [ "# Predict!\n", "print(\"Good Review: \")\n", "print(predict(good_review, w2v_model, gbm_embeddings))\n", "\n", "print(\"Bad Review: \")\n", "print(predict(bad_review, w2v_model, gbm_embeddings))" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "H2O session _sid_813b closed.\n" ] } ], "source": [ "h2o.cluster().shutdown()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.13" } }, "nbformat": 4, "nbformat_minor": 2 }