tek4

Phát Hiện Fake News Với Python – Machine Learning Project

by - September. 26, 2021
Học
Machine Learning
Python
<blockquote> <p style="text-align: justify;">Trong thời đại b&ugrave;ng nổ th&ocirc;ng tin, cũng như sự ph&aacute;t triển của mạng x&atilde; hội như hiện nay th&igrave; việc gặp phải c&aacute;c "Fake News" l&agrave; điều kh&ocirc;ng thể tr&aacute;nh khỏi. Thậm ch&iacute; n&oacute; đang được nh&igrave;n nhận như một trong những mối đe dọa lớn nhất đến sự tiếp cận, nền kinh tế tri thức v&agrave; tranh luận tự do. Vậy c&oacute; c&aacute;ch n&agrave;o để ph&aacute;t hiện fake news hay kh&ocirc;ng? C&acirc;u trả lời l&agrave; c&oacute;. Bằng c&aacute;ch thực hiện project n&agrave;y bạn ho&agrave;n to&agrave;n c&oacute; thể ph&acirc;n biệt được sự kh&aacute;c nhau giữa tin thật v&agrave; tin giả.</p> <p style="text-align: justify;">&nbsp;</p> </blockquote> <h3 style="text-align: justify;">Fake News l&agrave; g&igrave;?</h3> <p style="text-align: justify;">Fake News (Tin giả) l&agrave; c&aacute;c th&ocirc;ng tin giả mạo, sai lệch v&agrave; giật g&acirc;n được ph&aacute;t đi dưới h&igrave;nh thức tin tức.&nbsp;N&oacute;i một c&aacute;ch đơn giản, tin giả l&agrave; đối lập của tin thật: tin tức sai sự thật th&igrave; c&oacute; thể coi l&agrave; tin giả.</p> <p style="text-align: justify;">Fake News đ&atilde; ch&iacute;nh thức trở th&agrave;nh cụm từ nổi bật nhất của năm 2017. Cụm từ trở n&ecirc;n phổ biến v&agrave; được liệt v&agrave;o "từ của năm" do từ điển Collins Dictionary của Anh lựa chọn.&nbsp;&ldquo;False stories that appear to be news, spread on the internet or using other media, usually created to influence political views or as a joke&rdquo;, đ&acirc;y l&agrave; nguy&ecirc;n văn định nghĩa bằng tiếng Anh về cụm từ fake news của trang từ điển&nbsp;<a href="https://dictionary.cambridge.org/">https://dictionary.cambridge.org/</a></p> <h3 style="text-align: justify;">Ph&aacute;t Hiện Fake News - Giới Thiệu về Project</h3> <p style="text-align: justify;"><img class="aligncenter size-full wp-image-6073" src="https://tek4.vn/wp-content/uploads/2020/11/Capture-32.png" alt="" width="1245" height="694" /></p> <p style="text-align: justify;">Project với mục đ&iacute;ch ph&aacute;t hiện c&aacute;c tin tức giả mạo, bằng bằng c&aacute;ch sừ dụng sklearn ch&uacute;ng ta sẽ x&acirc;y dựng một&nbsp;TfidfVectorizer tr&ecirc;n tập dữ liệu của m&igrave;nh. Sau đ&oacute;, khởi tạo một bộ ph&acirc;n loại thụ động (PassiveAggressive) sao cho ph&ugrave; hợp với m&ocirc; h&igrave;nh training. Cuối c&ugrave;ng, để kiểm tra t&iacute;nh hiệu quả của m&ocirc; h&igrave;nh ta sẽ sử dụng&nbsp;accuracy score v&agrave; confusion matrix để đ&aacute;nh gi&aacute;.</p> <p style="text-align: justify;">Để tiếp tục project n&agrave;y, ch&uacute;ng ta cần t&igrave;m hiểu về c&aacute;c thuật ngữ Tfidfvectorizer v&agrave; PassiveAggressive Classifier.</p> <h3 class="fittexted_for_content_h3" style="text-align: justify;">TfidfVectorizer l&agrave; g&igrave;?</h3> <p style="text-align: justify;"><strong>TF:</strong>&nbsp;Term Frequency (Tần suất xuất hiện của từ) l&agrave; số lần từ xuất hiện trong văn bản. V&igrave; c&aacute;c văn bản c&oacute; thể c&oacute; độ d&agrave;i ngắn kh&aacute;c nhau n&ecirc;n một số từ c&oacute; thể xuất hiện nhiều lần trong một văn bản d&agrave;i hơn l&agrave; một văn bản ngắn. Cụm từ n&agrave;o c&oacute; gi&aacute; trị TF&nbsp;cao hơn những cụm từ kh&aacute;c th&igrave; c&oacute; nghĩa l&agrave; cụm từ đ&oacute; xuất hiện thường xuy&ecirc;n hơn những cụm từ kh&aacute;c.</p> <p style="text-align: justify;"><strong>IDF: </strong>Inverse Document Frequency&nbsp;t&iacute;nh to&aacute;n độ quan trọng của một từ. Khi t&iacute;nh to&aacute;n TF, mỗi từ đều quan trọng như nhau, nhưng c&oacute; một số từ trong tiếng Anh như&nbsp;<em>"is", "of", "that",...</em>&nbsp;xuất hiện kh&aacute; nhiều nhưng lại rất &iacute;t quan trọng. V&igrave; vậy, ch&uacute;ng ta cần một phương thức b&ugrave; trừ những từ xuất hiện nhiều lần v&agrave; tăng độ quan trọng của những từ &iacute;t xuất hiện nhưng c&oacute; &yacute; nghĩa đặc biệt cho một số đoạn văn bản.</p> <p style="text-align: justify;"><strong>TfidfVectorizer</strong> chuyển đổi một tập hợp c&aacute;c t&agrave;i liệu th&ocirc; th&agrave;nh một ma trận c&aacute;c đặc trưng TF-IDF.</p> <h3 class="fittexted_for_content_h3" style="text-align: justify;">PassiveAggressiveClassifier l&agrave; g&igrave;?</h3> <p style="text-align: justify;">Thuật to&aacute;n&nbsp;Passive Aggressive l&agrave; một thuật to&aacute;n online learning, thuật to&aacute;n n&agrave;y sẽ cho ra kết quả ph&acirc;n loại tương đối ch&iacute;nh x&aacute;c v&agrave; n&oacute; lu&ocirc;n được cập nhật, điều chỉnh trong trường hợp đưa ra c&aacute;c kết quả sai. Kh&ocirc;ng giống như hầu hết c&aacute;c thuật to&aacute;n kh&aacute;c, n&oacute; sẽ kh&ocirc;ng hội tụ, mục đ&iacute;ch của n&oacute; l&agrave;&nbsp;tạo ra c&aacute;c bản cập nhật để điều chỉnh loss, &iacute;t g&acirc;y ra sự thay đổi về chuẩn (norm) của vectơ trọng số.</p> <h2 style="text-align: justify;">Nội Dung Ch&iacute;nh</h2> <h3 style="text-align: justify;">Tập Dữ Liệu Sử Dụng Trong Project</h3> <p style="text-align: justify;">Tập dữ liệu sử dụng trong project n&agrave;y c&oacute; t&ecirc;n l&agrave; new.csv,&nbsp; c&oacute; 7796 d&ograve;ng v&agrave; 4 cột. Cột đầu ti&ecirc;n x&aacute;c định tin tức, cột thứ 2 l&agrave; ti&ecirc;u đề, cột thứ 3 l&agrave; văn bản, cột cuối c&ugrave;ng l&agrave; c&aacute;c nh&atilde;n cho biết tin tức l&agrave; real hay fake.</p> <p style="text-align: justify;">Bạn c&oacute; thể tại xuống tập dữ liệu v&agrave; source code:&nbsp;<a href="https://drive.google.com/drive/folders/1aBCBE3WPa8Vnuru5YgfvhyKhPU3gMxCx?usp=sharing" target="_blank" rel="noopener">TẠI Đ&Acirc;Y.</a></p> <h3 style="text-align: justify;">Y&ecirc;u Cầu Của Project</h3> <p style="text-align: justify;">Trước khi bắt đầu project, h&atilde;y chắc chắn rằng bạn đ&atilde; c&agrave;i đặt đầy đủ c&aacute;c thư viện dưới đ&acirc;y:</p> <ul style="list-style-type: disc; text-align: justify;"> <li>numpy</li> <li>pandas</li> <li>sklearn</li> </ul> <p style="text-align: justify;">Bạn cũng cần c&agrave;i đặt jupyter lab để chạy code của m&igrave;nh bằng lệnh sau:<br /><code class="python">pip install jupyterlab</code><br />Tiếp theo nhập v&agrave;o cmd lệnh <strong><em>jupyter lab</em></strong> để bắt đầu code.</p> <p style="text-align: justify;"><img class="aligncenter size-full wp-image-6060" src="https://tek4.vn/wp-content/uploads/2020/11/Capture-23.png" alt="" width="253" height="28" /></p> <h3 style="text-align: justify;">X&acirc;y Dựng Model Ph&aacute;t Hiện Fake News</h3> <p style="text-align: justify;"><strong>Bước 1:</strong> Import c&aacute;c thư viện cần thiết</p> <p style="text-align: justify;"><code class="python">import numpy as np<br /> import pandas as pd<br /> import itertools<br /> from sklearn.model_selection import train_test_split<br /> from sklearn.feature_extraction.text import TfidfVectorizer<br /> from sklearn.linear_model import PassiveAggressiveClassifier<br /> from sklearn.metrics import accuracy_score, confusion_matrix</code><br /><img class="aligncenter wp-image-6061 size-full" src="https://tek4.vn/wp-content/uploads/2020/11/Capture-24.png" alt="ph&aacute;t hiện fake news" width="679" height="200" /><strong>Bước 2:</strong> Đọc dữ liệu v&agrave;o DataFrame, lấy k&iacute;ch thước v&agrave; xem 5 d&ograve;ng đầu của dữ liệu.</p> <p style="text-align: justify;"><code class="python"># Đọc dữ liệu v&agrave;o dataframe<br /> df=pd.read_csv("D:/TEK4VN/Fake_news/news.csv") #Thay đổi đường dẫn theo vị tr&iacute; của file csv tr&ecirc;n m&aacute;y t&iacute;nh của bạn<br /> #Lấy k&iacute;ch thước v&agrave; xem 5 d&ograve;ng đầu của dữ liệu<br /> df.shape<br /> df.head()</code><br /><img class="aligncenter wp-image-6062 size-full" src="https://tek4.vn/wp-content/uploads/2020/11/Capture-25.png" alt="Ph&aacute;t hiện fake news" width="993" height="293" /><strong>Bước 3:</strong> Lấy nh&atilde;n từ DataFrame</p> <p style="text-align: justify;"><code class="">#Tek4.vn-lấy c&aacute;c nh&atilde;n từ Dataframe<br /> labels=df.label<br /> labels.head()</code></p> <p style="text-align: justify;"><img class="aligncenter size-full wp-image-6063" src="https://tek4.vn/wp-content/uploads/2020/11/Capture-26.png" alt="" width="986" height="172" /></p> <p style="text-align: justify;"><strong>Bước 4:</strong> Chia bộ dữ liệu th&agrave;nh c&aacute;c tập training v&agrave; test sets.</p> <p style="text-align: justify;"><code class="python">#Chia bộ dữ liệu<br /> x_train,x_test,y_train,y_test=train_test_split(df['text'], labels, test_size=0.2, random_state=7)</code><br /><img class="aligncenter size-full wp-image-6064" src="https://tek4.vn/wp-content/uploads/2020/11/Capture-27.png" alt="" width="986" height="61" /><strong>Bước 5:</strong> Khởi tạo&nbsp;TfidfVectorizer với c&aacute;c stop word trong tiếng Anh,&nbsp;document frequency tối đa l&agrave; 0.7 (c&aacute;c thuật ngữ c&oacute; document frequency cao hơn sẽ bị loại). Stop word l&agrave; những từ phổ biến nhất trong một ng&ocirc;n ngữ&nbsp;sẽ được lọc ra trước khi xử l&yacute; dữ liệu ng&ocirc;n ngữ tự nhi&ecirc;n.&nbsp;TfidfVectorizer biến một dữ liệu th&ocirc; th&agrave;nh một ma trận c&aacute;c đặc trưng TF-IDF.</p> <p style="text-align: justify;"><code class="python">#Tek4.vn - Khởi tạo TfidfVectorizer<br /> tfidf_vectorizer=TfidfVectorizer(stop_words='english', max_df=0.7)<br /> #Tek4.vn - Fit and transform train set, transform test set<br /> tfidf_train=tfidf_vectorizer.fit_transform(x_train)<br /> tfidf_test=tfidf_vectorizer.transform(x_test)</code></p> <p style="text-align: justify;"><img class="aligncenter size-full wp-image-6065" src="https://tek4.vn/wp-content/uploads/2020/11/Capture-28.png" alt="" width="985" height="127" /></p> <p style="text-align: justify;"><strong>Bước 6:</strong> Khởi tạo một&nbsp;PassiveAggressionClassifier. Sau đ&oacute; thực hiện dự đo&aacute;n tr&ecirc;n tập test set từ&nbsp;TfidfVectorizer v&agrave; t&iacute;nh to&aacute;n độ ch&iacute;nh x&aacute;c với&nbsp;accuracy_score() từ sklearn.metrics.</p> <p style="text-align: justify;"><code class="python">#Tek4.vn - Khởi tạo PassiveAggressiveClassifier<br /> pac=PassiveAggressiveClassifier(max_iter=50)<br /> pac.fit(tfidf_train,y_train)<br /> #Tek4.vn - Dự đo&aacute;n tr&ecirc;n test set v&agrave; t&iacute;nh to&aacute;n độ ch&iacute;nh x&aacute;c<br /> y_pred=pac.predict(tfidf_test)<br /> score=accuracy_score(y_test,y_pred)<br /> print(f'Accuracy: {round(score*100,2)}%')</code><br /><img class="aligncenter size-full wp-image-6066" src="https://tek4.vn/wp-content/uploads/2020/11/Capture-29.png" alt="" width="991" height="244" /></p> <p style="text-align: justify;"><strong>Bước 7:</strong> M&ocirc; h&igrave;nh đ&atilde; c&oacute; đạt được độ ch&iacute;nh x&aacute;c l&agrave; 93.21%, cuối c&ugrave;ng h&atilde;y in ra&nbsp;confusion matrix để c&oacute; được c&aacute;i nh&igrave;n tổng qu&aacute;t về số lượng c&aacute;c&nbsp;false, true negatives v&agrave; positives.</p> <p style="text-align: justify;"><code class="python">#Tek4.vn - Build confusion matrix<br /> confusion_matrix(y_test,y_pred, labels=['FAKE','REAL'])</code><br /><img class="aligncenter size-full wp-image-6069" src="https://tek4.vn/wp-content/uploads/2020/11/Capture-30.png" alt="" width="981" height="99" />Với m&ocirc; h&igrave;nh n&agrave;y ch&uacute;ng ta c&oacute; được&nbsp;592 true positives, 589 true negatives, 40 false positives, and 46 false negatives.</p> <h3 style="text-align: justify;"><strong>Kết Luận</strong></h3> <p style="text-align: justify;">Với project n&agrave;y ch&uacute;ng ta đ&atilde; học được c&aacute;ch x&acirc;y dựng một m&ocirc; h&igrave;nh ph&aacute;t hiện fake news,&nbsp;triển khai được TfidfVectorizer, khởi chạy PassiveAggressionClassifier cho ph&ugrave; hợp với m&ocirc; h&igrave;nh. Độ ch&iacute;nh x&aacute;c đạt được l&agrave; 93.21%. Hi vọng bạn th&agrave;nh c&ocirc;ng với project n&agrave;y, h&atilde;y tiếp tục truy cập v&agrave;o <a href="https://tek4.vn/" target="_blank" rel="noopener">Tek4.vn</a> để thực h&agrave;nh c&aacute;c project về Machine Learning v&agrave; Deep Learning th&uacute; vị kh&aacute;c nh&eacute;!</p> <p style="text-align: justify;">&nbsp;</p> <div class="ant-row"> <div class="ant-col ant-col-24"> <div class="content--html line-numbers"> <div><hr /> <p style="text-align: center;"><em><strong>Fanpage Facebook:</strong>&nbsp;<a href="https://www.facebook.com/tek4.vn/">TEK4.VN</a></em>&nbsp;</p> <p style="text-align: center;"><em><strong>Tham gia cộng đồng để chia sẻ, trao đổi v&agrave; thảo luận:</strong>&nbsp;<a href="https://www.facebook.com/groups/tek4.vn/">TEK4.VN - Học Lập Tr&igrave;nh Miễn Ph&iacute;</a></em></p> </div> </div> </div> </div> <div class="ant-row ant-row-space-between ant-row-middle"> <div class="ant-col"> <div class="ant-space ant-space-horizontal ant-space-align-center"> <div class="ant-space-item"> <div class="ant-typography mb--0 font-size--12 color--neutral-400 cursor--pointer"> <div class="ant-space ant-space-horizontal ant-space-align-center">&nbsp;</div> </div> </div> </div> </div> </div>