From 42592fed4aad3f9c01f5f15a80a8ec82859c19ab Mon Sep 17 00:00:00 2001 From: Michelle Casbon Date: Tue, 11 Sep 2018 14:17:02 -0400 Subject: [PATCH] Update demo script & add notebook (#248) * Update demo script Update demo script to include deploy script and notebook created by @drscott173 Simplify by removing unnecessary commands Use default namespace instead of kubeflow * Add yelp notebook readme * Add cluster creation commands Add instructions for highlighting changes resulting from each command --- demos/yelp_demo/README.md | 238 ++-- demos/yelp_demo/demo_setup/README.md | 14 - .../demo_setup/kubeflow-demo-base.env | 4 +- demos/yelp_demo/notebooks/README.md | 39 + demos/yelp_demo/notebooks/noise.png | Bin 0 -> 37325 bytes demos/yelp_demo/notebooks/semantics.png | Bin 0 -> 113153 bytes demos/yelp_demo/notebooks/signal.png | Bin 0 -> 37388 bytes demos/yelp_demo/notebooks/yelp.ipynb | 1248 +++++++++++++++++ 8 files changed, 1419 insertions(+), 124 deletions(-) create mode 100644 demos/yelp_demo/notebooks/README.md create mode 100644 demos/yelp_demo/notebooks/noise.png create mode 100644 demos/yelp_demo/notebooks/semantics.png create mode 100644 demos/yelp_demo/notebooks/signal.png create mode 100644 demos/yelp_demo/notebooks/yelp.ipynb diff --git a/demos/yelp_demo/README.md b/demos/yelp_demo/README.md index 42e0cf01..73e97363 100644 --- a/demos/yelp_demo/README.md +++ b/demos/yelp_demo/README.md @@ -6,75 +6,77 @@ presentation to public audiences. The base demo includes the following steps: 1. [Install kubeflow locally](#1-install-kubeflow-locally) -1. [Bring up a notebook](#2-bring-up-a-notebook) -1. [Run training locally](#3-run-training-locally) -1. [Install kubeflow on GKE](#4-install-kubeflow-on-gke) -1. [Run training on GKE](#5-run-training-on-gke) -1. [Create the serving and UI components](#6-create-the-serving-and-ui-components) +1. [Run training locally](#2-run-training-locally) +1. [Install kubeflow on GKE](#3-install-kubeflow-on-gke) +1. [Run training on GKE](#4-run-training-on-gke) +1. [Create the serving and UI components](#5-create-the-serving-and-ui-components) +1. [Bring up a notebook](#6-bring-up-a-notebook) ## Important! Pre-work -Before completing any of the below steps, follow the instructions in [./demo_setup](./demo_setup/README.md) to prepare for demonstrating Kubeflow. +Before completing any of the below steps, follow the instructions in +[./demo_setup](https://github.com/kubeflow/examples/blob/master/demos/yelp_demo/demo_setup/README.md) +to prepare for demonstrating Kubeflow: + +* [Create a minikube cluster](https://github.com/kubeflow/examples/blob/master/demos/yelp_demo/demo_setup/README.md#4-create-a-minikube-cluster) +* [Create a GKE cluster](https://github.com/kubeflow/examples/blob/master/demos/yelp_demo/demo_setup/README.md#5-create-a-gke-cluster) + +## 1. Create clusters + +[Setup your environment](https://github.com/kubeflow/examples/tree/master/demos/yelp_demo/demo_setup#2-set-environment-variables) +or source the base file: + +``` +cd demo_setup +source kubeflow-demo-base.env +``` + +Create a minikube cluster: + +``` +minikube start \ + --cpus 4 \ + --memory 8096 \ + --disk-size=50g \ + --kubernetes-version v1.10.6 +``` + +Create a GKE cluster with access to GPUs and TPUs: + +``` +gcloud beta container clusters create ${CLUSTER} \ + --project ${DEMO_PROJECT} \ + --zone ${ZONE} \ + --accelerator type=nvidia-tesla-k80,count=2 \ + --cluster-version 1.10.6-gke.2 \ + --enable-ip-alias \ + --enable-tpu \ + --machine-type n1-highmem-8 \ + --scopes cloud-platform,compute-rw,storage-rw \ + --verbosity error +``` ## 1. Install kubeflow locally -Initialize a ksonnet app: +Run the following script to create a ksonnet app for Kubeflow and deploy it: ``` -ks init kubeflow -cd kubeflow +export KUBEFLOW_VERSION=0.2.5 +curl https://raw.githubusercontent.com/kubeflow/kubeflow/v${KUBEFLOW_VERSION}/scripts/deploy.sh | bash ``` -Install packages and generate core components: +View the installed components: ``` -ks registry add kubeflow github.com/kubeflow/kubeflow/tree/${VERSION}/kubeflow -ks pkg install kubeflow/core@${VERSION} -ks pkg install kubeflow/tf-serving@${VERSION} -ks pkg install kubeflow/tf-job@${VERSION} -ks generate core kubeflow-core --name=kubeflow-core +kubectl get pod ``` -Create the minikube environment and set the cloud parameter: - -``` -ks env add minikube --namespace=${NAMESPACE} -ks param set --env minikube kubeflow-core \ - cloud "minikube" -``` - -Apply kubeflow to the cluster: - -``` -ks apply minikube -c kubeflow-core -``` - -## 2. Bring up a notebook - -Connect to Jupyterhub by forwarding a port and opening a browser to -[localhost:8000](localhost:8000): - -``` -kubectl port-forward tf-hub-0 8000:8000 -``` - -Spawn a new pod with this image: - -``` -gcr.io/kubeflow-dev/issue-summarization-notebook-cpu:latest -``` - -Once the notebook environment is -available, open a new terminal and upload this [Simple ML Model -notebook](notebooks/simple_ml_model.ipynb). - -Execute the notebook to show that it works. - -## 3. Run training locally +## 2. Run training locally Retrieve the following files for the t2tcpu & t2ttpu jobs: ``` +cd kubeflow_ks_app cp ${REPO_PATH}/demo/components/t2t[ct]pu.* components cp ${REPO_PATH}/demo/components/params.* components ``` @@ -82,43 +84,42 @@ cp ${REPO_PATH}/demo/components/params.* components Set parameter values for training: ``` -ks param set --env minikube t2tcpu \ +ks param set --env default t2tcpu \ cloud "minikube" -ks param set --env minikube t2tcpu \ - dataDir ${GCS_TRAINING_DATA_DIR} -ks param set --env minikube t2tcpu \ - outputGCSPath ${GCS_TRAINING_OUTPUT_DIR_LOCAL} -ks param set --env minikube t2tcpu \ - cpuImage gcr.io/${DEMO_PROJECT}/kubeflow-yelp-demo-cpu:latest -ks param set --env minikube t2tcpu \ +ks param set --env default t2tcpu \ workers 2 ``` Generate manifests and apply to cluster: ``` -ks apply minikube -c t2tcpu +ks apply default -c t2tcpu ``` -## 4. Install kubeflow on GKE +View the new training pod and wait until it has a `Running` status: + +``` +kubectl get pod +``` + +View the logs to watch training commence: + +``` +kubectl logs -f t2tcpu-master-0 | grep INFO:tensorflow +``` + +## 3. Install kubeflow on GKE Switch to a GKE cluster: ``` -kubectl config use-context gke +kubectl config use gke ``` Create an environment: ``` -ks env add gke --namespace=${NAMESPACE} -``` - -Set parameter values for kubeflow-core: - -``` -ks param set --env gke kubeflow-core \ - cloud "gke" +ks env add gke ``` Install kubeflow on the cluster: @@ -127,15 +128,19 @@ Install kubeflow on the cluster: ks apply gke -c kubeflow-core ``` -## 5. Run training on GKE +View the installed components: + +``` +kubectl get pod +``` + +## 4. Run training on GKE ### Distributed CPU training Set parameter values for training: ``` -ks param set --env gke t2tcpu \ - dataDir ${GCS_TRAINING_DATA_DIR} ks param set --env gke t2tcpu \ outputGCSPath ${GCS_TRAINING_OUTPUT_DIR_CPU} ``` @@ -147,19 +152,16 @@ above 1000. ks apply gke -c t2tcpu ``` -#### Export the trained model - -This will export the model to an `export/` directory in output_dir. +View the new training pod and wait until it has a `Running` status: ``` -cd ../yelp -t2t-exporter \ - --t2t_usr_dir=${USR_DIR} \ - --model=${MODEL} \ - --hparams_set=${HPARAMS_SET} \ - --problem=${PROBLEM} \ - --data_dir=${GCS_TRAINING_DATA_DIR} \ - --output_dir=${GCS_TRAINING_OUTPUT_DIR_CPU} +kubectl get pod +``` + +View the logs to watch training commence: + +``` +kubectl logs -f t2tcpu-master-0 | grep INFO:tensorflow ``` ### Distributed TPU training @@ -167,8 +169,6 @@ t2t-exporter \ Set parameter values for training: ``` -ks param set --env gke t2ttpu \ - dataDir ${GCS_TRAINING_DATA_DIR} ks param set --env gke t2ttpu \ outputGCSPath ${GCS_TRAINING_OUTPUT_DIR_TPU} ``` @@ -180,22 +180,21 @@ above 1000. ks apply gke -c t2ttpu ``` -#### Export the trained model - -This will export the model to an `export/` directory in output_dir. +Verify that a TPU is being provisioned by viewing pod status. It should remain +in Pending state for 3-4 minutes with the message +`Creating Cloud TPUs for pod default/t2ttpu-master-0`. ``` -cd ../yelp -t2t-exporter \ - --t2t_usr_dir=${USR_DIR} \ - --model=${MODEL} \ - --hparams_set=${HPARAMS_SET} \ - --problem=${PROBLEM} \ - --data_dir=${GCS_TRAINING_DATA_DIR} \ - --output_dir=${GCS_TRAINING_OUTPUT_DIR_TPU} +kubectl describe pod t2ttpu-master-0 ``` -## 6. Create the serving and UI components +Once it has `Running` status, view the logs to watch training commence: + +``` +kubectl logs -f t2ttpu-master-0 | grep INFO:tensorflow +``` + +## 5. Create the serving and UI components Retrieve the following files for the serving & UI components: @@ -204,14 +203,6 @@ cp ${REPO_PATH}/demo/components/serving.* components cp ${REPO_PATH}/demo/components/ui.* components ``` - -Set parameter values for serving: - -``` -ks param set --env gke serving \ - modelPath ${GCS_TRAINING_OUTPUT_DIR_TPU}/export/Servo -``` - Create the serving and UI components: ``` @@ -228,8 +219,8 @@ UI_POD=$(kubectl get po -l app=kubeflow-demo-ui | \ kubectl port-forward ${UI_POD} 8080:80 ``` -Optional: Setup an SSH tunnel from your local laptop into the GCE instance connecting to -GKE: +Optional: If necessary, setup an SSH tunnel from your local laptop into the +compute instance connecting to GKE: ``` ssh $HOST -L 8080:localhost:8080 @@ -240,4 +231,35 @@ To show the naive version, navigate to [localhost:8080](localhost:8080) from a b To show the ML version, navigate to [localhost:8080/kubeflow](localhost:8080/kubeflow) from a browser. +## 6. Bring up a notebook + +Connect to the Central Dashboard by forwarding a port to one of the ambassador +pods: + +``` +AMBASSADOR_POD=$(kubectl get po -l service=ambassador | \ + grep ambassador | \ + head -n 1 | \ + cut -d " " -f 1 \ +) +kubectl port-forward ${AMBASSADOR_POD} 8081:80 +``` + +Open a browser and connect to [localhost:8081](localhost:8081). +Show the TF-job dashboard, then click on Jupyterhub. +Log in with any username and password combination and wait until the page +refreshes. Spawn a new pod with these resource requirements: + +| Resource | Value | +| --------------------- | -------------------------------------------------------------------- | +| Image | `gcr.io/kubeflow-images-public/tensorflow-1.7.0-notebook-gpu:v0.2.1` | +| CPU | 2 | +| Memory | 48G | +| Extra Resource Limits | `{"nvidia.com/gpu":2}` | + +Once the notebook environment is +available, open a new terminal and upload this +[Yelp notebook](notebooks/yelp.ipynb). + +Execute the notebook to show that it works. diff --git a/demos/yelp_demo/demo_setup/README.md b/demos/yelp_demo/demo_setup/README.md index c47fff5a..a467c10e 100644 --- a/demos/yelp_demo/demo_setup/README.md +++ b/demos/yelp_demo/demo_setup/README.md @@ -340,20 +340,6 @@ minikube start \ --kubernetes-version v1.10.6 ``` -RBAC permissions allow your user to install kubeflow components on the cluster. - -``` -kubectl create clusterrolebinding cluster-admin-binding-${USER} \ - --clusterrole cluster-admin \ - --user $(gcloud config get-value account) -./create_context.sh minikube ${NAMESPACE} -``` - -Create a namespace: -``` -kubectl create namespace ${NAMESPACE} -``` - ### Create k8s secrets Since our project is private, we need to provide access to resources via the use diff --git a/demos/yelp_demo/demo_setup/kubeflow-demo-base.env b/demos/yelp_demo/demo_setup/kubeflow-demo-base.env index 05579299..e211f780 100644 --- a/demos/yelp_demo/demo_setup/kubeflow-demo-base.env +++ b/demos/yelp_demo/demo_setup/kubeflow-demo-base.env @@ -1,12 +1,12 @@ export DEMO_PROJECT=kubeflow-demo-base -export NAMESPACE=kubeflow +export NAMESPACE=default export ZONE=us-central1-a export CLUSTER=demo # Makefile uses project. export PROJECT=${DEMO_PROJECT} export ENV=gke export SVC_ACCT=minikube -export VERSION=v0.2.5 +export KUBEFLOW_VERSION=v0.2.5 export REPO_PATH=${HOME}/repos/kubeflow/examples/demos/yelp_demo export MAX_CASES=1000000 diff --git a/demos/yelp_demo/notebooks/README.md b/demos/yelp_demo/notebooks/README.md new file mode 100644 index 00000000..560b44de --- /dev/null +++ b/demos/yelp_demo/notebooks/README.md @@ -0,0 +1,39 @@ +## Yelp Sentiment Notebook Demo +### yelp.ipynb + +We're trying to create a neural network that detects sentiment, and +predicts whether a Yelp review (all 5 million of them) is positive or negative. +Reviews come from words. Maybe we can look at the set of words in a review and make a guess from that? + +Well let's see. How frequently do some words occur? Let's grab a sample of 100k positive and +negative reviews, 200k total. + +![Lots of noise](noise.png) + +The chart on the left shows that most words from 200,000 +reviews are indistinguishable en masse, +so that's why naive approaches may take a long time to converge. +One approach is to look at words that occur more frequently. +When we cut off words that occur less than 50 times, we get +the chart on the right. We see the beginning of a distro, but it's weak. +We have to clean up the signal for our network +using a hypothesis of what's important. + +![Signal](signal.png) + +So we calculate a ratio, how many words appear +in positive vs. negative reviews? A value of 0 means +all negative reviews, 1.0 means equal distribution between +positive and negative, greater than 1.0 means more positive than +negative. Neural networks like values between -1 and 1 centered at 0. +Take the log(x)! log(1) = 0, log(1/x) = negative, log(n) = small. +Then lets cut out those that don't help much, the area around 0. +Voila. A signal around 0, on the right! Now let's train that on a simple network. + +![Results](semantics.png) + +The network converges in a few minutes with 94% accuracy. +The weights on the input nodes are a vector representation of +semantics, so vectors close together are similar. +Here we see words that are somewhat similar, with some noise, +as we project from a 64-dimensional space to 2 dimensions. Neat! diff --git a/demos/yelp_demo/notebooks/noise.png b/demos/yelp_demo/notebooks/noise.png new file mode 100644 index 0000000000000000000000000000000000000000..d0edf69ed1b8d0de90fe81ba589fc5b82a64a881 GIT binary patch literal 37325 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 literal 0 HcmV?d00001 diff --git a/demos/yelp_demo/notebooks/semantics.png b/demos/yelp_demo/notebooks/semantics.png new file mode 100644 index 0000000000000000000000000000000000000000..27a9260d92ca5355fbf4b8a0a0fb0f7066c986ac GIT binary patch literal 113153 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

Nl?~wZ(5AejMEOL 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 literal 0 HcmV?d00001 diff --git a/demos/yelp_demo/notebooks/signal.png b/demos/yelp_demo/notebooks/signal.png new file mode 100644 index 0000000000000000000000000000000000000000..b0b7e86278c748b3a1ef4ed8311dab44981d7381 GIT binary patch literal 37388 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 f|J%fIxwwj^;#3?%X@Uwphgs~Uq)?WChU@\n", + " \n", + " Loading BokehJS ...\n", + " " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": [ + "\n", + "(function(root) {\n", + " function now() {\n", + " return new Date();\n", + " }\n", + "\n", + " var force = true;\n", + "\n", + " if (typeof (root._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n", + " root._bokeh_onload_callbacks = [];\n", + " root._bokeh_is_loading = undefined;\n", + " }\n", + "\n", + " var JS_MIME_TYPE = 'application/javascript';\n", + " var HTML_MIME_TYPE = 'text/html';\n", + " var EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n", + " var CLASS_NAME = 'output_bokeh rendered_html';\n", + "\n", + " /**\n", + " * Render data to the DOM node\n", + " */\n", + " function render(props, node) {\n", + " var script = document.createElement(\"script\");\n", + " node.appendChild(script);\n", + " }\n", + "\n", + " /**\n", + " * Handle when an output is cleared or removed\n", + " */\n", + " function handleClearOutput(event, handle) {\n", + " var cell = handle.cell;\n", + "\n", + " var id = cell.output_area._bokeh_element_id;\n", + " var server_id = cell.output_area._bokeh_server_id;\n", + " // Clean up Bokeh references\n", + " if (id != null && id in Bokeh.index) {\n", + " Bokeh.index[id].model.document.clear();\n", + " delete Bokeh.index[id];\n", + " }\n", + "\n", + " if (server_id !== undefined) {\n", + " // Clean up Bokeh references\n", + " var cmd = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n", + " cell.notebook.kernel.execute(cmd, {\n", + " iopub: {\n", + " output: function(msg) {\n", + " var id = msg.content.text.trim();\n", + " if (id in Bokeh.index) {\n", + " Bokeh.index[id].model.document.clear();\n", + " delete Bokeh.index[id];\n", + " }\n", + " }\n", + " }\n", + " });\n", + " // Destroy server and session\n", + " var cmd = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n", + " cell.notebook.kernel.execute(cmd);\n", + " }\n", + " }\n", + "\n", + " /**\n", + " * Handle when a new output is added\n", + " */\n", + " function handleAddOutput(event, handle) {\n", + " var output_area = handle.output_area;\n", + " var output = handle.output;\n", + "\n", + " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n", + " if ((output.output_type != \"display_data\") || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", + " return\n", + " }\n", + "\n", + " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", + "\n", + " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n", + " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n", + " // store reference to embed id on output_area\n", + " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", + " }\n", + " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", + " var bk_div = document.createElement(\"div\");\n", + " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", + " var script_attrs = bk_div.children[0].attributes;\n", + " for (var i = 0; i < script_attrs.length; i++) {\n", + " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n", + " }\n", + " // store reference to server id on output_area\n", + " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", + " }\n", + " }\n", + "\n", + " function register_renderer(events, OutputArea) {\n", + "\n", + " function append_mime(data, metadata, element) {\n", + " // create a DOM node to render to\n", + " var toinsert = this.create_output_subarea(\n", + " metadata,\n", + " CLASS_NAME,\n", + " EXEC_MIME_TYPE\n", + " );\n", + " this.keyboard_manager.register_events(toinsert);\n", + " // Render to node\n", + " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", + " render(props, toinsert[toinsert.length - 1]);\n", + " element.append(toinsert);\n", + " return toinsert\n", + " }\n", + "\n", + " /* Handle when an output is cleared or removed */\n", + " events.on('clear_output.CodeCell', handleClearOutput);\n", + " events.on('delete.Cell', handleClearOutput);\n", + "\n", + " /* Handle when a new output is added */\n", + " events.on('output_added.OutputArea', handleAddOutput);\n", + "\n", + " /**\n", + " * Register the mime type and append_mime function with output_area\n", + " */\n", + " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", + " /* Is output safe? */\n", + " safe: true,\n", + " /* Index of renderer in `output_area.display_order` */\n", + " index: 0\n", + " });\n", + " }\n", + "\n", + " // register the mime type if in Jupyter Notebook environment and previously unregistered\n", + " if (root.Jupyter !== undefined) {\n", + " var events = require('base/js/events');\n", + " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", + "\n", + " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", + " register_renderer(events, OutputArea);\n", + " }\n", + " }\n", + "\n", + " \n", + " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n", + " root._bokeh_timeout = Date.now() + 5000;\n", + " root._bokeh_failed_load = false;\n", + " }\n", + "\n", + " var NB_LOAD_WARNING = {'data': {'text/html':\n", + " \"

\\n\"+\n", + " \"

\\n\"+\n", + " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n", + " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n", + " \"

\\n\"+\n", + " \"
    \\n\"+\n", + " \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n", + " \"
  • use INLINE resources instead, as so:
  • \\n\"+\n", + " \"
\\n\"+\n", + " \"\\n\"+\n", + " \"from bokeh.resources import INLINE\\n\"+\n", + " \"output_notebook(resources=INLINE)\\n\"+\n", + " \"\\n\"+\n", + " \"
\"}};\n", + "\n", + " function display_loaded() {\n", + " var el = document.getElementById(\"9cd40ca9-0299-434f-b01d-4975b1483b7a\");\n", + " if (el != null) {\n", + " el.textContent = \"BokehJS is loading...\";\n", + " }\n", + " if (root.Bokeh !== undefined) {\n", + " if (el != null) {\n", + " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n", + " }\n", + " } else if (Date.now() < root._bokeh_timeout) {\n", + " setTimeout(display_loaded, 100)\n", + " }\n", + " }\n", + "\n", + "\n", + " function run_callbacks() {\n", + " try {\n", + " root._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n", + " }\n", + " finally {\n", + " delete root._bokeh_onload_callbacks\n", + " }\n", + " console.info(\"Bokeh: all callbacks have finished\");\n", + " }\n", + "\n", + " function load_libs(js_urls, callback) {\n", + " root._bokeh_onload_callbacks.push(callback);\n", + " if (root._bokeh_is_loading > 0) {\n", + " console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", + " return null;\n", + " }\n", + " if (js_urls == null || js_urls.length === 0) {\n", + " run_callbacks();\n", + " return null;\n", + " }\n", + " console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", + " root._bokeh_is_loading = js_urls.length;\n", + " for (var i = 0; i < js_urls.length; i++) {\n", + " var url = js_urls[i];\n", + " var s = document.createElement('script');\n", + " s.src = url;\n", + " s.async = false;\n", + " s.onreadystatechange = s.onload = function() {\n", + " root._bokeh_is_loading--;\n", + " if (root._bokeh_is_loading === 0) {\n", + " console.log(\"Bokeh: all BokehJS libraries loaded\");\n", + " run_callbacks()\n", + " }\n", + " };\n", + " s.onerror = function() {\n", + " console.warn(\"failed to load library \" + url);\n", + " };\n", + " console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", + " document.getElementsByTagName(\"head\")[0].appendChild(s);\n", + " }\n", + " };var element = document.getElementById(\"9cd40ca9-0299-434f-b01d-4975b1483b7a\");\n", + " if (element == null) {\n", + " console.log(\"Bokeh: ERROR: autoload.js configured with elementid '9cd40ca9-0299-434f-b01d-4975b1483b7a' but no matching script tag was found. \")\n", + " return false;\n", + " }\n", + "\n", + " var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-0.13.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.13.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.13.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-0.13.0.min.js\"];\n", + "\n", + " var inline_js = [\n", + " function(Bokeh) {\n", + " Bokeh.set_log_level(\"info\");\n", + " },\n", + " \n", + " function(Bokeh) {\n", + " \n", + " },\n", + " function(Bokeh) {\n", + " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.13.0.min.css\");\n", + " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.13.0.min.css\");\n", + " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.13.0.min.css\");\n", + " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.13.0.min.css\");\n", + " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-tables-0.13.0.min.css\");\n", + " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.13.0.min.css\");\n", + " }\n", + " ];\n", + "\n", + " function run_inline_js() {\n", + " \n", + " if ((root.Bokeh !== undefined) || (force === true)) {\n", + " for (var i = 0; i < inline_js.length; i++) {\n", + " inline_js[i].call(root, root.Bokeh);\n", + " }if (force === true) {\n", + " display_loaded();\n", + " }} else if (Date.now() < root._bokeh_timeout) {\n", + " setTimeout(run_inline_js, 100);\n", + " } else if (!root._bokeh_failed_load) {\n", + " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", + " root._bokeh_failed_load = true;\n", + " } else if (force !== true) {\n", + " var cell = $(document.getElementById(\"9cd40ca9-0299-434f-b01d-4975b1483b7a\")).parents('.cell').data().cell;\n", + " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n", + " }\n", + "\n", + " }\n", + "\n", + " if (root._bokeh_is_loading === 0) {\n", + " console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", + " run_inline_js();\n", + " } else {\n", + " load_libs(js_urls, function() {\n", + " console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n", + " run_inline_js();\n", + " });\n", + " }\n", + "}(window));" + ], + "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n\n if (typeof (root._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n var NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"
    \\n\"+\n \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n \"
  • use INLINE resources instead, as so:
  • \\n\"+\n \"
\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n var el = document.getElementById(\"9cd40ca9-0299-434f-b01d-4975b1483b7a\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n }\n finally {\n delete root._bokeh_onload_callbacks\n }\n console.info(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(js_urls, callback) {\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = js_urls.length;\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n var s = document.createElement('script');\n s.src = url;\n s.async = false;\n s.onreadystatechange = s.onload = function() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.log(\"Bokeh: all BokehJS libraries loaded\");\n run_callbacks()\n }\n };\n s.onerror = function() {\n console.warn(\"failed to load library \" + url);\n };\n console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.getElementsByTagName(\"head\")[0].appendChild(s);\n }\n };var element = document.getElementById(\"9cd40ca9-0299-434f-b01d-4975b1483b7a\");\n if (element == null) {\n console.log(\"Bokeh: ERROR: autoload.js configured with elementid '9cd40ca9-0299-434f-b01d-4975b1483b7a' but no matching script tag was found. \")\n return false;\n }\n\n var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-0.13.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.13.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.13.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-0.13.0.min.js\"];\n\n var inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n \n function(Bokeh) {\n \n },\n function(Bokeh) {\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.13.0.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.13.0.min.css\");\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.13.0.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.13.0.min.css\");\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-tables-0.13.0.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.13.0.min.css\");\n }\n ];\n\n function run_inline_js() {\n \n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n var cell = $(document.getElementById(\"9cd40ca9-0299-434f-b01d-4975b1483b7a\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(js_urls, function() {\n console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from bokeh.models import ColumnDataSource, LabelSet\n", + "from bokeh.plotting import figure, show, output_file\n", + "from bokeh.io import output_notebook\n", + "output_notebook()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loading...\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 5261669/5261669 [00:45<00:00, 116165.09it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loaded 5261669 reviews in 0:01:22.839652\n", + "Love the staff, love the meat, love the place. Prepare for a long line around lunch or dinner hours. \n", + "\n", + "They ask you how you want you meat, lean or something maybe, I can't remember. Just say you don't want it too fatty. \n", + "\n", + "Get a half sour pickle and a hot pepper. Hand cut french fries too. \n", + "\n", + "Rating: 5 stars\n" + ] + } + ], + "source": [ + "from tqdm import tqdm\n", + "from collections import Counter\n", + "from datetime import datetime\n", + "import json\n", + "\n", + "t1 = datetime.now()\n", + "print(\"Loading...\")\n", + "with open(\"yelp_reviews.json\", \"r\", encoding=\"utf-8\") as f:\n", + " reviews = f.read().strip().split(\"\\n\")\n", + "reviews = [json.loads(review) for review in tqdm(reviews)]\n", + "print(\"Loaded \", len(reviews), \"reviews in \", datetime.now() - t1)\n", + "\n", + "print(reviews[0]['text'], \"\\n\\nRating: \", reviews[0]['stars'],\"stars\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 9%|▊ | 449324/5261669 [00:06<01:09, 69264.96it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Selected 100000 positive and 100000 negative reviews\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "# choose a random subset of reviews\n", + "count = 100000\n", + "import numpy as np\n", + "import re\n", + "\n", + "np.random.seed(1)\n", + "positive = []\n", + "negative = []\n", + "all_reviews = np.array(reviews)\n", + "np.random.shuffle(all_reviews)\n", + "notalpha = re.compile('[^a-zA-Z ]')\n", + "\n", + "def tokenize(text):\n", + " return notalpha.sub('',text).lower().strip()\n", + " \n", + "for review in tqdm(all_reviews):\n", + " neg = review['stars'] < 3\n", + " pos = review['stars'] > 3\n", + " text = tokenize(review['text'])\n", + " if neg and len(negative) < count:\n", + " negative.append(text)\n", + " elif pos and len(positive) < count:\n", + " positive.append(text)\n", + " if len(negative) >= count and len(positive) >= count:\n", + " break\n", + "\n", + "print(\"Selected \",len(positive),\"positive and\",len(negative),\"negative reviews\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Please stand by...\n", + "Memory cleared\n" + ] + } + ], + "source": [ + "# clean up memory\n", + "print(\"Please stand by...\")\n", + "reviews = []\n", + "all_reviews = []\n", + "print(\"Memory cleared\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 1%| | 964/100000 [00:00<00:10, 9635.25it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Gathering positive words\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 100000/100000 [00:10<00:00, 9626.41it/s]\n", + " 1%| | 672/100000 [00:00<00:14, 6718.00it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Gathering negative words\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 100000/100000 [00:15<00:00, 6568.77it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Creating influence ratios of frequent words\n", + "Creating training vocabulary\n", + "Found 9541 words\n" + ] + } + ], + "source": [ + "from collections import Counter\n", + "\n", + "positive_counts = Counter()\n", + "negative_counts = Counter()\n", + "total_counts = Counter()\n", + "pos_neg_ratios = Counter()\n", + "polarity_cutoff = 0.2\n", + "min_count = 50\n", + "\n", + "print(\"Gathering positive words\")\n", + "for review in tqdm(positive):\n", + " for word in review.split(\" \"):\n", + " positive_counts[word] += 1\n", + " total_counts[word] += 1\n", + "\n", + "print(\"Gathering negative words\")\n", + "for review in tqdm(negative):\n", + " for word in review.split(\" \"):\n", + " negative_counts[word] += 1\n", + " total_counts[word] += 1\n", + " \n", + "print(\"Creating influence ratios of frequent words\")\n", + "for term,cnt in list(total_counts.most_common()):\n", + " if(cnt >= min_count):\n", + " pos_neg_ratio = positive_counts[term] / float(negative_counts[term]+1)\n", + " pos_neg_ratios[term] = pos_neg_ratio\n", + "\n", + "for word,ratio in pos_neg_ratios.most_common():\n", + " if(ratio > 1):\n", + " pos_neg_ratios[word] = np.log(ratio)\n", + " else:\n", + " pos_neg_ratios[word] = -np.log((1 / (ratio + 0.01)))\n", + "\n", + "print(\"Creating training vocabulary\")\n", + "review_vocab = set()\n", + "for word,p in pos_neg_ratios.most_common():\n", + " if (p >= polarity_cutoff or p <= -polarity_cutoff):\n", + " review_vocab.add(word)\n", + " \n", + "print(\"Found\",len(review_vocab),\"words\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": [ + "(function(root) {\n", + " function embed_document(root) {\n", + " \n", + " var docs_json = {\"c5082536-8d38-48cc-b93b-0f8c229390dd\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"cf873a76-cb91-448d-b258-19a268066575\",\"type\":\"Selection\"},{\"attributes\":{\"data_source\":{\"id\":\"e03da596-b426-4369-937e-d7b02ab9bcc6\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"8dcc6e4d-2f94-4a7a-8643-1cb4bb4f0e68\",\"type\":\"Quad\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"34075348-babd-410b-b30a-c6d6065dcfc9\",\"type\":\"Quad\"},\"selection_glyph\":null,\"view\":{\"id\":\"f484fdec-95eb-402e-8b3f-ca6ab59b5f2c\",\"type\":\"CDSView\"}},\"id\":\"3b47c96f-3206-49a9-b3f4-98e04dff9b24\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"left\":{\"field\":\"left\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"5d522f84-7d74-45c7-96d6-acb051e71e44\",\"type\":\"Quad\"},{\"attributes\":{},\"id\":\"754b97cd-0033-4f57-ad83-02b3c791442c\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"5287a32b-bd35-42a5-a4be-36da7f490722\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"callback\":null,\"data\":{\"left\":{\"__ndarray__\":\"FlW1u7FrEsDgyMORp8oRwKs80medKRHAdbDgPZOIEMB+SN4nEs8PwBMw+9P9jA7AqBcYgOlKDcA8/zQs1QgMwNHmUdjAxgrAZs5uhKyECcD6tYswmEIIwI+dqNyDAAfAJIXFiG++BcC4bOI0W3wEwE1U/+BGOgPA4TscjTL4AcB2Izk5HrYAwBYWrMoT6P6/PuXlIutj/L9otB97wt/5v5CDWdOZW/e/ulKTK3HX9L/kIc2DSFPyvxjiDbg/nu+/bICBaO6V6r/AHvUYnY3lvxC9aMlLheC/wLa48/T51r/g5j+ppNLJv4CAOax9xaa/QE1GpsvfvD+gVqqIlUjRPwAawyc4Wds/sO5tY+204j9YUPqyPr3nPwiyhgKQxew/3IkJqfDm8D+wus9QGWvzP4jrlfhB7/U/YBxcoGpz+D84TSJIk/f6Pwx+6O+7e/0/5K6ul+T//z/eb7qfBkIBQEiInfMahAJAtKCARy/GA0AguWObQwgFQIrRRu9XSgZA9ukpQ2yMB0BiAg2XgM4IQA==\",\"dtype\":\"float64\",\"shape\":[50]},\"right\":{\"__ndarray__\":\"4MjDkafKEcCrPNJnnSkRwHWw4D2TiBDAfkjeJxLPD8ATMPvT/YwOwKgXGIDpSg3APP80LNUIDMDR5lHYwMYKwGbOboSshAnA+rWLMJhCCMCPnajcgwAHwCSFxYhvvgXAuGziNFt8BMBNVP/gRjoDwOE7HI0y+AHAdiM5OR62AMAWFqzKE+j+vz7l5SLrY/y/aLQfe8Lf+b+Qg1nTmVv3v7pSkytx1/S/5CHNg0hT8r8Y4g24P57vv2yAgWjuleq/wB71GJ2N5b8QvWjJS4Xgv8C2uPP0+da/4OY/qaTSyb+AgDmsfcWmv0BNRqbL37w/oFaqiJVI0T8AGsMnOFnbP7DubWPttOI/WFD6sj695z8IsoYCkMXsP9yJCanw5vA/sLrPUBlr8z+I65X4Qe/1P2AcXKBqc/g/OE0iSJP3+j8Mfujvu3v9P+Surpfk//8/3m+6nwZCAUBIiJ3zGoQCQLSggEcvxgNAILljm0MIBUCK0UbvV0oGQPbpKUNsjAdAYgINl4DOCEDNGvDqlBAKQA==\",\"dtype\":\"float64\",\"shape\":[50]},\"top\":{\"__ndarray__\":\"ERyB9ScHfj8AAAAAAAAAACBV6YX+YGA/gHGMsqjWRT8tVemF/mBwP/aNL99STHs/aKpjJz55hD/2jS/fUkx7P6o4tT0TNIc/mDi1PRM0lz8e1SD4XYWWP9J/plYebZI/9A34bPMnpT8mFQU/LnOjP1Qqm5mdnao/lZH+1ZBNtD/kBuuauNy2P9dNS5iCXr4/SjyENFE1wD/0Dfhs8yfFP4DhChOUv8w/EOZxzvHu0D8R9ZIbRvzUPxzFZ+bpSdc/EWURfDHl2z9Xz/fMUv/gPzroXB4AK+E/cHvQtgH14T9Q4zqc0xtzPwAAAAAAAAAAOs0MfUTD0D+Zb1wpaXrfP3CJWT821No/phnb3krr0z9aIx/jownQP4BxjLKo1sU/WuOpgJJkvz9jivEDVgK2P4S47K9yWK0//k3cs8MVoj+Z8cMkCPubP6y4fcuzD5E/KOOpgJJkjz86VemF/mCAP7D/3ch9kXg/gHGMsqjWZT+jcYyyqNZVP4BxjLKo1kU/gHGMsqjWRT+RcYyyqNZVPw==\",\"dtype\":\"float64\",\"shape\":[50]}},\"selected\":{\"id\":\"cf873a76-cb91-448d-b258-19a268066575\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"eb6eb7c4-e747-4a9e-9a15-11daba4d83ff\",\"type\":\"UnionRenderers\"}},\"id\":\"ff90dea2-b065-4453-97bc-2a1f56de8957\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"7fd3b8aa-0ec4-470c-8e02-672fa401a973\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"background_fill_color\":{\"value\":\"#E8DDCB\"},\"below\":[{\"id\":\"1d0c2611-d305-4e6f-97cc-3b742d313017\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"32ddc11e-d4b4-48fa-9fb8-3185c1217d92\",\"type\":\"LinearAxis\"}],\"plot_height\":400,\"plot_width\":400,\"renderers\":[{\"id\":\"1d0c2611-d305-4e6f-97cc-3b742d313017\",\"type\":\"LinearAxis\"},{\"id\":\"4c8001a1-42cc-4ba4-a039-35d52df12b6e\",\"type\":\"Grid\"},{\"id\":\"32ddc11e-d4b4-48fa-9fb8-3185c1217d92\",\"type\":\"LinearAxis\"},{\"id\":\"c66be886-14aa-43af-8f19-92478d76f176\",\"type\":\"Grid\"},{\"id\":\"e49e36c6-072e-4fda-8b83-622e6b710127\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"75b48d52-40f6-4393-8a9c-c0a9dfb4dcf9\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"f406c684-32a4-43a7-8e77-ae9bcfef600a\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"414a5b30-fa24-4798-b63a-5d41ddac7479\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"737e8201-0961-4793-bf19-9b424e06cead\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"2baf4eb0-f11b-44fe-a1c7-a805a025162b\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"328f0820-d07e-461a-bfbc-58f386adcfc5\",\"type\":\"LinearScale\"}},\"id\":\"fa9f3eec-400b-43da-932b-6bf6175d0d6f\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"plot\":{\"id\":\"f91df3cf-a1d3-49e0-ad48-153aaf8f6e9a\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"08a723ea-7244-4a6f-916c-bf526af4c477\",\"type\":\"BasicTicker\"}},\"id\":\"7f700055-d2fc-481a-a2b6-2927ee4d696a\",\"type\":\"Grid\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_color\":{\"value\":\"#036564\"},\"left\":{\"field\":\"left\"},\"line_color\":{\"value\":\"#033649\"},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"8dcc6e4d-2f94-4a7a-8643-1cb4bb4f0e68\",\"type\":\"Quad\"},{\"attributes\":{},\"id\":\"d088c02d-f2d8-4f4f-b577-faf2b737c1d2\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"b96dab66-8473-45de-912b-4452edffcc26\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"callback\":null},\"id\":\"2baf4eb0-f11b-44fe-a1c7-a805a025162b\",\"type\":\"DataRange1d\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"left\":{\"field\":\"left\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"bdc097dd-840e-4488-920c-bdc982ab2407\",\"type\":\"Quad\"},{\"attributes\":{},\"id\":\"dada7d90-8a38-4f64-a716-db6bc49a2090\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"94a1304b-f1ab-4fa5-bb7c-0943de200fa7\",\"type\":\"ColumnDataSource\"}},\"id\":\"f761a6b5-6a6b-4c01-b5c8-96199d623dfd\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"b87e15d1-b4bb-426f-932d-e7c2832a9a2b\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"79e88870-b456-43a5-b1f9-02df5dcddad3\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data_source\":{\"id\":\"11dc6d38-a529-4f85-9e8b-0a70904ba171\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"15a67c4e-43bd-4c97-9d33-8a0832dac24d\",\"type\":\"Quad\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"e0319fef-9189-414e-835d-328d9e0b2550\",\"type\":\"Quad\"},\"selection_glyph\":null,\"view\":{\"id\":\"f3d464ab-0f7a-41fc-9082-20c2681ea662\",\"type\":\"CDSView\"}},\"id\":\"e49e36c6-072e-4fda-8b83-622e6b710127\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"328f0820-d07e-461a-bfbc-58f386adcfc5\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"e03da596-b426-4369-937e-d7b02ab9bcc6\",\"type\":\"ColumnDataSource\"}},\"id\":\"f484fdec-95eb-402e-8b3f-ca6ab59b5f2c\",\"type\":\"CDSView\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"left\":{\"field\":\"left\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"e0319fef-9189-414e-835d-328d9e0b2550\",\"type\":\"Quad\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_color\":{\"value\":\"#036564\"},\"left\":{\"field\":\"left\"},\"line_color\":{\"value\":\"#033649\"},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"fbfb19e4-9603-4eb3-a082-375b3dde2f52\",\"type\":\"Quad\"},{\"attributes\":{},\"id\":\"7943d353-b7e9-497c-941c-0cc71a00d1b8\",\"type\":\"Selection\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"f91df3cf-a1d3-49e0-ad48-153aaf8f6e9a\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"dada7d90-8a38-4f64-a716-db6bc49a2090\",\"type\":\"BasicTicker\"}},\"id\":\"ce3bd480-60de-424a-a906-715938a9b8f9\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"4a4269e9-fe2e-4e25-8e21-255b8f0febb5\",\"type\":\"SaveTool\"},{\"attributes\":{\"callback\":null,\"data\":{\"left\":{\"__ndarray__\":\"AAAAAACASUApXI/C1bLWQClcj8J1rOZAH4XrUcD/8EApXI/CRan2QDMzMzPLUvxAH4XrUSj+AEGkcD0K69IDQSlcj8KtpwZBrkfhenB8CUEzMzMzM1EMQbgehev1JQ9BH4XrUVz9EEHhehSuvWcSQaRwPQof0hNBZmZmZoA8FUEpXI/C4aYWQexRuB5DERhBrkfheqR7GUFxPQrXBeYaQTMzMzNnUBxB9ihcj8i6HUG4HoXrKSUfQT0K16PFRyBBH4XrUfb8IEEAAAAAJ7IhQeF6FK5XZyJBw/UoXIgcI0GkcD0KudEjQYXrUbjphiRBZmZmZho8JUFI4XoUS/ElQSlcj8J7piZBCtejcKxbJ0HsUbge3RAoQc3MzMwNxihBrkfhej57KUGPwvUobzAqQXE9Ctef5SpBUrgehdCaK0EzMzMzAVAsQRWuR+ExBS1B9ihcj2K6LUHXo3A9k28uQbgehevDJC9BmpmZmfTZL0E9CtejkkcwQa5H4foqojBBH4XrUcP8MEGPwvWoW1cxQQ==\",\"dtype\":\"float64\",\"shape\":[50]},\"right\":{\"__ndarray__\":\"KVyPwtWy1kApXI/CdazmQB+F61HA//BAKVyPwkWp9kAzMzMzy1L8QB+F61Eo/gBBpHA9CuvSA0EpXI/CracGQa5H4XpwfAlBMzMzMzNRDEG4HoXr9SUPQR+F61Fc/RBB4XoUrr1nEkGkcD0KH9ITQWZmZmaAPBVBKVyPwuGmFkHsUbgeQxEYQa5H4XqkexlBcT0K1wXmGkEzMzMzZ1AcQfYoXI/Iuh1BuB6F6yklH0E9CtejxUcgQR+F61H2/CBBAAAAACeyIUHhehSuV2ciQcP1KFyIHCNBpHA9CrnRI0GF61G46YYkQWZmZmYaPCVBSOF6FEvxJUEpXI/Ce6YmQQrXo3CsWydB7FG4Ht0QKEHNzMzMDcYoQa5H4Xo+eylBj8L1KG8wKkFxPQrXn+UqQVK4HoXQmitBMzMzMwFQLEEVrkfhMQUtQfYoXI9iui1B16NwPZNvLkG4HoXrwyQvQZqZmZn02S9BPQrXo5JHMEGuR+H6KqIwQR+F61HD/DBBj8L1qFtXMUEAAAAA9LExQQ==\",\"dtype\":\"float64\",\"shape\":[50]},\"top\":{\"__ndarray__\":\"tLzgUAtXBj9ZgLq9xdGPPjw4cPI34HU+M+i4Ov/lcT5E4EtOVN1XPj/gS05U3Uc+WoC6vcXRPz5agLq9xdFPPlqAur3F0U8+WoC6vcXRLz5agLq9xdEvPk+Aur3F0T8+ZYC6vcXRPz4AAAAAAAAAAGWAur3F0S8+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT4C6vcXRLz4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlgLq9xdEvPgAAAAAAAAAAZYC6vcXRPz4AAAAAAAAAAGWAur3F0S8+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlgLq9xdEvPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4gLq9xdEvPg==\",\"dtype\":\"float64\",\"shape\":[50]}},\"selected\":{\"id\":\"9f99de56-5473-40a9-8793-d7cd664b86db\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"5287a32b-bd35-42a5-a4be-36da7f490722\",\"type\":\"UnionRenderers\"}},\"id\":\"e03da596-b426-4369-937e-d7b02ab9bcc6\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"relative count\",\"formatter\":{\"id\":\"c6428b1f-1afe-43aa-b7a2-422fed94ed7f\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"be858f97-d9a9-403b-b66e-fa5cbe46751a\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"9c2486d2-eb53-454d-a624-7fdd74c21b85\",\"type\":\"BasicTicker\"}},\"id\":\"5a969e6c-91b3-4b64-9d04-c3b3a5253b79\",\"type\":\"LinearAxis\"},{\"attributes\":{\"background_fill_color\":{\"value\":\"#E8DDCB\"},\"below\":[{\"id\":\"057b5c7c-a9c8-4607-ab9e-e16db67fc933\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"c8e832d8-739d-42fc-a6ad-94257d1e0f4a\",\"type\":\"LinearAxis\"}],\"plot_height\":400,\"plot_width\":400,\"renderers\":[{\"id\":\"057b5c7c-a9c8-4607-ab9e-e16db67fc933\",\"type\":\"LinearAxis\"},{\"id\":\"d242b9d7-28e9-4c22-86e3-1dac9ead99fa\",\"type\":\"Grid\"},{\"id\":\"c8e832d8-739d-42fc-a6ad-94257d1e0f4a\",\"type\":\"LinearAxis\"},{\"id\":\"7472d447-783c-4674-a542-645fa0706ebf\",\"type\":\"Grid\"},{\"id\":\"8f660d45-c1f4-4395-92ea-97c26be4733b\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"69926ff7-926b-43de-ab98-4d31168fd8d9\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"10240fdb-38a5-4c6f-aebf-1dc6b5156437\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"8be02e8f-8d7b-4053-a7f3-bbe7c37cb0cb\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"a9dd7902-7377-422b-8873-721c7053be0a\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"e3320d3a-0087-4cb8-8c21-14b404bcd627\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"6d7cdff1-3287-4122-93f0-8e1fd2d157b0\",\"type\":\"LinearScale\"}},\"id\":\"45e1d527-512c-450e-aa6e-9defda4c7f4f\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"callback\":null,\"data\":{\"left\":{\"__ndarray__\":\"AAAAAAAA8D8pXI/ClabWQClcj8J1puZAH4XrUdD88EApXI/CZab2QDMzMzP7T/xAH4XrUcj8AEGkcD0Kk9EDQSlcj8JdpgZBrkfheih7CUEzMzMz808MQbgeheu9JA9BH4XrUcT8EEHhehSuKWcSQaRwPQqP0RNBZmZmZvQ7FUEpXI/CWaYWQexRuB6/EBhBrkfheiR7GUFxPQrXieUaQTMzMzPvTxxB9ihcj1S6HUG4HoXruSQfQT0K16OPRyBBH4XrUcL8IEEAAAAA9bEhQeF6FK4nZyJBw/UoXFocI0GkcD0KjdEjQYXrUbi/hiRBZmZmZvI7JUFI4XoUJfElQSlcj8JXpiZBCtejcIpbJ0HsUbgevRAoQc3MzMzvxShBrkfheiJ7KUGPwvUoVTAqQXE9CteH5SpBUrgehbqaK0EzMzMz7U8sQRWuR+EfBS1B9ihcj1K6LUHXo3A9hW8uQbgeheu3JC9BmpmZmerZL0E9CtejjkcwQa5H4fonojBBH4XrUcH8MEGPwvWoWlcxQQ==\",\"dtype\":\"float64\",\"shape\":[50]},\"right\":{\"__ndarray__\":\"KVyPwpWm1kApXI/CdabmQB+F61HQ/PBAKVyPwmWm9kAzMzMz+0/8QB+F61HI/ABBpHA9CpPRA0EpXI/CXaYGQa5H4XooewlBMzMzM/NPDEG4HoXrvSQPQR+F61HE/BBB4XoUrilnEkGkcD0Kj9ETQWZmZmb0OxVBKVyPwlmmFkHsUbgevxAYQa5H4XokexlBcT0K14nlGkEzMzMz708cQfYoXI9Uuh1BuB6F67kkH0E9Ctejj0cgQR+F61HC/CBBAAAAAPWxIUHhehSuJ2ciQcP1KFxaHCNBpHA9Co3RI0GF61G4v4YkQWZmZmbyOyVBSOF6FCXxJUEpXI/CV6YmQQrXo3CKWydB7FG4Hr0QKEHNzMzM78UoQa5H4XoieylBj8L1KFUwKkFxPQrXh+UqQVK4HoW6mitBMzMzM+1PLEEVrkfhHwUtQfYoXI9Sui1B16NwPYVvLkG4HoXrtyQvQZqZmZnq2S9BPQrXo45HMEGuR+H6J6IwQR+F61HB/DBBj8L1qFpXMUEAAAAA9LExQQ==\",\"dtype\":\"float64\",\"shape\":[50]},\"top\":{\"__ndarray__\":\"ESnQat+XBj9Io/KZJuBGPrIzm8RT+C4+w/t+LNBWKT7Xp1TIiuQQPtSnVMiK5AA+yt9wYA6G9j3K33BgDoYGPsrfcGAOhgY+yt9wYA6G5j3K33BgDobmPcLfcGAOhvY90d9wYA6G9j0AAAAAAAAAANHfcGAOhuY9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwt9wYA6G5j0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR33BgDobmPQAAAAAAAAAA0d9wYA6G9j0AAAAAAAAAANHfcGAOhuY9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR33BgDobmPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACy33BgDobmPQ==\",\"dtype\":\"float64\",\"shape\":[50]}},\"selected\":{\"id\":\"7943d353-b7e9-497c-941c-0cc71a00d1b8\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"b96dab66-8473-45de-912b-4452edffcc26\",\"type\":\"UnionRenderers\"}},\"id\":\"11dc6d38-a529-4f85-9e8b-0a70904ba171\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"data\":{\"left\":{\"__ndarray__\":\"AAAAAAAAAACkcD0K16PgP6RwPQrXo/A/9ihcj8L1+D+kcD0K16MAQM3MzMzMzARA9ihcj8L1CEAfhetRuB4NQKRwPQrXoxBAuB6F61G4EkDNzMzMzMwUQOJ6FK5H4RZA9ihcj8L1GEAK16NwPQobQB+F61G4Hh1ANDMzMzMzH0CkcD0K16MgQK5H4XoUriFAuB6F61G4IkDD9Shcj8IjQM3MzMzMzCRA16NwPQrXJUDiehSuR+EmQOxRuB6F6ydA9ihcj8L1KEAAAAAAAAAqQArXo3A9CitAFa5H4XoULEAfhetRuB4tQClcj8L1KC5ANDMzMzMzL0AfhetRuB4wQKRwPQrXozBAKVyPwvUoMUCuR+F6FK4xQDMzMzMzMzJAuB6F61G4MkA+CtejcD0zQMP1KFyPwjNASOF6FK5HNEDNzMzMzMw0QFK4HoXrUTVA16NwPQrXNUBcj8L1KFw2QOJ6FK5H4TZAZ2ZmZmZmN0DsUbgehes3QHE9CtejcDhA9ihcj8L1OEB7FK5H4Xo5QA==\",\"dtype\":\"float64\",\"shape\":[50]},\"right\":{\"__ndarray__\":\"pHA9Ctej4D+kcD0K16PwP/YoXI/C9fg/pHA9CtejAEDNzMzMzMwEQPYoXI/C9QhAH4XrUbgeDUCkcD0K16MQQLgehetRuBJAzczMzMzMFEDiehSuR+EWQPYoXI/C9RhACtejcD0KG0AfhetRuB4dQDQzMzMzMx9ApHA9CtejIECuR+F6FK4hQLgehetRuCJAw/UoXI/CI0DNzMzMzMwkQNejcD0K1yVA4noUrkfhJkDsUbgehesnQPYoXI/C9ShAAAAAAAAAKkAK16NwPQorQBWuR+F6FCxAH4XrUbgeLUApXI/C9SguQDQzMzMzMy9AH4XrUbgeMECkcD0K16MwQClcj8L1KDFArkfhehSuMUAzMzMzMzMyQLgehetRuDJAPgrXo3A9M0DD9Shcj8IzQEjhehSuRzRAzczMzMzMNEBSuB6F61E1QNejcD0K1zVAXI/C9ShcNkDiehSuR+E2QGdmZmZmZjdA7FG4HoXrN0BxPQrXo3A4QPYoXI/C9ThAexSuR+F6OUAAAAAAAAA6QA==\",\"dtype\":\"float64\",\"shape\":[50]},\"top\":{\"__ndarray__\":\"E+TLU2kv5D9kaqt/mv/iP9GorlJPd9U/HHg1mbzexD+9KCBXrym1P3zHStvJk6Q/zpxj1+xDmj/m9ekJpnGNP0rQDQH2aIQ/JzwCOAcbfD8nPAI4BxtsP+316QmmcW0/aW7EqBBmYT9hbsSoEGZhPxkorHqvvGI/Iiiseq+8Uj+vtNzWcQ9QP5Wbex7taUU/oLTc1nEPQD+Vm3se7WlFP3uCGmZoxEo/gJt7Hu1pNT+Vm3se7WklP5Wbex7taSU/lZt7Hu1pNT8AAAAAAAAAAICbex7taTU/AAAAAAAAAAAAAAAAAAAAAICbex7taSU/AAAAAAAAAAAAAAAAAAAAAJWbex7taSU/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJWbex7taSU/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJWbex7taSU/AAAAAAAAAACVm3se7WklPw==\",\"dtype\":\"float64\",\"shape\":[50]}},\"selected\":{\"id\":\"23205a30-754c-4340-a6cb-b15f8f1ffb6c\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"50a1d710-dc91-4d9e-8d62-bb18aa2dc7dd\",\"type\":\"UnionRenderers\"}},\"id\":\"94a1304b-f1ab-4fa5-bb7c-0943de200fa7\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"f22a0a98-8f4f-4c4f-9d81-9ebb12bb5446\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"3edf89de-f91a-42f3-b251-b118ab7425a0\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"eb6eb7c4-e747-4a9e-9a15-11daba4d83ff\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"relative count\",\"formatter\":{\"id\":\"3aeebf71-064c-465e-8368-63a5e80976ae\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"45e1d527-512c-450e-aa6e-9defda4c7f4f\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"83d3abb2-e620-42f4-ad49-aefb35d8de73\",\"type\":\"BasicTicker\"}},\"id\":\"c8e832d8-739d-42fc-a6ad-94257d1e0f4a\",\"type\":\"LinearAxis\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"b87e15d1-b4bb-426f-932d-e7c2832a9a2b\",\"type\":\"SaveTool\"}]},\"id\":\"44a2db1e-26f9-4c46-af3b-4a293b81285c\",\"type\":\"Toolbar\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_color\":{\"value\":\"#036564\"},\"left\":{\"field\":\"left\"},\"line_color\":{\"value\":\"#033649\"},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"15a67c4e-43bd-4c97-9d33-8a0832dac24d\",\"type\":\"Quad\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"45e1d527-512c-450e-aa6e-9defda4c7f4f\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"83d3abb2-e620-42f4-ad49-aefb35d8de73\",\"type\":\"BasicTicker\"}},\"id\":\"7472d447-783c-4674-a542-645fa0706ebf\",\"type\":\"Grid\"},{\"attributes\":{\"background_fill_color\":{\"value\":\"#E8DDCB\"},\"below\":[{\"id\":\"d4ce491f-ce2a-46ee-9e94-00a26f117318\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"6dfc012a-a82a-4d7d-a8ca-bbfd37a18a8f\",\"type\":\"LinearAxis\"}],\"plot_height\":400,\"plot_width\":400,\"renderers\":[{\"id\":\"d4ce491f-ce2a-46ee-9e94-00a26f117318\",\"type\":\"LinearAxis\"},{\"id\":\"7f700055-d2fc-481a-a2b6-2927ee4d696a\",\"type\":\"Grid\"},{\"id\":\"6dfc012a-a82a-4d7d-a8ca-bbfd37a18a8f\",\"type\":\"LinearAxis\"},{\"id\":\"ce3bd480-60de-424a-a906-715938a9b8f9\",\"type\":\"Grid\"},{\"id\":\"3b47c96f-3206-49a9-b3f4-98e04dff9b24\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"7a2342e3-2c1a-4204-9fef-20f3b64b9530\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"bc06d4d3-f5ba-461b-a234-da36a60c4482\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"387ef1cd-e104-451b-9d94-aaf13372978d\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"b0e3357a-964d-433a-99bb-269a74ab8c1a\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"e322f4cf-29d9-4402-8b6d-1c40a4b56ebb\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"bfe2b96d-761f-4207-b6cf-d946bf5f09b4\",\"type\":\"LinearScale\"}},\"id\":\"f91df3cf-a1d3-49e0-ad48-153aaf8f6e9a\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"axis_label\":\"relative count\",\"formatter\":{\"id\":\"f22a0a98-8f4f-4c4f-9d81-9ebb12bb5446\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"f91df3cf-a1d3-49e0-ad48-153aaf8f6e9a\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"dada7d90-8a38-4f64-a716-db6bc49a2090\",\"type\":\"BasicTicker\"}},\"id\":\"6dfc012a-a82a-4d7d-a8ca-bbfd37a18a8f\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"83d3abb2-e620-42f4-ad49-aefb35d8de73\",\"type\":\"BasicTicker\"},{\"attributes\":{\"callback\":null},\"id\":\"d573e480-6a1d-4286-ad02-5ad5ae107dc7\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"23205a30-754c-4340-a6cb-b15f8f1ffb6c\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"a9dd7902-7377-422b-8873-721c7053be0a\",\"type\":\"LinearScale\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"fa9f3eec-400b-43da-932b-6bf6175d0d6f\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"0d526931-51bf-4a95-bc56-cd8850ef8f05\",\"type\":\"BasicTicker\"}},\"id\":\"c66be886-14aa-43af-8f19-92478d76f176\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null},\"id\":\"e322f4cf-29d9-4402-8b6d-1c40a4b56ebb\",\"type\":\"DataRange1d\"},{\"attributes\":{\"callback\":null},\"id\":\"414a5b30-fa24-4798-b63a-5d41ddac7479\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis_label\":\"pos/neg ratio\",\"formatter\":{\"id\":\"7fd3b8aa-0ec4-470c-8e02-672fa401a973\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"45e1d527-512c-450e-aa6e-9defda4c7f4f\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"7171c8f5-0925-48f8-b058-090b6066753d\",\"type\":\"BasicTicker\"}},\"id\":\"057b5c7c-a9c8-4607-ab9e-e16db67fc933\",\"type\":\"LinearAxis\"},{\"attributes\":{\"callback\":null},\"id\":\"3063728b-fe78-4753-a242-d76ad51166b5\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"08a723ea-7244-4a6f-916c-bf526af4c477\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"3aeebf71-064c-465e-8368-63a5e80976ae\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null},\"id\":\"e3320d3a-0087-4cb8-8c21-14b404bcd627\",\"type\":\"DataRange1d\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"be858f97-d9a9-403b-b66e-fa5cbe46751a\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"9c2486d2-eb53-454d-a624-7fdd74c21b85\",\"type\":\"BasicTicker\"}},\"id\":\"3e1bd11a-a204-43da-90e1-0c48cb47d93e\",\"type\":\"Grid\"},{\"attributes\":{\"plot\":null,\"text\":\"Discriminating Word Distribution\"},\"id\":\"44828041-3839-4466-9e62-ee32f5fb7e18\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"50a1d710-dc91-4d9e-8d62-bb18aa2dc7dd\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"0d526931-51bf-4a95-bc56-cd8850ef8f05\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"737e8201-0961-4793-bf19-9b424e06cead\",\"type\":\"LinearScale\"},{\"attributes\":{\"children\":[{\"id\":\"45e1d527-512c-450e-aa6e-9defda4c7f4f\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"id\":\"be858f97-d9a9-403b-b66e-fa5cbe46751a\",\"subtype\":\"Figure\",\"type\":\"Plot\"}]},\"id\":\"60b7b19f-5c69-49dc-81bf-2300fd5c9af9\",\"type\":\"Row\"},{\"attributes\":{\"axis_label\":\"word frequency (above cutoff)\",\"formatter\":{\"id\":\"f0ad77c9-61d2-44b6-b97c-4f63ba86970f\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"f91df3cf-a1d3-49e0-ad48-153aaf8f6e9a\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"08a723ea-7244-4a6f-916c-bf526af4c477\",\"type\":\"BasicTicker\"}},\"id\":\"d4ce491f-ce2a-46ee-9e94-00a26f117318\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis_label\":\"word frequency\",\"formatter\":{\"id\":\"d25a846f-be00-4617-9d6d-7f1e223070c3\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"fa9f3eec-400b-43da-932b-6bf6175d0d6f\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"79e88870-b456-43a5-b1f9-02df5dcddad3\",\"type\":\"BasicTicker\"}},\"id\":\"1d0c2611-d305-4e6f-97cc-3b742d313017\",\"type\":\"LinearAxis\"},{\"attributes\":{\"children\":[{\"id\":\"4b7a6f55-254a-4244-ace5-fd2cd3d646ef\",\"type\":\"Row\"},{\"id\":\"60b7b19f-5c69-49dc-81bf-2300fd5c9af9\",\"type\":\"Row\"}]},\"id\":\"dec1db7c-ba41-4023-84c4-23da64b012ce\",\"type\":\"Column\"},{\"attributes\":{\"plot\":{\"id\":\"be858f97-d9a9-403b-b66e-fa5cbe46751a\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"3edf89de-f91a-42f3-b251-b118ab7425a0\",\"type\":\"BasicTicker\"}},\"id\":\"9f2f5257-031e-41a9-8bfb-78752c1f8004\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null},\"id\":\"8be02e8f-8d7b-4053-a7f3-bbe7c37cb0cb\",\"type\":\"DataRange1d\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"left\":{\"field\":\"left\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"34075348-babd-410b-b30a-c6d6065dcfc9\",\"type\":\"Quad\"},{\"attributes\":{},\"id\":\"d25a846f-be00-4617-9d6d-7f1e223070c3\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"11dc6d38-a529-4f85-9e8b-0a70904ba171\",\"type\":\"ColumnDataSource\"}},\"id\":\"f3d464ab-0f7a-41fc-9082-20c2681ea662\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"9c2486d2-eb53-454d-a624-7fdd74c21b85\",\"type\":\"BasicTicker\"},{\"attributes\":{\"plot\":null,\"text\":\"Raw Word Distribution\"},\"id\":\"75b48d52-40f6-4393-8a9c-c0a9dfb4dcf9\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"0c4441c9-c022-4b61-844f-424f032337aa\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"children\":[{\"id\":\"fa9f3eec-400b-43da-932b-6bf6175d0d6f\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"id\":\"f91df3cf-a1d3-49e0-ad48-153aaf8f6e9a\",\"subtype\":\"Figure\",\"type\":\"Plot\"}]},\"id\":\"4b7a6f55-254a-4244-ace5-fd2cd3d646ef\",\"type\":\"Row\"},{\"attributes\":{\"axis_label\":\"relative count\",\"formatter\":{\"id\":\"0c4441c9-c022-4b61-844f-424f032337aa\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"fa9f3eec-400b-43da-932b-6bf6175d0d6f\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"0d526931-51bf-4a95-bc56-cd8850ef8f05\",\"type\":\"BasicTicker\"}},\"id\":\"32ddc11e-d4b4-48fa-9fb8-3185c1217d92\",\"type\":\"LinearAxis\"},{\"attributes\":{\"plot\":null,\"text\":\"Pos/Neg Distribution\"},\"id\":\"69926ff7-926b-43de-ab98-4d31168fd8d9\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"c6428b1f-1afe-43aa-b7a2-422fed94ed7f\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"c5b43a8b-33b3-4c6f-9826-d75fe5dcdd64\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"ff90dea2-b065-4453-97bc-2a1f56de8957\",\"type\":\"ColumnDataSource\"}},\"id\":\"22dfb797-5537-4566-b316-68e1c60e45a8\",\"type\":\"CDSView\"},{\"attributes\":{\"plot\":null,\"text\":\"Min Count Word Distribution\"},\"id\":\"7a2342e3-2c1a-4204-9fef-20f3b64b9530\",\"type\":\"Title\"},{\"attributes\":{\"callback\":null},\"id\":\"387ef1cd-e104-451b-9d94-aaf13372978d\",\"type\":\"DataRange1d\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_color\":{\"value\":\"#036564\"},\"left\":{\"field\":\"left\"},\"line_color\":{\"value\":\"#033649\"},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"3234fc5b-0935-45d1-8208-c7a683d47cd7\",\"type\":\"Quad\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"c2babdea-7cb4-40e8-a097-37870ecb439c\",\"type\":\"SaveTool\"}]},\"id\":\"bc06d4d3-f5ba-461b-a234-da36a60c4482\",\"type\":\"Toolbar\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"77c9f0a7-5f44-4af7-9d03-6dd8faf7c3d6\",\"type\":\"SaveTool\"}]},\"id\":\"f406c684-32a4-43a7-8e77-ae9bcfef600a\",\"type\":\"Toolbar\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"4a4269e9-fe2e-4e25-8e21-255b8f0febb5\",\"type\":\"SaveTool\"}]},\"id\":\"10240fdb-38a5-4c6f-aebf-1dc6b5156437\",\"type\":\"Toolbar\"},{\"attributes\":{\"data_source\":{\"id\":\"ff90dea2-b065-4453-97bc-2a1f56de8957\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"fbfb19e4-9603-4eb3-a082-375b3dde2f52\",\"type\":\"Quad\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"bdc097dd-840e-4488-920c-bdc982ab2407\",\"type\":\"Quad\"},\"selection_glyph\":null,\"view\":{\"id\":\"22dfb797-5537-4566-b316-68e1c60e45a8\",\"type\":\"CDSView\"}},\"id\":\"40cbe9c0-2367-4760-b72e-d2ec7f8fae18\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"c2babdea-7cb4-40e8-a097-37870ecb439c\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"7171c8f5-0925-48f8-b058-090b6066753d\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"6d7cdff1-3287-4122-93f0-8e1fd2d157b0\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"log(pos/neg ratio)\",\"formatter\":{\"id\":\"d088c02d-f2d8-4f4f-b577-faf2b737c1d2\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"be858f97-d9a9-403b-b66e-fa5cbe46751a\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"3edf89de-f91a-42f3-b251-b118ab7425a0\",\"type\":\"BasicTicker\"}},\"id\":\"b86a2b67-03c6-4d31-ac26-0f6ac6bd3e92\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"77c9f0a7-5f44-4af7-9d03-6dd8faf7c3d6\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"f0ad77c9-61d2-44b6-b97c-4f63ba86970f\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"plot\":{\"id\":\"fa9f3eec-400b-43da-932b-6bf6175d0d6f\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"79e88870-b456-43a5-b1f9-02df5dcddad3\",\"type\":\"BasicTicker\"}},\"id\":\"4c8001a1-42cc-4ba4-a039-35d52df12b6e\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"9f99de56-5473-40a9-8793-d7cd664b86db\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"b0e3357a-964d-433a-99bb-269a74ab8c1a\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"bfe2b96d-761f-4207-b6cf-d946bf5f09b4\",\"type\":\"LinearScale\"},{\"attributes\":{\"plot\":{\"id\":\"45e1d527-512c-450e-aa6e-9defda4c7f4f\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"7171c8f5-0925-48f8-b058-090b6066753d\",\"type\":\"BasicTicker\"}},\"id\":\"d242b9d7-28e9-4c22-86e3-1dac9ead99fa\",\"type\":\"Grid\"},{\"attributes\":{\"background_fill_color\":{\"value\":\"#E8DDCB\"},\"below\":[{\"id\":\"b86a2b67-03c6-4d31-ac26-0f6ac6bd3e92\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"5a969e6c-91b3-4b64-9d04-c3b3a5253b79\",\"type\":\"LinearAxis\"}],\"plot_height\":400,\"plot_width\":400,\"renderers\":[{\"id\":\"b86a2b67-03c6-4d31-ac26-0f6ac6bd3e92\",\"type\":\"LinearAxis\"},{\"id\":\"9f2f5257-031e-41a9-8bfb-78752c1f8004\",\"type\":\"Grid\"},{\"id\":\"5a969e6c-91b3-4b64-9d04-c3b3a5253b79\",\"type\":\"LinearAxis\"},{\"id\":\"3e1bd11a-a204-43da-90e1-0c48cb47d93e\",\"type\":\"Grid\"},{\"id\":\"40cbe9c0-2367-4760-b72e-d2ec7f8fae18\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"44828041-3839-4466-9e62-ee32f5fb7e18\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"44a2db1e-26f9-4c46-af3b-4a293b81285c\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"3063728b-fe78-4753-a242-d76ad51166b5\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"c5b43a8b-33b3-4c6f-9826-d75fe5dcdd64\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"d573e480-6a1d-4286-ad02-5ad5ae107dc7\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"754b97cd-0033-4f57-ad83-02b3c791442c\",\"type\":\"LinearScale\"}},\"id\":\"be858f97-d9a9-403b-b66e-fa5cbe46751a\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"data_source\":{\"id\":\"94a1304b-f1ab-4fa5-bb7c-0943de200fa7\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"3234fc5b-0935-45d1-8208-c7a683d47cd7\",\"type\":\"Quad\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"5d522f84-7d74-45c7-96d6-acb051e71e44\",\"type\":\"Quad\"},\"selection_glyph\":null,\"view\":{\"id\":\"f761a6b5-6a6b-4c01-b5c8-96199d623dfd\",\"type\":\"CDSView\"}},\"id\":\"8f660d45-c1f4-4395-92ea-97c26be4733b\",\"type\":\"GlyphRenderer\"}],\"root_ids\":[\"dec1db7c-ba41-4023-84c4-23da64b012ce\"]},\"title\":\"Bokeh Application\",\"version\":\"0.13.0\"}};\n", + " var render_items = [{\"docid\":\"c5082536-8d38-48cc-b93b-0f8c229390dd\",\"roots\":{\"dec1db7c-ba41-4023-84c4-23da64b012ce\":\"515dda20-28ec-47e6-93c3-ad781336c903\"}}];\n", + " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", + "\n", + " }\n", + " if (root.Bokeh !== undefined) {\n", + " embed_document(root);\n", + " } else {\n", + " var attempts = 0;\n", + " var timer = setInterval(function(root) {\n", + " if (root.Bokeh !== undefined) {\n", + " embed_document(root);\n", + " clearInterval(timer);\n", + " }\n", + " attempts++;\n", + " if (attempts > 100) {\n", + " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", + " clearInterval(timer);\n", + " }\n", + " }, 10, root)\n", + " }\n", + "})(window);" + ], + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "dec1db7c-ba41-4023-84c4-23da64b012ce" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "from bokeh.layouts import gridplot\n", + "from bokeh.plotting import figure, show, output_file\n", + "\n", + "p1 = figure(title=\"Discriminating Word Distribution\",tools=\"save\",\n", + " background_fill_color=\"#E8DDCB\")\n", + "\n", + "measured = []\n", + "for word in review_vocab:\n", + " measured.append(pos_neg_ratios[word])\n", + " \n", + "measured = np.array(measured)\n", + "hist, edges = np.histogram(measured, density=True, bins=50)\n", + "\n", + "p1.quad(top=hist, bottom=0, left=edges[:-1], right=edges[1:],\n", + " fill_color=\"#036564\", line_color=\"#033649\")\n", + "\n", + "p1.legend.location = \"center_right\"\n", + "p1.legend.background_fill_color = \"darkgrey\"\n", + "p1.xaxis.axis_label = 'log(pos/neg ratio)'\n", + "p1.yaxis.axis_label = 'relative count'\n", + "\n", + "p2 = figure(title=\"Raw Word Distribution\",tools=\"save\",\n", + " background_fill_color=\"#E8DDCB\")\n", + "\n", + "measured = []\n", + "for word in total_counts:\n", + " measured.append(total_counts[word])\n", + " \n", + "measured = np.array(measured)\n", + "hist, edges = np.histogram(measured, density=True, bins=50)\n", + "\n", + "p2.quad(top=hist, bottom=0, left=edges[:-1], right=edges[1:],\n", + " fill_color=\"#036564\", line_color=\"#033649\")\n", + "\n", + "p2.legend.location = \"center_right\"\n", + "p2.legend.background_fill_color = \"darkgrey\"\n", + "p2.xaxis.axis_label = 'word frequency'\n", + "p2.yaxis.axis_label = 'relative count'\n", + "\n", + "p3 = figure(title=\"Min Count Word Distribution\",tools=\"save\",\n", + " background_fill_color=\"#E8DDCB\")\n", + "\n", + "measured = []\n", + "for word in total_counts:\n", + " c = total_counts[word]\n", + " if c > min_count:\n", + " measured.append(c)\n", + " \n", + "measured = np.array(measured)\n", + "hist, edges = np.histogram(measured, density=True, bins=50)\n", + "\n", + "p3.quad(top=hist, bottom=0, left=edges[:-1], right=edges[1:],\n", + " fill_color=\"#036564\", line_color=\"#033649\")\n", + "\n", + "p3.legend.location = \"center_right\"\n", + "p3.legend.background_fill_color = \"darkgrey\"\n", + "p3.xaxis.axis_label = 'word frequency (above cutoff)'\n", + "p3.yaxis.axis_label = 'relative count'\n", + "\n", + "p4 = figure(title=\"Pos/Neg Distribution\",tools=\"save\",\n", + " background_fill_color=\"#E8DDCB\")\n", + "\n", + "measured = []\n", + "for term,cnt in list(total_counts.most_common()):\n", + " if(cnt >= min_count):\n", + " pos_neg_ratio = positive_counts[term] / float(negative_counts[term]+1)\n", + " measured.append(pos_neg_ratio)\n", + " \n", + "measured = np.array(measured)\n", + "hist, edges = np.histogram(measured, density=True, bins=50)\n", + "\n", + "p4.quad(top=hist, bottom=0, left=edges[:-1], right=edges[1:],\n", + " fill_color=\"#036564\", line_color=\"#033649\")\n", + "\n", + "p4.legend.location = \"center_right\"\n", + "p4.legend.background_fill_color = \"darkgrey\"\n", + "p4.xaxis.axis_label = 'pos/neg ratio'\n", + "p4.yaxis.axis_label = 'relative count'\n", + "\n", + "show(gridplot(p2,p3,p4,p1, ncols=2, plot_width=400, plot_height=400, toolbar_location=None))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 2%|▏ | 2328/100000 [00:00<00:08, 11632.00it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Creating 1-hot positive encodings\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 100000/100000 [00:08<00:00, 11171.87it/s]\n", + " 1%| | 886/100000 [00:00<00:11, 8838.60it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Creating 1-hot negative encodings\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 100000/100000 [00:12<00:00, 8294.29it/s]\n" + ] + } + ], + "source": [ + "# create mappings from words to numbers and vice versa\n", + "\n", + "word2index = {}\n", + "index2word = {}\n", + "for i, word in enumerate(review_vocab):\n", + " word2index[word] = i\n", + " index2word[i] = word\n", + "\n", + "n = len(review_vocab)\n", + "samples = len(positive)+len(negative)\n", + "all_words = word2index.keys()\n", + "\n", + "# encode 1-hot reviews\n", + "x = np.zeros((samples, n))\n", + "y = np.zeros((samples,2))\n", + "\n", + "idx = -1\n", + "print(\"Creating 1-hot positive encodings\")\n", + "for review in tqdm(positive):\n", + " idx += 1\n", + " for word in review.split(\" \"):\n", + " if word in all_words:\n", + " x[idx, word2index[word]] = 1\n", + " y[idx,0] = 1\n", + " \n", + "print(\"Creating 1-hot negative encodings\")\n", + "for review in tqdm(negative):\n", + " idx += 1\n", + " for word in review.split(\" \"):\n", + " if word in all_words:\n", + " x[idx, word2index[word]] = 1\n", + " y[idx,1] = 1\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.1, random_state=42)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Done\n" + ] + } + ], + "source": [ + "import tensorflow as tf\n", + "\n", + "# We'll bundle groups of examples during training for efficiency.\n", + "# This defines the size of the batch.\n", + "BATCH_SIZE = 100\n", + "VOCAB_SIZE = len(review_vocab)\n", + "EMBEDDING_SIZE = 64\n", + "NUM_LABELS = 2\n", + "NUM_GPUS = 2\n", + "LEARNING_RATE = 0.0005\n", + "DISPLAY_STEP = 100\n", + "NUM_STEPS = 2000\n", + "\n", + "# The random seed that defines initialization.\n", + "SEED = 42\n", + "\n", + "def model(x, prefix='model', reuse=True, is_training=True):\n", + " # Define a scope for reusing the variables\n", + " with tf.variable_scope('Model', reuse=reuse):\n", + " nn = tf.layers.dense(x, EMBEDDING_SIZE, activation=tf.nn.sigmoid, name=prefix+'_embedding')\n", + " nn = tf.layers.dense(nn, NUM_LABELS, activation=tf.nn.sigmoid, name=prefix+'_logits')\n", + " # We only apply need to apply softmax to testing network\n", + " out = tf.nn.softmax(nn) if not is_training else nn\n", + " return out\n", + "\n", + "print('Done')" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Done\n" + ] + } + ], + "source": [ + "# Build the function to average the gradients\n", + "def average_gradients(tower_grads):\n", + " average_grads = []\n", + " \n", + " # print(tower_grads)\n", + "\n", + " for grad_and_vars in zip(*tower_grads):\n", + " # Note that each grad_and_vars looks like the following:\n", + " # ((grad0_gpu0, var0_gpu0), ... , (grad0_gpuN, var0_gpuN))\n", + " grads = []\n", + " for g, _ in grad_and_vars:\n", + " # Add 0 dimension to the gradients to represent the tower.\n", + " expanded_g = tf.expand_dims(g, 0)\n", + "\n", + " # Append on a 'tower' dimension which we will average over below.\n", + " grads.append(expanded_g)\n", + "\n", + " # Average over the 'tower' dimension.\n", + " grad = tf.concat(grads, 0)\n", + " grad = tf.reduce_mean(grad, 0)\n", + "\n", + " # Keep in mind that the Variables are redundant because they are shared\n", + " # across towers. So .. we will just return the first tower's pointer to\n", + " # the Variable.\n", + " v = grad_and_vars[0][1]\n", + " grad_and_var = (grad, v)\n", + " average_grads.append(grad_and_var)\n", + " return average_grads\n", + "\n", + "print('Done')" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Done\n" + ] + } + ], + "source": [ + "# wire everything up\n", + "# By default, all variables will be placed on '/gpu:0'\n", + "# So we need a custom device function, to assign all variables to '/cpu:0'\n", + "# Note: If GPUs are peered, '/gpu:0' can be a faster option\n", + "PS_OPS = ['Variable', 'VariableV2', 'AutoReloadVariable']\n", + "\n", + "def assign_to_device(device, ps_device='/cpu:0'):\n", + " def _assign(op):\n", + " node_def = op if isinstance(op, tf.NodeDef) else op.node_def\n", + " if node_def.op in PS_OPS:\n", + " return \"/\" + ps_device\n", + " else:\n", + " return device\n", + "\n", + " return _assign\n", + "\n", + "print('Done')" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:From :37: softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "\n", + "Future major versions of TensorFlow will allow gradients to flow\n", + "into the labels input on backprop by default.\n", + "\n", + "See tf.nn.softmax_cross_entropy_with_logits_v2.\n", + "\n", + "GPU 0 configured\n", + "GPU 1 configured\n", + "Step 1: Minibatch Loss= 0.6962, Training Accuracy= 0.600, 143 Examples/sec\n", + "Step 100: Minibatch Loss= 0.5726, Training Accuracy= 0.810, 14454 Examples/sec\n", + "Step 200: Minibatch Loss= 0.5195, Training Accuracy= 0.890, 13153 Examples/sec\n", + "Step 300: Minibatch Loss= 0.4557, Training Accuracy= 0.940, 12475 Examples/sec\n", + "Step 400: Minibatch Loss= 0.4271, Training Accuracy= 0.950, 13539 Examples/sec\n", + "Step 500: Minibatch Loss= 0.4394, Training Accuracy= 0.930, 13104 Examples/sec\n", + "Step 600: Minibatch Loss= 0.3987, Training Accuracy= 0.970, 13046 Examples/sec\n", + "Step 700: Minibatch Loss= 0.4068, Training Accuracy= 0.940, 13251 Examples/sec\n", + "Step 800: Minibatch Loss= 0.3721, Training Accuracy= 0.930, 13309 Examples/sec\n", + "Step 900: Minibatch Loss= 0.3927, Training Accuracy= 0.980, 13131 Examples/sec\n", + "Step 1000: Minibatch Loss= 0.3614, Training Accuracy= 0.960, 13528 Examples/sec\n", + "Optimization Finished!\n", + "Testing Accuracy: 0.9358\n" + ] + } + ], + "source": [ + "import time\n", + "\n", + "tf.reset_default_graph()\n", + "\n", + "NUM_STEPS=1000\n", + "\n", + "# Place all ops on CPU by default\n", + "with tf.device('/cpu:0'):\n", + " tower_grads = []\n", + " reuse_vars = False\n", + " #reuse_vars = True\n", + " num_samples = X_train.shape[0]\n", + "\n", + " # tf Graph input\n", + " X = tf.placeholder(tf.float32, [None, VOCAB_SIZE])\n", + " Y = tf.placeholder(tf.float32, [None, NUM_LABELS])\n", + "\n", + " # Loop over all GPUs and construct their own computation graph\n", + " for i in range(NUM_GPUS):\n", + " with tf.device(assign_to_device('/gpu:{}'.format(i), ps_device='/cpu:0')):\n", + "\n", + " # Split data between GPUs\n", + " _x = X[i * BATCH_SIZE: (i+1) * BATCH_SIZE]\n", + " _y = Y[i * BATCH_SIZE: (i+1) * BATCH_SIZE]\n", + "\n", + " # Because Dropout have different behavior at training and prediction time, we\n", + " # need to create 2 distinct computation graphs that share the same weights.\n", + "\n", + " # Create a graph for training\n", + " logits_train = model(_x, reuse=reuse_vars, prefix=\"yelp\")\n", + " \n", + " # Create another graph for testing that reuse the same weights\n", + " logits_test = model(_x, reuse=True, prefix=\"yelp\", is_training=False)\n", + "\n", + " # Define loss and optimizer (with train logits, for dropout to take effect)\n", + " loss_op = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(\n", + " logits=logits_train, labels=_y))\n", + " optimizer = tf.train.AdamOptimizer(learning_rate=LEARNING_RATE)\n", + " grads = optimizer.compute_gradients(loss_op)\n", + " \n", + " print(\"GPU\",i,\"configured\")\n", + " \n", + " # Only first GPU compute accuracy\n", + " if i == 0:\n", + " # Evaluate model (with test logits, for dropout to be disabled)\n", + " correct_pred = tf.equal(tf.argmax(logits_test, 1), tf.argmax(_y, 1))\n", + " accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))\n", + "\n", + " reuse_vars = True\n", + " tower_grads.append(grads)\n", + "\n", + " tower_grads = average_gradients(tower_grads)\n", + " train_op = optimizer.apply_gradients(tower_grads)\n", + " \n", + " # Initializing the variables\n", + " init = tf.global_variables_initializer()\n", + "\n", + " # Launch the graph\n", + " with tf.Session() as sess:\n", + " sess.run(init)\n", + " step = 1\n", + " # Keep training until reach max iterations\n", + " for step in range(1, NUM_STEPS + 1):\n", + " # Get a batch for each GPU\n", + " indices = np.random.choice(num_samples, BATCH_SIZE*NUM_GPUS)\n", + " batch_x = X_train[indices]\n", + " batch_y = y_train[indices]\n", + " \n", + " # Run optimization op (backprop)\n", + " ts = time.time()\n", + " sess.run(train_op, feed_dict={X: batch_x, Y: batch_y})\n", + " te = time.time() - ts\n", + " if step % DISPLAY_STEP == 0 or step == 1:\n", + " # Calculate batch loss and accuracy\n", + " loss, acc = sess.run([loss_op, accuracy], feed_dict={X: batch_x,\n", + " Y: batch_y})\n", + " print(\"Step \" + str(step) + \": Minibatch Loss= \" + \\\n", + " \"{:.4f}\".format(loss) + \", Training Accuracy= \" + \\\n", + " \"{:.3f}\".format(acc) + \", %i Examples/sec\" % int(len(batch_x)/te))\n", + " step += 1\n", + " print(\"Optimization Finished!\")\n", + " \n", + " graph = tf.get_default_graph()\n", + " t1 = graph.get_tensor_by_name('Model/yelp_embedding/kernel:0')\n", + " embeddings = np.array(sess.run(t1))\n", + "\n", + " # Calculate accuracy for 1000 mnist test images\n", + " print(\"Testing Accuracy:\", \\\n", + " np.mean([sess.run(accuracy, feed_dict={X: X_test[i:i+BATCH_SIZE],\n", + " Y: y_test[i:i+BATCH_SIZE]}) for i in range(0, X_test.shape[0], BATCH_SIZE)]))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[('amazing', 4.0019403),\n", + " ('delicious', 3.989573),\n", + " ('awesome', 3.978746),\n", + " ('excellent', 3.960814),\n", + " ('great', 3.8401873),\n", + " ('perfect', 3.6464357),\n", + " ('fantastic', 3.565358),\n", + " ('love', 3.2784226),\n", + " ('best', 3.2371793),\n", + " ('thank', 3.1843255)]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def get_most_similar_words(focus = \"love\"):\n", + " keys = word2index.keys()\n", + " if focus not in keys:\n", + " print(\"Sorry, word not found\")\n", + " return\n", + " \n", + " most_similar = Counter()\n", + " for word in word2index.keys():\n", + " most_similar[word] = np.dot(embeddings[word2index[word]],\n", + " embeddings[word2index[focus]])\n", + " \n", + " return most_similar.most_common()[0:10]\n", + "\n", + "get_most_similar_words('yummy')" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.colors as colors\n", + "\n", + "words_to_visualize = list()\n", + "for word, ratio in pos_neg_ratios.most_common(500):\n", + " if(word in word2index.keys()):\n", + " words_to_visualize.append(word)\n", + " \n", + "for word, ratio in list(reversed(pos_neg_ratios.most_common()))[0:500]:\n", + " if(word in word2index.keys()):\n", + " words_to_visualize.append(word)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Pos 500 neg 500\n" + ] + } + ], + "source": [ + "pos = 0\n", + "neg = 0\n", + "\n", + "colors_list = list()\n", + "vectors_list = list()\n", + "for word in words_to_visualize:\n", + " if word in pos_neg_ratios.keys():\n", + " vectors_list.append(embeddings[word2index[word]])\n", + " if(pos_neg_ratios[word] > 0):\n", + " pos+=1\n", + " colors_list.append(\"#00ff00\")\n", + " else:\n", + " neg+=1\n", + " colors_list.append(\"#000000\")\n", + " \n", + "print(\"Pos\",pos,\"neg\",neg)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "TSNE visualization ready\n" + ] + } + ], + "source": [ + "from sklearn.manifold import TSNE\n", + "tsne = TSNE(n_components=2, random_state=0)\n", + "words_top_ted_tsne = tsne.fit_transform(vectors_list)\n", + "print(\"TSNE visualization ready\")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": [ + "(function(root) {\n", + " function embed_document(root) {\n", + " \n", + " var docs_json = {\"05ec4ef3-b65f-4ba0-a5c4-c6a64e3ded5b\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"7d4f8178-f8f8-4324-9d8c-808e54815d6c\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"84ea9f80-0bb8-4022-9c73-bd206d9c3e02\",\"type\":\"SaveTool\"},{\"attributes\":{\"callback\":null},\"id\":\"80a80ece-a971-4137-b0fb-7d0ee6cfdec7\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x1\"},\"y\":{\"field\":\"x2\"}},\"id\":\"13c651db-a16d-494e-a46b-0b3653f391d7\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"ab6a2523-0ea6-4399-90e4-c9db9daa0d15\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"714ecf93-b6d8-415f-b7c5-fcce475bb0f4\",\"type\":\"LinearScale\"},{\"attributes\":{\"callback\":null},\"id\":\"79d6a7c2-798b-43fb-bf89-f5bcf55688d9\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"47594223-a4e0-4a39-b2c5-34f028d75ce0\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"699a746e-2010-4679-8142-ff340e09ec1a\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"78f0759e-01c6-4437-8b2d-a1018d3251a3\",\"type\":\"ColumnDataSource\"}},\"id\":\"0a8b5e6f-4382-4531-9e7e-b18d4bceb17e\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"abef5fd0-5c9f-4afe-9c15-9fa63cd010f3\",\"type\":\"Selection\"},{\"attributes\":{\"plot\":{\"id\":\"1590e92e-6015-43b3-a675-a16e96426141\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e96f0b1f-7a58-4a60-a114-6af8031f7989\",\"type\":\"BasicTicker\"}},\"id\":\"c60623b7-db06-481d-af0a-46372beca0dd\",\"type\":\"Grid\"},{\"attributes\":{\"formatter\":{\"id\":\"ab6a2523-0ea6-4399-90e4-c9db9daa0d15\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"1590e92e-6015-43b3-a675-a16e96426141\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e96f0b1f-7a58-4a60-a114-6af8031f7989\",\"type\":\"BasicTicker\"}},\"id\":\"26b2befc-c139-417d-b848-ad9b06bdbcd6\",\"type\":\"LinearAxis\"},{\"attributes\":{\"plot\":{\"id\":\"1590e92e-6015-43b3-a675-a16e96426141\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"source\":{\"id\":\"78f0759e-01c6-4437-8b2d-a1018d3251a3\",\"type\":\"ColumnDataSource\"},\"text\":{\"field\":\"names\"},\"text_align\":\"center\",\"text_color\":{\"value\":\"#555555\"},\"text_font_size\":{\"value\":\"8pt\"},\"x\":{\"field\":\"x1\"},\"y\":{\"field\":\"x2\"},\"y_offset\":{\"value\":6}},\"id\":\"364a5dc2-426c-4d6f-b309-7ec1d57c20df\",\"type\":\"LabelSet\"},{\"attributes\":{},\"id\":\"e96f0b1f-7a58-4a60-a114-6af8031f7989\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"eb99db9a-e31c-4c6c-a248-4979fd20a806\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"formatter\":{\"id\":\"47594223-a4e0-4a39-b2c5-34f028d75ce0\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"1590e92e-6015-43b3-a675-a16e96426141\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"a14fca16-2892-4c83-912c-61a26d8b5262\",\"type\":\"BasicTicker\"}},\"id\":\"04f9968b-119e-4dcf-a7b4-df9dfa3410c3\",\"type\":\"LinearAxis\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"8f3b88e1-ceb2-43e3-aaa1-4a12c8d9a973\",\"type\":\"PanTool\"},{\"id\":\"a6cb7df9-08d6-4543-892e-f35f1de8972d\",\"type\":\"WheelZoomTool\"},{\"id\":\"7d4f8178-f8f8-4324-9d8c-808e54815d6c\",\"type\":\"ResetTool\"},{\"id\":\"84ea9f80-0bb8-4022-9c73-bd206d9c3e02\",\"type\":\"SaveTool\"}]},\"id\":\"78339bb8-bfd7-4e3e-a05d-8e012101e7a5\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"a14fca16-2892-4c83-912c-61a26d8b5262\",\"type\":\"BasicTicker\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"1590e92e-6015-43b3-a675-a16e96426141\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"a14fca16-2892-4c83-912c-61a26d8b5262\",\"type\":\"BasicTicker\"}},\"id\":\"24461be5-1eb5-4ba2-9ec7-82bc8df4a53e\",\"type\":\"Grid\"},{\"attributes\":{\"plot\":null,\"text\":\"vector T-SNE for most polarized words\"},\"id\":\"859c13cd-5521-42ca-bd57-ca7c1e787a8f\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"8f3b88e1-ceb2-43e3-aaa1-4a12c8d9a973\",\"type\":\"PanTool\"},{\"attributes\":{\"data_source\":{\"id\":\"78f0759e-01c6-4437-8b2d-a1018d3251a3\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"fc352e61-294b-4899-a490-06edacbdd2c7\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"13c651db-a16d-494e-a46b-0b3653f391d7\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"0a8b5e6f-4382-4531-9e7e-b18d4bceb17e\",\"type\":\"CDSView\"}},\"id\":\"d324087c-d57d-452c-9b48-b5b84301c931\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"below\":[{\"id\":\"26b2befc-c139-417d-b848-ad9b06bdbcd6\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"04f9968b-119e-4dcf-a7b4-df9dfa3410c3\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":\"26b2befc-c139-417d-b848-ad9b06bdbcd6\",\"type\":\"LinearAxis\"},{\"id\":\"c60623b7-db06-481d-af0a-46372beca0dd\",\"type\":\"Grid\"},{\"id\":\"04f9968b-119e-4dcf-a7b4-df9dfa3410c3\",\"type\":\"LinearAxis\"},{\"id\":\"24461be5-1eb5-4ba2-9ec7-82bc8df4a53e\",\"type\":\"Grid\"},{\"id\":\"d324087c-d57d-452c-9b48-b5b84301c931\",\"type\":\"GlyphRenderer\"},{\"id\":\"364a5dc2-426c-4d6f-b309-7ec1d57c20df\",\"type\":\"LabelSet\"}],\"title\":{\"id\":\"859c13cd-5521-42ca-bd57-ca7c1e787a8f\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"78339bb8-bfd7-4e3e-a05d-8e012101e7a5\",\"type\":\"Toolbar\"},\"toolbar_location\":\"above\",\"x_range\":{\"id\":\"80a80ece-a971-4137-b0fb-7d0ee6cfdec7\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"714ecf93-b6d8-415f-b7c5-fcce475bb0f4\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"79d6a7c2-798b-43fb-bf89-f5bcf55688d9\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"699a746e-2010-4679-8142-ff340e09ec1a\",\"type\":\"LinearScale\"}},\"id\":\"1590e92e-6015-43b3-a675-a16e96426141\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_color\":{\"field\":\"color\"},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"x1\"},\"y\":{\"field\":\"x2\"}},\"id\":\"fc352e61-294b-4899-a490-06edacbdd2c7\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"a6cb7df9-08d6-4543-892e-f35f1de8972d\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"callback\":null,\"data\":{\"color\":[\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#00ff00\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\",\"#000000\"],\"names\":[\"acupuncture\",\"addicting\",\"scrumptious\",\"cutest\",\"unassuming\",\"mmmmm\",\"gem\",\"trails\",\"meticulous\",\"nom\",\"perfection\",\"devoured\",\"unbeatable\",\"expertly\",\"growler\",\"deliciously\",\"addictive\",\"coolest\",\"pinball\",\"unpretentious\",\"superb\",\"faves\",\"deliciousi\",\"pleasantly\",\"rhubarb\",\"addicted\",\"wonderfully\",\"amazingthe\",\"delectable\",\"exceeded\",\"delightfully\",\"decadent\",\"awesomeness\",\"amazingi\",\"phenomenal\",\"deliciousness\",\"divine\",\"incredible\",\"listens\",\"delish\",\"dedication\",\"familyowned\",\"drawback\",\"jeden\",\"impeccable\",\"coma\",\"delicious\",\"elk\",\"refreshing\",\"heaven\",\"painless\",\"yummy\",\"sweetest\",\"complemented\",\"deliciousthe\",\"pasties\",\"exquisite\",\"yum\",\"disappoint\",\"heavenly\",\"perfect\",\"enhanced\",\"luscious\",\"goodies\",\"knowledgeable\",\"magnificent\",\"downside\",\"compliments\",\"informative\",\"fantastic\",\"passionate\",\"produits\",\"knowledgable\",\"melts\",\"amazing\",\"favorites\",\"guava\",\"delighted\",\"sublime\",\"laidback\",\"intimate\",\"savory\",\"eclectic\",\"drool\",\"affordable\",\"relaxed\",\"topnotch\",\"notch\",\"mmm\",\"favs\",\"outstanding\",\"creaminess\",\"paired\",\"perfectionist\",\"secrets\",\"excellent\",\"talented\",\"drooling\",\"terrific\",\"awesome\",\"trail\",\"beautifully\",\"hearty\",\"flawless\",\"cozy\",\"obsessed\",\"surpassed\",\"mouthwatering\",\"favourites\",\"pairings\",\"crossfit\",\"wonderful\",\"transformed\",\"complimented\",\"mascarpone\",\"masterpiece\",\"concoctions\",\"byob\",\"textures\",\"disappoints\",\"nutty\",\"bryan\",\"uniquely\",\"apricot\",\"fab\",\"perfectly\",\"diverse\",\"serene\",\"immaculate\",\"delight\",\"succulent\",\"adventurous\",\"unique\",\"customize\",\"amaze\",\"delightful\",\"stumbled\",\"arepas\",\"highly\",\"homey\",\"bliss\",\"nestled\",\"cosy\",\"punctual\",\"awsome\",\"fav\",\"compares\",\"asset\",\"rivals\",\"lowkey\",\"combinations\",\"torte\",\"savoury\",\"ease\",\"bomb\",\"favorite\",\"marvelous\",\"toasty\",\"comforting\",\"fabulous\",\"adorable\",\"approachable\",\"favourite\",\"fave\",\"compote\",\"guu\",\"lecker\",\"buttery\",\"brilliant\",\"restored\",\"mmmm\",\"personalized\",\"exemplary\",\"calming\",\"explosion\",\"warmly\",\"pilates\",\"stunning\",\"choix\",\"supportive\",\"richness\",\"seamless\",\"aromatic\",\"rarity\",\"defiantly\",\"macadamia\",\"thyme\",\"edinburgh\",\"peaceful\",\"loved\",\"indecisive\",\"kiwi\",\"breathtaking\",\"reasonably\",\"burrata\",\"botanical\",\"spacious\",\"quaint\",\"randy\",\"brews\",\"resist\",\"carnivore\",\"compassionate\",\"frankie\",\"secluded\",\"wealth\",\"energetic\",\"thoughtful\",\"beginner\",\"shaded\",\"balanced\",\"bonus\",\"lucked\",\"juste\",\"upbeat\",\"bouche\",\"personable\",\"gems\",\"elegant\",\"gorgeous\",\"endroit\",\"magical\",\"montral\",\"jeremy\",\"adobada\",\"fascinating\",\"juicy\",\"creative\",\"homemade\",\"stout\",\"toffee\",\"infused\",\"intimidated\",\"inventive\",\"tastefully\",\"jy\",\"wholesome\",\"plusieurs\",\"indulged\",\"soju\",\"gifted\",\"unwind\",\"patisserie\",\"hooked\",\"fluffy\",\"amazingly\",\"pleasure\",\"lovers\",\"freshest\",\"quail\",\"savor\",\"charlie\",\"fragrant\",\"treasures\",\"ian\",\"thorough\",\"sorbet\",\"breads\",\"handmade\",\"sweetness\",\"toujours\",\"tuscan\",\"almonds\",\"porchetta\",\"paths\",\"caramelized\",\"galleries\",\"roomy\",\"classics\",\"spotless\",\"tastings\",\"creations\",\"sexy\",\"ginormous\",\"guides\",\"hiking\",\"contemporary\",\"soothing\",\"hesitate\",\"efficient\",\"airy\",\"romantic\",\"kiddos\",\"grassy\",\"crafted\",\"candies\",\"exceptional\",\"addiction\",\"paninis\",\"bustle\",\"smiley\",\"creation\",\"indulge\",\"coco\",\"woohoo\",\"sweets\",\"love\",\"reasonable\",\"assortment\",\"heartbeat\",\"hesitation\",\"complement\",\"sweeter\",\"andy\",\"burgh\",\"winner\",\"tucked\",\"iconic\",\"gruyere\",\"beatles\",\"nicest\",\"casual\",\"skeptical\",\"exceeds\",\"durian\",\"moist\",\"goals\",\"trifecta\",\"incline\",\"nailed\",\"array\",\"dreaming\",\"killer\",\"saki\",\"accompaniment\",\"flavorful\",\"adore\",\"overlooks\",\"delights\",\"blends\",\"tortas\",\"graham\",\"mecca\",\"gorgonzola\",\"daikon\",\"recommendations\",\"unforgettable\",\"happier\",\"barre\",\"earthy\",\"workouts\",\"raspberries\",\"expanded\",\"dope\",\"comfy\",\"baba\",\"definite\",\"friendliest\",\"scottish\",\"shines\",\"crisps\",\"conscientious\",\"cheerful\",\"enjoyed\",\"chandeliers\",\"rich\",\"luv\",\"scones\",\"great\",\"truffles\",\"glam\",\"craft\",\"loves\",\"spicier\",\"chill\",\"dreams\",\"gentle\",\"goto\",\"accommodating\",\"colorful\",\"casey\",\"skyline\",\"maine\",\"housed\",\"wonderland\",\"blessed\",\"definetly\",\"gardens\",\"dream\",\"courteous\",\"cristo\",\"pistachios\",\"gabriel\",\"bravo\",\"twists\",\"furry\",\"bonne\",\"helpful\",\"vegan\",\"hoover\",\"wagyu\",\"cycling\",\"aussi\",\"brle\",\"historic\",\"breeze\",\"scenery\",\"fritters\",\"intrusive\",\"stephen\",\"genuine\",\"silky\",\"skilled\",\"northeast\",\"baguettes\",\"prompt\",\"confit\",\"ales\",\"friendly\",\"mountains\",\"creamy\",\"additions\",\"testament\",\"hazelnut\",\"tender\",\"hike\",\"tangy\",\"comfortable\",\"appreciative\",\"vindaloo\",\"def\",\"devils\",\"beautiful\",\"stylish\",\"earls\",\"brasserie\",\"yuzu\",\"seasonal\",\"watering\",\"pleased\",\"dulce\",\"explore\",\"croissants\",\"flavourful\",\"glad\",\"chocolates\",\"hannah\",\"medallions\",\"rebecca\",\"cheesecakes\",\"distillery\",\"welcoming\",\"crme\",\"innovative\",\"blossom\",\"tastiest\",\"foie\",\"pistachio\",\"beaten\",\"secret\",\"bustling\",\"turkish\",\"charts\",\"guided\",\"apprehensive\",\"picnic\",\"blessing\",\"handsome\",\"elote\",\"threading\",\"bursting\",\"duo\",\"perfected\",\"tremendous\",\"flexible\",\"performances\",\"views\",\"museums\",\"attentive\",\"intimidating\",\"tartare\",\"refreshed\",\"croque\",\"spiciness\",\"absinthe\",\"belle\",\"candied\",\"pate\",\"rocked\",\"amuse\",\"pam\",\"loving\",\"featuring\",\"utmost\",\"escargot\",\"butternut\",\"stroll\",\"variety\",\"styles\",\"cheers\",\"noda\",\"crudo\",\"artistic\",\"leek\",\"lunchdinner\",\"tako\",\"praises\",\"bosa\",\"girly\",\"bellini\",\"humiliated\",\"disregarded\",\"harassment\",\"discriminated\",\"unprofessionalism\",\"aggravation\",\"confrontational\",\"thief\",\"uncalled\",\"disrespected\",\"disgrace\",\"unethical\",\"liars\",\"worthless\",\"unprofessional\",\"rancid\",\"centurylink\",\"rudest\",\"violations\",\"incompetence\",\"scammers\",\"compensation\",\"inept\",\"feces\",\"appalling\",\"incompetent\",\"reimbursement\",\"unresponsive\",\"disrespectful\",\"ignores\",\"accusing\",\"disrespect\",\"unacceptable\",\"abusive\",\"insulting\",\"enemy\",\"blaming\",\"forwarded\",\"argumentative\",\"refunding\",\"uncaring\",\"livid\",\"unhelpful\",\"unattentive\",\"disputing\",\"vile\",\"audacity\",\"filth\",\"dissatisfaction\",\"scam\",\"blatant\",\"threatened\",\"cockroach\",\"worst\",\"fraudulent\",\"accused\",\"refund\",\"apology\",\"rudely\",\"harassing\",\"slowest\",\"inexcusable\",\"unwilling\",\"lied\",\"careless\",\"poisoning\",\"uneducated\",\"unevenly\",\"disgusted\",\"insult\",\"crooks\",\"discrimination\",\"appalled\",\"acknowledgement\",\"acknowledgment\",\"defensive\",\"liar\",\"overcharged\",\"expressing\",\"disgusting\",\"argued\",\"sarcastically\",\"unseasoned\",\"theft\",\"misfortune\",\"redeeming\",\"pathetic\",\"refused\",\"mumbled\",\"dispute\",\"dishonest\",\"tasteless\",\"laughable\",\"belligerent\",\"dismissive\",\"cancelling\",\"modem\",\"harassed\",\"filthy\",\"supervisor\",\"nonchalant\",\"deplorable\",\"horrible\",\"reeked\",\"furious\",\"tablespoon\",\"hostile\",\"incapable\",\"blankly\",\"undrinkable\",\"acetone\",\"fraud\",\"mildew\",\"yuck\",\"arguing\",\"thieves\",\"decency\",\"rude\",\"snide\",\"gossiping\",\"voicemails\",\"yelled\",\"bait\",\"lawsuit\",\"abysmal\",\"shrugged\",\"shorted\",\"negligence\",\"confronted\",\"poorly\",\"threatening\",\"refusing\",\"inedible\",\"refunds\",\"demanded\",\"bureau\",\"flavorless\",\"visibly\",\"terrible\",\"blamed\",\"unsanitary\",\"demeaning\",\"lousy\",\"moron\",\"mislead\",\"runaround\",\"blatantly\",\"denied\",\"scammed\",\"congealed\",\"downhill\",\"disconnected\",\"scum\",\"payless\",\"unfriendly\",\"sewage\",\"moldy\",\"diarrhea\",\"awful\",\"unwelcoming\",\"racist\",\"rudeness\",\"saddest\",\"horrendous\",\"insulted\",\"swearing\",\"uninterested\",\"disgustingly\",\"disinterested\",\"behaviour\",\"contaminated\",\"disgust\",\"ignorant\",\"roaches\",\"reimburse\",\"inconsiderate\",\"violently\",\"dispatch\",\"agitated\",\"cockroaches\",\"authorization\",\"unapologetic\",\"dumbfounded\",\"unappealing\",\"wtf\",\"smh\",\"horrid\",\"faxed\",\"eff\",\"reciept\",\"displeasure\",\"verbally\",\"refunded\",\"voicemail\",\"condescending\",\"roach\",\"robbery\",\"impolite\",\"sloppily\",\"stormed\",\"apologies\",\"vomiting\",\"microwaved\",\"bbb\",\"aweful\",\"immature\",\"disorganized\",\"pissed\",\"cancel\",\"issued\",\"flirting\",\"threaten\",\"inaccurate\",\"sarcasm\",\"upsetting\",\"unorganized\",\"untrained\",\"inattentive\",\"atrocious\",\"ripoff\",\"refuses\",\"indicating\",\"acted\",\"slop\",\"asshole\",\"robbed\",\"cancelled\",\"stale\",\"ignored\",\"waste\",\"passive\",\"apologizes\",\"filed\",\"billed\",\"shameful\",\"defective\",\"rotten\",\"improperly\",\"excuses\",\"unclean\",\"unimpressed\",\"ignoring\",\"poor\",\"reply\",\"bully\",\"snippy\",\"replied\",\"urine\",\"documentation\",\"crooked\",\"worse\",\"acknowledging\",\"caked\",\"lukewarm\",\"deceptive\",\"substandard\",\"unanswered\",\"leaked\",\"arrogant\",\"meanwhile\",\"possession\",\"rotting\",\"harass\",\"horrific\",\"dissapointing\",\"supervisors\",\"reporting\",\"response\",\"existent\",\"apologizing\",\"ticked\",\"plague\",\"responsibility\",\"mediocre\",\"unappetizing\",\"acknowledge\",\"notify\",\"ontrac\",\"losses\",\"morons\",\"argument\",\"mysteriously\",\"yells\",\"ruined\",\"proceeded\",\"canceling\",\"horribly\",\"unreliable\",\"rip\",\"misunderstood\",\"zero\",\"garbage\",\"nauseous\",\"acknowledged\",\"accountability\",\"displeased\",\"agreement\",\"irritated\",\"apologize\",\"undercooked\",\"apathetic\",\"clueless\",\"expired\",\"wasted\",\"dirtiest\",\"questioned\",\"waitedand\",\"measly\",\"notified\",\"replies\",\"idiots\",\"renter\",\"arrogance\",\"nasty\",\"overbooked\",\"bogus\",\"embarrassment\",\"stating\",\"consumers\",\"horrified\",\"piss\",\"payed\",\"inconveniencing\",\"informs\",\"complained\",\"flagged\",\"monopoly\",\"recieve\",\"behavior\",\"principle\",\"mold\",\"flavourless\",\"claiming\",\"false\",\"receipt\",\"hostage\",\"disaster\",\"billing\",\"shield\",\"incidents\",\"revenue\",\"reiterated\",\"smug\",\"incomplete\",\"violation\",\"shoddy\",\"grossly\",\"credited\",\"owed\",\"laziness\",\"chalked\",\"dumped\",\"gross\",\"honoring\",\"yelling\",\"interrupt\",\"implied\",\"deleted\",\"confirming\",\"uninspired\",\"remorse\",\"snarky\",\"inefficient\",\"marginal\",\"childish\",\"rescheduled\",\"meager\",\"grossed\",\"charged\",\"cancellation\",\"surly\",\"stares\",\"attempted\",\"wth\",\"useless\",\"disturbing\",\"blech\",\"thawed\",\"subpar\",\"argue\",\"screwed\",\"canceled\",\"medication\",\"cox\",\"rung\",\"interrupting\",\"receipts\",\"letter\",\"uneven\",\"frustration\",\"repeatedly\",\"shitty\",\"unhappy\",\"forgiving\",\"inappropriate\",\"notification\",\"lease\",\"absurd\",\"upset\",\"expire\",\"deposits\",\"operator\",\"disappointing\",\"infested\",\"underwhelmed\",\"interrupted\",\"nausea\",\"bouncer\",\"dissatisfied\",\"proceeds\",\"incorrectly\",\"stared\",\"unremarkable\",\"excuse\",\"edible\",\"rubbery\",\"stolen\",\"excused\",\"deteriorated\",\"misinformed\",\"compensate\",\"puddle\",\"contract\",\"irate\",\"honour\",\"barked\",\"inconvenienced\",\"illegal\",\"inexperienced\",\"unwelcome\",\"insisting\",\"alerted\",\"angry\",\"damages\",\"strep\",\"misery\",\"discrepancy\",\"overrated\",\"submitted\",\"reschedule\",\"explicitly\",\"profanity\",\"unsatisfactory\",\"investigation\",\"reluctantly\",\"cursing\",\"stinks\",\"incorrect\",\"policy\",\"emailing\",\"avail\",\"rotors\",\"ruining\",\"annoyed\",\"tells\",\"gristle\",\"moral\",\"disabled\",\"indifferent\",\"repeated\",\"confirmation\",\"limp\",\"supposedly\",\"bland\",\"dispatcher\",\"sympathy\",\"representatives\",\"reimbursed\",\"deductible\",\"anger\",\"unimpressive\",\"sorely\",\"pos\",\"frustrated\",\"deaf\",\"permission\",\"smeared\",\"consent\",\"wiped\",\"inform\",\"sucks\",\"abruptly\",\"blah\",\"slimy\",\"letdown\",\"cheated\",\"phoned\",\"wasting\",\"deposit\",\"severely\",\"file\",\"delete\",\"arbys\",\"blaring\",\"errors\",\"miserable\",\"disappeared\",\"baffled\",\"uneaten\",\"faulty\"],\"x1\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"shape\":[1000]},\"x2\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"shape\":[1000]}},\"selected\":{\"id\":\"abef5fd0-5c9f-4afe-9c15-9fa63cd010f3\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"eb99db9a-e31c-4c6c-a248-4979fd20a806\",\"type\":\"UnionRenderers\"}},\"id\":\"78f0759e-01c6-4437-8b2d-a1018d3251a3\",\"type\":\"ColumnDataSource\"}],\"root_ids\":[\"1590e92e-6015-43b3-a675-a16e96426141\"]},\"title\":\"Bokeh Application\",\"version\":\"0.13.0\"}};\n", + " var render_items = [{\"docid\":\"05ec4ef3-b65f-4ba0-a5c4-c6a64e3ded5b\",\"roots\":{\"1590e92e-6015-43b3-a675-a16e96426141\":\"deba4cf8-d90c-431c-a2bc-e2c817dfd9e3\"}}];\n", + " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", + "\n", + " }\n", + " if (root.Bokeh !== undefined) {\n", + " embed_document(root);\n", + " } else {\n", + " var attempts = 0;\n", + " var timer = setInterval(function(root) {\n", + " if (root.Bokeh !== undefined) {\n", + " embed_document(root);\n", + " clearInterval(timer);\n", + " }\n", + " attempts++;\n", + " if (attempts > 100) {\n", + " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", + " clearInterval(timer);\n", + " }\n", + " }, 10, root)\n", + " }\n", + "})(window);" + ], + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "1590e92e-6015-43b3-a675-a16e96426141" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "p = figure(tools=\"pan,wheel_zoom,reset,save\",\n", + " toolbar_location=\"above\",\n", + " title=\"vector T-SNE for most polarized words\")\n", + "\n", + "source = ColumnDataSource(data=dict(x1=words_top_ted_tsne[:,0],\n", + " x2=words_top_ted_tsne[:,1],\n", + " names=words_to_visualize,\n", + " color=colors_list))\n", + "\n", + "p.scatter(x=\"x1\", y=\"x2\", size=8, source=source, fill_color=\"color\")\n", + "\n", + "word_labels = LabelSet(x=\"x1\", y=\"x2\", text=\"names\", y_offset=6,\n", + " text_font_size=\"8pt\", text_color=\"#555555\",\n", + " source=source, text_align='center')\n", + "p.add_layout(word_labels)\n", + "\n", + "show(p)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}