Gi i thi u v Apache Mahout Page 1 of 13
Gi i thi u v Apache Mahout
! " #
M c : Trung bình
Grant Ingersoll, K s ph n m m cao c p, Center for Natural Language Processing at Syracuse University
18 12 2009
M t khi l nh v c c quy n c a các vi n nghiên c u và các t ng công ty có ngân sách nghiên c u l n là
các ng d ng thông minh h c c t các d li u và u vào c a ng i dùng ang tr nên ph bi n h n.
Nhu c u v các k thu t h c máy nh phân c m, l c c ng tác và phân lo i ch a bao gi l n h n bây gi ,
do nó cho phép th y c s t ng ng gi a các nhóm ông ng i ho c t ng thêm vào kh i l ng
l n n i dung Web. D án Apache Mahout làm cho vi c xây d ng các ng d ng thông minh d dàng h n
và nhanh h n. Ng i ng sáng l p Mahout Grant Ingersoll gi i thi u các khái ni m c b n v h c máy
r i trình di n cách s d ng Mahout phân c m các tài li u, bình lu n và t ch c n i dung.
D n d n s thành công c a các công ty và nh ng cá nhân trong th i i thông tin ph thu c vào cách h chuy n s
l ng l n d li u sang thông tin hành ng m t cách nhanh và hi u qu nh th nào. Cho dù ó là x lý hàng tr!m
ho c hàng ngàn th i n t (e-mail) cá nhân m t ngày ho c oán bi t ý "nh c a ng i dùng t hàng tri u t# byte
(petabyte) c a các weblog, s c n thi t có các công c có th t ch c và t!ng c ng d li u ch a bao gi l i l n n
nh v y. $i m then ch t c a gi thuy t và tri n v ng c a l nh v c h c máy và d án mà bài vi t này gi i thi u là:
Apache Mahout (xem Tài nguyên).
H c máy là m t l nh v c c a trí tu nhân t o, c p các k thu t cho phép các máy tính c i thi n k t qu u ra c a
chúng d a trên kinh nghi m có tr c. L nh v c này liên quan ch t ch% n vi c khai thác d li u và th ng s d ng
các k thu t t th ng kê, lý thuy t xác su t, nh n d ng và m t lo t các l nh v c khác. M c dù h c máy không ph i là
m t l nh v c m i, nó phát tri n ch&c ch&n. Nhi u công ty l n, g m c IBM®, Google, Amazon, Yahoo! và Facebook,
ã tri n khai th c hi n các thu t toán h c máy trong các ng d ng c a h . Càng ngày càng có nhi u công ty s% c
h ng l i t vi c s d ng h c máy trong các ng d ng c a mình tìm hi u v ng i dùng và nh ng tình hu ng quá
kh .
Sau khi a ra m t t ng quan ng&n v khái ni m h c máy, tôi s% gi i thi u cho b n v các c tính, l"ch s và các m c
tiêu c a d án Apache Mahout. Sau ó, tôi s% cho b n th y cách s d ng Mahout th c hi n m t s nhi m v h c
máy thú v" b'ng cách s d ng t p d li u Wikipedia có s(n sàng mi n phí.
101 cách h c máy
H c máy s d ng m t lo t y t vi c ch i trò ch i phát hi n gian l n n phân tích th" tr ng ch ng khoán. Nó
c s d ng xây d ng các h th ng nh các h th ng Netflix và Amazon xu t các s n ph)m cho ng i
dùng d a trên các vi c mua hàng tr c ây ho c các h th ng tìm t t c các bài vi t th i s t ng t trong m t
ngày c th . Nó c*ng có th c dùng phân lo i t ng các trang Web theo th lo i (th d c th thao, kinh t ,
chi n tranh và v.v) ho c ánh d u e-mail là th rác. Vi c s d ng h c máy có nhi u th h n là tôi có th trình bày
trong bài vi t này. N u b n quan tâm n vi c khám phá l nh v c này sâu h n, tôi khuyên b n nên tham kh o ph n Tài
nguyên.
M t s cách ti p c n n h c máy th ng s d ng gi i quy t các v n . Tôi s% t p trung vào hai v n cs
d ng chung nh t — h c có giám sát và h c không giám sát — vì chúng là nh ng v n chính c Mahout h+ tr .
H c có giám sát c giao nhi m v h c m t ch c n!ng t d li u hu n luy n c ghi nhãn d oán giá tr" c a
b t k, u vào h p l nào. Các ví d th ng g p c a h c có giám sát g m vi c phân lo i các e-mail là th rác, ghi
nhãn các trang Web theo th lo i c a chúng và nh n d ng ch vi t tay. Nhi u thu t toán c s d ng t o nh ng
trình h c (learner) có giám sát, ph bi n nh t là các m ng th n kinh, Support Vector Machines (SVMs-Các máy Vect
h+ tr ) và các trình phân lo i (classifier) Naive Bayes.
H c không giám sát, nh b n có th oán, c giao nhi m v có ý ngh a v d li u mà không có các ví d b t k, v
cái gì là úng hay sai. Nó h u nh th ng c s d ng phân c m u vào t ng t thành các nhóm h p lý. Nó
Gi i thi u v Apache Mahout Page 2 of 13
c*ng có th dùng gi m s l ng chi u trong m t t p d li u ch- t p trung vào các thu c tính có ích nh t ho c
phát hi n các xu h ng. Các cách ti p c n ph bi n h c không giám sát g m k-Means, phân c m theo phân c p và
b n t t ch c.
$ i v i bài này, tôi s% t p trung vào ba nhi m v h c máy c th mà Mahout hi n nay tri n khai th c hi n. Chúng
ng.u nhiên là ba l nh v c th ng c s d ng trong các ng d ng th c t :
L c c ng tác
Phân c m
Phân lo i
Tôi s% xem xét sâu h n m+i m t nhi m v này m c khái ni m tr c khi kh o sát vi c th c hi n c a chúng trong
Mahout.
L c c ng tác
L c c ng tác (Collaborative filtering-CF) là m t k thu t, c Amazon và nh ng hãng khác ph bi n, s d ng thông
tin c a ng i dùng nh s x p lo i, s nh n chu t và s mua hàng a ra nh ng bình lu n cho ng i dùng c a
trang Web khác. CF th ng c s d ng bình lu n các m c cho ng i dùng nh là sách, âm nh c và phim nh,
nh ng nó c*ng c s d ng trong các ng d ng khác, n i nhi u di n viên c n ph i c ng tác thu h/p b t d li u.
Có th b n ã nhìn th y CF ang ho t ng trên Amazon, nh trong Hình 1:
Hình 1. Ví d v l c c ng tác trên Amazon
D a vào m t t p nh ng ng i dùng và các m c, các ng d ng CF cung c p các bình lu n cho ng i dùng hi n t i c a
h th ng. B n cách t o các bình lu n i n hình:
D a vào-ng i dùng: Bình lu n các m c b'ng cách tìm nh ng ng i dùng t ng t . $i u này th ng khó m
r ng do c tính ng c a ng i dùng.
D a vào-m c: Tính toán s gi ng nhau gi a các m c và a ra các bình lu n. Các m c th ng không thay i
nhi u, do ó, i u này th ng có th c c tính ngo i tuy n (offline).
Nghiêng v m t phía: M t cách ti p c n bình lu n d a vào m c r t nhanh chóng và n gi n có th áp d ng
khi ng i dùng ã a ra s x p lo i (và không ch- theo logic úng/sai).
D a vào-mô hình: $ a ra các bình lu n d a vào phát tri n mô hình c a nh ng ng i dùng và s x p lo i c a
chúng.
T t c các cách ti p c n c a CF k t thúc vi c tính toán m t khái ni m t ng ng gi a ng i dùng và các m c ã
ánh giá c a h . Có nhi u cách tính toán s t ng ng và h u h t các h th ng CF cho phép b n g&n vào các
phép o khác nhau b n có th xác "nh phép o nào ho t ng t t nh t i v i d li u c a b n.
Phân c m
Gi i thi u v Apache Mahout Page 3 of 13
D a vào các t p d li u l n, cho dù chúng là v!n b n ho c s , t ng nhóm v i nhau, ho c phân c m, các m c
t ng t th ng r t có ích. Ví d , c!n c vào t t c các tin t c trong ngày t t t c các t báo Hoa K,, b n có th
mu n t ng nhóm t t c các bài vi t v câu chuy n gi ng nhau cùng v i nhau, sau ó b n có th ch n t p trung vào
các nhóm và các câu chuy n c th mà không c n ph i v t v l t qua nhi u vi c không liên quan. M t ví d khác:
c!n c vào u ra t b c m bi n trên máy trên toàn b th i gian, b n có th nhóm các k t qu u ra xác "nh ho t
ng bình th ng so v i ho t ng có v n , vì các ho t ng bình th ng s% nhóm t t c l i v i nhau và các ho t
ng b t th ng s% trong các nhóm khác.
Có nhi u cách ti p c n tính toán các c m, m+i c m có s th0a hi p riêng c a mình. M t s cách ti p c n th c hi n
t d i lên, xây d ng các c m l n h n t cái nh0 h n, trong khi nh ng cách khác l i chia m t c m l n thành nhi u
c m càng nh0 h n càng t t. C hai u có tiêu chu)n thoát ra kh0i quá trình này t i m t s i m tr c khi chúng
phân ra thành m t s bi u di n c m t m th ng (t t c các m c trong m t c m ho c t t c các m c trong c m riêng
c a chúng). Các cách ti p c n ph bi n g m phân c m k-Means và phân c m theo h th ng phân c p. Nh tôi s% trình
bày sau, Mahout i kèm v i m t s cách ti p c n phân c m khác nhau.
Phân lo i
M c tiêu c a s phân lo i (th ng c g i là phân l p-classification) là ghi nhãn các tài li u vô hình, theo ó
nhóm chúng l i v i nhau. Nhi u cách ti p c n phân lo i theo cách h c máy tính toán m t lo t các s li u th ng kê
k t h p các c tính c a m t tài li u v i nhãn c th , vì th t o m t mô hình có th c s d ng sau này phân lo i
các tài li u vô hình. Ví d , m t cách ti p c n n gi n cho vi c phân lo i có th theo dõi các t có liên k t v i m t
nhãn, c*ng nh s l n nh ng t c nhìn th y v i m t nhãn nh t "nh. Sau ó, khi m t tài li u m i c phân lo i,
các t trong tài li u này c tìm ki m trong mô hình này, các kh n!ng x y ra c tính toán và k t qu t t nh t c
a ra, th ng là cùng v i m t i m s cho th y s tin t ng là k t qu chính xác.
Các c tính phân lo i có th g m các t , các tr ng s i v i nh ng t ó (ví d , d a trên t n su t), các ph n c a bài
phát bi u, v.v. T t nhiên, các c tính th c s có th là b t c i u gì ó tr giúp liên k t m t tài li u v i m t nhãn và
có th c tích h p vào thu t toán.
L nh v c h c máy l n và m nh m%. Thay vì t p trung nhi u h n vào lý thuy t, mà nó không th th c hi n hoàn toàn
thích h p ây, tôi s% ti n lên và i sâu nghiên c u Mahout và cách s d ng c a nó.
Gi i thi u v Mahout
Apache Mahout là m t d án mã ngu n m m i c a Apache Software Foundation (ASF-Qu ph n m m Apache) v i
m c tiêu chính là t o các thu t toán h c máy có kh n!ng m r ng, các thu t toán này là mi n phí s d ng theo gi y
phép Apache. D án này ang b c vào n!m th hai c a mình, v i b n phát hành công khai trong ph m vi c a nó.
Mahout bao g m các vi c th c hi n phân c m, phân lo i, CF và l p trình ti n hóa. H n n a, nó khôn khéo s d ng
th vi n Apache Hadoop cho phép Mahout m r ng hi u qu trong ám mây này (xem Tài nguyên).
L ch s Mahout
D án Mahout c b&t u b i m t s ng i tham gia vào c ng ng Tên có ngh a gì?
Lucene Apache (tìm ki m mã ngu n m ) v i m t s quan tâm tích c c Mahout (ng i qu n t ng) là m t ng i
trong vi c h c máy và mong mu n v th c hi n m nh m%, có y nuôi và i u khi n m t con voi. Tên
các tài li u c n thi t, có kh n!ng m r ng c a các thu t toán h c máy Mahout xu t phát t vi c s d ng (tr c
ph bi n cho vi c phân c m và phân lo i. C ng ng này ban u ây) d án c a Apache Hadoop — trong
c báo "Map-Reduce for Machine Learning on Multicore" (Map- ó con voi màu vàng là bi u t ng c a nó
Reduce cho h c máy theo a lõi) c a Ng và c ng s (xem Tài nguyên) — v i kh n!ng m r ng và có kh n!ng
nh ng ã phát tri n trình bày các cách ti p c n h c máy r ng h n. ch"u l+i.
Mahout c*ng nh'm m c ích:
Xây d ng và h+ tr m t c ng ng nh ng ng i dùng và nh ng ng i óng góp sao cho mã này v t trên b t
k, tác ng nào c a ng i óng góp c th , b t k, công ty, ho c qu tài tr i h c.
T p trung vào tr ng h p s d ng th c t , th gi i th c, i l p v i nghiên c u hay các k thu t m i.
Gi i thi u v Apache Mahout Page 4 of 13
Cung c p các tài li u và ví d có ch t l ng.
Các c tính
M c dù t ng i m i trong thu t ng mã ngu n m , Mahout ã có m t s l ng l n các ch c n!ng, c bi t liên
quan n vi c phân c m và CF. Các c tính chính c a Mahout là:
Taste CF. Taste là m t d án mã ngu n m cho CF c kh i M t vài l i v Map-Reduce
u b i Sean Owen trên SourceForge và c t ng cho Mahout
Map-Reduce là m t API l p trình phân tán
vào n!m 2008.
c Google phát minh ra và c th c
hi n trong d án Apache Hadoop. $ c
M t s vi c th c hi n phân c m c a Map-Reduce có s(n, g m
k t h p v i m t h th ng t p phân tán,
k-Means, fuzzy k-Means, Canopy, Dirichlet và Mean-Shift.
th ng nó làm cho các v n song song
hóa tr nên d dàng h n b'ng cách cung
Các vi c th c hi n phân lo i Naive Bayes phân tán và Naive
c p cho các l p trình viên m t API rõ ràng
Bayes ph .
mô t công vi c tính toán song song.
(Xem ph n Tài nguyên bi t thêm thông
Các kh n!ng c a hàm phù h p phân tán i v i l p trình ti n
tin.)
hóa.
Các th vi n ma tr n và vect .
Các ví d v t t c các thu t toán trên.
B t u v i Mahout
B&t u và th c hi n v i Mahout là t ng i n gi n. $ kh i ng, b n c n ph i cài t các i u ki n c n tr c sau
ây:
JDK 1.6 ho c cao h n
Ant 1.7 ho c cao h n
Maven 2.0.9 ho c 2.0.10, n u b n mu n xây d ng mã ngu n Mahout
B n c*ng c n mã m.u c a bài vi t này (xem ph n T i v ), trong ó có m t b n sao c a Mahout và các ph thu c c a
nó. Hãy th c hi n theo các b c sau cài t mã m.u:
1. unzip sample.zip
2. cd apache-mahout-examples
3. ant install
B c 3 t i v các t p Wikipedia c n thi t và biên d"ch mã. Các t p Wikipedia th ng dùng x p x- 2,5GB, vì th th i
gian t i v s% ph thu c vào b!ng thông c a b n.
Xây d ng m t máy bình lu n
Mahout thi n ang cung c p các công c xây d ng m t máy bình lu n thông qua các th vi n Taste — m t máy
nhanh và linh ho t cho CF. Taste h+ tr bình lu n d a vào ng i dùng và d a vào m c và i kèm v i nhi u s l a
ch n xây d ng các bình lu n, c*ng nh các giao di n cho b n "nh ngh a riêng c a b n. Taste g m n!m thành ph n
chính làm vi c v i User (nh ng ng i dùng), Item (các m c) và Preference (các s thích):
DataModel: L u tr cho các User, các Item, và các Preference.
UserSimilarity: Giao di n "nh ngh a s t ng ng gi a hai ng i dùng.
ItemSimilarity: Giao di n "nh ngh a s t ng ng gi a hai m c.
Recommender: Giao di n cung c p các bình lu n.
UserNeighborhood: Giao di n tính toán m t vùng lân c n c a nh ng ng i dùng t ng t có th c
Recommender (Nh ng ng i bình lu n) s d ng.
Các thành ph n này và các vi c th c hi n c a chúng giúp cho nó có th xây d ng các h th ng bình lu n ph c t p cho
Gi i thi u v Apache Mahout Page 5 of 13
ho c các bình lu n d a trên th i gian th c ho c các bình lu n ngo i tuy n (offline). Các bình lu n d a trên th i gian
th c th ng có th làm vi c v i vài nghìn ng i dùng, trong khi các bình lu n ngo i tuy n có th m r ng l n h n
nhi u. Taste th m chí i kèm v i các công c có s d ng Hadoop tính toán các bình lu n ngo i tuy n. Trong nhi u
tr ng h p, ây là m t ti p c n h p lý cho phép b n áp ng các yêu c u c a m t h th ng l n có r t nhi u ng i
dùng, các m c và các s thích.
$ gi i thích vi c xây d ng m t h th ng n gi n, tôi c n m t s ng i dùng, các m c, và các s x p lo i. V i m c
ích này, tôi ng.u nhiên ã t o m t t p l n các User và các Preference cho các tài li u Wikipedia (các Item theo
cách nói Taste) khi s d ng mã trong cf.wikipedia.GenerateRatings (có trong mã ngu n v i mã m.u) r i b
sung i u này b'ng m t t p các s x p lo i th công xung quanh m t ch c th (Abraham Lincoln) t o t p
recommendations.txt cu i cùng có trong ví d này. Ý t ng 'ng sau cách ti p c n này là ch- ra cách CF có th h ng
d.n nh ng ng i hâm m m t ch c th t i các tài li u quan tâm khác trong ch ó. Trong ví d , d li u là 990
(có nhãn 0-989) ng i dùng ng.u nhiên, nh ng ng i ã ch- "nh các s x p lo i ng.u nhiên cho t t c các bài vi t
trong b s u t p và 10 ng i dùng ( c ghi nhãn 990-999), nh ng ng i ã ánh giá m t ho c nhi u bài trong s 17
bài vi t trong b s u t p có ch a c m t Abraham Lincoln.
$ b&t u, tôi s% gi i thích cách t o các bình lu n cho m t ng i dùng Hãy coi ch ng d li u có s n!
d a vào t p x p lo i trong t p recommendations.txt. Nh là tr ng Ví d c trình bày ây có ch a d li u
h p v i h u h t các l n s d ng Taste, b c u tiên là n p d li u có có s(n hoàn toàn. Tôi ã t th c hi n t t c
ch a các bình lu n và l u tr nó trong m t DataModel. Taste i kèm x p lo i, mô ph0ng 10 ng i dùng th c t ,
v i m t s vi c th c hi n khác nhau c a DataModel làm vi c v i nh ng ng i mu n có thông tin v
các t p và các c s d li u. V i ví d này, tôi s% gi cho tình hình Abraham Lincoln. Trong khi tôi tin r'ng
n gi n và s d ng l p FileDataModel, nó d ki n m+i dòng ph i khái ni m 'ng sau d li u này là áng
có d ng: mã nh n d ng (ID) c a ng i dùng, ID c a m c, s thích — quan tâm, thì chính d li u và các giá tr"
ây c ID ng i dùng l.n ID m c là các chu+i, trong khi s thích có c s d ng l i không áng tin. N u b n
th là m t chu+i kép. C!n c vào m t mô hình, tôi c n ph i cho Taste mu n d li u th c, tôi khuyên b n nên
bi t cách nó nên so sánh nh ng ng i dùng b'ng cách khai báo m t ki m tra d án GroupLens t i $ i h c
vi c th c hi n UserSimilarity. Tùy thu c vào vi c th c hi n Minnesota và tài li u h ng d.n Taste
UserSimilarity c s d ng, b n c*ng có th ph i nói cho cho (xem Tài nguyên). Tôi ã ch n ch-nh s a
Taste cách suy ra các s thích n u thi u m t giá tr" cài t rõ ràng cho d li u vì mu n s d ng ch- m t t p d
ng i dùng. Li t kê 1 t t t c nh ng t này vào trong mã li u xuyên su t t t c các ví d .
(cf.wikipedia.WikipediaTasteUserDemo trong mã m.u có ch a
li t kê y .)
Li t kê 1. T o mô hình và nh ngh a s t ng ng c a ng i dùng
! " # " $% & & " # "
Trong Li t kê 1, tôi s d ng PearsonCorrelationSimilarity, ánh giá s t ng quan gi a hai bi n, nh ng c*ng
có các phép o UserSimilarity khác. S l a ch n c a m t phép o s t ng ng ph thu c vào ki u d li u hi n
t i và vi c th nghi m c a b n. $ i v i d li u này, tôi ã tìm th y s k t h p này làm vi c t t nh t trong khi v.n
gi i thích các v n . B n s% tìm th y nhi u thông tin h n v vi c ch n m t phép o s t ng ng t i trang Web
Mahout (xem Tài nguyên).
$ hoàn thành ví d này, tôi xây d ng m t UserNeighborhood và m t Recommender. UserNeighborhood nh n
bi t nh ng ng i dùng t ng t nh ng i dùng c a tôi và c giao quy n cho Recommender, nó sau ó th c hi n
vi c t o m t danh sách x p lo i các m c c bình lu n. Li t kê 2 thu hút c nh ng ý t ng trong mã:
Li t kê 2. T o các bình lu n
' & ( "
) & ( & (
) ) ) & ( & ( * + +
,
' - , + & ( +
!& #
! ! ./////.
Gi i thi u v Apache Mahout Page 6 of 13
! ! . . 0
" "
1 ! " + !
' 2
3 4, # 5
! # + 2
1 ! , + !
B n có th ch y ví d y trên dòng l nh b'ng cách th c hi n l nh ant user-demo trong th m c ch a m.u.
Ch y l nh này in các s thích và các bình lu n cho ng i dùng t ng t ng 995, ng i ng.u nhiên là m t ng i hâm
m c a Lincoln. Li t kê 3 cho th y k t qu t vi c ch y l nh ant user-demo:
Li t kê 3. K t qu t bình lu n c a ng i dùng
6 7 ' & " 882 & ( " 2
69 % 7 :8 :; <: :; => 2= #) " ! &
" " ! ?
69 % 7 :8 :; <: :; => 2= #) " ! , & " " !!!
69 % 7 :8 :; <: :; => 2= #) " ! =:::::
69 % 7 :8 :; <: :; => 2= #) " ! , ===8:=
69 % 7 =::: # <<;@
69 % 7 /////
69 % 7 882
69 % 7 1 $ & <= , & >!8>:::::AAB2B<:<
69 % 7 1 $ , & ::::A;AA@22=
69 % 7 1 $ == , & @!<>:::::=8:B>@;A
69 % 7 1 - " ' ( & , & 2!:
69 % 7 1 $( 3 , & @!B>8888BB===;=A@
69 % 7 1 C " 1 " D " 3 /
, & >!@>:::::AAB2B<:<
69 % 7 1 - ( , & <2B
69 % 7 1 $ + ' & , & @!@<8888;<;>>;A<>
69 % 7 ,
69 % 7 # 2:2B2 1 $ =: @!8;
69 % 7 # =>@=:=>@; 1 $
69 % 7 # =>>@@2B@; 1 E " @!@>:;AA<
69 % 7 # ==8>BA@ 1 - & F & @!@:@:AA
69 % 7 # <@=B8>B 1 $ D @!<@=B;
T các k t qu trong Li t kê 3, b n có th th y r'ng h th ng ã bình lu n m t s bài vi t v i các m c tin t ng khác
nhau. Trong th c t , m+i m t m c này ã c nh ng ng i hâm m Lincoln ánh giá, nh ng không ph i do ng i
dùng 995. N u b n mu n xem k t qu c a nh ng ng i dùng khác, ch- c n dùng tham s -Duser.id=USER-ID trên
dòng l nh, ây USER-ID (mã nh n d ng ng i dùng) là m t s n'm gi a 0 và 999. B n c*ng có th thay i quy mô
c a vùng lân c n b'ng cách dùng tham s -Dneighbor.size=X, ây X là s nguyên l n h n 0. Trong th c t , vi c
thay i quy mô vùng lân c n t i 10 a ra k t qu r t khác nhau, k t qu này ch"u nh h ng b i th c t là m t trong
nh ng ng i dùng ng.u nhiên trong vùng lân c n. $ xem các vùng lân c n c a ng i dùng và các m c nói chung,
hãy thêm -Dcommon=true vào dòng l nh.
Bây gi , n u b n ã tình c nh p m t s không n'm trong ph m vi c a ng i dùng, b n có th th y r'ng ví d này
l ra m t NoSuchUserException. Th t v y, ng d ng c a b n s% c n bi t làm gì khi m t ng i dùng m i nh p vào
h th ng. Ví d , b n ch- có th hi n th" 10 bài vi t ph bi n nh t, m t s l a ch n ng.u nhiên các bài báo, ho c m t s
l a ch n m t c a các bài vi t "khác nhau" — ho c v i v n ó, ch1ng có gì c .
Nh tôi ã c p tr c ó, cách ti p c n d a trên ng i dùng th ng không m r ng c. Trong tr ng h p này, t t
h n là s d ng m t cách ti p c n d a trên m c-m c. R t may, Taste giúp cho vi c s d ng ti p c n d a trên m c-m c
c*ng d dàng. Mã c b n t o và ch y v i s t ng ng c a m c-m c không khác nhau nhi u, nh b n có th
th y trong Li t kê 4:
Li t kê 4. Ví d v s t ng ng m c-m c (t cf.wikipedia.WikipediaTasteItemItemDemo)
#
# 3 &3 E
# - ,
# - ,
' # - , +
'
3 4, # 5
! # + 2
Gi i thi u v Apache Mahout Page 7 of 13
1 ! , + !
C*ng nh trong Li t kê 1, tôi t o m t DataModel t t p các bình lu n, nh ng cùng lúc này, thay cho vi c t o phiên
b n m t cá th UserSimilarity, tôi t o m t ItemSimilarity khi s d ng LogLikelihoodSimilarity, giúp
x lý các s ki n hi m th y. Sau ó, tôi a ItemSimilarity t i m t ItemBasedRecommender và yêu c u bình
lu n. V y ó! B n có th ch y cái này trong mã m.u thông qua l nh ant item-demo. T ây, t t nhiên, b n mu n
thi t l p h th ng c a b n th c hi n các tính toán này ngo i tuy n và b n c*ng có th nghiên c u các phép o
ItemSimilarity khác. L u ý r'ng, do tính ng.u nhiên c a các d li u trong ví d này, các bình lu n có th không
c nh mong i. Trong th c t , i u quan tr ng là ch&c ch&n r'ng b n ánh giá k t qu c a mình trong th i gian
th nghi m và th nghi m các s li u thông kê c a s t ng ng khác n a, do nhi u s li u th ng kê chung có
tr ng h p c nh ngoài nào ó, nên tr ng h p này ng ng ho t ng khi d li u có s(n không a ra các bình
lu n phù h p.
Quay l i ví d ng i dùng m i, v n ph i làm gì n u thi u các s thích ng i dùng ã tr nên d dàng ti p c n h n
r t nhi u m t khi ng i dùng chuy n h ng n m t m c. Trong tr ng h p ó, b n có th t n d ng l i th c a các
tính toán m c-m c và yêu c u các ItemBasedRecommender cho các m c h u gi ng v i m c hi n hành. Li t kê 5
ch ng t0 i u này trong mã:
Li t kê 5.Ch ng trình trình di n các m c t ng ng (t cf.wikipedia.WikipediaTasteItemRecDemo)
#
# 3 &3 E
# - ,
# - ,
' # - , +
' " #
3 4, # 5 #
! # # + ,
1 ! , # + !
B n có th ch y Li t kê 5 t dòng l nh b'ng cách th c hi n l nh ant sim-item-demo. S khác bi t th c s duy nh t
v i Li t kê 4 là Li t kê 5, thay vì yêu c u các bình lu n, l i yêu c u các m c hoàn toàn gi ng v i m c u vào.
T ây, b n c n ph i có các th b&t u v i Taste. $ tìm hi u thêm, hãy tham kh o tài li u h ng d.n Taste và
danh sách g i th [email protected] (xem Tài nguyên). Ti p theo, tôi s% xem xét cách tìm các bài vi t
t ng t b'ng cách s d ng m t s kh n!ng c a phân c m Mahout.
Phân c m v i Mahout
Mahout h+ tr m t s vi c th c hi n thu t toán phân c m, t t c u c vi t b'ng Map-Reduce, m+i l n th c hi n có
t p riêng c a nó v các m c tiêu và tiêu chu)n:
Canopy: M t thu t toán phân c m nhanh th ng c s d ng t o ra các phôi ban u cho các thu t toán
phân c m khác.
k-Means (và fuzzy k-Means): Phân c m các m c thành k nhóm d a trên kho ng cách các m c t tr ng tâm
ho c trung tâm c a l n l p l i tr c.
Mean-Shift: Thu t toán không yêu c u b t k, ki n th c c n có tr cv s l ng các nhóm và có th t o ra các
nhóm có d ng tùy ý.
Dirichlet: Phân c m d a trên s pha tr n c a nhi u mô hình xác su t cung c p cho nó l i th là không c n ph i
ghi nh tr c m t khung nhìn c th c a các nhóm.
Theo quan i m th c t , các tên và các l n th c hi n không quan tr ng nh các k t qu mà chúng t o nên. V i ý ngh
ó, tôi s% hi n th" cách k-Means làm vi c và l i nh ng cái khác cho b n khám phá. Hãy ghi nh r'ng m+i thu t toán
Gi i thi u v Apache Mahout Page 8 of 13
có các yêu c u riêng c a mình làm cho nó ho t ng hi u qu .
Theo phác th o (có nhi u chi ti t h n ti p t c), các b c có liên quan trong vi c phân c m d li u khi s d ng
Mahout là:
1. Chu)n b" u vào. N u phân c m v!n b n, b n c n chuy n i bi u di n v!n b n thành bi u di n s .
2. Ch y thu t toán l a ch n phân c m nh s d ng m t trong nhi u trình i u khi n Hadoop ã có s(n trong
Mahout.
3. $ánh giá các k t qu .
4. L p l i n u c n thi t.
$ u tiên và tr c h t, các thu t toán phân c m yêu c u d li u theo m t "nh d ng phù h p x lý. Trong vi c h c
máy, d li u th ng c bi u di n nh là véc t , ôi khi c g i là m t vect c tính. Trong vi c phân c m, m t
vect là m t m ng c a các tr ng s bi u di n d li u. Tôi s% gi i thích vi c phân c m b'ng cách s d ng các vect
c t o t các tài li u Wikipedia, nh ng các vect có th n t các l nh v c khác, ch1ng h n nh d li u c m bi n
ho c h s ng i dùng. Mahout i kèm v i hai bi u di n Vector: DenseVector và SparseVector. Tùy thu c vào
d li u c a b n, b n s% c n ph i ch n vi c th c hi n phù h p t c hi u n!ng t t. Nói chung, các v n d a
trên v!n b n th a th t, làm cho SparseVector là s l a ch n úng i v i chúng. M t khác, n u h u h t các giá tr"
cho h u h t các vect là khác không, thì m t DenseVector là thích h p h n. N u b n không ch&c ch&n, hãy th c
hai và nh n th y cái nào ho t ng nhanh h n trên m t t p con c a d li u c a b n.
$ t o ra các vect t n i dung Wikipedia (mà tôi ã làm cho b n):
1. L p ch- m c n i dung trong Lucene, ch&c ch&n l u tr các vect k, h n cho l nh v c mà b n mu n t o các
vect t ó. Tôi s% không trình bày các chi ti t v vi c này — nó n'm ngoài ph m vi c a bài vi t — nh ng tôi
s% cung c p m t s g i ý ng&n g n cùng v i m t s tài li u tham kh o trên Lucene. Lucene i kèm v i m t l p
g i là EnWikiDocMaker (trong gói contrib/benchmark), có th c trong m t kho ch a t m th i t p
Wikipedia và a ra các tài li u l p ch- m c trong Lucene.
2. T o vect t ch- m c Lucene b'ng cách s d ng l p
org.apache.mahout.utils.vectors.lucene.Driver có trong mô un utils c a Mahout. Ch ng trình
i u khi n này i kèm v i r t nhi u tu, ch n t o các vect . Trang wiki Mahout có tên Creating Vectors (T o
các Vect ) t Text (V!n b n) có nhi u thông tin (xem Tài nguyên).
Các k t qu c a vi c ch y hai b c này là m t t p gi ng nh t p n2.tar.gz mà b n ã t i xu ng trong ph n B&t u v i
Mahout. $ có y , t p n2.tar.gz g m các vect c t o t vi c l p ch- m c c a t t c các tài li u trong t p "các
kh i d li u" c a Wikipedia ã ct ng t i v b'ng cách ph ng th c ant install trên. Các vect ã c
2
chu)n hoá nh s d ng chu)n 2-clit (ho c chu)n L ; xem Tài nguyên). Khi s d ng Mahout, b n có th s% mu n th
t o các vect theo m t s cách xem cách nào mang l i các k t qu t t nh t.
D a vào m t t p các vect , b c ti p theo là ch y thu t toán phân c m ánh giá các k t qu c a b n
k-Means. Mahout cung c p các ch ng trình i u khi n cho t t c các Có nhi u cách ti p c n ánh giá k t qu
thu t toán phân c m, g m c thu t toán k-Means, có tên thích h p là phân c m c a b n. Nhi u ng i b&t u ch-
KMeansDriver. Trình i u khi n d s d ng khi là m t m t ch ng
n gi n b'ng cách s d ng ki m tra th
trình c l p không có Hadoop, nh ã gi i thích b'ng cách ch y ant công và th nghi m c bi t. Tuy nhiên,
k-means. Xin c t nhiên ki m tra ích Ant k-means trong build.xml th c s hài lòng, i u c n thi t là s d ng
có thêm thông tin các i s mà KMeansDriver ch p nh n. Sau các k thu t ánh giá sâu h n nh là vi c
khi quá trình này hoàn t t, b n có th in ra các k t qu b'ng cách dùng phát tri n m t tiêu chu)n vàng khi dùng
l nh ant dump. m t s ng i am hi u k thu t. $ tìm
hi u thêm v vi c ánh giá k t qu c a
Sau khi b n ã ch y thành công trong ch c l p, b n có th ti n b n, xem Tài nguyên. V i các ví d c a
hành ch y ch phân tán trên Hadoop. $ làm nh v y, b n c n có tôi, tôi ã s d ng ki m tra th công
Mahout Job JAR, n'm trong th m c hadoop trong mã m.u. M t Job xem m t s k t qu ã c c m v i nhau
Jar óng gói t t c các mã và các ph thu c vào trong ch- m t t p JAR th c s có ý ngh a không. N u tôi c
d dàng n p vào Hadoop. B n c*ng s% c n ph i t i v Hadoop 0.20 a i u này vào trong s n xu t, tôi s% s
và làm theo các ch- d.n trên h ng d.n Hadoop ch y l n u tiên d ng m t quy trình nghiêm ng t h n nhi u.
trong ch phân tán gi (có ngh a là t ng c m m t) và sau ó là ch
phân tán y . $ bi t thêm thông tin, xem trang Web Hadoop và
Tài nguyên, c*ng nh các tài nguyên i n toán ám mây c a IBM (xem Tài nguyên).
Gi i thi u v Apache Mahout Page 9 of 13
Phân lo i n i dung v i Mahout
Mahout hi n ang h+ tr hai ph ng pháp ti p c n liên quan n vi c phân lo i/s&p x p có h th ng n i dung d a trên
s li u th ng kê Bayesian. Cách ti p c n u tiên là m t trình phân lo i Naive Bayes kích ho t Map-Reduce n gi n.
Các trình phân lo i Naive Bayes c bi t là nhanh và khá chính xác, m c dù các gi "nh r t n gi n (và th ng
không chính xác) c a chúng v các d li u hoàn toàn c l p. Các trình phân lo i Naive Bayes th ng không ho t
ng khi kích th c c a các ví d hu n luy n cho m+i l p không c cân b'ng ho c khi d li u c l p. Ph ng
pháp th hai, c g i là Naive Bayes ph , c g&ng ch-nh s a m t s v n v i cách ti p c n Naive Bayes trong khi
v.n duy trì tính n gi n và t c c a nó. Tuy nhiên, v i bài vi t này, tôi s% ch- hi n th" cách ti p c n Naive Bayes,
b i vì nó gi i thích c v n t ng th và các u vào trong Mahout.
Tóm l i, m t trình phân lo i Naive Bayes là m t quá trình hai ph n g m vi c theo dõi các c tính (các t ) có liên k t
v i m t tài li u và lo i riêng và sau ó s d ng thông tin ó d oán lo i n i dung m i, vô hình. B c u tiên,
c g i là hu n luy n, t o m t mô hình b'ng cách xem các ví d ã c phân lo i v n i dung và sau ó theo dõi
các kh n!ng mà m+i t c k t h p v i m t ph n n i dung c th . B c th hai, c g i là phân lo i, s d ng mô
hình c t o trong hu n luy n và n i dung c a m t tài li u m i, vô hình, cùng v i $"nh lý Bayes, d oán lo i tài
li u c thông qua. Vì v y, ch y trình phân lo i Mahout, u tiên b n c n ph i hu n luy n theo mô hình và sau ó
s d ng mô hình ó phân lo i n i dung m i. Ph n ti p theo s% gi i thích cách th c hi n i u này b'ng cách s d ng
t p d li u Wikipedia.
Ch y trình phân lo i Naive Bayes
Tr c khi b n có th ch y các trình hu n luy n và trình phân lo i, b n c n th c hi n m t công vi c chu)n b" nh0
thi t l p m t b các tài li u v hu n luy n và m t b các tài li u v th nghi m. B n có th chu)n b" các t p Wikipedia
(t nh ng th b n ã t i v thông qua ích install b'ng cách ch y ant prepare-docs. Vi c này chia tách các t p
u vào Wikipedia khi s d ng l p WikipediaDatasetCreatorDriver có trong các ví d Mahout. Các tài li u
c chia tách d a trên tài li u có m t lo i gi ng v i m t trong các lo i quan tâm hay không. Các lo i quan tâm có th
là b t c lo i Wikipedia h p l nào (ho c th m chí là chu+i con b t k, c a m t lo i Wikipedia). Ch1ng h n, trong ví
d này, tôi có hai lo i: Khoa h c và L"ch s . Vì v y, b t k, lo i Wikipedia nào có m t lo i ch a t khoa h c ho c l ch
s ( ó không ph i là m t s t ng ng chính xác) s% c t vào m t thùng có các tài li u khác cho lo i ó. Ngoài
ra, m+i tài li u c g&n th3 (tokenized) và c chu)n hóa lo i b0 d u ch m câu, ánh d u Wikipedia và các c
tính khác mà không c n thi t cho công vi c này. Các k t qu cu i cùng s% c l u trong m t t p có ghi nhãn v i tên
lo i ó, m t tài li u cho m+i dòng, ó là "nh d ng u vào mà Mahout trông i. C*ng v y, vi c ch y ant
prepare-test-docs th c hi n cùng công vi c v i các tài li u th nghi m. $i u quan tr ng là các tài li u th
nghi m và hu n luy n không trùng nhau, có th nghiêng v các k t qu . Theo lý thuy t, vi c s d ng các tài li u hu n
luy n th nghi m k t qu trong các k t qu hoàn h o, nh ng ngay c i u này không có kh n!ng trong th c hành.
Sau khi các b hu n luy n và th nghi m c thi t l p, bây gi là lúc ch y các l p TrainClassifier thông qua
ích ant train. $i u này s% c n m t l ng l n l n !ng nh p t c hai Mahout và Hadoop. Sau khi hoàn thành, ant
test ch n các tài li u th nghi m m.u và c g&ng phân lo i chúng b'ng cách s d ng mô hình ã c xây d ng
trong lúc hu n luy n. K t qu t m t th nghi m nh v y trong Mahout là m t c u trúc d li u g i là m t ma tr n
nh m l.n (confusion matrix). M t ma tr n nh m l.n mô t có bao nhiêu k t qu ã c phân lo i úng và có bao
nhiêu c phân lo i không úng cho m+i lo i.
Tóm l i, b n ch y các b c sau t o ra k t qu phân lo i:
1. ant prepare-docs
2. ant prepare-test-docs
3. ant train
4. ant test
Ch y t t c l nh này (classifier-example c a ích Ant b&t gi t t c chúng trong m t cu c g i), a ra ma tr n
tóm t&t và ma tr n nh m l.n c hi n th" trong Li t kê 6:
Li t kê 6.Các k t qu t vi c ch y trình phân lo i Bayes cho l ch s và khoa h c
69 % 7 :8 :B << =; =: @2 #) ( !1 "
Gi i thi u v Apache Mahout Page 10 of 13
82!@2;8;@>B2 >8=: @:8A!:
69 % 7 :8 :B << =; =: @A #) ( !1 "
=2!22@:B<:8A=<;=B< <>> =@8;!:
69 % 7 :8 :B << =; =: @A #) ( !1 "
69 % 7
69 % 7 ///////////////////////////////////////////////////////
69 % 7 " # @=@>
B@!:A=2G
69 % 7 # " # =@2=
<2!8>;2G
69 % 7 1 " # 228@
69 % 7
69 % 7
69 % 7 " ?
69 % 7 ///////////////////////////////////////////////////////
69 % 7 ( 4// "
69 % 7 >8=: =;A H @:8A
69 % 7 => H =@8; (
69 % 7 " & E <
Các k t qu c a quá trình trung gian c l u tr trong th m c có tên là wikipedia trong th m c c b n.
V i m t t p k t qu trong tay, câu h0i rõ ràng là: "Tôi ã th c hi n nh th nào?" B n tóm t&t nói rõ r'ng i khái tôi
ã nh n c kho ng 75 ph n tr!m úng và 25 ph n tr!m không úng. Tho t nhìn i u này có v3 khá h p lý, c bi t
là b i vì nó có ngh a là tôi ã làm t t h n so v i cách d oán ng.u nhiên. Tuy nhiên, vi c ki m tra g n ây cho th y
r'ng tôi ã th c s làm t t khi d báo v l"ch s (kho ng 95 ph n tr!m úng) và th c s kém lúc d báo v khoa h c
(kho ng 15 ph n tr!m). Trong vi c tìm ki m lý do t i sao l i nh v y, vi c xem xét nhanh các t p u vào cho hu n
luy n cho th y r'ng tôi có nhi u ví d v l"ch s h n so v i khoa h c (kích th c t p là g n g p ôi), ó có l% là m t
v n ti m n!ng.
V i th nghi m này, b n có th thêm tùy ch n -Dverbose=true vào ant test, cho phép a ra thông tin v m+i
u vào th nghi m và nó ã c ghi nhãn úng hay không. Nghiên c u k k t qu này, b n có th tra c u tài li u và
xem xét lý do nó ã c phân lo i không úng. Tôi c*ng có th th các tham s u vào khác nhau và c*ng có nhi u
d li u khoa h c và hu n luy n l i mô hình này xem tôi có th c i thi n k t qu này không.
$i u c*ng quan tr ng là suy ngh v l a ch n c tính hu n luy n mô hình. $ i v i các ví d này, tôi ã s d ng t
WikipediaTokenizer c a Apache Lucene g&n th3 các tài li u ban u, nh ng tôi ã không c g&ng nhi u lo i
b0 các thu t ng ph bi n ho c các thu t ng t p nham mà có th ã b" g&n th3 sai. N u tôi ang xem xét a trình
phân lo i này vào s n xu t, tôi s% ki m tra k h n các u vào và các giá tr" cài t khác, c g&ng t!ng thêm m t chút
v hi u n!ng.
Ch- c n xem các k t qu khoa h c ã có m t s may m&n không, tôi ã th m t t p các lo i khác nhau: $ ng C ng
hòa và $ ng Dân ch . Trong tr ng h p này, tôi mu n d báo có hay không có m t tài li u m i v $ ng C ng hòa
hay Dân ch . $ cho phép b n t mình th nghi m, tôi t o ra repubs-dems.txt in src/test/resources. Sau ó tôi ch y các
b c phân lo i thông qua:
" / ? / & !" ! ( / ! ? / !
Hai giá tr" -D n gi n tr0 t i t p và tên lo i c a th m c t các k t qu trung gian trong th m c wikipedia. Ma
tr n tóm t&t và ma tr n nh m l.n t ho t ng này trông gi ng nh Li t kê 7:
Li t kê 7. Các k t qu t vi c ch y trình phân lo i Bayes cho ng C ng hòa và ng Dân ch
69 % 7 :8 :B <> =B :A >; #) ( !1 " //////////////
69 % 7 :8 :B <> =B :A >; #) ( !1 " 1 &
E / ! ?
69 % 7 :8 :B <> =B :A >; #) ( !1 " B:!:
<= >:!:
69 % 7 :8 :B <> =B :A >; #) ( !1 " //////////////
69 % 7 :8 :B <> =B :A >; #) ( !1 " 1 &
E / ( ! ?
69 % 7 :8 :B <> =B :A >; #) ( !1 " ( ;=!>82>@;;>B<:8>
>2 @>!:
69 % 7 :8 :B <> =B :A >; #) ( !1 "
69 % 7
69 % 7 ///////////////////////////////////////////////////////
69 % 7 " # 2A BA!B=<>G
69 % 7 # " # =B <>!<;BBG
69 % 7 1 " # B>