• Tidak ada hasil yang ditemukan

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

N/A
N/A
Protected

Academic year: 2024

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

Copied!
80
0
0

Teks penuh

(1)

i

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

(2)

ii 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

(3)

iii

“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.”

(4)

iv

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!

(5)

v

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.

(6)

vi

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.

(7)

vii

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

(8)

viii

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

(9)

ix

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

(10)

x

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

(11)

xi

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

(12)

xii

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

(13)

1

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:

(14)

2

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:

(15)

3

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 thì không:

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

(16)

4

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 mục đích cần tìm kiếm.

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

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.

(17)

5

- 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 trang web.

Hình 6: Trang wikiHow

(18)

6

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.

(19)

7

- 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.

(20)

8

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:

(21)

9

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

(22)

10

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.

(23)

11 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 chức năng tìm kiếm và trả về kết quả tìm kiếm cho người dùng.

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

(24)

12 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:

(25)

13

- 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

(26)

14

- 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 tablesindices 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:

(27)

15 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.

(28)

16

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

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

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 ---

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ả

(29)

17

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

(30)

18 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.

(31)

19 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 dùng có thể thấy nhanh nhất.

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

- 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.

(32)

20

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ó thể hình dung được cụ thể được thông tin mà họ đang tìm kiếm.

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

(33)

21

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 - Nhận biết thực thể

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

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

(34)

22

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

(35)

23

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].

(36)

24

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-

(37)

25

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.

(38)

26 - Dễ dàng triển khai.

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

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”.

(39)

27

- 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.

(40)

28

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:

(41)

29

𝑆(𝑋, 𝑌) = ∑𝑛−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 sẽ là:

𝐽(𝑋, 𝑌) = 4

8 = 0.5 (1)

(42)

30

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

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

𝑆(𝑋, 𝑌) = 1+1+0.619774+0.705005+1+1

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

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ư:

(43)

31 - 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

(44)

32

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 gia.

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

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.

(45)

33

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]

(46)

34

Để 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ử

(47)

35 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.

(48)

36

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).

(49)

37

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.

(50)

38

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ể.

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

Hình 18: Cấu trúc lưu trữ dữ liệu bài viết của wikiHow trên database 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:

(51)

39

- 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ư:

W1 W2 Score

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

Bảng 5: Các từ tương đồng với "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.

(52)

40 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

Gambar

Hình 1: Kết quả tìm kiếm của Google cho "How-to query"
Hình 2: Google đề xuất kết quả cho câu truy vấn dạng How-to query
Hình 4: So sánh kết quả search nội dung Tiếng Anh và Tiếng Việt trên Google
Hình 5: Kết quả của Google cho "How-to query" không bao gồm các bước
+7

Referensi

Dokumen terkait

Nền tảng CNTT gồm các thành phần chính như sau: 1 Tự động thiết lập kết nối và xử lý liệu các nguồn nước thải trong khu vực, tự động tạo biên nguồn thải cho mô hình thủy lực, chất lượng

Từ những kết quả nghiên cứu trên kết hợp với thực tế của các dự án hệ thống thông tin ở Việt Nam, các tác giả đề xuất mô hình nghiên cứu những yếu tố tác động đến sự thành công của dự

Những chia sẻ tương tự về vấn đề này cũng tìm thấy ở các thông tín viên tại xã Dar Chais, “Bên cạnh việc chữa trị bằng thẻ bảo hiểm y tế ở trạm xá, họ còn có ý cho rằng: nhiều lúc

Trường hợp sử dụng windowing, một số lượng đáng kể sóng mang con được phân bổ mức công suất tối đa mức công suất đã biết trước,chỉ một số ít các sóng mang con nằm gần PU có mức công