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
79 trang |
Chia sẻ: honganh20 | Ngày: 21/02/2022 | Lượt xem: 422 | Lượt tải: 2
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:
- luan_van_phan_loai_thuc_the_co_ten_tren_wikipedia_de_phuc_vu.pdf