ĐẠI HỌC QUỐC GIA HÀ NỘI

ĐẠI HỌC CÔNG NGHỆ

LÊ ĐỖ TÂN

HỆ THỐNG TÌM KIẾM TRI THỨC THÔNG MINH

TRÊN MIỀN WIKIHOW

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

HÀ NỘI - 2021

i

ĐẠI HỌC QUỐC GIA HÀ NỘI

ĐẠI HỌC CÔNG NGHỆ

LÊ ĐỖ TÂN

HỆ THỐNG TÌM KIẾM TRI THỨC THÔNG MINH

TRÊN MIỀN WIKIHOW

Ngành: Khoa học máy tính

Chuyên ngành: Khoa học máy tính

Mã số: 8480101.01

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS. TS. Phạm Bảo Sơn

CÁN BỘ ĐỒNG HƯỚNG DẪN: TS. Nguyễn Bá Đạt

HÀ NỘI - 2021

ii

LỜI CAM ĐOAN

“Tôi xin cam đoan các kết quả nghiên cứu, thực nghiệm được trình bày trong luận văn là

do tôi thực hiện và được sự hướng dẫn của PGS.TS Phạm Bảo Sơn và Tiến sĩ Nguyễn Bá

Đạt, trước đây chưa từng được sử dụng để làm luận văn thạc sĩ cho bất kỳ tổ chức giáo

dục, hay trường đại học nào khác.”

iii

LỜI CẢM ƠN

Trước tiên tôi xin bày tỏ sự cảm kích đặc biệt tới thầy giáo - PGS. TS Phạm Bảo Sơn, và thầy giáo - Tiến sĩ Nguyễn Bá Đạt đã hướng dẫn tận tình khi tôi gặp phải rắc rối hoặc có câu hỏi về vấn đề nghiên cứu của mình. Thầy vẫn luôn cho phép tôi tự do bày tỏ quan điểm đồng thời đưa ra những nhận xét, góp ý, dẫn dắt tôi đi đúng hướng trong suốt thời gian nghiên cứu, thực hiện đề tài luận văn thạc sĩ.

Tôi cũng xin cảm ơn các thầy cô trong khoa Công nghệ thông tin – Trường Đại học Công Nghệ - Đại học quốc gia Hà Nội đã truyền đạt cho tôi những kiến thức chuyên sâu về chuyên ngành trong suốt thời gian học tập để tôi có được nền tảng kiến thức hỗ trợ rất lớn cho tôi trong quá trình làm luận văn thạc sĩ.

Sau cùng tôi xin tỏ lòng biết ơn đến cha mẹ, người thân và bạn bè đã luôn bên cạnh để ủng hộ, động viên tôi trong cuộc sống để tôi có thể hoàn thành tốt luận văn thạc sĩ.

Xin chân thành cảm ơn!

iv

LỜI MỞ ĐẦU

Trong thời đại công nghệ số, Internet phổ biến khắp thế giới, nhu cầu tìm kiếm thông tin

vô cùng lớn từ tất cả các nhóm thành phần trong xã hội. Trong đó tỉ lệ tìm kiếm thông tin

về cách giải quyết một vấn đề chiếm một tỉ trọng đáng kể. Chúng ta gọi những câu tìm kiếm

để giải quyết một vấn đề là “How-to query”. Một số câu truy vấn điển hình như:

• “cách nấu món sườn xào chua ngọt”,

• “cách cài đặt windows 10”,

• “cách gỡ bỏ một ứng dụng không cần thiết trên điện thoại”,

• v.v.

Giải pháp phổ biến và được xem như tốt nhất hiện nay là sử dụng công cụ tìm kiếm Google.

Tuy nhiên, có khá nhiều vấn đề còn tồn tại như:

• Trong khi Google hoạt động tốt và tương đối chính xác với các ngôn ngữ phổ biến

như Tiếng Anh. Mức độ hiệu quả của Google với dạng How-to query còn rất hạn

chế với các ngôn ngữ ít phổ biến hơn, trong đó có tiếng Việt.

• Kết quả tìm kiếm trên Google chỉ đề xuất ra duy nhất một phương pháp thay vì liệt

kê ra các giải pháp khác nhau để người dùng có thể chọn được kết quả phù hợp nhất.

• Bố cục trình bày chỉ là một phần nhỏ trên ô đề xuất nên không được thân thiện với

người dùng.

v

Hình 1: Kết quả tìm kiếm của Google cho "How-to query"

Trong khuôn khổ luận văn này, tôi đề xuất một giải pháp để giải quyết các vấn đề trên. Cụ

thể, tôi sẽ:

- Cung cấp một công cụ tìm kiếm cho câu hỏi “How-to query” tốt hơn cho tiếng Việt.

- Các kết quả của công cụ trên sẽ biểu diễn nhiều phương pháp để giải quyết vấn đề

(nếu có) để người dùng có thể lựa chọn giải pháp phù hợp nhất.

- Biểu diễn các kết quả thân thiện hơn với người dùng.

vi

MỤC LỤC

LỜI CAM ĐOAN ............................................................................................................. iii

LỜI CẢM ƠN ................................................................................................................... iv

LỜI MỞ ĐẦU .................................................................................................................... v

MỤC LỤC ........................................................................................................................ vii

Danh sách bảng .................................................................................................................. x

Danh sách hình vẽ ............................................................................................................. xi

Chương 1 ............................................................................................................................ 1

Giới thiệu ............................................................................................................................ 1

Vấn đề ........................................................................................................................... 1

Phạm vi bài toán và mục tiêu nghiên cứu ..................................................................... 4

Đóng góp của luận văn ................................................................................................. 6

Cấu trúc của luận văn ................................................................................................... 7

Chương 2 ............................................................................................................................ 8

Kiến thức nền tảng ............................................................................................................ 8

Công cụ tìm kiếm ......................................................................................................... 8

2.1.1. Công cụ tìm kiếm trực tuyến ..................................................................................... 8

2.1.1.1. Tổng quan ............................................................................................................... 8

2.1.1.2. Cấu trúc tổng quan các công cụ tìm kiếm trực tuyến ........................................... 10

2.1.2. Công cụ tìm kiếm mã nguồn mở ............................................................................. 11

2.1.2.1. Lucene .................................................................................................................. 11

2.1.2.2. Elasticsearch ......................................................................................................... 13

2.1.3. Các dạng câu trả lời nhanh của Google ................................................................... 19

Nền tảng về xử lý ngôn ngữ tự nhiên ......................................................................... 21

2.2.1. Tìm kiếm ngữ nghĩa (Semantic search)................................................................... 21

2.2.2. TF-IDF ..................................................................................................................... 22

vii

2.2.2.1. TF – term frequency ............................................................................................. 22

2.2.2.2. IDF – inverse document frequency ...................................................................... 22

2.2.2.3. Giá trị TF-IDF ...................................................................................................... 23

2.2.3. Phân tách từ (word segmentation) ........................................................................... 23

2.2.4. Gán nhãn từ loại (Part of speech tagging – POSTag) ............................................. 25

Công cụ hỗ trợ ............................................................................................................ 25

2.3.1. VnCoreNLP ............................................................................................................. 25

2.3.2. Word2vec................................................................................................................. 26

2.3.3. Elasticsearch ............................................................................................................ 27

Chương 3 .......................................................................................................................... 28

Hệ thống tìm kiếm tri thức trên miền Wikihow ........................................................... 28

Tính toán độ tương đồng giữa hai câu văn ................................................................. 28

Tập dữ liệu .................................................................................................................. 30

Xây dựng hệ thống ..................................................................................................... 33

3.3.1. Thu thập dữ liệu từ wikiHow và index dữ liệu vào Elasticsearch........................... 33

3.3.1.1. Thu thập dữ liệu từ trang web wikiHow .............................................................. 33

3.3.1.2. Index dữ liệu vào công cụ ElasticSearch .............................................................. 38

3.3.2. Tìm kiếm bài viết phù hợp với truy vấn .................................................................. 40

3.3.3. Xây dựng website tìm kiếm tri thức trên miền wikiHow ........................................ 41

3.3.3.1. Xây dựng cơ sở dữ liệu với MySQL .................................................................... 41

3.3.3.2. ElasticSearch server .............................................................................................. 41

3.3.3.3. Backend server sử dụng Play framework ............................................................. 41

3.3.3.4. Xây dựng giao diện người dùng với AngularJs.................................................... 43

Chương 4 .......................................................................................................................... 47

Thực nghiệm và kết luận ................................................................................................ 47

viii

Tập dữ liệu thực nghiệm ............................................................................................. 47

Tính toán thời gian tìm kiếm ...................................................................................... 47

Tiến hành thực nghiệm ............................................................................................... 49

Đánh giá của người dùng ............................................................................................ 51

Những cải tiến trong tương lai .................................................................................... 53

Tài liệu tham khảo ........................................................................................................... 55

Phụ lục .............................................................................................................................. 57

ix

Danh sách bảng

Bảng 1: Thị phần sử dụng các công cụ tìm kiếm trên toàn cầu năm 2019........................... 9

Bảng 2: Bảng đối chiếu một số khái niệm của Elasticsearch và MySQL .......................... 14

Bảng 3: Phân tách từ trong các ngôn ngữ khác nhau ......................................................... 23

Bảng 4: Ma trận chỉ số tương đồng giữa các từ theo Word2vec ........................................ 30

Bảng 5: Các từ tương đồng với "xinh đẹp" ........................................................................ 39

Bảng 6: Cấu hình triển khai hệ thống tìm kiếm ................................................................. 48

x

Danh sách hình vẽ

Hình 1: Kết quả tìm kiếm của Google cho "How-to query" ............................................... vi

Hình 2: Google đề xuất kết quả cho câu truy vấn dạng How-to query ................................ 2

Hình 3: Google không có kết quả trả lời nhanh cho câu hỏi How-to query trên tiếng Việt 3

Hình 4: So sánh kết quả search nội dung Tiếng Anh và Tiếng Việt trên Google ................ 3

Hình 5: Kết quả của Google cho "How-to query" không bao gồm các bước ...................... 4

Hình 6: Trang wikiHow ........................................................................................................ 5

Hình 7: Cấu trúc tổng quan hệ thống Apache lucene ......................................................... 11

Hình 8: Câu trả lời trực tiếp của Google ............................................................................ 19

Hình 9: Câu trả lời ngắn của Google .................................................................................. 20

Hình 10: Câu trả lời dài của Google ................................................................................... 20

Hình 11: Bốn yếu tố quan trọng trong Semantic search ..................................................... 21

Hình 12: Các phương pháp tiếp cận của bài toán phân tách từ .......................................... 24

Hình 13: Luồng xử lý của VnCoreNLP ............................................................................. 26

Hình 14: Minh họa dữ liệu từ WikiHow ............................................................................ 32

Hình 15: Thu thập dữ liệu và index dữ liệu vào Elasticsearch ........................................... 33

Hình 16: Mô tả luồng hoạt động của cơ chế thu thập dữ liệu trên wikiHow ..................... 36

Hình 17: Bố cục của bài viết trên wikiHow ....................................................................... 37

Hình 18: Cấu trúc lưu trữ dữ liệu bài viết của wikiHow trên database .............................. 38

Hình 19: Luồng xử lý truy vấn dữ liệu của người dùng ..................................................... 40

Hình 20: Vòng đời Play framework ................................................................................... 42

Hình 21: Bố cục của ứng dụng Play ................................................................................... 43

Hình 22: Giao diện tìm kiếm .............................................................................................. 45

xi

Hình 23: Nội dung bài viết phù hợp với truy vấn của người dùng .................................... 46

Hình 24: Tốc độ tìm kiếm của hệ thống ............................................................................. 49

Hình 25: Tỉ lệ tìm thấy câu trả lời dạng how-to query trên Google ................................... 50

Hình 26: Tỉ lệ tìm thấy câu trả lời trên hệ thống xây dựng ................................................ 51

Hình 27: Thống kê khảo sát tính chính xác của những câu trả lời từ đánh giá của người

dùng .................................................................................................................................... 52

Hình 28: Thống kê khảo sát tính tiện lợi của hệ thống ...................................................... 52

Hình 29: Thống kê khảo sát tính thân thiện với người dùng .............................................. 53

xii

Chương 1

Giới thiệu

Vấn đề

Việc tìm kiếm thông tin về một vấn đề nào đó trong thời đại công nghệ số là rất dễ dàng,

chúng ta chỉ cần truy cập vào một số công cụ tìm kiếm nổi tiếng như: Google, Bing, Baidu,

Ask… sau đó nhập vào vấn đề mà mình đang cần giải quyết. Với thời gian rất ngắn các

công cụ tìm kiếm trên sẽ cho chúng ta các kết quả phù hợp. Và dần dần các công cụ tìm

kiếm như một trợ lý đắc lực mỗi khi chúng ta chưa có giải pháp để giải quyết một vấn đề

nào đó. Có thể ví dụ một số trường hợp thường gặp như: khi bạn dùng máy tính bị lỗi và

bạn sẽ nghĩ ngay đến đến Google để có thể tìm cách khắc phụ sự cố này, hay một ngày đẹp

trời muốn nấu cho người yêu một món ăn gì đó mới lạ thì bạn sẽ tìm thông tin và cách thức

để có thể làm nó…

Google sẽ giúp bạn có những thông tin liên quan đến vấn đề bạn cần giải quyết. Các kết

quả tìm kiếm sát nhất với vấn đề sẽ được trình bày bằng tiêu đề của trang web hoặc bài viết

(có chứa đường dẫn đến nội dung gốc) cùng với đó là mô tả đơn giản của chúng. Sau đó

người dùng sẽ vào lần lượt các đường dẫn đó và tìm kiếm giải pháp thích hợp. Điều này

khiến người dùng mất khá nhiều thời gian, chính vì thế Google đã có những cải tiến để

người dùng có thể nhận được câu trả lời mong muốn nhanh hơn bằng cách thêm ô đề xuất

ngay trên những kết quả tìm kiếm của người dùng. Trong trường hợp Google có câu trả lời

được cho là chính xác với truy vấn dạng “How-to query” của người dùng, ô đề xuất sẽ hiển

thị các bước thực hiện để giải quyết vấn đề mà người dùng đang tìm kiếm:

1

Hình 2: Google đề xuất kết quả cho câu truy vấn dạng How-to query

Trong thực tế, Google nói riêng, các công cụ tìm kiếm nói chung không phải mọi lúc đều

tìm được các kết quả phù hợp với truy vấn, nhất là trong bối cảnh đa dạng về ngôn ngữ và

miền dữ liệu. Vì vậy, vẫn còn tồn tại một số hạn chế có thể kể đến như:

- Google hoạt động tốt và chính xác với các ngôn ngữ phổ biến như tiếng Anh, nhưng

với tiếng Việt thì mức độ hiệu quả chưa cao nên đôi khi sẽ không hiển thị ô đề xuất:

2

Hình 3: Google không có kết quả trả lời nhanh cho câu hỏi How-to query trên tiếng Việt

- Google chỉ cho ra được kết quả phù hợp trên dữ liệu Tiếng Anh nhưng Tiếng Việt

Hình 4: So sánh kết quả search nội dung Tiếng Anh và Tiếng Việt trên Google

thì không:

3

Kết quả tìm kiếm trong hình 4 cho chúng ta thấy cùng một truy vấn, khi tìm kiếm

bằng tiếng Anh thì Google có kết quả dưới dạng các bước cụ thể và có hình minh

họa để người dùng có thể hình dung được một cách tổng quát. Nhưng khi tìm kiếm

bằng tiếng việt thì câu trả lời chỉ được biểu diễn dưới dạng một đoạn trích, và đôi

khi kết quả sẽ không sát với ý của người dùng đang cần tìm kiếm.

- Kết quả tìm kiếm của Google chỉ được hiển thị một phần nội dung trong ô đề xuất

nên không thân thiện với người dùng. Cùng với đó, chỉ có một phương pháp được

liệt kê thay vì hiển thị nhiều phương pháp để người dùng có thể lựa chọn cho đúng

Hình 5: Kết quả của Google cho "How-to query" không bao gồm các bước

mục đích cần tìm kiếm.

Phạm vi bài toán và mục tiêu nghiên cứu

Với những vấn đề được nêu bên trên, luận văn sẽ giải quyết các vấn đề còn tồn tại bằng

cách:

- Xây dựng một công cụ tìm kiếm cho dạng câu truy vấn “how-to query" trong tiếng

Việt, dữ liệu tập chung vào ngôn ngữ tiếng Việt.

4

- Thể hiện nhiều phương pháp cho mỗi một vấn đề cần được giải quyết một cách cụ

thể rõ ràng và có thể có hình minh họa.

- Biểu diễn nội dung của kết quả tìm kiếm thân thiện hơn với người dùng.

Và để đạt được những mục tiêu này, luận văn đã chọn phạm vi nghiên cứu là dữ liệu trên

miền wikiHow. WikiHow là một trang web cộng đồng trực tuyến, nó chứa một cơ sở dữ

liệu rộng lớn về các hướng dẫn cách làm mọi thứ. Được thành lập vào năm 2005 bởi doanh

nhân Internet Jack Herrick, trang web này nhằm tạo ra các bài viết hướng dẫn cách làm hữu

ích nhất thế giới, cho phép mọi người trên thế giới học cách làm bất cứ điều gì.

WikiHow là một dự án nội dung mở và nguồn mở, cung cấp cho các bài viết có nội dung

hướng dẫn trực tuyến bằng cách cho phép người dùng có thể chỉnh sửa đóng góp nội dung

các trang. Một số số liệu ấn tượng của wikiHow có thể kể đến như:

- Vào tháng 2 năm 2005, wikiHow có hơn 35,5 triệu lượt truy cập.

- Tính đến tháng 8 năm 2017, wikiHow chứa hơn 190.000 bài viết hướng dẫn miễn

phí và hơn 1,6 triệu người dùng đã đăng ký.

- Vào ngày 11 tháng 4 năm 2010, một bài viết trên wikiHow có tiêu đề "Cách giảm

cân nhanh" đạt 5 triệu lượt xem trang, lần đầu tiên của trang web này đạt được.

"Cách chụp ảnh màn hình trong Microsoft Windows" là bài viết phổ biến nhất của

Hình 6: Trang wikiHow

trang web.

5

Các bài viết trên trang web wikiHow sẽ mô tả một cách đầy đủ và chi tiết quy trình thực

hiện để giải quyết các vấn đề thuộc nhiều lĩnh vực khác nhau trong đời sống.

Một số bài viết có trên wikiHow như:

- Lĩnh vực máy tính và điện tử:

o Cách để Khôi phục dữ liệu từ ổ cứng của laptop hỏng

o Cách để Tạo biểu đồ thanh trong excel

- Lĩnh vực sức khỏe:

o Cách để Giảm Cân

o Cách để Tăng số lượng tế bào hồng cầu

- Lĩnh vực chăm sóc cá nhân và phong cách:

o Cách để Làm trắng da với chanh

o Cách để Kẻ Viền Mắt

- Lĩnh vực ẩm thực:

o Cách để làm gà rán KFC

o Cách để Làm Sôcôla

Các bài viết có thể có nhiều phương pháp để thực hiện, được phân thành các phần và mỗi

phần thì sẽ có các bước thực hiện đi kèm với đó có thể có hình ảnh minh họa cụ thể.

Đóng góp của luận văn

Luận văn này đã đóng góp:

- Một công cụ tìm kiếm dựa trên ngữ nghĩa cho các câu truy vấn dạng phương pháp,

cách thức trong miền tiếng Việt từ đó giúp cho việc tìm kiếm lời giải, cách giải quyết

cho các vấn đề trong thực tế một cách dễ dàng và nhanh chóng hơn.

- Nghiên cứu và đề xuất một phương pháp giải quyết tốt loại truy vấn how-to cho

tiếng Việt.

6

- Cung cấp giải pháp cho các vấn đề một các đa dạng và trực quan, giúp tăng hiệu quả

tìm kiếm và giảm thời gian giải quyết vấn đề.

Tôi sẽ đóng góp các kết quả nghiên cứu của mình cho cộng đồng để có thể tiếp tục phát

triển các công cụ mới, và mở rộng các nghiên cứu hiện có trong lĩnh vực xử lý ngôn ngữ tự

nhiên và trí tuệ nhân tạo như: hỏi đáp tự động hay bài toán trích xuất thông tin.

Cấu trúc của luận văn

Phần còn lại của luận văn, tôi sẽ giới thiệu thêm về các kiến thức nền tảng ở chương 2.

Chương 3 sẽ mô tả về “Hệ thống tìm kiếm tri thức trên miền wikiHow”, đề xuất phương

pháp tính độ tương đồng của hai câu văn và cách xây dựng hệ thống. Cuối cùng, chương 4

sẽ là một số thực nghiệm và kết luận lại các công việc mà tôi đã thực hiện.

7

Chương 2

Kiến thức nền tảng

Công cụ tìm kiếm

2.1.1. Công cụ tìm kiếm trực tuyến

2.1.1.1. Tổng quan

Công cụ tìm kiếm trực tuyến là một phần mềm được truy cập trên Internet phục vụ cho việc

tìm kiếm thông tin trên mạng world wide web. Khi sử dụng công cụ tìm kiếm thì người

dùng sẽ phải nhập một từ khóa về nội dung mình cần tìm hiểu, và kết quả của các công cụ

sẽ là một danh sách các website, ảnh, video hoặc địa chỉ bản đồ…

Hiện nay có rất nhiều công cụ tìm kiếm khác nhau có thể nhắc đến như: Google, Bing,

Baidu,… và thị phần của chúng thì cạnh tranh rất gay gắt trên toàn cầu. Dưới đây là con số

thống kê thị phần của các công cụ tìm kiếm thống kê vào năm 2019:

8

Công cụ tìm kiếm

Thị phần trên toàn cầu

Google

92.00%

Bing

2.11%

Baidu

1.55%

Yahoo

1.52%

Yadex

0.82%

Other

2%

Bảng 1: Thị phần sử dụng các công cụ tìm kiếm trên toàn cầu năm 2019

Google là dịch vụ cung cấp chính và quan trọng nhất của công ty Google được bắt đầu

mang vào sử dụng vào năm 1997, cung cấp công cụ tìm kiếm thông tin về website, ảnh và

nhiều thông tin khác trên internet thông qua nhiều lựa chọn khác nhau cho việc tùy chỉnh

tìm kiếm như sử dụng một số ký hiệu đặc biệt như bao gồm, loại trừ, chỉ định hoặc yêu cầu

hành vi tìm kiếm nhất định. Ngoài ra còn cung cấp các trải nghiệm khác như tình trạng

chuyến bay, dự báo thời tiết, chuyển đổi tiền tệ… Theo thống kê, mỗi ngày Google có

khoảng 5,4 tỉ lượt tìm kiếm và là công cụ tìm kiếm phổ biến nhất thế giới.

Baidu được xem như là Google của Trung Quốc được thành lập vào năm 2000. Baidu cung

cấp một công cụ tìm kiếm chuyên dụng cho ngôn ngữ tiếng Trung với một danh mục hơn

740 triệu trang web, 80 triệu hình ảnh và 10 triệu tập dữ liệu đa truyền thông. Đây là công

9

cụ tìm kiếm phổ biến thứ 2 thế giới, ở riêng thị trường Trung Quốc thì có đến 76.05% người

tìm kiếm sử dụng công cụ này.

Yahoo được sáng lập bởi hai học viên cao học trường đại học Stanford là David Filo và

Jerrry Yang vào năm 1994. Đây được coi là một trong những nhà tiên phong của kỷ nguyên

Internet những năm 1990. Mặc dù được thành lập từ năm 1994 nhưng mãi đến năm 2004

Yahoo mới chính thức ra mắt công cụ tìm kiếm của mình. Mặc dù ra đời muộn nhưng với

các lợi thế về lượng người dùng đang sử dụng dịch vụ Yahoo Messenger và Yahoo Mail

khá lớn nên Yahoo Search vẫn cạnh tranh được với các công cụ tìm kiếm nổi tiếng lúc bấy

giờ. Tính đến tháng 9/2019 Yahoo vẫn là một trong 4 công cụ tìm kiếm phổ biến nhất với

1.86% lượng sử dụng tìm kiếm trên toàn thế giới.

Ngoài các công cụ bên trên thì cũng có một số công cụ tìm kiếm nổi tiếng khác cho các

quốc gia có ngôn ngữ đặc trưng như: Yandex của Nga, Cốc Cốc của Việt Nam,…

2.1.1.2. Cấu trúc tổng quan các công cụ tìm kiếm trực tuyến

Công cụ tìm kiếm thường được chia ra làm 3 bộ phận chính:

- Crawling: Còn được gọi là spider, là phần thu thập dữ liệu của các trang web. Tất cả

các nội dung của các trang web và cả tần suất liên kết của trang web khác đến trang

web đó cũng sẽ được lưu trữ lại.

- Indexing: Sau khi lấy về được các thông tin của trang web thì các công cụ tìm kiếm

sẽ lập chỉ mục những nội dung này để các thông tin lưu trữ được tối ưu để phục vụ

cho việc và tìm kiếm được nhanh chóng nhất.

- Ranking: Đây là quá trình mà công cụ tìm kiếm xếp hạng các kết quả và trả về cho

người dùng. Nhìn chung thì những trang web có độ tin tưởng càng cao thì sẽ được

công cụ tìm kiếm xếp hạng càng cao. Mức độ liên quan của các kết quả sẽ tùy vào

công thức tính toán của từng công cụ tìm kiếm.

10

2.1.2. Công cụ tìm kiếm mã nguồn mở

2.1.2.1. Lucene

Apache lucene là một phần mềm tìm kiếm mã nguồn mở miễn phí được phát triển bởi Doug

Cutting trên ngôn ngữ Java vào tháng 8 năm 2008. Sau này Lucene được phát triển trên các

ngôn ngữ khác như Object Pascal, Perl, C#, C++, Python, Ruby và PHP để phục vụ được

nhiều nhu cầu hơn trong thực tế. Lucene có thể phân tích, đánh chỉ mục và tìm kiếm thông

tin với tần suất cao một cách nhanh chóng thông qua một bộ công cụ đặt tả API cho việc

xây dựng một công cụ tìm kiếm.

Cấu trúc của Apache lucene có hai thành phần chính: thành phần tạo chỉ mục và thành phần

tìm kiếm. Thành phần tạo chỉ mục bao gồm các chức năng xử lý và phân tích dữ liệu. Ở

phần này, Lucene cho phép người dùng có thể thiết lập các trường thông tin cần thiết đánh

chỉ mục để phục vụ cho thành phần phần tìm kiếm. Thành phần tìm kiếm bao gồm các phần

Hình 7: Cấu trúc tổng quan hệ thống Apache lucene

chức năng tìm kiếm và trả về kết quả tìm kiếm cho người dùng.

11

a. Quy trình đánh chỉ mục:

Để tiến hành đánh chỉ mục cho tài liệu thì việc đầu tiên chúng ta phải chuyển các văn

bản đầu vào (có thể là htm, pdf, word…) sang dữ liệu chung là text. Sau khi nhận được

văn bản đã được đưa về dạng text thuần, lucene sẽ thực hiện tách các từ, cụm từ… và

tiếp đến sẽ là index. Lucene lưu trữ dữ liệu theo chỉ mục có thể nghịch đảo (inverted

index – lưu trữ dạng này sẽ giúp cho việc lưu trữ hiệu quả và tìm kiếm nhanh hơn). Sở

dĩ lưu trữ theo cách này sẽ làm tăng tốc độ tìm kiếm bởi vì khi đó hệ thống sẽ thực thi

theo cách: thay vì tìm kiếm các từ, cụm từ được chứa trong một tài liệu X nào đó thì sẽ

tối ưu theo cách tìm ra câu trả lời cho “tài liệu nào có chứa những từ, cụm từ đó”. Một

số toán tử trong đánh chỉ mục như: document (tài liệu) cùng các trường: keywords,

unindexed, unstored và text.

b. Bộ chuyển đổi câu truy vấn người dùng (Query parser):

Khi tiến hành thực thi việc tìm kiếm cho câu truy vấn của người dùng, các ứng dụng

tìm kiếm thường phải thực hiện hai phần chính: chuyển đổi câu truy vấn của người dùng

và truy xuất thông tin trả về. Lucene cũng vậy, các hàm (function) của nó cũng yêu cầu

biểu diễn câu truy vấn của người dùng ở dạng một Query Object để thực thi và tìm kiếm

kết quả.

Query parser cung cấp một số toán tử logic để thực hiện việc chuyển đổi các câu truy

vấn như: or(mặc định), and, not. Ví dụ: với câu truy vấn “chăm sóc” thì sẽ được mặc

định phân tích thành chăm or sóc or (chăm and sóc). Và nếu như chúng ta muốn thay

đổi tham số mặc định này thì chúng ta cần đặt lại toán tử cho đối tượng Query Parser.

c. Bộ phân tích (Analyzer):

Ngoài ra Query Parser cần thêm một đối tượng khác là Analyzer dùng để phân tích

chuỗi truyền vào và cũng cho ta các kết quả khác nhau tùy theo việc áp dụng analyzer

nào. Đây là quá trình chuyển đổi văn bản thành các chỉ mục cơ bản nhất(term). Các term

này sẽ được sử dụng để xác định tài liệu nào phù hợp với các câu truy vấn của người

dùng. Để tạo ra các terms, bộ phân tích sẽ phải thực hiện các bước như sau:

12

- Lowercasing: hay còn được gọi là normalizing, đây là bước chuyển toàn bộ nội

dung văn bản thành chữ thường.

- Remove stop words: hay còn gọi là remove common words, là bước loại bỏ các từ

chung và không có nhiều ý nghĩa trong miền giữ liệu tìm kiếm.

- Streaming: hay còn gọi là root form, là bước giảm số lượng từ từ văn bản đưa vào.

Các bước trên còn được gọi chung là bước tokenization, mục đích chính là chuyển văn

bản thành các đoạn nhỏ, ở đây được gọi là các token. Các token này được kết hợp với

field name của chúng để trở thành các terms – được dùng để tìm kiếm một cách trực

tiếp.

d. Truy vấn và tìm kiếm:

Lucene cung cấp lớp IndexSearcher để thực hiện tìm kiếm thông qua hàm search. Với

mỗi tìm kiếm lucene sẽ trả về các kết quả (hits) chứa các thông tin đã tìm được và được

sắp xếp theo độ chính xác. Lucene cung cấp các loại Query như: QueryParse,

BooleanQuery, RangeQuery và TermQuery để người dùng có thể sử dụng linh hoạt cho

mỗi mục đích tìm kiếm.

2.1.2.2. Elasticsearch

Elasticsearch là một công cụ tìm kiếm và phân tích phân tán dựa trên nền tảng của thư viện

Lucene. Nó có thể tìm kiếm và phân thích tất cả các loại dữ liệu gần như tức thời, cho dù

văn bản có cấu trúc hay không có cấu trúc, dữ liệu số, dữ liệu không gian. Elasticsearch có

thể lưu trữ và lập chỉ mục một cách hiệu quả để hỗ trợ tìm kiếm nhanh. Thay vì chỉ đơn

giản là truy xuất dữ liệu, công cụ này có thể tập hợp thông tin để phát hiện ra xu hướng và

các mẫu từ dữ liệu của bạn. Khi dữ liệu và khối lượng truy vấn tăng lên, tính chất phân tán

của Elasticsearch cho phép chúng ta có thể triển khai hệ thống một cách liền mạch [1].

a. Một số khái niệm cơ bản trong Elasticsearch

Dưới đây là một số khái niệm cơ bản trong Elasticsearch

13

- Documents, types và indices: Documents là đơn vị nhỏ nhất để lưu trữ dữ liệu trong

Elasticsearch được lưu trữ dưới dạng JSON. Nếu chúng ta đối chiếu sang một hệ cơ

sở quản trị dữ liệu thân thuộc hơn là MySQL thì document ở đây sẽ tương đương

như một row, types sẽ ứng với tables và indices tương ứng với databases.

MySQL

Elasticsearch

Databases

Indices

Table

Types

Columns/Rows

Documents with Properties

Bảng 2: Bảng đối chiếu một số khái niệm của Elasticsearch và MySQL

- Inverted Index: được thiết kế để tăng tốc độ của full text search. Một inverted index

bao gồm một danh sách tất cả những từ không lặp lại xuất hiện trong một hoặc nhiều

văn bản, và với mỗi từ sẽ đi kèm với danh sách văn bản chứa nó. Ví dụ: ta có nội

dung của 2 document:

o Document 1: The quick brown fox jumped over the lazy dog

o Document 2: Quick brown foxes leap over lazy dogs in summer

Để tạo inverted index đầu tiên chúng ta phân tách nội dung của mỗi văn bản thành

các từ đơn âm (gọi là term hoặc token), sắp xếp lại danh sách các term (không trùng

lặp) và sau đó và liệt kê các document có chứa term đó. Kết quả thu được sẽ có dạng

như sau:

14

Term Doc_1 Doc_2 ------------------------- Quick | | X The | X | brown | X | X dog | X | dogs | | X fox | X | foxes | | X in | | X jumped | X | lazy | X | X leap | | X over | X | X quick | X | summer | | X the | X | -------------------------

Giả sử khi chúng ta muốn tìm kiếm cụm từ “quick brown” ta chỉ cần tìm các

document mà chứa các term tương ứng:

Term Doc_1 Doc_2 ------------------------- brown | X | X quick | X | ------------------------- Total | 2 | 1 -------------------------

Cả hai document đều chứa ít nhất 1 term nhưng document 1 thì có chứa nhiều term

trong cụm từ tìm kiếm hơn. Giả sử chúng ta tính độ tương tự của 2 văn bản chỉ bằng

cách đếm số lượng term trùng nhau giữa 2 văn bản đó thì ta có thể nói rằng document

1 sẽ là kết quả phù hợp hơn cho câu tìm kiếm “quick brown”.

Có một vài vấn đề còn tồn đọng:

o Phân biệt giữa viết hoa và viết thường: Quick và quick đang được coi là 2 từ

gốc khác nhau.

o Phân biệt giữa số ít và số nhiều: fox và foxes hoặc là dog và dogs khá là giống

nhau, và có thể được xem là một từ gốc.

15

o Phân biệt từ đồng nghĩa: jumped và leap là hai từ đồng nghĩa nhưng lại được

tính thành hai từ gốc khác nhau.

Vì vậy chúng ta chuẩn hóa các term theo một định dạng chuẩn để có thể tìm được

document dù không chứa chính xác các term mà người dùng truy vấn, nhưng vẫn đủ

sát nghĩa để có thể coi là phù hợp. Ví dụ:

o Chuyển các document thành văn bản viết thường.

o Chuyển các từ số nhiều thành số ít

o Chỉ index các từ đồng nghĩa thông qua một từ đại diện

Term Doc_1 Doc_2 ------------------------- brown | X | X dog | X | X fox | X | X in | | X jump | X | X lazy | X | X over | X | X quick | X | X summer | | X the | X | X ------------------------

Sau khi áp dụng một số chuẩn hóa trên dữ liệu index sẽ trông như sau:

Và đương nhiên khi chúng ta thực hiện tìm kiếm thì văn bản đầu vào cũng phải được

chuẩn hóa theo các quy tắc bên thì mới có kết quả tìm kiếm chính xác hơn.

- Node: là nơi lưu trữ dữ liệu, tham gia vào việc đánh index của cluster và thực hiện

tìm kiếm. Mỗi một mode được định danh bằng một tên duy nhất và có giá trị mặc

định là UUID (universally unique identifier) tiến thành khi thiết lập hoặc tự định

danh. Và tên của node là rất quan trọng trong việc xác định node đó thuộc cluster

nào trong hệ thống Elasticsearch.

- Cluster: là tập hợp của một hoặc nhiều node hoạt động cùng nhau và các node này

sẽ có chung giá trị của thuộc tính cluster.name. Mỗi cluster cũng được định danh

bằng một giá trị không trùng lặp (unique name) và được sử dụng chung cho tất cả

16

các nodes. Vì vậy khi tên của các cluster trùng nhau sẽ gây nên hiện tượng các node

join vào nhầm cluster và sinh ra sự cố. Cluster sẽ có một node chính và được gọi là

master sẽ được lựa chọn tự động và có thể được thay đổi nếu như có sự cố xảy ra.

Các nodes trong cluster có thể hoạt động trên các server khác nhau để đảm bảo được

khi có sự cố xảy ra thì các server khác có thể hoạt động một cách bình thường với

đầy đủ các chức năng.

b. Mô hình tính toán độ tương tự (Similarity module)

Sự tương tự định nghĩa các văn bản khớp với nhau như thế nào thông qua một chỉ số. Chúng

ta có thể tự thiết lập một mô hình tính toán độ tương tự, tuy nhiên những mô hình có sẵn đã

khá tốt cho những trường hợp phổ biến trong thực tế.

Một số mô hình tính toán độ tương tự có sẵn của Elasticsearch:

- BM25 similarity (Mô hình mặc định): được dựa trên TF/IDF, mô hình này có sẵn bộ

chuẩn hóa TF, và được cho là hiệu quả hơn với các trường có độ dài ngắn (như là

tên). Các thông số cơ bản của mô hình:

o k1: Kiểm soát việc chuẩn hóa tần số từ phi tuyến tính (độ bão hòa). Giá trị

mặc định là 1.2

o b: Kiếm soát tỉ lệ giữa độ dài của văn bản so với độ dài trung bình của tất cả

các văn bản.

o discount_overlaps: Xác định việc tính toán có phụ thuộc vào các từ trùng lặp

hay không.

- Một số mô hình khác như:

o DFR similarity

o IB similarity

o LM Dirichlet similarity

o LM Jelinek Mercer similarity

o Scripted similarity

17

c. Một số ưu và nhược điểm của Elasticsearch

- Ưu điểm:

o Do dựa trên nền tảng Apache lucene(near-realtime searching) nên tốc độ tìm

kiếm dữ liệu của elasticsearch là rất nhanh.

o Cung cấp công cụ truy vấn với cấu trúc phức tạp một các cụ thể và rõ ràng

thông qua JSON.

o Khả năng mở rộng (scale-up).

o Có hỗ trợ tìm kiếm fuzzy search. Khi từ khóa tìm kiếm bị sai chính tả hoặc

không đúng cú pháp thì elasticsearch vẫn có thể trả về kết quả gần sát nhất

với câu truy vấn.

o Có khả năng phân tích dữ liệu.

o Hỗ trợ nhiều ngôn ngữ tích hợp như: Java, php, Javascript, ruby .net hay

Python.

- Nhược điểm:

o Do Elasticsearch được sinh ra với mục đích chính là tìm kiếm dữ liệu. Vậy

nên các tác vụ liên quan đến CRUD thì lại là nhược điểm của nó khi được

mang ra so sánh với các database khác như: MySQL, PostgreSQL,

Mongodb,… Vì vậy trong thực tế người ta không dùng Elasticsearch làm

database chính mà sẽ kết hợp nó với một hệ quản trị cơ sở dữ liệu khác.

o Một lý do để Elasticsearch không được sử dụng làm database chính vì nó

không có tính transaction.

o Do việc đánh index của Elasticsearch khá mất nhiều thời gian với lượng dữ

liệu lớn vậy nên với những hệ thống thường xuyên thay đổi bộ dữ liệu sẽ gặp

trở ngại.

18

2.1.3. Các dạng câu trả lời nhanh của Google

Google thường xử lý và trả lời các câu hỏi theo 3 dạng câu trả lời bao gồm: câu trả lời trực

tiếp, câu trả lời ngắn, câu trả lời dài:

- Câu trả lời trực tiếp thường sẽ là các câu hỏi có chứa các từ: “ai”, “cái gì”, “ở đâu”,

“khi nào”… Đối với những câu hỏi thế này Google sẽ cung cấp một câu trả lời trực

tiếp từ một nguồn đáng tin cậy và mang nội dung lên trên đoạn trích nổi bật để người

Hình 8: Câu trả lời trực tiếp của Google

dùng có thể thấy nhanh nhất.

- Câu trả lời ngắn thường xuất hiện những cụm từ như: “tại sao”, “có thể”… Các thông

tin sẽ được Google tính toán theo các tiêu chí để chọn ra một câu trả lời ngắn tốt

nhất và hiển thị vào đoạn trích nổi bật.

19

Hình 9: Câu trả lời ngắn của Google

- Câu trả lời dài: thường xuất hiện với các cụm từ như: “làm thế nào”, “cách để”, “tại

sao”… Các câu trả lời ở dạng này sẽ thường có thông tin chi tiết cho người dùng có

Hình 10: Câu trả lời dài của Google

thể hình dung được cụ thể được thông tin mà họ đang tìm kiếm.

20

Nền tảng về xử lý ngôn ngữ tự nhiên

2.2.1. Tìm kiếm ngữ nghĩa (Semantic search)

Tìm kiếm ngữ nghĩa là một cụm từ để chỉ các công cụ tìm kiếm có thể hiểu được các truy

vấn ngôn ngữ tự nhiên và có thể nhiều hơn thế với việc hiểu được ngữ cảnh của người tìm

kiếm tại thời điểm họ nhập truy vấn. Một ví dụ đơn giản như: nếu như truy vấn là “lượng

nguyên liệu tiêu thụ của jaguar” thì cơ khả năng lớn từ “jaguar” là họ đang tìm kiếm thông

tin của một chiếc xe hơn là muốn tìm một con vật.

Các yếu tố chính của tìm kiếm ngữ nghĩa:

- Hiểu ngôn ngữ tự nhiên

- Ngữ cảnh của luồng truy vấn

- Ngữ cảnh của người dùng

Hình 11: Bốn yếu tố quan trọng trong Semantic search

- Nhận biết thực thể

Việc hiểu rõ hơn về ý định tìm kiếm của người dùng sẽ tối đa hóa khả năng người dùng có

được trải nghiệm tìm kiếm tốt nhất. Và đấy chính là cách mà các công cụ tìm kiếm nổi tiếng

21

trên thế giới như Google, Bing, Baidu… có thể mang lại cho bạn những thông tin sát nhất

với thứ mà bạn đang cần.

2.2.2. TF-IDF

TF-IDF là viết tắt của từ term frequency – inverse document frequency, đây là một chỉ số

để đánh giá mức độ quan trọng của một từ đối với một văn bản hoặc một tập tài liệu. TF-

IDF thường được sử dụng trong các bài toán truy hồi thông tin và khai phá dữ liệu [2] [3]

[4].

2.2.2.1. TF – term frequency

Đây là tần số xuất hiện một từ trong một văn bản, được tính bằng công thức:

𝑡𝑓(𝑡, 𝑑) = 𝑓(𝑡, 𝑑) max {𝑓(𝑤, 𝑑) ∶ 𝑤 ∈ 𝑑}

Trong đó:

- f(t,d): số lần xuất hiện từ t trong văn bản d

- max {𝑓(𝑤, 𝑑) ∶ 𝑤 ∈ 𝑑}: số lần xuất hiện nhiều nhất của một từ bất kỳ trong văn

bản

- giá trị của tf(t,d) sẽ thuộc khoảng [0, 1]

2.2.2.2. IDF – inverse document frequency

Đây là tần số nghịch của một từ trong tập văn bản, chỉ số này nhằm để giảm giá trị của

những từ phổ biến. Mỗi từ chỉ có một giá trị IDF trong một văn bản và được tính bằng công

thức:

𝑖𝑑𝑓(𝑡, 𝐷) = 𝑙𝑜𝑔 |𝐷| |{𝑑 ∈ 𝐷 ∶ 𝑡 ∈ 𝑑}|

Trong đó:

- |D|: tổng số văn bản trong tập D

- |{𝑑 ∈ 𝐷 ∶ 𝑡 ∈ 𝑑}|: số văn bản chứa từ nhất định, với điều kiện t xuất hiện trong văn

bản d tức là: 𝑡𝑓(𝑡, 𝑑) ≠ 0. Nếu từ đó không xuất hiện ở bất cứ 1 văn bản nào trong

22

tập thì mẫu số sẽ bằng 0 => phép chia cho không không hợp lệ, vì thế người ta

thường thay bằng mẫu thức 1 + |{𝑑 ∈ 𝐷 ∶ 𝑡 ∈ 𝑑}|.

2.2.2.3. Giá trị TF-IDF

𝑡𝑓𝑖𝑑𝑓(𝑡, 𝑑, 𝐷) = 𝑡𝑓(𝑡, 𝑑) 𝑥 𝑖𝑑𝑓(𝑡, 𝐷)

Những từ có giá trị TF-IDF cao là những từ xuất hiện nhiều trong văn bản này, và xuất hiện

ít trong các văn bản khác. Việc này giúp lọc ra những từ phổ biến và giữ lại những từ có

giá trị cao (từ khoá của văn bản đó).

2.2.3. Phân tách từ (word segmentation)

Phân tách từ là bài toán phân tách một chuỗi ký tự đầu vào thành các từ độc lập.

Trong tiếng Anh và một số ngôn ngữ khác sử dụng chữ cái Latin, dấu cách gần như là một

phương pháp tốt để phân tách các từ trong câu. Tuy nhiên, không phải tất cả các ngôn ngữ

đầu có dấu phân cách như vậy. Trong tiếng Thái Lan, tiếng Lào, cụm từ và câu được phân

cách nhưng từ thì lại không. Trong tiếng Trung Quốc và tiếng Nhật Bản, có dấu phân cách

câu nhưng lại không có phân cách từ. Còn tiếng Việt lại được phân cách bằng âm tiết. Vì

vậy, bài toán phân tách từ gặp khá nhiều khó khăn.

Ví dụ:

Ngôn ngữ

Văn bản đầu vào

Kết quả

English

I am looking for my pen.

I am looking_for my_pen

Vietnamese

Học sinh học sinh học

Học_sinh học sinh_học

私は日本人です

私_は 日_本_人 で_す

Japanese

Bảng 3: Phân tách từ trong các ngôn ngữ khác nhau

Có nhiều cách tiếp cận để giải quyết được bài toàn này [5].

23

Hình 12: Các phương pháp tiếp cận của bài toán phân tách từ

Các phương pháp này được phân loại thành 3 nhóm chính:

- Dict-based: là tạo ra một từ điển và phân tách văn bản đầu vào thành các từ có trong

từ điển đó. Hai kỹ thuật tiếp cận hiệu quả nhất của phương pháp này là Maximun

Matching và Longest Matching.

- Statiscal: dựa vào việc sử dụng một tập dữ liệu cực lớn đã được gán nhãn. Một số

phương pháp phổ biến như N-gram Language Model [6], Hidden Markov Model

(HMM) [7], Conditional Random Fields (CRFs) [8] và Maximum Entropy (ME) [9].

- Hybrid: là sự kết hợp của nhiều phương pháp khác nhau để tận dụng ưu điểm của

mỗi phương pháp và hạn chế nhược điểm của chúng. Đã có nhiều mô hình hybrid

được công bố và áp dụng cho nhiều ngôn ngữ khác nhau. Chúng bao gồm các kỹ

thuật dictionary-based (Maximun Matching, Longest Matching), statistics-based (N-

24

gram, CRFs, ME) và các thuật toán học máy (Support Vector Machines - SVMs,

Genetic Algorithm – GA) [10] [11] [12].

2.2.4. Gán nhãn từ loại (Part of speech tagging – POSTag)

POSTag, còn được gọi là gán nhãn ngữ pháp, là quá trình đánh dấu một từ trong văn bản

tương ứng với một phần của lời nói, dựa trên cả định nghĩa và ngữ cảnh, quan hệ của từ đó

với các từ xung quanh và các từ liên quan trong cụm, câu, đoạn văn. Ví dụ: một số lớp từ

trong tiếng Anh danh từ, giới từ, đại từ, liên từ, động từ, tính từ, trạng từ… Một trong những

bước tiền xử lý bắt buộc của POSTag là phân tách từ (Word Segmentation).

Vấn đề của POS tagging là sử lý nhập nhằng, lựa chọn nhãn từ phù hợp với ngữ cảnh. Ví

dụ: từ “đá” trong câu “Con ngựa này được làm bằng đá” là danh từ nhừn trong câu “Bọn

trẻ đang đá bóng” thì lại là động từ.

Một số ví dụ của POSTag:

- Văn bản đầu vào: Học_sinh học sinh_học

- Kết quả sau khi đã gán nhãn từ loại: Học_sinh/N học/V sinh_học/N

(Trong đó /N là danh từ, /V là động từ)

Công cụ hỗ trợ

2.3.1. VnCoreNLP

VnCoreNLP [13] là một bộ công cụ gán nhãn dành cho tiếng Việt, cung cấp các công cụ

xử lý ngôn ngữ tự nhiên như: Word Segmentation, POS tagging, Named Entity Recognition

và Dependency Parsing.

Các tính chất của VnCoreNLP:

- Chính xác: VnCoreNLP là bộ công cụ xử lý ngôn ngữ tiếng Việt với độ chính xác

cao. Với một bộ dữ liệu chuẩn thì VnCoreNLP cho ra một kết quả cao hơn tất cả các

công cụ đã từng được công bố trước đây.

- Xử lý những tập dữ liệu lớn trong thời gian rất nhanh.

25

Hình 13: Luồng xử lý của VnCoreNLP

- Dễ dàng triển khai.

2.3.2. Word2vec

Word2vec là một kỹ thuật xử lý ngôn ngữ tự nhiên. Thuật toán này sử dụng mô hình neural

network để học các liên kết từ một tập dữ liệu lớn. Sau khi huấn luyện một tập đủ lớn, mô

hình này có thể phát hiện được những từ đồng nghĩa hoặc có thể áp dụng vào cho bài toán

gợi ý từ cho một từ hoặc một phần văn bản.

Kỹ thuật này sẽ gán giá trị vector (một danh sách các số cụ thể) cho từng từ riêng biệt. Các

vector này được tính toán sao cho: nếu hai từ càng tương đồng về mặt ngữ nghĩa thì chỉ số

cosine similarity giữa hai vector biểu diễn chúng càng cao.

Word2vec có hai model là skip-grams và CBOW:

- Skip-grams là mô hình dự đoán từ xung quanh. Ví dụ khi áp dụng windows size là

3 cho câu “I love you so much” ra sẽ thu được tập {(I, love), love}, {(love, so), you},

{(you, much), so}. Khi cho đầu vào là từ “love” thì mô hình này sẽ dự đoán ra các

từ xung quanh là “I” và “you”.

26

- CBOW (continous bag of word), mô hình này ngược lại với Skip-grams, tức là đầu

vào sẽ là các từ và mô hình sẽ tính toán để đưa ra dự đoán từ liên quan đến các từ

đầu vào.

Trong thực nghiệm thì CBOW huấn luyện dữ liệu nhanh hơn nhưng độ chính xác lại

không cao hơn skip-grams và ngược lại, và chúng ta chỉ áp dụng một trong hai mô hình

để huấn luyện tập dữ liệu.

2.3.3. Elasticsearch

Như đã giới thiệu, Elasticsearch là một công cụ tìm kiếm mã nguồn mở phân tán cho tất cả

các loại dữ liệu bao gồm cả văn bản, số, không gian địa lý, cấu trúc và không có cấu trúc.

Elasticsearch cung cấp các RESTful API để thực hiện các tác vụ trên server riêng biệt nên

có thể tích hợp dễ dàng với bất kỳ hệ thống nào.

27

Chương 3

Hệ thống tìm kiếm tri thức trên miền Wikihow

Tính toán độ tương đồng giữa hai câu văn

Trong luận văn tôi đề xuất một phương pháp tính toán độ tương đồng giữa hai câu văn dựa

trên chỉ số tương đồng Jaccard Similarity.

Chỉ số Jaccard còn được gọi là hệ số tương tự, chỉ số này có thể dùng để tính toán sự giống

nhau giữa các tập mẫu hữu hạn ( trong đó các phần tử không trùng lặp) và được định nghĩa

là kích thước của phần giao chia cho kích thước của phần hợp của các tập mẫu.

Biểu thức toán học của chỉ số được biểu diễn như sau:

𝐽(𝐴, 𝐵) = = |𝐴 ∩ 𝐵| |𝐴 ∪ 𝐵| |𝐴 ∩ 𝐵| |𝐴| + |𝐵| − |𝐴 ∩ 𝐵|

Giá trị sẽ nằm trong khoảng [0, 1] và bằng 1 khi hai tập này có các phần tử giống hệt nhau.

Chỉ số này có thể được áp dụng để tính toán độ tương đồng giữa hai câu văn khi ta coi mỗi

từ trong câu văn là một phần tử trong tập từ mà các phần tử này không trùng lặp. Nhưng

nếu như chúng ta chỉ đơn thuần tìm các phần tử trong hai tập từ cần so sánh xem có xuất

hiện trong tập từ còn lại không để tính số lượng từ giao nhau của hai tập thì sẽ không giải

quyết được bài toán từ đồng nghĩa. Ở đây tôi muốn nói rằng, để tính toán độ tương đồng

của hai câu văn dựa trên Jaccard Similarity thì phần giao ngoài việc tính số lượng từ xuất

hiện ở cả hai câu văn dựa trên các ký tự thì phải tính toán thêm sự tương đồng về ngữ nghĩa.

Vì vậy tôi đề xuất một công thức tính độ tương đồng cho hai chuỗi ký tự X và Y như sau:

28

𝑛−1 𝑖=0

𝑚−1 ∑ ∑ 𝑗=0 𝑛−1 𝑛 + 𝑚 − ∑ 𝑖=0

𝑆(𝑋, 𝑌) = 𝑀(𝑥𝑖, 𝑦𝑗) 𝑀(𝑥𝑖, 𝑦𝑗) 𝑚−1 ∑ 𝑗=0

Trong đó:

- S(X, Y): Độ tương đồng giữa 2 chuỗi ký tự X và Y.

- x, y: Lần lượt là tập hợp các từ trong chuỗi X và Y (các từ không trùng lặp).

- n, m: Lần lượt là số lượng các từ không trùng lặp trong chuỗi ký tự X và Y.

- 𝑴(𝒙𝒊, 𝒚𝒋) : Chỉ số tương đồng về ngữa nghĩa của 2 từ 𝑥𝑖 và 𝑦𝑗 dựa trên từ điển

word2vec.

Ví dụ: Cho 2 câu sau:

- X : Cách để bày tỏ tình cảm với bạn gái.

- Y : Cách để thổ lộ tình yêu với bạn gái.

Sau khi phân tách từ ta sẽ có hai tập từ tương ứng như sau:

- x = {cách, để, bày_tỏ, tình_cảm, với, bạn_gái}

- y = {cách, để, thổ_lộ, tình_yêu, với, bạn_gái}

- n = 6, m = 6

Dễ dàng để nhận thấy hai tập x, y có tập từ chung nhau (phần giao):

{cách, để, với, bạn_gái} (4 phần tử)

Và hai tập x, y hợp với nhau (phần hợp) thành tập từ:

{cách, để, bày_tỏ, thổ_lộ, tình_cảm, tình_yêu, với, bạn_gái} (8 phần tử)

Nếu chúng ta áp dụng công thức của Jaccard Similarity thì độ tương đồng giữa 2 câu văn

4

sẽ là:

8

𝐽(𝑋, 𝑌) = = 0.5 (1)

29

Dựa vào từ điển word2vec ta sẽ có ma trận chỉ số tương đồng về ngữ nghĩa của các từ trong

hai chuỗi X và Y như sau:

M(x, y)

cách

để

thổ_lộ

tình_yêu

với

bạn_gái

cách

1

0

0

0

0

0

để

0

1

0

0

0

0

bày_tỏ

0

0

0.619774

0

0

0

tình_cảm

0

0

0

0.705005

0

0

với

0

0

0

0

1

0

bạn_gái

0

0

0

0

0

1

Bảng 4: Ma trận chỉ số tương đồng giữa các từ theo Word2vec

1+1+0.619774+0.705005+1+1

5.324779

Khi đó độ tương đồng giữa hai chuỗi X và Y tính theo phương pháp đề xuất sẽ là:

6+6−(1+1+0.619774+0.705005+1+1)

6.675221

𝑆(𝑋, 𝑌) = = ≈ 0.7977 (2)

Nhìn vào hai kết quả tính độ tương đồng (1) và (2) thì cho thấy phương pháp đề xuất sẽ cho

ra kết quả tương đồng cao hơn nếu như hai chuỗi đầu vào có chứa các từ đồng nghĩa.

Tập dữ liệu

Dữ liệu được sử dụng trong luận văn được thu thập từ website wikiHow

(https://www.wikihow.com/). Đây là một trang web cộng đồng trực tuyến mang tính chất

wiki. Được thành lập vào năm 2005 bởi Jack Herrick, tính đến năm 2017 wikiHow chứa

hơn 190.000 bài viết hướng dẫn miễn phí và hơn 1.6 triệu người dùng đã đăng ký [14].

Dữ liệu được sử dụng trong luận văn này chỉ bao gồm những bài viết tiếng Việt. Dữ liệu

này được trải rộng trong các lĩnh vực trong đời sống như:

30

- Nghệ thuật Giải trí

- Xe hơi và Phương tiện Khác

- Máy tính và Điện tử

- Giáo dục và Truyền thông

- Cuộc sống Gia đình

- Tài chính và Kinh doanh

- Ẩm thực và Giải trí

- Sức khỏe

- Sở thích và Thủ công Mỹ nghệ

- Ngày lễ và Truyền thống

- Nhà ở và Làm vườn

- Chăm sóc Cá nhân và Phong cách

- Thú cưng và Động vật

- Triết học và Tôn giáo

- Mối quan hệ

- Thể thao và Thẩm mỹ

- Du lịch

- Thế giới Làm việc

- Giới trẻ.

Trong mỗi lĩnh vực, là tập hợp các bài biết về cách làm/công thức để thực hiện các vấn đề

trong cuộc sống thường ngày chúng ta hay gặp phải, ví dụ như: Cách để làm gà rán KFC,

Cách để nướng hạt điều, Cách nấu cơm bàng lò vi sóng, Cách xác định hắc lào, Các điều

trị nấm móng… Mỗi bài viết bao gồm một hoặc nhiều phương pháp thực hiện và các bước

thực hiện cụ thể cho mỗi phương pháp thông qua văn bản và hình ảnh minh họa. Các bài

31

viết này được đóng góp và chỉnh sửa từ nhiều biên tập viên, nhà nghiên cứu và các chuyên

Hình 14: Minh họa dữ liệu từ WikiHow

gia.

Tổng số lượng bài viết thu thập được là khoảng 10.000, mỗi bài viết có khoảng từ một đến

bốn phương pháp khác nhau.

32

Xây dựng hệ thống

3.3.1. Thu thập dữ liệu từ wikiHow và index dữ liệu vào Elasticsearch

Hình 15: Thu thập dữ liệu và index dữ liệu vào Elasticsearch

3.3.1.1. Thu thập dữ liệu từ trang web wikiHow

Để thu thập dữ liệu từ trang web wikiHow, tôi đã xây dựng một công cụ (sau đây tôi gọi là

web-crawler) có chức năng thu thập tất cả các đường link của các bài viết có trên trang web

https://wikihow.vn. Với những đường link đó, công cụ này sẽ tải dữ liệu của bài viết về và

thực hiện trích xuất các thông tin của bài viết để lưu trữ vào cơ sở dữ liệu.

Để trích xuất được các thông tin của trang web, web-crawler đã sử dụng thư viện Jsoup.

Đây là một thư viện của Java, chúng làm việc với dữ liệu html. Jsoup cung cấp rất nhiều

API phục vụ cho việc kéo và trích xuất dữ liệu từ các website một cách linh hoạt, thuận tiện

và được sử dụng tốt với phương thức HTML5 DOM và CSS selectors. [15]

33

Để có thể lấy được các đường dẫn (link) của các bài viết một cách đầy đủ nhất, web-crawler

sẽ tạo ra một queue để lưu trữ các đường link mà công cụ đã khám phá ra được trong

wikiHow. Các phần tử trong queue sẽ có thông tin về url của website và kiểu của url. Kiểu

của url được phân thành các dạng sau:

- Category: đây là đường dẫn của các chuyên mục, như được nói ở phần giới thiệu

của wikiHow thì nó sẽ bao gồm 19 chuyên mục lớn về các lĩnh vực trong đời sống

như: Nghệ thuật Giải trí, Xe hơi và Phương tiện Khác, Máy tính và Điện tử, Giáo

dục và Truyền thông, Cuộc sống Gia đình…

- Page: trong mỗi chuyên mục thì thường sẽ có rất nhiều các bài viết, vì vậy wikiHow

sẽ sắp xếp các bài viết này thành từng trang một và mỗi trang thì thường sẽ bao gồm

nhiều nhất là 80 tiêu đề bài viết trong chuyên mục đó, và có 1 hoặc nhiều trang, tùy

vào số lượng các bài viết trong chuyên mục.

- Article: đây là đường dẫn trực tiếp đến bài viết. Và sẽ là nơi chúng ta có thể lấy được

thông tin đầy đủ về nội dung của bài viết.

Khởi tạo queue trên, công cụ sẽ cho vào tất cả 19 đường link của 19 chuyên mục chính

trong wikiHow và được mang kiểu là category. Ta thực hiện thu thập các đường dẫn trực

tiếp đến bài viết bằng cách lấy lần lượt các phần tử trong queue bên trên, nếu như phần tử

được lấy ra khỏi queue:

- Có kiểu category: chúng ta sẽ sử dụng Jsop để trích xuất thông tin nội dung của trang

web theo url đã lưu.

o Nếu như nhận thấy chuyện mục đó chỉ bao gồm một trang thì chúng ta sẽ tạo

một bản sao(clone) từ phần tử đó và chuyển thành kiểu page và url giữ

nguyên. Sau đó đẩy phẩn tử mới này vào queue.

o Nếu như chuyên mục có nhiều trang thì chúng ta sẽ lần lượt phép duyệt với

một biến tăng dần rồi thay đổi tham số trên url để xem chuyên mục có bao

nhiêu trang. Vòng lặp sẽ dừng khi mà biến tăng dần sẽ tạo ra một url mà trang

web không tồn tại. Ví dụ: khi ta có chuyên mục “Máy tính và điện tử” có link

chuyên mục là:

https://www.wikihow.vn/Thể_loại:Máy-tính-và-Điện-tử

34

ta sẽ duyệt lần lượt các url:

https://www.wikihow.vn/Thể_loại:Máy-tính-và-Điện-tử?pg=1

https://www.wikihow.vn/Thể_loại:Máy-tính-và-Điện-tử?pg=2

https://www.wikihow.vn/Thể_loại:Máy-tính-và-Điện-tử?pg=3

Đến khi tham số pg trong url sẽ tạo ra một link không có nội dung. Khi đó sẽ

là giới hạn của số trang trong chuyên mục hiện tại. Và tương tự như trên, ta

sẽ tạo ra các phần tử mới có kiểu là page và url là các url bên trên. Sau đó đẩy

phẩn tử mới này vào queue.

- Có kiểu page: khi download source code của trang web tương ứng với url của phần

tử này, chúng ta sẽ được một danh sách các url của các bài viết có dạng như sau:

https://www.wikihow.vn/Lưu-tập-tin-vào-USB

https://www.wikihow.vn/Thay-đổi-ngôn-ngữ-mặc-định-trong-Google-Chrome

https://www.wikihow.vn/Thay-đổi-quốc-gia-trên-YouTube

Với mỗi url trên ta sẽ tạo một phần tử có kiểu article và url tương ứng và cho vào

trong queue.

- Có kiểu article: chúng ta sẽ giữ nguyên (có thể clone ra một phần tử tương ứng để

push vào queue).

Vòng lặp trên sẽ thực hiện đến khi tất cả các phần tử trong queue đều có kiểu là article.

35

Hình 16: Mô tả luồng hoạt động của cơ chế thu thập dữ liệu trên wikiHow

Sau khi đã có tất cả các url của tất cả bài viết trên wikiHow, web-crawler sẽ tiến hành kéo

nội dung của trang web về và trích xuất thông tin. Các thông tin mà chúng ta có thể thu thập

được từ một bài viết thường sẽ là:

- Tiều đề bài viết, được nằm ở phía trên cùng của trang web. Sau đó sẽ là nội dung

tóm tắt hoặc mô tả về bài viết (phần đánh dấu số 1 trong ảnh 18).

- Các phương pháp để thực hiện (phần đánh dấu số 2 trong ảnh 18).

- Với mỗi phương pháp thì sẽ có một bài bước tiến hành được mô tả cụ thể và kèm

với đó có thể là hình ảnh (phần đánh dấu số 3 trong ảnh 18).

36

Hình 17: Bố cục của bài viết trên wikiHow

Sau khi trích xuất được nội dung của bài viết, bước tiếp theo sẽ là lưu trữ dữ liệu vào trong

cơ sở dữ liệu. Cấu trúc dữ liệu sẽ bao gồm ba bảng chính:

- article: lưu thông tin chung của bài viết:

o title: tiêu đề của bài viết.

37

o summarization: mô tả ngắn gọn của bài viết.

o warning: các lưu ý.

o recommendation: một số lời khuyên.

- method: lưu thông tin chung của các phương pháp trong bài viết:

o article_id: id của bài viết (article).

o title: tiêu đề của phương pháp.

o summarization: mô tả ngắn gọn của phương pháp.

- step: lưu thông tin các bước trong mỗi phương pháp thực hiện:

o mehod_id: id của phương pháp (method).

o title: mô tả chính về bước thực hiện.

o content: cách thực hiện cụ thể.

Hình 18: Cấu trúc lưu trữ dữ liệu bài viết của wikiHow trên database

o image_url: đường dẫn ảnh minh họa trong bước thực hiện.

3.3.1.2. Index dữ liệu vào công cụ ElasticSearch

Do công cụ tìm kiếm chủ yếu sẽ dựa trên nội dung của tiêu đề và phần mô tả ngắn gọn của

bài viết nên hệ thống sẽ tiến hành bước tiền xử lý dữ liệu và index dữ liệu này vào trong

Elasticsearch để phục vụ cho việc tìm kiếm.

Sau khi thu thập được dữ liệu bài viết trên wikiHow, hệ thống sẽ sử dụng VnCoreNLP để

thực hiện phân tách các từ trong tiêu đề và phần mô tả ngắn gọn của bài viết. Như đã phân

tích ở bên trên thì Elasticssearch sẽ gặp trở ngại với từ đồng nghĩa trong quá trình thực hiện

tìm kiếm. Chính vì vậy, dữ liệu được index vào trong Elasticsearch sẽ được tôi xử lý để đưa

về một chuẩn chung. Các bước được thực hiện như sau:

38

- Xây dựng các cụm từ đồng nghĩa và xác định từ đại diện cho tập từ này dựa vào

Word2vec. Ví dụ: Với từ “xinh_đẹp” chúng ta sẽ có được một số từ có độ tương

đồng cao với từ này như:

W2

long_lanh lộng_lẫy

Bảng 5: Các từ tương đồng với "xinh đẹp"

Score W1 0.61770927 xinh_đẹp khả_ái 0.45318955 xinh_đẹp xinh_đẹp 0.59213918 xinh_đẹp đoan_trang 0.53585093 0.54625511 xinh_đẹp đằm_thắm 0.46228677 xinh_đẹp ưa_nhìn 0.63439822 xinh_đẹp yêu_kiều rạng_rỡ 0.58222419 xinh_đẹp

Chỉ số tương đồng càng cao sẽ cho thấy 2 từ có nghĩa càng sát nhau và chúng ta sẽ

coi chúng nằm trong 1 tập từ. Trong luận văn, mức được lựa chọn để xác định 2 từ

nằm trong một tập từ gốc sẽ là 0.57 (theo khảo sát của dữ liệu được lấy từ word2vec).

Chúng ta sẽ kết nạp các từ: xinh_đẹp, khả_ái, lộng_lẫy, yêu_kiều, rạng_rỡ vào tập

từ hiện tại. Và đại diện cho tập từ trên sẽ là từ “xinh_đẹp”.

- Thay thế những từ trong dữ liệu đã được phân tách từ thành từ đại diện nếu như

chúng nằm trong tập từ đồng nghĩa. Ví dụ với câu: “Cách để khiến cho bạn trở_nên

lộng_lẫy hơn” chúng ta sẽ thay thế từ “lộng_lẫy” thành từ “xinh_đẹp” và thay thế

vào câu trên.

Dữ liệu index vào trong Elasticsearch sẽ bao gồm các fields:

- article_id: id của bài viết.

- original_title: tiêu đề gốc của bài viết.

- standardized_title: tiêu đề đã được chuẩn hóa.

- original_summarization: nội dung tóm tắt gốc của bài viết.

- standardized_summarization: nội dung tóm tắt đã được chuẩn hóa.

39

3.3.2. Tìm kiếm bài viết phù hợp với truy vấn

Hình 19: Luồng xử lý truy vấn dữ liệu của người dùng

Cùng với việc chuẩn hóa các dữ liệu được index vào trong Elasticsearch thì truy vấn của

người dùng cũng sẽ được chuẩn hóa để việc tìm kiếm có thể mang lại hiệu quả cao nhất:

Câu truy vấn sẽ được phân tách từ (word segmentation) sau đó các từ trong câu sẽ được

thay thế bằng từ đại diện (nếu có) để làm dữ liệu đầu vào (input) cho phần tìm kiếm trong

Elasticsearch.

Kết quả tìm kiếm của Elasticsearch sẽ cho ra danh sách các kết quả có mức độ tương đồng

cao nhất so với câu truy vấn tìm kiếm bên trên. Tuy nhiên do dữ liệu index trong

40

Elasticsearch và câu truy vấn đầu vào đã được chuấn hóa, nên cần tính toán lại độ tương

đồng trên dữ liệu gốc (trước khi được chuẩn hóa) dựa vào các kết quả mà Elasticsearch đã

trả về trước đó. Với công thức tính độ tương đồng được đề xuất trong mục 3.1, chúng ta sẽ

áp dụng cho 30 kết quả tìm kiếm có điểm cao nhất nhận được qua Elasticsearch để có được

những bài viết phù hợp với truy vấn đầu vào. Giá trị của S(X, Y) càng lớn thì kết quả của

hệ thống và truy vấn của người dùng càng tương đồng. Vì vậy, dữ liệu trả về cho người

dùng sẽ là những kết quả có chỉ số S(X, Y) giảm dần.

3.3.3. Xây dựng website tìm kiếm tri thức trên miền wikiHow

3.3.3.1. Xây dựng cơ sở dữ liệu với MySQL

Hệ quản trị cơ sở dữ liệu trong luận văn sử dụng là MySQL phiên bản 5.7

3.3.3.2. ElasticSearch server

Luận văn sử dụng công cụ ElasticSearch phiên bản 7.13

3.3.3.3. Backend server sử dụng Play framework

Play framework là một công cụ xây dựng web application với Java và Scala (nhưng trong

luận , tôi chỉ sử dụng để xây dựng server với Java) một cách dễ dàng. Play được thiết kế

với khuynh hướng phát triển những web nhẹ và thân thiện với người dùng.

Framework này được xây dựng dựa trên Akka, Play cung cấp công cụ để có thể dự đoán

và giảm thiểu tối đa việc sử dụng tài nguyên phần cứng (CPU, bộ nhớ đệm, thread…), giúp

cho ứng dụng có thể mở rộng được một cách tối đa.

41

Hình 20: Vòng đời Play framework

Hình trên mô tả vòng đời của một request gửi lên server. Khi có một request được nhận,

phần route sẽ tìm kiếm xem request đó thuộc action nào để thực thi. Và sau đó tùy vào mục

đích của hàm để hệ thống có thể cập nhật dữ liệu trong cơ sở dữ liệu hoặc là tạo ra một

view để trả về với HTTP response.

42

Hình 21: Bố cục của ứng dụng Play

Bố cục của một Play application một số thành phần chính như sau:

- Thư mục /app : Chứa tất cả các file thực thi logic với các mã nguồn java, scala, các

mẫu html. Trong thư mục này thường được chia nhỏ ra làm 3 thành phần chính:

o app/controller: chứa các giao thức giao tiếp bên ngoài

o app/model: chứa các thực thể (có thể là thực thể tương ứng với các bảng trong

cơ sở dữ liệu)

o app/view: chứa các mã lệnh html để sinh ra giao diện trả về

- Thư mục /conf : Chứa các file cấu hình của hệ thống, và sẽ có 2 file cấu hình chính

là application.conf và routes.conf

- Thư mục /lib : Chứa các mã nguồn mà ứng dụng sử dụng đến.

- File build.sbt : Nơi khai báo cấu hình build chính của ứng dụng.

- Thư mục /target : Chứa mọi file được sinh ra bởi phần mềm sau khi được compile.

3.3.3.4. Xây dựng giao diện người dùng với AngularJs

AngularJs là một framework có cấu trúc cho các ứng dụng web động. Nó cho phép người

dùng có thể sử dụng html như là một ngôn ngữ mẫu và cho phép chúng ta có thể mở rộng

43

cú pháp của html để bố trí các thành phần của ứng dụng một cách có bố cục rõ ràng. Một

số đặc trưng của AngularJs như:

- Được phát triển dựa trên ngôn ngữ javascript.

- Tạo ứng dựng theo mô hình MVC.

- Khả năng tương thích cao.

- Mã nguồn mở.

- Chạy được trên nhiều nền tảng trình duyệt trên máy tính cũng như điện thoại.

- Cung cấp khả năng data binding với html.

Nhưng đi cùng với đó AngularJs cũng vẫn còn một số hạn chế nhất định:

- Không an toàn nên cần có sự bảo mật và xác thực phía server để ứng dụng có thể trở

nên an toàn hơn.

- Không thể sử dụng được nếu như người dùng vô hiệu hóa Javascript trên trình duyệt

web.

Một số hình anh về giao diện của ứng dụng “Tìm kiếm tri thức thông minh trên miền

wikiHow”

44

Hình 22: Giao diện tìm kiếm

- Khung tìm kiếm và các kết quả phù hợp với truy vấn:

45

Hình 23: Nội dung bài viết phù hợp với truy vấn của người dùng

- Nội dung của bài viết liên quan đến truy vấn của người dùng:

46

Chương 4

Thực nghiệm và kết luận

Tập dữ liệu thực nghiệm

Hiện nay chưa có một tập dữ liệu chuẩn nào để đánh giá lời giải cho vấn đề tìm kiếm cho

câu hỏi “How-to query”. Chính vì vậy trước khi trước khi tiến hành thực nghiệm tôi đã

khảo sát 20 người để thu thập được 200 câu hỏi ngẫu nhiên dạng “how-to query” ở các lĩnh

vực khác nhau trong đời sống. Sau đó sẽ dùng tập câu hỏi từ người dùng để xem hệ thống

của tôi có thể có câu trả lời cho bao nhiêu câu hỏi, và những câu trả lời đó có làm hài lòng

người dùng như thế nào qua các đánh giá của người dùng qua các tiêu chí như:

- Mức độ hài lòng về các câu trả lời liên quan đến câu truy vấn.

- Tốc độ tìm kiếm.

- Tính thân thiện với người dùng.

Cùng với đó tôi sẽ đo đạc hiệu quả của công cụ tìm kiếm qua thời gian thực hiện tìm kiếm

với mỗi query trong trường hợp có một hoặc nhiều truy vấn cùng gửi đến server. Qua đó

để đánh giá được khả năng đáp ứng lượng người dùng lớn của hệ thống.

Tính toán thời gian tìm kiếm

Để tiến hành đánh giá tốc độ tìm kiếm và khả năng đáp ứng nhu cầu của hệ thống, tôi sẽ

tiến thành thực hiện đo đạc thời gian phản hồi của hệ thống với các truy vấn. Hệ thống sẽ

được triển khai trên máy tính có cấu hình như bảng dưới đây:

47

Hệ điều hành Windows 10

CPU Intel Core i7 – 1050U

Số core: 4

Số thread: 8

16GB RAM

Bảng 6: Cấu hình triển khai hệ thống tìm kiếm

Card đồ họa Card on board

Tôi tiến hành thực hiện truy vấn đa luồng, tức là sẽ gửi nhiều truy vấn (requests) vào cùng

một thời điểm để tính toán thời gian nhanh nhất, chậm nhất của kết quả trả về từ hệ thống.

Mỗi lần kiểm tra, bộ dữ liệu sẽ được lặp lại 10 lần để tính thời gian trung bình. Điều này

mô phỏng lại tương tự việc có nhiều người dùng (users) cùng vào hệ thống để thực hiện

truy vấn. Kết quả được thống kê như hình 24:

Trong hình 24, trục tung biểu diễn thời gian phản hồi của các câu trả lời của hệ thống được

tính theo mili giây và trục hoành là số lượng truy vấn được gửi cùng 1 lúc.

48

) s

m

( i

i

ồ h n ả h p n a g

i

ờ h T

320 300 280 260 240 220 200 180 160 140 120 100 80 60 40 20 0

1

2

3

4

5

6

7

8

Số lượng truy vấn cùng thời điểm

Nhanh nhất

Chậm nhất

Trung bình

Hình 24: Tốc độ tìm kiếm của hệ thống

Nhìn vào hình trên ta thấy, thời gian nhanh nhất để xử lý 1 truy vấn trong tất cả các thử

nghiệm (gửi đồng thời từ 1 đến 8 truy vấn cùng 1 lúc) là khoảng 20 mili giây. Thời gian xử

lý trung bình tăng dần từ 62 mili giây lên 203 mili giây. Với kết quả như trên và hệ thống

được chạy thử nghiệm với cấu hình của một máy tính cá nhân thì cho thấy hệ thống có khả

năng xử lý tốt các truy vấn.

Tiến hành thực nghiệm

Với 200 câu hỏi dạng “how-to query” thu thập được tôi sẽ nhân bản theo 2 ngôn ngữ: Tiếng

Anh và Tiếng Việt để thử nghiệm trên các ngôn ngữ tương ứng trên công cụ tìm kiếm

Google. Sau khi thực hiện tìm kiếm 200 câu hỏi bằng Tiếng Anh và 200 câu hỏi bằng tiếng

Việt thì kết quả nhận được như sau:

- Với Tiếng Anh: Tỉ lệ câu trả lời của Google được hiển thị dưới dạng câu trả lời cho

câu hỏi how-to query là 49%.

49

- Với Tiếng Việt: Tỉ lệ câu trả lời của Google được hiển thị dưới dạng câu trả lời cho

Tiếng Anh

Tiếng Việt

18

49

51

82

How-to query

How-to query

Dạng khác

Dạng khác

Hình 25: Tỉ lệ tìm thấy câu trả lời dạng how-to query trên Google

câu hỏi how-to query là 18%.

Kết quả cho thấy cùng một nội dung truy vấn, trên ngôn ngữ Tiếng Anh tỉ lệ câu trả lời

được hiển thị cho câu hỏi how-to query cao hơn nhiều so với trên ngôn ngữ Tiếng Việt.

Thực hiện tìm kiếm tập câu hỏi trên Tiếng Việt bằng hệ thống của tôi thì số lượng câu trả

lời là xấp xỉ 55%. Tỉ lệ này được xác định bằng việc người dùng thỏa mãn với câu trả lời

mà hệ thống trả lời cho người dùng, không bao gồm các câu trả lời mà người dùng đánh

giá là chỉ chấp nhận được (không thật sự sát với cả sự mong muốn), kết quả này được tính

dự trên thông tin thống kê đánh giá người dùng mục 4.4 bên dưới:

50

45.5

54.5

Có kết quả

Hình 26: Tỉ lệ tìm thấy câu trả lời trên hệ thống xây dựng

Đánh giá của người dùng

Để đánh giá được tính khả dụng của hệ thống, tôi đã thu thập ý kiến của những người cung

cấp bộ dữ liệu thực nghiệm đánh giá về hệ thống. Với mỗi câu truy vấn của người dùng

cung cấp tôi sẽ khảo sát xem mức độ chính xác của những gợi ý mà hệ thống đưa ra cho họ

theo ba mức độ hài lòng, chấp nhận được và không hài lòng. Kết quả sau khi khảo sát:

- 109/200 câu trả lời được đánh giá là hài lòng với người dùng, có kết quả phù hợp

với tìm kiếm của người dùng, đạt tỉ lệ 54.5%.

- 19 câu trả lời ở được xem là chấp nhận được, đạt tỉ lệ 9.5%.

- 72 câu trả lời không đúng với nhu cầu tìm kiếm của người dùng, chiếm 36%.

51

Độ chính xác

120

100

i

80

l

60

40

ả r t u â c ố S

20

0

Hài lòng

Không hài lòng Chấp nhận được

Đánh giá

Hình 27: Thống kê khảo sát tính chính xác của những câu trả lời từ đánh giá của người dùng

Cùng với đánh giá tính chính xác của những câu trả lời từ hệ thống, tôi cũng khảo sát người

Tính tiện lợi

18

16

14

i

12

l

10

8

ả r t u â c ố S

6

4

2

0

Không tiện lợi

Tiện lợi

Đánh giá

Hình 28: Thống kê khảo sát tính tiện lợi của hệ thống

dùng về tính tiện lợi và thân thiện của hệ thống đối với họ.

52

Thân thiện với người dùng

i

l

ả r t u â c ố S

10 9 8 7 6 5 4 3 2 1 0

Không thân thiện Chấp nhận được

Thân thiện

Đánh giá

Hình 29: Thống kê khảo sát tính thân thiện với người dùng

Theo thống kê trên, có 85% số người cho rằng hệ thống khá tiện lợi cho việc sử dụng và có

55% số người đánh giá tính thân thiện của hệ thống là chấp nhận được.

Một số góp ý của người dùng khi được trải nghiệm hệ thống tìm kiếm:

- Cơ sở dữ liệu chưa được lớn nên việc trả lời được các câu hỏi ở các lĩnh vực khác

nhau còn hạn chế.

- Giao diện chưa được bắt mắt.

- Một số câu trả lời chính xác hơn lại không được xếp hạng cao hơn.

Những cải tiến trong tương lai

Dưa vào kết quả của thực nghiệm và các góp ý của người dùng tôi đã tổng hợp lại thì dưới

đây là một số công việc tôi sẽ phát triển trong tương lai để hoàn thiện thêm công cụ tìm

kiếm thông minh trên miền wikiHow:

- Thêm dữ liệu từ một số nguồn khác để cơ sở dữ liệu được đầy đủ hơn. Nếu như

không có câu trả lời cho truy vấn của khách hàng thì có thể sẽ chuyển hướng người

dùng sang công cụ tìm kiếm trực tuyến để có thể tham khảo thêm.

53

- Cải tiến giao diện để người dùng có trải nghiệm tốt hơn.

- Cải tiến logic tính toán của thuật toán tìm kiếm tương đồng trên ngữ nghĩa bằng cách

sử dụng thêm một số bộ word2vec khác.

54

Tài liệu tham khảo

[1] "Elasticsearch Intro," [Online]. Available:

https://www.elastic.co/guide/en/elasticsearch/reference/current/elasticsearch-

intro.html.

[2] A. Aizawa, An information-theoretic perspective of tf–idf measures, Hitotsubashi

Chiyoda-ku, Tokyo 101-8430, Japan: Information Processing and Management,

2003.

[3] G. S. a. M. J. McGill, Introduction to modern information retrieval, 1983.

[4] G. S. a. C. Buckley, "Term-weighting approaches in automatic text retrieval,"

Information Processing & Management, 1988, p. 24.

[5] G. B. T. S. B. P. Dang Duc Pham, "A Hybrid Approach to Vietnamese Word

Segmentation Using Part of Speech Tags," 2009 International Conference on

Knowledge and Systems Engineering, 2009.

[6] B. Carpenter, "Character language models for Chinese word segmentation and named

entity recognition," Proceedings of the Fifth SIGHAN Workshop, pp. 169-172, 2006.

[7] C. Papageorgiou, "Japanese word segmentation by hidden Markov model,"

Proceedings of the HLT Workshop, pp. 283-288, 1994.

[8] F. Peng, "Chinese segmentation and new word detection using conditional random

fields," Proceeding of COLING, pp. 562-568, 2004.

[9] Y. W. AJ Jacobs, "Maximum entropy word segmentation of Chinese text,"

Proceedings of the Fifth SIGHAN Workshop, pp. 108-117, 2006.

55

[10] X. D. R. N. J. C. JS Zhou, "A hybrid approach to Chinese word segmentation around

CRFs," Proceeding of the Fourth SIGHAN Workshop on Chinese Language

Processing, 2005.

[11] S. C. N Xue, "Combining classifiers for Chinese word segmentation," The First

SIGHAN Workshop attached with the 19th COLING, pp. 57-63, 2002.

[12] X. Lu, "Towards a hybrid model for Chinese word segmentation," Proceeding of

Fourth SIGHAN workshop on Chinese Language Processing, 2005.

[13] D. Q. N. D. Q. N. M. D. M. J. Thanh Vu, "Proceedings of NAACL-HLT 2018," pp.

56-60, 2018.

56

Phụ lục

Danh sách các câu hỏi ngẫu nhiên dạng “How to query” thu thập từ người dùng

Truy vấn dạng tiếng Việt Cách cài đặt java

Truy vấn dạng tiếng Anh how to install java how to set up two-factor authentication for facebook how to set up ringtone on iphone X how to deactive icloud account how to choose mechanical keyboard how to root android operation system how do I get free shipping vouchers from Shopee how to install Windows 10 on pc how to make boot usb how to create facebook advertisement how to become facebook partner how to report youtube's video how to recover facebook account how to install facebook login package on reactjs How to connect airpods

Cách đặt mật khẩu 2 lớp cho facebook Cách đổi nhạc chuông iphone X Cách khoá icloud Cách chọn bàn phím cơ Cách root điện thoại Android Cách nhận mã miễn phí vận chuyển của shopee Cách cài win 10 Cách tạo boot usb Cách để tạo quảng cáo trên facebook Cách để trở thành facebook partner Cách để report video trên youtube Cách để khôi phục tài khoản facebook Cách tạo chức năng đăng nhập bằng facebook trên reactjs Cách kết nối airpods Cách tạo ảnh panorama bằng photoshop Cách xoá phông bằng photoshop Cách thêm phụ đề cho video Cách chơi aoe Cách tạo bảng trong ms word Cách chỉnh cỡ chữ trong ms excel Cách đổi hình nền máy tính Cách chia sẻ file qua Airdrop Cách tạo ảnh động Cách cài extension cho Chrome Cách tăng độ sáng màn hình máy tính Cách tăng âm lượng điện thoại Cách chỉnh độ sáng của ảnh Cách chỉnh giọng nói trong video Cách tạo tài khoản Google Cách sử dụng touchpad Cách ăn sushi How to make a panorama in photoshop how to make blur mask layer on photoshop how to add video subtitle how to play AOE how to create table in microsoft word how to adjust font size in MS excel how to change desktop wallpaper how to share file by airdrop How to Make an Animated GIF how to install extension on chrome how to increase brightness of monitor How to increase the volume on my phone how to increase brightness of photo how to modify voice on video how to create google account how to use touchpad how to eat sushi

57

how to use chopsticks how to use knife and fork how to cook steak How to peel apple how to use microwave how to pick watermelon how to make caramel how to decorate by carrot how to bake a cake how to cut salmon How to roast coffee how to open a bottle of champagne how to mash potato how to peel eggs how to eat coconut how to make strawberry jam how to make toast how to shave face how to tie how to tie shoes how to solve rubik's cube

Cách sử dụng đũa Cách sử dụng dao nĩa Cách nấu món bít tết Cách gọt táo Cách sử dụng lò vi sóng Cách chọn dưa hấu ngon Cách làm caramel Cách trang trí bằng cà rốt Cách làm bánh ga tô Cách phi lê cá hồi Cách rang cà phê Cách mở chai rượu vang Cách nghiền khoai tây Cách bóc trứng luộc Cách ăn dừa Cách làm mứt dâu Cách nướng bánh mì Cách cạo râu Cách thắt cà vạt Cách buộc dây giày Cách xoay rubic Cách chọn kiểu tóc phù hợp với khuôn mặt Cách để có giấc ngủ ngon Cách chơi poker Cách chơi đàn pinano Cách xây lâu đài cát Cách xin visa sang Mỹ Cách câu cá Cách sinh tồn nơi hoang dã Cách hồi sức tim phổi Cách sơ cứu vết thương hở Cách băng bó khuỷu tay Cách pha trà ngon Cách cắm hoa Cách trồng cây Cách xử lí khi bị rắn cắn Cách chiết cành cây Cách gấp chăn Cách đan len Cách sử dụng nồi áp suất how to find a hairstyle to fit your face how to get a good sleep how to play poker how to play piano how to make a sand castle how to apply for us visa how to fish how to survive on your own in the wild How to do CPR How to first aid open wounds how to tape up your elbow how to make tea the right way how to arrange flowers how to plant a new tree How to handle snake bites How to make marcot How to fold the blanket How to knit how to cook in a pressure cooker

58

how to iron how to become a singer how to apologize how to dye hair how to play golf How to draw eyebrows how to paint nails How to swim how to set up a tent how to apply perfume how to correct back posture how to get marriage license

How to get on shark tank How to wash your hands with soap How to tie a knot how to draw a chicken how to draw a jolly roger How to answer the interview How to run a marathon How to teach children to write how to relieve muscle pain how to reduce fever how to take a selfie

Cách là quần áo Cách để trở thành ca sĩ Cách xin lỗi người khác Cách nhuộm tóc Cách chơi golf Cách kẻ lông mày Cách sơn móng tay Cách bơi Cách dựng lều Cách sử dụng nước hoa Cách chữa gù lưng Cách đăng ký kết hôn Cách tham gia chương trình Shark Tank Cách rửa tay bằng xà phòng Cách thắt nút dây Cách vẽ con gà Cách vẽ cờ hải tặc Cách trả lời phỏng vấn Cách chạy marathon Cách dạy con viết chữ Cách giảm đau cơ Cách hạ sốt nhanh chóng Cách chụp ảnh selfie Cách loại bỏ bã kẹo cao su dính trên quần áo Cách đi xe đạp Cách đi xe máy Cách trượt ván Cách quản lý tài chính Cách sử dụng bình cứu hoả Cách xử lý khi bị chảy máu mũi Cách học tiếng anh hiệu quả Cách tính diện tích hình chữ nhật Cách vẽ hình tròn Cách lọc sạch nguồn nước bẩn Cách đo lượng mưa Cách làm giảm huyết áp Cách giảm cholesterol trong máu Cách đạt điểm cao trong kì thi toeic Cách tạo lửa từ đá lửa how to remove gum from clothes How to ride a bike how to ride a motorcycle How to skateboard How to manage finance how to use a fire extinguisher How to handle a nosebleed how to learn english well How to calculate the area of a rectangle how to draw a circle how to purify water how to measure rainfall How to lower blood pressure How to lower cholesterol in the blood How to get a high score in the toeic exam how to start a fire with firestone

59

Cách lấy nước ngọt từ nước biển Cách chế tạo thuốc nổ Cách chế tạo kim cương Cách làm con thuyền giấy Cách tính vận tốc Cách tính lực ma sát Cách tạo ra xà phòng Cách làm tên lửa tại gia Cách để Làm Kem Cách để Làm món xúc xích Ý Cách để Rã đông cá hồi Cách để Hâm nóng bít tết Cách để Đánh bông Kem tươi Cách để Nấu Cơm dừa Cách để Quay Thịt vịt Cách để Ướp Cá hồi Cách để Làm Bánh quy Cách để Làm trứng ốp la Cách để Làm kem béo Cách để Kiếm tiền Trên Blog Cách để Kiếm tiền Nhờ Facebook Cách để Bán hàng trên Amazon Cách để Giao dịch Forex Cách để Tính chi phí biên Cách để Viết báo cáo kinh doanh Cách để Tăng cường sức khỏe cổ tay Cách để Tiếp thị Sản phẩm Cách để Lập Báo cáo Tài chính Cách để Tính Giá trị Trái phiếu Cách để Tập squat Cách để Kéo giãn cơ Cách để Trị tàn nhang Cách để Tập Động tác Chống đẩy Cách để Xin Thôi Việc Cách để Ấp Trứng gà Cách để Lập trang trại nuôi bò Cách để Phân biệt rắn độc Cách để Chăm sóc Nhím Cách để Cho Ngựa ăn cách làm giảm rụng lông chó how to turn seawater into drinking water how to make gunpowder how to make artificial diamond How to Make a Paper Boat how to calculate velocity How to find force of friction How to make soap How to make rocket at home how to make ice cream how to make italian sauce how to thaw salmon how to reheat steak how to whip whipping cream how to cook coconut rice how to roast duck how to marinate salmon how to make cookies how to make an omelette How to make fat cream how to make money on blogging how to make money with facebook how to sell on amazon how to trading on forex how to calculate marginal costs how to write a business report how to strengthen wrists how to marketing a products how to prepare financial statements how to calculate bond value how to perform squats how to stretch muscles how to treat freckles how to get push ups better how to quit a job how to hatch a chicken egg how to set up a cow farm how to distinguish poisonous snakes how to take care of porcupine How to feed horses how to reduce dog hair loss

60

how to teach dogs to shake hands how to clean the dog how to treat hemorrhoids how to treat a hematoma at home how to lower high blood pressure how to treat dry eyes how to treat folliculitis how to detect malaria how to extract baby teeth how to treat joint pain how to reduce itchy mosquito bites how to cure bronchitis how to get rid of bloating how to treat the flu how to treat neck pain how to get rid of emotions How to relax your mind how to overcome inferiority complex how to lose weight safely how to lose fat how to lose weight naturally How to detox heroin How to use a Condom how to prevent the flu how to get more protein How to clean water how to avoid pregnancy how to take vitamin b How to make cheese how to take a photo pose How to create a blog How to Calculate Gross Profit Ratio How to Check International Background How to calculate the FTE number How to save files to a USB flash drive How to Download Pictures from Twitter how to detect a lie How to convince People How to French Kissing

cách dạy chó bắt tay Cách để vệ sinh cho chó Cách để chữa lành trĩ Cách để Điều trị khối máu tụ tại nhà Cách để hạ huyết áp cao Cách để Điều trị Khô mắt cách điều trị viêm nang lông cách để nhân biết bệnh sốt rét cách để nhổ răng cách điều trị đau khớp Cách để giảm ngứa do muỗi đốt cách để chữa viêm phế quản Cách loại bỏ Tình trạng Đầy hơi Cách để Trị Cảm cúm cách điều trị đau cổ cách gạt bỏ cảm xúc Cách để Thư giãn Tâm trí Cách vượt qua mặc cảm tự ti cách để giảm cân an toàn Cách để Giảm mỡ thừa Cách giảm cân Tự nhiên Cách để Cai nghiện Heroin Cách để Sử dụng Bao cao su Cách để Phòng ngừa cảm cúm Cách để Bổ sung Protein Cách để Làm sạch Nước Cách để Tránh Thai Cách để Bổ sung Vitamin B Cách để Tự làm Phô mai Cách để Tạo dáng chụp hình Cách để Tạo một Blog Cách để Tính Tỷ lệ Lợi nhuận Gộp Cách để Kiểm tra lý lịch quốc tế Cách để Tính số FTE Cách để Lưu tập tin vào USB Cách để Tải ảnh từ Twitter Cách để Phát hiện Nói dối Cách để Thuyết phục Mọi người Cách để Hôn kiểu Pháp Cách để Thêm nhạc chuông vào iPhone How to add ringtones to iPhone

61

How to View Purchased Apps on iOS

How to sync Gmail contacts to iPhone How to backup iPhone data How to turn off Android autocorrect How to Download WhatsApp

Cách để Xem ứng dụng đã mua trên iOS Cách để Đồng bộ danh bạ Gmail vào iPhone Cách để Sao lưu dữ liệu iPhone Cách để Tắt autocorrect Android Cách để Tải WhatsApp Cách để Cài đặt Facebook Messenger How to Install Facebook Messenger Cách để Hủy Tài khoản Uber Cách để Xóa lịch sử trên iPhone Cách để Tạo tài khoản Snapchat How to remove an Uber account How to delete history on iPhone How to create a Snapchat account

62

63

64

65

66

67

68