Trong bài tập lớn này, chúng em tìm hiểu và trình bày về phương pháp tóm tắt văn bản bằng thuật toán K-Means là một kỹ thuật trong Xử lý ngôn ngữ tự nhiên để có thể tóm tắt được các văn
TỔNG QUAN XỬ LÝ NGÔN NGỮ TỰ NHIÊN
Tổng quan
Xử lý ngôn ngữ chính là xử lý thông tin khi đầu vào là “dữ liệu ngôn ngữ (dữ liệu cần biển đổi), tức dữ liệu “văn bản” hay “tiếng nói” Các dữ liệu liên quan đến ngôn ngữ viết (văn bản) và nói (tiếng nói) đang dần trở nên kiểu dữ liệu chính con người có và lưu trữ dưới dạng điện tử Đặc điểm chính của các kiểu dữ liệu này là không có cấu trúc hoặc nửa cấu trúc và chúng không thể lưu trữ trong các khuôn dạng cố định như các bảng biểu Theo đánh giá của công ty Oracle, hiện có đến 80% dữ liệu không cấu trúc trong lượng dữ liệu của loài người đang có [Oracle Text] Với sự ra đời và phổ biến của Internet, của sách báo điện tử, của máy tính cá nhân, của viễn thông, của thiết bị âm thanh người người ai cũng có thể tạo ra dữ liệu văn bản hay tiếng nói Vấn đề là làm sao có thể xử lý chúng, tức chuyển chúng từ các dạng chưa hiểu được thành các dạng có thể hiểu và giải thích được, tức là có thể tìm ra thông tin, tri thức hữu ích cho mình
Một văn bản thật sự (một bài báo khoa học) có thể có đến hàng nghìn câu, và không phải có một mà hàng triệu văn bản Web là một nguồn dữ liệu văn bản khổng lồ, và cùng với các thư viện điện tử – khi trong một tương lai gần các sách báo xưa nay và các nguồn âm thanh được chuyển hết vào máy tính (bằng các chương trình nhận dạng chữ, thu nhập âm thanh, hoặc gõ thẳng vào máy) - sẽ sớm chứa hầu như toàn bộ kiến thức của nhân loại Vấn đề là làm sao
“xử lý” (chuyển đổi) được khối dữ liệu văn bản và tiếng nói khổng lồ này qua dạng khác để mỗi người có được thông tin và tri thức cần thiết từ chúng.
Một số khái niệm cơ bản
Ngôn ngữ là hệ thống để giao thiệp hay suy luận dùng một cách biểu diễn phép ẩn dụ và một loại ngữ pháp theo logic, mỗi cái đó bao hàm một tiêu chuẩn hay sự thật thuộc lịch sử và siêu việt Nhiều ngôn ngữ sử dụng điệu bộ, âm thanh, ký hiệu, hay chữ viết, và cố gắng truyền khái niệm, ý nghĩa, và ý nghĩ, nhưng mà nhiều khi những khía cạnh này nằm sát quá, cho nên khó phân biệt nó
1.2.2 Xử lý ngôn ngữ tự nhiên
Xử lý ngôn ngữ tự nhiên (Natural Language Processing - NLP) là một nhánh của trí tuệ nhân tạo tập trung vào các ứng dụng trên ngôn ngữ của con người Trong trí tuệ nhân tạo thì xử lý ngôn ngữ tự nhiên là một trong những phần khó nhất vì nó liên quan đến việc phải hiểu ý nghĩa ngôn ngữ - công cụ hoàn hảo nhất của tư duy và giao tiếp
Trí tuệ nhân tạo (Artificial Intelligence - AI) là trí tuệ được biểu diễn bởi bất cứ một hệ thống nhân tạo nào Thuật ngữ này thường dùng để nói đến các máy tính có mục đích không nhất định và ngành khoa học nghiên cứu về các lý thuyết và ứng dụng của trí tuệ nhân tạo
Nhập nhằng trong ngôn ngữ học là hiện tượng thường gặp, trong giao tiếp hàng ngày con người ít để ý đến nó bởi vì họ xử lý tốt hiện tượng này Nhưng trong các ứng dụng liên quan đến xử lý ngôn ngữ tự nhiên khi phải thao tác với ý nghĩa từ vựng mà điển hình là dịch tự động nhập nhằng trở thành vấn đề nghiêm trọng Ví dụ trong một câu cần dịch có xuất hiện từ
“đường” như trong câu “ra chợ mua cho mẹ ít đường” vấn đề nảy sinh là cần dịch từ này là road hay sugar, con người xác định chúng khá dễ dàng căn cứ vào văn cảnh và các dấu hiệu nhận biết khác nhưng với máy thì không Một số hiện tượng nhập nhằng: Nhập nhằng ranh giới từ, Nhập những từ đa nghĩa Nhập nhằng từ đồng âm (đồng tự), Nhập nhằng từ loại
Dịch máy là một trong những ứng dụng chính của xử lý ngôn ngữ tự nhiên, dùng máy tính để dịch văn bản từ ngôn ngữ này sang ngôn ngữ khác Mặc dù dịch máy đã được nghiên cứu và phát triển hơn 50 năm qua, xong vẫn tồn tại nhiều vấn đề cần nghiên cứu Ở Việt Nam, dịch máy đã được nghiên cứu hơn 20 năm, nhưng các sản phẩm dịch máy hiện tại cho chất lượng dịch còn nhiều hạn chế Hiện nay, dịch máy được phân chia thành một số phương pháp như: dịch máy trên cơ sở luật, dịch máy thống kê và dịch máy trên cơ sở ví dụ.
Quy trình xử lý ngôn ngữ tự nhiên
Để máy tính có thể hiểu và thực thi một chương trình được viết bằng ngôn ngữ cấp cao, cần phải có một trình biên dịch thực hiện việc chuyển đổi chương trình đó sang chương trình ở dạng ngôn ngữ đích Chương này trình bày một cách tổng quan về cấu trúc của một trình biên dịch và mối liên hệ giữa nó với các thành phần khác như bộ tiền xử lý, bộ tải và soạn thảo liên kết, … Cấu trúc của trình biên dịch được mô tả trong chương là cấu trúc mức quan niệm bao gồm các giai đoạn: Phân tích từ vựng, Phân tích cú pháp, Phân tích ngữ nghĩa, Sinh mã trung gian, Tối ưu mã và Sinh mã đích Nói một cách đơn giản, trình biên dịch là một chương trình làm nhiệm vụ đọc một chương trình được viết bằng một ngôn ngữ - ngôn ngữ nguồn (source language) - rồi dịch nó thành một chương trình tương đương ở một ngôn ngữ khác - ngôn ngữ đích (rget languague) Một phần quan trọng trong quá trình dịch là ghi nhận lại các lỗi có trong chương trình nguồn đề thông báo lại cho người viết chương trình
Hình 1.1 Quy trình xử lý ngôn ngữ tự nhiên
Ứng dụng của xử lý ngôn ngữ tự nhiên
Nhận dạng tiếng nói (speech recognition): Từ sóng tiếng nói, nhận biết và chuyển chúng thành dữ liệu văn bản tương ứng Giúp thao tác của con người trên các thiết bị nhanh hơn và đơn giản hơn, thay vì gõ một tài liệu nào đó đọc nó lên và trình soạn thảo sẽ tự ghi nó ra Đây cũng là bước đầu tiên cần phải thực hiện trong ước mơ thực hiện giao tiếp giữa con người với robot Nhận dạng tiếng nói có khả năng trợ giúp người khiếm thị rất nhiều
Tổng hợp tiếng nói (speech synthesis): Từ dữ liệu văn bản, phân tích và chuyển thành tiếng người nói Thay vì phải tự đọc một cuốn sách hay nội dung một trang web, nó tự động đọc cho chúng Giống như nhận dạng tiếng nói, Tổng hợp tiếng nói là sự trợ giúp tốt cho người khiếm thị, nhưng ngược lại nó là bước cuối cùng trong giao tiếp giữa người với robot
Nhận dạng chữ viết (optical character recognition - OCR): Từ một văn bản in trên giấy, nhận biết từng chữ cái và chuyển chúng thành một tệp văn bản trên máy tính có hai kiểu nhận dạng: Thứ nhất là nhận dạng chữ in như nhận dạng chữ trên sách giáo khoa rồi chuyển nó thành dạng văn bản điện tử như dưới định dạng doc của Microsoft Word Phức tạp hơn là nhận dạng chữ viết y, có khó khăn bởi vì chữ viết y không có khuôn dạng rõ ràng thay đổi từ người này sang người khác Với chương trình nhận dạng chữ viết in có thể chuyển hàng ngàn đầu sách trong thư viện thành văn bản điện tử trong thời gian ngắn Nhận dạng chữ viết của con người có ứng dụng trong khoa học hình sự và bảo mật thông tin (nhận dạng chữ ký điện tử)
Dịch tự động (machine translation): Từ một tệp dữ liệu văn bản trong một ngôn ngữ (tiếng Anh), máy tính dịch và chuyển thành một tệp văn bản trong một ngôn ngữ khác Một phần mềm điển hình về tiếng Việt của chương trình này là Evtrans của Softex, dịch tự động từ tiếng Anh sang tiếng Việt và ngược lại, phần mềm từng được trang web vdict.com mua bản quyền, đây cũng là trang đầu tiên đưa ứng dụng này lên mạng
Tóm tắt văn bản (text summarization): Từ một văn bản dài (mười trang chẳng hạn) máy tóm tắt thành một văn bản ngắn hơn (một trang) với những nội dung cơ bản
Tìm kiếm thông tin (information retrieval): Từ một nguồn rất nhiều tệp văn bản hay tiếng nói, tìm ra những tệp có nội dung liên quan đến một vấn đề
(câu hỏi) cần biết (hay trả lời) Điển hình của công nghệ này là Google, một hệ tìm kiếm thông tin trên Web, mà hầu như chúng đều dùng thường xuyên Cần nói thêm rằng mặc dù hữu hiệu hàng đầu như vậy, Google mới có khả năng cho chúng tìm kiếm câu hỏi dưới dạng các từ khóa (keywords) và luôn “tìm” cho chúng rất nhiều tài liệu không liên quan, cũng như rất nhiều tài liệu liên quan đã tồn tại thì Google lại tìm không ra
Trích chọn thông tin (information extraction): Từ một nguồn rất nhiều tệp văn bản hay tiếng nói, tìm ra những đoạn bên trong một số tệp liên quan đến một vấn đề (câu hỏi) cần biết hay trả lời Một hệ trích chọn thông tin có thể lẫn vào từng trang Web liên quan, phân tích bên trong và trích ra các thông tin cần thiết, nói gọn trong tiếng Anh để phân biệt với tìm kiếm thông tin là “find things but not pages"
Phát hiện tri thức và khai phá dữ liệu văn bản (knowledge discovery and text da mining): Từ những nguồn rất nhiều văn bản thậm chí hầu như không có quan hệ với nhau, tìm ra được những tri thức trước đấy chưa ai biết Đây là một vấn để rất phức tạp và đang ở giai đoạn đầu của các nghiên cứu trên thế giới.
TỔNG QUAN BÀI TOÁN TÓM TẮT VĂN BẢN
Bài toán tóm tắt văn bản tự động
Tóm tắt văn bản tự động là tác vụ để tạo ra một tóm tắt chính xác và hợp ngữ pháp trong khi vẫn giữ được các thông tin chính và ý nghĩa của văn bản gốc Trong các năm gần đây, có rất nhiều hướng tiếp cận đã được nghiên cứu cho tóm tắt văn bản tự động và đã được áp dụng rộng rãi trong nhiều lĩnh vực
Ví dụ, máy tìm kiếm sinh ra các trích đoạn như là các bản xem trước của tài liệu, các website tin tức sinh ra các đoạn mô tả ngắn gọn cho bài viết (thường là tiêu đề của bài viết)
Mục tiêu của tóm tắt văn bản là tạo ra bản tóm tắt giống như cách con người tóm tắt, đây là bài toán đầy thách thức, bởi vì khi con người thực hiện tóm tắt một văn bản, chúng ta thường đọc toàn bộ nội dung rồi dựa trên sự hiểu biết và cảm thụ của mình để viết lại một đoạn tóm tắt nhằm làm nổi bật các ý chính của văn bản gốc Nhưng vì máy tính khó có thể có được tri thức và khả năng ngôn ngữ như của con người, nên việc thực hiện tóm tắt văn bản tự động là một công việc phức tạp.
Các hướng tiếp cận bài toán
Các hướng tiếp cận tóm tắt văn bản Nhìn chung, có hai hướng tiếp cận cho tóm tắt văn bản tự động là trích chọn (extraction) và tóm lược (abstraction) Tóm tắt văn bản có thể được phân loại dựa trên đầu vào (đơn hay đa văn bản), mục đích (tổng quát, theo lĩnh vực cụ thể, hay dựa trên truy vấn) và loại đầu ra (trích chọn hay tóm lược)
Phương pháp tóm tắt trích chọn thực hiện đánh giá các phần quan trọng của văn bản và đưa chúng một cách nguyên bản vào bản tóm tắt, do đó, phương pháp này chỉ phụ thuộc vào việc trích chọn các câu từ văn bản gốc dựa trên việc xếp hạng mức độ liên quan của các cụm từ để chỉ chọn những cụm từ liên quan nhất tới nội dung của tài liệu gốc Trong khi đó, phương pháp tóm tắt tóm lược nhằm tạo ra văn bản tóm tắt mới có thể không gồm các từ hay các cụm từ trong văn bản gốc Nó cố gắng hiểu và đánh giá văn bản sử dụng các kỹ thuật xử lý ngôn ngữ tự nhiên tiên tiến để tạo ra một văn bản ngắn hơn, truyền đạt được những thông tin quan trọng nhất từ văn bản gốc Mặc dù các tóm tắt được con người thực hiện thường không giống như trích chọn, song hầu hết các nghiên cứu về tóm tắt văn bản hiện tại vẫn tập trung vào tóm tắt bằng phương pháp trích chọn vì về cơ bản các tóm tắt sinh bởi phương pháp trích chọn cho kết quả tốt hơn so với tóm tắt bằng phương pháp tóm lược Điều này là bởi vì phương pháp tóm tắt bằng tóm lược phải đối mặt với các vấn đề như thể hện ngữ nghĩa, suy luận và sinh ngôn ngữ tự nhiên, các vấn đề này phức tạp hơn nhiều lần so với việc trích chọn câu Hướng tiếp cận tóm tắt bằng tóm lược khó hơn so với tóm tắt bằng trích chọn, song phương pháp này được kỳ vọng có thể tạo ra được các văn bản tóm tắt giống như cách con người thực hiện.
Ứng dụng
Giám sát truyền thông (Media monitoring): Vấn đề quá tải thông tin và
“sốc nội dung” đã được thảo luận rộng rãi Tự động tóm tắt tạo cơ hội để cô đọng dòng thông tin liên tục thành những phần thông tin nhỏ hơn
Bản tin (Newsletters): Nhiều bản tin hàng tuần có hình thức giới thiệu sau đó là tuyển tập các bài báo có liên quan Tóm tắt sẽ cho phép các tổ chức làm phong phú thêm các bản tin với một dòng tóm tắt (so với danh sách các liên kết), đây có thể là một định dạng đặc biệt thuận tiện trên thiết bị di động
Tiếp thị tìm kiếm và SEO (Search marketing and SEO): Khi đánh giá các truy vấn tìm kiếm cho SEO, điều quan trọng là phải hiểu toàn diện về những gì đối thủ cạnh tranh của bạn đang nói về nội dung của họ Điều này trở nên đặc biệt quan trọng kể từ khi Google cập nhật thuật toán của mình và chuyển trọng tâm sang thẩm quyền chuyên đề (thay vì từ khóa) Tóm tắt nhiều tài liệu có thể là một công cụ mạnh mẽ để nhanh chóng phân tích hàng chục kết quả tìm kiếm, hiểu các chủ đề được chia sẻ và đọc lướt những điểm quan trọng nhất
Phân tích hợp đồng pháp lý (Legal contract analysis): Liên quan đến điểm
4 (quy trình công việc tài liệu nội bộ), các hệ thống tóm tắt cụ thể hơn có thể được phát triển để phân tích các văn bản pháp luật Trong trường hợp này, một trình tóm tắt có thể tăng thêm giá trị bằng cách cô đọng hợp đồng vào các điều khoản rủi ro hơn hoặc giúp bạn so sánh các thỏa thuận
Tiếp thị truyền thông xã hội (Social media marketing): Các công ty sản xuất nội dung dạng dài, như sách trắng, sách điện tử và blog, có thể tận dụng tóm tắt để chia nhỏ nội dung này và làm cho nó có thể chia sẻ trên các trang mạng xã hội như Twitter hoặc Facebook Điều này sẽ cho phép các công ty tiếp tục sử dụng lại nội dung hiện có
Trả lời câu hỏi và bot (Question answering and bots): Trợ lý cá nhân đang tiếp quản nơi làm việc và ngôi nhà thông minh Tuy nhiên, hầu hết các trợ lý đều khá hạn chế đối với các nhiệm vụ rất cụ thể Tóm tắt quy mô lớn có thể trở thành một kỹ thuật trả lời câu hỏi mạnh mẽ Bằng cách thu thập các tài liệu phù hợp nhất cho một câu hỏi cụ thể, người tóm tắt có thể tập hợp một câu trả lời gắn kết dưới dạng một bản tóm tắt nhiều tài liệu
Sách và tài liệu (Books and literature): Google được cho là đã làm việc trong các dự án cố gắng hiểu tiểu thuyết Tóm tắt có thể giúp người tiêu dùng nhanh chóng hiểu cuốn sách nói về điều gì trong quá trình mua hàng của họ
Quá tải email (Email overload): Các công ty như Slack được sinh ra để giúp chúng ta tránh xa việc gửi email liên tục Tóm tắt có thể hiển thị nội dung quan trọng nhất trong email và cho phép chúng tôi đọc lướt email nhanh hơn
Các cuộc họp và hội nghị truyền hình (Meetings and video-conferencing): Với sự phát triển của làm việc từ xa, khả năng nắm bắt các ý tưởng và nội dung chính từ các cuộc trò chuyện ngày càng cần thiết Một hệ thống có thể chuyển giọng nói thành văn bản và tạo tóm tắt từ các cuộc họp nhóm của bạn sẽ thật tuyệt vời
Tạo nội dung tự động (Automated content creation): "Người viết rô-bốt sẽ thay thế công việc của tôi chứ?" Đó là điều mà các nhà văn đang ngày càng tự hỏi bản thân Nếu trí tuệ nhân tạo có thể thay thế bất kỳ giai đoạn nào của quá trình tạo nội dung, thì tính năng tóm tắt tự động có thể sẽ đóng một vai trò quan trọng Liên quan đến điểm 3 (các ứng dụng trong tiếp thị tìm kiếm và SEO), viết một blog tốt thường đi bằng cách tóm tắt các nguồn hiện có cho một truy vấn nhất định Công nghệ tóm tắt có thể đạt đến điểm mà nó có thể soạn một bài báo hoàn toàn nguyên bản từ việc tóm tắt các kết quả tìm kiếm có liên quan.
GIẢI THUẬT K-MEANS VÀ MÔ HÌNH WORD2VEC 17
Giải thuật K-Means
Với thuật toán K-Means Clustering, chúng ta không biết nhãn (label) của từng điểm dữ liệu Mục đích là làm thể nào để phân dữ liệu thành các cụm (cluster) khác nhau sao cho dữ liệu trong cùng một cụm có tính chất giống nhau Ý tưởng đơn giản nhất về cluster (cụm) là tập hợp các điểm ở gần nhau trong một không gian nào đó (không gian này có thể có rất nhiều chiều trong trường hợp thông tin vềmột điểm dữ liệu là rất lớn) Hình bên dưới là một ví dụ về 3 cụm dữ liệu (cluster)
Giả sử mỗi cluster có một điểm đại diện (center) màu vàng Và những điểm xung quanh mỗi center thuộc vào cùng nhóm với center đó Một cách đơn giản nhất, xét một điểm bất kỳ, xét xem điểm đó gần với center nào nhất thì nó thuộc về cùng nhóm với center đó
Gọi điểm tại vị trí trung bình của tất cả các điểm dữ liệu trong một cụmlà trung tâm cụm Như vậy, nếu có K cụm thì sẽ có K trung tâm cụm và mỗi trung tâm cụm sẽ nằm gần các điểm dữ liệu trong cụm tương ứng hơn các trung tâm cụm khác Trong hình dưới đây, K = 3 và có 3 trung tâm cụm là các điểm màu vàng
Hình 3.2 K-means Clustering với K = 3 Để phân cụm dữ liệu bằng K-Means Clustering, trước hết chọn K là số cụm để phân chia và chọn ngẫu nhiên K trong số m dữ liệu ban đầu làm trung tâm cụm μ1, μ2, …, μK Sau đó, với điểm dữ liệu x(i) sẽ được gán cho cụm c(i) là cụm có trung tâm cụm gần nó nhất
Khi tất cả các điểm dữ liệu đã được gán về các cụm, bước tiếp theo là tính toán lại vị trí các trung tâm cụm bằng trung bình tọa độ các điểm dữ liệu trong cụm đó
Với k1, k2, …, kn là chỉ số các dữ liệu thuộc cụm thứ k Các bước trên được lặp lại cho tới khi vị trí các trung tâm cụm không đổi sau một bước lặp nào đó
3.1.3 Độ chính xác của thuật toán
Hàm mất mát của thuật toán K-Means Clustering đặc trưng cho độ chính xác của nó sẽ càng lớn khi khoảng cách từ mỗi điểm dữ liệu tới trung tâm cụm càng lớn
3.1.4 Nghiệm của thuật toán K-Means
Trong các bước của thuật toán, thực chất bước gán các điểm dữ liệu về trung tâm cụm gần nhất và bước thay đổi trung tâm cụm về vị trí trung bình của các điểm dữ liệu trong cụm đều nhằm mục đích giảm hàm mất mát Thuật toán kết thúc khi vị trí các trung tâm cụm không đổi sau một bước lặp nào đó Khi đó hàm mất mát đạt giá trị nhỏ nhất
Khi K càng nhỏ so với m, thuật toán càng dễ đi đến kết quả chưa phải tối ưu Điều này phụ thuộc vào cách chọn K trung tâm cụm ban đầu Để khắc phục điều này, ta cần lặp lại thuật toán nhiều lần và chọn phương án có giá trị hàm mất mát nhỏ nhất
3.1.5 Tóm tắt thuật toán Đầu vào: Dữ liệu X và số lượng cluster cần tìm K Đầu ra: Các center M và label vector cho từng điểm dữ liệu Y
- Chọn K điểm bất kỳ làm các center ban đầu
- Phân mỗi điểm dữ liệu vào cluster có center gần nó nhất
- Nếu việc gán dữ liệu vào từng cluster ở bước 2 không thay đổi so với vòng lặp trước nó thì ta dừng thuật toán
- Cập nhật center cho từng cluster bằng cách lấy trung bình cộng của tất các các điểm dữ liệu đã được gán vào cluster đó sau bước 2
Mô hình Word2vec
Trong rất nhiều bài toán xử lý ngôn ngữ tự nhiên, các từ thường được đại diện bằng điểm TF-IDF Mặc dù các điểm này mang lại ý tưởng về độ quan trọng tương ứng của các từ trong một văn bản, chúng không thể hiện được ngữ nghĩa của các từ Word2vec là một kỹ thuật trong đó áp dụng một lớp mạng nơ-ron cùng với một tập dữ liệu huấn luyện không đánh nhãn, để tạo ra một véc tơ cho mỗi từ trong tập dữ liệu chứa cả những thông tin về ngữ nghĩa Các véc tơ này hữu ích vì hai yếu tố quan trọng của chúng:
- Chúng ta có thể đo lường độ tương đồng ngữ nghĩa giữa hai từ bằng cách đo độ tương đồng cosine giữa hai véc tơ tương ứng
- Chúng ta có thể sử dụng các véc tơ như là các đặc trưng cho các bài toán xử lý ngôn ngữ tự nhiên có giám sát như phân loại văn bản hay phân tích quan điểm
Ví dụ, các từ đồng nghĩa thường có các véc tơ khá tương đồng dựa trên độ tương đồng cosine và các từ trái nghĩa thường là các véc tơ hoàn toàn không tương đồng Hơn nữa, các véc tơ từ thường có xu hướng tuân theo các luật suy diễn, ví dụ: “Woman is to queen as man is to king” có thể suy ra:
Trong đó Vquen, Vwoman, Vman, và Vking là lần lượt là các véc tơ từ của queen, woman, man và king Qua ví dụ này có thể thấy rằng các véc tơ từ có thể hàm chứa các thông tin ngữ nghĩa quan trọng của các từ mà chúng đại diện
Word2vec là phương pháp véc tơ hóa từ do Mikolov và cộng sự nghiên cứu và phát triển Đây là phương pháp dựa trên dự đoán từ, trong đó cơ sở của việc dự đoán dựa vào xác suất của các từ, độ tương tự và liên quan giữa các từ Word2vec kết hợp hai kỹ thuật là CBOW (Continuous bag of words) và mô hình Skip-gram (Skip-gram model) Ý tưởng của Word2vec là việc đại diện các từ sử dụng các từ xung quanh từ đó Điều này tương tự với việc con người biết nghĩa của một từ dựa trên các từ gần nó
3.2.2 CBOW (Continuous Bag of Word)
Cách hoạt động của CBOW đó là dự đoán xác suất của một từ được cho trong một ngữ cảnh (context) dựa trên các từ gần nó Một ngữ cảnh có thể là một từ đơn hoặc một tập các từ
CBOW là một mạng nơ-ron nông (Shallow Neural Network) với chỉ 1 lớp ẩn hoạt động như một lớp chiếu (projection layer) của lớp đầu vào Mục tiêu là để dự đoán được từ đích dựa trên các từ xung quanh nó Đầu vào của
CBOW là N từ, với N là kích thước của cửa sổ của ngữ cảnh được định nghĩa trước và đầu ra là từ dự đoán sử dụng lớp Softmax
Skip-gram cũng là một mạng nơ-ron chỉ gồm một lớp ẩn Mục tiêu của mô hình này là dự đoán các từ gần với một từ đích Đầu vào của mô hình là một véc tơ one-hot của từ đích, và đầu ra của nó là N từ với N là kích thước cửa sổ của ngữ cảnh được định nghĩa trước Trong các bài toán thực tế, mô hình skip-gram thường được áp dụng do nó đem lại độ chính xác cao hơn Chi tiết cách thực hiện Word2vec với mô hình skip-gram như sau Đầu tiên chúng ta cần xây dựng tập từ vựng từ các văn bản huấn luyện, ví dụ tập từ vựng gồm 10000 từ phân biệt Để có thể đưa các từ vào mạng nơ-ron huấn luyện, các từ cần được véc tơ hóa, mỗi từ sẽ được thể hiện bằng một véc tơ one-hot Vector này sẽ có 10000 phần tử với mỗi phần tử thể hiện vị trí tương ứng của từ trong tập từ vựng Ví dụ véc tơ one-hot cho từ “ants” sẽ có phần tử có giá trị bằng 1 tương ứng với vị trí của từ “ants” trong tập từ vựng, các vị trí khác có giá trị bằng 0 Kiến trúc mạng nơ-ron được thể hiện trong hình
Hình 3.4 Mô hình Skip-gram
Lớp ẩn trong ví dụ hình gồm 300 nơ-ron không sử dụng một hàm kích hoạt nào nhưng đầu ra thì sử dụng một hàm softmax Lớp ẩn được thể hiện bằng một ma trận trọng số gồm 10000 hàng (tương ứng với mỗi từ trong tập từ vựng) và 300 cột (tương ứng với mỗi nơ-ron ẩn) Số nơ-ron ẩn được gọi là số đặc trưng hay số chiều của word2vec là một siêu tham số có thể được tùy chỉnh tùy theo từng bài toán Các hàng của ma trận trọng số của lớp ẩn, thực chất chính là các véc tơ từ, đây chính là mục tiêu của word2vec Với word2vec, chúng ta tiến hành huấn luyện một mạng nơ-ron đơn giản với chỉ một lớp ẩn để tiến hành véc tơ hóa các từ trong tập từ vựng Tuy nhiên, chúng ta không thực sự sử dụng kết quả đầu ra của mạng nơ-ron sau khi huấn luyện, mà sẽ sử dụng trọng số của lớp ẩn Ma trận trọng số của lớp ẩn giống như một bảng tìm kiếm các từ được thể hiện bằng các véc tơ từ tương ứng Với đầu vào là một từ được thể hiện bằng một véc tơ one-hot, việc đưa véc tơ này qua lớp ẩn về bản chất chính là việc tìm kiếm trên ma trận trọng số của lớp ẩn một véc tơ có số đặc trưng bằng số cột của ma trận trọng số
Hình 3.5 Biến đổi ma trận trọng số
Khi nhân một véc tơ one-hot 1x10000 với ma trận 10000x300 thì kết quả của phép nhân ma trận chỉ ảnh hưởng bởi hàng có phần tử 1 của véc tơ one-hot Đầu ra của word2vec là một bộ phân loại sử dụng hàm softmax Hàm softmax cho kết quả là một giá trị thuộc khoảng 0 tới 1, chính là xác suất của mỗi đầu ra, tổng các giá trị này bằng 1 Minh họa hoạt động của mô hình thể hiện xác suất từ “car” là từ lân cận từ “ants”
Hình 3.6 Ví dụ đầu ra của word2vec
KẾT QUẢ THỰC NGHIỆM
Tổng quan các thư viện
NumPy là một thư viện mạnh mẽ trong Python, được thiết kế để cung cấp tính năng và các hàm tính toán số học mạnh mẽ, từ đó làm cho xử lý và tính toán trên mảng và ma trận trở nên đơn giản và hiệu quả hơn Các tiện ích như broadcasting và lập chỉ mục giúp thực hiện các thao tác trên mảng và ma trận một cách hiệu quả NumPy cũng cung cấp một bộ công cụ để thực hiện các phép toán số học, chẳng hạn như tính trung bình, phương sai, và đạo hàm
Thư viện numpy có thể được sử dụng để giải quyết các vấn đề sau:
- Xử lý dữ liệu mảng
- Truy vấn và lọc dữ liệu
- Tính toán đại số tuyến tính
- Thư viện Seaborn có thể được sử dụng để giải quyết các vấn đề:
- Trực quan hóa dữ liệu
- Phân tích mối quan hệ giữa các biến
- Xử lý và trình bày dữ liệu
- Tạo giao diện trực quan cho dữ liệu
Thư viện pickle trong Python là một thư viện dùng để lưu trữ và phục hồi dữ liệu dưới dạng nhị phân Nó có thể được sử dụng để lưu trữ bất kỳ đối tượng Python nào, bao gồm cả các đối tượng phức tạp như danh sách, mảng, đối tượng, v.v
Vai trò của thư viện pickle là giúp lưu trữ và phục hồi dữ liệu Python một cách hiệu quả và dễ dàng Nó có thể được sử dụng cho nhiều mục đích, bao gồm:
- Lưu trữ dữ liệu cho mục đích sử dụng sau
- Truyền dữ liệu giữa các ứng dụng Python
- Lưu trữ dữ liệu trong cơ sở dữ liệu
- Chuyển đổi dữ liệu giữa các ngôn ngữ lập trình khác nhau
Thư viện pyvi là một thư viện Python cung cấp các chức năng xử lý ngôn ngữ tự nhiên (NLP) cho tiếng Việt Thư viện này bao gồm các chức năng như:
- Tokenization: Chia văn bản thành các từ hoặc cụm từ
- POS tagging: Phân loại từ theo chức năng ngữ pháp
- Stemming: Rút gọn từ về dạng gốc
- Lemmatization: Rút gọn từ về dạng chính tắc
- Named entity recognition: Nhận dạng thực thể có tên
- Sentiment analysis: Phân tích cảm xúc
Vai trò của thư viện pyvi là giúp các nhà phát triển Python thực hiện các tác vụ NLP cho tiếng Việt một cách dễ dàng và hiệu quả Thư viện này có thể được sử dụng cho nhiều mục đích khác nhau, bao gồm:
- Tự động hóa các tác vụ xử lý ngôn ngữ tự nhiên
- Phát triển các ứng dụng NLP
Thư viện Natural Language Toolkit (NLTK) là một thư viện Python phổ biến để xử lý và phân tích ngôn ngữ tự nhiên Nó cung cấp các công cụ và tài nguyên để thực hiện các tác vụ như tokenization, stemming, lemmatization, parsing, phân loại văn bản và nhiều công việc khác trong lĩnh vực xử lý ngôn ngữ tự nhiên (NLP) Các chức năng chính bao gồm:
- Chuyển đổi từ viết hoa thành viết thường (lowercasing)
- Phân loại từ loại (part-of-speech tagging)
- Phân tích cú pháp (parsing)
Thư viện Gensim là một thư viện Python được sử dụng rộng rãi trong xử lý ngôn ngữ tự nhiên và khai phá dữ liệu văn bản Gensim cung cấp các công cụ mạnh mẽ để xây dựng, huấn luyện và sử dụng các mô hình ngôn ngữ, đặc biệt là trong việc biểu diễn từ và văn bản dưới dạng các vectơ số học Các chức năng chính của Gensim bao gồm:
- Mô hình hóa từ (Word Embeddings)
- Mô hình hóa tài liệu (Document Embeddings)
- Tính toán sự tương đồng
- Tiền xử lý và chuẩn bị dữ liệu
Thư viện scikit-learn (sklearn) là một trong những thư viện quan trọng nhất trong machine learning của Python Nó cung cấp một loạt các công cụ cho việc huấn luyện và triển khai các mô hình học máy Vai trò chính của scikit-learn bao gồm:
- Tiền xử lý dữ liệu
- Đánh giá mô hình và tối ưu hóa
Các bước xử lý
Hình 4.1 Các bước xử lý tóm tắt văn bản
- Tiền xử lý văn bản: Văn bản đầu vào của chúng ta có thể chứa nhiều ký tự thừa, dấu câu thừa, khoảng trắng thừa, các từ viết tắt, viết hoa, điều này có thể làm ảnh hưởng tới các bước ở sau này nên chúng ta cần phải xử lý nó trước! Tuy nhiên trong bài lần này, chúng ta sẽ chỉ thử trên một số bài báo đã khá "quy củ" rồi nên mình sẽ chỉ thực hiện 2 phương pháp đó là Biến đổi hết về các chữ cái thường và Loại bỏ các khoảng trắng thừa
- Tách câu trong văn bản: Ở bước này, chúng ta sẽ tách 1 đoạn văn bản cần tóm tắt đã qua xử lý thành 1 danh sách các câu trong nó
- Chuyển các câu sang dạng vector số thực: Để phục vụ cho phương pháp tóm tắt ở bước tiếp theo, chúng ta cần chuyển các câu văn (độ dài ngắn khác nhau) thành các vector số thực có độ dài cố định, sao cho vẫn phải đảm bảo được "độ khác nhau" về ý nghĩa giữa 2 câu cũng tương tự như độ sai khác giữa 2 vector tạo ra
- Phân cụm: Thuật toán K-Means Clustering sẽ giúp chúng ta phân ra những cụm câu có ý nghĩa giống nhau, để từ đó chọn lọc và loại bỏ bớt các câu có cùng ý nghĩa
- Xây dựng đoạn văn bản tóm tắt: Sau khi đã có các cụm, trong mỗi cụm
(phân loại theo ý nghĩa), chúng ta sẽ chọn ra 1 câu duy nhất trong cụm đó để tạo nên văn bản được tóm tắt!
Kết quả thực nghiệm
Tóm tắt văn bản sau:
“Đóng cửa mọi ngả đường chuyển gia cầm vào TP HCM Ngày 15/1, lực lượng thú y phối hợp với cảnh sát, thanh tra giao thông TP HCM mở điểm kiểm soát trên mọi ngả đường ngoại ô Thực hiện công điện của Bộ Nông nghiệp và phát triển nông thôn trước đó một ngày, lực lượng chức năng đã chặn không để con gà nào từ tỉnh ngoài lọt vào thành phố Tại Trạm Kiểm dịch động vật huyện Bình Chánh, cửa ngõ phía Tây của thành phố, Phó trạm Phạm Ngọc Lanh mắt thâm quầng nói: "Từ khi xảy ra dịch đến giờ, anh em thay nhau túc trực ở đây Ban ngày thì 3 người còn đêm phải 6 người mới xuể vì chủ hàng thường chuyển gà vào đêm" Những ngày trước, trạm kiểm tra sơ bộ các xe chở gia súc, gia cầm Nếu thấy dấu hiệu bệnh dịch thì lập biên bản tạm giữ để xử lý Nếu có giấy chứng nhận kiểm dịch thì phun thuốc khử trùng rồi cho xe đi Nhưng từ 0h ngày 15/1, tất cả gia cầm đi qua trạm đều bị giữ lại để tiêu hủy Anh Quang, quê ở Trà Vinh, than thở: "Tôi là công nhân, sát Tết được nghỉ nên về quê mua vịt đem xuống Bình Dương Mấy chuyến vừa rồi không sao, đến chuyến này thì bị bắt 100 con Tôi có biết gì về lệnh cấm đâu Phen này mất trắng mấy triệu rồi" Vừa dứt lời với phóng viên VnExpress, anh Quang quay sang năn nỉ cán bộ trạm để xin lại bầy vịt và hứa chở tất cả về nhà Không riêng gì anh Quang, một chiếc xe của quân đội cũng bị tịch thu hàng chục con gà, vịt dù được giải thích là đem về đơn vị để liên hoan Một xe khác chở vịt giống cũng bị giữ lại để tiêu hủy mặc dù đã có giấy chứng nhận kiểm dịch Công an TP HCM cho biết đã lệnh cho lực lượng cảnh sát giao thông hỗ trợ cho cán bộ kiểm dịch, kiểm soát mọi ngả đường vào thành phố Lực lượng liên ngành đã phong tỏa
QL 13, đường đi Lái Thiêu, không để gia cầm từ tỉnh Bình Dương lọt lưới QL
1, QL51 từ tỉnh Đồng Nai xuống cũng bị kiểm tra gắt gao Một đại úy cảnh sát giao thông ở QL 13 cho biết: "Xe chuyên chở gia cầm trên tuyến đường này chúng tôi đều biết nên việc phát hiện không có gì khó khăn Việc cấm toàn bộ dễ hơn nhiều so với cách kiểm tra các trường hợp đã được và chưa được kiểm dịch trước đây" Gia cầm bị tịch thu hiện đều phải thiêu hủy tập trung tại lò thiêu Bình Hưng Hòa Các chủ hàng cùng nhân viên kiểm dịch được trang bị khẩu trang và găng tay cao su đếm số lượng vật nuôi rồi ký biên bản Tuy nhiên, một cán bộ kiểm dịch nói: "Áo chúng tôi mặc đều ngắn tay Có thêm đôi găng hay khẩu trang cũng chẳng ăn thua gì" Ông Hai Vũ, một người dân sống ở gần trạm kiểm dịch Bình Chánh, cho biết: "Tội nghiệp mấy anh em, mấy đêm thức trắng Vậy còn bị dân hăm he hành hung đòi lại gà, mấy lần phải nhờ Cảnh sát 113 can thiệp mới yên ổn" TP HCM lập đường dây nóng phòng dịch cúm ở người (15/01/2004) Tại sao cơ thể người khó kháng lại virus cúm type A? (15/01/2004) Quyết định giết toàn bộ gia cầm bây giờ là quá vội vàng'(15/01/2004) Thêm 3 người mắc bệnh và 1 ca tử vong vì cúm A(15/01/2004) Bộ Y tế đề nghị tiêu hủy tất cả gà trong vùng dịch(14/01/2004)”
4.3.1 Tiền xử lý văn bản
Sử dụng 2 phương pháp là chuyển đổi hết sang chữ thường và loại bỏ các khoảng trắng:
# Pre-processing contents_parsed = [] for content in contents[0:10]: contents_parsed.append(content.lower().strip())
4.3.2 Tách các câu trong văn bản
Tại đây chúng em sẽ tách các câu trong văn bản trên ra để thu được 1 danh sách các câu có ở trên Việc này trở nên đơn giản hơn rất nhiều với thư viện NLTK, có thể dễ dàng sử dụng hàm sent_tokenize để lấy ra danh sách các câu: import nltk sentences = nltk.sent_tokenize(contents_parsed[2])
4.3.3 Chuyển các câu sang vector
Phương pháp của chúng em đó chính là sẽ tách nhỏ từng câu thành các từ, sau đó dùng mô hình Word2Vec đã được training cho tiếng Việt, chuyển đổi các từ đó sang các vector số thực có chiều dài cố định Cuối cùng, vector của 1 câu mà mình chuyển đổi sang sẽ là TỔNG của các vector đại diện cho các từ trong câu: from gensim.models import KeyedVectors model_path = "wiki.vi.model.bin" # Đường dẫn đến file model.bin w2v = KeyedVectors.load_word2vec_format(model_path, binary=True)
Tiếp theo là tách các từ trong câu và lấy tổng để được các vector cho từng câu trong danh sách mà chúng ta vừa có trên kia:
X = [] for sentence in sentences: sentence = ViTokenizer.tokenize(sentence) words = sentence.split(" ") sentence_vec = np.zeros((400)) for word in words: if word in w2v.key_to_index: sentence_vec += w2v.get_vector(word)
Thuật toán phân cụm ở đây, chúng em chọn số cụm (clusters) chính bằng số câu mà chúng ta muốn tóm tắt Thuật toán này các bạn có thể dễ dàng sử dụng và cài đặt với sklearn: from sklearn.cluster import KMeans n_clusters = 5 kmeans = KMeans(n_clusters=n_clusters, n_init) kmeans = kmeans.fit(X) Ở đây chúng em muốn tóm tắt mẩu tin trên thành 5 câu duy nhất, vậy nên n_clusters sẽ để bằng 5 Quá trình phân cụm ở đây cũng sẽ diễn ra rất nhanh do số lượng câu trong văn bản rất nhỏ!
4.3.5 Xây dựng đoạn văn bản tóm tắt
Mỗi cụm mà chúng em phân ra được ở trên, có thể hiểu là đại diện cho một ý nghĩa nào đó ở trong văn bản gốc Tuy nhiên để tóm gọn lại cả 1 văn bản dài, với mỗi một ý nghĩa chúng ta sẽ chỉ chọn ra 1 câu duy nhất thôi!
Và câu được chọn để ĐẠI DIỆN cho 1 cụm đó ở đây, sẽ là câu có khoảng cách gần với trung tâm của cụm nhất Sau khi đã có được các câu của văn bản tóm tắt, giờ chúng em quan tâm là sẽ sắp xếp thứ tự như thế nào cho hợp lý Ở đây, với mỗi ý nghĩa, chúng em sẽ tính "thứ tự xuất hiện trung bình" của cụm đó
Làm tương tự với các cụm khác, sau đó chúng ta sẽ lấy các câu đại diện trong các cụm theo thứ tự từ nhỏ đến lớn của thứ tự xuất hiện trung bình để tạo ra một văn bản tóm tắt: from sklearn.metrics import pairwise_distances_argmin_min avg = [] for j in range(n_clusters): idx = np.where(kmeans.labels_ == j)[0] avg.append(np.mean(idx)) closest, _ = pairwise_distances_argmin_min(kmeans.cluster_centers_, X) ordering = sorted(range(n_clusters), key=lambda k: avg[k]) summary = ' '.join([sentences[closest[idx]] for idx in ordering]) print(summary)
Trong đoạn code trên, chúng em có sử dụng hàm pairwise_distances_ argmin_min của sklearning metric để lấy ra khoảng cách vector giữa các vector và các trung tâm cụm của nó, sau đó chọn ra khoảng cách nhỏ nhất để lấy được câu đại diện Sau đó tính "thứ tự xuất hiện trung bình" và sắp xếp lại để tạo ra văn bản tóm tắt
Và đây là kết quả thu được đoạn văn bản sau: