Professional Documents
Culture Documents
Phân Tích Cảm Xúc Trong Tiếng Việt Bằng Phương Pháp Máy Học
Phân Tích Cảm Xúc Trong Tiếng Việt Bằng Phương Pháp Máy Học
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
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
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 ĐỀ
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.
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.
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.
- 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.
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.
- Ada Boost
- Naïve Bayes
- Quadratic Discriminant Analysis
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ả.
1.1. Giới thiệu về ngôn ngữ tiếng Việt và xử lý ngôn ngữ tiếng Việt
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.
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].
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
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.
đề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).
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].
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.
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).
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.
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.
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
đó 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.
- 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
Bộ
xi xi+1 xi+2 xi+3
phân
lớp
Ma trận
D
văn bản
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:
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
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
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 (-).
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.
Để 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.
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á.
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”.
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.
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.
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
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.
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
- 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ý
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.
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
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
- 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.
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
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
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
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
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
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.
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
[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
- 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:
- Sau khi tách từ, chúng tôi được cái tệp seg trong thư mục đầu ra như hình:
#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.
# 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
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)
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
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)
if normalize:
cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
13
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')