{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# **Báo cáo BTL môn học máy**\n\n*Classify toxic question*\n\n**Họ tên**: Đinh Thị Giang\n\n**MSSV**: 19021258\n\n**Lớp học phần**: INT3405E_20\n\n# **1. Mô tả bài toán**\nQuoara là một nền tảng giúp mọi người học hỏi lẫn nhau bằng cách đặt câu hỏi và trả lời để chia sẻ kiến thức. Một thách thức lớn là loại bỏ những câu hỏi thiếu chân thành,những câu hỏi được đặt ra dựa trên những tiền đề sai lầm hoặc có ý định đưa ra một tuyên bố hơn là tìm kiếm những câu trả lời hữu ích\n\n* Mục tiêu: sử dụng tập dữ liệu mà Quora cung cấp để phân loại đâu là những câu hỏi mang ý nghĩa không chân thành, mang nội dung độc hại, gây hiểu lầm\n* Input: tập câu hỏi-dữ liệu text\n* Output: kết quả cho việc câu hỏi đó có là câu hỏi chân thành hay không(nhãn 0 tương ứng với câu hỏi chân thành, nhãn 1 ứng với câu hỏi không chân thành)\n","metadata":{}},{"cell_type":"code","source":"#import thư viện\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\nimport matplotlib.pyplot as plt \nfrom transformers import AutoTokenizer, AutoModelForSequenceClassification\nimport re\nimport string\nimport nltk\nfrom nltk.corpus import stopwords\nfrom wordcloud import WordCloud, STOPWORDS\nfrom nltk.tokenize import word_tokenize\nimport seaborn as sns\n\nfrom nltk.stem import PorterStemmer, WordNetLemmatizer\nfrom nltk.corpus import wordnet\nfrom nltk.tokenize import word_tokenize\n\nfrom sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.naive_bayes import BernoulliNB\nfrom sklearn.metrics import accuracy_score, f1_score,recall_score, classification_report, confusion_matrix\nfrom sklearn.model_selection import train_test_split\nfrom xgboost import XGBClassifier\nfrom sklearn.svm import LinearSVC\n\n\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-01-08T17:29:56.996017Z","iopub.execute_input":"2022-01-08T17:29:56.996678Z","iopub.status.idle":"2022-01-08T17:30:01.887716Z","shell.execute_reply.started":"2022-01-08T17:29:56.996532Z","shell.execute_reply":"2022-01-08T17:30:01.886816Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **2. Phân tích dữ liệu**\nNhận xét:\ndữ liệu được cung cấp bao gồm 2 file chính là train.csv và test.csv trong đó\n\n**file train.csv**\n* số dòng: 136122\n* số cột: 3 (qid, question_text, target)\n    \n Tập dữ liệu không có giá trị null, trùng lặp\n\n**file test.csv**\n* số dòng: 375806\n* số cột: 2 (qid, question_text)\n\n  Tập dữ liệu không có giá trị null, trùng lặp\n\n**Thông tin về các trường dữ liệu**\n* qid: id của câu hỏi\n* question_text: các câu hỏi dạng text\n* target: phân loại câu hỏi (target = 0 là câu hỏi chân thành, target = 1 là câu hỏi không chân thành)\n","metadata":{}},{"cell_type":"code","source":"#Đọc dữ liệu\ntrain_dir = '../input/quora-insincere-questions-classification/train.csv'\ntest_dir = '../input/quora-insincere-questions-classification/test.csv'\ntrain_data = pd.read_csv(train_dir)\ntest_data = pd.read_csv(test_dir)","metadata":{"execution":{"iopub.status.busy":"2022-01-08T17:30:01.889364Z","iopub.execute_input":"2022-01-08T17:30:01.889665Z","iopub.status.idle":"2022-01-08T17:30:07.631710Z","shell.execute_reply.started":"2022-01-08T17:30:01.889628Z","shell.execute_reply":"2022-01-08T17:30:07.630978Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Xem kích thước của các tập dữ liệu\nprint(\"Train shape: \", train_data.shape)\nprint(\"Test shape: \", test_data.shape)","metadata":{"execution":{"iopub.status.busy":"2022-01-08T17:30:07.632694Z","iopub.execute_input":"2022-01-08T17:30:07.632900Z","iopub.status.idle":"2022-01-08T17:30:07.638620Z","shell.execute_reply.started":"2022-01-08T17:30:07.632877Z","shell.execute_reply":"2022-01-08T17:30:07.637844Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Thông tin về tập dữ liệu train và tập dữ liệu test\ntrain_data.info()\nprint('\\n')\ntest_data.info() ","metadata":{"execution":{"iopub.status.busy":"2022-01-08T17:30:07.641345Z","iopub.execute_input":"2022-01-08T17:30:07.642063Z","iopub.status.idle":"2022-01-08T17:30:08.059241Z","shell.execute_reply.started":"2022-01-08T17:30:07.642030Z","shell.execute_reply":"2022-01-08T17:30:08.058295Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data.head()","metadata":{"execution":{"iopub.status.busy":"2022-01-08T17:30:08.060602Z","iopub.execute_input":"2022-01-08T17:30:08.061116Z","iopub.status.idle":"2022-01-08T17:30:08.077907Z","shell.execute_reply.started":"2022-01-08T17:30:08.061061Z","shell.execute_reply":"2022-01-08T17:30:08.077025Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data.head()","metadata":{"execution":{"iopub.status.busy":"2022-01-08T17:30:08.081231Z","iopub.execute_input":"2022-01-08T17:30:08.082864Z","iopub.status.idle":"2022-01-08T17:30:08.091040Z","shell.execute_reply.started":"2022-01-08T17:30:08.082833Z","shell.execute_reply":"2022-01-08T17:30:08.090267Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Kiểm tra trùng lặp\ntrain_data.duplicated(subset = [\"question_text\", \"qid\", \"target\"]).sum(),test_data.duplicated(subset = [\"question_text\", \"qid\"]).sum()\n","metadata":{"execution":{"iopub.status.busy":"2022-01-08T17:30:08.092150Z","iopub.execute_input":"2022-01-08T17:30:08.092366Z","iopub.status.idle":"2022-01-08T17:30:09.448774Z","shell.execute_reply.started":"2022-01-08T17:30:08.092340Z","shell.execute_reply":"2022-01-08T17:30:09.447964Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Thống kê số câu hỏi chân thành(nhãn 0) và không chân thành(nhãn 1) trong tập train\nvalue_counts = train_data['target'].value_counts()\nvalue_counts_percentage = train_data['target'].value_counts(normalize=True).mul(100).round(2).astype(str) + '%'\npd.concat([value_counts, value_counts_percentage], axis=1, keys=['target count', 'target distribution'])","metadata":{"execution":{"iopub.status.busy":"2022-01-08T17:30:09.449877Z","iopub.execute_input":"2022-01-08T17:30:09.450078Z","iopub.status.idle":"2022-01-08T17:30:09.479574Z","shell.execute_reply.started":"2022-01-08T17:30:09.450056Z","shell.execute_reply":"2022-01-08T17:30:09.478699Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Biểu diễn số câu chân thành và không chân thành bằng biểu đồ\n# Bar chart\nplt.subplot(1, 2, 1)\n\nsns.countplot(x=\"target\", data=train_data)\nplt.title('Target Count')\nplt.subplots_adjust(right=1.5)\n\n# Pie Chart \nplt.subplot(1, 2, 2)\nvalues = [train_data[train_data['target']==0].shape[0], train_data[train_data['target']==1].shape[0]]\nlabels = ['0-sincere', '1-insincere']\n\nplt.pie(values, autopct='%.2f%%', shadow=True)\nplt.title('Target Distribution')\nplt.legend(labels, loc=\"best\")\nplt.tight_layout()\nplt.subplots_adjust(right=1.9)\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-01-08T17:30:09.481049Z","iopub.execute_input":"2022-01-08T17:30:09.481519Z","iopub.status.idle":"2022-01-08T17:30:10.140530Z","shell.execute_reply.started":"2022-01-08T17:30:09.481480Z","shell.execute_reply":"2022-01-08T17:30:10.139759Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Vấn đề: Mất cần bằng dữ liệu**\n\n\nTập dữ liệu bị mất cân bằng nghiêm trọng: \n* Số câu hỏi chân thành là 1225312 câu  chiếm  93.81%, \n* Số câu hỏi không chân thành là 80810 câu chiếm 6.19%. \n* Tỷ lệ dữ liệu giữa 2 nhóm là 15:1. \n\nTỉ lệ dữ liệu 15:1 sẽ gây ra các vấn đề:\n* Ngộ nhận chất lượng mô hình, khi đó thước đo đánh giá mô hình là độ chính xác(accuracy) có thể đạt được rất cao mà không cần tới mô hình, vì vậy ta không chọn độ accuracy làm chỉ số đánh giá mô hình\n* Dẫn tới dự báo kém chính xác trên nhóm thiểu số. Bới đa phần kết quả dự báo ra thường thiên về 1 nhóm là nhóm đa số và rất kém trên nhóm thiểu số. Trong khi đó tầm quan trọng của việc dự báo được chính xác một mẫu thuộc nhóm thiểu số lớn hơn so với dự báo thuộc nhóm đa số.  \n\n**Cách giải quyết vấn đề mất cân bằng dữ liệu**\n\n**Thay đổi metric**\nNhư đã nói, khi hiện tượng mất cân bằng dữ liệu nghiêm trọng xảy ra thì việc sử dụng accuracy làm thước đo đánh giá mô hình là không hiệu quả. Thay vào đó chúng ta có thể dùng các metrics thay thế như: precision, recall, f1_score,... Các chỉ số này sẽ không quá lớn để dẫn tới ngộ nhận độ chính xác, đồng thời chúng tập trung hơn vào việc đánh giá độ chính xác trên nhóm thiểu số\n\n-> Chọn **F1_score** để đánh giá mô hình\n\nMetrics\n\nprecision của lớp A: số lượng mẫu đoán đúng là A/số lượng mẫu đoán là A\n$$p = \\frac{\\sum_{i=1}^n \\mathbb I(y_i = h(x_i) = A)}{\\sum_{i=1}^n \\mathbb I(h(x_i) = A)}$$\n\n\nrecall của lớp A: số lượng mẫu đoán đúng là A/số lượng mẫu là A\n$$r = \\frac{\\sum_{i=1}^n \\mathbb I(y_i = h(x_i) = A)}{\\sum_{i=1}^n \\mathbb I(y_i = A)}$$\n\nF1_score của lớp A(trung bình điều hóa giữa precision và recall):\n$$\\mathrm{F1} = \\frac 2 {\\frac 1 p + \\frac 1 r}$$\n\n-> Sử dụng F1_score để đánh giá chất lượng mô hình\n\n**Cải thiện bằng các phương pháp**: \nUnder Sampling, Over Sampling\n\nTrong bài này em dùng Under Sampling để xử lý mất cân bằng dữ liệu\n\n\n\n","metadata":{}},{"cell_type":"markdown","source":"# **3. Xử lý dữ liệu**\n\nTrong tập dữ liệu: có nhiều câu từ trong đó viết sai chính tả, sử dụng các từ viết tắt cùng các ký tự đặc biệt cho nên sẽ gây ảnh hưởng tới kết quả mô hình dự đoán. Việc ta cần làm là loại bỏ nhiễu\n\n1. **Cleaning data**\n    * Chuyển về dạng lowercase\n    * Sửa các từ sai chính tả\n    * Chuẩn hóa các từ viết tắt thành dạng hoàn chỉnh của nó (VD: “2k18” thành “2018”, “wwii” thành “world war 2”.)\n    * Xóa các ký tự đặc biệt không phải là chữ/số (VD: “organisation” thành “organization”, “criticise” thành “criticize”.\n    * #Loại bỏ stopwords trong câu(đã thử) nhưng không dùng trong version này vì khi loại bỏ stopword thì khả năng phân loại của mô hình giảm xuống\n    \n    \n2. **Finding the root word**: Giảm các dạng vô hướng của mỗi từ thành một cơ sở hoặc gốc chung(để loại bỏ những từ có các digit cuối kiểu s/es/ed mà không làm mất đi nhiều ý nghĩa của câu (VD: words -> word) \n    \n    **Lemmatization**: chuyển các từ về dạng nguyên thủy, lemmeatization sẽ xử lý bằng một bộ từ điển nào đó, điều này sẽ đảm bảo rằng các từ như “goes“, “went” và “go” sẽ chắc chắn có kết quả trả về là như nhau\n    \n3. **Text Vectorization**:\n\n    Vectorization là một kỹ thuật làm cho mã của mình thực thi nhanh chóng. bằng cách sử dụng triển khai vector hóa trong một thuật toán tối ưu hóa, điều này có thể làm cho quá trình tính toán nhanh hơn nhiều\n    * Count Vectorizer: chia câu hỏi thành các từ, chuyển nó thành một vector trên cơ sở tần suất, được sử dụng để chuyển đổi một bộ sưu tập các tài liệu văn bản thành một vectơ có số lượng thuật ngữ / mã thông báo. Nó cũng cho phép xử lý trước dữ liệu văn bản trước khi tạo biểu diễn vectơ. Chức năng này làm cho nó trở thành một mô-đun biểu diễn tính năng rất linh hoạt cho văn bản.\n    \n    Nhược điểm:\n\n        * Không xác định được mức độ quan trọng giữa các từ.\n        * Không xác định mối quan hệ giữa các từ với nhau\n        * Chỉ đánh giá những từ xuất hiện nhiều trong kho văn bản mới có ý nghĩa về mặt thống kê.\n\n    * TF_IDF(Term Frequency-Inverde Document Frequency): là 1 kĩ thuật sử dụng trong khai phá dữ liệu văn bản, giúp đánh trọng số cho mỗi từ trong văn bản, trong đó TF là tần số xuất hiện của từ trong văn bản và idf là tần số nghịch giúp làm giảm giá trị của những từ phổ biến.Trọng số này được sử dụng để đánh giá tầm quan trọng của một từ trong một văn bản. Giá trị cao thể hiện độ quan trọng cao và nó phụ thuộc vào số lần từ xuất hiện trong văn bản nhưng bù lại bởi tần suất của từ đó trong tập dữ liệu. \n \n    \n4. **Splitting**: chia tập train thành 2 tập theo tỉ lệ 80% để huấn luyện, 20% để xác thực\n\n","metadata":{}},{"cell_type":"code","source":"# 1.cleaning data\n\ncontraction_dict = {\"ain't\": \"is not\", \"aren't\": \"are not\",\"can't\": \"cannot\", \"'cause\": \"because\",\"could've\": \"could have\", \"couldn't\": \"could not\", \"didn't\": \"did not\",\"doesn't\": \"does not\",\"don't\": \"do not\", \"hadn't\": \"had not\", \"hasn't\": \"has not\", \"haven't\": \"have not\",\"he'd\": \"he would\",\"he'll\": \"he will\",\"he's\": \"he is\", \"how'd\": \"how did\",\"how'd'y\": \"how do you\", \"how'll\": \"how will\", \"how's\": \"how is\",  \"I'd\": \"I would\",\"I'd've\": \"I would have\", \"I'll\": \"I will\", \"I'll've\": \"I will have\",\"I'm\": \"I am\",\"I've\": \"I have\", \"i'd\": \"i would\", \"i'd've\": \"i would have\", \"i'll\": \"i will\", \"i'll've\": \"i will have\",\"i'm\": \"i am\", \"i've\": \"i have\", \"isn't\": \"is not\", \"it'd\": \"it would\",\"it'd've\": \"it would have\", \"it'll\": \"it will\",\"it'll've\": \"it will have\",\"it's\": \"it is\",\"let's\": \"let us\", \"ma'am\": \"madam\", \"mayn't\": \"may not\", \"might've\": \"might have\",\"mightn't\": \"might not\",\"mightn't've\": \"might not have\", \"must've\": \"must have\", \"mustn't\": \"must not\", \"mustn't've\": \"must not have\", \"needn't\": \"need not\", \"needn't've\": \"need not have\",\"o'clock\": \"of the clock\", \"oughtn't\": \"ought not\",\"oughtn't've\": \"ought not have\", \"shan't\": \"shall not\", \"sha'n't\": \"shall not\", \"shan't've\": \"shall not have\",\"she'd\": \"she would\", \"she'd've\": \"she would have\", \"she'll\": \"she will\",\"she'll've\": \"she will have\", \"she's\": \"she is\", \"should've\": \"should have\",\"shouldn't\": \"should not\",\"shouldn't've\": \"should not have\", \"so've\": \"so have\",\"so's\": \"so as\",\"this's\": \"this is\",\"that'd\": \"that would\", \"that'd've\": \"that would have\", \"that's\": \"that is\",\"there'd\": \"there would\",\"there'd've\": \"there would have\", \"there's\": \"there is\", \"here's\": \"here is\",\"they'd\": \"they would\",\"they'd've\": \"they would have\",\"they'll\": \"they will\",\"they'll've\": \"they will have\", \"they're\": \"they are\", \"they've\": \"they have\", \"to've\": \"to have\",\"wasn't\": \"was not\",\"we'd\": \"we would\",\"we'd've\": \"we would have\",\"we'll\": \"we will\",\"we'll've\": \"we will have\",\"we're\": \"we are\", \"we've\": \"we have\", \"weren't\": \"were not\",\"what'll\": \"what will\",\"what'll've\": \"what will have\", \"what're\": \"what are\",  \"what's\": \"what is\", \"what've\": \"what have\",\"when's\": \"when is\", \"when've\": \"when have\", \"where'd\": \"where did\",\"where's\": \"where is\", \"where've\": \"where have\", \"who'll\": \"who will\",\"who'll've\": \"who will have\", \"who's\": \"who is\",\"who've\": \"who have\", \"why's\": \"why is\", \"why've\": \"why have\",\"will've\": \"will have\",\"won't\": \"will not\", \"won't've\": \"will not have\",\"would've\": \"would have\", \"wouldn't\": \"would not\",\"wouldn't've\": \"would not have\", \"y'all\": \"you all\", \"y'all'd\": \"you all would\",\"y'all'd've\": \"you all would have\",\"y'all're\": \"you all are\",\"y'all've\": \"you all have\",\"you'd\": \"you would\", \"you'd've\": \"you would have\", \"you'll\": \"you will\", \"you'll've\": \"you will have\",\"you're\": \"you are\", \"you've\": \"you have\"}                    \n          \nmispell_dict = {'colour': 'color', 'centre': 'center', 'favourite': 'favorite', 'travelling': 'traveling','counselling': 'counseling', 'theatre': 'theater', 'cancelled': 'canceled', 'labour': 'labor','organisation': 'organization', 'wwii': 'world war 2', 'citicise': 'criticize', 'youtu ': 'youtube ', 'Qoura': 'Quora', 'sallary': 'salary', 'Whta': 'What', 'narcisist': 'narcissist', 'howdo': 'how do','whatare': 'what are', 'howcan': 'how can', 'howmuch': 'how much', 'howmany': 'how many','whydo': 'why do', 'doI': 'do I', 'theBest': 'the best', 'howdoes': 'how does', 'mastrubation': 'masturbation','mastrubate': 'masturbate', \"mastrubating\": 'masturbating','pennis': 'penis', 'Etherium': 'bitcoin', 'narcissit': 'narcissist', 'bigdata': 'big data','2k17': '2017', '2k18': '2018', 'qouta': 'quota', 'exboyfriend': 'ex boyfriend', 'airhostess': 'air hostess', \"whst\": 'what', 'watsapp': 'whatsapp','demonitisation': 'demonetization','demonitization': 'demonetization', 'demonetisation': 'demonetization','electroneum':'bitcoin','nanodegree':'degree','hotstar':'star','dream11':'dream','ftre':'fire','tensorflow':'framework','unocoin':'bitcoin','lnmiit':'limit','unacademy':'academy','altcoin':'bitcoin','altcoins':'bitcoin','litecoin':'bitcoin','coinbase':'bitcoin','cryptocurency':'cryptocurrency','simpliv':'simple','quoras':'quora','schizoids':'psychopath','remainers':'remainder','twinflame':'soulmate','quorans':'quora','brexit':'demonetized','iiest':'institute','dceu':'comics','pessat':'exam','uceed':'college','bhakts':'devotee','boruto':'anime','cryptocoin':'bitcoin','blockchains':'blockchain','fiancee':'fiance','redmi':'smartphone','oneplus':'smartphone','qoura':'quora','deepmind':'framework','ryzen':'cpu','whattsapp':'whatsapp','undertale':'adventure','zenfone':'smartphone','cryptocurencies':'cryptocurrencies','koinex':'bitcoin','zebpay':'bitcoin','binance':'bitcoin','whtsapp':'whatsapp','reactjs':'framework','bittrex':'bitcoin','bitconnect':'bitcoin','bitfinex':'bitcoin','yourquote':'your quote','whyis':'why is','jiophone':'smartphone','dogecoin':'bitcoin','onecoin':'bitcoin','poloniex':'bitcoin','7700k':'cpu','angular2':'framework','segwit2x':'bitcoin','hashflare':'bitcoin','940mx':'gpu','openai':'framework','hashflare':'bitcoin','1050ti':'gpu','nearbuy':'near buy','freebitco':'bitcoin','antminer':'bitcoin','filecoin':'bitcoin','whatapp':'whatsapp','empowr':'empower','1080ti':'gpu','crytocurrency':'cryptocurrency','8700k':'cpu','whatsaap':'whatsapp','g4560':'cpu','payymoney':'pay money','fuckboys':'fuck boys','intenship':'internship','zcash':'bitcoin','demonatisation':'demonetization','narcicist':'narcissist','mastuburation':'masturbation','trignometric':'trigonometric','cryptocurreny':'cryptocurrency','howdid':'how did','crytocurrencies':'cryptocurrencies','phycopath':'psychopath','bytecoin':'bitcoin','possesiveness':'possessiveness','scollege':'college','humanties':'humanities','altacoin':'bitcoin','demonitised':'demonetized','brasília':'brazilia','accolite':'accolyte','econimics':'economics','varrier':'warrier','quroa':'quora','statergy':'strategy','langague':'language','splatoon':'game','7600k':'cpu','gate2018':'gate 2018','in2018':'in 2018','narcassist':'narcissist','jiocoin':'bitcoin','hnlu':'hulu','7300hq':'cpu','weatern':'western','interledger':'blockchain','deplation':'deflation', 'cryptocurrencies':'cryptocurrency', 'bitcoin':'blockchain cryptocurrency'}\n\n\n# Chỉnh từ viết tắt thành hoàn chỉnh\ndef replace_contractions(text):\n    specials = [\"’\", \"‘\", \"´\", \"`\"]\n    for s in specials:\n        text = text.replace(s, \"'\")\n    text = ' '.join([contraction_dict[t] if t in contraction_dict else t for t in text.split(\" \")])\n    return text\n            \n# Chỉnh từ bị sai chính tả   \ndef replace_mispell(x):\n    words = x.split()\n    for i in range(0, len(words)):\n        if mispell_dict.get(words[i]) is not None:\n            words[i] = mispell_dict.get(words[i])\n        elif mispell_dict.get(words[i].lower()) is not None:\n            words[i] = mispell_dict.get(words[i].lower())\n    words = \" \".join(words)\n    return words\n\n#Xóa các từ ở trong stopwords\n# def remove_stopwords(text):\n#     text = [word for word in text.split() if word not in STOPWORDS]\n#     text = ' '.join(text)\n#     return text","metadata":{"execution":{"iopub.status.busy":"2022-01-08T17:30:10.143629Z","iopub.execute_input":"2022-01-08T17:30:10.143873Z","iopub.status.idle":"2022-01-08T17:30:10.177485Z","shell.execute_reply.started":"2022-01-08T17:30:10.143844Z","shell.execute_reply":"2022-01-08T17:30:10.176727Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 2. Lemmatization-chuyển từ về dạng nguyên thủy-\"cần chỉnh lại\"\n#VD: rocks: rock, corpora: corpus, better: good\n\nlemmatizer = WordNetLemmatizer()\ndef lemma_text(text):\n    text = text.split()\n    text = [lemmatizer.lemmatize(word) for word in text] \n    text = \" \".join(text)\n    return text","metadata":{"execution":{"iopub.status.busy":"2022-01-08T17:30:10.178729Z","iopub.execute_input":"2022-01-08T17:30:10.179257Z","iopub.status.idle":"2022-01-08T17:30:10.190446Z","shell.execute_reply.started":"2022-01-08T17:30:10.179223Z","shell.execute_reply":"2022-01-08T17:30:10.189834Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#hàm chung để xử lý dữ liệu\ndef clean_text(x):\n    x = x.lower() #chuyển thành chữ in thường\n    x = replace_mispell(x)\n    #x = remove_stopwords(x)\n    x = replace_contractions(x)\n    #x = lemma_text(x)\n    x = re.sub(r'[^a-zA-Z0-9]', ' ', x) #Loại bỏ các ký tự không phải là chữ, số\n    return x","metadata":{"execution":{"iopub.status.busy":"2022-01-08T17:30:10.191659Z","iopub.execute_input":"2022-01-08T17:30:10.192289Z","iopub.status.idle":"2022-01-08T17:30:10.201021Z","shell.execute_reply.started":"2022-01-08T17:30:10.192260Z","shell.execute_reply":"2022-01-08T17:30:10.200385Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#tiền xử lý dữ liệu tập train\ntrain_data[\"processed_text\"] = train_data[\"question_text\"].apply(lambda x: clean_text(x))\ntrain_data.head()","metadata":{"execution":{"iopub.status.busy":"2022-01-08T17:30:10.202283Z","iopub.execute_input":"2022-01-08T17:30:10.203038Z","iopub.status.idle":"2022-01-08T17:30:40.459834Z","shell.execute_reply.started":"2022-01-08T17:30:10.203003Z","shell.execute_reply":"2022-01-08T17:30:40.458387Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#tiền xử lý dữ liệu tập test\ntest_data[\"processed_text\"] = test_data[\"question_text\"].apply(lambda x: clean_text(x))\ntest_data.head()","metadata":{"execution":{"iopub.status.busy":"2022-01-08T17:30:40.461689Z","iopub.execute_input":"2022-01-08T17:30:40.462084Z","iopub.status.idle":"2022-01-08T17:30:49.148159Z","shell.execute_reply.started":"2022-01-08T17:30:40.462033Z","shell.execute_reply":"2022-01-08T17:30:49.147152Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#ngram_range=(1,3) để tạo được các cụm từ gồm 1-3 từ trong bộ dữ liệu\n#3.1 Count Vectorizer\nc_vectorizer = CountVectorizer(ngram_range=(1,3))\ndef count_vec(xtr, xte):\n    cv_train = c_vectorizer.fit_transform(xtr)\n    cv_test = c_vectorizer.transform(xte)\n    return cv_train, cv_test\n\n#3.2 TF-IDF\ntf_vectorizer = TfidfVectorizer(ngram_range=(1,3))\ndef tfidf_vec(xtr, xte):\n    tf_train =  tf_vectorizer.fit_transform(xtr) \n    tf_test = tf_vectorizer.transform(xte)\n    return tf_train, tf_test\n","metadata":{"execution":{"iopub.status.busy":"2022-01-08T17:30:49.150021Z","iopub.execute_input":"2022-01-08T17:30:49.150420Z","iopub.status.idle":"2022-01-08T17:30:49.158336Z","shell.execute_reply.started":"2022-01-08T17:30:49.150369Z","shell.execute_reply":"2022-01-08T17:30:49.157089Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#4. chia dữ liệu thành 2 tập theo tỉ lệ 4:1\ndef split_data():\n    X = train_data['processed_text']\n    y = train_data['target']\n    xtr, xte, ytr, yte = train_test_split(X, y, test_size=0.2, random_state=123)\n    return xtr, xte, ytr, yte","metadata":{"execution":{"iopub.status.busy":"2022-01-08T17:30:49.160057Z","iopub.execute_input":"2022-01-08T17:30:49.164118Z","iopub.status.idle":"2022-01-08T17:30:49.174833Z","shell.execute_reply.started":"2022-01-08T17:30:49.164060Z","shell.execute_reply":"2022-01-08T17:30:49.173761Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **4. Xây dựng Model**\n","metadata":{}},{"cell_type":"code","source":"def get_eval(yte, ypred):\n    recall = recall_score(yte, ypred)\n    f1 = f1_score(yte, ypred)\n    print('Recall: ', recall)\n    print('F1 score :', f1, '\\n')\n    print(classification_report(yte, ypred))\n    return recall, f1","metadata":{"execution":{"iopub.status.busy":"2022-01-08T17:30:49.177111Z","iopub.execute_input":"2022-01-08T17:30:49.177439Z","iopub.status.idle":"2022-01-08T17:30:49.189799Z","shell.execute_reply.started":"2022-01-08T17:30:49.177402Z","shell.execute_reply":"2022-01-08T17:30:49.188352Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"xtr, xte, ytr, yte = split_data()\n\ncv_train, cv_test = count_vec(xtr, xte)\n#tf_train, tf_test = tfidf_vec(xtr, xte)","metadata":{"execution":{"iopub.status.busy":"2022-01-08T17:30:49.191435Z","iopub.execute_input":"2022-01-08T17:30:49.191812Z","iopub.status.idle":"2022-01-08T17:33:24.113198Z","shell.execute_reply.started":"2022-01-08T17:30:49.191770Z","shell.execute_reply":"2022-01-08T17:33:24.111426Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**1. Logistic Regression** \n\nSử dụng Count Vectorizer do dùng TFIDF kết quả mô hình thấp hơn\n\nHồi quy logistic là một phương pháp phân tích thống kê được sử dụng để dự đoán giá trị dữ liệu dựa trên các quan sát trước đó, việc sử dụng Logistic cho bài toán phân loại nhị phân đối với bài này là khá phù hợp\n\ntham khảo: [https://excessive-source-1c9.notion.site/16-09-2021-H-i-quy-Logistics-cdcc911147e5458ba9203b58e6bd0099](http://)\n","metadata":{}},{"cell_type":"code","source":"lrg = LogisticRegression(solver='liblinear', class_weight=\"balanced\")\nlrg.fit(cv_train,ytr)\nypred1=lrg.predict(cv_test)\nlrg_recall, lrg_f1 = get_eval(yte, ypred1)\n","metadata":{"execution":{"iopub.status.busy":"2022-01-08T17:33:24.116523Z","iopub.execute_input":"2022-01-08T17:33:24.117025Z","iopub.status.idle":"2022-01-08T17:46:05.674608Z","shell.execute_reply.started":"2022-01-08T17:33:24.116967Z","shell.execute_reply":"2022-01-08T17:46:05.673733Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**2. Bernoulli Naive Bayes**\n\nNaive Bayes là một thuật toán phân lớp được mô hình hóa dựa trên định lý Bayes trong xác suất thống kê-khi cho một đầu vào, nó dự đoán xác suất đầu vào được phân loại cho tất cả các lớp\n\n**Định lý Bayes**\n$$P(B|A) = \\frac{P(A|B)P(B)}{P(A)}$$\nTrong đó:\n* P(A|B): likelihood\n* P(B|A): hậu nghiệm\n* P(B): tiên nghiệm\n\nTrong mô hình Naive Bayes, có hai giả thiết được đặt ra:\n* Các đặc trưng đưa vào mô hình độc lập với nhau. Tức là dự thay đổi giá trị của một đặc trưng không ảnh hưởng đến các đặc trưng còn lại\n* Các đặc trưng đưa vào mô hình có ảnh hưởng ngang nhau đối vơi đầu ra mục tiêu\n\nVì đặc trưng đầu vào chỉ nhận giá trị nhị phân 0 hoặc 1(phân bố Bernoulli) nên dùng Bernoulli Naive Bayes\n\n* Ưu điểm của Bernoulli Naive Bayes là dễ sử dụng và nhanh khi cần dự đoán nhãn của dữ liệu test.Khi giả định rằng các đặc trưng của dữ liệu là độc lập với nhau thì nó chạy tốt hơn các thuật toán khác như Logistic regression khi có ít dữ liệu đào tạo.\n* Nhược điểm là độ chính xác so với các thuật toán khác không được cao\n\n","metadata":{}},{"cell_type":"code","source":"bnb = BernoulliNB(alpha=0.01)\nbnb.fit(cv_train,ytr)\nypred2 = bnb.predict(cv_test)\nbnb_recall, bnb_f1 = get_eval(yte, ypred2)","metadata":{"execution":{"iopub.status.busy":"2022-01-08T17:46:05.676136Z","iopub.execute_input":"2022-01-08T17:46:05.676826Z","iopub.status.idle":"2022-01-08T17:46:10.674492Z","shell.execute_reply.started":"2022-01-08T17:46:05.676771Z","shell.execute_reply":"2022-01-08T17:46:10.673467Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**3. XGBoost**\n\nđược sử dụng để giải quyết tất cả các vấn đề từ hồi quy, phân loại,..\n\ntham khảo: [https://excessive-source-1c9.notion.site/11-11-2021-Ph-ng-ph-p-Boosting-714c287d19494eb88e8b13cc9d96650e#959b0236cf234c2b804e7fe97749ddb1](http://)","metadata":{}},{"cell_type":"code","source":"xgb = XGBClassifier(use_label_encoder =False)\nxgb.fit(cv_train,ytr)\nypred3 = xgb.predict(cv_test)\nxgb_recall, xgb_f1 = get_eval(yte, ypred3)\n","metadata":{"execution":{"iopub.status.busy":"2022-01-08T17:46:10.675972Z","iopub.execute_input":"2022-01-08T17:46:10.677034Z","iopub.status.idle":"2022-01-08T18:00:09.906621Z","shell.execute_reply.started":"2022-01-08T17:46:10.676969Z","shell.execute_reply":"2022-01-08T18:00:09.905678Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**4. SVM**\n\nSupport Vector Machine(SMV) dùng để phân chia dữ liệu thành các nhóm riêng biệt\nLinearSVC giúp ta tìm được đường phân chia giữa 2 lớp sao cho margin là lớn nhất. Việc margin rộng hơn sẽ mang lại hiệu ứng phân lớp tốt hơn vì sự phân chia giữa 2 class là rạch ròi hơn\n\n![image.png](attachment:a9b6d53e-485c-45b7-8ace-86c96cf50e39.png)\n\nTham khảo[https://excessive-source-1c9.notion.site/27-11-2021-M-y-vector-h-tr-SVM-afd3d10f1adf4936b85a2830aa4a1aaf](http://)","metadata":{},"attachments":{"a9b6d53e-485c-45b7-8ace-86c96cf50e39.png":{"image/png":"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"}}},{"cell_type":"code","source":"svm = LinearSVC(max_iter = 4000)\nsvm.fit(cv_train,ytr)\nypred4 = svm.predict(cv_test)\nsvm_ecall, svm_f1 = get_eval(yte, ypred4)\n","metadata":{"execution":{"iopub.status.busy":"2022-01-08T18:00:09.908613Z","iopub.execute_input":"2022-01-08T18:00:09.909521Z","iopub.status.idle":"2022-01-08T18:05:17.385940Z","shell.execute_reply.started":"2022-01-08T18:00:09.909476Z","shell.execute_reply":"2022-01-08T18:05:17.385060Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# So sánh các mô hình\n\ndf_eval=pd.DataFrame({'Model':[\"Logistic Regression\", \"Bernoulli Naive Bayes\", \"XGBoost\", \"SVM\"],\n                      'Recall':[lrg_recall, bnb_recall, xgb_recall,svm_ecall],'F1_score':[lrg_f1,bnb_f1,xgb_f1, svm_f1]})\ndf_eval","metadata":{"execution":{"iopub.status.busy":"2022-01-08T18:05:17.387229Z","iopub.execute_input":"2022-01-08T18:05:17.387484Z","iopub.status.idle":"2022-01-08T18:05:17.406029Z","shell.execute_reply.started":"2022-01-08T18:05:17.387456Z","shell.execute_reply":"2022-01-08T18:05:17.405156Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"objects = (\"Logistic Regression\", \"Bernoulli Naive Bayes\", \"XGBoost\", \"SVM\")\nypos = np.arange(len(objects))\nper = [lrg_f1, bnb_f1, xgb_f1, svm_f1]\nplt.figure(figsize=(9, 9))\nplt.bar(ypos, per, align='center', alpha=0.6)\n\nplt.xticks(ypos, objects)\n\nplt.ylabel('F1_score')\nplt.title('Classifier')\n\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-01-08T18:05:17.407457Z","iopub.execute_input":"2022-01-08T18:05:17.408002Z","iopub.status.idle":"2022-01-08T18:05:17.582360Z","shell.execute_reply.started":"2022-01-08T18:05:17.407969Z","shell.execute_reply":"2022-01-08T18:05:17.581481Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Nhận xét: Kết quả thu được từ 3 mô hình cho thấy mô hình Logistic Regression là cao và ổn định nhất, XGBoost có thể thấy là không hiệu quả trong bài toán này\n","metadata":{}},{"cell_type":"markdown","source":"# **5. Under Sampling**\n\nTừ kết quả của 4 mô hình trên, chọn mô hình Logistic Regression để under sampling\n\nUnder sampling là việc ta giảm số lượng các mẫu của nhóm đa số để nó trở lên cân bằng với dữ liệu của nhóm thiểu số. Ưu điểm của under sampling là làm cân bằng dữ mẫu một cách nhanh chóng, dễ dàng tiến hành thực hiện mà không cần đến thuật toán giả lập mẫu. Tuy nhiên nhược điểm của nó là kích thước mẫu sẽ giảm đáng kể\n","metadata":{}},{"cell_type":"markdown","source":"**Chuẩn bị dữ liệu**","metadata":{}},{"cell_type":"code","source":"#Lấy câu chân thành từ tập câu không chân thành và ngược lại\ninsincere = train_data[train_data['target']==0]\nsincere = train_data[train_data['target']==1]\n#Lấy số lượng câu hỏi không chân thành = số lượng câu hỏi chân thành\ninsincere = insincere[:len(sincere)]\nlen(insincere), len(sincere)","metadata":{"execution":{"iopub.status.busy":"2022-01-08T18:05:17.583753Z","iopub.execute_input":"2022-01-08T18:05:17.584502Z","iopub.status.idle":"2022-01-08T18:05:18.348142Z","shell.execute_reply.started":"2022-01-08T18:05:17.584456Z","shell.execute_reply":"2022-01-08T18:05:18.347357Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Ghép 2 tập\nqtrain = pd.concat([insincere, sincere])\nval_count = qtrain['target'].value_counts()\nval_count","metadata":{"execution":{"iopub.status.busy":"2022-01-08T18:05:18.349806Z","iopub.execute_input":"2022-01-08T18:05:18.350379Z","iopub.status.idle":"2022-01-08T18:05:18.410219Z","shell.execute_reply.started":"2022-01-08T18:05:18.350324Z","shell.execute_reply":"2022-01-08T18:05:18.409587Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_tr, x_te, y_tr, y_te = train_test_split(qtrain['processed_text'], qtrain['target'], test_size=0.2, random_state=123)\ntf_train, tf_test = tfidf_vec(x_tr, x_te)","metadata":{"execution":{"iopub.status.busy":"2022-01-08T18:05:18.411623Z","iopub.execute_input":"2022-01-08T18:05:18.412300Z","iopub.status.idle":"2022-01-08T18:05:43.650681Z","shell.execute_reply.started":"2022-01-08T18:05:18.412268Z","shell.execute_reply":"2022-01-08T18:05:43.649771Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Huấn luyện**","metadata":{}},{"cell_type":"code","source":"lr = LogisticRegression(solver='liblinear', class_weight=\"balanced\")\nlr.fit(tf_train,y_tr)\nypred=lr.predict(tf_test)\nlr_recall, lr_f1 = get_eval(y_te, ypred)","metadata":{"execution":{"iopub.status.busy":"2022-01-08T18:05:43.654377Z","iopub.execute_input":"2022-01-08T18:05:43.654631Z","iopub.status.idle":"2022-01-08T18:05:52.267762Z","shell.execute_reply.started":"2022-01-08T18:05:43.654603Z","shell.execute_reply":"2022-01-08T18:05:52.266928Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Nhận xét: Áp dụng under sampling cải thiện tốt khả năng dự đoán trên tập validation, điểm số F1_score trên tập validation tăng chủ yếu do số lượng mẫu dùng để đánh giá mô hình trên tập này đã giảm rất nhiều so với ban đầu.\n","metadata":{}},{"cell_type":"markdown","source":"# **6. Submit**\n","metadata":{}},{"cell_type":"code","source":"Y = test_data['processed_text']\n\nx = c_vectorizer.transform(Y)\n#pred_te = lrg.predict(x)\ntest_data['prediction'] = lrg.predict(x)\ntest_data.head()","metadata":{"execution":{"iopub.status.busy":"2022-01-08T18:05:52.269048Z","iopub.execute_input":"2022-01-08T18:05:52.269351Z","iopub.status.idle":"2022-01-08T18:06:19.353960Z","shell.execute_reply.started":"2022-01-08T18:05:52.269313Z","shell.execute_reply":"2022-01-08T18:06:19.351935Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"result = test_data[['qid', 'prediction']]\nresult.to_csv('submission.csv', index=False)\nresult.head()","metadata":{"execution":{"iopub.status.busy":"2022-01-08T18:06:19.355240Z","iopub.execute_input":"2022-01-08T18:06:19.356311Z","iopub.status.idle":"2022-01-08T18:06:20.351201Z","shell.execute_reply.started":"2022-01-08T18:06:19.356270Z","shell.execute_reply":"2022-01-08T18:06:20.350442Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Đây là điểm cao nhất em đạt được bằng mô hình Logistic Regression","metadata":{}},{"cell_type":"markdown","source":"\n![image.png](attachment:65d0120a-9542-4677-b7cc-4e6f9c25e137.png)","metadata":{},"attachments":{"65d0120a-9542-4677-b7cc-4e6f9c25e137.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAA08AAACmCAYAAAACnbTNAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAFChSURBVHhe7d0NXFNXnj/+jyIReRCCkSgKSsCCMo1P2FHsiFqxrdKx2Blrt7W/qbr92U5Xd2fo7nacWe1vxnZmZXa2/rut46rtVl1bpsXaorXioFhBilEwFQkKQQHRKBoUgxhF/ucmF0hCAsGHjg+f9+sVTU7Ofci9J9zvN+fce3u0CCAiIiIiIqJO9ZT/JyIiIiIiok4weSIiIiIiIvICkyciIiIiIiIvMHkiIiIiIiLyApMnIiIiIiIiLzB5IiIiIiIi8gKTJyIiIiIiIi8weSIiIiIiIvICkyciIiIiIiIvMHkiIiIiIiLyApMnIiIiIiIiLzB5IiIiIiIi8gKTJyIiIiIiIi8weSIiIiIiIvICkyciIiIiIiIvMHkiIiIiIiLyApMnIiIiIiIiLzB5IiIiIiIi8gKTJyIiIiIiIi8weSIiIiIiIvICkyciIiIiIiIvMHkiIiIiIiLyApMnIiIiIiIiLzB5IiIiIiIi8gKTJyIiIiIiIi8weSIiIiIiIvICkyciIiIiIiIvMHkiIiIiIiLyApMnIiIiIiIiLzB5IiIiIiIi8gKTJyIiIqLvww35fyK6Z/VoEeTnbjWeLUf5sUpUXboKBKgQM0yLuHB/+V0vXaqCvrIR6uFxUCvkstvFWoWCzL2o06YgZUSIXHgr6lGSlQV9v0l4ZkIkbvfqfr8aUHW4EojSIrKvXOSi4aQelfXyi1Z+QQgfHAlVgI9ccHewVhfgs9w6aGekID5ULrxJt3NeRET0ILDCVGaAqUl+KfMRsVFkZDiCugoYRLySl7EDlZonMCfx7o4vrCJuM5aeQPn5S4BCicihMYjRqOHPn9y/Nx7js4goqLoZhtvj8HqEdBIPSqxnDTCchhyvi3j48wzkYSLmPB2PW42wO+QTmnhoIoLuyTi7k69BM0yHtmLjTgPqg6KgHSWSphArynM2Ymt+FRrlWl5pOo+Cb6vRcE1+fTv5+CNooBqqLv9qeUuBoP5qDAr2x92VOtyMRpz/tgDnXf7QO2o8X4CC8jqIpiy7ioYTB7Bj02Zk6WrFoeLu4eMfhEEDVAjqLRd461wJsraXoE5+KbnpeRER0QPqOhqqxTHzOwOqTlXZH8f1yMvJwuaMLBSdbZbreSDFK/2keOV2xxeNqNqf1eE4d3OaUXdkBzI+3oG9lWZ7UdMp6HNEPPhFEUx3Io4jt2zx2bclqGxta5UlKMjNRubGzdhrbJBreckWh3ceD0quX6p2iNcV8A9VQx3qf4sJjmif+aL9fJ4D/Rk52jRXYu9Xm5Gxuxzd/CR3BZ/lgvzc2fkj2PlXK8b/5EmMjgxFcFAwQgcMwUNRwajOycOVCC0GBsh1u2I5g4OGRkRpoxF6u1PMnv4IGxqNwcG+csGt8kXw4GgM6e9/H4xptODMwTIgbqzHfWU5fRBlLaMwLXE4Bg8QX5IBgxAZE4/4aAVq87NR0mMI4tTd/YnjzujpH4YhmsEI7m4bspzCnsJmPDR2IALlopueFxERPaCu4YJRj8rARMx6fDzihz2Eh0ZoMXZ4f1w7UYSiqt4YMkINj0dMEa+oh8UhRhxTb298cQ3nyvKgPznA6Th3Uy4dE0GtHhiTgjnTx2G49BkfEjFBRE/UHjyAk72HYPiAuyMmuN/Z4rPakZg2NwljpP0Q9zDGPhwNv0uirR28jtD4IVD2kit3xRaH12JQJ/Gg5NoFI/S2AUtSvO4L5ZA4xA1Risj45jXXFmPbvnIMTnoOqZMexkPyZ3ko+CLKDh7ElX4PY0jIvdVd4TF5sp4tQ36FEtpEly9i71AMfTjONqTLR3z7G08W4OvSGxgcEeywcetQsj0H50IeQpi0k1qTpx9E4JohD3sOfYdjJ8/hmp8KYUGtU0m/nHyN0huDEdZUiry9B/Dd8TNoChoItViB+hOHUZh/0FZm8QvFwODWLgOXZUms9ag8XIi8IrEcqb5vMMJC/Bz+WFnF/PTy/I7hTINImFRK+Nn2Xft6DA5p/0TNDVUoPVCIwiOlOFZ7ATcUoVC5XfdjKCgohN5wEueu9oFKFQTfHnI1t6R1KcFB3QExzTGcNDWhZ6ASyj6tDan180VDcc5hG4jP1E98JsfmZr1QCX1hHg4ebf1Mvqgv9iJ5uhIFrSbU6cvRU+ybyNBrOLj7HEIejkRw24Ka0VBdCp3YFtL6nmnoiQBlKPwdv8Bdbn/X7WlBz4B+CG0dJij1FOWeQ+iQnmK75qHgyDn4DRKJTr1cPizMdnBqa3vqFpzUfYN8vX1eviFhUPrZl1Z3JAs5h2vRYKlDvekkyuv87G21dRnyvOysqCvXQ1cgbWOx/xp7om9oa7uQeL8viIjofiMnT3A5ZopjQHDP0zhiuIj+IjBU9bYfKwqvinjpRrk9nhHPHwprbCt/KMwf9WU52FVYjZ7qIQh1GAUhDSv/Ku8ImoJjoJaO3dYGVJXqUKjTo9QWszged6VlfQP9uQY0XWuwH+fk+dt1dVxzcbEaOSLIjh03GZEOwV/PgDAMihiEsL5B8A/wbTueOx3LO8R1dtIQQINjHV8l+okYrnUetmN5fg38RLB3rlg6lsvHfGk2TXUo1+uQL8UTYtqmnn2hfECOt/bkaZAI4RzicB8/9FNcQ9HxEgQOGoXBfZts8ec3NXJsI1ezx1GFuOYUh0vJ0yj0OV2IbwqKRVvqGL84J0/22LbDvB33iRcxUJPpKA5WKjEmcbhTO+8dOgiRAwcjKMgfQW0N0rG9yrFsP5f2eqMRpoojONRWxzUO9fT9k74TLjHshRvwDVXBpcl2yTGedaIIDUOk+BNR7qZr0EehgKJtSzeg1uI6uKsZ1ppaWJ3OprqKKl0O9IjAmFFjoI3wQWVOJnLK2+dvtdSizqjDvkoFhoo68eGN0H+RgwO6PByoD0GMVDboKgxfbcWB2tbucZdlXTOhaHsWSq6GQSvqj3k4DI3FGcg2tC5HGo74FbKOXEXYw+L9UVqR8OiRscvQ1nUorYfjEMPms0XI2pyH2qAY+7oPAMrdrnsBckWuEj5CzHeECg3FWcjU1YolemJfl4x9tVAM1drmHRNkQsGnOTBckqvIn6/2iNgGZ4Ns20Ub7YOqnRnIKWtfvrSOX31agLqQeNt8IhTV2Lfv1rrwfQZHIRYlqG0biiCtbxY259UiKEbedlcN2CHWt21TdLn93W1PsU+/Fp/HKA8GbbGitqYauj0FOBsi1Ymy/7piK7e2b0+p7Zlroc/bJz53rG194oLqUOAwfKLvYLEODw0SzwbZ2s+YGBVs313XeYm9X747AzsMre0iBkHnCpCx3XGYgnf7goiIHiw+vaQjSz2u2EYlyceKah1yRGzRdjhvLbfajzwhKpV4bUD5acfjhxWnRIJWe0ENdZh4aTumbsaOYjN6h0UicpAKV4/lIFMc72ttx6beCBqkhqqP9FwJ1SBRp208uv24lllwHNf7SdMGobE0GxmZeajyNHzLr4+I/YCyUgPqnUI7HwSFhSO8f/uQQ/uxfAeKzvjYlqvqeQpFWRuxtbiu7dhqi00+FnXqe0Mt6qgVZhR9tRlZh0ztx1/pWF5Th6N5WThwuv0kAjSUI+fTTBQYr8ufSySf4nj7WX6V2EoPLh+Fff82Wu3bSoo/O8ThthjHNQ4XaUVJLr4yWBEi2oyyxykcENvzK8d94aLDvOV9knOsEUrRHtV9G2EQ88jYXQlPp/P09g+Bv8gnSkqr0Oh0wRQFQsJFmwppHQIkt9ccAxr7qhEZpkTjMdFeM3JQaZGrSHVyM7FV1Llqa9Ot3weHOLST758thv1KjwY/MX+xDXBOh6xMEbOel6t4yWPyhL5xmPh4OMz5m7Hx0x3IO1yOWvFN8rSBuyZ24sCJSB4ZhXCxsSJjx+PJyTGoLTCgLQ8SantG4NEJcYgUdaJGTcJ4TRWKLBFIEgG0NF3UyKlIGtmIsrPyWFxXIpg+cDYe4+R5hEeIzzF5FmLDWv+Y1KFWZ0L8I+MRFyHeD49EXGISZg0fYA+qOxAZ7DcH0HtSivO6T4tFfU4RKh3+ANU2R2J8UjyipOUOHY1k8byxuAomjxutGf79Y/FEyhMYFxMpf74kjI+tQnmtczDeEBSLqY/E2D5TZOxEJD0ajqqKU3LCZ19H/ynt6xj1g0mYHtVLNNdbEQSlRiy7Sf5jdr4EBUeDMHVmMrRD5W034UlMHVaLglI5SfRi+5fkd9ye05Ni0HiiShx6WjWin/ZJTPqBVEft+UTcmnJg2JNim0nbLxIxY5KRMqk3Dhw8bts2ihCxDqog8SwIKml9HP7wO7KeKELOqRhMfby1XURBOy0FUwMPIO+ocwra+b4gIqIHiwj+T0hH2xioHS9AdD4EI+bMQcqMFKT8QCUXOugXhRGDgapqU3vgaT2D2jJA9XAERGgnXjejz+BxSP5xCiYlaKEdOR7JU8fBv1GPylopqA1C5Mh4RAZLldWIGSnqDJGOefJx7XgQxk1/BlN/KE/7TAq010ugK/Pw02rfYZg4JQ4+x/ci48ONyPg6D/ryKtRZXAMZe9xhipiEWT+ZivFiueOnPoPkMSqYCstwSlq1ZhP0Uh3NVMxKmYRxos44ceyfNSkSJl2eS8BaCwxJwXNPi201Yzwi/a2oPCQC4kDx2WfZ56/9YTLmzNCi+YgOhm4Gu/cPkQBUSW1Nim26P3yyUsSpKbZ9MQ4Tn5yDWdL+0hXheHuG0Ql5n0CLlGeewETRHsc9+gRSpkSh8XgRyj3sE5/wkZg6JhwNxTuwce1mbM0tgOGECfUuCby9vQLaGXPwxKPjoE2YiCdmTkVUYzmKjPb22lheIOr4Y/SP5yDZsU2Ltco5VOmcVLt+/0QMm6drQMzUFPv8xTaYlDILk/rVIu+Iy7Rd8Jw8CUFDxiPluReQPCoCPvUlyM34EOs+zob+THcW0SoKMYPsX+hWtp6NxiKYHDZ4VLjK4cQ0fwRJf4iCHE9W84GPr9iANzxkJL0U4s+HSD7K66S/OXYhakS1nWzVG4ow8ceqvBx1TW0VoB4a4v6EuEt1qDov1j3CZd0HiLJ+BvHHqz3XDh8sgnz5ucQnVCxX/FFt9HiCngJBIrmIbL2ESbMV1sZLaLwm/ow0Oufw4QNUTkF/iGqQSByu2P/gnq8VjTYesfIfzFaKiBjRoG6fhnMiERwWhyinxfhAPUgkPtV1sKWzXW1/aXuK5GqExnVdRVubGudwNZcIRA5wl+a4ikXUYOd6QWJ9oqqrYWr7paIrzagzGeA/QiRqTl234qA0LB5131WLw0S7TvcFERHd3y5WoeSwHnrbQwRzn25FjtFfBGXxCHc8OMRFIdJtYNEqCIOiIwFjJWrl45X1dDVKoELMYDnZCghHXMJoRNmukNYMq9WKhitX7UPXr12XCj1oxKlKg0hIYhARYp/O9mhRIXyYSH1O1Xn4wc8HQcMm4bkXZiM5KQYDrlShIGcHMjetw+ZcA+pbR2Kcq4ZexG7xIzQOcY+IBxJm4+WXJ9o/94VaW4IUPyzSKTYKErFJlDiqltc6HlmlOMvhem6Np1ApksjIhyKgbJHXXTyaVeEiRRVxxLkH5edKE8rb2toB5H2Vga2H6sR2HodhnVw1zxOtaJNO+ysqRrS2KtTWeRHByPtENTLGKVYKGpYs9vlsaPvJBR0oEJ6QgjlzU0QSH4ne58qxd+dWZHy00eHCZHJ77acVbd/hSxQUg+SXX8bsh6XvQyNM1SJx7Cfaj2N86BuOqBHiG1FWC6f0xOX7V1etFy0nRsy/d/v3wdobqiHiO1hmQp2HtMKdTpMnGx9/qGPiMT5pFp5b+DPMTvBH5RdfoehcN5ZiE4Ig53hZ8IdyqPhAlxx2Wg/nQLjbQuMx9XE1GnSZ+HDdGmz+PFtklLUOXYUhiH/sCagvHkDmR+uw5uOtyN5XIpIV+W1XTVdQK5pWUIdzhvzhHyz+lDl0Qfbu1f11b66vRFFuFjI2rsGadR8iY7sO1ZflNx30bhsn6UazCP7F+vR2/SPt4+OhN81bjWi8KD6pr30gaWNjLXA4C+vWiHV1eKzbrhcJXLO956mr7W/bnm7WtQPHk6g6oVE6/VG2EQ0tBJVo8Dp5uopG8XdY3bfDnKDoI76Qom04tvZO9wUREd3fzpej6FvpSmgF0B+vQ2NIFCamzMbUGJdjSNcRFoIGS4lEJSpPS0GIFWeqS4DBIxDVFohaYTqShx2fbhTH23X48MMPkXXAmyseN+Oq9MPtyTxkimmk6VofOw6L8q5+8PNXISp2PCY9/Rxefuk5pPwwSgSYe5FVJI8yEYmbNL1/n04O5p7qBASJqErEftdc4kjH7XX9qi2ortonYgnH9f9oB0TE0eEH5vuXSNTltiaN8DG3DMK46XPw5Bi104+43uoQv/j522Ioq+u+cEfeJ0FSXHQTFH1F4jtyIp74yQtY8KL4vjwcgvpDWfJpD3J7DRaxta22O57rBPWV+mkbxeewv7Zx+f5ZrVKb0WPHRw7tSTwy91WJ8s46Ojry4qvtoKcCqphxGD3ChJJTHobNeVTvJphtRMMJkc4E3tyO8ETqMXti7stY8LPnkDwqHM3lWch0HCMbFInxT4o/CAt+hueStQhvLkeWpzHAPaQ06aqUn7gQBbd6s7umSuRl5MEUrMX02QtE5v4yXvjJExgtDTjuDo/rKF1Y9RbUm1B1PhL9lPY/fD49xX4aM8u2nh0fo+1DDIROt38n63pTLooET37axtIgWluU+ILLr70g8kxcve5mpW7c0hYkIqL7jWYqXpCPfS/8JAUp0yYivrv3v2wVEImYWKDyRC0arWdQfRSIjB7U9qNgQ1mO7fYw/nFTMeeFn2HBwpfx3JNj2o63nvmgl9Q7MHQS5vzsZ/hZh4fW/TyuyT088ksb3yCEjxyPcUNF1HbMJI8ysf/Aeb2zOMhTHREAOJzZ5J5PL1tyEDVpjpt1F4+Hu94C94dxmNUaZ82dhZQZkzDa00gpL3TYF/JrHykI6oq8T9DSvQCu2dbD4zyNj58KMRPGQTR9VNXWiThObq9ifTzP3XOdZpHYdUWsvjAaT7hrTz9LQpSHC6u54zF5Mh3aiDW57sYA2n+lD/Gz92n4B4YARrNz92+TSIrkp+0qYbrg8nHPm0RpFJQdf/C/edcaUd9gX2sfRRBUQ+MxafxoNB49b//C32hGY32D/XP5KBDULwrxSeMxurEE0r3gOghVIwblOOV64lJTHWpPqKBW3kLid6keBsRj9KhIhPi3Nlyx7S7IT70V3E9sRTfrKLZvtfy02240oLyoCPUjRkAjdw33VUYBJ01OQ9gkzWJ/t30vutr+8vasOu2yrvVV0B+u8jCMoBPna1Hnst+s52pR6a9y09PpiT9UA8NRW9nxvKU6k9iCI/pBKb8mIiK6fRQYNCTONnSvvEwasheJoQNbD15W1J2pAoaMxugfhIs4QWG7yrH0A6HJXqET/gjprwLO1qOxhwIK6UJftocPrl80u5y4366hYic+/NDdCfT22A+hfewjWkL6iegFKDvpfFGsxhN5yNpegCrpV82+IRCfDGVVznWaT1eJKACI79fJkTUgBOp+Iha9KMLqtnUXD5/rInQSM+/eT//3vzNm1Dts5Pq6U/IzZ9W1zheHaDhVLuJwEQP19SKWlfdJZblLrHROL/a5aDPn5NdOmmEqknp48pyuEWAjYscr0v/+vUWbEu1VLdrrCRHLOsV0ddCLeWcdkSJPuU13qNOAU5W1QD81QjpJgJShUms8j8Ymh/YkHmisw6WrPvbE0Esem596iBbqsjzkFNeiQY6Mm8UCyvNzsPd8DOJbzwEKUYkvRxEKCitR32gViUklDuyTxhW6UqPucC4MF+yBdbOlCge+KUDjyPhuZXtdsZ7SIWPrPpRfkptHcyOqTooAOKKP2OyCtQq6jK3Yd7xBbkAimTpZKZKMSPTxsxU48wkX2XEQigoLUNk6T5E4GfbnoWrYaMR4HOPpBdtVbapQVS33ndwQfygNOhw4Y3/pNcUgxD7ivI627VtU6V1juHHd9kuT7dEgJYUl2Lt9K3IuxiP5h+13QVcMicV4nwLk5Uvni9nLpOUc2rERX8kXVehy+8vbU68rQPl5OTVvFOu6ZwfKm6WvTzf1u4ryQn3bHd+t5w3Yt8+AyISY9l/VfHzsY3prRZLn8utHq6ChWsSf1yHvOxOstoOKaBfVB5D3rQ/GxQ666V95iIiIOqMIHyoSkUoU7C8BYmPbfrCUEqugUBEsniyDobrBdoxuOGtAXqGo50Q6P1w6eoqkpEwc6+TL5KliRIwCPXKki1udF9M31tuuFrt1y1bkHnc/eigoIh4x/nUo+GoHDpRLx03pqmUGFGTtQMF5f8TEyecv2eIONRoP5yC7uErEfw2oO1GEvftKUN9HDdu1DPwiMUKqU5xrG75f39iI+uoiZO/RozFsPGKHdHZkVSFmdAxgm38l6hqk+LIWJfu2IvNzEUu2X13qAecPdUSkiKOKkLu7COXVog0cykbBMfexDioPIOew2F8Noi1IMf5ekZxHJCBGurJjl+z7xL96L3LyDTA1iP1ZK9pjXgFqrYOcL5bSxgdqzTgRjxmQvWMvSk6I9iS1qRN6ZH+eLUrVGKexD0FUaUR79a/C3pw8GM422Pa3IT8PBTXNGKS2J9q2Ni3q6PYeEDGkaNMNJlFH5CXV/ohPiLMNB/VEETEC48Lk+dfWo9Eq2mz5AezMysKOw6fcdBZ55vkmuf5qaCJ9cKpoP/buL8TBgwdRpC9FXe9oPPpYIqL7ynlXLyVCVddQJeoVHCxG+WkFoh4djsCS8vb7C9muLx+MaSkDUbUjE1/ni3l9V4uemh9h2tghsHe62O+fUB+iRXRo+5lotuvci/Rs7MD2Gw44lznfCNYnZCAGt1Qi7+sc7BfrfLBIBNYBWjyZFI9QqctOrO/AQaL97N8hdr54/2AR9Of8oX18CuL7SSvScT381RoMuV6OvV/J8zx8EtcGjce08dEI6mTdce0CjN/VQ+np5sC9VVCr6lGyNxt7CsR8D1XAMmAcxqrKUO7h87WxbVOpWLr+f0/4D9BgYGMZ8nbusa1j0clmRE/8AQJLHfaDG7ZtefQkSoqLUSw9jpTidEMAVLFjkZz4kMsN2MSXVDMEzcZ87NstGrS0HJFs9PnBk5imDbM1/i63vzQXeXt+I6/rQb3UFiZjasJg+En3xHL6bA5cym33I2h6CE9qm1Dw5Ze2bVhcegHB41IwZYSyPXH0V6F/7xoU/nUvCuuC8NAwFXq7LqNXMCKjgkSCvwdf5xbY28XZPnj48WkYpW7dp97sCyIiuj95uM9TB/ZjRW24c+zisdwnEL2ay3DszDVxHJkEjcMNQ/1D+8PvUhkKD4jjmzhGH6ntg1GJw2Ets92Mpy3mCFSq0PNCOYr1R3GsZQAejgyGj0KJSPF/U7Ue+6Xjo74Ex85fR+SYx/GYfMzuQEwTFRWKa3XlOHxYzOvYMRwrPwlTj4HQTpyKxOgg+Vd3e9wxuFcdSgt1Ij48gtKKevQY8giSf/SQfG/I1joXUKKXjqt6lJTb68x47GGo5BVwvreQvUziq4xEZHATavT2+FJfcgznWyIxNvkxaMPcrv19xe19ntzorVKjv/UCTpSJNlRei6v9xuJHDytwpMzhpri2OKUW8ZOTEVK1Bzu+KbLdN6unZiJSpoyA0u2+6Nje7fukGTXfFUIn4ruSYyfRFKrF1MnjMNBdB4TQM2CgyCf8cLmyDIePiDYotamKGlgDYmz7si3Gkttrc80R0d5FDCb298mmftBOTsK4cHnmrW361BEUSG36SJm9TlIyEoe2/vzu4XvW0x8Dhw6G79nvUCTF3MWizVZaoBzxKKaOi0LrrUa90aNFkJ97Jo2BlWpJXb+e/1rYzmPpetikdNUXqaLU/SoX3Qk3xHKkc1g6WWdpHGaz+PMhdWN7pXWet3vdb+d8pSv22WalcP+H8XZpXU4veRiBKy+2/61+7sbybGw8EYUXpsXAX56Xx/WxaUbzDfvNnTvT7XZBRER0J9niMC+OS54CMTmO61ZsIB/nxVRdLFccf7uM67yp4xmPy14QcZC0jbqKcSS27dlFTN+Vm5qHl/mEV+3d2++EO13FsF3wLnkiugs5JU9yGRERERHRnXIT+RYREREREdGDhz1PdO+ydbuyG5+IiIiIvh9MnoiIiIiIiLzAYXtEREREREReYPJERERERETkBSZPREREREREXmDyRERERERE5AUmT0RERERERF5g8kREREREROQFJk9ERERERERe6NHc3Mz7PBEREREREXWhx4ULZiZPREREREREXejRIsjPiYiIiIiIyAOe80REREREROQFJk9EREREREReYPJERERERETkBSZPREREREREXmDyRERERERE5AUmT0RERERERF5g8kREREREROQFJk9EREREREReYPJERERERETkBSZPREREREREXmDyRERERERE5AUmT0RERERERF5g8kREREREROQFJk9EREREREReYPJERERERETkhR4tgvzcWVUZ/qizyC9a9cTAYRGYHd8Pfq1pl9t6sgAVFjweiRA0YP/Xx5GP1tddOYvtmTUoHTgYv5wQJpcRERER3Qcs1cj/ehtyi6pxWRWNyY/ORNJYNRTy252zwLh3J3bu16H6shrRSZOROkULpY/8thtWYy62FV8A+g7H9GlxCJDLnVlQvX8PdKetiJiQ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"}}}]}