{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"intent_classification_airlines_ATIS.ipynb","provenance":[],"collapsed_sections":[]},"kernelspec":{"name":"python3","display_name":"Python 3"}},"cells":[{"cell_type":"markdown","metadata":{"id":"ZE4c3HMSkGGu"},"source":["![JohnSnowLabs](https://nlp.johnsnowlabs.com/assets/images/logo.png)\n","\n","\n","[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/JohnSnowLabs/nlu/blob/master/examples/colab/component_examples/classifiers/intent_classification_airlines_ATIS.ipynb)\n","\n","# Intent Classification with NLU\n","\n","|Type | \tDescription |\n","|------|--------------|\n"," | atis_airfare|air fares, like **500 $**\n"," | atis_ground_service|gorund services like, **Transporation**\n"," | atis_flight|aits flights like, **6B12**\n"," | atis_airline|atis airline like, **Emirates**\n"," | atis_abbreviation|atis abbreviations like, **air fare q**\n"," \n","# What is the ATIS Dataset?\n","ATIS dataset provides large number of messages and their associated intents that can be used in training a classifier. Within a chatbot, intent refers to the goal the customer has in mind when typing in a question or comment. While entity refers to the modifier the customer uses to describe their issue, the intent is what they really mean. For example, a user says, ‘I need new shoes.’ The intent behind the message is to browse the footwear on offer. Understanding the intent of the customer is key to implementing a successful chatbot experience for end-user.\n","https://www.kaggle.com/hassanamin/atis-airlinetravelinformationsystem\n","\n"]},{"cell_type":"code","metadata":{"id":"SF5-Z-U4jukd","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1649990147602,"user_tz":-300,"elapsed":111768,"user":{"displayName":"Gammer Otaku","userId":"18042713576744284398"}},"outputId":"e2ab06a7-7811-4539-8212-41c21af55334"},"source":["!wget https://setup.johnsnowlabs.com/nlu/colab.sh -O - | bash\n"," \n","\n","import nlu"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["--2022-04-15 02:33:54-- https://setup.johnsnowlabs.com/nlu/colab.sh\n","Resolving setup.johnsnowlabs.com (setup.johnsnowlabs.com)... 51.158.130.125\n","Connecting to setup.johnsnowlabs.com (setup.johnsnowlabs.com)|51.158.130.125|:443... connected.\n","HTTP request sent, awaiting response... 302 Moved Temporarily\n","Location: https://raw.githubusercontent.com/JohnSnowLabs/nlu/master/scripts/colab_setup.sh [following]\n","--2022-04-15 02:33:54-- https://raw.githubusercontent.com/JohnSnowLabs/nlu/master/scripts/colab_setup.sh\n","Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...\n","Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected.\n","HTTP request sent, awaiting response... 200 OK\n","Length: 1665 (1.6K) [text/plain]\n","Saving to: ‘STDOUT’\n","\n","- 100%[===================>] 1.63K --.-KB/s in 0s \n","\n","2022-04-15 02:33:55 (28.6 MB/s) - written to stdout [1665/1665]\n","\n","Installing NLU 3.4.3rc2 with PySpark 3.0.3 and Spark NLP 3.4.2 for Google Colab ...\n","Get:1 https://cloud.r-project.org/bin/linux/ubuntu bionic-cran40/ InRelease [3,626 B]\n","Ign:2 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 InRelease\n","Ign:3 https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 InRelease\n","Get:4 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 Release [696 B]\n","Hit:5 https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 Release\n","Get:6 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 Release.gpg [836 B]\n","Get:7 http://ppa.launchpad.net/c2d4u.team/c2d4u4.0+/ubuntu bionic InRelease [15.9 kB]\n","Hit:8 http://archive.ubuntu.com/ubuntu bionic InRelease\n","Get:9 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]\n","Get:10 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]\n","Hit:11 http://ppa.launchpad.net/cran/libgit2/ubuntu bionic InRelease\n","Get:13 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]\n","Get:14 http://ppa.launchpad.net/deadsnakes/ppa/ubuntu bionic InRelease [15.9 kB]\n","Get:15 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 Packages [953 kB]\n","Hit:16 http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu bionic InRelease\n","Get:17 http://ppa.launchpad.net/c2d4u.team/c2d4u4.0+/ubuntu bionic/main Sources [1,947 kB]\n","Get:18 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [1,490 kB]\n","Get:19 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [3,134 kB]\n","Get:20 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [2,695 kB]\n","Get:21 http://ppa.launchpad.net/c2d4u.team/c2d4u4.0+/ubuntu bionic/main amd64 Packages [996 kB]\n","Get:22 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [2,268 kB]\n","Get:23 http://ppa.launchpad.net/deadsnakes/ppa/ubuntu bionic/main amd64 Packages [45.3 kB]\n","Fetched 13.8 MB in 4s (3,725 kB/s)\n","Reading package lists... Done\n","tar: spark-3.0.2-bin-hadoop2.7.tgz: Cannot open: No such file or directory\n","tar: Error is not recoverable: exiting now\n","\u001b[K |████████████████████████████████| 209.1 MB 55 kB/s \n","\u001b[K |████████████████████████████████| 142 kB 48.8 MB/s \n","\u001b[K |████████████████████████████████| 505 kB 45.5 MB/s \n","\u001b[K |████████████████████████████████| 198 kB 56.6 MB/s \n","\u001b[?25h Building wheel for pyspark (setup.py) ... \u001b[?25l\u001b[?25hdone\n","Collecting nlu_tmp==3.4.3rc10\n"," Downloading nlu_tmp-3.4.3rc10-py3-none-any.whl (510 kB)\n","\u001b[K |████████████████████████████████| 510 kB 5.0 MB/s \n","\u001b[?25hRequirement already satisfied: pandas>=1.3.5 in /usr/local/lib/python3.7/dist-packages (from nlu_tmp==3.4.3rc10) (1.3.5)\n","Requirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from nlu_tmp==3.4.3rc10) (1.21.5)\n","Requirement already satisfied: pyarrow>=0.16.0 in /usr/local/lib/python3.7/dist-packages (from nlu_tmp==3.4.3rc10) (6.0.1)\n","Requirement already satisfied: dataclasses in /usr/local/lib/python3.7/dist-packages (from nlu_tmp==3.4.3rc10) (0.6)\n","Requirement already satisfied: spark-nlp<3.5.0,>=3.4.2 in /usr/local/lib/python3.7/dist-packages (from nlu_tmp==3.4.3rc10) (3.4.2)\n","Requirement already satisfied: pytz>=2017.3 in /usr/local/lib/python3.7/dist-packages (from pandas>=1.3.5->nlu_tmp==3.4.3rc10) (2018.9)\n","Requirement already satisfied: python-dateutil>=2.7.3 in /usr/local/lib/python3.7/dist-packages (from pandas>=1.3.5->nlu_tmp==3.4.3rc10) (2.8.2)\n","Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.7.3->pandas>=1.3.5->nlu_tmp==3.4.3rc10) (1.15.0)\n","Installing collected packages: nlu-tmp\n","Successfully installed nlu-tmp-3.4.3rc10\n"]}]},{"cell_type":"code","metadata":{"id":"51Zr-JvU4xEg","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1649990148234,"user_tz":-300,"elapsed":665,"user":{"displayName":"Gammer Otaku","userId":"18042713576744284398"}},"outputId":"9edca62f-a258-4563-fa37-791f1ce4b77e"},"source":["# Download the dataset \n","! wget http://ckl-it.de/wp-content/uploads/2021/01/atis_intents.csv\n"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["--2022-04-15 02:35:46-- http://ckl-it.de/wp-content/uploads/2021/01/atis_intents.csv\n","Resolving ckl-it.de (ckl-it.de)... 217.160.0.108, 2001:8d8:100f:f000::209\n","Connecting to ckl-it.de (ckl-it.de)|217.160.0.108|:80... connected.\n","HTTP request sent, awaiting response... 200 OK\n","Length: 391936 (383K) [text/csv]\n","Saving to: ‘atis_intents.csv’\n","\n","atis_intents.csv 100%[===================>] 382.75K 669KB/s in 0.6s \n","\n","2022-04-15 02:35:47 (669 KB/s) - ‘atis_intents.csv’ saved [391936/391936]\n","\n"]}]},{"cell_type":"markdown","metadata":{"id":"yZ7R8bho2kXI"},"source":["# Predict Intent of Airline messages"]},{"cell_type":"code","metadata":{"id":"7GJX5d6mjk5j","colab":{"base_uri":"https://localhost:8080/","height":580},"executionInfo":{"status":"ok","timestamp":1649990290799,"user_tz":-300,"elapsed":142581,"user":{"displayName":"Gammer Otaku","userId":"18042713576744284398"}},"outputId":"384404ea-9b81-48a3-eb65-024b784020c8"},"source":["import nlu \n","import pandas as pd\n","\n","df = pd.read_csv(\"atis_intents.csv\")\n","df.columns = [\"flight\",\"text\"]\n","\n","preds = nlu.load('en.classify.intent.airline').predict(df[\"text\"],output_level='sentence')\n","preds"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["classifierdl_use_atis download started this may take some time.\n","Approximate size to download 21.1 MB\n","[OK!]\n","tfhub_use download started this may take some time.\n","Approximate size to download 923.7 MB\n","[OK!]\n","sentence_detector_dl download started this may take some time.\n","Approximate size to download 354.6 KB\n","[OK!]\n"]},{"output_type":"execute_result","data":{"text/plain":[" intent intent_confidence_confidence \\\n","0 atis_flight 0.999994 \n","1 atis_flight 0.999997 \n","2 atis_airfare 0.997928 \n","3 atis_airfare 1.0 \n","4 atis_flight 0.999996 \n","... ... ... \n","4972 atis_airfare 0.999503 \n","4973 atis_flight 0.999994 \n","4974 atis_airline 1.0 \n","4975 atis_flight 0.994565 \n","4976 atis_flight 0.999779 \n","\n"," sentence \\\n","0 what flights are available from pittsburgh to ... \n","1 what is the arrival time in san francisco for ... \n","2 cheapest airfare from tacoma to orlando \n","3 round trip fares from pittsburgh to philadelph... \n","4 i need a flight tomorrow from columbus to minn... \n","... ... \n","4972 what is the airfare for flights from denver to... \n","4973 do you have any flights from denver to baltimo... \n","4974 which airlines fly into and out of denver \n","4975 does continental fly from boston to san franci... \n","4976 is there a delta flight from denver to san fra... \n","\n"," sentence_embedding_use \n","0 [0.037106938660144806, 0.0727505013346672, -0.... \n","1 [0.020266082137823105, 0.044293809682130814, -... \n","2 [0.05529679358005524, 0.0694049745798111, -0.0... \n","3 [0.044724948704242706, 0.07032939791679382, -0... \n","4 [-0.0009330636239610612, 0.0720256119966507, -... \n","... ... \n","4972 [0.015531656332314014, 0.06927467882633209, -0... \n","4973 [0.03598876670002937, 0.06490834802389145, -0.... \n","4974 [0.0314473956823349, 0.0699605792760849, -0.06... \n","4975 [0.01851840876042843, 0.07567648589611053, -0.... \n","4976 [0.026785779744386673, 0.06964033842086792, -0... \n","\n","[4977 rows x 4 columns]"],"text/html":["\n","
\n","
\n","
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
intentintent_confidence_confidencesentencesentence_embedding_use
0atis_flight0.999994what flights are available from pittsburgh to ...[0.037106938660144806, 0.0727505013346672, -0....
1atis_flight0.999997what is the arrival time in san francisco for ...[0.020266082137823105, 0.044293809682130814, -...
2atis_airfare0.997928cheapest airfare from tacoma to orlando[0.05529679358005524, 0.0694049745798111, -0.0...
3atis_airfare1.0round trip fares from pittsburgh to philadelph...[0.044724948704242706, 0.07032939791679382, -0...
4atis_flight0.999996i need a flight tomorrow from columbus to minn...[-0.0009330636239610612, 0.0720256119966507, -...
...............
4972atis_airfare0.999503what is the airfare for flights from denver to...[0.015531656332314014, 0.06927467882633209, -0...
4973atis_flight0.999994do you have any flights from denver to baltimo...[0.03598876670002937, 0.06490834802389145, -0....
4974atis_airline1.0which airlines fly into and out of denver[0.0314473956823349, 0.0699605792760849, -0.06...
4975atis_flight0.994565does continental fly from boston to san franci...[0.01851840876042843, 0.07567648589611053, -0....
4976atis_flight0.999779is there a delta flight from denver to san fra...[0.026785779744386673, 0.06964033842086792, -0...
\n","

4977 rows × 4 columns

\n","
\n"," \n"," \n"," \n","\n"," \n","
\n","
\n"," "]},"metadata":{},"execution_count":3}]},{"cell_type":"markdown","metadata":{"id":"HH6KBffB2pY_"},"source":["# Plot Distribution of Intent in Messages"]},{"cell_type":"code","metadata":{"id":"WdnY9n1LTmed","colab":{"base_uri":"https://localhost:8080/","height":388},"executionInfo":{"status":"ok","timestamp":1649990290804,"user_tz":-300,"elapsed":22,"user":{"displayName":"Gammer Otaku","userId":"18042713576744284398"}},"outputId":"36c79ee1-9285-4d11-a8ab-ff030e1e1710"},"source":["preds.intent.value_counts().plot.bar(title='Distribution of message intents')"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":4},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}]}]}