!"
#$%&'(
)''*'(+
, /0,1.23456
780,1. 9$:.;./
<=> ?@@?@@A
'BC ;DE78F(EG;H
EI./@A.:JK@?K
!"
#$%&'(
)''*'(+
2
2
%
Ngôn ngữ học máy tính là một ngành học trong lĩnh vực trí tuệ nhân tạo tập trung vào
tất cả các khia cạnh liên quan tới ngôn ngữ của con người và con người với máy tính.
Đây là một ngành nghiên cứu có phạm vi khá rộng, nó liên quan chặc chẽ đến các
ngành khác trong trí tuệ nhân tạo.
Theo yêu cầu đề tài môn “Ngôn Ngữ Học Máy Tính” và sự định hướng của thầy, TS.
Nguyễn Tuấn Đăng em quyết định thực hiện bài nghiên cứu về “ !
" # $% & '( )'
'*'(+L3Mục tiêu chính của bài nghiên cứu này là tìm hiểu một
số nguyên lý và cách phân tích cú pháp trong bằng cách sử dụng bộ thư viện NLTK
trong python với 3 bước cơ bản sau:
- ,M.NOPQRSP,TUVEW3
- I..E<.VX3
- EY.VZ8E8[CEIC3
Em xin chân thành gửi lời cám ơn và chúc sức khỏe đến thầy, TS. Nguyễn Tuấn Đăng
đã tạo điều kiện cho em thực hiện bài nghiên cứu này.
TP. HCM, Ngày 07 tháng 04 năm 2012
Đỗ Văn Cang
3
3
K3 \]'^"#
K3?3_.E./E`;
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.
K3K3I8abB8NOPQ
Phân tích hình thái: Trong bước này từng từ sẽ được phân tích và các ký tự
không phải chữ (như các dấu câu) sẽ được tách ra khỏi các từ. Trong tiếng
Anh và nhiều ngôn ngữ khác, các từ được phân tách với nhau bằng dấu
cách. Tuy nhiên trong tiếng Việt, dấu cách được dùng để phân tách các tiếng
(âm tiết) chứ không phải từ. Cùng với các ngôn ngữ như tiếng Trung, tiếng
Hàn,tiếng Nhật, phân tách từ trong tiếng Việt là một công việc không hề đơn
giản.
Phân tích cú pháp: Dãy các từ sẽ được biến đổi thành các cấu trúc thể hiện
sự liên kết giữa các từ này. Sẽ có những dãy từ bị loại do vi phạm các luật
văn phạm.
Phân tích ngữ nghĩa: Thêm ngữ nghĩa vào các cấu trúc được tạo ra bởi bộ
phân tích cú pháp.
Tích hợp văn bản: Ngữ nghĩa của một câu riêng biệt có thể phụ thuộc vào
những câu đứng trước, đồng thời nó cũng có thể ảnh hưởng đến các câu
phía sau.
Phân tích thực nghĩa: Cấu trúc thể hiện điều được phát ngôn sẽ được thông
dịch lại để xác định nó thật sự có nghĩa là gì.
Tuy nhiên, ranh giới giữa 5 bước xử lý này cũng rất mong manh. Chúng có thể được
tiến hành từng bước một, hoặc tiến hành cùng lúc - tùy thuộc vào giải thuật và ngữ
cảnh cụ thể.
K3c3I8ad,VDI.e./Rf./
• Nhận dạng chữ viết: Có hai kiểu nhận dạng, thứ nhất là nhận dạng chữ in, ví
dụ 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 chẳng hạn. Phức tạp hơn
là nhận dạng chữ viết tay, có khó khăn bởi vì chữ viết tay không có khuôn
dạng rõ ràng và 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ử).
• Nhận dạng tiếng nói: Nhận dạng tiếng nói rồi chuyển chúng thành 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, chẳng hạn thay vì gõ một tài liệu nào đó bạn đọ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
4
4
ướ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: Từ một văn bản tự động tổng hợp thành tiếng 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 ta. 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 robot với người.
• Dịch tự động (machine translate): Như tên gọi đây là chương trình dịch tự
động từ ngôn ngữ này sang 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.
Tháng 10 năm 2008 có hai công ty tham gia vào lĩnh vực này cho ngôn ngữ
tiếng Việt là công ty Lạc Việt (công ty phát hành từ điển Lạc Việt) và Google,
một thời gian sau đó Xalo.vn cũng đưa ra dịch vụ tương tự.
• Tìm kiếm thông tin (information retrieval): Đặt câu hỏi và chương trình tự tìm
ra nội dung phù hợp nhất. Thông tin ngày càng đầy lên theo cấp số nhân, đặc
biệt với sự trợ giúp của internet việc tiếp cận thông tin trở lên dễ dàng hơn
bao giờ hết. Việc khó khăn lúc này là tìm đúng nhất thông tin mình cần giữa
bề bộn tri thức và đặc biệt thông tin đó phải đáng tin cậy. Các máy tìm kiếm
dựa trên giao diện web như Google hay Yahoo hiện nay chỉ phân tích nội
dung rất đơn giản dựa trên tần suất của từ khoá và thứ hạng của trang và
một số tiêu chí đánh giá khác để đưa ra kết luận, kết quả là rất nhiều tìm kiếm
không nhận được câu trả lời phù hợp, thậm chí bị dẫn tới một liên kết không
liên quan gì do thủ thuật đánh lừa của các trang web nhằm giới thiệu sản
phẩm (có tên tiếng Anh là SEO viết tắt của từ search engine optimization).
Thực tế cho đến bây giờ chưa có máy tìm kiếm nào hiểu được ngôn ngữ tự
nhiên của con người trừ trang www.ask.com được đánh giá là “hiểu” được
những câu hỏi có cấu trúc ở dạng đơn giản nhất. Mới đây cộng đồng mạng
đang xôn xao về trang Wolfram Alpha, được hứa hẹn là có khả năng hiểu
ngôn ngữ tự nhiên của con người và đưa ra câu trả lời chính xác[1]. Lĩnh vực
này hứa hẹn tạo ra bước nhảy trong cách thức tiếp nhận tri thức của cả cộng
đồng.
• Tóm tắt văn bản: Từ một văn bản dài tóm tắt thành một văn bản ngắn hơn
theo mong muốn nhưng vẫn chứa những nội dung thiết yếu nhất.
• Khai phá dữ liệu (data mining) và phát hiện tri thức: Từ rất nhiều tài liệu khác
nhau phát hiện ra tri thức mới. Thực tế để làm được điều này rất khó, nó gần
như là mô phỏng quá trình học tập, khám phá khoa học của con người, đây là
lĩnh vực đang trong giai đoạn đầu phát triển. Ở mức độ đơn giản khi kết hợp
với máy tìm kiếm nó cho phép đặt câu hỏi để từ đó công cụ tự tìm ra câu trả
lời dựa trên các thông tin trên web mặc cho việc trước đó có câu trả lời lưu
trên web hay không (giống như trang Yahoo! hỏi và đáp, nơi chuyên đặt các
câu hỏi để người khác trả lời), nói một cách nôm na là nó đã biết xử lý dữ liệu
để trả lời câu hỏi của người sử dụng, thay vì máy móc đáp trả những gì chỉ
có sẵn trong bộ nhớ.
• Hệ thống hỏi trả lời (Question Answering)
5
5
c3 g'($hi6
c3?3d,jkV'(
Các yêu cầu cụ thể cài đặt bộ thư viện NLTK tham khảo tại địa chỉ sau
Sau khi cài đặt xong Python, chúng ta có thể cài các
thư viện bằng bộ xài trực tiếp hoặc build và cài từ source (không phụ thuộc hệ đều
hành) bằng lệnh sau, thực hiện với đường dẫn làm việc là thư mục nguồn.
python setup.py install
Các phần mềm yêu cầu cơ bản
El.JMJ m,n./,-,
Python Bài viết này sử dụng Python 2.7.x
NLTK Sử dụng version 2.x.x
NLTK-Data Chứa dữ liệu ví dụ và các dữ liệu thư viện đã được học.
NumPy Thư viên tính toán hỗ trợ mảng đa chiều và đại số tuyến tính cần thiết
cho các xử lý xác suất, tagging, clustering, và classification.
Matplotlib Thư viên vẽ sơ đồ trực quan được sử dụng minh họa trong NLTK
NetworkX Lưu trữ và tính toán tên mạng,đồ thị bao gồm đỉnh và cạnh, sử dụng
o;CE0,p cho thể hiên giao diện.
Prover9 Hỗ trợ nghiên cứu tự động suy diễn.
c3K3I8VZ.E.:./
NLTK là một bộ thư viện, chương trình trợ rất mạnh mẽ xử lý ngôn ngữ tự nhiên
(NLP) bằng tất cả các kỹ thuật có thể có một cách trực tiếp hoặc gián tiếp trong
ngôn ngữ python. Nó bao gồm tất cả các ví dụ, dữ liệu mẫu và các ứng dụng trình
diễn bằng đồ họa. NLTK rất thích hợp cho các sinh viên học về NLP hoặc nghiên
cứu trong lĩnh vực NLP hoặc các lĩnh vực liên quan chặt chẽ như : ngôn ngữ học
thực nghiêm, khoa học nhận thức, trí tuệ nhân tạo, rút trích(tìm kiếm) thông tin, máy
học. NLTK đã được sử dụng thành công như một công cụ giảng dạy,như một công
cụ nghiên cứu cá nhân, và như là một nền tảng cho các hệ thống nghiên cứu tạo
mẫu và xây dựng.
Một số modules quan trọng của NLTK
Ee8.:./NOPQ m,n./,-, DRUPq
Accessing corpora Chuẩn hóa giao diện đoạn
văn(corpora) và từ vựng(lexicons)
nltk.corpus
String processing Tách câu, tách từ(token) và họ
từ(stemmers)
nltk.tokenize
nltk.stem
Collocation discovery Khám phá cụm từ: t-test, chi-squared,
point-wise mutual information.
nltk.collocations
Part-of-speech
tagging
I..E<.VX.r/o;Jsa;8tDuuso,PPs
s.
.PVt3V;/
P;==,u,8;V,D. EY.PDv,
8YwxUwyVj_.E
J;N,JUJq.VoDCw
.;,0q;wq=
*
trJq;.=
.PVt38P;==,uw
.PVt38PU=Vqo
Chunking regular expression nltk.chunk
6
6
I8E8YU
2q.Vq.8q=q/Jq.V;V,D.
).PVt3VDtq.,pq+
I8EVX
Dtq.,p;V,D.
).PVt3VDtq.,pq+
I..E<.VX
;//,./
).PVt3V;/+
Xác định thành phần
Entity detection
Xác định quan hệ
Relation detection
Chuẩn hóa từ
Stemming, Lemmatization
(nltk.stem)
EY.VZ8E8[CEIC
;o=,./
).PVt3C;o=q+
mSP,TU0:.a VEW
;zqNV)=Vo,./+
POS-tag sentence (list of lists of tuples)
Chunked sentence
Relation (list of tuples)
Structure sentence (list of trees)
Tokenized sentences (list of lists of strings)
Sentences (list of strings)
n-gram
named-entity
;o=,./ E;oV
uq;VUoqra;=qR
U.,u,8;V,D.
CoDa;a,P,=V,8sRqCq.Rq.8w
.PVt3C;o=q
Semantic
interpretation
lambda calculus, first-order logic,
model checking
nltk.sem
nltk.inference
Evaluation metrics precision, recall, agreement
coefficients
nltk.metrics
Probability and
estimation
frequency distributions, smoothed
probability distributions
nltk.probability
Applications graphical concordancer, parsers,
WordNet browser, chatbots
nltk.app
nltk.chat
Linguistic fieldwork manipulate data in SIL Toolbox format nltk.toolbox
Ngoài ra NLTK còn cung cấp giao diện giao tiếp với nhiều thư viện xử lý khác như
một số thự viện sau:
Weka Classsifiers - />Stanford NLP - />TADM -
Megam - />Mallet Machine Learning - />c3c3WE{.ECEY.VZ8E8|UVo[80:.CEvJ
Có thể nói rằng với hệ thống đồ sộ các thư viên trong NLTK, chúng ta có thể thực
hiện nhiều việc trong nhiều lĩnh vực khác nhau như đã đề cập phần 1.2, tuy nhiên
trong phạm vi bài tiểu luận này em tập trung chính vào việc phân tích cú pháp của
văn phạm nên em chỉ đưa ra mô hình phân tích đơn giản như sau:
7
7
A3 #'^im&
A3?3EY.PBC0:.a )qNVP;==,u,8;V,D.+
Trong các mô hình xử lý ngôn ngữ tự nhiên, các mô hình dựa trên lý thuyết thống kê
là một phần rất quan trọng và mang tính thực tiễn cao. Bởi vì ngôn ngữ tự nhiên qua
đa dạng để có thể sử dụng mô hình nào đó để áp dụng với độ chính xác cao. Đó
cũng chính là chỗ khắc phục các yếu điểm của các mô hình khác của phương pháp
thống kê.
EY.PBC
Cho tập các mẫu đã phân lớp trước, xây dựng mô hình cho từng lớp.
• Mục đích: Gán các mẫu mới vào các lớp với độ chính xác cao nhất có thể.
• Cho tập dữ liệu m}~V?sVKs•sV.€ và tập các lớp }~?s•3sJ€, phân lớp là
bài toán xác định ánh xạ f: DC sao cho mỗi ti được gán vào một lớp Cj.
• Lưu ý: trong mỗi một phần tử dữ liệu sẽ chứa tập các thuộc tính của dữ
liệu. Các thuộc tính này là các cột trong cơ sở dữ liệu hoặc là các đặc
trưng của các thể hiện đối tượng.
EY.PBC0:.a là các phương pháp phân lớp dựa trên nội dung của văn bản, nó
liên quan đến quá trình máy học thực hiện trên nội dung của văn bản để ra quyết
định cho các băn bản mới. Giả sử chúng ta đã có khái niệm và am hiểu về khái niệm
phân lớp (trong lĩnh vực máy học), phần phân lớp văn bản này sẽ tìm hiểu một số
phương pháp phân lớp sử dụng cho phân lớp văn bản về xử lý ngôn ngữ tự nhiên.
Ví dụ mình họa tập dữ liệu phân lớp trong đó C (Class)= {C1,C2}={yes,no}
8
8
A3?3?3 EY.PBC8G/,IJ=IV)2UCqo0,=qRP;==,u,8;V,D.+
Một phân lớp được gọi là giám sát nếu nó được xây dựng trên cơ sở tập văn bản
huấn luyện chứa các nhãn chính xác cho mỗi đầu vào. Sơ đồ khung được sử dụng
bởi phân lớp có giám sát như sau:
• •q;VUoqqNVo;8VDo: lấy các đặc trưng (featutes) từ tập đầu vào.
• ‚JKxUIVo{.E: quá trình huấn luyện(a) và quá trình dự đoán(b).
• U|.PUwT.: cặp bộ (đặc trưng,nhãn) được đưa vào các thuật toán máy học
để tạo ra mô hình. Dữ liệu huấn luyện được phân tích bởi thuật tóan phân lớp
( có thuộc tính nhãn lớp).
9
9
• mƒjDI.: các đặc trưng được đưa vào mô hình để dự đoán ra kết quả các
nhãn.Dữ liệu kiểm tra được dùng để ước lượng độ chính xác của bộ phân
lớp. Nếu độ chính xác là chấp nhận được thì có thể dùng bộ phân lớp để
phân lớp các mẫu dữ liệu mới.
• „ 8EZ.E NI8 );88Uo;8w+ Độ
chính xác của bộ phân lớp trên tập kiểm tra cho trước là phần trăm của các
mẫu trong tập kiểm tra được bộ phân lớp xếp lớp đúng.
A3?3K3 YwxUwyVj_.E)mq8,=,D.oqq=+
Cấu tạo cây quyết định: gồm 3 thành phần chính
Node không kết thúc: phép kiểm thử (test) trên một thuộc tính.
Node kết thúc (lá) : nhãn/mô tả của một lớp (class label)
Nhánh từ một node không kết thúc: kết quả của một phép thử trên thuộc tính
tương ứng.
E,y.Pb…88†a NYwRƒ./8Yw
• Bắt đầu từ node đơn biểu diễn tất cả các mẫu
• Thuật toán cơ bản
o Xây dựng một cây đệ quy phân chia và xác định đặc tính từ trên xuống
o Nếu các mẫu thuộc về cùng một lớp, node trở thành node lá và được
gán nhãn bằng lớp đó.
o Ngược lại, dùng độ jDVEU„8VZ.E để chọn thuộc tính sẽ phân tách tốt
nhất các mẫu vào các lớp.
o Một nhánh được tạo cho từng giá trị của thuộc tính được chọn và các
mẫu được phân hoạch theo tập giá trị đó.
o Tiến trình kết thúc chỉ khi bất kỳ điều kiện nào sau đây là đúng
Tất cả các mẫu thuộc về cùng một lớp.
Không còn thuộc tính nào nữa để phân chia.
Không còn mẫu nào để phân lớp.
• Nhiều dạng khác nhau: ID3, C4.5, CART, CHAID
o Điểm khác biệt chính: tiêu chuẩn/thuộc tính phân chia, độ đo để chọn
lựa.
10
10
I8j„jDVEU„8VZ.E
• Độ đo Information Gain (ID3)
o Thuộc tính tương ứng với ,.uDoJ;V,D./;,.PB..E|V sẽ được chọn
làm thuộc tính phân chia cho node N.
o Lượng thông tin cần để phân loại một phần tử trong D (= Entropy của
D): Info(D)
pi: xác suất để 1 phần tử bất kỳ trong D thuộc về lớp Ci với i =
1 m
: tập các phần tử của lớp Ci trong D
o Lượng thông tin cần để phân loại một phần tử trong D dựa trên thuộc
tính A: InfoA(D)
Thuộc tính A dùng phân tách D thành v phân hoạch {D1, D2, …,
Dj, …, Dv}.
Mỗi phân hoạch Dj gồm |Dj| phần tử trong D.
Lượng thông tin này sẽ cho biết mức độ trùng lắp giữa các phân
hoạch, nghĩa là một phân hoạch chứa các phần tử từ một lớp
hay nhiều lớp khác nhau.
Mong đợi: InfoA(D) 8d./.E‡8d./V>V.
o Information gain chính là độ sai biệt giữa trị thông tin Info(D) ban đầu
(trước phân hoạch) và trị thông tin mới InfoA(D) (sau phân hoạch với
A).
• Độ đo Gain Ratio (C4.5)
o Chuẩn hoá information gain với trị thông tin phân tách (split
information): SplitInfoA(D)
o Thuộc tính phân chia A tương ứng với trị GainRatio(A) là Vo_PB..E|V.
11
11
• Độ đo Gini Index (CART)
o Sự phân tách nhị phân (binary split) cho mỗi thuộc tính A:
là một tập con gồm một hay v-1 trị thuộc tính A.
o Gini index của một thuộc tính là trị nhỏ nhất tương ứng với một tập con
từ – 2 tập con.
o Thuộc tính phân chia tương ứng với /,.,,.RqN.E‡.E|V để tối đa hóa
sự suy giảm về độ trùng lắp giữa các phân hoạch.
A3?3c3 EY.PBC;,0q;wq=
• Phương pháp phân loại dựa trên xác suất
• Định lý Bayes
o X: một tuple/đối tượng (evidence)
o H: giả thuyết (hypothesis)
X thuộc về lớp C.
o P(H|X): posterior probability
Xác suất có điều kiện của H đối với X.
Ví dụ: P(buys_computer=yes|age=young, income=high) là xác
suất mua máy tính của khách hàng có tuổi “young” và thu nhập
“high”.
o P(X|H): posterior probability
Xác suất có điều kiện của X đối với H.
Ví dụ: P(age=young, income=high|buys_computer=yes) là xác
suất khách hàng mua máy tính có tuổi “young” và thu nhập
“high”.
• P(age=young, income=high|buys_computer=yes) = 0
• P(age=young, income=high|buys_computer=no) = 2/5 =
0.4
o P(H): prior probability
Xác suất của H
Ví dụ: P(buys_computer=yes) là xác suất mua máy tính của
khách hàng nói chung
• P(buys_computer=yes) = 9/14 = 0.643
• P(buys_computer=no) = 5/14 = 0.357
o P(X): prior probability
Xác suất của X
Ví dụ: P(age=young, income=high) là xác suất khách hàng có
tuổi “young” và thu nhập “high”.
• P(age=young, income=high) = 2/14 = 0.143
o P(H), P(X|H), P(X) có thể được tính từ tập dữ liệu cho trước.
12
12
o P(H|X) được tính từ định lý Bayes.
• Cho trước tập dữ liệu huấn luyện D với mô tả (nhãn) của các lớp Ci, i=1 m,
quá trình phân loại một tuple/đối tượng X = (x1, x2, …, xn) với mạng
Bayesian như sau:
o X được phân loại vào Ci nếu và chỉ nếu
P(|X) > P(|X) với 1<=j<=m, j<>i
Tối đa hóa P(Ci|X) (i.e. chọn Ci nếu P(Ci|X) là trị lớn nhất)
Tối đa hóa P(X|Ci)P(Ci)
P() = P() = = P() hoặc P() = …
• P(X|) được tính với giả định class conditional independence.
• , k = 1 n: trị thuộc tính của X
• P(|) được tính như sau:
o là thuộc tính rời rạc.
P(| ) = |{X’| = ^ X’ }|/| |
o là thuộc tính liên tục.
P(| ) tuân theo một phân bố xác suất nào đó (ví dụ: phân bố
Gauss).
• Nếu P(| ) = 0 thì P(X|) = 0!!!
13
13
A3?3A3 EY.PBC;N,JUJ*.VoDCw
(EI,.,TJq.VoDCw: Trong cây quyết định, ta đã nhìn qua cách tính entropy (Infor),
vậy thì entropy là gì? Entropy là một đại lượng dùng để đo lượng thông tin không
chắc chắn (uncertaincy) của một biến cố hay một phân phối ngẫu nhiên cho trước.
Ví dụ:
Một dòng chữ luôn chỉ có các ký tự "a" sẽ có entropy bằng 0, vì ký tự tiếp
theo sẽ luôn là "a".
Một dòng chữ chỉ có hai ký tự 0 và 1 ngẫu nhiên hoàn toàn sẽ có entropy là 1
bit cho mỗi ký tự.
*.VoDCw8ˆ;a,y../‰U.E,1.
Entropy của một biến ngẫu nhiên X cũng là giá trị mong đợi của các độ ngẫu nhiên
của các giá trị mà X có thể nhận.
Xét một biến ngẫu nhiên X có phân phối:
Công thức tính Entropy của X:
Nhận xét:
Một phân phối xác suất càng lệch nhiều (có xác xuất rất nhỏ và rất lớn) thì
tính không chắc chắn càng nhỏ => entropy càng thấp
Một phân phối xác suất càng đều thì tính không chắc chắn càng lớn =>
entropy càng cao.
14
14
_.EPQ8ƒ8jv,8ˆ;*.VoDCw:
Ta có: H(p1,p2,…,pM)<=log(M)
Trong đó: đẳng thức xảy ra khi và chỉ khi p1=p2=…=pM=1/M, khi đó entropy đạt giá
trị cực đại. (do thời gian giới hạn em xin phép không trình bày chi tiết mô hình này).
A3K3WE{.E;otD0Š.
A3K3?3 WE{.E;otD0Š.Pd/{‹
Mô hình Markov ẩn (tiếng Anh là Hidden Markov Model - HMM) là mô hình thống kê
trong đó hệ thống được mô hình hóa được cho là một quá trình Markov với các
tham số không biết trước và nhiệm vụ là xác định các tham số ẩn từ các tham số
quan sát được, dựa trên sự thừa nhận này. Các tham số của mô hình được rút ra
sau đó có thể sử dụng để thực hiện các phân tích kế tiếp, ví dụ cho các ứng dụng
nhận dạng mẫu.
Trong một mô hình Markov điển hình, trạng thái được quan sát trực tiếp bởi người
quan sát, và vì vậy các xác suất chuyển tiếp trạng thái là các tham số duy nhất. Mô
hình Markov ẩn thêm vào các đầu ra: mỗi trạng thái có xác suất phân bổ trên các
biểu hiện đầu ra có thể. Vì vậy, nhìn vào dãy của các biểu hiện được sinh ra bởi
HMM không trực tiếp chỉ ra dãy các trạng thái.
Đây là một mô hình toán thống kê có ứng dụng rộng rãi trong Tin học và sinh học.
Các chuyển tiếp trạng thái trong mô hình Markov ẩn
Ví dụ mô hình Markov.
- x — Các trạng thái trong mô hình
Markov
- a — Các xác suất chuyển tiếp
- b — Các xác suất đầu ra
- y — Các dữ liệu quan sát
$ZRf
Giả sử tôi có một người bạn sống ở rất xa. Hàng ngày chúng tôi gọi điện thoại cho
nhau và anh ta kể cho tôi nghe anh ta đã làm gì trong ngày. Người bạn tôi chỉ có 3
công việc mà anh thích làm là 1) đi dạo, 2) đi chợ và 3) dọn phòng. Hiển nhiên là sự
lựa chọn phải làm gì thì phụ thuộc trực tiếp vào thời tiết hôm đấy thế nào. Như vậy,
tôi không nhận được thông tin cụ thể về thời tiết nơi anh bạn tôi sống nhưng tôi lại
biết về xu hướng chung. Dựa vào lời kể của công việc hàng ngày của anh ta, tôi có
thể đoán về thời tiết hôm đó.
Như vậy, thời tiết được vận hành như một chuỗi Markov cụ thể. Có 2 trạng thái thời
tiết, "Mưa" và "Nắng", nhưng tôi không quan sát trực tiếp, do đó, chúng là ẩn đối với
tôi. Vào mỗi ngày, anh bạn tôi sẽ làm một trong các việc sau phụ thuộc vào thời tiết
hôm đó là "đi dạo", "đi chợ" và "dọn phòng". Vì anh bạn tôi đã tường thuật lại hoạt
động của mình, đó là các dữ liệu quan sát. Toàn bộ hệ thống này là một mô hình
Markov ẩn (HMM).
trạng thái = ('Mưa', 'Nắng')
dữ liệu quan sát = ('đi dạo', 'đi chợ', 'dọn phòng')
khả_năng_ban_đầu = {'Mưa': 0.6, 'Nắng': 0.4}
khả_năng_chuyển_dịch = {
15
15
'Mưa' : {'Mưa': 0.7, 'Nắng': 0.3},
'Nắng' : {'Mưa': 0.4, 'Nắng': 0.6},
}
khả_năng_loại_bỏ = {
'Mưa' : {'đi dạo': 0.1, 'đi chợ': 0.4, 'dọn phòng': 0.5},
'Nắng' : {'đi dạo': 0.6, 'đi chợ': 0.3, 'dọn phòng': 0.1},
}
Trong đoạn câu lệnh trên, khả_năng_ban_đầu cho thấy tôi không chắc về trạng thái
HMM khi người bạn đầu tiên gọi điện cho tôi (tất cả cái tôi biết là trời có vẻ
mưa).khả_năng_chuyển_dịch cho thấy những thay đổi về thời tiết trong chuỗi
Markov. Trong ví dụ này, chỉ có 30% khả năng ngày mai trời sẽ nắng nếu hôm nay
trời mưa.Khả_năng_loại_bỏ cho thấy anh bạn thích làm những việc gì mỗi ngày.
Nếu trời mưa thì có đến 50% khả năng anh bạn này sẽ dọn phòng, trong khi trời
nắng thì 60% khả năng anh ta sẽ đi dạo.
A3K3K3 _.E./E`;JWE{.E
Trong đó
16
16
A3K3c3 i./Rf./
Ứng dụng của HMM tập trung vào 3 vấn đề
,-,xUwyV0|.jMVEe?
,-,xUwyV0|.jMVEeK
,-,xUwyV0|.jMVEec
17
17
A3K3A3 i./Rf./0dD/I..E<.VoD./'(
Mô hình Markov ẩn (HMMs) chủ yếu sử dụng để gán các chuỗi nhãn chính xác dữ
liệu tuần tự hoặc đánh giá xác suất của một nhãn và chuỗi dữ liệu. Những mô hình
này là những trạng thái (status) giới hạn đặc trưng bởi trạng thái và sự thay đổi các
trạng thái, và các ký hiệu (symbols) ứng với từng trạng thái. HMM là một phần mở
rộng chuỗi Markov, nơi mà mỗi trạng thái quyết định một sự kiện nhất định. Trong
HMM quan sát là một chức năng thống kê các trạng thái. HMMs chia sẻ những giả
định của chuỗi Markov, là xác suất của quá trình chuyển đổi từ một trạng thái này
sang một trạng thái khác phụ thuộc vào trạng thái hiện tại - tức là hàng loạt của các
18
18
trạng thái đã dẫn đến trạng thái hiện tại không được sử dụng. Chúng bất biến về
thời gian.
HMM là một đồ thị có hướng, với các cạnh xác suất có trọng số (đại diện cho xác
suất của một quá trình chuyển đổi giữa các trạng thái nguồn và bên dưới), mỗi đỉnh
đại diện cho một kí hiệu đầu ra khi nhập vào. Các kí hiệu (quan sát) không tạo ra
quyết định. Vì lý do này, mà một chuỗi các quan sát đầu ra được tạo ra bởi một
HMM cho trước chưa chắc đúng với trình tự các trang thái được biết đến.
„V8I8EE{.EVEe8s8GVEŒjb…8jk8Vob./a•,
• Các kí hiệu chữ cái đầu ra (symbols). Đây là tập hợp các kí hiệu mà có thể là
quan sát như đầu ra của hệ thống.
• Tập các trạng thái (states).
• Xác xuất chuyển đổi aij : xác suất chuyển đổi tới mỗi trạng thái từ trạng thái
cho trước.
• Ma trận chuẩn đổi trạng thái A = {aij}
• Ma trận xác suất quan sát B = {bj(k)}: xác suất quan sát mỗi kí hiệu trong một
trạng thái nhất định.
• Phân phối trạng thái ban đầu , điều này xác định xác suất bắt đầu của mỗi
trạng thái.
Chúng ta hãy xét trong ngữ cảnh gán nhãn từ. HMM thực hiện với mong muốn xác
suất cao nhất của dãy nhãn có thể được tính cho một chuỗi câu đầu vào. Điều này
khác với kỹ thuật gán nhãn khác thường chỉ quan tâm tới các từ đơn lẻ, tìm kiếm để
tối ưu hóa mỗi nhãn riêng biệt một cách tham lam mà không có liên quan đến sự kết
hợp tối ưu của các nhãn cho một đơn vị lớn hơn,chẳng hạn như một câu. HMM thực
hiện điều này với các thuật toán $,Vqoa,, mà hiệu quả tính toán đường đi tối
ưu thông qua các đồ thị của những dãy từ cho trước và 3 tham số còn lại nhận
được từ quá trình huấn luyện. Với những thông tin này xác suất của một câu cho
trước có thể dễ dàng nhận được, bằng cách đơn giản tính tổng xác suất của mỗi
đường dẫn phân biệt thông qua mô hình. Tương tự xác suất nhẫn tuần tự có thể
nhận được với thuật toán Viterbi, với các trạng thái là các nhẫn tuần tự.
A3c3I8E8YU0B,U.tV=q.Vq.8qVDtq.,pqo
Tách câu trong văn bản là bước đầu tiên sau bước thu thập dữ liệu văn bản từ các
nguồn dữ liệu văn bản. Ứng với mỗi ngôn ngữ khác nhau, có rất nhiều cách để tách
câu ra từ một bài văn, từ những cách đơn giản nhất tới những cách hiệu quả nhất
cho từng loại ngôn ngữ. Tuy nhiên,về cơ bản thì việc tách câu sẽ phụ thuộc vào các
kí tự kết thúc câu hay còn gọi là period, các dấu kết thúc này bao gồm các kí hiệu
như “.!?”… Vấn đề khó khăn xuất hiện là trong một số ngôn ngữ (trong đó có tiếng
anh) thì các kí tự kết thúc này cũng tồn tại bên trong một câu. Do đó nhiều phương
pháp khá hiệu quả khác ra đời đề thực hiện việc này, phương pháp hiệu quả sử
dụng thường bằng phương pháp thống kê dựa trên các nội dung trước đó và toàn
bộ văn phạm, ý nghĩa của chữ viết.
NLTK hầu hư hỗ trợ tất cả các phương pháp tách câu như, tuy nhiên ở đây chúng ta
sẽ nói về phương pháp khá hiệu quả được sử dụng mặc định trong NLTK đó là
phương pháp “Punkt sentence tokenizer”. Phương pháp này sử dụng theo nguyên lý
19
19
“Unsupervised Multilingual Sentence Boundary Detection [1]” được nghiên cứu
bởi các tác giả Kiss, Tibor and Strunk, Jan (2006).
Nguyên lý này thể hiện một cách tiếp cận độc lập ngôn ngữ, không có giám sát để
phát hiện ranh giới câu. Nó dựa trên việc xác định các chữ viết tắt. Thay vì việc
dựa vào toàn bộ văn phạm và ý nghĩa của chữ viết, hệ thống sẽ chỉ cần phát hiện
các chữ viết tắt với độ chính xác cao bằng cách sử dụng 3 tiêu chí mà chỉ cần
những thông tin về những loại ứng viên riêng và độc lập với ngữ cảnh:
• Chữ viết tắt có thể được định nghĩa như là cụm từ rất chặt chẽ bao gồm từ
viết tắt và một dấu chấm cuối cùng (từ viết tắt trước dấu chấm và dấu chấm
của chính nó).
• Chữ viết tắt thường ngắn.
• Từ viết tắt đôi khi có dấu chấm nội bộ.
Chúng ta cũng thấy rằng sự sắp xếp rõ ràng của các cụm từ cho hai lưu ý khác
quan trọng của định hướng ranh giới câu, cụ thể là phát hiện các chữ và số thứ tự.
Các thuật toán cơ bản đã được xác định bằng thực nghiệm trên mười một ngôn
ngữ: tiếng Anh, Bồ Đào Nha, Hà Lan, Estonia, Pháp, Đức, Ý, Na Uy, Tây Ban Nha,
Thụy Điển, và Thổ Nhĩ Kỳ với độ chính xác trung bình là 98,74%.
Trong giai đoạn đầu tiên, một giải pháp được thực hiện trên 8|Cj„ PDv, để phát
hiện loại từ viết tắt và các loại từ bình thường. Sau khi giai đoạn này, văn bản nhận
một chú thích trung gian, nơi mà tất cả các trường hợp của chữ viết tắt được phát
hiện bởi các giai đoạn đầu tiên được đánh dấu như vậy với <A> thẻ và tất cả các
lược từ(phần thiếu của từ) với nhãn <E>. Tất cả dấu chấm theo sau từ không viết tắt
được giả sử là mốc chỉ ranh giới câu và nhận được sự chú thích.
20
20
A3A3$:.CEvJCE,./S8 E)D.VqNV•oqqo;JJ;o+
Rất nhiều ngôn ngữ quan trọng,ví dụ như ngôn ngữ lập trình, không thể được mô tả
bởi hữu hạn automata và các biểu thức chuẩn mực.
Một cách định nghĩa chung nhất về mô hình cụm từ (constituent) gọi là
•}D.VqNVr•oqqo;JJ;o}Eo;=q2VoU8VUoqo;JJ;o
}•};8tU=r;Uo•DoJ3
Ý tưởng cơ bản về văm phạm về cấu trúc cụm từ được nghiên cứu bởi Wilhem
Wundt (1890), nhưng không chính thức cho đến khi Chomsky (1956), và
độc lập bởi Backus (1959).
E,./S8 EPd/{‹
Ta có quy tắc: A B C
Trong quy tắc trên, có thể viết A như BC, mà không phụ thuộc vào ngữ cảnh mà ta
tìm thấy A. Do đó gọi là phi ngữ cảnh. Các quy tắc văn phạm cấu trúc ngữ đoạn bao
gồm: quy tắc viết lại, luân phiên, tùy chọn, bắt buộc, quy hồi, bổ sung, trật tự…
A3A3?3 _.E./E`;
Một văn phạm phi ngữ cảnh (CFG) là một hệ thống gồm bốn thành phần:
}Žsss2• trong dó
• N là một tập hữu hạn các biến hay các kí tự không kết thúc (on-terminal).
• T là một tập hữu hạn các kí tự kết thúc (erminal)
• P là một tập hợp các luật sinh(Croductions), mỗi luật sinh có dạng
o A
Với A là là biến ( N).
∝ là chuỗi các kí hiệu tạo bởi biến và các kí tự kết thúc ( T N)*.
• S là biến đạc biệt ∈ N, gọi là biến khởi đầu văn phạm (=tart).
Ví dụ: câu “the man took the book” chứa các thành phần sau
S = {Sentence}
N = {Sentence,NP,VP,Verb}
T = {the,man,took,book}
P = {
Sentence NP VP
VP Verb NP
Verb took
NP Det N
Det the
N man | book
}
Có thể hình dung dễ dàng được trên cây văn phạm bên cạnh như sau:
là các nút lá
là các nút không phải nút lá
2 là nút gốc
Và cuối cùng là các liên kết từ một nút đến các nút con của nó bằng diễn tả
bằng một luật.
21
21
Các lưu ý:
• Một văn phạm định nghĩa theo CFG có thể phát sinh ra nhiều câu.
• Nếu như S => *w với w chỉ gồm các kí hiệu kết thúc, ta nói w là một từ của
văn phạm G.
• Tập hợp tât cả các từ như vậy tạo thành một ngôn ngữ tương ứng với CFG
G, kí hiệu là L(G).
• Ngôn ngữ này thuộc loại văn phạm phi ngữ cảnh context-free grammar.
o L(G) = {w | w chỉ gồm các chốt | S=>*w}
• Chuỗi phù hợp với LG được gọi là hợp văn phạm (GRAMMARTICAL).
ví dụ các từ vựng ví dụ về văn phạm
22
22
A3A3K3 TCEI,=,.E)Rqo,0;V,D.+
Phương pháp top-down
Phương pháp bottom-up
23
23
H3 •‘’2i6'(
H3?3I8E8YU)=q.Vq.8q=VDtq.,p;V,D.+
Cấu trúc thô của dữ liệu văn bản là một chuỗi dài các kí tự dữ liệu. Chúng được
phân chia theo ngữ nghĩa bởi người viết (nói) bằng các cấp độ như: bài văn, đoạn
văn, câu văn, từ và cuối cùng là kí tự. Như vậy bước đầu tiên của chúng ta là làm
cách nào để chia các đoạn văn, bài văn thành các câu văn (sentences), đó chính là
bước đầu tiên và cần thiết nhất trong quá trình xử lý dữ liệu văn bản.
Bắt đầu với một ví dụ đơn giản như sau, lưu ý chúng ta phải import thư viện nltk
trước khi sử dụng và gọi hàm sent_tokenize của thư viện con tokenize. Trong đó
đầu vào là một chuỗi gồm 3 câu tiếng anh phân biệt bởi dấu chấm câu. Kết quả cho
ra danh sách 3 chuỗi là 3 câu đã được tách.
>>> import nltk
>>> para = "Hello Teacher. It's good to see you. Thanks for reading
this essay."
>>> nltk.tokenize.sent_tokenize(para)
['Hello Teacher.', "It's good to see you.", 'Thanks for reading this
essay.']
Phương thức sent_tokenize sử dụng một thể hiện của lớp
U.tV2q.Vq.8qDtq.,pqo trong module nltk.tokenize.punkt. Thể hiện này đã tạo ra
dựa vào tập dữ liệu đã được huấn luyện và lưu trong file sử dụng để tách các câu
tiếng anh.
>>> import nltk.data
>>> tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
>>> tokenizer.tokenize(para)
PunktSentenceTokenizer là một lớp sử dụng theo thuật giải không giám sát
“Unsupervised Multilingual Sentence Boundary Detection” xây dựng mô hình cho
các từ viết tắt (abbreviation), các cụm từ (collocations) và các từ bắt đầu câu. Sau
đó nó sử dụng mô hình này để tìm ranh giới của câu.Cách tiếp cận này được đánh
giá làm việc khá hiệu quả cho các ngôn ngữ châu âu.
Ngoài ra bạn có thể sử dụng RegexpTokenizer để tách 1 chuỗi thành các chuỗi con
sử dụng regular expression.
H3K3I8EVX)zDoRVDtq.,p;V,D.+
Sau khi có được các câu, bước kế tiếp cần làm là tách từ (tokenization) bởi vì từ là
đơn vị nhỏ nhất trong xử lý ngôn ngữ tự nhiên. Tất cả các công đoạn xử lý khác luôn
luôn phải bắt đầu với một danh sách các từ trong một câu.
Tương tự như tách câu, sử dụng tách từ rất đơn giản
>>> from nltk.tokenize import word_tokenize
>>> word_tokenize('Hello Tearcher.')
['Hello', ' Tearcher ', '.']
word_tokenize() là hàm ngắn gọn sử dụng thể hiện của lớp
oqqa;.t“DoRDtq.,pqo để gọi thực hiện tách từ
24
24
>>> from nltk.tokenize import TreebankWordTokenizer
>>> tokenizer = TreebankWordTokenizer()
>>> tokenizer.tokenize('Hello Tearcher.')
TreebankWordTokenizer sử dụng quy tắc Penn Treebank để tách từ. Một trong
những quy tắc là tách từ nối với dấu ‘
>>> nltk.word_tokenize("I can't stop")
['I', 'ca', "n't", 'stop']
Các lớp phân tích từ khác kế thừa từ giao diện
Dtq.,pqo ( chứa các phương thức cần hiện
thực tokenize(),batch_tokenize()
- RegexpTokenizer:sử dụng regular
expressions(RE) để thực hiện tách từ,
tham số đầu tiên là pattern sử dụng để
tách, các tham số sau là các tùy chọn mềm
dẽo khác.
Có 2 cách sử dụng pattern: khớp theo từ
và khớp theo phân cách từ.
- WordPunctTokenizer: là lớp con của RegexTokenizer, bằng cách phân biệt các kí
tự chữ cái và không phải chữ cái với pattern như sau: r'”z•–—˜”z”=™•’
>>> from nltk.tokenize import PunktWordTokenizer
>>> tokenizer = PunktWordTokenizer()
>>> tokenizer.tokenize("Can't is a contraction.")
['Can', "'t", 'is', 'a', 'contraction.']
- PunktWordTokenizer(PunktLanguageVars)
Chứa các biến và các RE thường xuyên nhất. Phụ thuộc vào từng ngôn ngữ cho
ứng dụng. Lớp này có thể mở rộng bằng cách thay đổi các thuộc tính thích hợp sử
dụng cho các ngôn ngữ khác.
>>> from nltk.tokenize import WordPunctTokenizer
>>> tokenizer = WordPunctTokenizer()
>>> tokenizer.tokenize("Can't is a contraction.")
['Can', "'", 't', 'is', 'a', 'contraction', '.']
H3c3I..E<.)V;//,./+
H3c3?3 Eqmqu;UPV;//qo
Default tagging đơn giản gán nhãn mặc định cho tất cả các từ trong câu
>>> from nltk.tag import DefaultTagger
>>> tagger = DefaultTagger('NN')
>>> tagger.tag(['Hello', 'World'])
[('Hello', 'NN'), ('World', 'NN')]
DefaultTagger là một lớp con của SequentialBackoffTagger. Tất cả các lớp con của
SequentialBackoffTagger phải cài đặt phương thức choose_tag() gồm 3 tham số:
1. Danh sách tokens.
25
25