You are on page 1of 97

..

ĐOÀN THANH NIÊN CỘNG SẢN HỒ CHÍ MINH


BAN CHẤP HÀNH TP. HỒ CHÍ MINH
----------------------

CÔNG TRÌNH DỰ THI

GIẢI THƯỞNG SINH VIÊN NGHIÊN CỨU KHOA HỌC EURÉKA

LẦN THỨ XX NĂM 2018

TÊN CÔNG TRÌNH: PHÂN TÍCH CẢM XÚC TRONG TIẾNG VIỆT
BẰNG PHƯƠNG PHÁP MÁY HỌC

LĨNH VỰC NGHIÊN CỨU: CÔNG NGHỆ THÔNG TIN

CHUYÊN NGÀNH: TRÍ TUỆ NHÂN TẠO

Mã số công trình: …………………………….


(Phần này do BTC Giải thưởng ghi)
i

MỤC LỤC
MỤC LỤC ................................................................................................................ i
DANH MỤC HÌNH ẢNH................................................................................................ iii
DANH MỤC BẢNG BIỂU ...............................................................................................iv
TÓM TẮT ........................................................................................................................... 1
ĐẶT VẤN ĐỀ ..................................................................................................................... 2
1. Tổng quan về vấn đề được nghiên cứu..............................................................2
2. Lý do lựa chọn đề tài ...........................................................................................4
3. Các nghiên cứu liên quan ...................................................................................5
4. Mục tiêu nghiên cứu............................................................................................7
5. Cách tiếp cận và phương pháp nghiên cứu ......................................................8
6. Đối tượng và phạm vi nghiên cứu ......................................................................9
7. Ý nghĩa, quy mô và phạm vi áp dụng ..............................................................10
8. Cấu trúc đề tài ...................................................................................................11
PHẦN 1: TỔNG QUAN TÀI LIỆU ............................................................................... 12
1.1. Giới thiệu về ngôn ngữ tiếng Việt và xử lý ngôn ngữ tiếng Việt ................12
1.1.1. Ngôn ngữ tự nhiên.........................................................................................12
1.1.2. Ngôn ngữ tiếng Việt ......................................................................................17
1.1.3. Xử lý ngôn ngữ tự nhiên ...............................................................................22
1.1.4. Xử lý ngôn ngữ tiếng Việt.............................................................................30
1.2. Vector hóa dữ liệu ..........................................................................................32
1.2.1. Word Vector ..................................................................................................33
1.2.2. Word2Vec .....................................................................................................34
1.2.3. Doc2Vec ........................................................................................................37
1.3. Các phương pháp phân lớp ...........................................................................42
1.3.1. K-Nearest Neighbor ......................................................................................42
1.3.2. Support Vector Machine ...............................................................................43
1.3.3. Gaussian ........................................................................................................45
1.3.4. Decision Tree ................................................................................................46
ii

1.3.5. Random Forest ..............................................................................................47


1.3.6. Convolutional Neural Net .............................................................................48
1.3.7. Ada Boost ......................................................................................................49
1.3.8. Naïve Bayes ..................................................................................................51
1.3.9. Bayesian Quadratic Discriminant Analysis ..................................................53
PHẦN 2: PHƯƠNG PHÁP TIẾP CẬN ......................................................................... 55
2.1. Mô hình giải quyết bài toán ..........................................................................55
2.2. Tiền xử lý văn bản ..........................................................................................56
2.2.1. Tách từ...........................................................................................................57
2.2.2. Loại bỏ hư từ và các dấu câu không cần thiết ...............................................59
2.3. Vector hóa dữ liệu ..........................................................................................59
2.4. Áp dụng các phương pháp phân lớp ............................................................60
PHẦN 3: KẾT QUẢ - THẢO LUẬN ............................................................................. 62
3.1. Dữ liệu thực nghiệm .......................................................................................62
3.2. Kết quả thực nghiệm và đánh giá .................................................................62
3.2.1. Thực nghiệm để phân lớp đánh giá chủ quan và khách quan .......................64
3.2.2. Thực nghiệm để phân tích cảm xúc tích cực và tiêu cực ..............................66
PHẦN 4: KẾT LUẬN - ĐỀ NGHỊ ................................................................................. 72
4.1. Kết luận ...........................................................................................................72
4.1.1 Những kết quả đạt được .................................................................................72
4.1.2. Tính mới của đề tài........................................................................................72
4.1.3. Những hạn chế ..............................................................................................73
4.1.4. Hướng phát triển ...........................................................................................73
4.2. Kiến nghị .........................................................................................................73
TÀI LIỆU THAM KHẢO ............................................................................................... 75
PHỤ LỤC A: DOWNLOAD ............................................................................................. 1
PHỤ LỤC B: SOURCE CODE ........................................................................................ 2
1. Tách từ bằng công cụ UETSegmenter ...............................................................2
2. Tách hư từ và dấu câu bằng ngôn ngữ Python trên Pycharm ........................6
3. Huấn luyện dữ liệu bằng ngôn ngữ Python trên Pycharm ..............................9
iii

DANH MỤC HÌNH ẢNH


Hình 1.1. Information Extraction .............................................................................. 27
Hình 1.2. LatentSemantic Analysis ........................................................................... 27
Hình 1.3. Named Entity Recognition ........................................................................ 28
Hình 1.4. Parse Tree .................................................................................................. 28
Hình 1.5. Pre-processing ........................................................................................... 29
Hình 1.6. Sentiment Analysis.................................................................................... 29
Hình 1.7. Cách biểu diễn từ ‘Queen’ dưới dạng One-hot Vector ............................. 33
Hình 1.8. Cách biểu diễn các từ trên Word2Vec ...................................................... 34
Hình 1.9. Mô hình Continous Bag of Words ............................................................ 35
Hình 1.10. Mô hình Continuous Skip-gram .............................................................. 36
Hình 1.11. Mô hình của Distributed Bag of Words .................................................. 39
Hình 1.12. Mô hình Distributed Memory ................................................................. 40
Hình 1.13. Mô hình K-Nearest Neighbor ................................................................. 43
Hình 1.14. Mô hình Support Vector Machine – Linear ............................................ 44
Hình 1.15. Mô hình Support Vector Machine – RBF ............................................... 44
Hình 1.16. Hàm từ tiến trình Gaussian ..................................................................... 45
Hình 1.17. Mô hình Decision Tree............................................................................ 46
Hình 1.18. Mô hình Random Forest ......................................................................... 47
Hình 1.19. Mô hình Convolutional Neural Net ........................................................ 49
Hình 1.20. Giản đồ Ada Boost .................................................................................. 50
Hình 1.21. Phân lớp Naive Bayes ............................................................................. 52
Hình 1.22. So sánh LDA với QDA ........................................................................... 53
Hình 2.1. Sơ đồ phân tích cảm xúc tổng quan. ......................................................... 55
Hình 2.2. Các giai đoạn tiền xử lý văn bản được sử dụng ........................................ 57
iv

DANH MỤC BẢNG BIỂU


Bảng 1.1. So sánh sự khác biệt giữa tiếng Việt và tiếng Anh ................................... 20
Bảng 1.2. Khoảng cách giữa các từ đến từ ‘France’ ................................................. 41
Bảng 3.1. Bộ dữ liệu VLSP 2016 .............................................................................. 62
Bảng 3.2. Bộ dữ liệu VLSP 2016 sau khi tiền xử lý ................................................. 62
Bảng 3.3. Kết hợp mô hình vector hóa dữ liệu với các phương pháp phân lớp ....... 63
Bảng 3.4. Độ chính xác khi phân lớp chủ quan và khách quan (%) ......................... 64
Bảng 3.5. Độ chính xác khi phân lớp tích cực và tiêu cực (%) ................................ 66
Bảng 3.6. Khảo sát sự ổn định của độ chính xác khi huấn luyện (%) ...................... 69
Bảng 3.7. Hiệu suất của các phương pháp phân lớp cảm xúc (đo bằng F1). ............ 70
Bảng 3.8. So sánh kết quả giữa phương pháp đề xuất với các phương pháp trước. . 71
1

TÓM TẮT
Phân tích cảm xúc người dùng là một trong những bài toán quan trọng và phức
tạp trong xử lí ngôn ngữ tự nhiên nhưng giá trị mà nó mang lại thì rất cần thiết trong
cuộc Cách mạng 4.0. Để tiếp cận bài toán này, chúng ta phải xây dựng một mô hình
máy học để có thể phân loại được đánh giá người dùng. Trong nghiên cứu này, chúng
tôi đề xuất sử dụng Doc2Vec cho bước biểu diễn dữ liệu và kết hợp với các phương
pháp phân lớp khác nhau để phân tích cảm xúc người dùng. Đề xuất của chúng tôi
được thử nghiệm trên dữ liệu chung VLSP 2016 và thu được kết quả khả quan.
2

ĐẶT VẤN ĐỀ

1. Tổng quan về vấn đề được nghiên cứu


Xử lý ngôn ngữ tự nhiên – XLNNTN (Natural Language Processing – NLP) là
khái niệm để chỉ các kĩ thuật, phương pháp thao tác trên ngôn ngữ tự nhiên bằng máy
tính. Chúng ta cần phân biệt ngôn ngữ tự nhiên như tiếng Việt, tiếng Anh, tiếng Nhật,
… là những ngôn ngữ trong giao tiếp thường ngày và ngôn ngữ nhân tạo như ngôn
ngữ lập trình, ngôn ngữ máy, …. Đây là một lĩnh vực kết hợp của khoa học máy tính
(Computer Science) với trí tuệ nhân tạo (Artificial Intelligence) và ngôn ngữ học tính
toán (Computational Linguistics) liên quan tới sự tương tác giữa ngôn ngữ con người
(Natural Language) với máy tính. Trong trí tuệ nhân tạo thì xử lý ngôn ngữ tự nhiên
là một trong những phần khó nhất vì nó liên quan đến việc phải hiểu được ý nghĩa
của ngôn ngữ – công cụ hoàn hảo nhất của tư duy và giao tiếp. Còn trong xử lý ngôn
ngữ tự nhiên có hai quan điểm cơ bản đó là: “Xử lý các từ ngữ bằng máy tính” và
“Làm cho máy tính hiểu được các từ ngữ”. Hiện tại, cả hai hướng này đều đang được
tích cực nghiên cứu và phát triển, nhờ đó rất nhiều các hệ thống hiệu quả đã và đang
được tạo ra.
Để máy tính có thể hiểu được ngôn ngữ tự nhiên, ngôn ngữ con người thì điều
đó không phải dễ nhưng ngày nay, những nghiên cứu về lĩnh vực xử lý ngôn ngữ tự
nhiên nhằm tạo cho máy tính khả năng hiểu giao tiếp được bằng ngôn ngữ tự nhiên
với con người đã không chỉ còn là lý thuyết nữa mà trên thế giới đã có rất nhiều ứng
dụng hiệu quả của XLNNTN vào đời sống chúng ta. Có thể kể đến rất nhiều như: các
bộ dịch tự động của Google, Lạc Việt; xử lý văn bản và ngôn ngữ; tìm kiếm thông
tin; chiết suất thông tin; trợ lý ảo Siri của Apple hay Cortana của Microsoft; tóm tắt
văn bản; phân loại văn bản; data mining và web mining; khai phá dữ liệu; …. Bên
cạnh đó, XLNNTN được xây dựng dựa trên ngôn ngữ học phức tạp, các nguyên lý
thống kê, và thuật toán mạng nơ-ron (neural network algorithms). Chương trình
XLNNTN có khả năng đọc và hiểu được văn bản với tốc độ cao. Do đó, dù có hàng
nghìn tài liệu hay thậm chí hàng tỷ văn bản, chương trình XLNNTN có thể “tiêu hoá”
3

nhanh chóng tất cả các thông tin này, từ đó có thể rút trích ra được những tri thức
(knowledge) đáng giá cho doanh nghiệp như: tri thức về các khách hàng, tri thức về
những đối thủ cạnh tranh, tri thức về các hoạt động trong doanh nghiệp như điều
hành, marketing, sales, kĩ thuật, sản phẩm, …. Còn về kinh tế, thông qua các thuật
toán tiên tiến, XLNNTN chỉ ra được ai, cái gì, khi nào, và ở đâu trong những nội dung
phi cấu trúc, từ đó có thể cung cấp các cấp độ hiểu biết cao hơn về công việc kinh
doanh [9]. Các ứng dụng của XLNNTN vào lĩnh vực kinh tế trên thế giới có thể kể
đến như:
- Marketing: Voice of the customer, social media analysis, churn analysis,
market research, survey analysis.
- Business: Competitive intelligence, document categorization, human
resources (voice of the employee), records retention, risk analysis, website
faceted navigation.
- Industry specific: Fraud detection, e-discovery, warranty analysis, medical
analytics research.
Ở Việt Nam, XLNNTN là môn bộ môn không mới nhưng chưa được phổ biến
rộng rãi và các số lượng nghiên cứu chuyên về tiếng Việt là rất ít. Nguyên nhân ngoài
việc số lượng người tìm hiểu về XLNNTN ở Việt Nam còn thấp, việc chính bản thân
tiếng Việt là một ngôn ngữ khó với rất nhiều bài toán cần giải quyết là một trong
những vấn đề chính khiến cho các nghiên cứu sinh, các lập trình viên khó có thể tiếp
cận và duy trì đam mê tìm hiểu. Có thể kể đến một số khó khăn như sự nhập nhằng
về ngữ nghĩa trong tiếng Việt, các bài toán tách từ, phân loại từ, dấu thanh hay dấu
câu, tiếng Việt thuộc ngôn ngữ đơn lập, tức là mỗi một tiếng (âm tiết) được phát âm
tách rời nhau và được thể hiện bằng một chữ viết. Đặc điểm này thể hiện rõ rệt ở tất
cả các mặt ngữ âm, từ vựng, ngữ pháp, … gây khó khăn cho việc chạy các chương
trình của XLNNTN nếu không tiền xử lý kĩ. Tuy nhiên, lợi ích của xử lý ngôn ngữ
tiếng Việt mang lại là rất lớn, nó có thể ứng dụng trong hầu hết các lĩnh vực và đặc
biệt là trong thời đại Cách mạng 4.0 đang diễn ra mạnh mẽ ở Việt Nam. Cụ thể, chúng
ta đang sống trong kỷ nguyên số, là thời đại mà thông tin được lan truyền nhanh
4

chóng thông qua các diễn đàn, các trang tin tức trực tuyến và mạng xã hội với hàng
tỷ người dùng trên thế giới. Lượng thông tin nội dung được người dùng tạo ra hằng
ngày cực kỳ lớn và đa dạng về mặt hình thức và chủ đề. Những thông tin này có
chung một đặc điểm: mang tính cá nhân nên tính đúng đắn, xác thực là tương đối
nhưng lại rất giá trị. Việc có thể khai thác và sử dụng lượng thông tin này là một trong
những thách thức lớn trong phân tích cảm xúc nói riêng và xử lý ngôn ngữ tự nhiên
nói chung.
Bên cạnh đó, việc phân tích cảm xúc trong văn bản được ứng dụng trong hàng
loạt các vấn đề như: quản trị thương hiệu doanh nghiệp, thương hiệu sản phẩm, quản
trị quan hệ khách hàng, khảo sát ý kiến xã hội học hay dễ hiểu hơn là phân tích đánh
giá của khách hàng về một sản phẩm nào đó, …. Việc dự đoán là cực kì quan trọng
vì ý kiến của người dùng ngày càng trở nên có giá trị hơn. Nói cách khác, thị hiếu, sự
quan tâm của cộng đồng là yếu tố quan trọng ảnh hưởng đến các sản phẩm như phim
ảnh, sách báo, thiết bị điện tử, hay các dịch vụ như nhà hàng, khách sạn, giao thông,
…. Do đó, vấn đề này được sự quan tâm không chỉ từ các nhà nghiên cứu mà còn từ
phía các công ty. Họ cần một hệ thống phân tích ý kiến khách hàng về sản phẩm một
cách tự động để nhanh chóng nắm bắt được cảm nhận cũng như thị hiếu của người
tiêu dùng để nâng cao khả năng cạnh tranh với đối thủ cùng lĩnh vực và thích nghi
với môi trường kinh doanh thường xuyên có biến động. Những thông tin này không
chỉ hữu dụng trong tiếp thị, xếp hạng đánh giá sản phẩm mà còn hỗ trợ trong việc
nhận biết vấn đề để xây dựng và phát triển sản phẩm.
Vậy nên, việc xây dựng một mô hình để giải quyết bài toán phân tích cảm xúc
người dùng là một yêu cầu cấp thiết và quan trọng cần được giải quyết trong công
cuộc tự động hóa hiện nay.

2. Lý do lựa chọn đề tài


Do nhu cầu phát triển của xã hội ngày càng tăng, nhất là về lĩnh vực kinh tế cũng
như công nghệ. Việc phân tích cảm xúc trong văn bản được ứng dụng trong hàng loạt
các vấn đề như: quản trị thương hiệu doanh nghiệp, thương hiệu sản phẩm, quản trị
5

quan hệ khách hàng, khảo sát ý kiến xã hội học hay dễ hiểu hơn là phân tích đánh giá
của khách hàng về một sản phẩm nào đó, …. Việc dự đoán là cực kì quan trọng vì ý
kiến của người dùng ngày càng trở nên có giá trị hơn. Thị hiếu, sự quan tâm của cộng
đồng là yếu tố ảnh hưởng chính đến các sản phẩm như phim, sách, thiết bị điện tử,
…. Do đó, vấn đề này được sự quan tâm không chỉ từ các nhà nghiên cứu mà còn từ
phía các công ty. Họ cần một hệ thống phân tích ý kiến khách hàng về sản phẩm một
cách tự động để nhanh chóng nắm bắt được cảm nhận và thị hiếu của người tiêu dùng
để nâng cao khả năng cạnh tranh với đối thủ cạnh và thích nghi với môi trường kinh
doanh thường xuyên có biến động. Những thông tin này không chỉ hữu dụng trong
tiếp thị, xếp hạng đánh giá sản phẩm mà còn hỗ trợ trong việc nhận biết vấn đề để
xây dựng và phát triển sản phẩm.
Còn trong nghiên cứu, việc xây dựng hệ thông phân tích cảm xúc người dùng là
một bước tiến lớn xong công động xử lý ngôn ngữ tự nhiên, giúp giải quyết được
nhiều vấn đề đang mắc phải. Xây dựng mô hình giải quyết bài toán phân tích cảm
xúc người dùng. Cụ thể chúng tôi chia cảm xúc người dùng ra thành các trạng thái
cảm xúc phân biệt. Từ đó, chúng tôi tiếp cận bài toán phân tích cảm xúc người dùng
bằng phương pháp phân lớp. Trong đó, mỗi bình luận diễn đạt cảm xúc từ người dùng
được biểu diễn thành một vector để đưa vào huấn luyện mô hình phân lớp.

3. Các nghiên cứu liên quan


Phân tích cảm xúc người dùng (Sentiment Analysis) là một chủ đề đầy thách
thức trong lĩnh vực máy học (Machine Learning). Nhiệm vụ của bài toán này là phát
hiện ra thái độ mang tính lâu dài, màu sắc tình cảm, khuynh hướng niềm tin vào các
đối tượng hay người nào đó. Tuy nhiên, mọi người thể hiện các cảm nhận của mình
thông qua ngôn ngữ tự nhiên vốn thường có sự nhập nhằng về ngữ nghĩa đã gây
không ít khó khăn trong việc xử lý thông tin. Bên cạnh đó, người dùng còn sử dụng
các từ viết tắt, từ lóng hay các kí hiệu biểu cảm như ‘=))’, ‘:(’, ‘>_<’, ... để thể hiện
trạng thái cảm xúc của họ.
6

Các nghiên cứu về phân tích cảm xúc đã xuất hiện từ đầu những năm 2000 [16]
của Bo Pang và Lillian Lee đã cho kết quả rất tốt, tạo tiền đề cho những bước tiến sau
này. Các chủ đề nghiên cứu trải dài từ các lĩnh vực như phân tích các đánh giá phim
[12], các nhà hàng, khách sạn, món ăn, …. Và để có thể giải quyết bài toán phân tích
cảm xúc này, các nghiên cứu đã sử dụng các phương pháp như: máy học [20], thống
kê [17] hay phương pháp dựa trên luật kết hợp với ngữ liệu [18].
Với ngôn ngữ tiếng Việt, các nghiên cứu về phân tích cảm xúc của câu văn
có thể kể tới như: Kieu và Pham [10] giới thiệu phân lớp cảm xúc dành cho tiếng Việt
dựa trên hệ thống luật và mô tả các thực nghiệm trên bộ dữ liệu là các bài đánh giá
về sản phẩm máy tính; Duyen và cộng sự [11] sử dụng các thuật toán máy học như
SVM, MEM trên các đánh giá khách sạn từ Agoda; Van và cộng sự [14] sử dụng
SVM để phân loại các bình luận trên Facebook; Tran và Phan [15] đưa ngôn ngữ bối
cảnh vào câu để cung cấp thêm thông tin phân tích cảm xúc; Trinh và cộng sự [42]
đã phân tích tình cảm các bình luận tiếng Việt trên Facebook dựa trên từ điển; Vo và
cộng sự [44] đã phân tích cảm xúc trên 5 bộ dữ liệu tiếng Việt khác nhau thông qua
mô hình kết hợp mới giữa Hierarchical Dirichlet Process (HDP) và Support Vector
Machine (SVM); Son Trinh, Luu Nguyen và Minh Vo phân tích cảm xúc người dùng
bằng cách kết hợp từ điển và máy học trêm các đánh giá sản phẩm bằng tiếng Việt
[45]; Bang và cộng sự [46] đã phân loại ý kiến cho các phản hồi đặt phòng khách sạn
dựa trên cấu trúc câu và phân tích câu chủ quan; Quan Hoang Vo và cộng sự [19]
dùng một phương pháp mới kết hợp các ưu điểm của Convolutional Neural Network
(CNN) và Long Short Term Memory (LSTM) để phân tích cảm xúc trên 2 bộ dữ liệu
VS và VLSP 2016; Phan và Cao [37] đã giới thiệu một khuôn khổ để khai thác các
văn bản không có cấu trúc dưới dạng các nhận xét tiếng Việt về địa điểm ăn uống
được đề xuất bằng Skip-Gram và SVM để phân lớp. Ngoài ra, còn có các nghiên cứu
liên quan khác về tiếng Việt như: Ha và cộng sự [35] đã nâng cấp mô hình Featured-
based Opinion Mining and Summarizing (FMOS) với VietSentiWordNet và sử dụng
trên các đánh giá về điện thoại di động; Le và cộng sự [36] đã kết hợp các gói phần
mềm mã nguồn mở có sẵn và triển khai các phần mềm mã nguồn mở mới để tạo ra
7

một giải pháp mã nguồn mở cho phép xử lý văn bản tiếng Việt; Nguyen và cộng sự
[38] đã đề xuất một cách tiếp cận để khai thác ý kiến công chúng từ văn bản tiếng
Việt bằng cách sử dụng một từ điển tình cảm miền cụ thể để cải thiện độ chính xác
trên bộ dữ liệu về sản phẩm và dịch vụ trực tuyến; Le và cộng sự [39] đã đề xuất một
cách tiếp cận để trích xuất và phân loại các thuật ngữ khía cạnh cho tiếng Việt bằng
phương pháp máy học bán giám sát GK-LDA và sử dụng phương pháp dựa trên từ
điển trong suy luận theo khía cạnh; Bach và công sự [40] đã tiến hành nghiên cứu
thực nghiệm về khai thác các câu so sánh trong tiếng Việt với mục tiêu xác định các
câu so sánh trong tài liệu và công nhận các quan hệ trong các câu so sánh được xác
định; Pham và cộng sự [41] sử dụng các từ đại diện để đánh giá các bình luận bằng
tiếng Việt với mô hình mạng nơ-ron mới gồm 3 lớp; Phu và cộng sự [43] tạo từ điển
gồm các tính từ tiếng Việt bằng nhiều quy tắc dựa vào ngữ cảnh đã được sử dụng
rộng rãi cho các nghiên cứu phân loại ngữ nghĩa, ….
Nguồn cảm hứng sâu xa giúp chúng tôi tiếp cận đến XLNNTN ngoài những lợi
ích mà nó mang lại thì không thể kể đến những bộ công cụ đắc lực cho công nghệ và
liên quan mật thiết đến ngôn ngữ của các nhà nghiên cứu nước ngoài mà ngôn ngữ
chính là tiếng Anh: Phân loại văn bản bằng SVM của Sassano [20]; Phân tích cảm
xúc người dùng bằng phương pháp “lát cắt cực tiểu” của Pang và Lee [12]; Phân loại
yêu cầu dựa trên CNN và LSTM trên các nhận xét trực tuyến của người dùng của
Guggilla và cộng sự [21]; Phân loại văn bản bằng phương pháp phân lớp Gaussian
của Stavrakas và cộng sự [22]. Ngoài ra, không thể kể đến các nghiên cứu về ngôn
ngữ tiếng Việt như: Phân tích cảm xúc người dùng bằng phương pháp SVM trên các
bình luận Facebook của Van và cộng sự [14], bài viết về Phân tích cảm xúc của Cuong
và cộng sự [13] đăng trong hội thảo VLSP 2016.

4. Mục tiêu nghiên cứu


Tìm hiểu các lí thuyết cần thiết để xây dựng được mô hình để giải quyết bài toán
phân lớp cảm xúc người dùng tiếng Việt thông qua các văn bản là các bài đánh giá,
bình luận, ... với cảm xúc mong đợi ở hai dạng định tính:
8

- Xác định tính tích cực – tiêu cực của văn bản.
- Xác định tính chủ quan – khách quan của văn bản.
Bên cạnh đó, mô hình giải quyết bài toán phải tối ưu về độ chính xác, hiệu suất
cũng
như thời gian thực hiện, giúp giải quyết các thách thức, các vấn đề mắc phải trong
phân tích cảm xúc người dùng nói riêng và xử lý ngôn ngữ tự nhiên ở Việt Nam nói
chung.

5. Cách tiếp cận và phương pháp nghiên cứu


Do sự phát triển từng ngày của XLNNTN, nhu cầu của người dùng ngày càng
tăng nên các công cụ liên quan cũng được ra đời từ đó. Những ứng dụng từ phương
pháp phân lớp như: Phân tích cảm xúc của một dòng bình luận; lọc các bình luận có
ý nghĩa đóng góp; … sẽ góp phần giúp doanh nghiệp, tổ chức dễ dàng nhìn nhận ra
được nhu cầu và ý muốn của người dùng. Từ đó công ty sẽ nâng cấp các chức năng
mà người dùng quan tâm nhiều đến hoặc cho ra đời các sản phẩm hợp với thị hiếu
người tiêu dùng hơn, góp phần phát triển công ty theo hướng tích cực hơn. Chúng ta
có thể thấy XLNNTN có vai trò cũng như tầm quan trọng khá lớn đến sự phát triển
của doanh nghiệp ở thời đại công nghệ liên tục đổi mới như thế này. Vì ảnh hưởng to
lớn nêu trên, việc tiếp tục định hướng và phát triển các sản phẩm của XLNNTN mà
cụ thể là phương pháp phân lớp, là nhu cầu thiết yếu hiện nay.
Muốn hiểu rõ hơn về XLNNTN để xây dựng các công cụ mới cũng như sử dụng
tối ưu được các công trình có sẵn, trước tiên phải hiểu rõ về ngôn ngữ mà chúng ta
sử dụng đó là tiếng Việt. Tiếng Việt là ngôn ngữ chung của 85% người Việt Nam,
thuộc họ Nam Á, đã xuất hiện cách đây 6000 năm trước. Tiếng Việt có cấu tạo khá
phức tạp (sử dụng 27 kí tự Latin, 6 thanh điệu, có các nguyên âm, phụ âm, từ đơn, từ
ghép) [1] từ đó gây ra nhiều rắc rối, các trường hợp nhập nhằng về ngữ nghĩa khiến
máy tính khó có thể hiểu được. Để giải quyết những rắc rối trên chúng ta phải trải
qua các giai đoạn tiền xử lý văn bản như: xóa thẻ tag, ghép các câu ghép lại, loại bỏ
hư từ, gán nhãn, …. Sau đó, chúng ta sử dụng các phương pháp vector hóa dữ liệu
9

như Distributed Memory (DM) hay Distributed Bag of Words (DBoW) để chuyển
hóa các câu thành vector. Đây là bước rất quan trọng, nó quy định các công việc như:
bỏ qua các từ có tần số xuất hiện thấp, số chiều vector mà mình muốn, số lần huấn
luyện dữ liệu; …. Sau cùng, các phương pháp phân lớp được sử dụng để phân lớp dữ
liệu (gán nhãn dữ liệu). Tùy vào các phương pháp khác nhau, chúng ta có thể thu
được các độ chính xác khác nhau.
Tuy nhiên, để làm được tất cả việc trên là một điều không hề dễ, chúng tôi đã
tham khảo khá nhiều tài liệu từ nhiều nguồn, đọc hiểu và phân tích một cách chi tiết.
Cuối cùng, chúng tôi hệ thống hóa các tài liệu có liên quan đến đề tài trong các sách,
báo chí, tiểu luận khoa học và trên Internet lại và tiến hành nghiên cứu, lựa chọn các
bài viết, phương pháp nghiên cứu có tính chuyên môn và thực tiễn cao để áp dụng và
kết hợp với mô hình của chúng tôi để có thể đạt được kết quả tốt nhất.

6. Đối tượng và phạm vi nghiên cứu


Nghiên cứu về ngôn ngữ tự nhiên với xử lý ngôn ngữ tự nhiên nói chung và ngôn
ngữ tiếng Việt với xử lý ngôn ngữ tiếng Việt nói riêng. Trong đó tiền xử lý tiếng Việt
là đặc biệt quan trọng, cụ thể là tách từ (Word Segmentation) và tách hư từ (Stop
Word) trong tiếng Việt và những dấu câu không liên quan.
Nghiên cứu về phương pháp Doc2Vec (Paragraph Vector) và các lý thuyết tiền
đề như Word Vector, Word2Vec, … với hai mô hình của phương pháp:
- Distributed Bag of Words (DBoW)
- Distributed Memomry (DM)
Nghiên cứu về các phương pháp phân lớp:
- K-Nearest Neighbor
- Support Vector Machine với Linear SVM và RBF SVM
- Gaussian
- Decision Tree
- Random Forest
- Neural Net
10

- Ada Boost
- Naïve Bayes
- Quadratic Discriminant Analysis

7. Ý nghĩa, quy mô và phạm vi áp dụng


- Ý nghĩa khoa học:
Hướng nghiên cứu về trí tuệ nhân tạo ở Việt Nam đang ngày càng được quan
tâm, đặc biệt là trong cuộc Cách mạng công nghệ 4.0. Đề tài này góp phần thúc đẩy
sự phát triển của trí tuệ nhân tạo nói chung và cộng đồng xử lý ngôn ngữ tự nhiên ở
Việt Nam nói riêng, là số ít trong số các đề tài phân tích cảm xúc người dùng trong
tiếng Việt với một đề xuất mới và hiệu quả là dùng Doc2Vec để vector hóa dữ liệu
và tiến hành phân lớp cảm xúc người dùng với các định tính.
- Ý nghĩa thực tiễn:
Phân tích cảm xúc không chỉ có sự quan tâm từ các nhà nghiên cứu mà còn từ
phía các công ty, doanh nghiệp. Ứng dụng của đề tài phục vụ cho các hoạt động phát
triển sản phẩm, kinh doanh và thương mại cho các công ty, doanh nghiệp ở nhiều
mục đích và lĩnh vực khác nhau. Việc dự đoán là cực kì quan trọng vì ý kiến của
người dùng ngày càng trở nên có giá trị hơn. Do đó, các công ty và doanh nghiệp cần
một hệ thống phân tích ý kiến khách hàng về sản phẩm một cách tự động để nhanh
chóng nắm bắt được cảm nhận và thị hiếu của người tiêu dùng.
Đề xuất trong nghiên cứu giúp các doanh nghiệp có thể khai thác và sử dụng
lượng thông tin mà người dùng tạo ra như các bình luận, đánh giá về các sản phẩm
doanh nghiệp nhằm nâng cao khả năng cạnh tranh với đối thủ cùng lĩnh vực và thích
nghi với môi trường kinh doanh thường xuyên có biến động. Những thông tin này
không chỉ hữu dụng trong tiếp thị, xếp hạng đánh giá sản phẩm mà còn hỗ trợ trong
việc nhận biết vấn đề để xây dựng và phát triển sản phẩm.
- Quy mô và phạm vi áp dụng:
Đóng góp của đề tài áp dụng rộng rãi cho nhiều lĩnh vực ngoài kinh doanh như
giáo dục và đào tạo (phân tích đánh giá sinh viên dành cho môn học hay giảng viên),
11

giải trí (phân tích mức độ hài lòng của khách hàng dành cho dịch vụ), chính trị (phân
tích thái độ của người dân với chính sách), … vì tất cả các lĩnh vực này đều cần đến
một mô hình để giải quyết bài toán phân lớp cảm xúc người dùng (khách hàng, học
sinh, người sử dụng dịch vụ, người dân, …) một cách hiệu quả.

8. Cấu trúc đề tài


MỞ ĐẦU
Nêu lên nhu cầu thực tế và lý do thực hiện đề tài, đồng thời giới thiệu sơ lược
tổng quan về đề tài, mục tiêu phải đạt được cũng như cách tiếp cận, phương pháp, đối
tượng, phạm vi nghiên cứu và ý nghĩa đề tài.
PHẦN 1: TỔNG QUAN TÀI LIỆU
Giới thiệu về các lí thuyết được sử dụng trong đề tài như Doc2Vec (với các lí
thuyết tiền đề liên quan) và các thuật toán phân lớp.
PHẦN 2: PHƯƠNG PHÁP TIẾP CẬN
Giới thiệu về Mô hình giải quyết bài toán và các bước áp dụng lý thuyết vào mô
hình trên.
PHẦN 3: KẾT QUẢ - THẢO LUẬN
Mô tả, tiến hành thực nghiệm kiểm tra và đánh giá kết quả hoạt động của mô
hình.
PHẦN 4: KẾT LUẬN - ĐỀ NGHỊ
Nêu lên kết quả đạt được trong quá trình nghiên cứu và thực hiện đề tài. Nhận
xét đánh giá lại ưu nhược điểm của mô hình và mô tả hướng phát triển tiếp theo của
đề tài.
12

PHẦN 1: TỔNG QUAN TÀI LIỆU

1.1. Giới thiệu về ngôn ngữ tiếng Việt và xử lý ngôn ngữ tiếng Việt

1.1.1. Ngôn ngữ tự nhiên


Trong ngôn ngữ học, một ngôn ngữ tự nhiên là bất kỳ ngôn ngữ nào phát sinh,
không suy nghĩ trước trong não bộ của con người. Điển hình là một số ngôn ngữ mà
con người được sử dụng để giao tiếp với nhau, dù là ngôn ngữ âm thanh, ngôn ngữ
ký hiệu, ký hiệu xúc giác hay chữ viết [1]. Hiểu một cách đơn giản, ngôn ngữ tự nhiên
(Natural Language) là ngôn ngữ con người dùng để giao tiếp với nhau như tiếng Việt,
tiếng Anh, tiếng Pháp, … và khác với ngôn ngữ nhân tạo (Artificial Language) như
ngôn ngữ máy tính (Pascal, C, Python, …) hay mã Morse, Braille, ….
Theo thống kê, có khoảng 5600 ngôn ngữ trên thế giới, được phân bố rất không
đồng đều và chỉ có một số ít các ngôn ngữ là có chữ viết.

1.1.1.1. Đặc điểm


Các đặc điểm của ngôn ngữ tự nhiên [1]:
- Ngôn ngữ là một hiện tượng xã hội: không là hiện tượng tự nhiên, cá nhân,
sinh vật (di truyền), và là hiện tượng xã hội đặc biệt.
- Ngôn ngữ là phương tiện giao tiếp quan trọng nhất của con người: các phương
tiện khác được diễn giải qua ngôn ngữ.
- Ngôn ngữ là một hệ thống tín hiệu đặc biệt.

1.1.1.2. Phân loại


Các ngôn ngữ được phân loại dựa trên nhiều tiêu chí khác nhau [1]:
- Phân loại ngôn ngữ theo nguồn gốc lịch sử:
o Ấn Âu: dòng Ấn Độ, Iran, Bantic, Slave, Roman, Hy Lạp, German
(gồm: Đức, Anh, Hà Lan, ...).
o Sê-mít: dòng Sê mít, Ai cập, Kusit, Becbe, …
o Thổ: ngôn ngữ Thổ Nhĩ Kỳ, …
o Hán – Tạng: dòng Hán, Tạng – Miến, …
13

o Nam Phương: dòng Nam – Thái, Nam Á. Trong dòng Nam Á có các
ngành: Nahali, Munda, Nicoba và Môn-Khmer. Trong ngành Môn –
Khmer có nhóm Việt – Mường, và trong nhóm này có ngôn ngữ tiếng
Việt.
- Phân loại ngôn ngữ theo trật tự từ:
Ví dụ: Tôi (S) đi (V) học (O)
o SVO: chiếm 32.4 - 41.8%, như: tiếng Anh, Pháp, Việt, …
o SOV: chiếm 41 - 51.8%, như: tiếng Nhật, ….
o VOS: chiếm 9 - 18%
o VSO: chiếm 2 - 3%
o OSV: chiếm cỡ 1%
o OVS: chiếm cỡ 1%
- Phân loại ngôn ngữ theo loại hình: được nhiều người sử dụng nhất.
Phân loại các ngôn ngữ theo quan hệ loại hình là cách phân loại ngôn ngữ theo
cấu trúc và chức năng của chúng. Kết quả phân loại cho ta những loại hình ngôn
ngữ. Loại hình ngôn ngữ không phải là một ngôn ngữ cụ thể nào, cũng không phải là
một tổng hoặc một tập các ngôn ngữ. Loại hình ngôn ngữ là tổng thể của những đặc
điểm hoặc thuộc tính về cấu trúc và chức năng vốn có của các ngôn ngữ thuộc nhóm
đó, phân biệt nhóm đó với các nhóm ngôn ngữ khác. Trong mỗi ngôn ngữ có thể thấy
ba nhóm thuộc tính: thuộc tính phổ quát, tức là thuộc tính chung, vốn có đối với tất
cả các ngôn ngữ thế giới; thuộc tính riêng biệt là thuộc tính chỉ có ở ngôn ngữ đó;
thuộc tính loại hình là thuộc tính đặc trưng cho từng nhóm ngôn ngữ nhất định. Thuộc
tính loại hình được dùng làm tiêu chuẩn để quy định vị trí của một ngôn ngữ nào đó
trong khi phân loại [2].
Nếu phương pháp so sánh – lịch sử hướng vào sự phát triển lịch sử của các
ngôn ngữ thân thuộc thì phương pháp so sánh – loại hình lại hướng vào hiện tại, vào
hoạt động của kết cấu ngôn ngữ. Nhiệm vụ trung tâm của phương pháp so sánh này
là tìm hiểu những cái giống nhau và khác nhau trong kết cấu của hai hoặc nhiều ngôn
ngữ. Khi so sánh, người ta có thể xuất phát từ các mặt khác nhau của ngôn ngữ như
14

ngữ âm, từ vựng và ngữ pháp. Nhưng sự so sánh các cấu trúc ngữ pháp có ý nghĩa to
lớn nhất, bởi vì cấu trúc ngữ pháp và vốn từ cơ bản là cơ sở của các ngôn ngữ, tạo
nên tính riêng biệt của chúng. Ngữ pháp lại bao gồm từ pháp và cú pháp. Những đặc
điểm về cú pháp không bao giờ biểu hiện một cách độc lập với những đặc điểm về từ
pháp. Cho nên trong so sánh loại hình, cấu trúc từ pháp có tầm quan trọng đặc biệt.
Bằng cách so sánh như vậy, người ta có thể rút ra đâu là những thuộc tính phổ quát
(còn được gọi là những phổ niệm ngôn ngữ), đâu là những thuộc tính riêng biệt và
đâu là những thuộc tính loại hình. Căn cứ vào những thuộc tính loại hình người ta
chia các ngôn ngữ thế giới thành các nhóm loại hình khác nhau [3]:
Ngôn ngữ hòa kết (flexional):
- Loại hình này còn được gọi là ngôn ngữ hoà kết, ngôn ngữ hình thức, ngôn
ngữ hữu cơ. Đặc điểm của loại hình này là: quan hệ ngữ pháp được diễn đạt
ở ngay trong bản thân từ nhờ từ có biến hình ở trong câu nói. Trong từ – một
trong những đơn vị cơ bản nhất của ngôn ngữ loại hình này – có sự đối lập
giữa căn tố với phụ tố: căn tố và phụ tố (nói chung là các hình vị trong từ) kết
hợp chặt chẽ với nhau, hoà làm một khối: giữa phụ tố và các ý nghĩa mà
chúng diễn đạt không có một sự tương ứng đơn giản kiểu một đối một (một
phụ tố – một ý nghĩa).
- Loại hình này bao gồm các ngôn ngữ: Đức, Latin, Hi Lạp, Anh, Nga, …
Ngôn ngữ chắp dính (agglutinate):
- Đặc điểm của loại hình này là quan hệ ngữ pháp cũng diễn đạt bên trong từ,
trong từ cũng có sự đối lập rõ rệt giữa căn tố và phụ tố; nhưng căn tố ít biến
đổi và có thể tách ra dùng độc lập thành từ; còn phụ tố thì kết hợp một cách
cơ giới với căn tố, mỗi phụ tố thường diễn đạt một ý nghĩa nhất định (quan
hệ 1 - 1).

- Loại hình khuất chiết và loại hình chắp dính là hai loại hình đã được xác định
từ lâu, ngay từ khi hướng loại hình học mới bắt đầu được hình thành. Hiện
nay cũng không có ai nghi ngờ về sự tồn tại của hai loại hình này và cũng
không có ai phản bác gì về những ngôn ngữ đã được quy vào hai loại hình
15

này. Từ trước đến nay ai ai cùng đều nhất trí rằng các ngôn ngữ Ấn – Âu (như
tiếng Phạn, tiếng Hi Lạp cổ, tiếng Latin, các tiếng Xlavơ (Slavic languages),
các tiếng Giecmanh (Germanic languages), các ngôn ngữ tiếng Semitic (như
tiếng Do Thái cổ, tiếng Ả – Rập) đều thuộc loại hình khuất chiết. Hầu hết các
dòng trên đây đều thuộc kiểu ngôn ngữ tổng hợp. Thuộc kiểu phân tích,
thường người ta chỉ dẫn tiếng Anh hiện đại làm ví dụ. Riêng một đôi nhà
nghiên cứu thì cũng nhập luôn cả tiếng Pháp vào kiểu phân tích ở trong nội
hạt loại hình khuất chiết.

- Còn đối với loại hình chắp dính thì người ta thường nhất trí cho rằng ví dụ
điển hình nhất là các ngôn ngữ Thổ Nhĩ Kì, các ngôn ngữ Uran – Antai và
một số ngôn ngữ châu Phi kiểu như ngôn ngữ Băngtu, Mông Cổ, Nhật Bản,
Triều Tiên.
Ngôn ngữ đơn lập (isolate):
- Những ngôn ngữ thuộc loại hình này còn được gọi là các ngôn ngữ không có
hình thái, ngôn ngữ không biến hình, ngôn ngữ đơn lập hai ngôn ngữ phân
tiết.
- Ở loại hình này, quan hệ ngữ pháp chỉ được diễn đạt bằng trật tự trước sau
của từ và/hoặc bằng các hư từ. Ở loại hình này, từ không có hiện tượng biến
hình. Trong một số ngôn ngữ thuộc loại hình này, đơn vị cơ bản là hình tiết:
đây là một đơn vị có nghĩa, có vỏ ngữ âm thường trùng với âm tiết, có khả
năng vừa dùng như từ vừa dùng như hình vị. Ở loại hình này, người ta thường
hay nói đến vấn đề khó xác định ranh giới từ, vấn đề khó phân biệt các yếu
tố hư với yếu tố thực cũng như vấn đề mặt cấu tạo từ ít phát triển.
- Loại hình đơn lập được xác định ở sau hai loại hình khuất chiết và chắp dính.
Người ta biết đến loại hình này sau khi tiếp xúc với văn ngôn Trung Quốc.
Trong cách định nghĩa loại hình hiện nay đang còn có chỗ khác nhau, nhưng
trong việc quy ngôn ngữ nào vào loại hình này thì người ta lại tương đối thống
nhất. Từ trước đến nay bao giờ tiếng Hán cũng được quy vào loại hình này,
đặc biệt là Hán cổ đại. Ngoài tiếng Hán, người ta còn kể đến các ngôn ngữ
16

thuộc khu vực Đông Nam Á như tiếng Việt, ngôn ngữ Aranta ở châu Úc và
các ngôn ngữ Eve, Ioruba ở châu Phi.
- Điểm thường gây tranh luận nhiều nhất ở loại hình này là việc quy các ngôn
ngữ vào các kiểu nhỏ: chẳng hạn, đứng trước tiếng Việt hiện đại, có người
đem nó xếp cùng tiếng Hán cổ đại và coi là ngôn ngữ căn tố; có người lại coi
nó là ngôn ngữ có thân từ.
Ngôn ngữ đa tổng hợp (polysynthetic):
- Đặc điểm của các ngôn ngữ hỗn nhập là một từ có thể tương ứng với một câu
trong các ngôn ngữ khác. Nghĩa là đối tượng hành động, trạng thái hành động
không được thể hiện bằng các thành phần câu đặc biệt (tân ngữ, trạng ngữ,
định ngữ, ...) như ở các ngôn ngữ khác, mà được thể hiện bằng các phụ tố
khác nhau trong hình thái động từ. Đôi khi chủ ngữ cũng nằm trong vị ngữ
động từ. Thí dụ: trong tiếng Tschinuk ở Bắc Mĩ, tương ứng với câu "Tôi đã
đến để cho cô cái này" là từ i-n-i-a-l-u-d-am, trong đó, gốc của động từ "cho"
chỉ đại diện bằng một phụ âm -d-, tiền tố -i- (ở đầu) biểu hiện thời quá khứ, -
n- biểu hiện ngôi thứ nhất, số ít; -i- thứ hai biểu hiện tân ngữ giới từ (cái
này), -a- biểu hiện tân ngữ giới từ (cô), -l- cho biết tân ngữ giới từ trên (cô)
không phải là trực tiếp mà là gián tiếp, -u- chỉ ra rằng hành động xảy ra từ
người nói (tức là người nói cho ai cái gì đó chứ không phải là nhận cái gì đó
của ai), phụ tố -am cuối cùng biểu hiện khái niệm về sự chuyển động có mục
đích, tức là chỉ ra rằng người nói không cho ai cái gì đó một cách đơn giản
mà đã đến với mục đích nhất định.
- Trong ví dụ trên, hình thái động từ chỉ chứa đựng tân ngữ là đại từ. Nhưng,
ở một số ngôn ngữ, hình thái động từ bao gồm cả danh từ. Trong trường hợp
này, danh từ bị rút gọn. Thí dụ: trong tiếng Louravetlan, từ t-y-k, aa-nmy-
rkyn có nghĩa là "Tôi giết con thú chạy". Ở đây, nmy là gốc của động từ
"giết"; rkyn là phụ tố chỉ thời hiện tại: t- là tiền tố chỉ ngôi thứ nhất số ít; -
kaa là hình thức rút gọn của danh từ k, oran (g) y "con thú chạy"; và -y- là
nguyên âm được phát triển về mặt ngữ âm, liên hệ các phần ý nghĩa khác
17

nhau của từ. Chính đặc điểm các bộ phận tương ứng với các thành phần câu
khác nhau được chứa đựng trong một từ mà người ta gọi là các ngôn ngữ trên
là "hỗn nhập" hay "đa tổng hợp".
- Cần nhớ rằng, trong các ngôn ngữ hỗn nhập, bên cạnh các hình thái hỗn nhập
còn có cả các hình thái độc lập. Cùng một mối quan hệ có thể vừa được diễn
đạt bằng một hình thái động từ trọn vẹn (hỗn nhập) vừa được diễn đạt bằng
những thành phần câu độc lập. Chính vì vậy những ý kiến cho rằng trong các
ngôn ngữ hỗn nhập không có các từ tách rời mà chỉ có từ – câu là không đúng.
- Một số nhà ngôn ngữ học cho rằng, việc tách ra các ngôn ngữ hỗn nhập là
dựa vào những đặc điểm về cú pháp, cho nên phải đặt nó dưới sự phân chia
theo nguyên tắc cú pháp cùng với các ngôn ngữ phân tích và tổng hợp. Tuy
nhiên, về mặt hình thái học, các ngôn ngữ hỗn nhập cũng thể hiện những cấu
trúc hình thái riêng. Ở các ngôn ngữ này, các hình vị liên kết với nhau theo
nguyên tắc dính. Nhưng trong các ngôn ngữ hỗn nhập có cả hiện tượng
chuyển dạng nội bộ nữa. Do đó, xét về mặt cấu trúc của các hình vị và mối
liên hệ của chúng thì các ngôn ngữ hỗn nhập vừa có những đặc điểm của các
ngôn ngữ chắp dính vừa có đặc điểm của các ngôn ngữ chuyển dạng.
- Các ngôn ngữ Ấn ở Nam Mĩ và đông nam Xibêri, ... là các ngôn ngữ hỗn
nhập.

1.1.2. Ngôn ngữ tiếng Việt


Tiếng Việt thuộc ngôn ngữ đơn lập, tức là mỗi một tiếng (âm tiết) được phát âm
tách rời nhau và được thể hiện bằng một chữ viết. Đặc điểm này thể hiện rõ rệt ở tất
cả các mặt ngữ âm, từ vựng, ngữ pháp.

1.1.2.1. Đặc điểm ngữ âm


Trong tiếng Việt có một loại đơn vị đặc biệt gọi là ‘tiếng’. Về mặt ngữ âm, mỗi
tiếng là một âm tiết. Hệ thống âm vị tiếng Việt phong phú và có tính cân đối, tạo ra
tiềm năng của ngữ âm tiếng Việt trong việc thể hiện các đơn vị có nghĩa. Nhiều từ
18

tượng hình, tượng thanh có giá trị gợi tả đặc sắc. Khi tạo câu, tạo lời, người Việt rất
chú ý đến sự hài hoà về ngữ âm, đến nhạc điệu của câu văn [3].

1.1.2.2. Đặc điểm từ vựng


Mỗi tiếng, nói chung, là một yếu tố có nghĩa. Tiếng là đơn vị cơ sở của hệ thống
các đơn vị có nghĩa của tiếng Việt. Từ tiếng, người ta tạo ra các đơn vị từ vựng khác
để định danh sự vật, hiện tượng, … chủ yếu nhờ phương thức ghép và phương thức
láy.
Việc tạo ra các đơn vị từ vựng ở phương thức ghép luôn chịu sự chi phối của quy
luật kết hợp ngữ nghĩa, ví dụ: đất nước, máy bay, nhà lầu xe hơi, nhà tan cửa nát,
… Hiện nay, đây là phương thức chủ yếu để sản sinh ra các đơn vị từ vựng. Theo
phương thức này, tiếng Việt triệt để sử dụng các yếu tố cấu tạo từ thuần Việt hay vay
mượn từ các ngôn ngữ khác để tạo ra các từ, ngữ mới, ví dụ: tiếp thị, karaoke, thư
điện tử (e-mail), thư thoại (voice mail), phiên bản (version), xa lộ thông tin, siêu liên
kết văn bản, truy cập ngẫu nhiên, ....
Việc tạo ra các đơn vị từ vựng ở phương thức láy thì quy luật phối hợp ngữ âm
chi phối chủ yếu việc tạo ra các đơn vị từ vựng, chẳng hạn: chôm chỉa, chỏng
chơ, đỏng đa đỏng đảnh, thơ thẩn, lúng lá lúng liếng, ....
Vốn từ vựng tối thiểu của tiếng Việt phần lớn là các từ đơn tiết (một âm tiết, một
tiếng). Sự linh hoạt trong sử dụng, việc tạo ra các từ ngữ mới một cách dễ dàng đã
tạo điều kiện thuận lợi cho sự phát triển vốn từ, vừa phong phú về số lượng, vừa đa
dạng trong hoạt động. Cùng một sự vật, hiện tượng, một hoạt động hay một đặc trưng,
có thể có nhiều từ ngữ khác nhau biểu thị. Tiềm năng của vốn từ ngữ tiếng Việt được
phát huy cao độ trong các phong cách chức năng ngôn ngữ, đặc biệt là trong phong
cách ngôn ngữ nghệ thuật. Hiện nay, do sự phát triển vượt bậc của khoa học – kĩ
thuật, đặc biệt là công nghệ thông tin, thì tiềm năng đó còn được phát huy mạnh mẽ
hơn [3].
19

1.1.2.3. Đặc điểm ngữ pháp


Từ của tiếng Việt không biến đổi hình thái. Đặc điểm này sẽ chi phối các đặc
điểm ngữ pháp khác. Khi từ kết hợp từ thành các kết cấu như ngữ, câu, tiếng Việt rất
coi trọng phương thức trật tự từ và hư từ [3].
Việc sắp xếp các từ theo một trật tự nhất định là cách chủ yếu để biểu thị các
quan hệ cú pháp. Trong tiếng Việt khi nói “Anh ta lại đến” là khác với “Lại đến anh
ta“. Khi các từ cùng loại kết hợp với nhau theo quan hệ chính phụ thì từ đứng trước
giữ vai trò chính, từ đứng sau giữ vai trò phụ. Nhờ trật tự kết hợp của từ mà “củ cải”
khác với “cải củ“, “tình cảm” khác với “cảm tình“. Trật tự chủ ngữ đứng trước, vị
ngữ đứng sau là trật tự phổ biến của kết cấu câu tiếng Việt.
Phương thức hư từ cũng là phương thức ngữ pháp chủ yếu của tiếng Việt. Nhờ
hư từ mà tổ hợp “anh của em” khác với tổ hợp “anh và em“, “anh vì em“. Hư từ cùng
với trật tự từ cho phép tiếng Việt tạo ra nhiều câu cùng có nội dung thông báo cơ bản
như nhau nhưng khác nhau về sắc thái biểu cảm. Ví dụ, so sánh các câu sau đây:
– Ông ấy không hút thuốc.
– Thuốc, ông ấy không hút.
– Thuốc, ông ấy cũng không hút.
Ngoài trật tự từ và hư từ, tiếng Việt còn sử dụng phương thức ngữ điệu. Ngữ điệu
giữ vai trò trong việc biểu hiện quan hệ cú pháp của các yếu tố trong câu, nhờ đó
nhằm đưa ra nội dung muốn thông báo. Trên văn bản, ngữ điệu thường được biểu
hiện bằng dấu câu. Chúng ta thử so sánh 2 câu sau để thấy sự khác nhau trong nội
dung thông báo:
– Đêm hôm qua, cầu gãy.
– Đêm hôm, qua cầu gãy.

1.1.2.4. So sánh với tiếng Anh


Tiếng Anh là ngôn ngữ phổ biến nhất thế giới với trên một phần tư dân số thế
giới sử dụng ngôn ngữ này (khoảng 400 triệu người bản ngữ và 1 – 1,6 triệu người
khác từ khắp nơi). Tiếng Anh là ngôn ngữ được hơn 60% các chương trình radio sử
20

dụng. Hơn 70% thư tín quốc tế được viết bằng tiếng Anh, và 80% các tài liệu và văn
bản về vi tính được lưu trữ bằng tiếng Anh. Tiếng Anh cũng là ngôn ngữ có nhiều từ
vựng nhất trên thế giới, với khoảng 2 triệu từ và cũng là một trong những nền văn
học vĩ đại nhất trong biên niên sử của loài người. Nên cũng không có gì lạ nếu các
nghiên cứu khoa cũng như các tài liệu đa phần là dùng tiếng Anh. Để hiểu rõ hơn về
những thuận lợi và khó khăn khi sử dụng 2 loại ngôn ngữ này, phía dưới là bảng so
sánh sự khác nhau giữa tiếng Việt và tiếng Anh.
Bảng 1.1. So sánh sự khác biệt giữa tiếng Việt và tiếng Anh
Tiếng Việt Tiếng Anh

Dấu thanh Có thanh, có dấu. Không có dấu thanh.


Khi thay đổi dấu sẽ thành từ Khi nói thì các từ tiếng Anh có
khác. trọng âm.
Vần câu Không có từ nhiều vần, Một từ có nhiều vần hoặc 1 vần.
thường chỉ có 1 vần.
Nguyên âm Gồm 12 nguyên âm đơn: a, ă, Bao gồm 5 nguyên âm đơn: a, o, i,
â, e, ê, i, o, ô, ơ, u, ư, y. e, u.
Phụ âm Các âm còn lại: b, c, d, đ, g, h, Các âm còn lại: b, c, d, f, g, h, j, k,
k, l, m, n, p, q, r, s, t, v, x. l, m, n, p, q, r, s, t, v, w, x, y, z.
Cách đọc Một chữ cái chỉ có một cách Cùng một chữ cái nhưng có nhiều
đọc. cách đọc trong một từ.
Có thể đánh vần từng ký tự Không thể (viết một đàng, phát âm
phát âm thành từ. một nẽo), nếu gặp từ mới, phải đọc
Cách đánh vần theo người dạy hoặc tra từ điển
(tuyệt đối không tự đánh vần như
tiếng Việt).
Cách phát âm Không phát âm phụ âm cuối. Phát âm phụ âm cuối.

So sánh cách Viết (Tiếng Việt) = Đọc Viết (English) # Đọc (’ ɪŋɡlɪʃ)
đọc và cách viết (Tiếng Việt)
21

Chủ yếu là dùng thì hiện tại Có 12 thì 3 thì đơn, 3 thì kép, 3 thì
còn quá khứ và tương lai chỉ tiếp diễn đơn, 3 thì tiếp diễn kép,
cần thêm “đã” hoặc “sẽ” và qui tắc rất là nhiêu khê, khó nhớ.
tiếp diễn thì thêm “đang” là Do ảnh hưởng tiếng mẹ đẻ, người
Ngữ pháp xong. Việt có khuynh hướng chỉ dùng
toàn thì hiện tại trong tiếng Anh.
Không chia động từ theo ngôi Thì động từ biến dạng theo ngôi,
và số, danh từ ít nhiều gì cũng danh từ biến theo số.
Cách chia động chỉ một dạng ,VD: anh “đi”, VD: I “go”, you “go”, but he “goes”;
từ tôi “đi”, hắn cũng “đi”; một one “bottle”, but two “bottles”
“chai”, hai cũng “chai”
Có cao độ cao hơn, đọc/nói Cao độ thấp hơn, đọc/nói theo cụm
Nhịp điệu theo từng từ, nhịp điệu lên từ, có nhịp điệu lên xuống theo
xuống theo thanh điệu (dấu ngữ cảnh.
thanh).
Là ngôn ngữ đơn âm; khi nói, Là ngôn ngữ đa âm; khi nói, đưa
không đưa hơi lên mũi. hơi lên mũi.
Khi phát âm, đầu lưỡi thường Khi phát âm, đầu lưỡi chuyển
ở khoảng giữa khoang miệng. động và chạm vào nhiều nơi trong
Sau khi phát âm, luồng hơi từ khoang miệng.
phổi bị giữ lại trong khoang Sau khi phát âm, luồng hơi từ phổi
Khẩu hình miệng và thoát ra ngoài rất ít. di chuyển đến khoang miệng và
miệng Đóng khẩu hình miệng khi kết thoát ra ngoài khá nhiều.
thúc một từ. Thường không đóng khẩu hình
miệng mà đọc nối tiếp với từ tiếp
theo (Điều này khiến khó nghe và
đọc).
22

Qua một số đặc điểm nổi bật vừa nêu trên đây, chúng ta có thể hình dung được
phần nào bản sắc và tiềm năng của tiếng Việt. Tuy nhiên, điều đó cũng đồng nghĩa
với việc tiếng Việt là một ngôn ngữ rất khó xử lý. Để máy tính có thể hiểu được,
chúng ta cần phải thực hiện rất nhiều công đoạn. Cụ thể chúng tôi sẽ nêu rõ ở phần
sau.

1.1.3. Xử lý ngôn ngữ tự nhiên

1.1.3.1. Khái niệm


Xử lý ngôn ngữ là một phạm trù trong xử lý thông tin với đầu vào là dữ liệu ngôn
ngữ, hay nói cách khác, đó là văn bản hoặc tiếng nói, Các dữ liệu này đang trở thành
kiểu dữ liệu chính của con người, và lưu dưới dạng điện tử. Đặc điểm chung của
chúng là không có cấu trúc (non-structured ), hoặc nửa câu trúc (semi-structured) và
không thể lưu lại dưới dạng bảng biểu. Vì vậy chúng ta cần phải xử lý chúng để có
thể chuyển từ dạng chưa hiểu thành dạng có thể hiểu.
Xử lý ngôn ngữ tự nhiên – XLNNTN (Natural Language Processing – NLP) là
lĩnh vực Khoa học máy tính kết hợp giữa Trí tuệ nhân tạo & Ngôn ngữ học tính toán
nhằm tập trung xử lý tương tác giữa con người và máy tính sao cho máy tính có thể
hiểu hay bắt chước được ngôn ngữ của con người.
Xử lý ngôn ngữ tự nhiên là hướng dẫn máy tính thực hiện và giúp đỡ con người
các công việc về ngôn ngữ như: dịch thuật, phân tích dữ liệu văn bản, nhận dạng tiếng
nói, tìm kiếm thông tin, tóm tắt văn bản [1].

1.1.3.2. Các bài toán thường gặp


Một số bài toán về xử lý ngôn ngữ tiêu biểu như [33]:
- Nhận dạng tiếng nói (Speech recognization): phổ biến trong các hệ thống trợ
lý ảo như Siri của Apple, Cortana của Microsoft, Google Assistant của
Google, Alexa của Amazon, ….
- Tổng hợp tiếng nói (Speech Synthesis): từ dữ liệu văn bản, phân tích và
chuyển thành tiếng nói. Hiện tại các hãng công nghệ lớn như IBM và Amazon
23

đều có dịch vụ Text to Speech (TTS) chất lượng tốt, có API để dùng trong
production, nhưng không hỗ trợ tiếng Việt. Ở Việt Nam cũng có một số
trường đại học, nhóm nghiên cứu đưa ra dịch vụ TTS như VAIS
(https://app.vais.vn/), AILAB (http://ailab.hcmus.edu.vn/vosdemo) và nổi
bật nhất là FPT Speech Systhesis (FSS) với nhiều tính năng, nhiều giọng đọc
và API mở cho cộng đồng.
- Nhận dạng ký tự quang học (Optical Character Recognition): từ một văn bản
in trên giấy hoặc các banner có thể chuyển thành một tệp văn bản lưu trên
máy tính. Với tiếng Việt, phần mềm nhận dạng chữ Việt in VnDOCR 4.0 có
khả năng nhận dạng trực tiếp các loại tài liệu được quét qua máy quét, không
cần lưu trữ dưới dạng tệp ảnh trung gian, phục vụ rất tốt cho nhu cầu số hóa
dữ liệu. Vào tháng 4 năm 2009, ABBYY – một hãng công nghệ hàng đầu
trên thế giới về lĩnh vực OCR đã tiến hành nghiên cứu và triển khai công
nghệ nhận dạng tiếng Việt. Với công nghệ này độ chính xác trong việc nhận
dạng tài liệu chữ in tiếng Việt lên tới hơn 99%.
- Dịch tự động (Machine Translation): Một công cụ phổ biến hiện nay là
Google Translate, ngoài ra còn có thể kể đến các công cụ thuần Việt khác
như Lạc Việt, Vdict, Baamboo, Evtran, ….
- Tóm tắt văn bản (Text Summarization): từ một văn bản dài, máy tóm tắt thành
một văn bản ngắn hơn với các nội dung chính cơ bản. Đây là một hướng đi
đang phát triển rất nhiều ở Việt Nam.
- Tìm kiếm và truy xuất thông tin (Information Retrieval): từ một nguồn có rất
nhiều tệp thông tin, tìm ra những tệp có liên quan đến câu hỏi cần tìm. Tiêu
biểu như Google Search, Yahoo Search, Bing, … hay một công cụ thuần Việt
là Tìm kiếm Cốc Cốc.
- Rút trích thông tin văn bản (Information Extraction): tìm ra những đoạn bên
trong của một tệp thông tin chứa nội dung ta cần biết.
- Khai phá dữ liệu (Data Mining): là quá trình tìm kiếm các mẫu từ tập dữ liệu
lớn (Data Set) và phân tích dữ liệu từ những quan điểm khác nhau. Nó cho
24

phép người dùng trong doanh nghiệp dùng để phân tích dữ liệu từ nhiều góc
độ khác nhau và tóm tắt các mối quan hệ xác định (relationship). Data Mining
rất hữu ích trong việc tăng doanh thu và cắt giảm chi phí. Đây là một hướng
đi rất tiềm năng ở Việt Nam.
Các bài toán trên có thể phân thành 3 loại sau:
- Xử lý tiếng nói và xử lý ảnh.
- Xử lý văn bản.
- Khai phá văn bản Web.
Đối với các bài toán về xử lý văn bản, chúng ta cần xử lý theo các tầng cơ bản
sau:
- Tầng ngữ âm (Phonetic and Phonological Layer): nghiên cứu về ngữ âm, mô
hình hóa các từ, cách phát âm, thanh điệu, ngữ điệu, trường độ âm tiết, độ
nhấn, biến thanh, ....
- Tầng hình thái (Morphological Layer): nghiên cứu về thành phần có nghĩa
của từ, cấu tạo của từ, hay nó được tách ra trong một câu như thế nào. VD
đối với bài toán Word Segmentation trong tiếng Việt, bạn có thể thấy một ví
dụ quen thuộc "Ông già đi nhanh quá", và bạn có thể hiểu theo 2 nghĩa: (Ông
già) (đi) (nhanh quá) hoặc (Ông) (già đi) (nhanh quá). Điều này có thể dẫn
đến nhập nhằng ngữ nghĩa, và làm ảnh hưởng rất lớn đến quá trình dạy máy
hiểu được ngôn ngữ con người.
- Tầng ngữ pháp (Syntactic Layer): nghiên cứu về các quan hệ cấu trúc giữa
các từ trong câu để tạo ra câu đúng. Các bài toán giải quyết tầng này như:
o Part Of Speach tagging: Xác định loại từ trong câu như danh từ, động
từ, giới từ, trợ từ, ….
o Chungking: Xác định cụm từ như cụm danh từ, cụm động từ, cụm
trạng từ, …. VD "học sinh" là cụm danh từ, "học" là cụm động từ,
"sinh học" là cụm trạng từ.
o Parsing: Phân tích cú pháp. VD (Học sinh) (học) (sinh học) là quan hệ
chủ ngữ – vị ngữ. Một số loại parsing bạn có thể tham khảo như: phân
25

tích cú pháp từ trên xuống (Top - Down Parsing), phân tích cú pháp
dự đoán (Predictive Parsing), ….
- Tầng ngữ nghĩa (Semantic Layer): nghiên cứu xác định nghĩa của từ và tổ
hợp của chúng. VD với từ "đi" người ta có hiểu "đi" là động tác "bước đi"
hoặc "đi" cũng có thể là "qua đời". Do đó để hiểu được ý nghĩa của từ, chúng
ta cần đặt nó trong ngữ cảnh của câu văn.
- Tầng ngữ dụng (Pragmatic layer): nghiên cứu mối quan hệ giữa ngôn ngữ và
ngữ cảnh sử dụng ngôn ngữ.
Trong một bài toán về xử lý ngôn ngữ, khi phân tích ở các tầng ngữ âm (1) đến
các tầng ngữ pháp (3) chúng ta gọi là phân tích sơ bộ (shallow parsing), thường được
áp dụng trong các bài toán như tìm kiếm thông tin, phân tích văn bản cho tổng hợp
tiếng nói, …. Tuy nhiên với một số bài toán đi sâu vào ngữ nghĩa như dịch tự động,
thì việc phân tích sơ bộ là chưa đủ, Khi đó, ít nhất chúng ta phải thực hiện đến tầng
ngữ nghĩa (4) ta sẽ có phân tích đầy đủ (fully parsing).

1.1.3.3. Các bước xử lý


Tương ứng với các tầng cơ bản trên, chúng ta cũng có các bước xử lý dựa trên
các tầng cơ bản đó.
Phân tích hình thái: Trong bước này từng từ sẽ được phân tích và các ký tự không
phải chữ (như các dấu câu) sẽ được tách ra khỏi các từ. Trong tiếng Anh và nhiều
ngôn ngữ khác, các từ được phân tách với nhau bằng dấu cách. Tuy nhiên trong Tiếng
Việt, dấu cách được dùng để phân tách các tiếng (âm tiết) chứ không phải từ. Cùng
với các ngôn ngữ như tiếng Trung, tiếng Hàn, tiếng Nhật, phân tách từ trong tiếng
Việt là một công việc không hề đơn giản.
Phân tích cú pháp: Dãy các từ sẽ được biến đổi thành các cấu trúc thể hiện sự
liên kết giữa các từ này. Sẽ có những dãy từ bị loại do vi phạm các luật văn phạm.
Phân tích ngữ nghĩa: Thêm ngữ nghĩa vào các cấu trúc được tạo ra bởi bộ phân
tích cú pháp.
26

Tích hợp văn bản: Ngữ nghĩa của một câu riêng biệt có thể phụ thuộc vào những
câu đứng trước, đồng thời nó cũng có thể ảnh hưởng đến các câu phía sau.
Phân tích thực nghĩa: Cấu trúc thể hiện điều được phát ngôn sẽ được thông dịch
lại để xác định nó thật sự có nghĩa là gì.
Tuy nhiên, ranh giới giữa 5 bước xử lý này cũng rất mong manh. Chúng có thể
được tiến hành từng bước một, hoặc tiến hành cùng lúc - tùy thuộc vào giải thuật và
ngữ cảnh cụ thể [1].

1.1.3.4. Thuật ngữ


Ambiguity – nhập nhằng (ở nhiều cấp độ: lexical – từ vựng, morphological –
hình vị, syntactic – cú pháp, semantic – ngữ nghĩa, domain – lĩnh vực). Ví dụ nhập
nhằng từ “đậu” đại diện cho một hành động hay “đậu” đại diện cho một loài thực
vật trong câu “Con ruồi đậu mâm xôi đậu”.
Anaphora – khử nhập nhằng thế đại từ. Ví dụ “The monkey ate the banana
because it was hungry”. Đại từ “it” thay thế cho monkey hay banana.
Bag of Words – mô hình thường dùng trong các tác vụ phân lớp văn bản (Text
Classification). Thông tin sẽ được biểu diễn thành tập các từ đi kèm với tần suất xuất
hiện của mỗi từ này trong văn bản. Bag of Words được dùng như feature để huấn
luyện cho classifier.
Corpus/Corpora – “ngữ liệu” là những “dữ liệu, cứ liệu của ngôn ngữ”, tức là
những chứng cứ thực tế sử dụng ngôn ngữ, được dùng để kiểm chứng các quy luật
của ngôn ngữ trong quá trình phân tích thống kê hay kiểm định giả thuyết thống kê
của các mô hình dự đoán. Có nhiều loại Corpora như bilingual parallel corpora (ngữ
liệu song ngữ) hay parallel corpora (ngữ liệu song song), ….
Explicit Semantic Analysis (ESA) - là tiến trình giúp máy hiểu được ý nghĩa của
văn bản, được sử dụng trong Information Retrieval, Document Classification,
Semantic Relatedness calculation (độ tương tự về nghĩa giữa các từ hay văn bản).
27

Information Extraction – là tiến trình rút trích ra các thông tin có cấu trúc một
cách tự động từ các nguồn dữ liệu không cấu trúc hay bán cấu trúc (unstructured/semi-
structure) ví dụ như các tài liệu văn bản hay các trang web.

Hình 1.1. Information Extraction


Latent Dirichlet Allocation (LDA) – kĩ thuật Topic Modeling thường dùng, ý
tưởng của LDA dựa trên nguyên lý mỗi topic là phân bố của các từ, mỗi văn bản là
sự trộn lẫn giữa nhiều topic, và mỗi từ phân bố vào một trong những topic này.
Latent Semantic Analysis (LSA) - tiến trình phân tích quan hệ giữa các văn bản
và các từ. Đầu ra là mối liên quan giữa các khái niệm, văn bản, và các từ. LSA giả sử
các từ gần nhau về mặt ý nghĩa sẽ xuất hiện trong các văn bản tương tự.

Hình 1.2. Latent Semantic Analysis


Morphological analysis (Phân tích hình thái):
- Phân tích phụ tố (affix): ví dụ anti-comput-er-iza-tion.
- Xử lý từ ghép (compound word): ví dụ carry out, out of sight, out of mind.
- Xử lý các trường hợp tỉnh lược (ellipsis): I’m, o’clock, Dr.
28

- Nhận diện tên riêng như John, Bush, IBM.


- Nhân diện ranh giới từ (word boundary): Tiếng Việt một từ có nhiều tiếng.
Ví dụ: chúm chím, tuổi tác, giáo viên, hiện đại hóa, …
Named Entity Recognition (NER) – là tiến trình xác định và phân loại các phần
tử trong văn bản vào các danh mục được định nghĩa trước như tên người, tên tổ chức,
địa điểm, giá trị tiền tệ, tỷ lệ phần trăm, ….

Hình 1.2. Named Entity Recognition


Parser (Phân tích ngữ pháp)
- Gán nhãn từ loại (Part Of Speech – POS tagging): một từ có nhiều từ loại như
Danh từ, Động từ, Tính từ, …
- Gán nhãn ranh giới ngữ: đâu là bắt đầu, kết thúc của các ngữ (phrase).
- Gán nhãn quan hệ ngữ pháp (grammatical relation).
- Gán nhãn cây cú pháp (parse tree).

Hình 1.3. Parse Tree


29

Pragmatics – phân tích ngữ dụng: từ “sentence” trong phân tích văn phạm có
nghĩa là câu, trong luật pháp có nghĩa là án tù. Do vậy, ta cần xem xét toàn bộ văn
bản để đưa ra ý nghĩa chính xác.
Pre-processing – tiền xử lý dữ liệu, xử lý sơ bộ văn bản: xóa bỏ những kí tự,
những mã điều khiển, những vùng không cần thiết cho hệ thống gồm: tách
đoạn/câu/từ (paragraph/sentence/word segmentation), làm sạch (cleaning), tích hợp
(integreation), chuyển đổi (transformation).

Hình 1.4. Pre-processing


Sentiment Analysis: sử dụng các kĩ thuật XLNNTN để rút trích thông tin chủ
quan của người dùng từ một câu nói hay một văn bản. Đây cũng là kĩ thuật khai thác
ý kiến người dùng xem họ đang có thái độ tích cực hay thái độ tiêu cực về sản phẩm
của công ty.

Hình 1.5. Sentiment Analysis


30

1.1.4. Xử lý ngôn ngữ tiếng Việt

1.1.4.1. Tình hình


Ở Việt Nam cũng đã có một số nhóm bắt đầu nghiên cứu về xử lý ngôn ngữ,
bước đầu đã có những kết quả nhất định như: các nhóm nghiên cứu đến từ các trường
đại học, đại học Bách Khoa, đại học Công Nghệ, đại học Khoa Học Tự Nhiên, Viện
Nghiên Cứu Công Nghệ Thông Tin, .... Nhóm Nghiên Cứu VLNP, bên ngoài Việt
Nam cũng có các nghiên cứu đến từ các nghiên cứu sinh Việt Nam tại JAIST. Phần
lớn các sản phẩm hiện nay đang tập trung vào lĩnh vực dịch máy, một sản phẩm khó,
và yêu cầu làm dài hạn. Ngoài ra còn có các bài toán phân loại chia nhóm văn bản,
.... Và đa phần chỉ dừng lại ở đề tài tiến sĩ, thạc sĩ, các bài báo nghiên cứu khoa học
mang tính chất tìm hiểu, chưa hệ thống và định hướng rõ ràng.

1.1.4.2. Khó khăn


Xử lý ngôn ngữ cũng đóng một vai trò quan trọng trong việc đẩy mạnh sự phát
triển của CNTT Việt Nam đến với thế giới. Tuy nhiên, ông ta ta xưa nay vẫn
nói: “Phong ba bão táp không bằng ngữ pháp Việt Nam”. Người Việt Nam đôi khi
còn gặp khó khăn khi sử dụng tiếng Việt, ấy thế mà, giờ chúng ta cần phải dạy cho
máy có thể dùng tiếng Việt như con người. Điều này quả thật rất khó khăn. Ngoài
những đặc điểm về ngôn ngữ tiếng Việt đã nêu ở phần 1.1.2, bản thân tiếng Việt cũng
đã là một ngôn ngữ phức tạp khiến cho việc xử lý gặp nhiều khó khăn với nhiều hiện
tượng:
- Tách từ
Ví dụ: “Ông già đi nhanh quá” có hai cách hiểu:
(1): Ông già/ đi/ nhanh quá.
(2): Ông/ già đi/ nhanh quá.
- Chơi chữ bằng các biện pháp như:
o Từ đồng âm:
Ví dụ: “Hổ mang bò lên núi” có hai cách hiểu:
(1) Con rắn hổ mang bò (trườn) lên núi.
31

(2) Con hổ (cọp) mang con bò lên núi.


o Đảo trật tự từ:
Ví dụ 1: “Đại học để học đại.”
Ví dụ 2: “Học trò là học trò con, tóc đỏ như son là con học trò
Tri huyện là tri huyện Thằng, ăn nói lăng nhăng là thằng tri huyện”
o Tách các thành tố của từ phức thành các tiếng, mỗi tiếng là một từ đơn
với ý nghĩa đã chuyển:
Ví dụ: “Hành chính thì hành là chính.”
o Nói lái:
Ví dụ 1: “Con cá đối nằm trên cối đá.”
Ví dụ 2: “Bí mật bị mất mới được bật mí.”
o …
- Teencode: Là một thuật ngữ chỉ kiểu chữ viết tắt của giới trẻ. Teencode xuất
hiện từ những những năm 2000, thời đại mà Internet bắt đầu phát triển cực
đại ở Việt Nam. Dạng ngôn ngữ này chủ yếu là dùng những từ viết tắt, chữ
cái thay thế và không có một trật tự hay quy luật nhất định, tất cả đều tùy
thuộc vào người viết.
Ví dụ 1: “c0n ch0’, m3o` v4` g4` ” có thể hiểu là “con chó, mèo và gà”
Ví dụ 2: “ wá wen thc” có thể hiểu là “quá quen thuộc”

Có thể thấy, sự nhập nhằng về ngữ nghĩa là một vấn đề cực kì nan giải trong
tiếng Việt. Vì thế, công đoạn tiền xử lý là cực kì quan trọng. Điều này sẽ được chúng
tôi nói rõ ở mục 2.2 Tiền xử lý văn bản.
Ngoài yếu tố khách quan do bản thân tiếng Việt, bên cạnh những thành quả ban
đầu thì các công trình nghiên cứu xử lý ngôn ngữ ở Việt Nam vẫn đang gặp rất nhiều
những khó khăn khác:
- Thường tập trung vào làm các sản phẩm cho người dùng cuối với nhiều kỳ
vọng vào các sản phẩm dịch máy, một loại sản phẩm khó làm và cần làm dài
hạn với những phương pháp hợp lý.
32

- Ít các nghiên cứu nền tảng, thiếu phát triển “hạ tầng cơ sở” cho xử lý ngôn
ngữ như công cụ và tài nguyên: từ điển (dùng cho máy), kho ngữ liệu, …
những thứ đã được cả cộng đồng quốc tế xác định là không thể thiếu trong
xử lý ngôn ngữ. Các bộ dữ liệu chưa hoàn chỉnh, không được công bố rộng
rãi hay thương mại hóa. Dữ liệu thường hay bị spam, sai chính tả, ngữ pháp
không rõ ràng.
- Phần đông là các nghiên cứu ngắn hạn và đơn lẻ ở mức đề tài thạc sỹ, tiến sỹ
với nhiều hạn chế về thời hạn và điều kiện. Đa số mới xây dựng được mô
hình, thử và kiểm tra trên những tập ngữ liệu nhỏ. Những kết quả đạt được ở
đây còn xa với mức sử dụng được trong thực tế.
- Rất có thể nhiều nhóm đã bắt đầu với sự khảo sát chưa đầy đủ, hoặc tiến hành
công việc khi có thể còn thiếu kiến thức. Do vấn đề mới và phức tạp, các hội
đồng đánh giá thẩm định các đề tài về xử lý ngôn ngữ còn chưa có chuyên
gia, chưa thật rõ hết cái có thể và cái chưa thể làm được, người làm đi đường
ngắn hay đường vòng, ….
- Đáng băn khoăn hơn cả là các nỗ lực của chúng ta chưa được liên kết, thiếu
chia sẻ, phân công, hợp tác theo một lộ trình có kế hoạch, thiếu “kim chỉ nam”
về xử lý tiếng Việt, và không có tính kế thừa về kết quả giữa các tầng của xử
lý ngôn ngữ tự nhiên. Nếu hình dung công việc trong các tầng của xử lý ngôn
ngữ được đánh số từ A đến Z, thì hầu hết các việc làm ra cho người dùng cuối
đều ở quãng từ R, S, … trở đi, mà muốn làm mấy việc này thì đều cần kết
quả của tất cả các bước từ A đến tận P, Q. Hiềm nỗi mỗi việc từ A, B, … đến
P, Q muốn làm tốt đều đòi hỏi một nhóm người làm trong một vài năm. Vì
vậy, nếu ai cũng phải làm từ A đến gì đấy tận P, Q, có lẽ sẽ không ai có thể
làm ra các sản phẩm R, S, ... Z đủ tốt.

1.2. Vector hóa dữ liệu


Để máy tính có thể hiểu được ngôn ngữ tự nhiên nói chung và ngôn ngữ tiếng
Việt nói riêng, sau khi tiến hành tiền xử lý dữ liệu thì chúng ta cần phải vector hóa
33

dữ liệu (Vectorization hay Vector Representation) để máy tính có thể hiểu được. Hiểu
một cách đơn giản, vector hóa dữ liệu là chuyển đổi dữ liệu từ các kí tự chữ cái thành
các vector trọng số. Hiện nay, có khá nhiều cách để ta vector hóa dữ liệu nhưng trong
nghiên cứu này, chúng tôi chọn phương pháp Doc2Vec. Lý do là, chúng tôi khảo sát
thấy rằng chưa có nghiên cứu nào khảo sát hiệu suất hoạt động của việc biểu diễn văn
bản thành vector thông qua Doc2Vec trong bài toán phân tích cảm xúc người dùng
trong ngôn ngữ tiếng Việt. Và để có thể hiểu hơn về Doc2Vec hơn, ta phải làm rõ các
khái niệm cơ bản hơn trong vector hóa dữ liệu.

1.2.1. Word Vector


Word Vector hay One-hot Vector (1-of-N) [7] là một vector có trọng số, biểu
diễn cho một từ với số chiều cụ thể và có toàn bộ giá trị là ‘0’ trừ tại một vị trí đặc
biệt nào đó thì giá trị sẽ là ‘1’. Giả sử từ điển của chúng ta chỉ có 5 từ: ‘King’, ‘Queen’,
‘Man’, ‘Woman’ và ‘Child’. Ta có thể biểu diễn từ ‘Queen’ như bên dưới.

Hình 1.6. Cách biểu diễn từ ‘Queen’ dưới dạng One-hot Vector
Số chiều của One-hot Vector sẽ phụ thuộc vào số lượng phần tử có trong tập hợp
mà chúng ta cần biểu diễn. Trong ví dụ trên vì tập hợp chúng ta chỉ có 5 phần tử
(‘King’, ‘Queen’, ‘Man’, ‘Woman’, ‘Child’) nên vector của chúng ta có số chiều là
5. Giả sử cần biểu diễn cho toàn bộ 102 ký tự trên bàn phím thì chúng ta sẽ cần vector
102 chiều [7]. Nhược điểm của cách biểu diễn này là ta không thu được nhiều ý nghĩa
34

trong việc so sánh các từ với nhau ngoại trừ so sánh bằng, các từ có ý nghĩa hơn
không được nhấn mạnh.

1.2.2. Word2Vec

1.2.2.1. Khái niệm


Word2Vec là biểu diễn các từ (word) dưới dạng một phân bố quan hệ với các từ
còn lại (distributed representation) [8]. Mỗi từ được biểu diễn bằng một vector có các
phần tử mang giá trị là phân bố quan hệ của từ này đối với các từ khác trong từ điển.
Như thế thay vì kết nối one-to-one giữa các phần từ trong vector và một từ, biểu diễn
từ sẽ là dàn trải tất cả các thành phần của vector, và mỗi phần tử trong vector sẽ góp
phần định nghĩa nhiều từ khác.

Hình 1.7. Cách biểu diễn các từ trên Word2Vec


Với cách biểu diễn như vậy, người ta khám phá ra rằng các vector mang lại cho
ta cả cú pháp và ngữ nghĩa ở mức độ nào đó để máy tính hiểu.

1.2.2.2. Phương thức hoạt động


Công cụ Word2Vec sẽ lấy các bộ ngữ liệu văn bản (Corpus) như là một input
đầu vào và từ đó tạo ra các output đầu ra là Word Vector [7]. Đầu tiên, nó sẽ xây
dựng một bộ từ vựng (Vocabulary) từ các văn bản dữ liệu sau khi đã được train, sau
35

đó nó sẽ học cách biểu diễn từ của Vector. Kết quả ta thu được là một file Word
Vector có thể được sử dụng trong các ứng dụng của XLNNTN và các ứng dụng học
máy.
Có hai mô hình chính trong Word2Vec: Continuous Bag of Words với
Continuous Skip-Gram và hai thuật toán chính được sử dụng trong Word2Vec là
Hierarchical Softmax và Negative Sampling [7].
Về mô hình:
- Continuous Bag of Words: Ý tưởng của mô hình CBOW là mô hình dự đoán
từ hiện tại dựa trên các từ xung quanh hay các từ trong cùng ngữ cảnh. Ngữ
cảnh ở đây có thể là một câu hay một tập các từ đứng cạnh nhau [3]. Đầu vào
của CBOW sẽ là tập các ngữ cảnh và đầu ra là từ hiện tại cần dự đoán. CBOW
sử dụng tầng Chiếu chung cho tất cả các từ, do vậy tất cả các từ sẽ được chiếu
vào vị trí giống nhau. Ngoài việc sử dụng các từ đứng trước từ hiện tại, CBOW
còn sử dụng các từ đứng sau từ hiện tại để phân loại chính xác từ hiện tại dựa
trên việc xây dựng bộ phân loại Log-Linear cho các từ đứng trước và từ đứng
sau. Trong mô hình này, thứ tự của các từ trong lịch sử không ảnh hưởng đến
việc dự đoán.

Hình 1.8. Mô hình Continous Bag of Words


36

- Continuous Skip-gram: Kiến trúc của Continuous Skip-gram giống với


Continuos Bag of Word, tuy nhiên thay vì dự đoán từ hiện tại dựa trên ngữ
cảnh, mô hình này tập trung vào việc tối ưu phân loại của một từ dựa trên từ
khác trong cùng một câu. Cụ thể, phương pháp này sử dụng đầu vào là từ hiện
tại cho bộ phân loại Log-Linear với tầng Chiếu liên tục và dự đoán các từ theo
một dải nào đó phía trước và sau từ hiện tại. Việc tăng kích thước dải sẽ cải
thiện chất lượng của Vector từ đầu ra, tuy nhiên nó cũng làm tăng độ phức tạp
tính toán. Vì những từ càng xa thì thường ít liên quan đến từ hiện tại hơn là
những từ gần nó, do vậy chúng ta có thể đánh trọng số cho những từ ở xa nhỏ
đi để khắc phục vấn đề này. Không giống với các kiến trúc mạng nơ-ron được
sử dụng trước đó để học Vector từ, việc đào tạo mô hình Skip-gram không sử
dụng đến các phép nhân ma trận dày đặc. Điều này khiến cho việc đào tạo trở
nên cực kỳ hiệu quả: một máy đơn đã được tối ưu có thể đào tạo hơn 100 tỉ từ
một ngày. Một mở rộng đáng ngạc nhiên của phương pháp này đó là việc áp
dụng các phép cộng/trừ đại số cho các Vector có thể thu được các kết quả bất
ngờ về ngữ nghĩa [3].

Hình 1.9. Mô hình Continuous Skip-gram


Về thuật toán:
37

- Hierarchical Softmax sử dụng cây nhị phân để biểu diễn tất cả các từ trong
vocabulary. Mỗi từ là một lá trong cây. Với mỗi lá , tồn tại duy nhất một đường
từ gốc tới lá này , như thế đường này sẽ được sử dụng để ước lượng xác suất
mỗi từ biểu diễn bởi lá .
- Negative Sampling chỉ đơn giản là chúng ta chỉ cập nhật sample của output
word mỗi vòng lặp . Target output word sẽ được giữ trong sample và được cập
nhật và chúng ta sẽ thêm một vài (non-target) từ như negative samples.
Mikolov cũng sử dụng một cách tiếp cận subsampling đơn giản để chống lại
sự mất cân bằng giữa các từ hiếm và thường xuyên trong tập huấn luyện (ví
dụ như “in”, “the”, and “a” cung cấp ít giá trị thông tin hơn các từ hiếm). Mỗi
từ trong tập huấn luyện được loại bỏ với một xác suất P(wi).

1.2.3. Doc2Vec

1.2.3.1. Khái niệm


Doc2Vec được giới thiệu bởi Quoc Le và Mikolov có tên đầy đủ là Paragraph
Vector [6]. Doc2Vec là một thuật toán không giám sát và nó là một sự cải tiến so với
Word2Vec, ngoài từ (word), ta còn có thể biểu diễn các câu (sentences) thậm chí một
đoạn văn bản (document) có độ dài thay đổi. Thuật toán không yêu cầu điều chỉnh
công việc cụ thể cho hàm trọng số cũng như không dựa vào các cây phân tích cú
pháp. Chúng ta có thể dễ dàng vector hóa cả một đoạn văn bản thành một vector có
số chiều cố định và nhỏ, từ đó có thể chạy bất cứ thuật toán phân lớp (classification)
cơ bản nào trên các vector đó. Việc xây dựng thuật toán này có các tiềm năng để khắc
phục những điểm yếu của mô hình của Word2Vec như Bag of Words. Các kết quả
thực nghiệm cho thấy Doc2Vec vượt trội hơn hẳn các kỹ thuật biểu diễn văn bản
khác. Có hai mô hình cơ bản của Doc2Vec là Distributed Bag of Words (DBoW) và
Distributed Memomry (DM).
38

1.2.3.2. Phương thức hoạt động


Các thuật toán phân loại hay phân cụm thường xuyên đòi hỏi tập văn bản đầu
vào biểu diễn dưới dạng một vector có độ dài cố định (fixed length vector). Các mô
hình phổ biến đó là bag-of-words và bag-of-n-grams. Bag-of-words đương nhiên là
làm mất đi ngữ nghĩa có thể tới từ thứ tự của các từ. Bag-of-n-grams chỉ xem xét
short context và không được tốt lắm nếu dữ liệu thưa thớt và số chiều lớn. Các nhà
nghiên cứu trước đây đã cố gắng kết hợp các distributed word vectors, ví dụ bằng
cách sử dụng một trọng số trung bình của tất cả các từ trong một tài liệu, hoặc kết
hợp các word vectors theo một thứ tự nhất định của cây phân tích cú pháp của một
câu. Các phương pháp này cũng chịu việc mất mát thông tin về thứ tự từ, và sau này
không dễ dàng để mở rộng câu.
Công việc xây dựng Doc2Vec của Quoc Le và Mikolov được lấy cảm hứng từ
các phương pháp học của Word Vector và Word2Vec. Ý tưởng là cần các Word
Vector để đóng góp cho nhiệm vụ dự đoán từ tiếp theo trong câu. Vì vậy, mặc dù các
vector được khởi tạo ngẫu nhiên nhưng chúng cũng có thể nắm bắt ngữ nghĩa và cho
ra một kết quả gián tiếp của nhiệm vụ dự đoán từ ngữ. Họ đã sử dụng ý tưởng này
tương tự cho các vector văn bản. Ưu điểm của phương pháp này là chúng được huấn
luyện từ dữ liệu không có nhãn và qua đó có thể hoạt động tốt trên các tác vụ không
có đủ dữ liệu có gán nhãn.
Mô hình Distributed Bag of Words:
- Distributed Bag of Words là một mô hình đơn giản. Hiểu một cách đơn giản,
DBoW không quan tâm thứ tự xuất hiện của các từ, huấn luyện nhanh hơn,
không sử dụng Local-Context/Neighboring. Mô hình DBoW chèn thêm một
"word" là ParagraphID, ParagraphID này đại diện cho văn bản được huấn
luyện [6]. Sau khi huấn luyện xong có thể hiểu các vector ParagraphID này là
vector embedded của các văn bản. Hình ảnh được mô tả trong bài báo:
39

Bộ
xi xi+1 xi+2 xi+3
phân
lớp

Ma trận
D
văn bản

Văn bản được huấn luyện

Hình 1.10. Mô hình của Distributed Bag of Words


- Chi tiết hơn, phương thức ở trên dựa vào việc ghép nối các vector văn bản với
các vector từ ngữ để dự đoán từ tiếp theo trong kho văn bản, một cách khác là
bỏ qua từ ngữ cảnh ở đầu vào, nhưng bắt buộc mô hình dự đoán các từ được
lấy ngẫu nhiên ở đầu ra. Trong thực tế, điều này có nghĩa là mỗi lần lặp lại
ngẫu nhiên, chúng ta lấy được từ mẫu ở kho văn bản, sau đó lấy một từ ngẫu
nhiên ở kho văn bản và tạo thành một chương trình phân loại cho Doc2Vec.
Kỹ thuật này được thể hiện rõ trong hình 1.11.
- Ngoài việc đơn giản về mặt khái niệm, mô hình này yêu cầu lưu trữ ít dữ liệu
hơn. Chúng ta chỉ cần lưu trữ các trọng số softmax cũng như các trọng số trái
ngược với softmax và vector từ ngữ trong mô hình trước đó. Mô hình này cũng
tương tự như mô hình Skip-gram trong Word2Vec (Mikolov và cộng sự,
2013c)
Mô hình Distributed Memory:
- Distributed Memomry còn được gọi là mô hình bộ nhớ phân tán của vector
văn bản. Mô hình này xem một đoạn paragraph là một từ, sau đó nối từ này
vào tập các từ trong câu [6]. Đoạn mã biểu diễn cho đoạn văn có thể được coi
là một từ khác. Nó hoạt động như một bộ ghi nhớ những gì còn thiếu trong bối
40

cảnh hiện tại hoặc chủ đề của đoạn văn. Trong quá trình huấn luyện, vector
của paragraph và vector từ đều được cập nhật liên tục:

Bộ phân lớp xi+3

Trung bình cộng/


Kết hợp

Ma trận
văn bản D W W W
Văn bản được xi xi+1 xi+2
huấn luyện

Hình 1.11. Mô hình Distributed Memory


- Mô hình gồm 2 giai đoạn chính:
o Huấn luyện để lấy các vector từ W, các trọng số softmax U, b và các
vector văn bản D trên các đoạn đã huấn luyện.
o “Giai đoạn suy luận” để lấy các vector văn bản D cho các đoạn văn mới
(chưa từng thấy trước đây) bằng cách thêm nhiều cột trong D và giảm
dần trên D trong khi giữ W, U , b cố định. Chúng tôi sử dụng D để đưa
ra dự đoán về số nhãn cụ thể bằng cách sử dụng các phương pháp phân
loại chuẩn như Logistic Regression, SVM, ....
- Các vector đoạn văn cũng giải quyết được một số điểm yếu chính của mô hình
bag-of-words. Đầu tiên, họ kế thừa một thuộc tính quan trọng của vector từ
ngữ, đó là ngữ nghĩa của từ. Trong trường hợp này, “mạnh mẽ” gần gũi với
“khỏe” hơn là “Paris”. Ưu điểm thứ hai là của vector văn bản là chúng xem
xét thứ tự từ ngữ, ít nhất là trong một đoạn văn nhỏ, trong cùng một cách mà
mô hình n-gram với mô hình lớn hơn làm. Điều này khá quan trọng, vì mô
hình n-gram bảo tồn rất nhiều thông tin của văn bản, bao gồm cả thứ tự từ ngữ.
Điều đó nói lên một điều, mô hình của chúng tôi có lẽ tốt hơn mô hình bag-of-
41

n-gram vì mô hình bag-of-n-gram sẽ tạo ra một từ đại diện có xu hướng khái


quát hóa kém.
Một cách đơn giản để kiểm chứng phương thức vector hóa dữ liệu có hoạt động
hay không chính là tìm những từ gần nhất (closest words) với từ mà người dùng nhập
vào. Và điều này được thể hiện qua công cụ tính khoảng cách. Ví dụ: Nếu chúng ta
gõ từ ‘France’, công cụ sẽ hiển thị những từ tương đồng và khoảng cách giữa những
từ đó với từ ‘France’, chi tiết như bảng sau:
Bảng 1.2. Khoảng cách giữa các từ đến từ ‘France’
Từ Khoảng cách
Spain 0.678515
Belgium 0.665923
Netherlands 0.652428
Italy 0.633130
Switzerland 0.622323
Luxembourg 0.610033
Portugal 0.577154
Russia 0.571507
Germany 0.563291

Trong các thí nghiệm của Quoc Le và Mikolov. mỗi vector văn bản là một sự kết
hợp của hai vector: một được huấn luyện bởi vector đạt tiêu chuẩn với mô hình bộ
nhớ phân tán (Distributed Memory) và một được huấn luyện bằng vector văn bản với
sự phân tán từ ngữ (Distributed Bag of Words). Nếu chạy độc lập thì, DM thường
hoạt động tốt hơn, nhưng sự kết hợp của nó với DBoW thường phù hợp hơn trong
nhiều tác vụ khác nhau [6].
Trong bài báo này, chúng tôi sẽ chạy độc lập từng mô hình và kết hợp với các
phương pháp phân lớp. Qua quá trình huấn luyện, chúng tôi nhận thấy mô hình DBoW
cho độ chính xác cao hơn DM nhưng không đáng kể và phụ thuộc vào khối lượng
cũng như số vòng lặp khi huấn luyện, cụ thể sẽ được nêu rõ hơn ở phần thực nghiệm.
42

1.3. Các phương pháp phân lớp


Bài toán phân lớp là một trong những bài toán lớn của lĩnh vực máy học (Machine
Learning) và đang trở thành một phần không thể thiếu trong quá trình xử lý ngôn ngữ
tự nhiên.
Từ việc xây dựng các tập qui tắc bằng tay đòi hỏi rất nhiều công sức và thời gian,
các nghiên cứu đang hướng đến việc sử dụng cơ sở dữ liệu lớn để tự động (hoặc bán
tự động) sinh ra các qui tắc đó. Phương pháp này đã, đang thu được những kết quả
vô cùng khả quan trong nhiều lĩnh vực khác nhau của XLNNTN. Bài toán phân lớp
là quá trình phân lớp một đối tượng dữ liệu vào một hay nhiều lớp đã cho trước nhờ
một mô hình phân lớp (model). Mô hình này được xây dựng dựa trên một tập dữ liệu
được xây dựng trước đó có gán nhãn (hay còn gọi là tập huấn luyện). Quá trình phân
lớp là quá trình gán nhãn cho đối tượng dữ liệu.
Có khá nhiều phương pháp phân lớp hiện nay. Trong bài báo này, chúng tôi sẽ sử
dụng đồng thời các phương pháp phổ biến cũng như ít người sử dụng nhằm tạo ra sự
khác biệt và tìm ra được hiệu suất tốt nhất cho mục đích ban đầu đề ra.

1.3.1. K-Nearest Neighbor


K-Nearest Neighbor [23] (KNN) là một thuật toán phổ biến để phân loại văn bản.
Thuật toán KNN với phương pháp TF-IDF và framework để phân loại văn bản, dựa
vào khoảng cách gần nhất giữa đối tượng cần xếp lớp (Query point) và tất cả các đối
tượng trong bộ dữ liệu huấn luyện. Nó cho phép phân loại theo các tham số khác
nhau, đo lường, phân tích kết quả.
Với KNN, trong bài toán Classification, nhãn của một điểm dữ liệu mới (hay kết
quả của câu hỏi trong bài thi) được suy ra trực tiếp từ K điểm dữ liệu gần nhất trong
training set. Nhãn của một test data có thể được quyết định bằng major voting (bầu
chọn theo số phiếu) giữa các điểm gần nhất, hoặc nó có thể được suy ra bằng cách
đánh trọng số khác nhau cho các điểm gần nhất đó rồi suy ra nhãn.
Một đối tượng được phân lớp dựa vào K láng giềng của nó. K là số nguyên dương
được xác định trước khi thực hiện thuật toán. Người ta thường dùng khoảng cách
43

Euclidean để tính khoảng cách giữa các đối tượng. Trong hình dưới đây, training data
được mô tả bởi dấu (+) và dấu (-), đối tượng cần được xác định lớp cho nó (Query
point) là hình tròn đỏ. Nhiệm vụ của chúng ta là ước lượng (hay dự đoán) lớp của
Query point dựa vào việc lựa chọn số láng giềng gần nhất với nó. Nói cách khác
chúng ta muốn biết liệu Query Point sẽ được phân vào lớp (+) hay lớp (-).

Hình 1.12. Mô hình K-Nearest Neighbor

1.3.2. Support Vector Machine


Support Vector Machine [24] (SVM) là một thuật toán giám sát, nó có thể sử dụng
cho cả việc phân loại hoặc đệ quy. Tuy nhiên nó được sử dụng chủ yếu cho việc phân
loại. Trong thuật toán này, chúng ta vẽ đồ thị dữ liệu là các điểm trong n chiều (ở đây
n là số lượng các tính năng bạn có) với giá trị của mỗi tính năng sẽ là một phần liên
kết. Sau đó chúng ta thực hiện tìm "đường bay" phân chia các lớp. Đường bay – hiểu
đơn giản là một đường thằng có thể phân chia các lớp ra thành hai phần riêng biệt.
Ưu điểm của nó là: xử lý trên không gian có số chiều cao, tiết kiệm bộ nhớ, tính linh
hoạt. Bên cạnh đó cũng có một số nhược điểm nhỏ như: gặp khó khăn với bài toán số
chiều cao, chưa thể hiện rõ tính xác xuất.
44

Hình 1.13. Mô hình Support Vector Machine – Linear


Có 4 loại Kernel thông dụng là: Linear, Poly, RBF, Sigmoid. Trong bài báo này,
chúng tôi sẽ sử dụng 2 loại là Linear và RBF:
- Linear là trường hợp đơn giản với Kernel chính tích vô hướng của hai vector
:
k(x,z)=xTz
Khi sử dụng hàm sklearn.svm.SVC, kernel này được chọn bằng cách đặt
kernel = ‘linear’.
- Radial Basic Funtion (RBF): được sử dụng nhiều nhất trong thực tế, và là lựa
chọn mặc định trong sklearn. Nó được định nghĩa bởi công thức :
k(x,z)=exp(−γ‖𝑥 − 𝑧‖22 ), γ>0
Trong sklearn, kernel = ‘rbf’.

Hình 1.14. Mô hình Support Vector Machine – RBF


45

1.3.3. Gaussian
Quy trình Gaussian [25] (Gaussian Process – GPs) là một mô hình hóa mạnh mẽ
kết hợp với các khuôn khổ chính và Naïve Bayes, và được công nhận là phương pháp
hiện đại nhất cho nhiều nhiệm vụ học máy. Nó là phương pháp phân loại phức tạp
hơn một chút .Tuy mới được sử dụng rộng rãi gần đây nhưng nó cung cấp một phương
pháp rõ ràng và đơn giản về suy luận xác suất. Hơn nữa, quy trình GPs rất linh hoạt
và có thể được đưa vào các mô hình đồ họa lớn hơn, tạo thành một công cụ bổ sung
cho các công tác suy luận. Đáng chú ý nhất là việc hỗ trợ kết hợp với phương pháp
Bayes giúp tránh được nhiều lỗi suy luận không chính xác. Nhìn chung, GPs cung
cấp một phương thức suy luận xác xuất linh hoạt, đơn giản nhưng mang lại kết quả
có độ chính xác cao.

Hình 1.15. Hàm từ tiến trình Gaussian


Một quá trình Gaussian được xác định đầy đủ bởi hàm trung bình m(x) và hàm
hiệp phương sai k (x, x0). Đây là một sự tổng quát tự nhiên của GPs mà trung bình và
hiệp phương sai của nó là một vector và ma trận tương ứng. Sự phân bố Gaussian là
trên các vector, trong khi quá trình Gaussian là trên các hàm. Nó được viết dưới dạng:
f ∼ GP (m, k)
Nghĩa là: “Hàm f được phân phối dưới dạng GPs với hàm trung bình m và hàm
hiệp phương sai k”.
Hàm ngẫu nhiên từ một tiền trình Gaussian :
1
p(f) ∼ GP m, k, khi m(x) = 0, và k(x, x’) = exp(− (𝑥 − 𝑥′)2).
2
46

Để biểu lộ được sự phân bố của các chức năng, ta xét hàm f = (f(x1), f(x2), . . . ,
f(xN))T với f ∼ N(0, Σ), trong đó Σij= k(xi, xj). Sau đó vẽ tọa độ của f như một hàm
tương ứng giá trị của x.

1.3.4. Decision Tree


Cây quyết định (Decision Tree) [26] là một cây phân cấp có cấu trúc được dùng
để phân lớp các đối tượng dựa vào dãy các luật (series of rules). Các thuộc tính của
đối tượng (ngoại trừ thuộc tính phân lớp – Category attribute) có thể thuộc các kiểu
dữ liệu khác nhau (binary, nominal, ordinal, quantitative values) trong khi đó thuộc
tính phân lớp phải có kiểu dữ liệu là Binary hoặc Ordinal. Tóm lại, cho dữ liệu về các
đối tượng gồm các thuộc tính cùng với lớp (classes) của nó, cây quyết định sẽ sinh ra
các luật để dự đoán lớp của các đối tượng chưa biết (unseen data).

Hình 1.16. Mô hình Decision Tree


Decision Tree là 1 sơ đồ khối đơn giản, chọn nhãn cho giá trị đầu vào. Nó gồm
các nốt quyết định, kiểm tra giá trị đặc trưng. Decision Tree là một mô hình
supervised learning, có thể được áp dụng vào cả hai bài toán classification và
regression. Việc xây dựng một Decision Tree trên dữ liệu huấn luyện cho trước là
việc đi xác định các câu hỏi và thứ tự của chúng. Một điểm đáng lưu ý của Decision
Tree là nó có thể làm việc với các đặc trưng, thường là rời rạc và không có thứ tự.
Decision Tree cũng làm việc với dữ liệu có vector đặc trưng bao gồm cả thuộc tính
dạng phân loại và liên tục.
47

Cây quyết định là một cấu trúc được sử dụng để chia liên tiếp một tập các bản ghi
lớn thành các tập con nhỏ hơn bằng cách áp dụng một chuỗi các luật đơn giản. Với
mỗi phép chia liên tiếp, các tập con thu được trong tập kết quả sẽ ngày càng giống
nhau. Nó có cấu trúc như sau:
- Mỗi nút mang một thuộc tính (biến độc lập).
- Mỗi nhánh tương ứng với một giá trị của thuộc tính.
- Mỗi nút lá là một lớp (biến phụ thuộc).

Đối với cây quyết định, tại mỗi nút, một thuộc tính sẽ được chọn ra để phân tách
tập mẫu thành những lớp khác nhau nhiều nhất có thể. Tiến hành lặp lại bước này đến
khi kết thúc ta sẽ có được một tập các lớp đã được định nghĩa trước. Một trường hợp
mới sẽ được phân loại dựa vào việc tìm một đường dẫn phù hợp tới nút lá.

1.3.5. Random Forest


Đây là một thuật toán mới xuất hiện tầm 10 năm trước, và được coi là một cuộc
cách mạng trong Machine Learning [27]. Random Forest chỉ phức tạp hơn một chút
so với KNN, nhưng nó hiệu quả hơn nhiều nếu xét trên hiệu năng tính toán của máy
tính. Bên cạnh đó, Random Forest còn cho kết quả chính xác hơn nhiều so với KNN,
nghĩa là: khi các nhà nghiên cứu kiểm thử kết quả của hai thuật toán này trên các bộ
dữ liệu khác nhau (bao gồm cả the Iris dataset), Random Forest thường cho kết quả
đúng hơn.

Hình 1.17. Mô hình Random Forest


48

Một trong những lí do khiến Random Forest hiệu quả hơn so với K-Nearest
Neighbor là bởi vì, với K-Nearest Neighbor, tất cả các thuộc tính đều có mức độ quan
trọng như nhau. Mặt khác, Random Forest có khả năng tìm ra thuộc tính nào quan
trọng hơn so với những thuộc tính khác. Trên thực tế, nó còn có thể chỉ ra rằng một
số thuộc tính là hoàn toàn vô dụng.
Thuật toán Random Forest là một thuật toán phân loại được giám sát. Chúng ta
có thể nhìn thấy nó từ tên của nó, đó là để tạo ra một khu rừng bằng cách nào đó và
làm cho nó ngẫu nhiên. Có mối quan hệ trực tiếp giữa số lượng cây trong rừng và kết
quả có thể nhận được: số lượng cây càng lớn thì kết quả càng chính xác. Ngoài
ra Random Forest có độ chính xác cao hơn rất nhiều lần so với K-Nearest Neighbor.
Nhắc đến “độ chính xác”, có nghĩa là khi các nhà khoa học kiểm thử thuật toán (bao
gồm cả Iris dataset), thì Random Forest đưa ra nhiều câu trả lời chính xác hơn K-
Nearest Neighbor. Random Forest là thành viên trong chuỗi thuật toán “Decision
Tree”.

1.3.6. Convolutional Neural Net


Trong học máy, mạng thần kinh chập mạch (CNN, hoặc ConvNet) [28] là một lớp
mạng nơ-ron nhân tạo sâu, thường được áp dụng để phân tích hình ảnh trực quan.
CNNs sử dụng một biến thể đa lớp được thiết kế để yêu cầu tiền xử lý tối thiểu. Chúng
còn được gọi là mạng nơ-ron nhân tạo bất biến (SIANN). Các mạng liên kết được lấy
cảm hứng từ các quá trình sinh học trong đó mô hình kết nối giữa các nơ-ron giống
với tổ chức của vỏ não thị giác động vật. Các tế bào thần kinh vỏ não riêng lẻ chỉ
phản ứng với các kích thích trong một khu vực giới hạn của trường thị giác được gọi
là trường tiếp nhận. Các lĩnh vực tiếp nhận của các tế bào thần kinh khác nhau chồng
lên nhau từng phần sao cho chúng bao phủ toàn bộ lĩnh vực thị giác. CNN sử dụng
tương đối ít tiền xử lý so với các thuật toán phân loại hình ảnh khác. Điều này có
nghĩa rằng mạng học các bộ lọc trong các thuật toán truyền thống được thiết kế bằng
tay. Sự độc lập này từ kiến thức trước và nỗ lực của con người trong thiết kế tính
49

năng là một lợi thế lớn. CNNs có các ứng dụng trong nhận dạng hình ảnh và video,
hệ thống giới thiệu và XLNNTN.
CNN sử dụng các lớp với bộ lọc liên kết được áp dụng cho các tính năng cục bộ.
Ban đầu được phát minh cho tầm nhìn máy tính, các mô hình CNN sau đó đã được
chứng minh là có hiệu quả cho XLNNTN và đã đạt được kết quả xuất xắc trong phân
tích cú pháp ngữ nghĩa, truy vấn tìm kiếm, mô hình câu và các nhiệm vụ truyền thống
khác.

Hình 1.18. Mô hình Convolutional Neural Net


Convolution gồm 2 khái niệm khác là Convolution Filter và Convolutional Layer.
Trong mạng neural network thông thường, từ input, ta cho qua các hidden layer rồi
ra được output. Với CNN, Convolutional Layer cũng chính là hidden layer, khác ở
chỗ, Convolutional Layer là một tập các feature map và mỗi feature map này là một
bản scan của input ban đầu, nhưng được trích xuất ra các feature cụ thể. Scan như thế
nào thì lại dựa vào Convolution Filter hay kernel. Đây là một ma trận sẽ quét qua ma
trận dữ liệu đầu vào, từ trái qua phải, trên xuống dưới, và nhân tương ứng từng giá trị
của ma trận đầu vào mà ma trận kernel rồi cộng tổng lại, đưa qua activation funciton
sẽ được một con số cụ thể, tập hợp các con số này lại là một ma trận nữa, chính
là feature map.

1.3.7. Ada Boost


Ada Boost là một thuật toán boosting dùng để xây dựng bộ phân lớp (classifier)
[29]. Boosting là thuật toán học quần thể bằng cách xây dựng nhiều thuật toán học
50

cùng lúc (ví dụ như cây quyết định) và kết hợp chúng lại. Mục đích là để có một cụm
hoặc một nhóm các weak learner sau đó kết hợp chúng lại để tạo ra một strong
learner duy nhất. Weak learner phân loại với độ chính xác hầu như không cao. Một
ví dụ phổ biến của weak learner là cây quyết định một cấp (decision stump). Ngược
lại, strong leaner có độ chính xác cao hơn nhiều. Đây là thuật toán đơn giản và dễ
dàng cài đặt. Thêm vào đó, tốc độ học rất nhanh. Các weak learner đơn giản hơn rất
nhiều các strong learner, nhờ vậy thuật toán chạy nhanh hơn. Một điều nữa, AdaBoost
là phương pháp có khả năng điều chỉnh các classifier rất tinh tế. Vì mỗi hiệp
AdaBoost lại tinh chỉnh lại các trọng số cho các learner tốt nhất. Điều bạn cần làm đó
là xác định số hiệp để lặp.

Hình 1.19. Giản đồ Ada Boost


Tóm lại, thuật toán linh hoạt và đa năng. AdaBoost có thể kết hợp với bất kỳ thuật
toán học máy nào và nó có thể làm việc với một lượng lớn dữ liệu khác nhau. Cách
tính toán cũng khá đơn giản. Cho tập dữ liệu được gán nhãn :

S = ((x1,y1),…,(xm,ym)), trong đó (x1,y1) ∈ X x {-1, +1}, ∀i ∈ [1,m].

Phân phối (distribution) vòng lặp thứ t ∈ [1,T] là Dt với D1 là phân phối đều. Và
base classifier ht ∈ Hđược chọn để minimize độ lỗi trên tập huấn luyện được tính lại
trọng số (re-weighted) như sau:
51

ht ∈ 𝑎𝑟𝑔𝑚𝑖𝑛ℎ𝜖𝐻 Pri~Dt [ht(xi) # yi] = 𝑎𝑟𝑔𝑚𝑖𝑛ℎ𝜖𝐻 ∑𝑚


𝑖=1 𝐷 t(i)1h(xi)#yi

với Zt là thừa số để chuẩn hoá sao cho tổng trọng số trên phân phối Dt+1(i) bằng 1.

1.3.8. Naïve Bayes


Naive Bayes Classification [30] (NBC) là một thuật toán dựa trên định lý Bayes
về lý thuyết xác suất để đưa ra các phán đoán cũng như phân loại dữ liệu dựa trên các
dữ liệu được quan sát và thống kê. Naive Bayes Classification là một trong những
thuật toán được ứng dụng rất nhiều trong các lĩnh vực Machine learning dùng để đưa
các dự đoán chính xác nhất dự trên một tập dữ liệu đã được thu thập, vì nó khá dễ
hiểu và độ chính xác cao. Nó thuộc vào nhóm thuật toán học có giám sát, tức là máy
học từ các ví dụ từ các mẫu dữ liệu đã có.
Định lý Bayes cho phép tính xác suất xảy ra của một sự kiện ngẫu nhiên A khi
biết sự kiện liên quan B đã xảy ra. Xác suất này được ký hiệu là P(A|B), và đọc là
“xác suất của A nếu có B”. Đại lượng này được gọi xác suất có điều kiện hay xác suất
hậu nghiệm vì nó được rút ra từ giá trị được cho của B hoặc phụ thuộc vào giá trị
đó.Theo định lí Bayes, xác suất xảy ra A khi biết B sẽ phụ thuộc vào 3 yếu tố:
- Xác suất xảy ra A của riêng nó, không quan tâm đến B. Kí hiệu là P(A) và đọc
là xác suất của A. Đây được gọi là xác suất biên duyên hay xác suất tiên
nghiệm, nó là “tiên nghiệm” theo nghĩa rằng nó không quan tâm đến bất kỳ
thông tin nào về B.
- Xác suất xảy ra B của riêng nó, không quan tâm đến A. Kí hiệu là P(B) và đọc
là “xác suất của B”. Đại lượng này còn gọi là hằng số chuẩn hóa (normalising
constant), vì nó luôn giống nhau, không phụ thuộc vào sự kiện A đang muốn
biết.
- Xác suất xảy ra B khi biết A xảy ra. Kí hiệu là P(B|A) và đọc là “xác suất của
B nếu có A”. Đại lượng này gọi là khả năng (likelihood) xảy ra B khi biết A
đã xảy ra. Chú ý không nhầm lẫn giữa khả năng xảy ra B khi biết A và xác
suất xảy ra A khi biết B.
52

Hình 1.20. Phân lớp Naive Bayes


Tóm lại định lý Bayes sẽ giúp ta tính ra xác suất xảy ra của một giả thuyết
bằng cách thu thập các bằng chứng nhất quán hoặc không nhất quán với một giả
thuyết nào đó. Khi các bằng chứng tích lũy, mức độ tin tưởng vào một giả thuyết thay
đổi. Khi có đủ bằng chứng, mức độ tin tưởng này thường trở nên rất cao hoặc rất thấp,
tức là xác xuất xảy ra giả thuyết sẽ thay đổi thì các bằng chứng liên quan đến nó thay
đổi. Công thức của định luật Bayes được phát biểu như sau:
𝑃(𝐵|𝐴)𝑃(𝐴) 𝑙𝑖𝑘𝑒𝑙𝑖ℎ𝑜𝑜𝑑 ∗ 𝑝𝑟𝑖𝑜𝑟
𝑃(𝐴|𝐵) = =
𝑃(𝐵) 𝑛𝑜𝑟𝑚𝑎𝑙𝑖𝑧𝑖𝑛𝑔. 𝑐𝑜𝑛𝑠𝑡𝑎𝑛𝑡
Trong đó:
- P(A) là xác suất xảy ra của riêng A, không liên quan đến B (prior).
- P(B) là xác suất xảy ra của riêng B. P(B) còn được gọi là normalizing_constant
vì nó là hằng số không bị ảnh hưởng bị A.
- P(B|A) là xác suất xảy ra B khi biết A đã xảy ra (likelihood), còn được gọi
là xác suất của B nếu có A.
Ở trên ta có thể thấy xác suất sảy ra của giả thuyết A phụ thuộc và xác suất của
giả thuyết B, nhưng trong thực tế xác suất A có thể phụ thuộc vào xác suất của nhiều
các giác thuyết khác có thể là B1, B2, B3 … Bn. Vậy định luật Bayes có thể được mở
rộng bằng công thức sau:
(𝑃(𝐵1 |𝐴) ×𝑃 (𝐵2 |𝐴) ×𝑃 (𝐵3 |𝐴)…×𝑃 (𝐵𝑛 |𝐴)) × 𝑃(𝐴)
P (A|B) =
𝑃(𝐵1 ) × 𝑃(𝐵1 ) × 𝑃(𝐵2 ) × 𝑃(𝐵3 ) × 𝑃(𝐵𝑛 )
53

1.3.9. Bayesian Quadratic Discriminant Analysis


Bayesian Quadratic Discriminant Analysis [31] là một nhánh nhỏ của Thuật toán
“Dimensionality Reduction”. QDA lần đầu tiên được đề xuất bởi Geisser (1964),
nhưng cách tiếp cận này đã không trở nên phổ biến, mặc dù nó đã giảm tối thiểu sô
lượng phân loại sai. Ripley (2001) trong bài viết của ông về nhận dạng mẫu cho rằng
các trình phân loại dự đoán như vậy hầu như không được đề cập trong các nghiên cứu
khác và “điều này có thể là do nó thường tạo ra sự khác biệt nhỏ với các ràng buộc
chẽ của các tham số liên quan.” Geisser (1993) xem xét QDA Bayesian khá chi tiết,
nhưng ông thấy rằng trong thực tế nó có thể mang lại hiệu suất tốt hơn so với QDA
được chuẩn hóa. Trong các thí nghiệm sơ bộ, chúng tôi thấy rằng hiệu suất của phân
loại QDA Bayesian rất nhạy cảm với các sự lựa chọn trước đó (Srivastava và Gupta,
2006), và các chuyên gia do Geisser (1964) và Keehn (1965) đề xuất.

Hình 1.21. So sánh LDA với QDA


Cơ chế của phương pháp giảm số chiều thuộc tính (dimensionality reduction) cũng
dựa trên tính chất vốn có của dữ liệu để rút gọn, tổng hợp lại thành tập dữ liệu mới
có thông tin ít hơn rất nhiều nhưng vẫn đảm bảo mô tả toàn vẹn tập dữ liệu ban đầu.
Dimensionality Reduction, nói một cách đơn giản, là việc đi tìm một hàm số, hàm số
này lấy đầu vào là một điểm dữ liệu ban đầu x∈RD với D rất lớn, và tạo ra một điểm
dữ liệu mới z∈RK có số chiều K<D. Phương pháp này thường được sử dụng vào Big
54

Data, do số lượng dữ liệu quá lớn và giới hạn tính toán của hệ thống hiện tại, ta có
thể rút gọn tập dữ liệu ban đầu để có thể đáp ứng được khả năng tính toán nhưng vẫn
giữ được độ chính xác dự đoán có thể chấp nhận được.
Vào năm 1989, Friedman đã đề xuất tiêu chuẩn ước lượng phương sai ML bằng
cách cộng nhị phân ML mỗi ma trận phương sai của mỗi lớp với một phiên bản được
chia tỷ lệ của ma trận nhạn dạng để tạo phương thức Σˆh (λ, γ) cho mỗi lớp h tương
ứng:
(1− 𝜆)𝑆ℎ + 𝜆𝑆
𝛴̂ h (𝜆) =
(1− 𝜆)𝑛ℎ + 𝜆𝑛′
𝛾
𝛴̂ h (𝜆, 𝛾) = (1 - 𝛾) 𝛴̂ h (𝜆) + 𝑡𝑟 (𝛴̂ ℎ (𝜆)) 𝐼.
𝑑
55

PHẦN 2: PHƯƠNG PHÁP TIẾP CẬN

2.1. Mô hình giải quyết bài toán


Bài toán phân tích cảm xúc thuộc dạng bài toán phân tích ngữ nghĩa văn bản. Vì
vậy, ta cần phải xây dựng một mô hình để hiểu được ý nghĩa của câu văn, đoạn văn
để quyết định xem câu văn đó hoặc đoạn văn đó mang màu sắc cảm xúc chủ đạo nào.
Về cơ bản, chúng ta có thể chia cảm xúc con người thành nhiều loại, và việc này
tương ứng với bài toán phân lớp dữ liệu trong khai thác dữ liệu. Do đó, chúng tôi tiếp
cận bài toán phân tích cảm xúc người dùng bằng phương pháp phân lớp dữ liệu.
Chúng tôi mô tả khái quát mô hình phân tích cảm xúc người dùng trong hình 2.1.
Dữ liệu đầu vào của bài toán là một câu, hay tổng quát hơn là một văn bản, còn kết
quả đầu ra mong đợi là loại cảm xúc. Tùy vào mức độ chi tiết mà ta phân chia thành
số lượng loại cảm xúc. Chẳng hạn với bài toán đánh giá sản phẩm tiêu dùng, ta có thể
phân loại cảm xúc người dùng ở hai mức độ có tính chất định tính: tích cực và tiêu
cực. Để chi tiết hơn ta có thể cho điểm để thể hiện mức độ của sự tích cực hay tiêu
cực. Chẳng hạn, ta cho điểm từ 1 đến 10 và quy định điểm trên 7 là tích cực, và trên
9 là rất tích cực. Tương tự, điểm dưới 4 là tiêu cực và dưới 2 là rất tiêu cực.

- Xếp hạng
Tập hợp - Gợi ý
văn bản - Xác định giá trị
thương hiệu
- ….

Tiền xử lý

Các Các cảm xúc tương


nhận xét ứng với nhận xét

Phân loại câu Các câu chủ


Phân loại
chủ quan – quan
cảm xúc
khách quan

Hình 2.1. Sơ đồ tổng quan mô hình phân tích cảm xúc.


22
56

Trong hình 2.1, chúng tôi mô tả mô hình tổng quan của quá trình phân tích cảm
xúc. Dữ liệu đầu vào cho bài toán phân tích cảm xúc là văn bản. Dữ liệu đầu ra mong
đợi là loại nhận xét hay cảm xúc tương ứng với nhận xét đó. Mô hình phân tích cảm
xúc tổng quan gồm các bước chính như sau:
1. Tiền xử lý
2. Phân loại câu chủ quan – khách quan
3. Phân loại cảm xúc
Trong bước 1 – tiền xử lý – chúng tôi tiến hành tách từ (phân định ranh giới từ),
loại bỏ hư từ và dấu câu. Trong bước 2 và bước 3, chúng tôi áp dụng phương pháp
phân lớp dữ liệu để phân loại câu chủ quan – khách quan và loại cảm xúc.
Trong nghiên cứu này, chúng tôi tiếp cận bài toán phân tích cảm xúc trong văn
bản tiếng Việt, với cảm xúc mong đợi ở dạng định tính:
- Xác định tính tích cực – tiêu cực của văn bản.
- Xác định tính chủ quan – khách quan của văn bản.
Khác với các nghiên cứu trước đây trong phân tích cảm xúc trong tiếng Việt, để
biểu diễn dữ liệu văn bản thành dạng dữ liệu mà các phương pháp phân lớp có thể
sử dụng, chúng tôi sử dụng Doc2Vec [6] hay còn gọi là Paragraph Vector cho bước
vector hóa dữ liệu. Bên cạnh đó, chúng tôi còn sử dụng các phương pháp phân lớp
khác nhau và sau đó đánh giá chúng nhằm tìm ra hiệu suất tốt nhất cũng như có hướng
điều chỉnh thích hợp cho các nghiên cứu tương lai.

2.2. Tiền xử lý văn bản


Bước đầu tiên và không thể thiếu trong xử lý ngôn ngữ tự nhiên là tiền xử lý, đặc
biệt trong tiếng Việt thì sự quan trọng của nó càng rõ ràng hơn. Vì văn bản vốn dĩ
được liệt kê mà không có cấu trúc, để nguyên vậy để xử lý là rất khó khăn. Đặc biệt
là loại văn bản trên web có lẫn các thẻ HTML tag, code JS, đó chính là từ nhiễu.
Dữ liệu chúng tôi sử dụng là bộ dữ liệu VLSP 2016 được hỗ trợ bởi Vietnamese
Language and Speech Processing, và bộ dữ liệu này đã đọc làm sạch loại bỏ các từ
57

nhiễu. Do vậy, công việc chúng tôi cần làm là: tách từ trong câu và loại bỏ các hư từ
và các dấu câu không cần thiết.

Tiền xử lý

Làm sạch

Tách từ trong câu

Loại bỏ hư từ và dấu cách

Hình 2.2. Các giai đoạn tiền xử lý văn bản được sử dụng
23

2.2.1. Tách từ
Trong tiếng Việt, dấu cách không được sử dụng như một kí hiệu phân tách từ, nó
chỉ có ý nghĩa phân tách các âm tiết với nhau. Vì thế, để xử lý tiếng Việt, công đoạn
tách từ (Word Segmentation) là một trong những bài toán cơ bản và quan trọng nhất.
Ví dụ : từ “đất nước” được tạo ra từ hai âm tiết “đất” và “nước”, cả hai âm tiết
này đều có nghĩa riêng khi đứng độc lập, nhưng khi ghép lại sẽ mang một nghĩa khác.
Vì đặc điểm này, bài toán tách từ trở thành bài toán tiền đề cho các ứng dụng xử lý
ngôn ngữ tự nhiên khác như phân loại văn bản, tóm tắt văn bản và máy dịch tự động.
Về mặt biểu hiện, tách từ là gom nhóm các từ đơn liền kề thành một cụm từ có
ý nghĩa. Ví dụ: "Cách tách từ cho tiếng Việt." sau khi tách từ thì thành "Cách tách từ
cho tiếng_Việt ." Về hình thức, các từ đơn được gom nhóm với nhau bằng cách nối
với nhau bằng ký tự gạch dưới "_", trong trường hợp này là từ “tiếng_Việt”. Sau khi
thực hiện tách từ thì mỗi từ (Token) trong câu được cách nhau bởi một khoảng trắng,
58

trong trường hợp này: "tiếng_Việt ." thì từ "tiếng_Việt" cách dấu "." bởi một khoảng
trắng. Đây là quy ước chung cho tất cả các ngôn ngữ của bài toán tách từ trong
XLNNTN [4].
Về mặt ngữ nghĩa, việc tách từ văn bản đầu vào trước khi đưa vào huấn luyện
mô hình máy học là để giải quyết các bài toán liên quan đến ngữ nghĩa của văn bản,
tức là kết quả đầu ra mang tính suy luận dựa trên việc hiểu ý nghĩa của văn bản đầu
vào. Ví dụ như các dạng bài toán: phát hiện đạo văn, tóm tắt văn bản, hỏi đáp tự động,
hỗ trợ khách hàng tự động, phân tích cảm xúc văn bản, dịch máy, và trợ lý ảo.
Mục tiêu của việc tách từ văn bản đầu vào là để khử tính nhập nhằng về ngữ
nghĩa của văn bản. Tùy vào từng loại ngôn ngữ có những đặc điểm khác nhau mà
việc tách từ văn bản cũng có độ khó khăn khác nhau. Với ngôn ngữ hòa kết như tiếng
Anh, thì việc tách từ khá đơn giản vì ranh giới từ được nhận diện bằng khoảng trắng
và dấu câu. Với ngôn ngữ tiếng Việt, thuộc loại hình đơn lập, mang đặc điểm là từ
tiếng Việt không biến đổi hình thái, ranh giới từ không được xác định mặc nhiên bằng
khoảng trắng. Tiếng Việt có đặc điểm là ý nghĩa ngữ pháp nằm ở ngoài từ, phương
thức ngữ pháp chủ yếu là trật tự từ và hư từ. Cho nên có trường hợp một câu có thể
có nhiều ngữ nghĩa khác nhau tuỳ vào cách ta tách từ như thế nào, gây nhập nhằng
về ngữ nghĩa của câu. Ví dụ câu "Xoài phun thuốc sâu không ăn." có thể tách với ý
nghĩa hoàn toàn khác như sau:
Xoài / phun thuốc / sâu / không / ăn.
Xoài / phun / thuốc sâu / không / ăn.
Điều đó cho thấy, công việc tách từ trong tiếng Việt không phải là chuyện dễ
dàng, vì nó tạo ra các câu có ngữ nghĩa hoàn toàn khác nhau, gây ảnh hưởng đến chất
lượng huấn luyện mô hình học. Chính vì vậy, công việc tách từ là rất quan trọng đối
với xử lý ngôn ngữ tiếng Việt, nhất là khi giải quyết các bài toán liên quan đến ngữ
nghĩa của văn bản. Trong nghiên cứu này, chúng tôi sử dụng công cụ tách từ
UETSegmenter.
Cụ thể về hướng dẫn tách từ bằng UETSegmenter sẽ được giải thích thêm ở phần
phụ lục.
59

2.2.2. Loại bỏ hư từ và các dấu câu không cần thiết


Hư từ (stop words) là những từ xuất hiện nhiều trong ngôn ngữ tự nhiên, tuy
nhiên lại không mang nhiều ý nghĩa mà chủ yếu đóng vai trò ngữ pháp. Trong tiếng
Việt, hư tư là những từ như: để, này, kia, ..., Trong tiếng Anh là những từ như: is,
that, this, .... Có rất nhiều cách để loại bỏ hư từ nhưng có hai cách chính là:
- Dùng từ điển.
- Dựa theo tần suất xuất hiện của từ.
Trong nghiên cứu này, chúng tôi sử dụng từ điển để loại bỏ hư từ và các biểu
cảm, dấu câu không cần thiết trong câu như “?”, “!”, “=”, “)”, ….
Cụ thể về hướng dẫn loại bỏ hư từ và các dấu câu không cần thiết được nêu rõ ở
phần phụ lục.

2.3. Vector hóa dữ liệu


Như đã nói ở trên, chúng ta sẽ sử dụng Doc2Vec cho việc vector hóa dữ liệu.
Nhưng để sử dụng được, ta cần phải thực hiện một số thao tác.
Input: Doc2vec của gensim input một object LabeledSentence, gồm một tập hợp
các từ kèm theo label (id của paragraph), có format như sau:
['word1', 'word2', 'lastword'], ['label1']]
Output: Các dòng trong file data được biểu diễn thành vector n chiều (với n do
chúng ta quy định).
Bước 1: Viết class LabeledLineSentence để đọc bộ dữ liệu với định dạng txt,
xuất ra object LabaledSentence để gensim có thể hiểu.
Bước 2: Tiến hành đổ dữ liệu vào class LabaledLineSentence, class này nhập
vào một đường dẫn với key là tên file và value là prefix của các sentences trong văn
bản.
Bước 3: Xây dựng một Bảng Từ vựng (Vocabulary Table): Một tập chứa tất cả
các từ, lọc bỏ các từ trùng lặp, thực hiện một số thống kê. Chúng ta có các tham số
sau:
60

- dm (int{1,0}): lựa chọn thuật toán để huấn luyện. Nếu dm=1 thì dùng mô hình
DM, ngược lại nếu dm=0 thì sử dụng mô hình DBoW.
- dm_mean (int{1,0}): Giá trị bằng 0 thì sử dụng tổng các vector văn bản. Còn
nếu là 1 thì sử dụng giá trị trung bình.
- dm_concat (int{1,0}): Nếu là 1 thì ghép các vector văn bản lại thay vì dùng
tổng/trung bình.
- dm_tag_count (int{1,0}): Dự đoán sự liên tục của mỗi nhãn văn bản cho mỗi
văn bản, khi sử dụng chế độ dm_concat; mặc định là 1.
- window (int): khoảng cách tối đa của từ hiện tại và từ dự đoán. Tương tự
window trong Skip-gram model. Nên dùng kết hợp với DM.
- negative: Nếu > 0 , các kết quả âm sẽ được sử dụng, int là bao nhiêu sẽ xác
định có bao nhiêu từ “noise words” nên được rút ra (thường là từ 5-20).
- size (int): số chiều của vector embedded. Trong bài nghiên cứu này thì DM
với giá trị 100 – 200 và DBoW với giá trị 300 – 400 cho kết quả tối ưu.
- workers (int): Số worker threads (set bằng số core của máy).
Bước 4: Huấn luyện mô hình Doc2Vec với số vòng lặp khi huấn luyện tùy ý.
Mỗi epochs là một lần huấn luyện trên toàn bộ dữ liệu. Phần này có thể tốn rất nhiều
thời gian, tùy cấu hình máy thực hiện.
Sau khi huấn luyện, chúng ta có được các vector từ và vector văn bản.

2.4. Áp dụng các phương pháp phân lớp


Sau khi biểu diễn văn bản tiếng Việt thành dạng vector, từ các vector văn bản
trên, ta có thể sử dụng chúng để huấn luyện các bộ phân lớp sử dụng các phương pháp
phân lớp đã mô tả trong phần 1.3. Các bước được thực hiện cụ thể như sau:
Input: Các vector văn bản đã thực hiện ở phần Vector hóa dữ liệu.
Output: Tỉ lệ dự đoán chính xác của từng phương pháp phân lớp.
Bước 1: Viết hàm đếm số dòng trong file.
Bước 2: Tạo biến X_train để lưu lại các vector và biến Y_train để lưu lại các
nhãn tương ứng. Sau đó, tiến hành gán nhãn cho từng vector.
61

Bước 3: Tương tự, tạo biến X_test và Y_test với mục đích tương tự và tiến hành
gán nhãn cho từng vector.
Bước 4: Khai báo và sử dụng các thuật toán phân lớp đã nêu ở phần 1.3.
Sau khi chạy xong, chúng ta sẽ có được kết quả là tỉ lệ dự đoán chính xác nhãn
của từng phương pháp.
62

PHẦN 3: KẾT QUẢ - THẢO LUẬN

3.1. Dữ liệu thực nghiệm


Dữ liệu của chúng tôi là bộ dữ liệu VLSP 2016 [13] được cung cấp bởi dự án
VLSP (Vietname Language and Speech Processing). Dữ liệu VLSP 2016 được thu
thập từ các trang báo trực tuyến và mạng xã hội, được phân tách sẵn thành tập huấn
luyện và tập kiểm tra. Thống kê dữ liệu VLSP 2016 được trình bày trong Bảng 3.1:
Bảng 3.1. Bộ dữ liệu VLSP 2016
3

Bộ dữ liệu # tích cực # tiêu cực # trung tính


Huấn luyện 1,700 1,700 1,700
Kiểm tra 350 350 0

Cả hai tập dữ liệu đều là những đánh giá nhận xét về sản phẩm điện tử như điện
thoại, chuột máy tính, bàn phím, … được thu thập từ Facebook, VnExpress.net và
Tinhte.vn. Chúng tôi thực hiện tiền xử lý dữ liệu gồm tách từ và loại bỏ hư từ cũng
như các dấu câu không cần thiết. Sau đó, chúng tôi thu được dữ liệu như trong Bảng
3.2:
Bảng 3.2. Bộ dữ liệu VLSP 2016 sau khi tiền xử lý
4

Bộ dữ liệu # tích cực # tiêu cực # trung tính


Huấn luyện 1,675 1,675 1,675
Kiểm tra 350 350 0

3.2. Kết quả thực nghiệm và đánh giá


Sau giai đoạn tiền xử lý, dữ liệu sẽ được chạy theo hai mô hình Doc2Vec được
giới thiệu ở trên và phân lớp theo 10 phương pháp phân lớp khác nhau. Mỗi lần chạy,
chúng tôi sẽ tiến hành đánh giá hiệu suất, tốc độ huấn luyện cùng với tính chính xác
và đưa ra hướng điều chỉnh thích hợp cho chúng trong các nghiên cứu sau.
Toàn bộ quá trình chạy thực nghiệm được tiến hành trên cấu hành máy và IDE
với cấu hình như sau:
- Mã máy: ASUS UX410UQK
63

- CPU: Intel Core i5–7200U, 2.5 GHz (4 CPUs)


- SSD: 128GB
- RAM: 8GB, DDR4, 2133 MHz
- Ngôn ngữ và phiên bản sử dụng: Python 3.6 64bits
- IDE và phiên bản sử dụng: Pycharm Community 2018.1.2 64bits
Bảng 3.3.5 Kết hợp mô hình vector hóa dữ liệu với các phương pháp phân lớp
Tên Mô hình vector hóa Phương pháp phân lớp
A1 DM KNN
A2 DM Linear SVM
A3 DM RBF SVM
A4 DM Gaussian
A5 DM Decision Tree
A6 DM Random Forest
A7 DM Neural Net
A8 DM AdaBoost
A9 DM Naïve Bayes
A10 DM QDA
B1 DBoW KNN
B2 DBoW Linear SVM
B3 DBoW RBF SVM
B4 DBoW Gaussian
B5 DBoW Decision Tree
B6 DBoW Random Forest
B7 DBoW Neural Net
B8 DBoW AdaBoost
B9 DBoW Naïve Bayes
B10 DBoW QDA
64

3.2.1. Thực nghiệm để phân lớp đánh giá chủ quan và khách quan
Đầu tiên, chúng tôi phân loại các văn bản tiếng Việt để nhận biết các văn bản
có tính chủ quan và tính khách quan của văn bản. Cụ thể là, khi tiến hành thực nghiệm
phân lớp đánh giá chủ quan và đánh giá khách quan, chúng tôi dùng với số chiều
vector size là 200, mô hình Distributed Bag of Words ở mọi số vòng lặp khi huấn
luyện thì hầu như đều có hiệu suất tốt hơn so với mô hình Distributed Memory nhưng
bù lại tốc độ huấn luyện khá chậm, phương pháp phân lớp ổn định nhất là Gaussian
và Neural Net kết hợp với mô hình Distributed Bag of Words. Cụ thể được nêu rõ ở
bảng 3.4.
Bảng 3.4. Độ chính xác khi phân lớp chủ quan và khách quan (%)
6

Tên N=10 N=50 N=100 N=150 N=200


A1 63.34 65.04 66.67 70.56 70.32
A2 66.67 66.67 66.67 73.62 74.10
A3 66.57 70.09 67.34 66.67 66.67
A4 67.34 70.57 69.80 75.89 76.32
A5 65.23 67.42 67.23 69.66 68.06
A6 66.57 66.47 66.67 67.23 67.84
A7 66.67 66.85 67.61 70.21 75.46
A8 66.76 67.52 68.09 69.61 72.79
A9 64.57 63.61 61.61 67.39 64.32
A10 67.52 67.23 68.57 69.75 68.87
B1 62.23 70.76 70.76 70.19 69.42
B2 66.67 75.34 75.42 75.61 73.90
B3 67.04 66.67 66.67 66.67 65.67
B4 70.57 77.04 75.04 76.19 75.04
B5 68.09 68.95 68.47 69.80 67.05
B6 66.47 68.09 66.09 66.47 66.76
B7 66.57 76.95 74.85 74.95 76.47
65

B8 68.28 71.80 70.76 70.76 71.90


B9 65.71 65.14 65.42 65.42 66.47
B10 66.85 67.42 67.04 67.04 69.23

Nếu xét từng trường hợp với các thuật toán phân lớp và mô hình khi kết hợp
với số vòng lặp khi huấn luyện N tương ứng:
- KNN với mô hình DM, hiệu suất tăng dần cho đến khi N = 150 lần, sau đó
giảm. Còn mô hình DBoW thì độ chính xác không tăng giảm đều mà khá là
lộn xộn.
- Linear SVM thì đạt giá trị cao nhất tại mô hình DBoW với số vòng lặp huấn
luyện là 150. Mô hình DM độ chính xác cáo nhất là 74.10% và điểm giống
nhau ở hai mô hình này là độ chính xác thấp nhất đều ở lần huấn luyện N =
10.
- Phương pháp RBF SVM thì độ chính xác khá là bằng nhau, ở cả hai mô hình
thì độ chính xác trung bình ở khoảng 66.67%.
- Và cũng tương tự với phần thực nghiệm đánh giá tích cực, tiêu cực. Gaussian
là phương pháp có hiệu suất cao nhất, ở mô hình DBoW là 77.04% với N = 50
và ở mô hình DM là 76.32% với N = 200.
- Ở phương pháp Decision Tree, độ chính xác cao nhất khi dùng mô hình DM
là với 150 lần huấn luyện là 69.66%, còn DBoW cũng phải đạt 150 số vòng
lặp huấn luyện mới có được độ chính xác cao nhất với giá trị 69.80%.
- Áp dụng mô hình DM cho Random Forest thì độ chính xác tăng dần từ số vòng
lặp N = 10 cho đến N = 200. Tuy nhiên ở mô hình DBoW thì đạt độ chính xác
cao nhất khi huấn luyện 50 lần với giá trị 68.09% sau đó giảm dần đều.
- Neural Net thì khá lộn xộn ở các lần huấn luyện, phương pháp đạt hiệu suất
cao nhất ở mô hình DM khi vòng lặp đạt giá trị 250 với độ chính xác là 75.46%.
Còn mô hình DBoW thì ngoại trừ N = 10 đạt hiệu suất không cao ra thì các
lần khác đạt giá trị cao, trung bình là 75%.
66

- AdaBosst ở mô hình DBoW độ chính xác qua từng lần chạy khá cao và cân
bằng, trung bình khoảng 70%. Còn ở mô hình DM thì tăng dần đều, cao nhất
ở N = 200 (72.79%).
- Cả 2 phương pháp phân lớp Naïve Bayes và QDA ở cả hai mô hình đều cho
độ chính xác khá thấp, không có lần huấn luyện nào đạt trên 70% nhưng lại
khá đồng đều ở mức 69%.

3.2.2. Thực nghiệm để phân tích cảm xúc tích cực và tiêu cực
Bên cạnh phân lớp đánh giá tính chủ quan và khách quan, chúng tôi còn tiến
hành phân lớp trên một khía cạnh khác của văn bản, đó là tính tích cực (Positive) và
tính tiêu cực (Negative). Cụ thể khi chúng tôi tiến hành thực nghiệm, mô hình
Distributed Bag of Words với số vòng lặp khi huấn luyện ít thì lại tỏ ra khá chậm và
độ chính xác không cao bằng mô hình Distributed Memory. Nhưng khi số vòng lặp
khi huấn luyện càng nhiều (trên 100 lần) cũng như tăng số lượng chiều của vector
(trên 200 chiều) thì kết quả trở nên tốt hơn. DBoW lúc này hiệu quả hơn hẳn về mặt
tốc độ huấn luyện cũng như cải thiện rất nhiều về độ chính xác cao (cao nhất là
81.12% nếu tính theo độ chính xác và 81.14% nếu tính theo F1) và DBoW cho thấy
khả năng ổn định là tốt hơn DM rất nhiều. Cụ thể được thể hiện qua Bảng 3.5.
Bảng 3.5. Độ chính xác khi phân lớp tích cực và tiêu cực (%)
7

Tên N=10 N=50 N=100 N=150 N=200


A1 59.23 63.33 63.20 61.27 62.72
A2 51.31 72.70 69.30 71.72 70.04
A3 63.76 59.39 53.36 52.48 52.23
A4 65.33 74.45 71.11 66.86 50.11
A5 62.40 64.42 59.40 56.47 57.07
A6 57.95 62.40 58.63 55.32 62.36
A7 59.33 74.60 71.20 72.84 72.68
A8 63.24 65.37 67.01 66.78 66.07
A9 58.37 58.23 55.42 52.94 53.29
67

A10 55.69 57.76 57.38 57.70 59.31


B1 52.36 63.92 69.23 70.20 69.57
B2 54.13 70.33 74.37 75.23 75.14
B3 53.56 60.14 53.42 52.67 52.14
B4 64.37 74.21 78.21 81.12 79.13
B5 52.17 63.70 67.96 72.22 67.86
B6 53.72 60.05 64.47 62.18 60.24
B7 54.92 74.36 76.96 79.87 79.05
B8 52.77 68.96 70.31 75.32 71.27
B9 53.63 64.54 62.01 65.66 64.66
B10 55.43 66.53 63.97 68.47 68.42

Nếu xét từng trường hợp với các thuật toán phân lớp và mô hình khi kết hợp
với số vòng lặp khi huấn luyện N tương ứng:
- Đầu tiên là KNN với mô hình DBoW, hiệu suất tăng dần cho đến khi số vòng
lặp là 150 lần, sau đó lại giảm dần. Ở mô hình DM thì độ chính xác tăng giảm
không đồng đều, đạt cao nhất tại lần huấn luyện N = 50 với kết quả là 63.33%.
- Với Linear SVM thì đạt giá trị cao nhất tại mô hình DBoW và số vòng lặp
huấn luyện là 150. Các lần khác kết quả chênh lệch thất thường, mô hình DM
độ chính xác cao nhất chỉ là 72.70%.
- RBF SVM thì hiệu suất thấp (cao nhất chỉ đạt 63.76% trong mô hình DM khi
huấn luyện 10 lần), nên chúng tôi đang xem xét lại và tìm cách cải thiện dữ
liệu để nâng cao độ chính xác.
- Gaussian là phương pháp có hiệu suất cực cao, ở mô hình DBoW tăng dần đến
khi N = 150 thì giảm, độ chính xác cao nhất là 81.12%, còn ở mô hình DM thì
cũng tăng sau đó giảm dần khi đạt N = 50.
- Ở phương pháp Decision Tree, độ chính xác khá thấp và giảm dần từ lần chạy
thứ hai khi dùng mô hình DM, còn mô hình DBoW thì chênh lệch lên xuống
khá thấp, độ chính xác trung bình vào khoảng 65%.
68

- Áp dụng mô hình DBoW cho Random Forest thì cũng tăng dần đến ngưỡng N
= 100 thì lại giảm dần. Tuy nhiên ở mô hình DM thì đạt độ chính xác cao nhất
khi huấn luyện 50 lần.
- Neural Net thì kết quả khá giống nhau ở 2 mô hình, đều đạt trung bình 70%
và thấp nhất với số vòng lặp N=10 với độ chính xác trung bình của cả hai mô
hình chỉ đạt 55%.
- AdaBoost ở mô hình DM khá là đặt biệt khi tất cả kết quả đầu khá bằng nhau
khoảng 66%. Trong khi đó ở DBoW thì nổi bật là N=150 đạt độ chính xác cao
hơn hẳn so với phần còn lại.
- Đáng tiếc là phương pháp thông dụng là Naïve Bayes lại đạt kết quả khá thấp
ở cả 2 mô hình. (DM thì không quá 59% và DBoW thì 65.66% với N = 150 là
độ chính xác cao nhất).
- QDA cho kết quả tương tự với phương pháp Naïve Bayes nhưng hiệu suất
nhỉnh hơn đôi chút.
Độ chính xác của các mô hình vector hóa dữ liệu kết hợp với các phương pháp
phân lớp ở bảng trên được chúng tôi lấy giá trị cao nhất khi tiến hành huấn luyện 50
lần với mỗi giá trị N (số vòng lặp khi huấn luyện) lần lượt là 10, 50, 100, 150 và 200.
Chúng tôi nhận thấy rằng có một sự không ổn định nhỏ trong quá trình huấn luyện
dữ liệu, nguyên do nằm ở giải thuật Doc2Vec. Mô hình yêu cầu chúng ta phải có một
lượng lớn dữ liệu đầu vào cho quá trình huấn luyện vector và vector hóa dữ liệu, tuy
nhiên với số lượng là 5025 bình luận ở bộ dữ liệu huấn luyện (sau khi đã tiền xử lý)
và 700 bình luận ở bộ dữ liệu kiểm tra là chưa đủ lớn. Điều đó dẫn đến độ chính xác
của các phương pháp phân lớp sẽ cho kết quả có sai số nhất định, tuy nhiên con số
này không đáng kể. Điều này có thể giảm thiểu bằng cách giữ số chiều vector ở mức
đủ lớn. Tuy nhiên, khi số chiều vector tăng lên thì mô hình Distributed Memory vẫn
không cải thiện đáng kể về hiệu suất và độ ổn định, trong khi đó mô hình Dsitributed
Bag of Words đã đạt được độ chính xác cao nhất trong quá trình thực nghiệm:
81.12%. Cụ thể được thể hiện qua bảng 3.6, chúng tôi ghi nhận lại độ chính xác của
hai phương pháp phân lớp có độ chính xác cao nhất là phương pháp Gaussian và
69

phương pháp Neural Net khi kết hợp với hai mô hình Distributed Bag of Words và
Distributed Memory cùng số vòng lặp khi huấn luyện N = 150 qua từng lần chạy thực
nghiệm khi số chiều với giá trị size là 100 và 400:
Bảng 3.6.8 Khảo sát sự ổn định của độ chính xác khi huấn luyện (%)
Tên Số chiều size = 100 Số chiều size = 400
Lần 1 Lần 2 Lần 3 Lần 4 Lần 5 Lần 1 Lần 2 Lần 3 Lần 4 Lần 5
A4 62.57 63.78 62.30 66.86 60.38 62.42 63.34 67.58 63.32 64.23
A7 63.46 65.23 60.57 72.84 62.96 60.12 59.73 62.34 60.04 61.13
B4 75.71 73.87 78.45 76.03 79.76 78.42 79.81 78.87 81.12 79.22
B7 75.72 74.57 77.53 76.57 78.02 78.36 78.57 79.23 80.02 79.04

Bên cạnh đó, chúng tôi đã tiến hành so kết quả với hai nghiên cứu khác cũng
dựa trên bộ dữ liệu VLSP 2016 [13] vào năm 2016. Trong bài viết này, các tác giả đã
tiến hành thực nghiệm dựa trên nhiều phương pháp khác nhau như SVM, MaxEnt,
Naïve Bayes, … kết hợp với các đặc trưng như TF-IDF, N-Gram, VietSentiWordNet,
… và kết quả đạt được tốt nhất của là 80.05% khi kết hợp giữa các phương pháp
Perceptron, Max Ent và SVM với đặc trưng N-Gram (1,2,3) và xây dựng một bộ từ
điển gồm các từ và cụm từ cảm xúc [34]. Chúng tôi tiến hành sử dụng công thức được
đề cập trong nghiên cứu [13] để tính các giá trị Precision (P), Recall (R) và F1 của
tích cực và tiêu cực cùng với F1 trung bình. Kết quả cụ thể được thể hiện ở bảng 3.7.
Đầu tiên ta có các quy ước sau: Đặt A và B là tập hợp các câu mà hệ thống dự
đoán là POS và tập hợp các câu được gán nhãn là POS. Các giá trị Precision, Recall
và F1 được tính như sau (tương tự với các câu NEG). Các công thức tính được sử
dụng:
|𝐴∩𝐵|
- Precision =
|𝐴|
|𝐴∩𝐵|
- Recall =
|𝐵|
2 ×𝑃𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 × 𝑅𝑒𝑐𝑎𝑙𝑙
- F1 =
𝑃𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 + 𝑅𝑒𝑐𝑎𝑙𝑙
70

𝑃𝑂𝑆_𝐹1 + 𝑁𝐸𝐺_𝐹1
- Average_F1 =
2
Bảng 3.7.9 Hiệu suất của các phương pháp phân lớp cảm xúc (đo bằng F1)
Tên Positive Negative Average
Precision Recall F1 Precision Recall F1 F1
A1 62.59 71.71 66.84 66.89 57.14 61.63 64.24
A2 70.80 78.29 74.36 75.72 67.71 71.49 72.92
A3 93.33 4.00 7.67 50.95 99.71 67.44 37.56
A4 71.20 77.71 74.32 75.47 68.57 71.86 73.09
A5 60.92 60.57 60.74 60.80 61.14 60.97 60.86
A6 54.82 61.71 58.06 56.21 49.14 52.44 55.25
A7 77.51 72.86 75.11 74.39 78.86 76.56 75.84
A8 69.86 72.86 71.33 71.64 68.57 70.07 70.70
A9 54.63 70.86 61.69 58.54 41.14 48.32 55.01
A10 60.61 68.57 64.34 63.82 55.43 59.33 61.84
B1 64.36 85.14 73.31 78.06 52.86 63.03 68.17
B2 75.14 76.00 75.57 75.72 74.86 75.29 75.43
B3 90.00 5.14 9.73 51.18 99.43 67.57 38.65
B4 80.79 81.71 81.25 81.50 80.57 81.03 81.14
B5 78.12 80.57 79.32 79.94 77.43 78.66 78.99
B6 60.11 62.86 61.45 61.08 58.29 59.65 60.55
B7 81.82 77.14 79.41 78.38 82.86 80.56 79.98
B8 80.37 74.86 77.51 76.47 81.71 79.01 78.26
B9 64.66 70.57 67.49 67.61 61.43 64.37 65.93
B10 70.63 64.57 67.46 67.37 73.14 70.14 68.80

Ngoài ra, chúng tôi cũng tiến hành so kết quả với nghiên cứu của Vo và cộng
sự [19] được công bố vào năm 2017. Trong nghiên cứu này, Vo và các cộng sự đã sử
dụng mô hình đa luồng LSTM-CNN để phân tích cảm xúc trong câu tiếng Việt. Các
71

nhà nghiên cứu đã đạt được kết quả cụ thể như sau, với phương pháp phân lớp SVM
là 56.27%, phương pháp CNN là 59.02% và phương pháp LSTM là 56.63%, tổng thể
kết quả nghiên cứu của nhóm tác giả đạt 59.61% với bộ dữ liệu VLSP 2016. Như
vậy, so các kết quả trên, phương pháp chúng tôi đề xuất hiện đang cho kết quả tốt
nhất trên dữ liệu VLSP 2016. Từ đó, chúng ta có thể kết luận là việc biểu diễn văn
bản tiếng Việt bằng Doc2Vec để đưa vào các bộ học phân lớp là hợp lý và đã cho kết
quả khá cạnh tranh so với các phương pháp hiện thời cho nhiệm vụ phân tích cảm
xúc. Việc tổng hợp so sánh các phương pháp được trình bày trong bảng 3.8.
Bảng 3.8. So sánh kết quả giữa phương pháp đề xuất với các phương pháp trước
10

Phương pháp Precision Recall F1


MaxEnt + N-Gram [34] 77.87% 82.86% 80.05%
LTSM-CNN [19] 62.70% 65.60% 63.70%
DBoW + Gaussian 81.15% 81.14% 81.14%
72

PHẦN 4: KẾT LUẬN - ĐỀ NGHỊ

4.1. Kết luận

4.1.1 Những kết quả đạt được


Sau một thời gian tìm hiểu và nghiên cứu, chúng tôi đã áp dụng mô hình giải
quyết bài toán gồm các bước: Tiền xử lý dữ liệu, vector hóa dữ liệu và phân loại cảm
xúc bằng các phương pháp phân lớp đã đạt được kết quả khả quan. Phương pháp
vector hóa dữ liệu Doc2Vec khi kết hợp với các phương pháp phân lớp cảm xúc mà
cụ thể là mô hình Distributed Bag of Words kết hợp với phương pháp Gaussian đã
cho hiệu suất 81.14% (tính theo F1), kết quả tốt nhất khi thử nghiệm trên bộ dữ liệu
VLSP 2016.
Để làm được điều đó, chúng tôi đã hoàn tất những việc như sau:
- Tìm hiểu về các đặc điểm của ngôn ngữ tiếng Việt, về xử lý ngôn ngữ tự nhiên
và xử lý ngôn ngữ tiếng Việt. Tìm hiểu, phân tích và xây dựng thành công mô
hình giải quyết bài toán phân lớp cảm xúc người dùng với định tính “Xác định
tính tích cực – tiêu cực của văn bản”.
- Nghiên cứu và áp dụng phương pháp vector hóa dữ liệu Doc2Vec.
- Nghiên cứu các phương pháp tiền xử lý tiếng Việt nhằm cải thiện hiệu suất khi
tiến hành huấn luyện.
- Nghiên cứu và áp dụng các phương pháp phân lớp và kết hợp với hai mô hình
vector hóa dữ liệu kể trên để chọn ra được phương pháp máy học tốt nhất cho
phân lớp cảm xúc người dùng.

4.1.2. Tính mới của đề tài


Đề tài đã áp dụng một phương pháp mới trên dữ liệu tiếng Việt, tức là
Doc2Vec, cho bước vector hóa dữ liệu, khác với các phương pháp Word2Vec, N-
Gram, … từng được công bố trong các nghiên cứu khoa học tại Việt Nam trước đó.
Phương pháp đã cải thiện về mặt hiệu suất của phân tích cảm xúc dưới dạng
phân lớp nhị phân so với các nghiên cứu trước đó trên văn bản tiếng Việt. Chúng ta
73

tiếp cận gần hơn đến việc giải quyết bài toán phân lớp cảm xúc người dùng phức tạp
hơn. Từ đó, chúng ta có thêm nhiều công cụ để phát triển trong thời đại Cách mạng
4.0 ngày nay một cách dễ dàng và hiệu quả hơn, giúp các doanh nghiệp có thể khai
thác và sử dụng lượng thông tin mà người dùng tạo ra như các bình luận, đánh giá về
các sản phẩm doanh nghiệp nhằm nâng cao khả năng cạnh tranh với đối thủ cùng lĩnh
vực và thích nghi với môi trường kinh doanh thường xuyên có biến động. Những
thông tin này không chỉ hữu dụng trong tiếp thị, xếp hạng đánh giá sản phẩm mà còn
hỗ trợ trong việc nhận biết vấn đề để xây dựng và phát triển sản phẩm.

4.1.3. Những hạn chế


Cả hai mô hình của phương pháp vector hóa dữ liệu Doc2Vec là Distributed
Bag of Words và Distributed Memory đều cần một lượng lớn dữ liệu đầu vào. Nếu
dữ liệu ít hoặc thiếu cân bằng, độ chính xác khi tiến hành các phương pháp phân lớp
sẽ bị ảnh hưởng và không ổn định.

4.1.4. Hướng phát triển


Đề tài có thể áp dụng thêm một số phương pháp trong bước tiền xử lý khác
giúp cải thiện hiệu suất như Pointwise Mutual Information (PMI) và áp dụng thêm
các thuật toán phân lớp khác hoặc tối ưu các thuât toán phân lớp hiện có để mô hình
giải quyết bài toán phân lớp cảm xúc người dùng hiệu quả hơn.
Trong nghiên cứu tiếp theo, chúng tôi cũng sẽ tiếp tục nghiên cứu các phương
pháp cải thiện hiệu suất phân loại cảm xúc trong tiếng Việt. Thêm vào đó, chúng tôi
sẽ thu thập thêm dữ liệu thực nghiệm để ổn định hiệu suất hoạt động của biểu diễn
văn bản bằng Doc2Vec. Song song với việc này, chúng tôi dự định tiến hành thực
nghiệm trên bộ dữ liệu phong phú hơn về số lượng, thể loại và khía cạnh của ý kiến
người dùng.

4.2. Kiến nghị


Phân tích cảm xúc nói riêng và xử lý ngôn ngữ tự nhiên nói chung là một trong
những nhánh nghiên cứu phức tạp, nhưng lợi ích mà nó mang lại là rất lớn trong cuộc
74

Cách mạng công nghệ 4.0 tại Việt Nam. Nếu đề tài nhận được đầu tư và được phát
triển tốt có thể áp dụng rộng rãi cho nhiều lĩnh vực như kinh doanh, giáo dục, giải trí,
… vì tất cả các lĩnh vực này đều cần đến một mô hình để giải quyết bài toán phân lớp
cảm xúc người dùng (khách hàng, học sinh, người sử dụng dịch vụ, …) hiệu quả như
đề tài.
75

TÀI LIỆU THAM KHẢO


[1]. Giáo trình “Xử lý ngôn ngữ tự nhiên”, Đinh Điền, NXB Đại học Quốc gia –
HCM, năm 2006.
[2]. N.V. Xtankêvich, Các loại hình ngôn ngữ, Nhà xuất bản Đại học và trung học
chuyên nghiệp Hà Nội.
[3]. http://www.vietlex.com, truy cập 18-06-2018.
[4]. https://streetcodevn.com, truy cập 18-06-2018.
[5]. https://ongxuanhong.wordpress.com/, truy cập 18-06-2018.
[6]. Quoc Le and Tomas Mikolov, “Distributed Representations of Sentences and
Documents.” Proc. ICML’14, vol. 32, tr. 1188-1196, 2014.
[7]. Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean. “Efficient
Estimation of Word Representations in Vector Space.” CoRR 2013.
[8]. Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, and Jeffrey
Dean. “Distributed Representations of Words and Phrases and their
Compositionality.” Proc. NIPS, tr. 3111-3119, 2013.
[9]. Daniel Jurafsky and James H. Martin. “Speech and language processing: an
introduction to natural language processing, computational linguistics, and
speech recognition.” 1st edition, 2000.
[10]. Binh Thanh Kieu, Son Bao Pham. “Sentiment Analysis for Vietnamese.” Proc.
KSE’10, tr. 152-157, 2010.
[11]. Nguyen Thi Duyen, Ngo Xuan Bach, and Tu Minh Phuong, “An Empirical
Study on Sentiment Analysis for Vietnamese.” Proc. ATC’14, tr. 309-314,
2014.
[12]. Bo Pang và Lillian Lee. “A Sentimental Education: Sentiment Analysis Using
Subjectivity Summarization Based on Minimum Cuts.” Proc. ACL’04, tr. 271-
278, 2008.
[13]. Le Anh Cuong, Nguyen Thi Minh Huyen, and Nguyen Viet Hung. “Report on
Sentiment Analysis Evaluation Campaign: Data and Systems.” Proc. VLSP
2016, 2016.
76

[14]. Vi Ngo Van, Minh Hoang Van, and Tam Nguyen Thanh. “Sentiment Analysis
for Vietnamese using Support Vector Machines with application to Facebook
comments.” Proc. VLSP 2016.
[15]. Thien Khai Tran and Tuoi Thi Phan. “Computing Sentiment Scores of Verb
Phrases for Vietnamese.” Proc. ROCLING’16, tr. 204-213, 2016.
[16]. Bo Pang and Lillian Lee. “Opinion mining and Sentiment Analysis.”
Foundations and Trends in Information Retrieval, vol 1-2, tr 1-135, 2007.
[17]. Boyan Bonev, Gema Ram´ırez-Sanchez and Sergio Ortiz Rojas. “Opinum:
statistical sentiment analysis for opinion classification.” Proc. Workshop
Comput. Approaches to Subjectivity and Sentiment Analysis, tr. 29-37, 2012.
[18]. Annie Zaenen, Raphael Hoffmann, “Supporting rule-based representations
with corpus-derived lexical information.” Proc. FAM-LbR – NAACL
HLT’10, tr. 114-121, 2010.
[19]. Quan Hoang Vo, Huy Tien Nguyen, Bac Le, and Minh Le Nguyen, “Multi-
channel LSTM-CNN model for Vietnamese sentiment analysis.” Proc.
KSE’17, tr. 24-29, 2017.
[20]. Manabu Sassano, “Virtual Examples for Text Classification with Support
Vector Machines.” Proc. EMNLP’03, tr. 208-215, 2003.
[21]. Chinnappa Guggilla, Tristan Miller and Iryna Gurevych, “CNN and LSTM-
based Claim Classification in Online User Comments.” Proc. COLING’16, tr.
2740-2751, 2016.
[22]. Yannis Stavrakas, Giannis Nikolentzos, Polykarpos Meladianos, Franc¸ois
Rousseau, and Michalis Vazirgiannis. “Multivariate Gaussian Document
Representation from Word Embeddings for Text Categorization.” Proc.
EACL’17, vol 2, tr. 450-455, 2017.
[23]. Kohei Ozaki and Masashi Shimbo and Mamoru Komachi and Yuji
Matsumoto. “Using the Mutual k-Nearest Neighbor Graphs for Semi-
supervised Classification of Natural Language Data.” Proc. CoNLL’11, tr.
154-162, 2011.
77

[24]. Sameer Pradhan, Wayne Ward, Kadri Hacioglu, and James H. Martin,
“Shallow Semantic Parsing using Support Vector Machines.” Proc. NAACL
HLT’04, tr. 233-240, 2004.
[25]. Trevor Cohn, Daniel Preotiuc-Pietro and Neil Lawrence. “Gaussian Processes
for Natural Language Processing.” Proc. ACL’14 (Tutorial Abstracts), tr. 1-
3, 2014.
[26]. David M. Magerman Bolt Beranek and Newman Inc. “Statistical Decision-
Tree Models for Parsing.” Proc. ACL’95, tr. 276-283, 1995.
[27]. Peng Xu and Frederick Jelinek. “Random Forests in Language Modeling.”
Proc. EMNLP’04, 2004.
[28]. Nal Kalchbrenner, Edward Grefenstette and Phil Blunsom, “A Convolutional
Neural Network for Modelling Sentences.” Proc. ACL’14, vol 1, tr. 655-665,
2014.
[29]. Xavier Carreras, Lluis Marquer and Lluis Padro, “Named Entity Extraction
using AdaBoots.” Proc. COLING’02, vol 20, tr. 1-4, 2002.
[30]. Karl-Michael Schneider, “A Comparison of Event Models for Naive Bayes
Anti-Spam E-Mail Filtering.” Proc. EACL’03, vol 1, tr. 307-314, 2003.
[31]. S. Feldman, M. Marin, J. Medero, and M. Ostendorf, “Classifying Factored
Genres with Part-of-Speech Histograms.” Proc. NAACL HLT’09, tr. 173-
176, 2009.
[32]. Lyons John. Natural Language and Universal Grammar. New York:
Cambridge University Press. ISBN 978-0521246965. Tr. 68–70, 1991.
[33]. https://en.wikipedia.org/wiki/Natural_language_processing, truy cập vào
ngày 18-6-2018.
[34]. Quynh-Trang Thi Pham, Xuan-Truong Nguyen, Van-Hien Tran, Thi-Cham
Nguyen, Mai-Vu Tran. “Dsktlab: Vietnamese sentiment analysis for product
reviews.” Proc. VLSP 2016, tr. 42-44, 2016.
78

[35]. Ha, Quang-Thuy; Vu, Tien-Thanh; Pham, Huyen-Trang and Luu, Cong-
To. “An upgrading feature-based opinion mining model on Vietnamese
product reviews.” Proc. AMT'11, tr. 173–185, 2011.
[36]. Ngoc Minh Le, Bich Ngoc Do, Vi Duong Nguyen, and Thi Dam Nguyen.
“VNLP An Open Source Framework for Vietnamese Natural Language
Processing.” Proc. SoICT’13, tr. 88-93. 2013.
[37]. Dang-Hung Phan and Tuan-Dung Cao. “Applying skip-gram word estimation
and SVM-based classification.” Proc. SoICT’14, tr. 232-239. 2014.
[38]. Hong Nam Nguyen, Thanh Le, Hai Son Le, and Tran Vu Pham. “Domain
Specific Sentiment Dictionary for VietNamese Text.” Proc. MIWAI 2014, tr.
136-148. 2014.
[39]. Hai Son Le, Thanh Van Le and Tran Vu Pham. “Aspect Analysis for Opinion
Mining of Vietnamese Text.” Proc. ACOMP’15, tr. 118-123. 2015.
[40]. Ngo Xuan Bach, Pham Duc Van, Nguyen Dinh Tai, and Tu Minh Phuong.
“Mining Vietnamese Comparative Sentences for Sentiment Analysis.” Proc.
KSE’15, tr. 162-167. 2015.
[41]. Duc-Hong Pham, Anh-Cuong Le và Thi-Kim-Chung Le. “Learning Semantic
Representations for Rating Vietnamese Comments.” Proc. KSE’16, tr. 193-
198. 2016.
[42]. Son Trinh, Luu Nguyen, Minh Vo and Phuc Do. “Lexicon-Based Sentiment
Analysis of Facebook Comments in Vietnamese Language.” Proc. Recent
Developments in Intelligent Information and Database Systems, tr. 263-276.
2016.
[43]. Vo Ngoc Phu, Vo Thi Ngoc Chau, Vo Thi Ngoc Tran, and Nguyen Duy Dat.
“A Vietnamese adjective emotion dictionary based on exploitation of
Vietnamese language characteristics.” Artificial Intelligence Review, 50:1, tr.
93-159. 2018.
79

[44]. Thanh Hung Vo, Thien Tin Nguyen, Hoang Anh Pham and Thanh Van Le.
“An Efficient Hybrid Model for Vietnamese Sentiment Analysis.” Proc.
ACIIDS’17, tr. 227-237. 2017.
[45]. Son Trinh, Luu Nguyen and Minh Vo. “Combining Lexicon-Based and
Learning-Based Methods for Sentiment Analysis for Product Reviews in
Vietnamese Language.” Proc. ICIS’17, tr. 57-75. 2017.
[46]. Tran Sy Bang and Virach Sornlertlamvanich. “Sentiment Classification for
Hotel Booking Review Based on Sentence Dependency Structure and Sub-
Opinion Analysis.” IEICE Trans. Info. Sys.,vol. E101-D:4, tr.909-916. 2018.
1

PHỤ LỤC A: DOWNLOAD


1. JDK
http://www.oracle.com/technetwork/java/javase/downloads/index.html
2. Python
https://www.python.org/downloads/
3. Pycharm
https://www.jetbrains.com/pycharm/download/
4. Ngữ liệu VLSP 2016 năm 2016
http://vlsp.org.vn/resources-vlsp2016
5. UETSegmenter
https://github.com/phongnt570/UETsegmenter
2

PHỤ LỤC B: SOURCE CODE

1. Tách từ bằng công cụ UETSegmenter


- Ở đây, chúng tôi sử dụng công cụ tách từ UETSegmenter cùng với bộ dữ liệu
“VLSP 2016 Training Data” để làm ví dụ. Đường dẫn tải đã được đề ở phụ
lục. Bộ dữ liệu huấn luyện (Traning Data) gồm 3 tệp như hình:

- Nội dung của tệp khi chưa tách từ:


3

- Sau khi đã tải bộ dữ liệu và công cụ, chúng tôi giải nén tất cả và để vào một
thư mục như hình bên dưới:

Trong đó:
o UETsementer-master là thư mục chính của công cụ
o VLSP2016 là thư mục đầu vào chứa dữ liệu cần được tách từ
(INPUT)
o VLSP2016_WS là thư mục đầu ra chứa dữ liệu sau khi được tách từ
(OUTPUT)
- Bật Command Prompt lên
4

- Truy cập đến folder chứa các file với câu lệnh cd + Tên thư mục:

- Sử dụng câu lệnh “java -jar uetsegmenter.jar -r seg -m models\ -i


VLSP2016 -o VLSP2016_WS” với VLSP2016 là đầu vào input dưới dạng
thư mục và VLSP2016_WS là đầu ra output dưới dạng thư mục:
5

- Sau khi tách từ, chúng tôi được cái tệp seg trong thư mục đầu ra như hình:

- Dữ liệu sau khi được tách từ:

Tương tự làm với bộ dữ liệu thử nghiệm (Test Data)


6

2. Tách hư từ và dấu câu bằng ngôn ngữ Python trên Pycharm


Ở đây, chúng tôi ví dụ trên tệp “SA-training_negative.seg”. Chúng tôi tiến
hành từng bước như đã nếu ở phần 2.2.2
### Tao danh sach cac hu tu va danh sach cac dau cau
f1 = open("D:\stopwords.txt", mode='r', encoding='utf-8')
f2 = open("D:\marks.txt",mode='r')
stopwords_list = []
for line in f1:
w = line.split()
for i in w:
stopwords_list.append(i)
marks_list = []
for line in f2:
w = line.split()
for i in w:
marks_list.append(i)

#tach hu tu
with open ("D:/UETsegmenter-master/VLSP2016_WS/SA-
training_negative.seg",mode='r', encoding='utf-8') as fi:
f6 = open('D:/UETsegmenter-
master/VLSP2016_WS/STOPWORDS/NEGATIVE.txt', mode='w',
encoding='utf-8')
content = []
for line in fi:
content.append(line)
for word in line.splitlines():
if word in stopwords_list:
continue
7

else:
word = word.replace('\n\n','\n')
f6.write(word)
f6.write("\n")
fi.close()
#tach dau cau va xoa khoang trang:
with open('D:/UETsegmenter-
master/VLSP2016_WS/STOPWORDS/NEGATIVE.txt', mode='r',
encoding='utf-8') as fi:
f9 = open('D:/UETsegmenter-
master/VLSP2016_WS/STOPMARKS/NEGATIVE_CHUAN.txt', 'w',
encoding='utf-8')
content = []
for line in fi:
if not line.isspace():
content.append(line)
line = line.replace('\n\n', '\n')
for word in line:
if word in marks_list:
continue
else:
f9.write(word)
fi.close()

Tương tự, tiếp tục tiến hành trên các dữ liệu còn lại.

Trước khi tách hư từ và dấu câu:


8

Sau khi tách hư từ và dấu câu:


9

3. Huấn luyện dữ liệu bằng ngôn ngữ Python trên Pycharm

# gensim modules
from gensim import utils
from gensim.models.doc2vec import LabeledSentence
from gensim.models import Doc2Vec
# numpy
import numpy as np
# classifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.metrics import confusion_matrix
from operator import itemgetter
from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis
from sklearn.ensemble import AdaBoostClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.gaussian_process import GaussianProcessClassifier
from sklearn.gaussian_process.kernels import RBF
from sklearn.naive_bayes import GaussianNB
from sklearn.neighbors import KNeighborsClassifier
from sklearn.neural_network import MLPClassifier
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
# random, itertools, matplotlib
import random
import itertools
import matplotlib.pyplot as plt

class LabeledLineSentence(object):
def __init__(self, sources):
self.sources = sources

flipped = {}
for key, value in sources.items():
if value not in flipped:
flipped[value] = [key]
else:
raise Exception('Non-unique prefix encountered')

def __iter__(self):
for source, prefix in self.sources.items():
with utils.smart_open(source) as fin:
for item_no, line in enumerate(fin):
10

yield LabeledSentence(utils.to_unicode(line).split(), [prefix +


'_%s' % item_no])
def to_array(self):
self.sentences = []
for source, prefix in self.sources.items():
with utils.smart_open(source) as fin:
for item_no, line in enumerate(fin):

self.sentences.append(LabeledSentence(utils.to_unicode(line).split(), [prefix
+ '_%s' % item_no]))
return self.sentences

def sentences_perm(self):
shuffled = list(self.sentences)
random.shuffle(shuffled)
return shuffled

sources = {
#Bo cac du lieu gom ca file train va file test
'D:/NCKH/Data/VLSP/TRAIN16_NEG.txt': 'TRAIN16_NEG',
'D:/NCKH/Data/VLSP/TRAIN16_POS.txt': 'TRAIN16_POS',
'D:/NCKH/Data/VLSP/TRAIN16_NEU.txt': 'TRAIN16_NEU',
'D:/NCKH/Data/VLSP/TEST16_NEG.txt': 'TEST16_NEG',
'D:/NCKH/Data/VLSP/TEST16_POS.txt': 'TEST16_POS',}

sentences = LabeledLineSentence(sources)
#model = Doc2Vec(dm=1, dm_mean=0, dm_concat=0, dm_tag_count=0,
size=100, window=10, negative=5, hs=0, min_count=1, workers=7) #DM
#model = Doc2Vec(dm=0, dm_mean=1, dm_concat=1, dm_tag_count=1,
size=400, window=10, negative=5, hs=0, min_count=1, workers=7)
#DBOW
model.build_vocab(sentences.to_array())
model.train(sentences.sentences_perm(),
total_examples=model.corpus_count, epochs=200)

# dem so dong co trong file text


def rawcount(filename):
f = open(filename, 'rb')
lines = 0
buf_size = 1024 * 1024
read_f = f.raw.read

buf = read_f(buf_size)
11

while buf:
lines += buf.count(b'\n')
buf = read_f(buf_size)
return lines+1

X_train =
np.zeros((rawcount("D:/NCKH/Data/VLSP/TRAIN16_NEG.txt")+rawco
unt("D:/NCKH/Data/VLSP/TRAIN16_POS.txt"), 100))
y_train =
np.zeros((rawcount("D:/NCKH/Data/VLSP/TRAIN16_NEG.txt")+rawco
unt("D:/NCKH/Data/VLSP/TRAIN16_POS.txt")))

for j in range(rawcount("D:/NCKH/Data/VLSP/TRAIN16_POS.txt")):
prefix_train_pos = 'TRAIN16_POS_' + str(j)
X_train[j] = model.docvecs[prefix_train_pos]
y_train[j] = 1
for i in range(rawcount("D:/NCKH/Data/VLSP/TRAIN16_NEG.txt")):
prefix_train_neg = 'TRAIN16_NEG_' + str(i)
X_train[rawcount("D:/NCKH/Data/VLSP/TRAIN16_POS.txt")+ i] =
model.docvecs[prefix_train_neg]
y_train[rawcount("D:/NCKH/Data/VLSP/TRAIN16_POS.txt") + i] = 0

print(X_train)
print(y_train)

X_test =
np.zeros((rawcount("D:/NCKH/Data/VLSP/TEST16_POS.txt")+rawcount
("D:/NCKH/Data/VLSP/TEST16_NEG.txt"), 100))
y_test =
np.zeros((rawcount("D:/NCKH/DATN/Data/VLSP/TEST16_POS.txt")+r
awcount("D:/NCKH/Data/VLSP/TEST16_NEG.txt")))

for i in range(rawcount("D:/NCKH/Data/VLSP/TEST16_POS.txt")):
prefix_test_pos = 'TEST16_POS_' + str(i)
X_test[i] = model.docvecs[prefix_test_pos]
y_test[i] = 1
for j in range(rawcount("D:/NCKH/Data/VLSP/TEST16_NEG.txt")):
prefix_test_neg = 'TEST16_NEG_' + str(j)
X_test[rawcount("D:/NCKH/Data/VLSP/TEST16_POS.txt") + j] =
model.docvecs[prefix_test_neg]
12

y_test[rawcount("D:/NCKH/Data/VLSP/TEST16_POS.txt") + j] = 0

names = ["Nearest Neighbors", "Linear SVM", "RBF SVM",


"Gaussian Process",
"Decision Tree", "Random Forest", "Neural Net", "AdaBoost",
"Naive Bayes", "QDA", "Logistic"]

classifiers = [
KNeighborsClassifier(3),
SVC(kernel="linear", C=0.025),
SVC(gamma=2, C=1),
GaussianProcessClassifier(1.0 * RBF(1.0), warm_start=True),
DecisionTreeClassifier(max_depth=5),
RandomForestClassifier(max_depth=5, n_estimators=10,
max_features=1),
MLPClassifier(alpha=1),
AdaBoostClassifier(),
GaussianNB(),
QuadraticDiscriminantAnalysis(),
LogisticRegression()]

results = {}
for name, clf in zip(names, classifiers):
print ("Training " + name + " classifier...")
clf.fit(X_train, y_train)

def plot_confusion_matrix(cm, classes,


normalize=False,
title='Confusion matrix',
cmap=plt.cm.Blues):
plt.imshow(cm, interpolation='nearest', cmap=cmap)
plt.title(title)
plt.colorbar()
tick_marks = np.arange(len(classes))
plt.xticks(tick_marks, classes, rotation=45)
plt.yticks(tick_marks, classes)

if normalize:
cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
13

print("Normalized confusion matrix")


else:
print('Confusion matrix, without normalization')

thresh = cm.max() / 2.
for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
plt.text(j, i, cm[i, j],
horizontalalignment="center",
color="white" if cm[i, j] > thresh else "black")

plt.tight_layout()
plt.ylabel('True label')
plt.xlabel('Predicted label')

for name, clf in zip(names, classifiers):


print("Classifier: " + name)
print ('Accuracy', clf.score(X_test, y_test))
y_pred = clf.predict(X_test)
cm = confusion_matrix(y_test, y_pred, labels=[0, 1])
plot_confusion_matrix(cm, classes=['neg', 'pos'])
plt.show();

You might also like