Nếu phương pháp học máy được áp dụng cho việc nhận dạng thực thể tên thì các thuộc tính là các yếu tố giống như giác quan của con người, giúp con người dễ dàng nhận biết mọi vật xung quanh. Do đó việc lựa chọn thuộc tính là rất quan trọng và là tính năng cần thiết không thể thiếu trong hệ thống nhận dạng thực thể tên. Các thuộc tính tốt được chọn thì hiệu năng của hệ thống nhận dạng thực thể tên sẽ càng cao. Tôi đã cố gắng kết hợp trong mô hình của mình một số các thuộc tính có giá trị cao, độ phân biệt rõ rệt. Một số kiểu thuộc tính được tôi sử dụng trong nghiên cứu của mình như: n-grams, biểu thức chính quy, từ điển, và sự kết hợp giữa từ điển và biểu thức chính quy được mô tả chi tiết như các bảng dưới đây.
N-grams Mẫu ngữ cảnh (Context predicate templates)
1-gram [w-2], [w-1], [w0], [w1], [w2] 2-grams [w-2w-1], [w-1w0], [w0w1], [w1w2] 3-grams [w-2w-1w0], [w-1w0w1], [w0w1w2]
Với kiểu thuộc tính sử dụng N-grams thì các mẫu ngữ cảnh sẽ được sinh ra theo 1- grams, 2-grams, 3-grams. Kiểu này sẽ được sử dụng với cửa sổ có kích thước bằng 5 chạy dọc theo các câu trong văn bản. Chỉ số tận cùng bên trái là -2, tiếp theo là -1, vị trí trung tâm (cũng là vị trí hiện tại) của từ sẽ là 0, tiếp đó là 1 và tận cùng bên phải là 2.
Ví dụ: xét câu “tìm đường đến ngã tư nguyễn trãi khuất duy tiên” giả sử vị trí hiện tại đang xét là tại vị trí 0 là từ “trãi” ứng với câu trên. Biểu diễ các mẫu ngữ cảnh theo n-grams như sau:
Bảng 3.6: Ví dụ về mẫu ngữ cảnh đƣợc sinh khi sử dụng N-Grams N-grams Mẫu ngữ cảnh (Context predicate templates)
1-gram w:-2:từ; w:-1:nguyễn; w:0:trãi; w:1:khuất; w:2:duy
2-grams ww:-2:-1:từ:nguyễn; ww:-1:0:nguyễn:trãi; ww:0:1:trãi:khuất; ww:1:2:khuất:duy
3-grams www:-2:-1:0:từ:nguyễn:trãi; www:-1:0:1:nguyễn:trãi:khuất; www:0:1:2:trãi:khuất:duy
Một kiểu thuộc tính quan trọng và dường như không thể thiếu đó là biểu thức chính quy. Tôi đã sử dụng một số biểu thức chính quy như: biểu thức số học, ngày, tháng, năm, tuần, ngày tháng năm, số điện thoại, tên đường, địa chỉ url… để có thể bắt được ngay các kiểu dữ liệu mà nó khớp với biểu thức chính quy đã được định nghĩa từ trước. Dưới đây là các mẫu ngữ cảnh khi sử dụng biểu thức chính quy được trình bày chi tiết như bảng 3.7 như sau.
Bảng 3.7: Các mẫu ngữ cảnh khi sử dụng biểu thức chính quy Các thuộc tính cho
biểu thức chính quy Mẫu văn bản khớp với biểu thức chính quy
is–number, is–day, 1–tokens: −2 . . . 2 → [w-2], [w-1], [w0], [w1], [w2]
is–date, is-week, 2–tokens: −2 . . . 2 → [w-2 w-1], [w-1 w0], [w0 w1], [w1 w2]
is–month, is–year, 3–tokens: −2 . . . 2 → [w-2 w-1 w0], [w-1 w0 w1], [w0 w1 w2]
is–full–date 4–tokens: −3 . . . 3 → [w-3 w-2 w-1 w0] . . . [w0 w1 w2 w3] is–phone–number,
is–email, is–url, 6–tokens: −5 . . . 5 → [w-5 w-4 w-3 w-2 w-1 w0] . . . [w0 w1 w2 w3 w4 w5]
7–tokens: −6 . . . 6 → [w-6 w-5 w-4 w-3 w-2 w-1 w0] . . . [w0 w1 w2 w3 w4 w5 w6]
Với các mẫu ngữ cảnh sử dụng cho biểu thức chính quy sử dụng kích thước cửa sổ từ 5 đến 13 để trượt trong khung cửa sổ. Trong đó với kích thước cửa sổ bằng 13 thường được dùng để quét cho kiểu dữ liệu url, bởi trên thực tế có rất nhiều địa chỉ url của website rất dài.
Ngoài ra tôi cũng sử dụng một số các từ điển tìm kiếm cho các thuộc tính như: - url: gồm các url phổ biến ở Việt Nam như: dân trí chấm com chấm vn
(dantri.com.vn), vnexpress.net và 24 giờ chấm com (24h.com.vn),…
- part–of–url: một danh sách các tên miền, và tên miền con như .vn, .edu.vn, .com.vn,…
- address-word: một danh sách các tên về địa chỉ như: đường, ngõ, hẻm, ngã ba, ngã tư, ngã năm,…
- time–word: một danh các tên về biểu thức thời gian như: nửa đêm, rạng sáng, rưỡi, kém,…
- day–word: một danh sách các tên về ngày như: hôm qua, ngày tới, tuần tới, ngày hôm qua….
- period–word: một danh sách tên về khoảng thời gian và tân suất thời gian như: hàng ngày, hàng tuần, thứ tư hàng tuần,…
- location–word: một danh sách các từ, cụm từ về chỉ dẫn đường đi như: từ, đến, định vị...
- app–name: một danh sách về các tên ứng dụng phổ biến trên các kho ứng dụng dành cho điện thoại đi động thông minh như: facebook, skype, gmail, youtube,…
- street–name: một danh sách về các tên đường của Việt Nam như: võ văn tần, trần hưng đạo,…
- province–name: một danh sách tên các tỉnh, thành phố của Việt Nam như: hà nội, sài gòn, việt trì, vinh, …
- contact–word: danh sách các từ liên quan tới việc thực hiện cuộc gọi hoặc nhắn tin như tới danh bạ hoặc thuê bao nào đó: gọi cho, nhắn cho, nhắn tin tới,… - organization–word: danh sách các từ tiền tố chỉ nơi công cộng hay các trụ sở
công ty, trường học như: sân bay, trạm xe bus, ngân hàng,…
Dưới đây là danh sách các mẫu văn bản tìm kiếm trong từ điển được trình bày chi tiết ở bảng 3.8.
Bảng 3.8: Các mẫu ngữ cảnh khi sử dụng từ điển Các thuộc tính cho tìm
url, part–of–url, 1–tokens: −2 . . . 2 → [w-2], [w-1], [w0], [w1], [w2]
address-word, 2–tokens: −2 . . . 2 → [w-2 w-1], [w-1 w0], [w0 w1], [w1 w2]
day–word, time–word, 3–tokens: −2 . . . 2 → [w-2 w-1 w0], [w-1 w0 w1], [w0 w1 w2] period–word, 4–tokens: −3 . . . 3 → [w-3 w-2 w-1 w0] . . . [w0 w1 w2 w3] app–name, street–name, 5–tokens: −4 . . . 4 → [w-4 w-3 w-2 w-1 w0] . . . [w0 w1 w2 w3 w4] organization–word, contact–word, 6–tokens: −5 . . . 5 → [ww2 w3 w4 w5] -5 w-4 w-3 w-2 w-1 w0] . . . [w0 w1 location–word, province–name 7–tokens: −6 . . . 6 → [ww1 w2 w3 w4 w5 w6] -6 w-5 w-4 w-3 w-2 w-1 w0] . . . [w0 Ví dụ tìm kiếm tên đường trong từ điển như sau: Trong câu “tìm đường đến ngã tư nguyễn trãi khuất duy tiến”.
Xét với câu trên với kích thước cửa sổ bằng 7, giả sử lấy vị trí 0 làm vị trí trung tâm là từ “trãi” trong câu để xét với các từ lân cận với vị trí hiện tại này ta thu được các mẫu ngữ cảnh cụ thể như sau:
Bảng 3.9: Ví dụ các mẫu ngữ cảnh khi tìm kiếm trong từ điển cho tên đƣờng phố Các mẫu ngữ cảnh sinh ra khi quét với cửa sổ bằng 7
4w:-3:-2:-1:0:ngã:tư:nguyễn:trãi 3w:-2:-1:0:tư:nguyễn:trãi 2w:-1:0:nguyễn:trãi => -1:0:dict-strname 1w:0:trãi 2w:0:1:trãi:khuất 3w:0:1:2:trãi:khuất:duy 4w:0:1:2:3:trãi:khuất:duy:tiến
Bằng quan sát dễ thấy tại vị trí -1:0 chắc chắn sẽ xác định được đây là một tên đường hợp lệ khớp với dữ liệu trong từ điển về tên đường. Khi so sánh kết quả tại vị trí này với từ điển mà khớp ta sẽ gắn thêm vào tại đây một thuộc tính mới có tên “street- name” để chỉ ra đây là một thuộc tính quan trọng sẽ được xét đến trong lúc huấn luyện mô hình. Thêm một ví dụ nữa để chứng minh khi cần tìm trong từ điển cho dữ liệu thời gian trong câu “đặt lịch họp với bidv 2 giờ chiều thứ hai tuần tới” như sau:
Giả sử tại vị trí hiện tại là 0 là từ “thứ” trong câu làm vị trí trung tâm, sử dụng cửa sổ trượt kích thước bằng 7 chạy dọc theo câu, ta có các mẫu ngữ cảnh như sau:
Bảng 3.10: Ví dụ các mẫu ngữ cảnh khi tìm kiếm trong từ điển cho kiểu ngày Các mẫu ngữ cảnh sinh ra khi quét với cửa sổ bằng 7
3w:-2:-1:0:giờ:chiều:thứ 2w:-1:0:chiều:thứ 1w:0:thứ 2w:0:1:thứ:hai 3w:0:1:2:thứ:hai:tuần 4w:0:1:2:3:thứ:hai:tuần:tới
Tại vị trí 0:1 ta sẽ tìm trong từ điển và sẽ xác định được đây là biểu thức chỉ ngày, do vậy tại vị trí 0:1 đấy tôi sẽ thêm thuộc tính cho mới cho kiểu ngày là “day-word”.
Ngoài ra, để làm phong phú các thuộc tính của mình và tạo ra các thuộc tính có mức phân biệt cao rõ rệt hơn tôi đã kết hợp cả từ điển và biểu thức chính quy để có thể bắt được các tình huống như: số đường + tên đường (như: ngõ 147 yên hòa), hay các từ về địa chỉ + tên đường (như: đường xuân thủy), hay kết hợp cả hai loại trên (như số 8 phố duy tân). Dưới đây tôi sẽ trình bày cụ thể các mẫu văn bản được kết hợp giữa biểu thức chính quy và từ điển ở bảng 3.11.
Bảng 3.11: Các thuộc tính sử dụng kết hợp giữa biểu thức chính quy và từ điển Danh sách các thuộc tính khi kết hợp từ điển với biểu thức chính quy
street number (reg. expression) + street name (dict.) address word (dict.) + street name (dict.)
street number (reg. expression) + address word (dict.) + street name (dict.)
Ví dụ: trong câu “tìm đường tới số 144 đường xuân thủy” với câu này tôi sẽ sử dụng kết hợp biểu thức chính quy và từ điển như sau. Giả sử tại vị trí 0 là từ “144” trong câu làm trung tâm, sử dụng cửa sổ có kích thước bằng 7 ta có các mẫu ngữ cảnh như sau:
Bảng 3.12: Ví dụ các mẫu ngữ cảnh khi kết hợp sử dụng cả biểu thức chính quy và từ điển
Mẫu ngữ cảnh khi sử dụng kết hợp cả biểu thức chính quy và từ điển
4w:-3:-2:-1:0:đường:tới:số:144 3w:-2:-1:0:tới:số:144 2w:-1:0:số:144 1w:0:144 2w:0:1:144:đường 3w:0:1:2:144:đường:xuân 4w:0:1:2:3:144:đƣờng:xuân:thủy:num-strname
Bằng trực quan ta dễ thấy cụm từ “xuân thủy” sẽ là một tên đường hợp lệ sau khi tìm kiếm trong từ điển tên đường phố. Tại đây tôi sẽ kiểm tra xem vị trí ngay phía trước cụm từ xuân thủy có từ nào không, nếu có thì tôi sẽ kiểm tra hai trường hợp:
Nếu từ đứng trước cụm từ xuân thủy là một biểu thức số hợp lệ (theo biểu thức chính quy số của tên đường) thì ngay tại đây tôi sẽ có thêm một thuộc tính mới là num- strname được thêm vào các mẫu ngữ cảnh.
Nếu từ đứng trước cụm từ xuân thủy là một từ mà không phải kiểu số thì tôi sẽ kiểm tra thêm một bước nữa bằng cách tìm kiếm từ đó xem có thuộc vào từ điển
addword-streetname không. Nếu kết quả trả về là có (ở đây là từ đường) thì xác định được đây là một từ thuộc vào từ điển hợp lệ của tên đường. Để đảm bảo trường hợp có thể trước từ đường có tồn tại số của tên đường không. Tôi sẽ xét thêm một từ trước đó xem nó có phải là số của tên đường không.
Trong trường hợp này, ta thấy ví dụ trên đã lấy đúng ví dụ cho việc xác định số của tên đường mà từ đứng trước cụm từ xuân thủy là từ “đường” thuộc trong từ điển
addword-streetname. Trước từ đường là từ “144” cũng hợp lệ. Do vậy theo ví dụ ở bảng trên tại vị trí 0:1:2:3 ta xác định được một thuộc tính quan trọng là số của tên đường.
Trong luận văn của mình tôi sử dụng một số lượng biểu thức chính quy cho các kiểu dữ liệu quan trọng. Dưới đây tôi liệt kê các biểu thức chính quy mà tôi đã sử dụng giúp bắt được được dữ liệu tốt và nhanh hơn trong quá trình huấn luyện mô hình:
Bảng 3.13: Danh sách các mẫu biểu thức chính quy
Biểu thức chính quy Ví dụ Ý nghĩa
(1[0-9]|2[0-4]|[0-9])((\\s(giờ))(\\ském)?(\\s[1-5]?[0- 9](\\sphút)?)?|g30) 14 giờ 20 phút time (thứ)\\s(7|hai|ba|bốn|tư|năm|sáu|tám) thứ 2 day ((ngày|mùng|ngày mùng)\\s)(1[0-9]|2[0-9]|3[0- 1]|[1-9]) ngày mùng 9 date (ngày\\s)(1[0-9]|2[0-9]|3[0-1]|[1- 9])\\s(tháng\\s)(1[0-2]|[1-9])(\\snăm\\s201\\d)? ngày 10 tháng 10 năm 2001 full date (([1-9]|1[0-9]|2[0-9]|3[0-1])\\s)?(tháng)\\s(1[0- 2]|[1-9]|này|tư|giêng|chạp) tháng 6 month
(năm)\\s(201\\d) năm 2010 year
[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9- ]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})
trphuongnam@g mail.com
([0-9]+)(\\s(phần trăm
|kilômét|mét|nghìn|ngàn|triệu|lần))
10 phần trăm number
(tuần)\\s(này|sau|tới)? tuần này week
([\\s\\d]){10,} 0912152965 phone
(\\d+\\w?) 2, 4, 6 street
number