Các thách thức kỹ thuật khi xây dựng công cụ tìm kiếm tiếng Việt

Sau nhiều năm sử dụng các công cụ tìm kiếm trên mạng, đồng thời hơn một năm sử dụng mã nguồn mở Solr-Lucene cho mục đích tìm kiếm dữ liệu tác giả xin tổng kết các thách thức kỹ thuật gặp phải khi xây dựng một công cụ tìm kiếm tiếng Việt.

Hình ảnh về các search engine sưu tầm trên mạng

Hiện tại công cụ tìm kiếm tiếng Việt vẫn chưa gặt hái được thành công như Bamboo, Xalo, Socbay,… trong khi đó thì công nghệ tìm kiếm của các ông lớn như Google, Bing đang phát triển mạnh mẽ. Tuy nhiên không phải là không còn những “kẽ hở” để cho công cụ tìm kiếm trong nước phát triển, ví dụ như tìm kiếm theo chiều dọc, hay tìm kiếm thông minh, trên các nền tảng ngoài máy tính…
Cơ hội sử dụng lại/tham khảo mã nguồn mở cũng rất lớn, trong bài viết này tác giả sẽ đề cập đến một thư viện mã nguồn mở rất nổi tiếng là Lucene và một ví dụ thành công là Google Search

1. Đặc thù ngôn ngữ tiếng Việt.

Đặc điểm ngôn ngữ tiếng Anh(một ngôn ngữ phổ thông trên internet) và các ngôn ngữ tương tự là các từ có nghĩa cách nhau bằng một khoảng trắng còn đối với tiếng Việt thì không phải hoàn toàn thế( ví dụ từ ‘ví dụ’, ‘du dương’,… nếu cắt bằng khoảng trắng thì ra các từ đơn vô nghĩa( không biểu hiện nghĩa ban đầu của từ ghép). Như vậy việc xác định từ có nghĩa bằng khoảng trắng để có một đơn vị từ(term) phụ vụ cho mục đích tìm kiếm đối với tiếng Việt là không có giá trị.
Cũng có các công trình nghiên cứu về việc tách từ cho tiếng Việt như vntokenizer của ông Lê Hồng Phương nhưng do tính chất đa nghĩa của câu tiếng Việt nên không phải đoạn văn bản nào cũng có thể tách từ một cách chuẩn xác( ví dụ cụm từ ‘con ngựa đá con ngựa đá’ trong từng hoàn cảnh có ý nghĩa khác nhau).
Như vậy việc xây dựng từ điển từ cho tập văn bản-trang web tiếng Việt là cực kỳ khó khăn và không chuẩn xác. Giải pháp cắt đơn vị từ bằng khoảng trắng có thể áp dụng cho công cụ tìm kiếm tiếng Việt nhưng nó sẽ làm cho việc “hiểu” ngôn ngữ tiếng Việt của công cụ bị bỏ qua. Trong khi đó muốn công cụ tìm kiếm tiếng Việt thành công thì việc địa phương hóa – hiểu tiếng Việt là một yêu cầu số một.

2. Performance và tính mở rộng.

Khi Google ra đời vấn đề performance có thể đã là một câu hỏi nhưng không phải quá quan trọng như ngày nay. Tuy nhiên ngày nay đã khác. Lượng dữ liệu rất lớn và tăng lên theo từng giây đòi hỏi performent và tính mở rộng cực kỳ cao. Số lượng server phục vụ cho Google Search là một con số khổng lồ. Nó đảm bảo Google Search quản lý một lượng dữ liệu rất lớn đồng thời đáp ứng cho nhu cầu mở rộng rất tốt( scale up – thêm mới một server vào hệ thống, bỏ một server ra khỏi hệ thống, một server bị hỏng hóc,… không ảnh hướng tới tính sẵn sàng phục vụ của hệ thống).
Tại thời điểm hiện tại cũng có nhiều giải pháp áp dụng Lucene vào tìm kiếm phân tán như katta, Solr Cloud, Hbasene, HbaseDirectory,.. tuy nhiên kết quả mới dừng ở mức độ nghiên cứu chưa có bản chính thức nào được áp dụng rộng rãi.

3. Thời gian thực(Near realtime)

Hiện nay các mạng xã hội ra đời, thông tin do một lượng lớn người cung cấp nên tốc độ cập nhật thông tin trên những hệ thống này cập nhật gần như tức thì( khi có một sự kiện người ta có thể đưa thông tin lên những mạng xã hội kiểu Twitter, Facebook). Nếu hệ thống tìm kiếm muốn thành công thì phải đi trước đối thủ một bước, tức là cập nhật thông tin từ các mạng xã hội, các trang tin tức một cách nhanh nhất có thể( near realtime).
Để đảm bảo dữ liệu được lập chỉ mục(indexing) một cách gần thời gian thực cũng có các dự án support thư viện Lucene như Zoie. Tuy nhiên đây chỉ là dự án cho một hệ thống Lucene đơn lẻ và nó cũng không tính tới thời gian cập nhật dữ liệu từ hệ thống mạng xã hội sang hệ thống của mình để bắt đầu chức năng lập chỉ mục.

4. Nghiên cứu hành vi của người sử dụng

Việc nghiên cứu hành vi, phân cụm người dùng cũng là một yếu tốt then chốt tạo nên sự thành công của các công cụ tìm kiếm nói chung. Khi lượng dữ liệu rất lớn, đối với cùng một câu truy vấn không thể trả về cùng tập dữ liệu giống nhau cho tất cả người dùng vì mỗi người thuộc một nhóm nhất định và quan tâm tới chủ đề nhất định. Ví dụ đơn giản nếu một lập trình viên tìm kiếm với cụm từ Apple, Red hat,… thì có nhiều khả năng họ quan tâm tới công ty máy tính Apple, hoặc hệ điều hành Red Hat hơn là quan tâm tới mũ đỏ hay quả táo. Đối với công cụ tìm kiếm tiếng Việt cũng không nằm ngoài nhu cầu này.
Như vậy hệ thống tìm kiếm cần phân tích hành vi của người dùng( lịch sử tìm kiếm) để xác định được người tìm kiếm thuộc nhóm người nào giúp trả ra những kết quả phù hợp. Hệ thống Google hiện tại là một ví dụ điển hình, cá nhân tôi khi tìm kiếm với các cụm từ thì các kết quả liên quan tới lập trình luôn có thứ hạng cao.

5. Công thức tính điểm

Công thức tính điểm sẽ quyết định điểm cho mỗi tài liệu-trang web, dựa trên điểm này hệ thống sẽ sắp xếp theo thứ tự kết quả trả về cho phù hợp.
Về bản chất công thức tính điểm là tính điểm “sự tương đồng” giữa câu truy vấn người dùng cung cấp và tập tài liệu-trang web. Hệ thống Lucene sử dụng công thức VSM(Vector Space Model), và công thức này cũng luôn được giới nghiên cứu đánh giá là công thức tính toán rất chuẩn.
Thách thức không nằm ở trong công thức tính điểm mà nằm ở tham số truyền vào công thức tính điểm. Ví dụ cùng một nội dung ở n tài liệu-trang web, tài liệu nào quan trọng hơn trang web nào quan trọng hơn. Nếu cùng tham số truyền vào thì n tài liệu-trang web này có cùng điểm, nhưng thực tế thì không thể thế được. Ví dụ trang vnexpress ra một bản tin, một trang khác copy nội dung về nếu 2 trang web về bản tin này có cùng số điểm là không thể chấp nhận được.
Việc xác định đâu là tài liệu quan trọng hơn, đâu là tài liệu kém quan trọng, đâu là tài liệu spam,.. bằng rất nhiều thông số khác nhau như độ nổi tiếng của trang web, tốc độ cập nhật, lịch sử hình thành,… Đây cũng là đặc sắc của hệ thống tìm kiếm Google mà mọi người thường gọi là PageRank

6. Chất lượng dữ liệu đầu vào

Bản thân tác giả không tham gia nhiều vào các mạng xã hội nước ngoài và hiếm khi theo dõi nội dung này. Tuy nhiên có theo dõi các nội dung trên các mạng xã hội của Việt Nam mới thấy kinh khủng. Ví dụ như cụm từ “rồi ạ” có rất nhiều biến thể ngôn ngữ( về chính tả sẽ là một cụm từ vô nghĩa trong tiếng Việt) như “jồi ak” “zồi aj”… Như vậy việc người dùng tìm kiếm cụm từ “rồi ạ” mà ra cả những cụm từ “jồi ak” “zồi aj” thì hệ thống tìm kiệm thật khó đáp ứng trừ khi hệ thống ghi nhớ lại tất cả các biến thể từ hoặc nghiên cứu hệ  thống chuẩn hóa cụm “jồi ak” “zồi aj” về các từ chuẩn.
Việc gõ chữ không dấu có thể coi là đặc điểm ngôn ngữ tiếng Việt. Gõ sai chính tả coi như là đặc điểm địa phương của tiếng Việt. Tuy nhiên biến thể không dấu hoặc sai chính tả trong một số trường hợp vẫn có nghĩa theo chính tả chuẩn của tiếng Việt nhưng theo nghĩa khác. Như vậy không thể đánh đồng chữ có dấu với chữ không dấu, chữ đúng chính tả và chữ đúng … phụ tả được😀.
Đáp ứng được nhu cầu này thì gần như là “nối giáo cho giặc” trái với nhu cầu “bảo vệ sự trong sáng của tiếng Việt” trên internet.

Tổng kết

Các vấn đề liệt kê phía trên không thể đảm bảo cho công cụ tìm kiếm tiếng Việt của bạn thành công, nhưng nếu bạn có nhu cầu xây dựng hoặc nghiên cứu một hệ thống tìm kiếm cho tiếng Việt thì những vấn đề liệt kê phía trên chắc chắn bạn cần phải giải quyết. Trong các vấn đề liệt kê phía trên có thể chưa đủ, chưa chuẩn, vậy xin mời các bạn đóng góp về aladeck@gmail.com để bài viết chất lượng hơn.

Nguồn: https://aladeck.wordpress.com

Tham khảo

1. Trang chủ của dự án core Lucene và các dự án liên quan
http://lucene.apache.org/
2. Trang chủ của dự án vntokenizer của ông Lê Hồng Phương
http://www.loria.fr/~lehong/tools/vnTokenizer.php
3. Giới thiệu về VSM(Vector Space Model)
http://en.wikipedia.org/wiki/Vector_space_model
4. Giới thiệu về PageRank
http://en.wikipedia.org/wiki/PageRank

This entry was posted in Phần mềm nguồn mở, Search Engine and tagged , , , , , , , , . Bookmark the permalink.

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s