ĐẠI HỌC BÁCH KHOA HÀ NỘI TRƯỜNG CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG BÁO CÁO BÀI TẬP CUỐI KỲ TÍCH HỢP DỮ LIỆU ĐỀ TÀI: TÍCH HỢP DỮ LIỆU TỪ CÁC TRANG TIN TỨC, XÁC ĐỊNH THỰC THỂ, QUAN HỆ THỰ
GIỚI THIỆU CHUNG
Giới thiệu đề tài
Nhóm em chọn đề tài thu thập, xây dựng hệ thống tích hợp dữ liệu từ các trang báo khác nhau Vì nhóm muốn giải quyết bài toàn người đọc muốn có được các thông tin chính xác và nhanh chóng từ các trang báo tin cậy trên internet
Tiếp theo đó từ các dữ liệu đó, chúng em cũng thực hiện phân tích và nhận dạng các thực thể xuất hiện, đồng thời xây dựng mối quan hệ giữa chúng.
Hướng tiếp cận, giải quyết
Sau khi tìm hiểu về đề tài, cụ thể là cách thức để lưu trữ dữ liệu sau khi thu thập Nhóm em quyết định lựa chọn hướng tiếp cận dựa trên Data warehouse (kho dữ liệu) Vì các dữ liệu bài báo khá cố định khi đã đăng tải, nên việc thay đổi, xóa sửa hầu như không gặp phải Do đó lưu trữ dữ liệu dạng vật lý, các bản ghi là phù hợp so với hướng tiếp cận dữ liệu ảo (data virtualization)
Dữ liệu sau khi nhóm thu thập được sẽ được đẩy vào kho lưu trữ dưới dạng các bản ghi (json ), được truy vấn, phân tích tùy vào nhu cầu
Nhận dạng thực thể thì nhóm sẽ sử dụng thư viện huấn luyện cho tiếng Việt để độ chính xác cao hơn các model khác, từ đó trích rút quan hệ giữa các thực thể đã được xác định.
KIẾN TRÚC HỆ THỐNG
Kiến trúc tổng quan
Tổng quan hệ thống sẽ bao gồm các thành phần sau: Crawler thu thập và tích hợp dữ liệu từ các bài báo, DataWareHouse để lưu trữ dữ liệu, server nhằm xử lý dữ liệu, yêu cầu người dùng đến trang đọc báo và người dùng cuối.
Hình Ki n trúc t ng quan h th ng 2 ế ổ ệ ố
Crawler
Scrapy là một framework thu thập dữ liệu web ở mức cao và nhanh chóng, nó được sử dụng để thu thập dữ liệu các trang web và trích xuất dữ liệu có cấu trúc từ các trang của chúng.Nó có thể được sử dụng cho nhiều mục đihcs khác nhau, từ khai thác dữ liệu đến giám sát và tự động kiểm tra(testing)
Hiệu suất của nó rất nhanh, hơn nữa nó được xây dựng dựa trên Twisted, một khung mạng không đồng bộ, sử dụng cơ chế không chặn trong khi gửi yêu cầu đến người dùng.Một số ưu điểm của Scrapy trong thu thập dữ liệu là:
• Scrapy có hỗ trợ tích hợp để trích xuất dữ liệu từ các nguồn html bằng cách sử dụng biểu thức XPath và biểu thức CSS
• Nó là thư viện di động, được biết bằng python
• Tốc độ nhanh hơn các thư viện thu thập khác Nó có thể giải nén các trang web với tốc độ nhanh hơn vài chục lần, hơn nữa nó tiêu tốn ít bộ nhớ và CPU
Hình C u trúc scrapy 3 ấ Thành phần của Scrapy bao gồm phần chính: 6
• Scrapy Engine: Kiểm soát luồng dữ liệu của hệ thống, kích hoạt sự kiện khi có hành động xảy ra như click phân trang…
• Scheduler: Có chức năng như một hàng đợi, sắp xếp thứ tự các url cần download
• Downloader: Thực hiện download các trang web trong Scheduler và cung cấp cho Scrapy Engine
• Spiders: Class được viết bởi lập trình viên, có chức năng bóc tách các dữ liệu cần thiết từ trang web thông qua các selector và tạo các url mới để đưa vào Scheduler
• Item Pipeline: Những dữ liệu được bóc tách từ Spiders sẽ được đưa vào đây để lưu trữ theo định dạng mong muốn: text, json…
• Các middlewares: Là các thành phần nằm giữa Engine với các thành phần khác, chúng đều có mục địch là giúp người dùng có thể tùy biến, mở rổng khả năng xử lý cho các thành phần VD: sau khi dowload xong url, bạn muốn tracking, gửi thông tin ngay lúc đó thì bạn có thể viết phần mở rộng và sửa lại cấu hình để sau khi Dowloader tải xong trang thì sẽ thực hiện việc tracking o Spider middlewares: Là thành phần nằm giữa Eninge và Spiders, o Downloader middlewares: Nằm giữa Engine và Dowloader, chúng xử lý các request được đẩy vào từ Engine và các response được tạo ra từ Dowloader o Scheduler middlewares: Nằm giữa Engine và Scheduler để xử lý những requests giữa hai thành phần
2.2.3 Luồng thực hiện trong scrapy
• Khi bắt đầu crawl một website, Engine sẽ xác định tên miền và tìm vị trí của spider đó và yêu cầu spider đó tìm các urls đầu tiên để crawl
• Engine nhận danh sách các urls đầu tiên từ spider, gửi cho Scheduler để sắp xếp
• Engine yêu cầu danh sách các urls tiếp theo từ Scheduler
• Engine nhận danh sách các url tiếp theo từ Scheduler vào gửi đến Dowloader (requests)
• Downloader nhận request và thực hiện việc tải trang, sau khi tải xong sẽ tạo một response và gửi lại Engine
• Respone từ Dowloader sẽ được Engine đẩy qua Spiders để xử lý
• Tại Spiders, khi nhận được response, chúng bóc tách thông tin từ response (tilte, content, author, date publish ) và những url có khả năng để crawl và đẩy lại cho Engine (requests)
• Ở bước này, Engine nhận được kết quả từ Spiders sẽ thực hiện 2 công việc: đẩy những dữ liệu đã được bóc tách tới Item Pipeline để xử lý và lưu vào Databases, đẩy những url mới (requests) mới về Scheduler và bắt đầu lại từ bước 3(nhận các yêu cầu cho đến khi không còn request nào từ Scheduler).
Datawarehouse
Datawarehouse nhóm sử dụng MongoDB Atlas nhằm tổng hợp và lưu trữ dũ liệu trên cloud nhằm giúp các thành viên trong nhóm có thể sử dụng được data mới nhất
MongoDB là một hệ quản trị cơ sở dữ liệu NoSQL mã nguồn mở đa nền tảng viết bằng C++ Bản ghi trong MongoDB được lưu trữ dạng một dữ liệu văn bản (Document), là một cấu trúc dữ liệu bao gồm các cặp giá trị và trường tương tự như các đối tượng JSON MongoDB được phát triển bởi MongoDB Inc dưới dạng giấy phép Server Side Public License (SSPL)
MongoDB Atlas là cloud database của MongoDB được ra mắt vào năm 2016 chạy trên AWS, Microsoft Azure và Google Cloud Platform Dữ liệu trong mỗi Cluster ở Atlas được lưu trữ theo cơ chế Replication, với 3 nodes: 1 master (primary) và 2 slaves (secondary).
Server
Trang web được xây dựng theo cơ chế Client Server Server nhóm sử dựng các - framework để lập trình cho Frontend là ReactJs và Backend nhóm sử dụng Django
ReactJS là một thư viện JavaScript mã nguồn mở được phát triển bởi Facebook nhằm tạo ra các ứng dụng web nhanh và hiệu quả với mã nguồn Mục đích chính của ReactJS là khiến cho website hoạt động mượt mà, khả năng mở rộng cao và đơn giản Thay vì làm việc trên toàn ứng dụng web, ReactJS cho phép các nhà phát triển có thể phá vỡ giao diện người dùng phức tạp một cách thuận lợi thành các thành phần đơn giản Nhóm sử dụng thư viện này vì đây là thư viện đơn giản và có cộng đồng hỗ trợ lớn
Django là một framework phát triển ứng dụng web mã nguồn mở được viết bằng Python Nó tập trung vào việc tạo ra các ứng dụng web mạnh mẽ và linh hoạt, với mục tiêu giảm thiểu công việc lặp lại và tăng năng suất phát triển Nhóm sử dụng Django vì đây là thư viện có nhiều hỗ trợ trong việc quản lý cơ sở dữ liệu Django cung cấp một ORM (Object Relational Mapping) mạnh mẽ, cho phép bạn tương - tác với cơ sở dữ liệu bằng cách sử dụng các đối tượng Python thay vì viết các truy vấn SQL trực tiếp Điều này giúp giảm thiểu công việc phức tạp của việc xử lý cơ sở dữ liệu và giúp bạn tập trung vào việc phát triển ứng dụng
THU THẬP, XỬ LÝ DỮ LIỆU
Phân tích chung
Thu thập dữ liệu là một công đoạn rất quan trọng trong kiến trúc của nhóm em nói riêng và các hệ thống xử lý lớn nói chung.Do đó nhóm đã tìm hiểu khá kỹ về cách thức để thu thập được dữ liệu đủ lớn và rõ ràng
Với đề tài mà nhóm em lựa chọn thì việc tìm được các trang báo đáng tin cậy không khó khăn, chính vì vậy nhóm đã tìm được khoảng 17 trang báo khác nhau để tiến hành thu thập dữ liệu:
• An ninh thủ đô: https://www.anninhthudo.vn/
• Báo pháp luật: https://baophapluat.vn/
• Báo tin tức: https://baotintuc.vn/
• Chính phủ: https://baochinhphu.vn/
• Công an nhân dân: https://cand.com.vn/
• Doanh nghiệp Việt Nam: https://doanhnghiepvn.vn/
• Kinh tế đô thị: https://kinhtedothi.vn/
• Người lao động: https://nld.com.vn/
• Nhân dân: https://nhandan.vn/
• Pháp luật HCM: https://plo.vn/
• Sài Gòn giải phóng: https://www.sggp.org.vn/
• Tiền phong: https://tienphong.vn/
• Tri thức cuộc sống: https://kienthuc.net.vn/
Trích xuất các trường dữ liệu
Với mỗi trang báo kể trên chúng em thu thập dữ liệu có các trường như nhau, gồm 10 trường dữ liệu:
Bảng 1 Các trường d li u thu thữ ệ ập
Tên trường Ý nghĩa base_url url trang báo chính url url bài báo được crawl category Thể loại bài báo chính subcategory Thể loại bài báo phân nhỏ hơn (Ví dụ trong thể loại “Giải trí” có subcategory phim, nhạc …) title Tiêu đề bài báo abstract Tóm tắt nội dung bài báo content Nội dung bài báo publish Thời gian phát hành image Ảnh liên quan bài báo html Các thẻ html
Thu thập dữ liệu
3.3.1 Các công nghệ sử dụng
Trong bài tập lớn nhóm quyết định sử dụng Scrapy như một công cụ chính để thu thập dữ liệu Tổng quan về Scrapy nhóm em đã trình bày trong mục 2 chương 2
Bên cạnh đó nhóm cũng dùng thư viện Beautifulsoup để hỗ trợ quá trình bóc tách các thẻ BeautifulSoup là một thư viện Python dùng để trích rút dữ liệu từ các định dạng file HTML và XML Nó hoạt động cùng với các parser (trình phân tích cú pháp), cung cấp cho người dùng các cách để điều hướng, tìm kiếm và chỉnh sửa trong parse tree (cây phân tích được tạo từ parser) Nhờ các parser này,BeautifulSoup đã giúp các lập trình viên tiết kiệm được nhiều giờ làm việc khi trích xuất dữ liệu
3.3.2 Quá trình thu thập dữ liệu
Nhóm em tiến hành thu thập từ các trang web đã đưa ra ở mục 3.1 Bên dưới là cấu trúc cơ bản của một spider:
Hàm start_requests( ) để lấy các url và sẽ chuyển đến xử lý bởi hàm parse_page( ) Sau đó dữ liệu lấy về được phân tích cụ thể thông qua hàm parse_news( ).Cuối cùng hàm closed sẽ làm nhiệm vụ lấy các thông tin đã thu thập được và xử lý nếu cần.
Tiếp theo, chúng em thực hiện chạy cùng lúc 17 Spider để thu thập dữ liệu từ 17 trang báo, đây là ưu thế của Scrapy trong thu thập dữ liệu từ nhiều nguồn với tốc độ cao:
Hình Minh h a thu th p d li u b ng nhi u Spider 8 ọ ậ ữ ệ ằ ề
3.3.3 Kiểm tra trùng lặp, đẩy lên server
Với mỗi dữ liệu thu thập được, nhóm em tiến hành đối sánh với dữ liệu hiện có trên database server và nếu không có trùng lặp sẽ tiến hành đẩy dữ liệu mới lên và cập nhật:
Hình Minh h a th c hi n y d9 ọ ự ệ đẩ ữ liệu thu thập được lên server
Hình bên dưới hiển thị dữ liệu sau khi được đưa lên server, gồm 10 trường dữ liệu biểu diễn thông qua định dạng dict (json)
Hình Minh h a d li10 ọ ữ ệu sau khi được đẩy lên server
Hình Hi n th s 11 ể ị ố lượng bài báo thu thập được
Hiện tại nhóm đã thu thập được hơn 10 000 bài báo từ 17 trang báo khác nhau, trong đó top3 là báo Tiền Phong, VnExpress, VTC lần lượt lấy được 2058,
Hình Th ng kê các bài báo theo ngu n 12 ố ồ
Hình Th ng kê các bài báo theo lo i danh m c 13 ố ạ ụ
Phân theo đề mục nhỏ (subcategory) thì chúng em thu thập được 46 loại khác nhau, các tin tức giải trí, thời sự, thế giới chiếm top3 số lượng, lần lượt là 975,
Hình Hi n th s lo i subcategory 14 ể ị ố ạ
Do mỗi bài báo đều có một quy chuẩn chung, từ một số bài chỉ đăng video thì các bài đều sẽ có các phần : ‘title’, ‘abstract’, ‘content’,… do đó nên việc đưa bài báo từ các trang báo khác nhau về một lược đồ chung là không khó do đã cso quy định sẵn như vậy rồi Và ngay từ bước đó nhóm đã quy chuẩn theo đó và crawl dữ liệu theo các trường như vậy nên không cần phải matching các schema
Tuy nhiên, hệ thống cần phải phân các bài báo theo các category cho người dùng Tổng hợp từ 20 trang báo, bộ dữ liệu gôm 46 mục category khác nhau(hình 14), như vậy cần phải nhóm các đề mục nay với nhau thành các đề mục có nội dung chung nhằm đảm bảo trải nghiệm người dùng
Danh sách các đề mục nhóm tổng hợp được:
['Hậu trường', 'Giao thông', 'Tuy n sinh', 'Tay lái', 'Giáo d ể ục', 'Bóng đá quố ế', 'Th ị c t trườ ng', 'Du l ch', 'Goft', 'Doanh nghi p', 'Th gi i', 'B ị ệ ế ớ ất động sản', 'Du học', 'Giới sao', 'Tài chính', ' m th c', 'Xe', 'Quân s ', 'Ti Ẩ ự ự ếng Anh', 'Đời sống', 'Chính trị', 'Pháp luật', 'Nh c' ạ , 'Lao độ ng-Vi ệc làm', 'B nh', 'Th i s ', 'Th thao', 'H ệ ờ ự ể ồ sơ', 'Phân tích', 'Gia đình', 'Pháp đình', 'Quầ n v ợt', 'Dinh dưỡ ng', 'Sống kh e', 'S c kh e', 'Di ỏ ứ ỏ ễn đàn', 'Chứng khoán', 'Các môn khác', 'Cu c s ộ ống đó đây', 'Tư vấn', 'Tiêu dùng', 'Phim', 'Bóng đá Việt Nam', 'Thời trang', 'Kinh doanh', 'Gi i trí'] ả
Nhóm sử dụng pretrain PhoBERT để embedding cho nội dung của từng bài báo Coi mỗi đề mục là 1 cụm, nhóm tìm tâm cụm đó Từ 46 tâm cụm, nhóm tiến hành dùng Kmeans và độ đo “Inertia”, nếu chỉ số này không giảm đáng kể sau khi tăng số cụm trong phạm vi đó thì đấy là số cụm hợp lý:
Số cụm được cho là hợp lý tại vị trí 10 Khi nhóm thử phân các đề mục với số cụm là 10 được một kết quả tạm chấp nhận được:
[['Giới sao', 'Nhạc', 'Phim', 'Th i trang', 'Gi ờ ải trí'],
['Thế gi i', 'Quân s ', 'Phân tích', 'Cu c s ớ ự ộ ống đó đây'],
['Giao thông', 'Du l ch', 'Doanh nghi p', 'B ị ệ ất độ ng s n', 'Tài chính', ' m th c', 'Chính tr ', ả Ẩ ự ị 'Lao động-Việc làm', 'Th i s ', 'Ch ng khoán', 'Tiêu dùng', 'Kinh doanh'], ờ ự ứ
['Tay lái', 'Th ị trườ ng', 'Xe', 'Di ễn đàn'],
['Bóng đá quố c tế', 'Thể thao', 'Bóng đá Việ t Nam'],
['Goft', 'Qu n v t', 'Các môn khác'], ầ ợ
['Đời sống', 'Bệnh', 'Gia đình', 'Dinh dưỡ ng', 'Sống khỏe', 'Sức kh ỏe', 'Tư vấ n'],
['Pháp lu t', 'H ậ ồ sơ', 'Pháp đình'],
['Tuyển sinh', 'Giáo d c', 'Du h c', 'Ti ụ ọ ếng Anh']]
Ta thấy nhóm các đề mục: ['Tuyển sinh', 'Giáo d c', 'Du h c', 'Ti ụ ọ ếng Anh']] khá là hợp lý vì có chung chủ đề chính là trong học tập, du học Hay các nhóm khác cũng hợp lý, tuy nhiên vẫn có các đề mục bị nhóm với nhau không hợp lý lắm: ['Giao thông', 'Du l ch', 'Doanh nghi p', 'B ị ệ ất độ ng s n', 'Tài chính', ' m th c', 'Chính tr ', ả Ẩ ự ị 'Lao động-Việc làm', 'Th i s ', 'Ch ng khoán', 'Tiêu dùng', 'Kinh doanh'] ờ ự ứ
Nguyên nhân có thể chỉ ra là có những đề mục số lượng tin bài rất nhỏ, có những đề mục chủ đề lại rất rộng, nhiều tin bài, điều đó có thể dẫn đến mô hình của nhóm không chính xác
Tuy vậy thì đây cũng là bước xử lý đã giúp đỡ chúng em, có thể tham khảo và tiếp tục phân cụm các đề mục một nhanh chóng thay vì ngồi đọc và gh p 46 đề é mục
Sau khi thêm các bước xử lý bằng cơm thì các đề mục được phân như sau:
Thời trang Phim Hậu trường
Sống khỏe Bệnh Đời sống Ẩm thực Đời sống
Xe Xe Tay lái Thị trường
Trong bài toán tích hợp dữ liệu này của chúng em, để đảm bảo trải nghiệm người dùng không gặp những bài báo có nội dung giống nhau Mình cần sử lý trùng lặp giữa các bài báo Hai bài báo được coi là trùng lặp nếu như hai bài báo đó cùng nói về một chủ đề, nội dung có title, abstract, content là gần giống
Trước đó trong bước thu thập dữ liệu nhóm đã xử lý những bài báo có tiêu đề giống hệt nhau sẽ chỉ lấy bài báo đầu tiên Tuy nhiên sẽ có những trường hợp như sau: Các trang báo sao chép nội dung của nhau và chỉ sửa tiêu đề, tóm tắt đi một tý
Kết quả dữ liệu thu thập trên server
ví dụ này 2 bài báo có nôi dung gần giống nhau, chỉ khác mỗi ngày đăng và số tập trên đó
Sau quá trình training và gán nhãn thì bộ dữ liệu nhóm thu thập đước có 10027 clusters / 10597 dữ liệu Tức là có 570 bài báo sẽ bị loại do có nội dung giống nhau.
XÁC ĐỊNH THỰC THỂ, QUAN HỆ GIỮA CÁC THỰC THỂ
Cơ sở lý thuyết
Named Entity Recognition -NER: nhận dạng thực thể, là tác vụ cơ bản trong lĩnh vực Xử lý ngôn ngữ tự nhiên Vai trò chính của tác vụ này là nhận dạng các cụm từ trong văn bản và phân loại chúng vào trong các nhóm đã được định trước như tên người, tổ chức, địa điểm, thời gian, loại sản phẩm, nhãn hiệu, vân vân và vân vân Từ kết quả của task vụ NER có thể xử lý cho nhiều bài toán phức tạp hơn như Chatbot, Question Answering, Search…
Ví dụ về nhận diện thực thể:
Hình Minh h a nh n d ng th c th có tên 15 ọ ậ ạ ự ể
Dependency parsing: phân tích cú pháp phụ thuộc Không phân tích chủ ngữ, vị , ngữ, các cụm danh từ, cụm động từ… thay vì đó, phân tích quan hệ phụ thuộc giữa các từ trong câu với nhau Thường liên quan chặt chẽ đến bài toán Gán nhãn từ loại (Part Of Speech Tagging)
Ví dụ về phân tích cú pháp phụ thuộc:
Hình Minh h a phân tích cú pháp ph thu c 16 ọ ụ ộ
Một quan hệ phụ thuộc được thể hiện bằng 1 mũi tên có hướng, trong đó : đầu không có mũi tên là từ được bổ nghĩa, đầu có mũi tên là từ bổ nghĩa, từ ở giữa là nhãn quan hệ phụ thuộc giữa 2 từ này Ví dụ “ăn” được bổ nghĩa bởi từ “Bố” (ai ăn?)
Một số nhãn phụ thuộc và ner được sử dụng:
Hình M t s nhãn ph thu c s d ng 17 ộ ố ụ ộ ử ụ
Hướng tiếp cận giải quyết bài toán
Hiện nay có 3 phương pháp tiếp cận để giải bài toán này: Phương pháp dựa trên học máy có giám sát, hương pháp dựa trên giám sát từ xa hương pháp dựa p , p trên phân tích cú pháp phụ thuộc
• Phương pháp dựa trên học máy có giám sát vẫn cho chất lượng tốt nhất mặc dù yêu cầu có dữ liệu gãn nhãn để huấn luyện mô hình Cũng tương tựnhư đối với bài toán nhận diện thực thểcó tên, các phương pháp dựa trên đặc trưng đòi hỏi phải xây dựng tập đặc trưng một cách thủcông và nhiều khi đòi hỏi các đặc trưng mang tính ngôn ngữ như từ loại hay quan hệ phụ thuộc (Culotta & Sorensen 2004) Trong khi đó, các phương pháp dựa trên mạng nơ ron có thể- tự học được ra các đặc trưng phù hợp một cách tự động từ dữ liệu huấn luyện (Nguyen & Grishman 2017) Mặc dù cho chất lượng tốt nhất, nhưng phương pháp dựa trên học máy có giám sát gặp khó khăn khi mở rộng ra các kiểu quan hệ mới hay các miền dữ liệu thuộc lĩnh vực khác
• Phương pháp dựa trên giám sát từ xa phù hợp với xu hướng trích rút các quan hệ mở từ dữ liệu lớn và đa dạng trên Internet (Agichtein & Gravano 2000; Etzioni et al 2008; Fader et al 2011) Trong phương pháp này, dữ liệu huấn luyện ban đầu được sinh ra dựa trên các ví dụ mẫu được lấy ra từ một cơ sở tri thức bên ngoài (ví dụ Wikipedia) Ngoài các ví dụ mẫu, phương pháp này đòi hỏi một lượng dữ liệu phi cấu trúc lớn và giàu thông tin để có thể tạo ra dữ liệu huấn luyện đủ chất lượng và số lượng Với những ưu nhược điểm trên, phương pháp dựa trên giám sát từ xa tuy không cho chất lượng cao như phương pháp dựa trên học máy có giám sát nhưng có thể được áp dụng để mở rộng bài toán phát hiện mối liên hệ
• Phương pháp dựa trên phân tích cú pháp phụ thuộc không yêu cầu dữ liệu huấn luyện hay cơ sở tri thức có trước (Fundel et al 2007) Các quan hệ về mặt cú pháp trong câu sẽ được sử dụng đểphát hiện ra các quan hệ giữa các thành phần trong câu Phân tích cú pháp là bài toán xác định mối liên hệ giữa các thành phần trong câu Trong khi bài toán phân tích cú pháp thành phần tập trung phân tích câu thành dạng cấu trúc câu với các nút trên là các cụm từ (constituent), bài toán phân tích cú pháp phụ thuộc tập trung vào việc tìm ra mối quan hệ trực tiếp giữa hai từ trong câu (Nguyen 2018) Vì vậy, phân tích cú pháp phụ thuộc có ứng dụng trực tiếp hơn trong các bài toán như phân tích ngữ nghĩa hay trích rút quan hệ.
Do thời gian của nhóm có hạn, tính đến việc phải tự gán nhãn, xây dựng bộ dữ liệu cũng như bài toán này ở Việt Nam còn chưa có nhiều nghiên cứu Nhóm quyết định chọn phương pháp trích rút quan hệ giữa các thực thể dựa trên phân tích cú pháp phụ thuộc và hiện tại đã có 1 thư viện hỗ trợ nhóm trong phương pháp này là thư viện vncorenlp
Nhóm em đã tiến hành tìm hiểu và sử dụng thư viện vncorenlp để phục vụ cho nhiệm vụ xác định các thực thể trong câu của bài toán VnCoreNLP là một thư viện xử lý ngôn ngữ tự nhiên tiếng Việt mã nguồn mở
• Thư viện này được phát triển với mục đích hỗ trợ cho các nghiên cứu về xử lý ngôn ngữ tự nhiên tiếng Việt VnCoreNLP bao gồm nhiều công cụ xử lý ngôn ngữ tự nhiên như phân loại từ loại, tách câu, phân tích cú pháp, gán nhãn thực thể và phân tích tình cảm trong văn bản
• Thư viện này có thể xử lý trên nhiều nguồn dữ liệu khác nhau như định dạng văn bản, định dạng HTML hoặc tập tin đã được xử lý bởi những công cụ phân tích ngôn ngữ tự nhiên khác VnCoreNLP được viết bằng ngôn ngữ lập trình Java và hỗ trợ nhiều ngôn ngữ lập trình như Java, Python và Ruby Thư viện này được phát hành dưới giấy phép Apache License 2.0, cho phép sử dụng và phân phối miễn phí
Sau đó dựa vào phân tích cú pháp phụ thuộc trong thư viện vncorenlp để tiến hành xây dựng các triple (bộ quan hệ giữa các thực thể được nhận dạng), nó được phục vụ cho việc visualize các mối quan hệ thành đồ thị tri thức
Luồng thực hiện
Nhóm thực hiện chạy trên googlecolab để có thể cài đặt các thư viện dễ dạng cho việc sử dụng
Hình Hi n th18 ể ị cài đặt thư viên py_vncorenlp
Cài đặt thư viện Vncorenlp để nhận dạng thực thể Sau đó cài đặt model để nhận dạng các thực thể xuất hiện trong câu đầu vào:
Hình Hi n th model nhân d ng th c th và ví d 19 ể ị ạ ự ể ụ Đầu ra sẽ ứng với 6 cột đại diện cho thứ tự từ (index), từ (wordform), thẻ từ loại (posTag), nhãn nhận dạng thực thể (nerLabel), từ mà nó bổ xung ý nghĩa (head), quan hệ phụ thuộc (depLabel)
Xây dựng hàm để trả về kết quả là danh sách các thực thể được nhận dạng trong câu đầu vào:
Hình Minh h a quá trình sinh triple 21 ọ
Cuối cùng, khi đã có bộ ba triple, nhóm em tiến hành visualize thành đồ thi để biểu thị mối quan hệ của từng bộ:
Hình Minh h a visualize quan h th c th 22 ọ ệ ự ể
XÂY DỰNG WEB TÍCH HỢP
Giới thiệu chung
Nhóm mục tiêu xây dựng 1 website tổng hợp các bài báo thu thập được từ các nhiều trang báo khác Để xây dựng cơ sở dữ liệu chủ yếu xoay quanh bảng News:
Hình Minh h a xây d ng c23 ọ ự ác trường dữ liệu
Hệ thống sẽ lấy các thông tin của bài báo và đưa qua frontend qua các API:
Hình Hi n th cá API c a web 24 ể ị ủ
Các tính năng của Website
5.2.1 Hiển thị các bài báo mới nhất vừu thu thập về
Khi truy cập vào trang web thì người dùng sẽ th y gi o di n g m các bài báo ấ ạ ệ ồ mới c a các ngu n báo khác nhau ủ ồ
Hơn nữa người đọc có thể thực hiện các thao tác khác nhau bên dưới
Hình Hi n th các bài báo m25 ể ị ới thu th p ậ
5.2.2 Duyệt thêm khi lướt chuột xuống
Người đọc cuộn trang để tải các bài báo khác
Hình Hi n th các bài báo khi cu n trang xu ng 26 ể ị ộ ố
Hình Hi n th các bài báo khi cu n trang xu ng(tt) 27 ể ị ộ ố
5.2.3 Truy cập trang web gốc khi nhấn vào trang báo để đọc
Người đọc click vào từng bài báo muốn xem chi tiết trên web:
Hình Minh h a thao tác truy c p bài báo g c 28 ọ ậ ố
Sau đó web sẽ hiển thị bài báo gốc chi tiết cho người đọc:
Hình Minh h a hi n th trang báo g29 ọ ể ị ốc được ch n ọ