Luận văn Phân loại thực thể có tên trên wikipedia để phục vụ cho bài toán xây dựng hệ tri thức

Lời cảm ơn. i

Lời cam đoan. ii

Danh sách bảng . v

Danh sách hình vẽ. vi

Lời mở đầu . 1

Chương 1 Giới thiệu. 2

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

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

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

Chương 2 Hệ thống kiểu của thực thể có tên. 7

2.1. Khái niệm. 7

2.1.1. Hệ tri thức . 7

2.1.2. Thực thể. 9

2.1.3. Thực thể có tên . 10

2.1.4. Kiểu của thực thể. 10

2.2. Các hệ thống kiểu thực thể. 11

2.2.1. Các hệ thống kiểu chi tiết cho Tiếng Anh . 11

2.2.2. Hệ thống kiểu thực thể NERD-TS . 13

2.2.3. Điểm khác biệt giữa NERD-TS với hệ thống kiểu trong bài toán NER

truyền thống. 14

Chương 3 Phân loại thực thể có tên trên Wikipedia tiếng Việt . 18

3.1. Học máy . 18

3.1.1. Tổng quan về học máy. 18

pdf79 trang | Chia sẻ: honganh20 | Ngày: 21/02/2022 | Lượt xem: 422 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Luận văn Phân loại thực thể có tên trên wikipedia để phục vụ cho bài toán xây dựng hệ tri thức, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
bởi hai siêu phẳng này được gọi là “lề”, và siêu phẳng có biên cực đại là siêu phẳng nằm giữa chúng. Với một bộ dữ liệu Hình 3.6 Ví dụ về lề phân lớp cực đại 𝑤FF⃑ . 𝑥 = 𝑏 20 20 https://en.wikipedia.org/wiki/Support-vector_machine 29 được bình thường hoá hoặc chuẩn hóa, các siêu phẳng này có thể được mô tả bằng các phương trình: • 𝑤FF⃑ . �⃑� − 𝑏 = 1 (những gì thuộc hoặc nằm trên ranh giới này là của loại nhãn 1), và • 𝑤FF⃑ . �⃑� − 𝑏 = −1 (những gì thuộc hoặc nằm dưới ranh giới này là của nhãn −1). Hay nói cách khác, ta có mệnh đề sau: • 𝑤FF⃑ . 𝑥IFFF⃑ − 𝑏 ≥ 1, nếu 𝑦6 = 1, và • 𝑤FF⃑ . 𝑥IFFF⃑ − 𝑏 ≤ −1, nếu 𝑦6 = −1. (3.3) Lưu ý, siêu phẳng có biên độ tối đa được xác định hoàn toàn bởi những 𝑥IFFF⃑ nằm gần nó nhất. Những 𝑥IFFF⃑ này được gọi là véc-tơ hỗ trợ. Lề mềm (Soft margin) Trong rất nhiều trường hợp thực tế, dữ liệu không thể phân tách tuyến tính, ví dụ khi một số dữ liệu huấn luyện bị gán nhãn sai. Thuật toán lề mềm sẽ chọn một siêu phẳng phân tách các mẫu huấn luyện tốt nhất có thể, và đồng thời cực đại hóa khoảng cách giữa siêu phẳng với các mẫu được gán đúng nhãn. Chúng ta cần cực tiểu hàm: Q1𝑛Smax (0,1 − 𝑦6(𝑤FF⃑ . 𝑥IFFF⃑ − 𝑏))26W/ X + 𝜆‖𝑤FF⃑ ‖ 1 (3.4) Trong đó, tham số 𝜆 xác định sự đánh đổi giữa việc tăng kích thước lề và đảm bảo rằng 𝑥IFFF⃑ nằm ở phía đúng của lề. 3.2.3. Phân loại đa lớp (Multiclass classification) Mô hình máy véc tơ hỗ trợ là mô hình hỗ trợ việc phân loại nhị phân (binary classification). Theo đó thông tin đầu vào sẽ được gán với các nhãn đầu ra thuộc một trong hai lớp được xác định trước. Tuy nhiên, với bài toán phân loại thực thể, một thực thể đầu vào cần phải được phân loại thành một loại trong rất nhiều loại kiểu thực thể, có thể đến hàng trăm loại kiểu chi tiết. Trong phạm vi luận văn, phải thực hiện phân loại một thực thể đầu vào thành một trong sáu kiểu Person, Organization, Place, Event, v.v. Có nhiều cách để thực hiện điều này, thông qua các biến thể của phương pháp phân loại nhị phân để thực hiện các bài toán phân 30 loại đa lớp (muticlass classification). Dưới đây là ba chiến lược phổ biến nhất được sử dụng: Chiến lược một-một (One-vs-One) Trong chiến lược này, sẽ phải xây dựng rất nhiều bộ phân loại nhị phân cho từng cặp lớp. Bộ thứ nhất phân biệt lớp 1 và lớp 2, bộ thứ hai phân biệt lớp 1 và lớp 3, v.v. Khi có một dữ liệu mới vào, đưa nó vào toàn bộ các bộ phân loại nhị phân nêu trên. Kết quả cuối cùng có thể được xác định bằng cách xem lớp nào mà điểm dữ liệu đó được phân vào nhiều nhất (major voting). 21 Như vậy, nếu có n lớp thì tổng số mô hình phân loại nhị phân phải xây dựng là n*(n−1)/2. Đây là một con số lớn, cách làm này không lợi về tính toán với các bài toán có số lượng lớp lớn. Chiến lược một-tất cả (One-vs-the-rest hay One-vs-all) Trong chiến lược này, được thực hiện bằng cách phân loại cho từng lớp theo thứ tự lần lượt. Với mỗi một lớp, sẽ có một mô hình được xây dựng riêng để thực hiện phân loại cho lớp đó với tất cả các lớp còn lại. Nếu có n lớp thì chỉ cần xây dựng n bộ phân loại nhị phân. Bộ phân loại thứ nhất giúp phân biệt lớp 1 và không phải lớp 1, tức xem một điểm có thuộc lớp 1 hay không, hoặc xác suất để một điểm rơi vào lớp 1 là bao nhiêu. Tương tự như thế, bộ phân loại thứ hai sẽ phân biệt lớp 2 không phải lớp 2, v.v. Kết quả cuối cùng có thể được xác định bằng cách xác định lớp mà một điểm rơi vào với xác suất cao nhất. Phương pháp này còn được gọi là one-hot coding (được sử dụng nhiều nên có rất nhiều tên) vì với cách mã hóa trên, giả sử có lớp thì các lớp 1, 2, 3, 4 sẽ lần lượt được mã hóa dưới dạng nhị phân bởi 1000, 0100, 0010 hoặc 0001. One-hot vì chỉ có một bit là hot (bằng 1). Chiến lược này giúp tăng hiệu quả tính toán do chỉ cần xây dựng n mô hình, tương ứng với n lớp, đồng thời kết quả tương đối tường minh, dễ hiểu.22 Phân tầng (Hierarchical) 21https://machinelearningcoban.com/2017/02/11/binaryclassifiers/#-binary-classifiers-cho-multi-class- classification-problems 22 https://scikit-learn.org/stable/modules/multiclass.html#one-vs-one 31 Các làm như một-một (one-vs-one) sẽ mất rất nhiều thời gian huấn luyện vì có quá nhiều mô hình phân lớp cần được xây dựng. Một cách khác giúp tiết kiệm số mô hình phân lớp hơn đó là phân tầng. Ý tưởng của chiến lược này là gom các lớp thành một số ít nhóm hơn, từ đó xây dựng các bộ phân loại các nhóm này với nhau. Tiếp theo đó, xây dựng các bộ phân loại để phân biệt các lớp con trong một nhóm. Như vậy số bộ phân loại có thể giảm đi rất nhiều so với chiến lược một- một. Hạn chế lớn nhất của nó là việc nếu chỉ một phân loại cho kết quả sai thì kết quả cuối cùng chắc chắn sẽ sai. Trong luận văn học viên sử dụng chiến lược một-một để thực hiện cho bài toán phân loại thực thể. Với tổng số bảy loại nhãn (bao gồm cả Other), số mô hình máy véc tơ hỗ trợ phải xây dựng là 7*6/2 = 21 mô hình. Con số này không quá lớn nên vẫn đảm bảo thực hiện được đễ dàng. Tuy nhiên, trong tương lai, khi mở rộng phạm vi bài toán với lượng dữ liệu phong phú hơn và hệ thống kiểu chi tiết hơn thì việc sử dụng chiến lược nào cũng cần cân nhắc lại. 3.3. Bộ công cụ Sklearn Sklearn23 [15] (trước đây gọi là scikits.learn), một dự án của David Cournapeau tham gia Google Summer of Code, là một thư viện học máy miễn phí viết bằng ngôn ngữ lập trình Python. Sklearn là một công cụ rất phổ biến để chạy thực nghiệm các thuật toán học máy với Python. Sklearn cung cấp nhiều lựa chọn cho cả các thuật toán học có giám sát và các thuật toán học không giám sát. Trên hết, Sklearn rất dễ sử dụng và được cộng đồng nghiên cứu coi như là một “bộ công cụ học máy trong sáng nhất”. Sklearn là một trong những lựa chọn tốt nhất hiện nay để sử dụng trong bất kỳ dự án học máy nào, xuyên suốt từ giai đoạn nghiên cứu cho đến triển khai sản xuất. Sklearn được xây dựng dựa trên một số thư viện Python phổ biến. Ví dụ, chúng ta có thể truyền trực tiếp các mảng Numpy và cấu trúc dữ liệu Pandas cho các thuật toán học máy của Sklearn. Cụ thể, Sklearn sử dụng các thư viện sau: • NumPy: khi cần làm việc với ma trận; • SciPy: khi cần tính toán khoa học và kỹ thuật; • Matplotlib: khi cần mô phỏng dữ liệu; 23 https://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.html 32 • Pandas: khi cần xử lý dữ liệu, thao tác và phân tích; • và một số thư viện khác. Ngoài ra, Sklearn hỗ trợ nhiều mô hình, thuật toán học máy khác nhau bao gồm: • Hồi quy: mô hình tuyến tính và phi tuyến tính; • Phân cụm: mô hình phân loại không giám sát; • Cây quyết định: mô hình phân loại và hồi quy; • SVM: mô hình phân loại có giám sát; • và nhiều mô khác như mạng nơ-ron, Naïve Bayes, v.v. Trong luận văn sử dụng Sklearn để thực thi mô hình học máy để phân loại thực thể, sử dụng thư viện Linear SVC (phân loại tuyến tính bằng máy véc tơ hỗ trợ). Đồng thời, các tác vụ phân chia dữ liệu (sử dụng stratified K-fold cross validation) và véc tơ hoá các đặc trưng (DictVectorizer), đánh giá kết quả của mô hình (confusion_matrix), v.v. đều được thực hiện thông qua các thư viện có sẵn trong Sklearn. 3.3.1. Thư viện Sklearn Linear SVC (Linear Support Vector Classification) Một trong những thuật toán học máy được áp dụng nhiều nhất cho phân loại sử dụng máy véc-tơ tuyến tính là Linear SVC. Linear SVC hỗ trợ phân loại đa lớp và hoạt động hiệu quả, linh hoạt với một tập dữ liệu đầu vào lớn. Trong phạm vi bài toán phân loại thực thể, luận văn cũng sử dụng thư viện này thực hiện phân loại tuyến tính đa lớp bằng máy véc tơ hỗ trợ. Hình 3.7 thể hiện ví dụ về cách sử dụng Linear SVC trong thư viện Skearn. Dưới đây là giải thích cụ thể về từng tham số và thuộc tính trong ví dụ: Tham số: • penalty: string, ‘l1’ or ‘l2’ (mặc định=’l2’) => Chỉ định định mức được sử dụng trong hình phạt. Hình phạt 'l2' là tiêu chuẩn được sử dụng trong SVC. 'l1' dẫn đến các véc tơ coef_ thưa thớt class sklearn.svm.LinearSVC(penalty=’l2’, loss=’squared_hinge’, dual=True, tol=0.0001, C=1.0, multi_class=’ovr’, fit_intercept=True, intercept_scaling=1, class_weight =None, verbose=0, random_state=None, max_iter=1000) Hình 3.7: Ví dụ về Linear SVC trong thư viện Sklearn 33 • loss: string, ‘hinge’ or ‘squared_hinge’ (mặc định=’squared_hinge’) => Chỉ định hàm mất mát. Hinge loss là mất mát SVM tiêu chuẩn (được sử dụng bởi lớp SVC) trong khi 'squared_ hinge' là bình phương của hingle loss. • dual: bool, (mặc định=True) => Chọn thuật toán để giải quyết vấn đề tối ưu hóa kép hoặc nguyên thủy. Lựa chọn Dual= False khi n_samples> n_features. • tol: float, tùy chọn (mặc định = 1e-4) => Dung sai cho tiêu chí dừng. Tham số này để xác định khi nào thì chương trình sẽ dừng lại, không thực hiện tiếp nữa. • C: float, tùy chọn (mặc định = 1.0) => Thông số phạt C của phần sai sót. • multi_class: string, 'ovr' hoặc 'crammer_singer' (mặc định = 'ovr') => Xác định chiến lược đa lớp (multiclass strategy) nếu y chứa nhiều hơn hai lớp. “ovr” là huấn luyện một-tất cả n-lớp (n-classes one-vs-rest), trong khi “crammer_singer” nhằm tối ưu hóa một mục tiêu chung trên tất cả các lớp. Mặc dù crammer_singer thú vị từ góc độ lý thuyết vì nó phù hợp, nhưng nó hiếm khi được sử dụng trong thực tế vì nó hiếm khi dẫn đến độ chính xác tốt hơn và tốn kém hơn để tính toán. Nếu crammer_singer được chọn, các tùy chọn loss, penalty và dual sẽ bị bỏ qua. • fit_intercept: boolean, tùy chọn (mặc định = True) => Có tính toán đánh chặn cho mô hình này hay không. Nếu được đặt thành false, sẽ không có phần chặn nào được sử dụng trong các phép tính (tức là dữ liệu dự kiến sẽ tập trung). • intercept_scaling: float, tùy chọn (mặc định = 1) => Khi self.fit_intercept là True, véc-tơ x trở thành [x, self.intercept_scaling], tức là một đặc trưng tổng hợp với giá trị không đổi bằng với intercept_scaling được gắn vào véc-tơ thể hiện. Việc chặn trở thành intercept_scaling * trọng số đặc trưng tổng hợp. Lưu ý là trọng số đặc trưng tổng hợp có thể được chuẩn hóa L1/L2 như tất cả các đặc trưng khác. Để giảm bớt ảnh hưởng của việc chuẩn hoá hóa đối với trọng số đặc trưng tổng hợp (và do đó trên phần chặn), phải tăng khả năng đánh chặn. • class_ weight: {dict, ‘balanced’}, tùy chọn => Đặt tham số C của lớp i thành class_weight[i]*C cho SVC. Nếu không được đặt, tất cả các lớp được cho là có trọng số là một. Chế độ balanced (cân bằng) sử dụng các giá trị của y để tự động điều chỉnh các trọng số tỷ lệ nghịch với tần số lớp trong dữ liệu đầu vào là n_samples / (n_classes* np.bincount (y)). 34 • verbose: int, (mặc định = 0) => Cho phép đầu ra dài dòng. Lưu ý rằng cài đặt này tận dụng cài đặt thời gian chạy theo quá trình trong liblinear, nếu được bật, có thể không hoạt động chính xác trong ngữ cảnh đa luồng. • random_state: int, RandomState instance hoặc None, tùy chọn (mặc định = none) => Hạt giống của trình tạo số giả ngẫu nhiên sẽ sử dụng khi xáo trộn dữ liệu cho gốc tọa độ kép (nếu dual = True). Khi dual = false, việc triển khai cơ bản của linearSVC không phải là ngẫu nhiên và random_state không ảnh hưởng đến kết quả. Nếu int, thì random_state là hạt giống được sử dụng bởi trình tạo số ngẫu nhiên; Nếu RandomState instance, thì random_state là trình tạo số ngẫu nhiên; Nếu là None, thì trình tạo số ngẫu nhiên là đối tượng RandomState được sử dụng bởi np.random • max_iter: int, (mặc định = 1000) => Quy định số lần lặp tối đa được chạy. Các thuộc tính: • coef: array, shape = [n_features] nếu n_groupes == 2 ngược lại [n_groupes, n_features] => Các trọng số được gán cho các đặc trưng (các hệ số trong bài toán nguyên thủy). Điều này chỉ đúng trong trường hợp hạt nhân tuyến tính. coef_ là một thuộc tính chỉ đọc có nguồn gốc từ raw_coef_ theo bố cục bộ nhớ trong của liblinear. • intercept: array, shape = [1] nếu n_groupes = 2 hoặc bằng [n_classes] => Hằng số trong hàm quyết định. 3.3.2. Trích chọn đặc trưng (Feature extraction) Sklearn cung cấp một loạt các mô đun để tiền xử lý dữ liệu, trước khi đưa vào mô hình học máy. Mô đun sklearn.feature_extraction được sử dụng để trích xuất các đặc trưng theo định dạng được hỗ trợ bởi các thuật toán học máy từ các tập dữ liệu bao gồm các định dạng như văn bản và hình ảnh.24 Trích chọn đặc trưng (feature extraction) khác với lựa chọn đặc trưng (feature selection). Trích chọn đặc trưng là chuyển đổi dữ liệu đầu vào, chẳng hạn như văn bản hoặc hình ảnh, thành các đặc trưng số học có thể sử dụng trong học máy. Lựa chọn đặc trưng là một kỹ thuật máy học được áp dụng trên các đặc trưng này. Trong luận văn, học viên đã sử dụng DictVectorizer để chuyển đổi các mảng đặc trưng (feature arrays) được biểu diễn dưới dạng danh sách các đối tượng trong 24 https://scikit-learn.org/stable/modules/feature_extraction.html 35 thư viện Python tiêu chuẩn sang biểu diễn NumPy/SciPy được sử dụng bởi các mô hình trong scikit-learn. Mặc dù xử lý không đặc biệt nhanh, thư viện Python có các ưu điểm là thuận tiện khi sử dụng, thưa thớt (không cần lưu trữ các đặc trưng vắng mặt) và lưu trữ thêm các tên đặc trưng ngoài các giá trị. DictVectorizer thực hiện những gì được gọi là mã hóa one-of-K hoặc one-hot cho các đặc trưng phân loại (còn gọi là danh nghĩa, rời rạc). Các đặc trưng phân loại là các cặp thuộc tính-giá trị, trong đó giá trị được giới hạn trong một danh sách các khả năng rời rạc mà không có thứ tự (ví dụ: định danh chủ đề, loại đối tượng, thẻ, tên, v.v.). Trong ví dụ sau đây, “city” là một đặc trưng phân loại trong khi “temperature” là một đặc trưng số học truyền thống: >>> measurements = [ ... {'city': 'Dubai', 'temperature': 33.}, ... {'city': 'London', 'temperature': 12.}, ... {'city': 'San Francisco', 'temperature': 18.}, ... ] >>> from sklearn.feature_extraction import DictVectorizer >>> vec = DictVectorizer() >>> vec.fit_transform(measurements).toarray() array([[ 1., 0., 0., 33.], [ 0., 1., 0., 12.], [ 0., 0., 1., 18.]]) >>> vec.get_feature_names() DictVectorizer cũng là một công cụ biến đổi biểu diễn hữu ích để đào tạo các trình phân loại trình tự trong các mô hình Xử lý ngôn ngữ tự nhiên thường hoạt động bằng cách trích xuất các cửa sổ đặc trưng xung quanh một từ quan tâm cụ thể. 36 3.3.3. Lựa chọn đặc trưng (Feature selection) Các lớp trong mô đun sklearn.feature_selection có thể được sử dụng để lựa chọn đặc trưng/ giảm chiều tập dữ liệu mẫu, để cải thiện độ chính xác hoặc để tăng hiệu năng của các bộ ước lượng trên các tập dữ liệu rất nhiều chiều.25 Loại bỏ các đặc trưng có phương sai thấp (low variance) VarianceThreshold là một cách tiếp cận cơ bản đơn giản để lựa chọn đặc trưng. Nó loại bỏ tất cả các đặc trưng mà phương sai không đáp ứng được một số ngưỡng. Theo mặc định, nó loại bỏ tất cả các đặc trưng có phương sai bằng không, tức là các đặc trưng có cùng giá trị trong tất cả các mẫu. Ví dụ: giả sử rằng chúng ta có tập dữ liệu với các đặc trưng boolean và chúng ta muốn loại bỏ tất cả các đặc trưng có hơn 80% mẫu là một hoặc không (bật hoặc tắt). Các đặc trưng Boolean là các biến ngẫu nhiên Bernoulli và phương sai của các biến đó được đưa ra bởi Var[X] = p(1 − p) vì vậy chúng ta có thể chọn sử dụng ngưỡng .8 * (1 - .8): >>> from sklearn.feature_selection import VarianceThreshold >>> X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]] >>> sel = VarianceThreshold(threshold=(.8 * (1 - .8))) >>> sel.fit_transform(X) array([[0, 1], [1, 0], [0, 0], [1, 1], [1, 0], [1, 1]]) Đúng như dự đoán, VarianceThreshold đã loại bỏ cột đầu tiên, có xác suất 𝑝 = 5/6 > .8 giá trị là số 0. Lựa chọn đặc trưng đơn biến (Univariate feature selection) Lựa chọn đặc trưng đơn biến hoạt động bằng cách chọn các đặc trưng tốt nhất dựa trên các kiểm tra thống kê đơn biến. Nó có thể được coi là một bước tiền xử lý 25 https://scikit-learn.org/stable/modules/feature_selection.html#feature-selection 37 cho bộ ước lượng. Scikit-learn đưa ra các trình lựa chọn đặc trưng như các đối tượng thực hiện phương thức biến đổi: • SelectKBest: loại bỏ tất cả trừ k đặc trưng có điểm số cao nhất • SelectPercentile: loại bỏ tất cả, trừ 1 phần đặc trưng có điểm số cao nhất do người dùng chỉ định. • Sử dụng các kiểm tra thống kê đơn biến phổ biến cho mỗi đặc trưng: tỉ lệ báo động nhầm (False Positive Rate) SelectFpr, tỉ lệ phát hiện nhầm (False discovery rate) SelectFdr, hoặc lỗi sai số chung nhỏ nhất (family wise error) SelectFwe. • GenericUnivariateSelect cho phép thực hiện lựa chọn đặc trưng đơn biến với chiến lược có thể định cấu hình. Điều này cho phép chọn chiến lược lựa chọn đơn biến tốt nhất với bộ ước lượng tìm kiếm siêu tham số. Chẳng hạn, chúng ta có thể thực hiện phép thử 𝜒1 cho các mẫu để lấy chỉ hai tính năng tốt nhất như sau: >>> from sklearn.datasets import load_iris >>> from sklearn.feature_selection import SelectKBest >>> from sklearn.feature_selection import chi2 >>> iris = load_iris() >>> X, y = iris.data, iris.target >>> X.shape (150, 4) >>> X_new = SelectKBest(chi2, k=2).fit_transform(X, y) >>> X_new.shape (150, 2) Các đối tượng này lấy đầu vào là một chức năng tính điểm trả về các điểm số và p giá trị đơn biến (hoặc chỉ các điểm số cho SelectKBest và SelectPercentile): • Cho hồi quy: f_regression, mutual_info_regression • Cho phân loại: chi2, f_classif, mutual_info_classif Các phương pháp dựa trên F-test ước lượng mức độ phụ thuộc tuyến tính giữa hai biến ngẫu nhiên. Mặt khác, các phương pháp thông tin lẫn nhau có thể nắm bắt bất kỳ loại phụ thuộc thống kê nào, nhưng không theo tỷ lệ, chúng yêu cầu nhiều mẫu hơn để ước lượng chính xác. Ngoài ra, còn có các phương pháp lựa chọn đặc trưng khác: • Loại bỏ đặc trưng đệ quy (Recursive feature elimination) 38 • Loại bỏ đặc trưng sử dụng SelectFromeModel • Loại bỏ đặc trưng như là một phần của luồng xử lý (Feature selection as part of a pipeline) Tuy nhiên trong khuôn khổ của luận văn, chúng ta sẽ không phân tích sâu vào các phương pháp này. 3.3.4. Kiểm định chéo (Cross-validation) Khi lựa chọn các cài đặt khác nhau, siêu tham số, cho một bộ ước lượng, chẳng hạn cài đặt C cho một máy véc-tơ hỗ trợ (SVM), vẫn có một nguy cơ quá khớp (overfitting) trên tập dữ liệu kiểm tra (test set) do các tham số này được điều chỉnh cho bộ ước lượng thực hiện được tối ưu nhất. Và vì thế kết quả của nó không còn đúng với thực tế, không hoạt động đúng được trên các dữ liệu chưa biết. Để giải quyết vấn đề này, một phần khác của tập dữ liệu sẽ được lấy ra, được gọi là tập kiểm định (validation set): việc huấn luyện được thực hiện trên tập huấn luyện, sau đó được đánh giá trên tập kiểm định và cuối cùng được đánh giá lại trên tập kiểm tra. Tuy nhiên, bằng cách phân vùng dữ liệu có sẵn thành ba tập, chúng ta đã giảm đáng kể số lượng mẫu có thể được sử dụng để học mô hình và kết quả có thể phụ thuộc vào một lựa chọn ngẫu nhiên cụ thể cho cặp (huấn luyện, kiểm định). Một giải pháp cho vấn đề này là một thủ tục gọi là kiểm định chéo (cross- validation - viết tắt là CV). Một tập dữ liệu kiểm tra vẫn được lấy ra để đánh giá cuối cùng, nhưng tập dữ liệu kiểm định không còn cần thiết nữa. Trong cách tiếp cận cơ bản, được gọi là kiểm định chéo k lần (k-fold CV), tập huấn luyện được chia thành k tập nhỏ hơn, gọi là các fold (có nhiều cách tiếp cận khác nhưng cơ bản dựa trên nguyên tắc tương tự): • k-1 fold được sử dụng như là tập dữ liệu huấn luyện để xây dựng mô hình • mô hình được xây dựng sẽ được kiểm định trên phần còn lại, như là tập dữ liệu dữ liệu kiểm tra để tính toán hiệu suất, chẳng hạn như độ chính xác. Hiệu suất được báo cáo từ k-fold CV là trung bình của các giá trị được tính trong vòng lặp. Cách tiếp cận này có thể tốn kém về mặt tính toán, nhưng không lãng phí quá nhiều dữ liệu (như trường hợp khi sửa một bộ kiểm định tùy ý), đây là một lợi thế lớn trong các vấn đề như suy luận nghịch đảo trong đó số lượng mẫu rất nhỏ. 39 Stratified k-fold26 Một số vấn đề phân loại có thể thể hiện sự mất cân bằng lớn trong phân phối các lớp mục tiêu. Chẳn hạn, có thể có nhiều mẫu âm hơn nhiều lần so với các mẫu dương. Trong các trường hợp như vậy, nên sử dụng lấy mẫu phân tầng như được triển khai trong StratifiedKFold và StratifiedShuffleSplit để đảm bảo rằng tần suất lớp tương đối được bảo toàn xấp xỉ trong mỗi lần huấn luyện và kiểm định. StratifiedKFold là một biến thể của k-fold trả về các tập dữ liệu con phân tầng: mỗi tập chứa xấp xỉ tỷ lệ phần trăm giống nhau số mẫu của mỗi lớp mục tiêu như tập hoàn chỉnh. Tiếp theo dưới đây là ví dụ về kiểm định chéo phân tầng 3-fold trên tập dữ liệu với mười mẫu từ hai lớp tương đối không cân bằng: >>> from sklearn.model_selection import StratifiedKFold >>> X = np.ones(10) >>> y = [0, 0, 0, 0, 1, 1, 1, 1, 1, 1] >>> skf = StratifiedKFold(n_splits=3) >>> for train, test in skf.split(X, y): ... print("%s %s" % (train, test)) [2 3 6 7 8 9] [0 1 4 5] [0 1 3 4 5 8 9] [2 6 7] [0 1 2 4 5 6 7] [3 8 9] 26 https://scikit-learn.org/stable/modules/cross_validation.html#k-fold 40 Hình 3.8: Biểu điễn của hành vi kiển định chéo 3-fold Stratified CV Hình 3.8 thể hiện cách thực thi việc phân chia dữ liệu theo cái tiếp cận kiểm định chéo Stratified 3-fold. Có thể thấy các tập con dữ liệu được phân chia với số lượng mẫu ở các lớp đồng đều và được thực hiện tương tự cho ba lần chia như phân tích ở trên. Ngoài ra, còn có rất nhiều cách tiếp cận khác như Repeted K-fold, LOO, LPO, Shuffle&Split, Group k-fold, Time series split, Predefined Fold-split, v.v. Trong thực nghiệm trong luận văn này, học viên sử dụng cách tiếp cận StratifiedKFold với K = 5. Cách tiếp cận này phù hợp với bài toán cần giải quyết do tập dữ liệu trên Wikipedia tiếng Việt không đồng đều với các loại kiểu khác nhau. StratifiedKFold sẽ giúp cho các kiểu được phân bổ đồng đều trong các tập dữ liệu con, tránh việc tập này có quá nhiều kiểu loại này, trong khi tập con khác lại không có đủ dữ liệu tương tự. 41 3.4. Tiền xử lý dữ liệu Tiền xử lý dữ liệu là một bước rất quan trọng trong việc giải quyết bất kỳ vấn đề nào trong lĩnh vực Học máy. Hầu hết các bộ dữ liệu được sử dụng trong các vấn đề liên quan đến Học máy cần được xử lý, làm sạch và biến đổi trước khi một thuật toán Học máy có thể được huấn luyện trên những bộ dữ liệu này. Hình 3.9 mô tả các bước tiền xử lý được thực hiện trong luận văn, bao gồm các bước chuẩn bị dữ liệu, trích chọn đặc trưng và số hoá các đặc trưng, cũng như các công cụ được sử dụng trong các bước. Hình 3.9 Các bước tiền xử lý dữ liệu Dữ liệu các trang Wikipedia tiếng Việt là các trang web định dạng html chứa các thông tin hữu ích như tiêu đề bài viết, hộp thông tin (infobox), nội dung bài viết, thể loại bài viết, mục lục trong bài viết. Những thông tin này rất có giá trị để sử dụng làm các đặc trưng cho mô hình học máy phục vụ bài toán. Tuy nhiên, cũng tồn tại rất nhiều nhiễu cần phải loại bỏ như các thông tin nhãn html, các trang chuyển tiếp (redirect pages), các trang mẫu (template pages). Hình 3.10 biểu điễn một trang web điển hình từ Wikipedia tiếng Việt chưa qua xử lý. Chuẩn bị dữ liệu Trích chọn đặc trưng Số hoá các đặc trưng Wikipedia tiếng Việt - Sử dụng Wikextractor - Tải dữ liệu từ wikidump - Loại bỏ nhiễu - Phần mềm Java đọc thẻ html - Sử dụng VNCoreNLP để tách từ và gán nhãn từ loại - Biểu diễn các đặc trưng dạng phrase, 1-gram, 2-gram, 3- gram - Véc tơ hoá dữ liệu các đặc trưng 42 Hình 3.10 Một trang wikipedia điển hình Wikipedia cung cấp một công cụ hữu ích (Wikiextractror) để tải tất cả các bài viết được lưu trữ trên hệ thống trong các file dump được backup định kỳ. Đồng thời Wikiextractor cũng giúp thực hiện các tác vụ làm sạch dữ liệu, loại bỏ các dữ liệu nhiễu trong các trang Wikipedia được tải xuống. Dữ liệu sử dụng trong luận văn được tải từ dữ liệu backup trên máy chủ của Wikipedia tháng 1/2019. Để trích xuất các thông tin hữu ích ứng với các đặc trưng mong muốn sử dụng, tác giả đã phát triển một công cụ đơn giản để tiền xử lý dữ liệu viết trên nền tảng Java. Công cụ này xử lý các trang Wikipedia đã được tải về như trên, đọc các các thẻ html liên quan để lấy ra các thông tin cần sử dụng tương ứng. Tiếp theo, tác giả sử dụng công cụ VNCoreNLP để phân tách các thông tin đọc được thành các từ có ý nghĩa và là danh từ. Nội dung tệp dữ liệu sau tiền xử lý được mô tả như trong Phụ lục 3. Tiếp theo, là nội dung giới thiệu chi tiết hơn về công cụ VNCoreNLP, cũng như các n

Các file đính kèm theo tài liệu này:

  • pdfluan_van_phan_loai_thuc_the_co_ten_tren_wikipedia_de_phuc_vu.pdf
Tài liệu liên quan