nlp-lab/Jonas_Solutions/Task_02_JonasWeinz.ipynb

1661 lines
188 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# NLP-LAB Exercise 02 by Jonas Weinz (2571421)\n",
"## links:\n",
"\n",
"* Article: https://miguelmalvarez.com/2017/03/23/how-can-machine-learning-and-ai-help-solving-the-fake-news-problem/\n",
" * corresponding code: https://github.com/kjam/random_hackery/blob/master/Attempting%20to%20detect%20fake%20news.ipynb\n",
"\n",
"* Tutorial on Datacamp: https://www.datacamp.com/community/tutorials/scikit-learn-fake-news\n",
"\n",
"* liar dataset paper: https://www.cs.ucsb.edu/~william/papers/acl2017.pdf\n",
" * dataset: https://www.cs.ucsb.edu/~william/data/liar_dataset.zip\n",
"\n",
"* Mex Vocabulary: http://jens-lehmann.org/files/2015/semantics_mex.pdf"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Dependencies for this Notebook:\n",
"* library [rdflib](https://github.com/RDFLib/rdflib)\n",
" * install: `pip3 install rdflib`\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%pylab inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import itertools\n",
"import sklearn.utils as sku\n",
"from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer, HashingVectorizer\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.linear_model import PassiveAggressiveClassifier\n",
"from sklearn.naive_bayes import MultinomialNB\n",
"from sklearn import metrics\n",
"import matplotlib.pyplot as plt\n",
"from pprint import pprint as pp\n",
"from IPython.display import display, Markdown, Latex\n",
"import collections\n",
"import traceback\n",
"import os\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Tools used later"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"def plot_confusion_matrix(cm, classes,\n",
" title,\n",
" normalize=False,\n",
" cmap=plt.cm.Blues):\n",
" fig_1, ax_1 = plt.subplots()\n",
" \"\"\"\n",
" See full source and example: \n",
" http://scikit-learn.org/stable/auto_examples/model_selection/plot_confusion_matrix.html\n",
" \n",
" This function prints and plots the confusion matrix.\n",
" Normalization can be applied by setting `normalize=True`.\n",
" \"\"\"\n",
" plt.imshow(cm, interpolation='nearest', cmap=cmap)\n",
" plt.title('Confusion Matrix for:\\n' + title)\n",
" plt.colorbar()\n",
" tick_marks = np.arange(len(classes))\n",
" plt.xticks(tick_marks, classes, rotation=45)\n",
" plt.yticks(tick_marks, classes)\n",
"\n",
" if normalize:\n",
" cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n",
" print(\"Normalized confusion matrix\")\n",
" else:\n",
" print('Confusion matrix, without normalization')\n",
"\n",
" thresh = cm.max() / 2.\n",
" \n",
" pp(cm)\n",
" \n",
" for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n",
" plt.text(j, i, cm[i, j],\n",
" horizontalalignment=\"center\",\n",
" color=\"white\" if cm[i, j] > thresh else \"black\")\n",
"\n",
" plt.tight_layout()\n",
" plt.ylabel('True label')\n",
" plt.xlabel('Predicted label')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def test_classifier(labels, title, Xt, yt, clf):\n",
" pred = clf.predict(Xt)\n",
" score = metrics.accuracy_score(yt, pred)\n",
" pp(\"score: \" + str(score))\n",
" cm = metrics.confusion_matrix(yt, pred, labels=labels)\n",
" plot_confusion_matrix(cm, classes=labels, title=title)\n",
" return cm"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\"\\nfrom rdflib import Graph, Literal, BNode, RDF, Namespace\\nfrom rdflib.namespace import FOAF, DC, XSD\\n\\nmexcore = Namespace('http://mex.aksw.org/mex-core#')\\nmexperf = Namespace('http://mex.aksw.org/mex-perf#')\\nmexalgo = Namespace('http://mex.aksw.org/mex-algo#')\\nprov = Namespace('http://www.w3.org/ns/prov#')\\n\\ndef create_mex_graph():\\n graph = Graph()\\n graph.bind(mexcore)\\n graph.bind(mexperf)\\n graph.bind(mexalgo)\\n graph.bind(prov)\\n graph.bind(FOAF)\\n graph.bind(DC)\\n graph.bind(XSD)\\n \\n return graph\\n\\ndef mex_performance(experiment, model, dataset, performance, phase='Train', graph=create_mex_graph()):\\n \\n p = BNode()\\n \\n\""
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"'''\n",
"from rdflib import Graph, Literal, BNode, RDF, Namespace\n",
"from rdflib.namespace import FOAF, DC, XSD\n",
"\n",
"mexcore = Namespace('http://mex.aksw.org/mex-core#')\n",
"mexperf = Namespace('http://mex.aksw.org/mex-perf#')\n",
"mexalgo = Namespace('http://mex.aksw.org/mex-algo#')\n",
"prov = Namespace('http://www.w3.org/ns/prov#')\n",
"\n",
"def create_mex_graph():\n",
" graph = Graph()\n",
" graph.bind(mexcore)\n",
" graph.bind(mexperf)\n",
" graph.bind(mexalgo)\n",
" graph.bind(prov)\n",
" graph.bind(FOAF)\n",
" graph.bind(DC)\n",
" graph.bind(XSD)\n",
" \n",
" return graph\n",
"\n",
"def mex_performance(experiment, model, dataset, performance, phase='Train', graph=create_mex_graph()):\n",
" \n",
" p = BNode()\n",
" \n",
"'''"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Generate/Download Datasets we are working on\n",
"\n",
"* running bash script to download all needed data and store it into the `data` subfolder"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"================================================================================\n",
"checking whether unzip is installed\n",
"================================================================================\n",
"UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.\n",
"\n",
"Latest sources and executables are at ftp://ftp.info-zip.org/pub/infozip/ ;\n",
"see ftp://ftp.info-zip.org/pub/infozip/UnZip.html for other sites.\n",
"\n",
"Compiled with gcc 6.3.0 20170415 for Unix (Linux ELF).\n",
"\n",
"UnZip special compilation options:\n",
" ACORN_FTYPE_NFS\n",
" COPYRIGHT_CLEAN (PKZIP 0.9x unreducing method not supported)\n",
" SET_DIR_ATTRIB\n",
" SYMLINKS (symbolic links supported, if RTL and file system permit)\n",
" TIMESTAMP\n",
" UNIXBACKUP\n",
" USE_EF_UT_TIME\n",
" USE_UNSHRINK (PKZIP/Zip 1.x unshrinking method supported)\n",
" USE_DEFLATE64 (PKZIP 4.x Deflate64(tm) supported)\n",
" UNICODE_SUPPORT [wide-chars, char coding: UTF-8] (handle UTF-8 paths)\n",
" LARGE_FILE_SUPPORT (large files over 2 GiB supported)\n",
" ZIP64_SUPPORT (archives using Zip64 for large files supported)\n",
" USE_BZIP2 (PKZIP 4.6+, using bzip2 lib version 1.0.6, 6-Sept-2010)\n",
" VMS_TEXT_CONV\n",
" WILD_STOP_AT_DIR\n",
" [decryption, version 2.11 of 05 Jan 2007]\n",
"\n",
"UnZip and ZipInfo environment options:\n",
" UNZIP: [none]\n",
" UNZIPOPT: [none]\n",
" ZIPINFO: [none]\n",
" ZIPINFOOPT: [none]\n",
"================================================================================\n",
"successfully finished action: checking whether unzip is installed\n",
"================================================================================\n",
"================================================================================\n",
"downloading and unpacking https://www.cs.ucsb.edu/~william/data/liar_dataset.zip if not already existing\n",
"================================================================================\n",
"================================================================================\n",
"successfully finished action: downloading and unpacking https://www.cs.ucsb.edu/~william/data/liar_dataset.zip if not already existing\n",
"================================================================================\n",
"================================================================================\n",
"downloading and unpacking https://raw.githubusercontent.com/GeorgeMcIntire/fake_real_news_dataset/master/fake_or_real_news.csv.zip if not already existing\n",
"================================================================================\n",
"================================================================================\n",
"successfully finished action: downloading and unpacking https://raw.githubusercontent.com/GeorgeMcIntire/fake_real_news_dataset/master/fake_or_real_news.csv.zip if not already existing\n",
"================================================================================\n",
"================================================================================\n",
"downloading Helper script: script_dataset3.py\n",
"================================================================================\n",
"================================================================================\n",
"successfully finished action: downloading Helper script: script_dataset3.py\n",
"================================================================================\n"
]
}
],
"source": [
"%%bash\n",
"./Task_2_gen_data.sh"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"----\n",
"## configuration 1"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"df_1 = pd.read_csv('data/fake_or_real_news.csv').set_index('Unnamed: 0')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* display first 10 entries"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(6335, 3)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>title</th>\n",
" <th>text</th>\n",
" <th>label</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Unnamed: 0</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>8476</th>\n",
" <td>You Can Smell Hillarys Fear</td>\n",
" <td>Daniel Greenfield, a Shillman Journalism Fello...</td>\n",
" <td>FAKE</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10294</th>\n",
" <td>Watch The Exact Moment Paul Ryan Committed Pol...</td>\n",
" <td>Google Pinterest Digg Linkedin Reddit Stumbleu...</td>\n",
" <td>FAKE</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3608</th>\n",
" <td>Kerry to go to Paris in gesture of sympathy</td>\n",
" <td>U.S. Secretary of State John F. Kerry said Mon...</td>\n",
" <td>REAL</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10142</th>\n",
" <td>Bernie supporters on Twitter erupt in anger ag...</td>\n",
" <td>— Kaydee King (@KaydeeKing) November 9, 2016 T...</td>\n",
" <td>FAKE</td>\n",
" </tr>\n",
" <tr>\n",
" <th>875</th>\n",
" <td>The Battle of New York: Why This Primary Matters</td>\n",
" <td>It's primary day in New York and front-runners...</td>\n",
" <td>REAL</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6903</th>\n",
" <td>Tehran, USA</td>\n",
" <td>\\nIm not an immigrant, but my grandparents ...</td>\n",
" <td>FAKE</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7341</th>\n",
" <td>Girl Horrified At What She Watches Boyfriend D...</td>\n",
" <td>Share This Baylee Luciani (left), Screenshot o...</td>\n",
" <td>FAKE</td>\n",
" </tr>\n",
" <tr>\n",
" <th>95</th>\n",
" <td>Britains Schindler Dies at 106</td>\n",
" <td>A Czech stockbroker who saved more than 650 Je...</td>\n",
" <td>REAL</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4869</th>\n",
" <td>Fact check: Trump and Clinton at the 'commande...</td>\n",
" <td>Hillary Clinton and Donald Trump made some ina...</td>\n",
" <td>REAL</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2909</th>\n",
" <td>Iran reportedly makes new push for uranium con...</td>\n",
" <td>Iranian negotiators reportedly have made a las...</td>\n",
" <td>REAL</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" title \\\n",
"Unnamed: 0 \n",
"8476 You Can Smell Hillarys Fear \n",
"10294 Watch The Exact Moment Paul Ryan Committed Pol... \n",
"3608 Kerry to go to Paris in gesture of sympathy \n",
"10142 Bernie supporters on Twitter erupt in anger ag... \n",
"875 The Battle of New York: Why This Primary Matters \n",
"6903 Tehran, USA \n",
"7341 Girl Horrified At What She Watches Boyfriend D... \n",
"95 Britains Schindler Dies at 106 \n",
"4869 Fact check: Trump and Clinton at the 'commande... \n",
"2909 Iran reportedly makes new push for uranium con... \n",
"\n",
" text label \n",
"Unnamed: 0 \n",
"8476 Daniel Greenfield, a Shillman Journalism Fello... FAKE \n",
"10294 Google Pinterest Digg Linkedin Reddit Stumbleu... FAKE \n",
"3608 U.S. Secretary of State John F. Kerry said Mon... REAL \n",
"10142 — Kaydee King (@KaydeeKing) November 9, 2016 T... FAKE \n",
"875 It's primary day in New York and front-runners... REAL \n",
"6903 \\nIm not an immigrant, but my grandparents ... FAKE \n",
"7341 Share This Baylee Luciani (left), Screenshot o... FAKE \n",
"95 A Czech stockbroker who saved more than 650 Je... REAL \n",
"4869 Hillary Clinton and Donald Trump made some ina... REAL \n",
"2909 Iranian negotiators reportedly have made a las... REAL "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display(df_1.shape)\n",
"display(df_1[:10])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* create test dataset"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"X1, Xt1, y1, yt1 = train_test_split(df_1.drop('label', axis=1)['text'], df_1.label, test_size=0.25, random_state=4222)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"vectorizer_1 = TfidfVectorizer(stop_words='english', max_df=0.7)\n",
"vec_train_1 = vectorizer_1.fit_transform(X1)\n",
"vec_test_1 = vectorizer_1.transform(Xt1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* trying a Random Forest classifier "
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"'score: 0.9960008419280152'\n",
"Confusion matrix, without normalization\n",
"array([[2342, 3],\n",
" [ 16, 2390]])\n",
"'score: 0.8478535353535354'\n",
"Confusion matrix, without normalization\n",
"array([[737, 82],\n",
" [159, 606]])\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5d5e84a8d0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5d5e84a048>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.ensemble import RandomForestClassifier as RFC\n",
"clf_a = RFC(criterion='entropy', random_state=4222)\n",
"max_size=10000\n",
"clf_a.fit(vec_train_1[:max_size], y1[:max_size])\n",
"test_classifier(labels=[\"FAKE\",\"REAL\"], title=\"Configuration 1, model a -- train\", Xt=vec_train_1,yt=y1, clf=clf_a)\n",
"cm_1 = test_classifier(labels=[\"FAKE\",\"REAL\"], title=\"Configuration 1, model a -- test\", Xt=vec_test_1,yt=yt1, clf=clf_a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"----\n",
"## configuration 2\n",
"\n",
"* read data"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"----\n",
"#### Train Data:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>label</th>\n",
" <th>statement</th>\n",
" <th>subjects</th>\n",
" <th>speaker</th>\n",
" <th>job</th>\n",
" <th>state</th>\n",
" <th>party</th>\n",
" <th>#barely_true</th>\n",
" <th>#false</th>\n",
" <th>#half_true</th>\n",
" <th>#mostly_true</th>\n",
" <th>#pants_on_fire</th>\n",
" <th>context</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2635.json</td>\n",
" <td>false</td>\n",
" <td>Says the Annies List political group supports ...</td>\n",
" <td>abortion</td>\n",
" <td>dwayne-bohac</td>\n",
" <td>State representative</td>\n",
" <td>Texas</td>\n",
" <td>republican</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>a mailer</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1123.json</td>\n",
" <td>false</td>\n",
" <td>Health care reform legislation is likely to ma...</td>\n",
" <td>health-care</td>\n",
" <td>blog-posting</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>none</td>\n",
" <td>7.0</td>\n",
" <td>19.0</td>\n",
" <td>3.0</td>\n",
" <td>5.0</td>\n",
" <td>44.0</td>\n",
" <td>a news release</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>12465.json</td>\n",
" <td>true</td>\n",
" <td>The Chicago Bears have had more starting quart...</td>\n",
" <td>education</td>\n",
" <td>robin-vos</td>\n",
" <td>Wisconsin Assembly speaker</td>\n",
" <td>Wisconsin</td>\n",
" <td>republican</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>2.0</td>\n",
" <td>5.0</td>\n",
" <td>1.0</td>\n",
" <td>a an online opinion-piece</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>5947.json</td>\n",
" <td>false</td>\n",
" <td>When Mitt Romney was governor of Massachusetts...</td>\n",
" <td>history,state-budget</td>\n",
" <td>mitt-romney</td>\n",
" <td>Former governor</td>\n",
" <td>Massachusetts</td>\n",
" <td>republican</td>\n",
" <td>34.0</td>\n",
" <td>32.0</td>\n",
" <td>58.0</td>\n",
" <td>33.0</td>\n",
" <td>19.0</td>\n",
" <td>an interview with CBN News</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>620.json</td>\n",
" <td>true</td>\n",
" <td>McCain opposed a requirement that the governme...</td>\n",
" <td>federal-budget</td>\n",
" <td>barack-obama</td>\n",
" <td>President</td>\n",
" <td>Illinois</td>\n",
" <td>democrat</td>\n",
" <td>70.0</td>\n",
" <td>71.0</td>\n",
" <td>160.0</td>\n",
" <td>163.0</td>\n",
" <td>9.0</td>\n",
" <td>a radio ad</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id label statement \\\n",
"0 2635.json false Says the Annies List political group supports ... \n",
"3 1123.json false Health care reform legislation is likely to ma... \n",
"5 12465.json true The Chicago Bears have had more starting quart... \n",
"12 5947.json false When Mitt Romney was governor of Massachusetts... \n",
"16 620.json true McCain opposed a requirement that the governme... \n",
"\n",
" subjects speaker job \\\n",
"0 abortion dwayne-bohac State representative \n",
"3 health-care blog-posting NaN \n",
"5 education robin-vos Wisconsin Assembly speaker \n",
"12 history,state-budget mitt-romney Former governor \n",
"16 federal-budget barack-obama President \n",
"\n",
" state party #barely_true #false #half_true #mostly_true \\\n",
"0 Texas republican 0.0 1.0 0.0 0.0 \n",
"3 NaN none 7.0 19.0 3.0 5.0 \n",
"5 Wisconsin republican 0.0 3.0 2.0 5.0 \n",
"12 Massachusetts republican 34.0 32.0 58.0 33.0 \n",
"16 Illinois democrat 70.0 71.0 160.0 163.0 \n",
"\n",
" #pants_on_fire context \n",
"0 0.0 a mailer \n",
"3 44.0 a news release \n",
"5 1.0 a an online opinion-piece \n",
"12 19.0 an interview with CBN News \n",
"16 9.0 a radio ad "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"----\n",
"#### Test Data:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>label</th>\n",
" <th>statement</th>\n",
" <th>subjects</th>\n",
" <th>speaker</th>\n",
" <th>job</th>\n",
" <th>state</th>\n",
" <th>party</th>\n",
" <th>#barely_true</th>\n",
" <th>#false</th>\n",
" <th>#half_true</th>\n",
" <th>#mostly_true</th>\n",
" <th>#pants_on_fire</th>\n",
" <th>context</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>11972.json</td>\n",
" <td>true</td>\n",
" <td>Building a wall on the U.S.-Mexico border will...</td>\n",
" <td>immigration</td>\n",
" <td>rick-perry</td>\n",
" <td>Governor</td>\n",
" <td>Texas</td>\n",
" <td>republican</td>\n",
" <td>30</td>\n",
" <td>30</td>\n",
" <td>42</td>\n",
" <td>23</td>\n",
" <td>18</td>\n",
" <td>Radio interview</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>11685.json</td>\n",
" <td>false</td>\n",
" <td>Wisconsin is on pace to double the number of l...</td>\n",
" <td>jobs</td>\n",
" <td>katrina-shankland</td>\n",
" <td>State representative</td>\n",
" <td>Wisconsin</td>\n",
" <td>democrat</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>a news conference</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>11096.json</td>\n",
" <td>false</td>\n",
" <td>Says John McCain has done nothing to help the ...</td>\n",
" <td>military,veterans,voting-record</td>\n",
" <td>donald-trump</td>\n",
" <td>President-Elect</td>\n",
" <td>New York</td>\n",
" <td>republican</td>\n",
" <td>63</td>\n",
" <td>114</td>\n",
" <td>51</td>\n",
" <td>37</td>\n",
" <td>61</td>\n",
" <td>comments on ABC's This Week.</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>5962.json</td>\n",
" <td>true</td>\n",
" <td>Over the past five years the federal governmen...</td>\n",
" <td>federal-budget,pensions,retirement</td>\n",
" <td>brendan-doherty</td>\n",
" <td>NaN</td>\n",
" <td>Rhode Island</td>\n",
" <td>republican</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>a campaign website</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>7070.json</td>\n",
" <td>true</td>\n",
" <td>Says that Tennessee law requires that schools ...</td>\n",
" <td>county-budget,county-government,education,taxes</td>\n",
" <td>stand-children-tennessee</td>\n",
" <td>Child and education advocacy organization.</td>\n",
" <td>Tennessee</td>\n",
" <td>none</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>in a post on Facebook.</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id label statement \\\n",
"0 11972.json true Building a wall on the U.S.-Mexico border will... \n",
"1 11685.json false Wisconsin is on pace to double the number of l... \n",
"2 11096.json false Says John McCain has done nothing to help the ... \n",
"5 5962.json true Over the past five years the federal governmen... \n",
"6 7070.json true Says that Tennessee law requires that schools ... \n",
"\n",
" subjects speaker \\\n",
"0 immigration rick-perry \n",
"1 jobs katrina-shankland \n",
"2 military,veterans,voting-record donald-trump \n",
"5 federal-budget,pensions,retirement brendan-doherty \n",
"6 county-budget,county-government,education,taxes stand-children-tennessee \n",
"\n",
" job state party \\\n",
"0 Governor Texas republican \n",
"1 State representative Wisconsin democrat \n",
"2 President-Elect New York republican \n",
"5 NaN Rhode Island republican \n",
"6 Child and education advocacy organization. Tennessee none \n",
"\n",
" #barely_true #false #half_true #mostly_true #pants_on_fire \\\n",
"0 30 30 42 23 18 \n",
"1 2 1 0 0 0 \n",
"2 63 114 51 37 61 \n",
"5 1 2 1 1 0 \n",
"6 0 0 0 0 0 \n",
"\n",
" context \n",
"0 Radio interview \n",
"1 a news conference \n",
"2 comments on ABC's This Week. \n",
"5 a campaign website \n",
"6 in a post on Facebook. "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"----\n",
"#### Valid Data:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>label</th>\n",
" <th>statement</th>\n",
" <th>subjects</th>\n",
" <th>speaker</th>\n",
" <th>job</th>\n",
" <th>state</th>\n",
" <th>party</th>\n",
" <th>#barely_true</th>\n",
" <th>#false</th>\n",
" <th>#half_true</th>\n",
" <th>#mostly_true</th>\n",
" <th>#pants_on_fire</th>\n",
" <th>context</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>7891.json</td>\n",
" <td>false</td>\n",
" <td>Says Having organizations parading as being so...</td>\n",
" <td>campaign-finance,congress,taxes</td>\n",
" <td>earl-blumenauer</td>\n",
" <td>U.S. representative</td>\n",
" <td>Oregon</td>\n",
" <td>democrat</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>a U.S. Ways and Means hearing</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>9416.json</td>\n",
" <td>false</td>\n",
" <td>Says when armed civilians stop mass shootings ...</td>\n",
" <td>guns</td>\n",
" <td>jim-rubens</td>\n",
" <td>Small business owner</td>\n",
" <td>New Hampshire</td>\n",
" <td>republican</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>in an interview at gun shop in Hudson, N.H.</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>6861.json</td>\n",
" <td>true</td>\n",
" <td>Says Tennessee is providing millions of dollar...</td>\n",
" <td>education,state-budget</td>\n",
" <td>andy-berke</td>\n",
" <td>Lawyer and state senator</td>\n",
" <td>Tennessee</td>\n",
" <td>democrat</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>a letter to state Senate education committee c...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>1122.json</td>\n",
" <td>false</td>\n",
" <td>The health care reform plan would set limits s...</td>\n",
" <td>health-care</td>\n",
" <td>club-growth</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>none</td>\n",
" <td>4</td>\n",
" <td>5</td>\n",
" <td>4</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>a TV ad</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>13138.json</td>\n",
" <td>true</td>\n",
" <td>Says Donald Trump started his career back in 1...</td>\n",
" <td>candidates-biography,diversity,housing</td>\n",
" <td>hillary-clinton</td>\n",
" <td>Presidential candidate</td>\n",
" <td>New York</td>\n",
" <td>democrat</td>\n",
" <td>40</td>\n",
" <td>29</td>\n",
" <td>69</td>\n",
" <td>76</td>\n",
" <td>7</td>\n",
" <td>the first presidential debate</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id label statement \\\n",
"2 7891.json false Says Having organizations parading as being so... \n",
"5 9416.json false Says when armed civilians stop mass shootings ... \n",
"6 6861.json true Says Tennessee is providing millions of dollar... \n",
"7 1122.json false The health care reform plan would set limits s... \n",
"8 13138.json true Says Donald Trump started his career back in 1... \n",
"\n",
" subjects speaker \\\n",
"2 campaign-finance,congress,taxes earl-blumenauer \n",
"5 guns jim-rubens \n",
"6 education,state-budget andy-berke \n",
"7 health-care club-growth \n",
"8 candidates-biography,diversity,housing hillary-clinton \n",
"\n",
" job state party #barely_true #false \\\n",
"2 U.S. representative Oregon democrat 0 1 \n",
"5 Small business owner New Hampshire republican 1 1 \n",
"6 Lawyer and state senator Tennessee democrat 0 0 \n",
"7 NaN NaN none 4 5 \n",
"8 Presidential candidate New York democrat 40 29 \n",
"\n",
" #half_true #mostly_true #pants_on_fire \\\n",
"2 1 1 0 \n",
"5 0 1 0 \n",
"6 0 0 0 \n",
"7 4 2 0 \n",
"8 69 76 7 \n",
"\n",
" context \n",
"2 a U.S. Ways and Means hearing \n",
"5 in an interview at gun shop in Hudson, N.H. \n",
"6 a letter to state Senate education committee c... \n",
"7 a TV ad \n",
"8 the first presidential debate "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"names = [\n",
" \"id\",\n",
" \"label\",\n",
" \"statement\",\n",
" \"subjects\",\n",
" \"speaker\",\n",
" \"job\",\n",
" \"state\",\n",
" \"party\",\n",
" \"#barely_true\",\n",
" \"#false\",\n",
" \"#half_true\",\n",
" \"#mostly_true\",\n",
" \"#pants_on_fire\",\n",
" \"context\"\n",
"]\n",
"\n",
"df_2_train = pd.read_csv(\"data/train.tsv\", delimiter='\\t', names=names)\n",
"df_2_test = pd.read_csv(\"data/test.tsv\", delimiter='\\t', names=names)\n",
"df_2_valid= pd.read_csv(\"data/valid.tsv\", delimiter='\\t', names=names)\n",
"\n",
"# use only 'False' and 'True' statements\n",
"df_2_train = df_2_train[df_2_train['label'].isin([\"false\",\"true\"])]\n",
"df_2_test = df_2_test[df_2_test['label'].isin([\"false\",\"true\"])]\n",
"df_2_valid = df_2_valid[df_2_valid['label'].isin([\"false\",\"true\"])]\n",
"\n",
"display(Markdown(\"----\\n#### Train Data:\"))\n",
"display(df_2_train.head())\n",
"display(Markdown(\"----\\n#### Test Data:\"))\n",
"display(df_2_test.head())\n",
"display(Markdown(\"----\\n#### Valid Data:\"))\n",
"display(df_2_valid.head())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### tdidf vectorizer on new dataset\n"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"X2 = df_2_train['statement']\n",
"y2 = df_2_train['label']\n",
"Xt2 = df_2_test['statement']\n",
"yt2 = df_2_test['label']\n",
"Xv2 = df_2_valid['statement']\n",
"yv2 = df_2_valid['label']\n"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"vectorizer_2 = TfidfVectorizer(stop_words='english', max_df=0.7)\n",
"vec_train_2 = vectorizer_2.fit_transform(X2)\n",
"vec_test_2 = vectorizer_2.transform(Xt2)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Object `MLPClassifier` not found.\n"
]
}
],
"source": [
"?MLPClassifier"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* trying a MLP as classifier "
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"MLPClassifier(activation='relu', alpha=0.0001, batch_size='auto', beta_1=0.9,\n",
" beta_2=0.999, early_stopping=False, epsilon=1e-08,\n",
" hidden_layer_sizes=(100,), learning_rate='constant',\n",
" learning_rate_init=0.001, max_iter=200, momentum=0.9,\n",
" nesterovs_momentum=True, power_t=0.5, random_state=4222,\n",
" shuffle=True, solver='adam', tol=0.0001, validation_fraction=0.1,\n",
" verbose=False, warm_start=False)"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.neural_network import MLPClassifier\n",
"clf_b = MLPClassifier(hidden_layer_sizes=(100,), random_state=4222)\n",
"clf_b.fit(vec_train_2, y2)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"'score: 0.9997275946608554'\n",
"Confusion matrix, without normalization\n",
"array([[1675, 1],\n",
" [ 0, 1995]])\n",
"'score: 0.5776805251641138'\n",
"Confusion matrix, without normalization\n",
"array([[109, 99],\n",
" [ 94, 155]])\n",
"'score: 0.6041666666666666'\n",
"Confusion matrix, without normalization\n",
"array([[ 92, 77],\n",
" [ 94, 169]])\n"
]
},
{
"data": {
"text/plain": [
"array([[ 92, 77],\n",
" [ 94, 169]])"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5d5e737f28>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5d5b205fd0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5d5b1ebfd0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"test_classifier(labels=[\"true\", \"false\"], title=\"configuration 2 -- train\", Xt=vec_train_2, yt=y2, clf=clf_b)\n",
"cm_2 = test_classifier(labels=[\"true\", \"false\"], title=\"configuration 2 -- test\", Xt=vec_test_2, yt=yt2, clf=clf_b)\n",
"test_classifier(labels=[\"true\", \"false\"], title=\"configuration 2 -- valid\", Xt=vectorizer_2.transform(Xv2), yt=yv2, clf=clf_b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"----\n",
"## configuration 3"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"'score: 0.5142231947483589'\n",
"Confusion matrix, without normalization\n",
"array([[ 7, 201],\n",
" [ 21, 228]])\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5d5e7375c0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"yt2_c3 = yt2.copy()\n",
"yt2_c3[yt2_c3 == \"true\"] = \"REAL\"\n",
"yt2_c3[yt2_c3 == \"false\"] = \"FAKE\"\n",
"\n",
"cm_3b=test_classifier(labels=[\"REAL\", \"FAKE\"], \n",
" title=\"configuration 3: model a) → dataset 2\",\n",
" Xt=vectorizer_1.transform(Xt2),\n",
" yt=yt2_c3, clf=clf_a)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"'score: 0.5391414141414141'\n",
"Confusion matrix, without normalization\n",
"array([[274, 491],\n",
" [239, 580]])\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAUAAAAEmCAYAAAATPUntAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3XecFPX9x/HX+46mVBVEpIgNwQY2bBhQoyIW0Fgw2InYSOwao/kpKkaNJTG2mBCNYo0lErDE2BKxgAqigAUUBESagHQpn98f3+/h3nG3u3fO3d7efp485sHuzOzMZ/f2Pvf9fmfmMzIznHOuEBXlOgDnnMsVT4DOuYLlCdA5V7A8ATrnCpYnQOdcwfIE6JwrWJ4A6xBJG0n6l6TFkv7xI7YzQNK/k4wtFyS9IOm0Kr72BknzJX2TdFyu9vAEmAOSfi7pPUlLJc2Ov6g9Etj0cUBrYDMzO76qGzGzR8zs0ATiKUVSL0km6dky87vG+a9nuZ1rJQ3PtJ6ZHW5mf69CnB2AS4AdzWyLyr7e5Q9PgDVM0sXAH4AbCcmqA3AP0DeBzW8FfGZmaxLYVnWZB+wrabOUeacBnyW1AwU/5rvdAVhgZnOrsO96P2K/rqaZmU81NAHNgaXA8WnWaUhIkF/H6Q9Aw7isFzCT0DqZC8wGzojLhgDfA6vjPgYC1wLDU7bdETCgXnx+OvAFsAT4EhiQMv/NlNftB4wFFsf/90tZ9jpwPTA6buffQMsK3ltJ/PcB58d5xcAs4P+A11PW/SMwA/gOeB84IM7vXeZ9fpgSx9AYxwpguzjvF3H5vcDTKdu/GXgFUJkYfxpfvy5u/8E4/2hgIrAobrdLymumAVcAE4BVJZ+vT7V/ynkAhTTFX9416X5BgOuAd4DNgVbAW8D1cVmv+PrrgPpAH2A5sElcXjbhVZgAgcYxuewQl7UBdoqP1ydAYFNgIXBKfN1J8flmcfnrwFSgE7BRfH5TBe+tJAHuB7wb5/UBXgJ+USYBngxsFvd5CfAN0Ki895USx1fATvE19cskwI0JrczTgQOA+UC7dHGmPO8ELAMOidu9HJgCNIjLpwHjgfbARnHePcA9uf7O+ZR+8i5wzdoMmG/pu6gDgOvMbK6ZzSO07E5JWb46Ll9tZs8TWik7VDGedcDOkjYys9lmNrGcdY4APjezh81sjZk9BnwCHJWyzgNm9pmZrQCeBLql26mZvQVsKmkH4FTgoXLWGW5mC+I+byO0jDO9zwfNbGJ8zeoy21tO+BxvB4YDvzSzmRm2V+JEYJSZvRy3eysh2e+Xss6dZjYjfgaY2Xlmdl6W23c54gmwZi0AWmYYJ9oSmJ7yfHqct34bZRLocqBJZQMxs2WEX+xzgNmSRknqnEU8JTG1TXmeeqQ023geBgYDBwLPll0o6VJJk+MR7UWE4YOWGbY5I91CM3uX0OUXIVFnq9RnYGbr4r5SP4O0+3a1kyfAmvU2YYyoX5p1viYczCjRIc6rimWErl+JUkc0zewlMzuE0P39BPhLFvGUxDSrijGVeBg4D3g+ts7Wk3QAoZt5AqF734Iw/qiS0CvYZtrSRpLOJ7Qkv47bz1apz0CSCN3d1M/AyyrlIU+ANcjMFhMG+++W1E/SxpLqSzpc0i1xtceAqyW1ktQyrp/xlI8KjAd+IqmDpObAlSULJLWW1FdSY0JSXkroEpf1PNApnrpTT9KJwI7AyCrGBICZfQn0BK4qZ3FTwljnPKCepP8DmqUsnwN0rMyRXkmdgBsIY4unAJdLSttVT/EkcISkgyXVJ4xJriKMz7o85gmwhsXxrIuBqwm/4DMIXcF/xlVuAN4jHFH8CPggzqvKvl4Gnojbep/SSasoxvE18C0hGZ1bzjYWAEcSfukXEFpOR5rZ/KrEVGbbb5pZea3bl4AXCQctpgMrKd3FLDnJe4GkDzLtJw45DAduNrMPzexz4DfAw5IaZhHnp4TE+SfCwZOjgKPM7Ps0+7xP0n2Ztu1yS2becnfOFSZvATrnCpYnQOdcwfIE6JwrWJ4AnXMFq6ATYLxo/gFJCyWNkXSApE9zHVeJulKWqjKyrfQS131d0i+qsp34896pqnFmK1bAyfaKE1fDCjoBAj0I13e2M7PuZvY/M6vqZWU/iqSOsSTU+qtErPrKUu0Yy3EtjNN/JO2Y9H5quVsJ11TXGpJOl/RmbdiPpBMkvSVpebZlyvJRoSfArYBp8bKwaiWpuLr3UQlfE2oHbkq4vGwE8HhOI6p5I4ADJXm9v/J9S6hEdFOuA6lOeZMAJbWX9IykeZIWSLorzi+SdLWk6ZLmSnooXvWQ2qo6TdJXscLvVXHZQOCvhNp0SyUNKdtdkbS7pHGSlkj6h6QnJN0Ql23wVzTua7v4+EFJ90p6XtIywi/bEXF730maIenalJf/N/6/KMazb9l9SNpP0th4fexYSfulLHtd0vWSRsd4/x2vJNmAmS0ys2kWTgIVsJZQPirbn8XrChWT34qx/kvSZpIeie9trKSOWca9taQ3YswvU+Z6X0n7xP0skvShpF7Zxgk0ij+zJZI+kNQ15TNYSTg5/LBKbK/kMrh0yzeKP/uFkiYBe5VZ/mtJU2NMkyQdE+d3IZQJK/k+LorzK/zOSGokaXj8fVgUP9vWcVlzScMUCu7Oij+v4or2U5aZ/cfMnqTql2Hmh1yXo8lmItSM+xC4g1DGqRHQIy47k1CaaBvCRfjPAA/HZR0J12j+hVC9oyvhEqYucfnplK5714tYBgloQLgK4QJCCaRjCXXobijvtXGeAdvFxw8Srl/dn/CHplHc/i7x+a6ES7r6lYm1Xsr21u+DBMtSpWx/EeGSs3XA1Snzfw5MSPO61+Nnvi2hSMEkwlUbP42xPUSoEJNN3G8TKrQ0BH5CqCk4PC5rS7j6pE/8zA6Jz1ulxPGLCmK8llA557j487uUUPOwfso6dwK3V/K7+C/giDTLbwL+F993e+BjSpfWOp5QXKGIUIxiGdAmzXcq3Xfm7BjPxoTfkT2AZnHZs8CfCb8vmwNjgLMr2k+a91OqTFldm/KlBdid8KW5zMyWmdlKMytpGQ0gfIm/MLOlhOtd+6t0xZUhZrbCzD4kJNKuZLYP4Rf2Tgulp54hfIkq4zkzG21m62LMr5vZR/H5BMJ1vz2z3FZ1lKVqQUhgg4FxKfMfNbNdM8TzgJlNtXB98wvAVAuthjWES9V2yxS3Qun5vYDfmtkqM/sv4Re6xMmEYgnPx8/sZcJlgn0yxFbifTN7ykIJq9sJf4T2SVm+BGiR5bZKDAGGSTqiguUnAEPN7Fszm0FIsuuZ2T/M7Ov4fp4APid8v8uV4TuzmlBibTszW2tm75vZd7EV2Ae4MP6+zCU0HvpX8r3WeflSvrs9MN3Kr6NXXvmoeoRy8yWqUq5pS2CWxT+DUWVLHpVaX9LehBbCzoQWZkN+uK41m3gSL0tlZssUrlmdJ6mLZV8Gfk7K4xXlPC/Zd7q4twQWWukx2OmEnzeEMdrjJaUm+frAa1nGuP7zN7N1cXgjtbRYU0IreAOS3gH2TrPtRwl/PMraktI/91LvXdKphGuwO8ZZTUhT5ivDd+Zhwmf1uKQWhOudryJ8bvUJZc5KNlWEl+zaQL60AGcAHVR+Hb3yyketofQvZFXMBtqWGfNpn/K4VKkplT+YXvZC60cJg+/tzaw5YSwmU4mnEtVVlgrC92BjSifTpKSLezawiUJFmtRlJWYQhjNapEyNzSzbgfn1Py+FyjHtKD2m1YXQI9iAme1jZio7EVqscwjDBOWZTenvyfr3I2krwnDMYMIQQAtCFzndd6DC70zsmQwxsx0JxVmPJBSYnUEY6mmZ8rk1M7OS0368AECULwlwDOGLdZOkxnHwd/+47DHgojiY3oRws6EnKmgtVsbbhIMDgxXKQPWldFflQ2AnSd0kNSKMOWXSFPjWzFZK6k7pX6J5hLG4bSp4bWJlqSQdImm3OCjejNA9XAhMruy2slBh3GY2ndClHSKpgcKd8VJbe8MJXeXDYqyNFA5Utcty33tIOjb+4byQkBTegXAAgTBm9nIl3881wEAzG1XB8ieBKyVtEuP8ZcqyxoTkMy/GcAahZVdiDtBOUoOUeRV+ZyQdKGkXhTMMviN0ideZ2WzCvVluk9RM4UDhtpJ6ptlPKSWfN6E3VRQ/+/rpP5r8kxcJ0MzWEn4xtiPc92EmYQAZ4G+ErsB/CYPcKyn9pavqPr8nHPgYSOgmnUxINqvi8s8I55H9hzCOk835W+cB10laQqjzt74qsYWioEOB0fGIXupYFZZsWaoWhD8ciwkHTrYFels4MlpyAnZ55fErLYu4f07oan5LSC4Ppbx2BuFueb/hh9Jhl5H99/Y5wvek5CDMsfZDqfyjCIP7lT3KeXSa5AdhjHA64bv4b8J3EwAzmwTcRvjjOodwcGN0ymtfJdx46RtJJZ9Phd8ZQoHbpwjJbzLwRsr+TiV0mScR3v9ThMK3Fe2nrFMIQxn3Eu6hsoLyC+bmNS+HVQmS3gXuM7MHch2L+3Hiz3KgmX2c61hc7ngCTCN2GT4lFMEcQBh/2SZ2MZxzeS5fjgLnyg6ELkdjws10jvPk51zd4S1A51zByouDIM45Vx3qXBd4081aWrv2ZU87c7n22Tff5ToEV4FVc6bMN7NWSW2vuNlWZmtWZFzPVsx7ycx6J7XfqqhzCbBd+60Y9arfrbC2OfDGV3MdgqvA1Nv6lL1S50exNStouMMJGddbOf7uTDe6r3Z1LgE653JMgqLaVP2tYp4AnXPJy/6e9TnlCdA5l7z0ZRNrDU+AzrmEyVuAzrkCJXwM0DlXqORdYOdcAfMusHOuYHkL0DlXkPw8QOdcQfMusHOuMPlpMM65QlbkY4DOuUKUR+cB5kc71TmXR2IXONOUzZakaZI+kjRe0ntx3rWSZsV54yX1SVn/SklTJH0q6bBM2/cWoHMuecmeBnNgOXc/vMPMbi29S+0I9Ad2Ityg/j+SOsW7SpbLW4DOueQl1AKspL7A42a2ysy+BKZQ+l7eG/AE6JxLVsl5gJkmaCnpvZRpUDlbM+Dfkt4vs3ywpAmS/iZpkzivLeHe0SVmxnkV8i6wcy552XWB55vZnhnW6WFmsyRtDrws6RPCzdqvJyTH6wk3mz+zKmF6C9A5l7DkDoKY2az4/1zgWaC7mc0xs7Vmtg74Cz90c2cB7VNe3i7Oq5AnQOdc8qTMU8ZNqLGkpiWPgUOBjyW1SVntGODj+HgE0F9SQ0lbA9sDY9Ltw7vAzrlkSVCUSGppDTyrkCzrAY+a2YuSHpbUjdAFngacDWBmEyU9CUwC1gDnpzsCXLJR55xLVgKnwZjZF0DXcuafkuY1Q4Gh2e7DE6BzLnl+LbBzrmB5PUDnXEHyeoDOuUImbwE65wqR8ATonCtUilMe8ATonEuYKCryo8DOuQLlXWDnXMHyBOicK0w+BuicK1TyMUDnXCHzLrBzrmB5AnTOFSYfA3TOFSofA3TOFTTvAjvnCld+5D9PgM65hMlbgM65AuZjgM65giSUNy3A/EjTddTXs2ZwYt9DOWjfbhy8324M+/NdAJw38GR69+xO757d2a9bJ3r37F7qdbNmfkXnDpvx57vuyEXYBaFIMOKi/bn/zD0A2Ge7TXnuwv14/tIe3NJ/F4qLwi/4Nq0a84/B+zDppsMY2HPrXIZcuyiLqRbwFmAOFRfX4+rrbmaXrruxdMkSjjh4Xw7oeTD3DBu+fp3rf3sFTZs1K/W6666+gl4HH1bT4RaU0w/oyJQ5S2nSqB4S/L7/rpxy3ximzV/OBYdtz7F7tuUfY2ayaMVqrntuMofstHmuQ649EhwDlDQNWAKsBdaY2Z6SNgWeADoSbot5gpktVNjpH4E+wHLgdDP7IN32vQWYQ623aMMuXXcDoEnTpmy3fWe+mf3DjezNjJH/fIq+x564ft5Lo0bQYauOdOrcpcbjLRRbNG9Ery6teHLMDAA22bgBq9cY0+YvB2D0Z/M5bJfWAHy79Hs+mrGYNessZ/HWRkVFRRmnSjjQzLqZ2Z7x+a+BV8xse+CV+BzgcMLN0LcHBgH3ZoyzMlG46jPjq2lM/Gg8u+3xQ3d3zNtv0rJVa7bedjsAli1dyr133saFl12VqzALwtV9u3DzyE+xmNO+XfY9xcVi53ahJd571y1o02KjHEaYB6q3C9wX+Ht8/HegX8r8hyx4B2ghqU26DdVIApTUQtJ5NbGvfLRs6VLOPv0krhl6a6nu7nNPP0nfn52w/vkdt9zAwHN/SeMmTXIRZkE4sEsrFixdxcRZ35Waf+Hw8Vx1dBee/tW+LFu1hrXe4ktLUsYJaCnpvZRpUDmbMuDfkt5PWd7azGbHx98ArePjtsCMlNfOjPMqVFNjgC2A84B7UmdKqmdma2oohlpp9erVnH16f445rj+HH9Vv/fw1a9bw4qjnGPXKW+vnjXt/DM+PeIbfXfsbvlu8GBUV0bBhI04/69xchF4n7dFxEw7esTU9O7eiYb1imjSqx20n7colj03gpHveBaBHp5Zs3apxjiOtvVISXCbzU7q1FelhZrMkbQ68LOmT1IVmZpKq/NeophLgTcC2ksYDq4GVwEKgs6RDgZFmtjOApEuBJmZ2raRtgbuBVoRBzbPM7JNy95CHzIzLfnU223XqzFnnXVBq2ZtvvMq223eiTdt26+c9PerV9Y9vv/l6Gjdu4skvYbe+8Bm3vvAZAHtvuykDe27NJY9NYNMmDfh26fc0KC5i0IFbc88rU3Mcae2W1HmAZjYr/j9X0rNAd2COpDZmNjt2cefG1WcB7VNe3i7Oq1BNJcBfAzubWTdJvYBR8fmXkjqmed39wDlm9rmkvQktyIPKrhSbxoMA2rZrX3ZxrTX23bd45slH6bzjzutPdbn86us46JDejHjmSY5OOfjhcuusXltzYJfNKRI8+vYM3pnyLQAtmzbgnxfsT5NG9VhnxhkHdKT37//H0lUF3bFJ5DQXSY2BIjNbEh8fClwHjABOIzSsTgOeiy8ZAQyW9DiwN7A4patcrlydBjPGzL5Mt4KkJsB+wD9SmtMNy1vXzO4nJEt27bZH3gzOdN9nf75asLLcZbff/de0r734it9WR0guxbtTv+XdqSHR3TzyU24e+ekG68xf8j09bnitpkOr9RI6DaY18GzcVj3gUTN7UdJY4ElJA4HpQMlA+fOEU2CmEHqMZ2TaQa4S4LKUx2sofTCmUfy/CFhkZt1qLCrn3I+X0HmAZvYF0LWc+QuAg8uZb8D5ldlHTZ0GswRoWsGyOcDmkjaT1BA4EsDMvgO+lHQ8gIINPgznXO0S6gFmnmqDGmkBmtkCSaMlfQysICS9kmWrJV0HjCEMWKYe5BgA3CvpaqA+8DjwYU3E7Jyrujy5FLjmusBm9vM0y+4E7ixn/pdA7+qMyzmXvHwphuDXAjvnkiVvATrnCpSA4uL8yICeAJ1zifMusHOuMHkX2DlXqIS3AJ1zBav2nOeXiSdA51zivAXonCtMPgbonCtUPgbonCtoPgbonCtYedIA9ATonEtYgrfFrG6eAJ1ziQpjgLmOIjueAJ1zCfPzAJ1zBcy7wM65wuTnATrnCpWfB+icK2j5MgZYUzdFcs4VEEkZp0psq1jSOEkj4/MHJX0paXycusX5knSnpCmSJkjaPdO2vQXonEtW8mOAFwCTgWYp8y4zs6fKrHc4sH2c9gbujf9XyFuAzrlEicytv2xbgJLaAUcAf81i9b7AQxa8A7SQ1CbdCzwBOucSV1ykjBPQUtJ7KdOgcjb1B+ByYF2Z+UNjN/eOeD9xgLbAjJR1ZsZ5FaqwCyypWUXLYP2Ny51zbgNZNvDmm9meFW9DRwJzzex9Sb1SFl0JfAM0AO4HrgCuq0qc6cYAJwJGOKpdouS5AR2qskPnXN2m5K4F3h84WlIfoBHQTNJwMzs5Ll8l6QHg0vh8FtA+5fXt4rwKVZgAzax9Rcuccy6dJM6CMbMrCa09YgvwUjM7WVIbM5utkGX7AR/Hl4wABkt6nHDwY7GZzU63j6yOAkvqD2xjZjfGQcnWZvZ+ld6Vc67Oq+bzAB+R1IrQGx0PnBPnPw/0AaYAy4EzMm0oYwKUdBdQH/gJcGPc8H3AXlWJ3DlXt4lwJDhJZvY68Hp8fFAF6xhwfmW2m00LcD8z213SuLiTbyU1qMxOnHOFJU8uBMkqAa6WVEQ48IGkzdjwkLRzzgWVvNIjl7JJgHcDTwOtJA0BTgCGVGtUzrm8JSg5z6/Wy5gAzewhSe8DP42zjjezj9O9xjlX2PKkAZj1tcDFwGpCN9ivHnHOpZUvXeCMyUzSVcBjwJaEEwsflXRldQfmnMtPUnZTbZBNC/BUYDczWw4gaSgwDvhddQbmnMtfxbUlw2WQTQKcXWa9enGec86VK1+6wOmKIdxBGPP7Fpgo6aX4/FBgbM2E55zLN6JunAdYcqR3IjAqZf471ReOcy7vqQ7cFtPMhtVkIM65uiPvu8AlJG0LDAV2JJSkAcDMOlVjXM65PJVPXeBszul7EHiA8L4OB54EnqjGmJxzeS7JmyJVp2wS4MZm9hKAmU01s6sJidA55zYghdNgMk21QTanwayKxRCmSjqHUGG1afWG5ZzLZ7Ukv2WUTQK8CGgM/IowFtgcOLM6g3LO5bfa0sXNJJtiCO/Gh0uAU6o3HOdcXZAn+S/tidDPEmsAlsfMjq2WiJxzeU1SnSiHdVeNRZGg+sWiVbOGmVd0NWrWK6Myr+TqjLzvApvZKzUZiHOu7siXmnnZ1gN0zrmsiPxpAeZLonbO5ZF6RZmnbEkqljRO0sj4fGtJ70qaIumJkpu0SWoYn0+Jyztm2nbWYUjygTXnXEah4GmiV4JcAExOeX4zcIeZbQcsBAbG+QOBhXH+HXG9tLKpCN1d0kfA5/F5V0l/qkz0zrnCUqTMUzYktQOOAP4anws4CHgqrvJ3oF983Dc+Jy4/WBkybTYtwDuBI4EFAGb2IXBgduE75wpRliXxW0p6L2UaVM6m/gBczg+34t0MWGRma+LzmUDb+LgtMAMgLl8c169QNgdBisxseplEujaL1znnCpCAetl1ceeb2Z4Vbkc6EphrZu9L6pVQeKVkkwBnSOoOmKRi4JfAZ9URjHOubkjoIPD+wNGS+hBK8TUD/gi0kFQvtvLaEeoTEP9vD8yUVI9w2e6CdDvIpgt8LnAx0AGYA+wT5znn3AYkUZTFlImZXWlm7cysI9AfeNXMBgCvAcfF1U4DnouPR8TnxOWvmlmFV7NBdtcCz407d865rFTzaYBXAI9LuoFwh8qS6vXDgIclTSHcyyhj3sqmIvRfKOeaYDMrb8DSOVfgBNRL+FpgM3sdeD0+/gLoXs46K4HjK7PdbMYA/5PyuBFwDPFIi3POlSdPLgTJqgtcqvy9pIeBN6stIudcfqvEeX65VpVrgbcGWicdiHOu7hD5kQGzGQNcyA9jgEWEwcVfV2dQzrn8FcYAcx1FdtImwHgZSVd+OM9mXabDys45VyeqwcRk97yZrY2TJz/nXFol9wVO4lrg6pZNQ3W8pN2qPRLnXN2QxXXAtaWBmO6eICWXmuwGjJU0FVhGSPBmZrvXUIzOuTxSHecBVpd0Y4BjgN2Bo2soFudcHVFbWniZpEuAAjCzqTUUi3OuThBFdeA0mFaSLq5ooZndXg3xOOfyXLgnSK6jyE66BFgMNIE8SeXOudpBdWMMcLaZXVdjkTjn6oS60gLMk7fgnKttsqn3VxukS4AH11gUzrk6JU/yX8UJ0My+rclAnHN1gwTFeZIBq1INxjnn0sqP9OcJ0DmXsHAtcH6kQE+AzrnE5Uf68wTonEucKKoD5wE651yliezKTNUG+RKncy6PSMo4ZbGNRpLGSPpQ0kRJQ+L8ByV9KWl8nLrF+ZJ0p6QpkiZIylixyluAzrnEJdQBXgUcZGZLJdUH3pT0Qlx2mZk9VWb9w4Ht47Q3cG/8v0KeAJ1ziUrqPMBYgX5pfFo/Tumq0vcFHoqve0dSC0ltzGx2RS/wLrBzLnFZdoFbSnovZRpUznaKJY0H5gIvm9m7cdHQ2M29Q1LDOK8tpe9ZPjPOq5C3AJ1zicuy/TffzPZMt4KZrQW6SWoBPCtpZ+BK4BugAXA/cAVQpcIt3gJ0ziUu6XuCmNki4DWgt5nNtmAV8ADQPa42C2if8rJ2/HBHy3J5AnTOJUqEMcBMU8btSK1iyw9JGwGHAJ9IahPnCegHfBxfMgI4NR4N3gdYnG78D7wL7JxLnFAyx4HbAH+XVExorD1pZiMlvSqpFSHXjgfOies/D/QBpgDLgTMy7cAToHMucUlcCmxmEwh3pSw7/6AK1jfg/MrswxOgcy5R4UoQvxTOOVeIBEV5cnTBE2AOzZgxg1+ccSpz585BEmcOHMTgX13AkGt+y8gRz1FUVESrzTfn/mEPsuWWW7Jw4ULOPutMvpw6lYaNGvHnv/yNnXbeOddvo076ZNQQlixbxdp161izdh09BtzCrp3a8qer+tOwYX3WrF3HhTc+wXsTpwNw2+XHcdj+O7F85fcMuuZhxn8yM8fvILcSGgOsdnmSp+umevXqcdMttzFuwiTeePMd/nzf3UyeNImLLrmMseMm8O774zm8z5H87oZwitMtN91I167dGDtuAsMeeIhLL74gx++gbus96I/s0/8megy4BYChF/Zj6P0vsE//m7j+3pEMvbAfAIf12JFtO7Ri575DGHzDY9z5m/65DDvnQj3AzFNt4Akwh9q0acNuu4frtZs2bUrnzl34+utZNGvWbP06y5cvW3/h+CeTJ9HzwDD+u0PnzkyfPo05c+bUfOAFygyaNW4EQPMmGzF73mIAjuy5K4+OHAPAmI+m0bzpRmzRslmF2ykEyuJfbeBd4Fpi+rRpjB8/jr26h2u3r/ntVTwy/CGaN2/Oiy+/BsAuu3bluWefoUePAxg7ZgxfTZ/OrJkzad26dS5Dr5PMjH/dMxgzY9jTo/nbM6O57Nan+Nfd5/O7i46hqEgcePptAGy5eQtmfrNw/WtnzVnElpu34Jv53+Uq/JzLl4rQ1dYClPQrSZMlPVLB8l6SRlbX/vPJ0qVLOemEn/H72/6wvvU35Pqfgth+AAAOhklEQVShTPlyBv1PGsB999wFwKWX/5rFixax9x7duPfuP9G1224UFxfnMvQ66+Az7mC/n99Mv8H3cPaJB7D/7tsy6PgDuPy2Z9j+8N9y+a1Pc+81A3IdZq3kXeDgPOAQM/NvSRqrV6/mpBN+xoknDaDfMcdusPzEkwbwz2efBqBZs2bcP+wB3n1/PMMefIj58+ex9Tbb1HTIBeHr2L2dt3ApI16dwF47dWTAkXvzz1fGA/D0y+PYc6etwrpzF9Fui03Wv7Zt6xZ8PXdRzQdda2TTAa4dGbBaEqCk+4BtgBckXSHpbUnjJL0laYdy1u+ZUtxwnKSmcf5lksbGqg9DqiPWXDIzzjlrIDt07sIFF128fv6Uzz9f/3jkiOfotENnABYtWsT3338PwAPD/kqPHj8pNV7okrFxowY02bjh+sc/3bczE6d+zex5izlgj+0B6NW9E1O+mgfAqDc+4udHhstRu+/Ske+Wrijo7i9ZXAdcW3rI1TIGaGbnSOoNHAh8D9xmZmsk/RS4EfhZmZdcCpxvZqMlNQFWSjqUUNiwO6FVPULST8zsv9URcy68NXo0jz7yMDvvvAt779ENgCE33MiDDwzj888+pUhFdNhqK+68+z4APpk8mbMGnoYkuuy4E/fdPyyX4ddZm2/WlCduPwuAesXFPPHCe7z81mTOX/4ov7/sOOrVK2LVqjUMvuExAF58cyKH9diJiSOuYfnK1Zx97fBchp9zJdcC54OaOAjSnHA93/aEYob1y1lnNHB7HC98xsxmxgR4KDAurtOEkBA3SICxjtgggPYdOiT/DqrJ/j16sGL1hvUdex/ep9z199l3Xz6a9Fl1h1Xwps1awN4n3rTB/LfGf8H+8ZSYsi666cnqDiuv5Ef6q5nTYK4HXjOznYGjgEZlVzCzm4BfABsBoyV1JnyGvzOzbnHazszKbfKY2f1mtqeZ7dmqZavqeyfOuewoi6kWqIkE2JwfanKdXt4KkrY1s4/M7GZgLNAZeAk4M3aJkdRW0uY1EK9z7kfKl4MgNdEFvoXQBb4aGFXBOhdKOhBYB0wEXjCzVZK6AG/HE4GXAicTSmM752qx2nKaSybVlgDNrGN8OB/olLLo6rj8deD1+PiXFWzjj8AfqytG51w1KfQE6JwrTGGILz8yoCdA51yyatF5fpl4AnTOJc4ToHOuQNWeo7yZeAJ0ziXOW4DOuYJUi85zzsgLojrnEicp45TFNhpJGiPpQ0kTSwqiSNpa0ruSpkh6QlKDOL9hfD4lLu+YaR+eAJ1ziUuoGswq4CAz6wp0A3rHG57fDNxhZtsBC4GBcf2BwMI4/464XlqeAJ1ziUviUmALlsan9eNkwEHAU3H+34F+8XHf+Jy4/GBlaGp6AnTOJSub7BfSUktJ76VMgzbYlFQsaTzhEtiXganAIjNbE1eZCbSNj9sCMwDi8sXAZulC9YMgzrlEhZL4WfVx55vZnulWMLO1QDdJLYBnCYVSEuMtQOdc4pKuhmVmi4DXgH2BFpJKGm/t+KHa1CygPUBc3hxYkG67ngCdc8lLIANKahVbfkjaCDgEmExIhMfF1U4DnouPR8TnxOWvmtmGFYdTeBfYOZe4hK4EaUMopVdMaKw9aWYjJU0CHpd0A6FifEmh5GHAw5KmAN8CGe9Q7wnQOZe4JOoBmtkEYLdy5n9BuFdQ2fkrgeMrsw9PgM655OXJpSCeAJ1zifJ6gM65wuX1AJ1zhcwToHOuQHk9QOdcAfMWoHOuIOVTPUBPgM65xGVT76828ATonEtcnuQ/T4DOueTlSf7zBOicS5ifB+icK1TCxwCdcwUsP9KfJ0DnXDXIkwagJ0DnXPK8C+ycK1j5kf48ATrnElaJ+/7mnCdA51zivBiCc65geQvQOVewPAE65wpU/tQD9PsCO+cSFa4EyTxl3I7UXtJrkiZJmijpgjj/WkmzJI2PU5+U11wpaYqkTyUdlmkf3gJ0ziUuoS7wGuASM/tAUlPgfUkvx2V3mNmtpfepHQn3At4J2BL4j6ROZra2oh14C9A5lzhl8S8TM5ttZh/Ex0uAyUDbNC/pCzxuZqvM7EtgCuXcPziVJ0DnXLKy6P7GFmJLSe+lTIMq3KTUkXCT9HfjrMGSJkj6m6RN4ry2wIyUl80kfcL0BOicS5aynID5ZrZnynR/uduTmgBPAxea2XfAvcC2QDdgNnBbVWP1MUDnXOKSuhZYUn1C8nvEzJ4BMLM5Kcv/AoyMT2cB7VNe3i7Oq5C3AJ1ziUvoKLCAYcBkM7s9ZX6blNWOAT6Oj0cA/SU1lLQ1sD0wJt0+vAXonEtcQmcB7g+cAnwkaXyc9xvgJEndAAOmAWcDmNlESU8CkwhHkM9PdwQYPAE656pDAhnQzN6sYEvPp3nNUGBotvvwBOicS5SAojy5Fk5mlusYEiVpHjA913EkpCUwP9dBuA3UtZ/LVmbWKqmNSXqR8BllMt/Meie136qocwmwLpH0npntmes4XGn+c6k7/Ciwc65geQJ0zhUsT4C1W7lnxruc859LHeFjgM65guUtQOdcwfIE6JwrWJ4AnXMFyxOgc1WkMiVPyj53tZ8nQOeqQJIsHkGUtBmA+RHFvONHgfOApGOAZUCRmb2Y63jcDyT9EtiXUJjzDeAFM1ud26hctrwFWMtJGgxcCmwKPC3pgByH5CJJxwPHA+cChwI9PPnlF0+AtZSCrYBDgIMI9zZ4A3grVsl1NaxkjE9Sye9NW+AmQlHOr4Gr4vItchKgqzRPgLWXgHmEG7v8H9ATOC4WeDxNUqdcBldoUsf8gJIE9wVwI3CqmR1mZqslXQKck5IkXS3m9QBrIUk9gF3N7B5JGwMDzaxRXPZz4BekKQrpklPS6ks54HEh0E/SEcBUwq0ax0raA+gEDABOMbN1OQrZVYIfBKlFYqtBwEBgD+A14DlgONCCcO+D/YAzzeyjXMVZSCQ1NLNV8fFA4CzgeDObEYciDiD8rHoCK4Dr/GeTPzwB1iKSOpjZV7HVdzzhF+sdM3tU0tHAWsINYr7IaaAFQtJ2hDG+S8xsuqSLCTfbXgl0Bc4E7iH8gVpJ+H1anqt4XeX5OEUtIWlL4H+SDo+/RE8RWnynSToVeN7MRnnyq1HfE7q5v4t3IpsCnAdcDHxFOOjxE6C5ma3w5Jd/PAHWApIuJ5xL9hvgRkmHmtmyeKPoBsCuQJNcxliIzOwr4G7CwY7bCEfhjwN+ZmZPAEsI955dlbMg3Y/iCTDHJPUBegFjzewR4PfA7ZKOiN3eFcBtZrYoh2EWhHjqUanfiZgEbye0+P4MbGpmyySdB9wMDDKz2TUfrUuCjwHWMEkNgO3MbJKk04FfA1PM7MiUdY4DLiEkvwvNbEJOgi0wkpqY2dL4+GygGeHqm5slNQeuADoSusBtgMU+JJHfPAHWsDiwfg/h0qkOwN+AC4G/m9mdKes1B9aY2bKcBFpgYmu7r5kNlHQR0A/4LXAX8JGZDZDUlHDP2Y0JLT8/1SXP+XmANczMpkiaAAwCrjCzhyXNB86O59r+Ka63OKeBFpBYzOBXwGBJOwB7AofHeVOBjSQ9ZWbHSboK2MiTX93gCTA37gM+BC6W9K2ZPSFpLnCPpPlm9liO4ys03wNrgGsAA64EuhNahPtK6g68IGm4mZ1MOPjh6gBPgDlgZlOAKZIWAUPj/40Iv4jv5DS4AmRmSyS9Srjk8NZ4zt/WwNtxlc6Eg1OP5ypGVz08AeaQmf1L0mrgVkK5q4Fm9mWOwypUTwDvA3dJWgC8AOwm6W+E7nBPM5uWw/hcNfCDILWApM0Jl5vOy3UshU7S7oRk+BvgTULFlwX+h6lu8gToXBmSugKvAlfGk9FdHeUJ0LlySNoZWGFmU3Mdi6s+ngCdcwXLL4VzzhUsT4DOuYLlCdA5V7A8ATrnCpYnQOdcwfIEWEdJWitpvKSPJf0jltmv6rZ6SRoZHx8t6ddp1m0Ra+VVdh/XSro02/ll1nkwlhDLdl8dJX1c2Rhd3eMJsO5aYWbdzGxnwjXG56QuLK/4ZzbMbISZ3ZRmlRaEsvHO1XqeAAvD/4DtYsvnU0kPEe430l7SoZLelvRBbCk2AZDUW9Inkj4Aji3ZkKTTJd0VH7eW9KykD+O0H+EmQtvG1ufv43qXSRoraYKkISnbukrSZ5LeBHbI9CYknRW386Gkp8u0an8q6b24vSPj+sWSfp+y77N/7Afp6hZPgHWcpHqEi/lLbtW4PXCPme1EKMBwNfBTM9sdeI9QoqsR8BfgKMKd6bbYYMPBncAbZtYV2B2YSKhwPTW2Pi+TdGjcZ3egG7CHpJ8o3Ee3f5zXB9gri7fzjJntFfc3mXD70BId4z6OAO6L72EgoWrzXnH7Z8UqL84BXg2mLttI0vj4+H/AMGBLYLqZlZTc2gfYERitcP/vBoQSUJ2BL83scwBJwwkFXMs6CDgVwMzWAoslbVJmnUPjNC4+b0JIiE2BZ0vupCZpRBbvaWdJNxC62U2Al1KWPRmLlH4u6Yv4Hg4Fdk0ZH2we9/1ZFvtyBcATYN21wsy6pc6ISS61xL6Al83spDLrlXrdjyTgd2b25zL7uLAK23oQ6GdmH8b7qfRKWVb2mk6L+/6lmaUmSiR1rMK+XR3kXeDC9g6wf7xPCZIaS+oEfAJ0lLRtXO+kCl7/CnBufG1xvI/JEkLrrsRLwJkpY4ttY/mv/wL9JG0U77VxVBbxNgVmS6oPDCiz7HhJRTHmbYBP477PjesjqZOkxlnsxxUIbwEWMDObF1tSj0lqGGdfbWafSRoEjJK0nNCFblrOJi4A7pc0EFgLnGtmb0saHU8zeSGOA3YB3o4t0KXAyWb2gaQnCLcGmAuMzSLk3wLvAvPi/6kxfQWMIdzJ7RwzWynpr4SxwQ8Udj6PcLMj5wCvBuOcK2DeBXbOFSxPgM65guUJ0DlXsDwBOucKlidA51zB8gTonCtYngCdcwXr/wFZyiJzo91pCQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5d5e71c320>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"yt1_c3 = yt1.copy()\n",
"yt1_c3[yt1_c3 == \"REAL\"] = \"true\"\n",
"yt1_c3[yt1_c3 == \"FAKE\"] = \"false\"\n",
"\n",
"cm_3a=test_classifier(labels=[\"true\", \"false\"], \n",
" title=\"configuration 3: model b) → dataset 1\",\n",
" Xt=vectorizer_2.transform(Xt1),\n",
" yt=yt1_c3, clf=clf_b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"----\n",
"## configuration 4)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"def get_dataset3_split(dataset1_in, dataset2_in):\n",
" try:\n",
" print('processing datasets')\n",
" print('ds1=', dataset1_in)\n",
" print('ds2=', dataset2_in)\n",
"\n",
" print('-- fake news')\n",
" df1 = pd.read_csv(dataset1_in, sep=',', usecols=['title','text','label'])\n",
" df1['claim'] = df1[['title', 'text']].apply(lambda x: '. '.join(x), axis=1)\n",
" del df1['title']\n",
" del df1['text']\n",
" df1.rename(index=str, columns={'label': 'y'}, inplace=True)\n",
" print(df1.keys())\n",
" print(len(df1[df1['y']=='REAL']))\n",
" print(len(df1[df1['y']=='FAKE']))\n",
" df1['y'] = np.where(df1['y'] == 'FAKE', 'false', 'true')\n",
" print(len(df1))\n",
"\n",
" print('-- liar liar')\n",
" df2 = pd.read_csv(dataset2_in, sep='\\t', header=None, usecols=[1,2], names=['y', 'claim'])\n",
" print(df2.keys())\n",
" print(set(df2.y), len(df2))\n",
" print(len(df2[df2['y'] == 'true']))\n",
" print(len(df2[df2['y'] == 'false']))\n",
" df2=df2[(df2['y'] == 'true') | (df2['y'] == 'false')]\n",
" print(set(df2.y), len(df2))\n",
"\n",
" df3=pd.concat([df1, df2], ignore_index=True)\n",
"\n",
" print(df3['y'].value_counts())\n",
" print('done')\n",
" return train_test_split(df3['claim'], df3['y'], test_size=0.3, random_state=4222)\n",
" except Exception as e:\n",
" print(e)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"processing datasets\n",
"ds1= data/fake_or_real_news.csv\n",
"ds2= data/train.tsv\n",
"-- fake news\n",
"Index(['y', 'claim'], dtype='object')\n",
"3171\n",
"3164\n",
"6335\n",
"-- liar liar\n",
"Index(['y', 'claim'], dtype='object')\n",
"{'pants-fire', 'false', 'mostly-true', 'true', 'barely-true', 'half-true'} 10240\n",
"1676\n",
"1995\n",
"{'true', 'false'} 3671\n",
"false 5159\n",
"true 4847\n",
"Name: y, dtype: int64\n",
"done\n"
]
}
],
"source": [
"X3, Xt3, y3, yt3 = get_dataset3_split('data/fake_or_real_news.csv', 'data/train.tsv')"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"vectorizer_3 = TfidfVectorizer(stop_words='english', max_df=0.7)\n",
"vec_train_3 = vectorizer_3.fit_transform(X3)\n",
"vec_test_3 = vectorizer_3.transform(Xt3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* using MLP again"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"MLPClassifier(activation='relu', alpha=0.0001, batch_size='auto', beta_1=0.9,\n",
" beta_2=0.999, early_stopping=False, epsilon=1e-08,\n",
" hidden_layer_sizes=(16, 16), learning_rate='constant',\n",
" learning_rate_init=0.001, max_iter=200, momentum=0.9,\n",
" nesterovs_momentum=True, power_t=0.5, random_state=4222,\n",
" shuffle=True, solver='adam', tol=0.0001, validation_fraction=0.1,\n",
" verbose=False, warm_start=False)"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"clf_3 = MLPClassifier(hidden_layer_sizes=(16,16), random_state=4222)\n",
"clf_3.fit(vec_train_3, y3)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"'score: 0.9997144488863506'\n",
"Confusion matrix, without normalization\n",
"array([[3367, 1],\n",
" [ 1, 3635]])\n",
"'score: 0.7714856762158561'\n",
"Confusion matrix, without normalization\n",
"array([[1136, 343],\n",
" [ 343, 1180]])\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5d5ac59f98>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5d5e7e90f0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"test_classifier(labels=[\"true\",\"false\"], title=\"Configuration 4 -- train\", Xt=vec_train_3, yt=y3, clf=clf_3)\n",
"cm_4=test_classifier(labels=[\"true\",\"false\"], title=\"Configuration 4 -- test\", Xt=vec_test_3, yt=yt3, clf=clf_3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### exporting"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"def recall(cm):\n",
" return cm[0,0] / (cm[0,0] + cm[0,1])\n",
"def precision(cm):\n",
" return cm[0,0] / (cm[0,0] + cm[1,0])\n",
"\n",
"def accuracy(cm):\n",
" return (cm[0,0] + cm[1,1]) / np.sum(cm)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"from rdflib import Namespace, Graph, Literal\n",
"from rdflib.namespace import DCTERMS, RDF"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"class mexcore_graph(object):\n",
" def __init__(self, name_exp):\n",
" self.nsp = {\n",
" \"this\": Namespace(\"http://mex.aksw.org/examples/\"),\n",
" \"xsd\": Namespace(\"http://www.w3.org/2001/XMLSchema#\"),\n",
" \"rdfs\": Namespace(\"http://www.w3.org/2000/01/rdf-schema#\"),\n",
" \"mexcore\": Namespace(\"http://mex.aksw.org/mex-core#\"),\n",
" \"mexperf\": Namespace(\"http://mex.aksw.org/mex-perf#\"),\n",
" \"mexalgo\": Namespace(\"http://mex.aksw.org/mex-algo#\"),\n",
" \"prov\": Namespace(\"http://www.w3.org/ns/prov#\"),\n",
" \"dct\": DCTERMS,\n",
" \"rdf\": RDF\n",
" }\n",
" self.g = Graph()\n",
"\n",
" for i in self.nsp.items():\n",
" self.g.bind(i[0],i[1])\n",
" \n",
" self.exp = self.nsp[\"this\"][name_exp]\n",
" self.g.add((self.nsp[\"this\"][name_exp], self.nsp[\"rdf\"].type, self.nsp[\"mexcore\"].Experiment))\n",
" \n",
" def add_dataset(self,dset_name):\n",
" self.g.add((self.nsp[\"this\"][dset_name], self.nsp[\"rdf\"].type, self.nsp[\"mexcore\"].dataset))\n",
" self.g.add((self.nsp[\"this\"][dset_name], self.nsp[\"rdfs\"].label, Literal(dset_name)))\n",
" \n",
" \n",
" def add_datasets(self, dset_names):\n",
" for dset_name in dset_names:\n",
" self.add_dataset(dset_name)\n",
" \n",
" def add_model(self, model_name, literal):\n",
" self.g.add((self.nsp[\"this\"][model_name],self.nsp[\"rdf\"].type,self.nsp[\"mexalgo\"].Algorithm))\n",
" self.g.add((self.nsp[\"this\"][model_name],self.nsp[\"rdfs\"].label,Literal(model_name)))\n",
" self.g.add((self.nsp[\"this\"][model_name],self.nsp[\"dct\"].identifier,Literal(literal)))\n",
" \n",
" def add_configuration(self, conf_name, used_model, used_dset):\n",
" self.g.add((self.nsp[\"this\"][conf_name],self.nsp[\"rdf\"].type,self.nsp[\"mexcore\"].ExperimentConfiguration))\n",
" self.g.add((self.nsp[\"this\"][conf_name],self.nsp[\"rdfs\"].label,Literal(conf_name)))\n",
" self.g.add((self.nsp[\"this\"][conf_name],self.nsp[\"prov\"].used, self.nsp[\"this\"][used_model]))\n",
" self.g.add((self.nsp[\"this\"][conf_name],self.nsp[\"prov\"].used, self.nsp[\"this\"][used_dset]))\n",
" self.g.add((self.nsp[\"this\"][conf_name],self.nsp[\"prov\"].wasStartedBy, self.exp))\n",
" \n",
" def add_measurement(self, meas_name, used_conf, confusion_matrix):\n",
" self.g.add((self.nsp[\"this\"][meas_name],self.nsp[\"rdf\"].type,self.nsp[\"mexcore\"].PerformanceMeasure))\n",
" self.g.add((self.nsp[\"this\"][meas_name],self.nsp[\"mexperf\"].precision,Literal(str(precision(confusion_matrix)),datatype=self.nsp[\"xsd\"].float)))\n",
" self.g.add((self.nsp[\"this\"][meas_name],self.nsp[\"mexperf\"].recall,Literal(str(recall(confusion_matrix)),datatype=self.nsp[\"xsd\"].float)))\n",
" self.g.add((self.nsp[\"this\"][meas_name],self.nsp[\"mexperf\"].accuracy,Literal(str(accuracy(confusion_matrix)),datatype=self.nsp[\"xsd\"].float)))\n",
" self.g.add((self.nsp[\"this\"][meas_name],self.nsp[\"prov\"].wasGeneratedBy,self.nsp[\"this\"][used_conf]))\n",
"\n",
"\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [],
"source": [
"mg = mexcore_graph(\"jonas_weinz_task_2\")\n",
"mg.add_datasets([\"Dataset01\",\"Dataset02\",\"Dataset03\"])\n",
"\n",
"mg.add_model(\"model_a\", \"RandomForestClassifier\")\n",
"mg.add_model(\"model_b\", \"MLPClassifier\")\n",
"mg.add_model(\"model_c\", \"MLPClassifier\")\n",
"\n",
"mg.add_configuration(\"conf1\",\"model_a\",\"Dataset01\")\n",
"mg.add_configuration(\"conf2\",\"model_b\", \"Dataset02\")\n",
"mg.add_configuration(\"conf3a\",\"model_b\", \"Dataset01\")\n",
"mg.add_configuration(\"conf3b\", \"model_a\", \"Dataset02\")\n",
"mg.add_configuration(\"conf4\", \"model_c\", \"Dataset03\")\n",
"\n",
"mg.add_measurement(\"measure1\", \"conf1\", cm_1)\n",
"mg.add_measurement(\"measure2\", \"conf2\", cm_2)\n",
"mg.add_measurement(\"measure3a\", \"conf3a\", cm_3a)\n",
"mg.add_measurement(\"measure3b\", \"conf3b\", cm_3b)\n",
"mg.add_measurement(\"measure4\", \"conf4\", cm_4)\n",
"\n",
"mg.g.serialize(destination='output.ttl', format='turtle')"
]
},
{
"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.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}