1. Trang chủ
  2. » Công Nghệ Thông Tin

BÁO CÁO NHẬP MÔN TRÍ TUỆ NHÂN TẠO

19 92 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Nghiên Cứu Xây Dựng Chương Trình Phân Loại Văn Bản Dùng Giải Thuật Support Vector Machine Bằng Ngôn Ngữ Python
Tác giả Nguyễn Ngọc Duy, Vũ Tuấn Anh, Nguyễn Phạm Nhật Minh
Người hướng dẫn PTS. Nguyễn Văn A
Trường học Trường Đại Học Khoa Học Tự Nhiên - https://www.hcmus.edu.vn
Chuyên ngành Trí Tuệ Nhân Tạo
Thể loại Báo cáo Nhập Môn
Năm xuất bản 2021
Thành phố TP Hồ Chí Minh
Định dạng
Số trang 19
Dung lượng 2,27 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

DỰ ÁN 1 BÁO CÁO ĐỀ TÀI 44 ====o0o==== BÁO CÁO NHẬP MÔN TRÍ TUỆ NHÂN TẠO ĐỀ TÀI 44 Nghiên cứu xây dựng chương trình phân loại văn bản dùng giải thuật Support Vector Machine bằng ngôn ngữ Python Giáo vi.

Trang 1

BÁO CÁO NHẬP MÔN TRÍ TUỆ NHÂN TẠO

ĐỀ TÀI 44: Nghiên cứu xây dựng chương trình phân loại văn bản dùng

giải thuật Support Vector Machine bằng ngôn ngữ Python

Trang 2

TP Hồ Chí Minh, ngày 1 tháng 8 năm 2021

Trang 3

MỤC LỤC

1 Giới thiệu giải thuật Support Vector Machine 2

1.1 Các khái niệm nền tảng 2

1.1.1 Khoảng cách từ một điểm tới một siêu mặt phẳng 2

1.1.2 Bài toán phân chia hai classes 3

1.2 Xây dựng bài toán tối ưu cho SVM 4

2 Giới thiệu ngôn ngữ lập trình python 8

3 Giới thiệu bài toán phân loại văn bản 9

3.1 Bài toán phân loại văn bản 9

3.2 Đặc tả dữ liệu 11

3.3 Demo sản phẩm 11

Trang 4

Nội dung công việc

NGUYỄN PHẠM NHẬT MINH: Xây dựng cơ sở lý thuyết.

VŨ TUẤN ANH: Hiện thực chương trình.

1 GI I ỚI THI U ỆU GI I ẢI THU T ẬT SUPPORT VECTOR MACHINE

1.1 C ÁC KHÁI NI M ỆU N N ỀN T NG ẢI

1.1.1 Kho ng cách t m t đi m t i m t siêu m t ph ng ảng cách từ một điểm tới một siêu mặt phẳng ừ một điểm tới một siêu mặt phẳng ột điểm tới một siêu mặt phẳng ểm tới một siêu mặt phẳng ới một siêu mặt phẳng ột điểm tới một siêu mặt phẳng ặt phẳng ẳng

Trong không gian 2 chiều, ta biết rằng khoảng cách từ một điểm có toạ độ (x0, y0) tới đường thẳng có phương trình w1x +w2y +b=0 được xác định bởi:

|w1x0+w2y0+b|

w12+w22

Trong không gian ba chiều, khoảng cách từ một điểm có toạ độ (x0, y0, z0) tới

một mặt phẳng có phương trình w1x +w2y +w3z +b=0 được xác định bởi:

|w1x0+w2y0+w3z0+b|

w12+w22+w32

Hơn nữa, nếu ta bỏ dấu trị tuyệt đối ở tử số, chúng ta có thể xác định được điểm

đó nằm về phía nào của đường thẳng hay mặt phẳng đang xét Những điểm làm cho biểu thức trong dấu giá trị tuyệt đối mang dấu dương nằm về cùng 1 phía (phía

dương của đường thẳng), những điểm làm cho biểu thức trong dấu giá trị tuyệt đối

mang dấu âm nằm về phía còn lại (phía âm) Những điểm nằm trên đường

thẳng/mặt phẳng sẽ làm cho tử số có giá trị bằng 0, tức khoảng cách bằng 0.

Việc này có thể được tổng quát lên không gian nhiều chiều: Khoảng cách từ một điểm (vector) có toạ độ x0 tới siêu mặt phẳng (hyperplane) có phương trình

w T x+b=0 được xác định bởi:

|w T x0+b|

¿ ∨w¿ ∨ ¿2¿

Với

2 2

1

d i

i w

 

w

với d là số chiều của không gian.

Trang 5

1.1.2 Bài toán phân chia hai classes

Quay lại với bài toán trong Perceptron Learning Algorithm (PLA) Giả sử rằng

có hai class khác nhau được mô tả bởi các điểm trong không gian nhiều chiều, hai

classes này linearly separable, tức tồn tại một siêu phẳng phân chia chính xác hai

classes đó Hãy tìm một siêu mặt phẳng phân chia hai classes đó, tức tất cả các điểm thuộc một class nằm về cùng một phía của siêu mặt phẳng đó và ngược phía với toàn bộ các điểm thuộc class còn lại Chúng ta đã biết rằng, thuật toán PLA có thể làm được việc này nhưng nó có thể cho chúng ta vô số nghiệm như hình dưới đây:

Các mặt phân cách hai classes linearly separable.

Câu hỏi đặt ra là: trong vô số các mặt phân chia đó, đâu là mặt phân chia tốt

nhất theo một tiêu chuẩn nào đó? Trong ba đường thẳng minh họa trong hình phía trên, có hai đường thẳng khá lệch về phía class hình tròn đỏ Điều này có thể khiến cho lớp màu đỏ không vui vì lãnh thổ xem ra bị lấn nhiều quá Liệu có cách nào để tìm được đường phân chia mà cả hai classes đều cảm thấy công bằng và hạnh

phúc nhất hay không?

Ta cần tìm một tiêu chuẩn để đo sự hạnh phúc của mỗi class Xét hình dưới

đây:

Trang 6

Margin của hai classes là bằng nhau và lớn nhất có thể.

Nếu ta định nghĩa mức độ hạnh phúc của một class tỉ lệ thuận với khoảng cách

gần nhất từ một điểm của class đó tới đường/mặt phân chia, thì ở hình bên trái,

class tròn đỏ sẽ không được hạnh phúc cho lắm vì đường phân chia gần nó hơn

class vuông xanh rất nhiều Ta cần một đường phân chia sao cho khoảng cách từ điểm gần nhất của mỗi class (các điểm được khoanh tròn) tới đường phân chia là

như nhau, như thế thì mới công bằng Khoảng cách như nhau này được gọi

là margin (lề).

Đã có công bằng rồi, chúng ta cần văn minh nữa Công bằng mà cả hai đều kém

hạnh phúc như nhau thì chưa phải là văn mình cho lắm.

Chúng ta xét tiếp hình bên phải khi khoảng cách từ đường phân chia tới các điểm gần nhất của mỗi class là như nhau Xét hai cách phân chia bởi đường nét

liền màu đen và đường nét đứt màu lục, đường nào sẽ làm cho cả hai class hạnh

phúc hơn? Rõ ràng đó phải là đường nét liền màu đen vì nó tạo ra một margin rộng

hơn

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 hai classes là rạch ròi hơn Việc này, sau này các bạn sẽ thấy, là một điểm

khá quan trọng giúp Support Vector Machine mang lại kết quả phân loại tốt hơn so với Neural Network với 1 layer, tức Perceptron Learning Algorithm.

Bài toán tối ưu trong Support Vector Machine (SVM) chính là bài toán đi tìm đường phân chia sao cho margin là lớn nhất Đây cũng là lý do vì sao SVM còn được gọi là Maximum Margin Classifier.

1.2 X ÂY D NG ỰNG BÀI TOÁN T I ỐI ƯU U CHO SVM

Giả sử rằng các cặp dữ liệu của training set là x1 ,y1 , x2 ,y2, ,  xN,y N với vector xi Rd thể hiện đầu vào của một điểm dữ liệu và y i là nhãn của điểm dữ

Trang 7

liệu đó d là số chiều của dữ liệu và N là số điểm dữ liệu Giả sử rằng nhãn của mỗi

điểm dữ liệu được xác định bởi y  i 1 (class 1) hoặc y  i 1 (class 2) giống như trong PLA

Để dễ hình dung, ta xét trường hợp trong không gian hai chiều dưới đây Không

gian hai chiều để dễ hình dung, các phép toán hoàn toàn có thể được tổng quát lên không gian nhiều chiều.

Phân tích bài toán SVM.

Giả sử rằng các điểm vuông xanh thuộc class 1, các điểm tròn đỏ thuộc class -1

và mặt T 1 1 2 2 0

    

w x là mặt phân chia giữa hai classes Hơn nữa, class

1 nằm về phía dương, class -1 nằm về phía âm của mặt phân chia Nếu ngược lại,

ta chỉ cần đổi dấu của w và b Chú ý rằng ta cần đi tìm các hệ số w và b.

Ta quan sát thấy một điểm quan trọng sau đây: với cặp dữ liệu xn,y n bất kỳ, khoảng cách từ điểm đó tới mặt phân chia là:

2

T

y w xb

w

Điều này có thể dễ nhận thấy vì theo giả sử ở trên, y n luôn cùng dấu

với phía của x n Từ đó suy ra y n cùng dấu với  T

nb

w x , và tử số luôn là 1 số không âm

Trang 8

Với mặt phần chia như trên, margin được tính là khoảng cách gần nhất từ 1

điểm tới mặt đó (bất kể điểm nào trong hai classes):

2

margin min

T

n

w

Bài toán tối ưu trong SVM chính là bài toán tìm w và b sao cho margin này đạt

giá trị lớn nhất:

1

T

w x

(1) Việc giải trực tiếp bài toán này sẽ rất phức tạp, nên ta sẽ đưa nó về bài toán đơn giản hơn

Nhận xét quan trọng nhất là nếu ta thay vector hệ số w bởi kw và b bởi kb trong

đó k là một hằng số dương thì mặt phân chia không thay đổi, tức khoảng cách từ từng điểm đến mặt phân chia không đổi, tức margin không đổi Dựa trên tính chất

này, ta có thể giả sử:  T  1

y w xb với những điểm nằm gần mặt phân chia

nhất như hình dưới đây:

Các điểm gần mặt phân cách nhất của hai classes được khoanh tròn.

Như vậy, với mọi n, ta có:T  1

Trang 9

Vậy bài toán tối ưu (1) có thể đưa về bài toán tối ưu có ràng buộc sau đây:

, 2

1 ( , ) arg max subject to: T 1, 1, 2, ,

b

w

w

Bằng một biến đổi đơn giản, ta có thể đưa bài toán này về bài toán dưới đây:

2 2 ,

1

2

T

b

w

(3)

Ở đây, chúng ta đã lấy nghịch đảo hàm mục tiêu, bình phương nó để được một hàm khả vi, và nhân với

1

2 để biểu thức đạo hàm đẹp hơn

Quan sát quan trọng: Trong bài toán (3), hàm mục tiêu là một norm, nên là một hàm lồi Các hàm bất đẳng thức ràng buộc là các hàm tuyến tính theo w và b,

nên chúng cũng là các hàm lồi Vậy bài toán tối ưu (3) có hàm mục tiêu là lồi, và các hàm ràng buộc cũng là lồi, nên nó là một bài toán lồi Hơn nữa, nó là một Quadratic Programming Thậm chí, hàm mục tiêu là strictly

convex vì 22

T

w w Iw

  và I là ma trận đơn vị - là một ma trận xác định dương Từ

đây có thể suy ra nghiệm cho SVM là duy nhất.

Đến đây thì bài toán này có thể giải được bằng các công cụ hỗ trợ tìm nghiệm cho Quadratic Programing, ví dụ CVXOPT

Tuy nhiên, việc giải bài toán này trở nên phức tạp khi số chiều d của không gian

dữ liệu và số điểm dữ liệu N tăng lên cao.

Người ta thường giải bài toán đối ngẫu của bài toán này Thứ nhất, bài toán đối ngẫu có những tính chất thú vị hơn khiến nó được giải hiệu quả hơn Thứ hai, trong quá trình xây dựng bài toán đối ngẫu, người ta thấy rằng SVM có thể được áp dụng

cho những bài toán mà dữ liệu không linearly separable, tức các đường phân chia

không phải là một mặt phẳng mà có thể là các mặt có hình thù phức tạp hơn

Xác định class cho một điểm dữ liệu mới: Sau khi tìm được mặt phân cách

0

w x , class của bất kỳ một điểm nào sẽ được xác định đơn giản bằng cách:

( ) sgn T

Trong đó hàm sgn là hàm xác định dấu, nhận giá trị 1 nếu đối số là không âm và -1 nếu ngược lại

Trang 10

2 GI I ỚI THI U ỆU NGÔN NGỮ L P ẬT TRÌNH PYTHON

Python là một ngôn ngữ lập trình thông dịch (interpreted), hướng đối tượng

(object-oriented), và là một ngôn ngữ bậc cao (high-level) ngữ nghĩa động (dynamic semantics) Python hỗ trợ các module và gói (packages), khuyến khích

chương trình module hóa và tái sử dụng mã Trình thông dịch Python và thư viện

chuẩn mở rộng có sẵn dưới dạng mã nguồn hoặc dạng nhị phân miễn phí cho tất cả các nền tảng chính và có thể được phân phối tự do

Sau đây là các đặc điểm của Python:

 Ngữ pháp đơn giản, dễ đọc

 Vừa hướng thủ tục (procedural-oriented), vừa hướng đối tượng (object-oriented)

 Hỗ trợ module và hỗ trợ gói (package)

 Xử lý lỗi bằng ngoại lệ (Exception)

 Kiểu dữ liệu động ở mức cao

 Có các bộ thư viện chuẩn và các module ngoài, đáp ứng tất cả các nhu cầu lập trình

Có khả năng tương tác với các module khác viết trên C/C+

+ (Hoặc Java cho Jython, hoặc Net cho IronPython).

 Có thể nhúng vào ứng dụng như một giao tiếp kịch bản (scripting interface)

Trang 11

Python dễ dàng kết nối với các thành phần khác:

Python có thể kết nối với các đối tượng COM, NET (Ironpython, Python for .net), và CORBA, Java… Python cũng được hỗ trợ

bởi Internet Communications Engine (ICE) và nhiều công nghệ kết nối

khác

Có thể viết các thư viện trên C/C++ để nhúng vào Python và ngược lại.

Python là ngôn ngữ có khả năng chạy trên nhiều nền tảng.

Python có cộng đồng lập trình rất lớn, hệ thống thư viện chuẩn, và cả các

thư viện mã nguồn mở được chia sẻ trên mạng

2, Mac, Amiga, và những hệ điều hành khác Thậm chí có cả những phiên

bản chạy trên NET, máy ảo Java, và điện thoại di động (Nokia Series

60) Với cùng một mã nguồn sẽ chạy giống nhau trên mọi nền tảng

Python là ngôn ngữ mã nguồn mở

Cài đặt Python dùng giấy phép nguồn mở nên được sử dụng và phân tối

tự do, ngay cả trong việc thương mại Giấy phép Python được quản lý bởi Python Software Foundation.

3 GI I ỚI THI U ỆU BÀI TOÁN PHÂN LO I ẠI VĂN B N ẢI

3.1 B ÀI TOÁN PHÂN LO I ẠI VĂN B N ẢI

Phân loại văn bản (Text Classification) là bài toán thuộc nhóm học có giám sát

(Supervised learning) trong học máy Bài toán này yêu cầu dữ liệu cần có nhãn (label)

Mô hình sẽ học từ dữ liệu có nhãn đó, sau đó được dùng để dự đoán nhãn cho các dữ liệu mới mà mô hình chưa gặp.

Lấy ví dụ, cần xây dựng một mô hình học máy để dự đoán chủ đề (Kinh tế, Xã hội, Thể thao,…) của một bài báo bất kỳ Khi đó, ta cần rất nhiều dữ liệu có gán nhãn; tức là

ta cần rất nhiều bài báo mà mỗi bài báo đó chúng ta phải biết trước nó nằm trong chủ đề nào rồi.

Tổng quát về cách hoạt động của một bài toán phân loại văn bản:

Trang 12

Mô hình phân loại văn bản tiếng Việt tự động với Machine learning

Giai đoạn (a): Huấn luyện (training) là giai đoạn học tập của mô hình phân loại văn

bản Ở bước này, mô hình sẽ học từ dữ liệu có nhãn (trong ảnh trên nhãn là Possitive, Negative, Neutral) Dữ liệu văn bản sẽ được số hóa thông qua bộ trích xuất đặc

trưng (feature extractor) để mỗi mẫu dữ liệu trong tập huấn luyện trở thành 1 vector nhiều chiều (đặc trưng) Thuật toán máy học sẽ học và tối ưu các tham số để đạt được kết quả tốt trên tập dữ liệu này Nhãn của dữ liệu được dùng để đánh giá việc mô hình học tốt không và dựa vào đó để tối ưu.

Giai đoạn (b): Dự đoán (prediction), là giai đoạn sử dụng mô hình học máy sau khi

nó đã học xong Ở giai đoạn này, dữ liệu cần dự đoán cũng vẫn thực hiện các bước trích xuất đặc trưng Mô hình đã học sau đó nhận đầu vào là đặc trưng đó và đưa ra kết quả dự đoán.

Bài toán: Xây dựng mô hình phân loại văn bản tin tức tiếng Việt cho trang báo điện tử

X Mỗi khi một bài báo được đăng, chương trình cần phải tự động xác định được bài báo

đó nằm trong danh mục nào Các danh mục gồm có: Kinh tế, Thể thao, Giáo dục, Sức khỏe, Du lịch, Pháp luật,…

Trang 13

3.2 Đ ẶC C TẢI DỮ LI U ỆU

Dữ liệu đầu vào được lấy từ các bài báo tiếng Việt kèm theo chủ đề của bài báo đó.

Dữ liệu đã tiền xử lý có dạng: mỗi bài báo là một dòng, từ đầu tiên là nhãn (chủ đề) của dòng đó.

Ví dụ:

label thể_thao sanchez không dự trận khai màn nh anh cùng arsenal label âm_nhạc những sao việt hóa thân thành phó nháy trong mv

label nhịp_sống vợ phải quỳ gối mới được nói chuyện

label thể_thao hà nội chốt danh sách dự afc cup thể thao

3.3 D EMO S N ẢI PH M ẨM

Chương trình gồm 5 block:

Dữ liệu đầu vào file news_categories.txt:

Block 1: Tiền xử lý dữ liệu bằng hàm text_preprocess() gồm các chức năng:

 Xóa HTML code (nếu có)

 Chuẩn hóa bảng mã Unicode (đưa về Unicode tổ hợp dựng sẵn)

 Chuẩn hóa kiểu gõ dấu tiếng Việt (dùng òa úy thay cho oà uý)

Trang 14

 Thực hiện tách từ tiếng Việt (sử dụng thư viện tách từ underthesea)

 Đưa về văn bản lower (viết thường)

 Xóa các ký tự đặc biệt: “.”, “,”, “;”, “)”, …

 Dữ liệu được đưa về dạng chuẩn

Block 2: Khử nhiễu (stopword):

Trang 15

 Stopword là các từ xuất hiện nhiều ở tất cả các chuyên mục cần phân loại Do đó, chúng là các đặc trưng không có tác dùng cho việc phân loại văn bản.

 Các stopword thường là các từ nối (của, là, có, được, những,…) và các từ đặc trưng của dữ liệu (ví dụ như các từ “máy bay, tiếp viên” là các stopword nếu làm bài phân loại đánh giá khách hàng của doanh nghiệp vận tải hàng không.

Bộ stopword.txt được xây dựng từ news_categories.txt Trong chương trình này stopword.txt lấy top 100 từ xuất hiện nhiều nhất trong dữ liệu đầu vào, sau đó khử nhiễu, lưu lại trong news_categories.prep.

Block 3: Tạo train và test:

Trước khi huấn luyện mô hình phân loại văn bản, ta cần xây dựng tập huấn luyện và tập kiểm thử Việc này là cần thiết để đánh giá kết quả huấn luyện, lựa chọn mô hình cũng như tinh chỉnh để mô hình cho tốt hơn Block này gồm những chức năng sau:

1 Đọc dữ liệu từ file và tách làm 2 list text (dữ liệu) và label (nhãn) Dữ liệu text[i] sẽ có nhãn là label[i].

2 Chia làm 2 tập train (X_train, y_train) và test (X_test, y_test) theo tỉ lệ 80% train, 20% test.

3 Lưu train/test data ra file để sử dụng cho việc train với thư viện Fasttext.

4 Đưa label về dạng vector để tiện cho tính toán sử dụng LabelEncoder.

Block 4: Tạo models huấn luyện sử dụng thuật toán SVM:

Trang 16

Qua huấn luyện, thu được độ chính xác của chương trình dựa trên dataset đầu vào là 88% và huấn luyện mất gần 2000 giây, khoảng 30 phút.

Block 5: Test kiểm thử:

Demo 5 input:

Ngày đăng: 18/12/2022, 22:46

TỪ KHÓA LIÊN QUAN

w