Tải bản đầy đủ (.docx) (88 trang)

Ứng dụng mô hình học máy naivebayes trong môi trường spark cho bài toán dự báo khả năng hỏng của đĩa cứng máy tính

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.19 MB, 88 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC QUY NHƠN

VÕ CHÍ CƯỜNG

ỨNG DỤNG MƠ HÌNH HỌC MÁY NAIVE BAYES
••
TRÊN MƠI TRƯỜNG SPARK CHO BÀI TOÁN DỰ
BÁO KHẢ NĂNG HỎNG CỦA ĐĨA CỨNG MÁY TÍNH

Chun ngành: Khoa học máy tính
Mã số: 8480101

Người hướng dẫn: TS. Hồ Văn Lâm


LỜI CAM ĐOAN
Tôi xin cam đoan đề tài “Ứng dụng mơ hình học máy Naive Bayes
trên mơi trường Spark cho bài toán dự báo khả năng hỏng của đĩa cứng
máy tính” là kết quả của tự bản thân tơi tìm hiểu, nghiên cứu. Các số liệu, dẫn
chứng và tài liệu tham khảo được trích dẫn và chú thích đầy đủ. Tơi xin chịu
trách nhiệm về luận văn của mình.


LỜI CẢM ƠN
Qua quá trình học tập và thời gian nghiên cứu làm luận văn, trước tiên
tôi xin gửi lời cảm ơn chân thành nhất đến các Thầy Cô giáo đã tham gia tổ
chức, chỉ đạo và trực tiếp giảng dạy trong suốt những khóa học vừa qua. Đặc
biệt, tơi xin gửi lời cảm ơn sâu sắc nhất đến Thầy giáo hướng dẫn TS. Hồ Văn
Lâm, người đã tận tình chỉ bảo, góp ý, giúp đỡ và tạo mọi điều kiện để tơi có
thể hồn thành luận văn.


Cũng qua đây, tôi xin gửi lời cảm ơn đến các anh chị là học viên lớp cao
học Khoa học máy tính khóa trước đã giúp đỡ tơi rất nhiều trong q trình học
tập và nghiên cứu. Cuối cùng, tôi xin gửi lời cảm ơn đến gia đình và bạn bè đã
ln giúp đỡ, ủng hộ tơi trong suốt q trình học tập, nghiên cứu và hồn thành
luận văn.
Trong thời gian qua tơi đã cố gắng tập trung nghiên cứu và tìm hiểu để
hồn thành thật tốt luận văn của mình nhưng chắc chắn cịn nhiều thiếu sót rất
mong được nhận sự chỉ bảo của các Thầy Cô giáo để luận văn được hoàn thiện
hơn.


MỤC LỤC
LỜI CAM ĐOAN
LỜI CẢM ƠN
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
DANH MỤC CÁC BẢNG
DANH MỤC CÁC HÌNH VẼ


DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
••7
r

rri /V•
Thuật ngữ
/V J
Tên
viết Cơ sở dữ liệu
CSDL


Ý nghĩa
Cơ sở dữ liệu

CNTT

Công nghệ thơng tin

Cơng nghệ thơng tin

AI

Artificial Intelligence

Trí tuệ nhân tạo
Tập hợp các item được phân

RDD

Resilient Distributed DataSet

tán trên các node.
Đồ thị khơng chu trình có

DAG

Directed Acyclic Graph

hướng
Hệ thống lưu trữ tập tin của


HDFS

Hadoop Distributed File System

Hadoop


DANH MỤC CÁC BẢNG



DANH MỤC CÁC HÌNH VẼ


8


MỞ ĐẦU
1.1Lý do chọn đề tài
Trong thế giới kỹ thuật số, cơ sở hạ tầng vật lý và thiết bị vẫn là xương
sống của nhiều cơ quan, doanh nghiệp. Dự báo thiết bị hỏng từ lâu đã là mục
tiêu cho những người chịu trách nhiệm quản lý hiệu suất tài sản, những tiến bộ
trong công nghệ cảm biến, công nghệ truyền thơng, quản lý thơng tin và phân
tích hiện đang là một trong những hướng đi tích cực cho việc dự báo độ hư
hỏng của thiết bị.
Không phải tất cả các dữ liệu đều có giá trị như nhau khi nói đến việc dự
đốn thiết bị hỏng, vì vậy điều quan trọng là phải xác định dữ liệu cần thiết để
quản lý thiết bị hỏng. Dữ liệu được sử dụng bởi các cơng cụ phân tích tiên tiến
để dự đốn hư hỏng đó là, dịng thời gian sản xuất, điều kiện thiết bị và dữ liệu
sự kiện được sử dụng để kiểm sốt và theo dõi các quy trình vật lý. Đầu tư vào

khoa học dữ liệu và các kỹ năng phân tích tiên tiến với sự tập trung vào quản
lý thiết bị, dự đoán sẽ giúp hỗ trợ các nỗ lực cải tiến liên tục cho các tổ chức
công nghệ thơng tin, bất kể tình trạng đầu tư hiện tại của doanh nghiệp, sau đó
nó có thể giúp đảm bảo mỗi dự án thành công và quan trọng hơn là xây dựng
khả năng đáp ứng các yêu cầu cần thiết trong cơ quan, doanh nghiệp. Với
những tiến bộ trong các cơng cụ phân tích để dự báo thiết bị hỏng, đó là sự
khơng thể tránh khỏi rằng các tổ chức với thiết bị quan trọng nhiệm vụ sẽ đầu
tư và phân tích nâng cao để giúp đảm bảo hoạt động an tồn và đáng tin cậy.
Một trong những cơng cụ mà luận văn hướng đến nghiên cứu là thuật tốn
Naive Bayes trên mơi trường Spark.
Đề tài nghiên cứu “Ứng dụng mơ hình học máy Naive Bayes trên
mơi trường Spark cho bài toán dự báo khả năng hỏng của đĩa
cứng máy tính” nhằm cài đặt và ứng dụng mơ hình học máy Naive
Bayes để dự báo việc đĩa cứng máy tính sẽ bị hỏng khi nào
nhằm tránh khỏi việc bị động trong


10

việc quản lý đĩa cứng máy tính bị hư hỏng ngồi dự đốn của nhà quản lý. Đó
là mục tiêu then chốt để hướng đến nghiên cứu đề tài.
1.2Tổng quan tình hình nghiên cứu đề tài
Naive Bayes là một thuật toán dựa trên định luật Bayes về lý thuyết xác
suất để đưa ra các phán đoán cũng như phân loại dữ liệu dựa trên các dữ liệu
được quan sát và thống kê. Thuật toán Naive Bayes được ứng dụng rất nhiều
trong lĩnh vực học máy dùng để đưa các dự đốn chính xác nhất dựa trên một
tập dữ liệu đã được thu thập, vì nó dễ hiểu và có độ chính xác cao [8].
Định luật Bayes được phát biểu như sau:
_______ P(B|A) X P (A)
P(A|B)


= ( P(BP (

Trong đó:
- P(A|B) là xác suất xảy ra của một sự kiện ngẫu nhiên A khi biết sự kiện
liên quan B đã xảy ra.
- P(B|A) là xác suất xảy ra B khi biết A xảy ra
- P(A) là xác suất xảy ra của riêng A mà không quan tâm đến B.
- P(B) là xác suất xảy ra của riêng B mà không quan tâm đến A.
Một số mơ hình áp dụng thuật tốn Naive Bayes [5]
- Multinomial model (Mơ hình đa thức).
- Binary independence model (Mơ hình độc lập nhị phân).
- Poisson Naive Bayes Model
- Connection between Poisson and Multinomial Model
- Multinomial word model
- Negative binomial Naive Bayes Model
Để xây dựng các mô hình này cho bài tốn dự báo việc hư hỏng của đĩa
cứng máy tính thì Spark là một dự án phần mềm mã nguồn mở được phát triển
bởi Apache, nhằm thu các giá trị có ích từ khối lượng, tốc độ và tính đa dạng


11

của dữ liệu (cấu trúc/phi cấu trúc). Ban đầu Spark được phát triển bởi phịng
thí nghiệm AMP Lab thuộc trường Đại học California, Berkeley từ năm 2009
với mục đích nhằm nâng cao tốc độ xử lý của các hệ thống Hadoop. Sau đó nó
trở thành một cơng cụ mã nguồn mở miễn phí từ năm 2010 và được chuyển
giao cho Apache Software Foundation vào năm 2013. Spark dần trở thành một
trong những dự án trọng tâm của Apache Software Foundation. Phiên bản đầu
tiên được công bố vào tháng 5/2014 và phiên bản 2.0 được công bố tháng

7/2016. Phiên bản mới nhất hiện giờ (tính đến tháng 09/2020) là phiên bản
3.0.1.
Tốc độ xử lý của Spark có được do việc tính toán được thực hiện cùng
lúc trên nhiều máy khác nhau. Đồng thời việc tính tốn được thực hiện ở bộ
nhớ trong (in-memories) hay thực hiện hoàn toàn trên RAM. Spark cho phép
xử lý dữ liệu theo thời gian thực, vừa nhận dữ liệu từ các nguồn khác nhau
đồng thời thực hiện ngay việc xử lý trên dữ liệu vừa nhận được (Spark
Streaming). Ứng dụng thuật toán Naive Bayes cho bài tốn dự báo đĩa cứng
hỏng trên mơi trường Spark để có thể tăng tốc độ xử lý và cho ra kết quả có độ
chính xác cao từ lượng lớn dữ liệu được thu thập của các ổ đĩa máy tính và đưa
ra dự báo khi nào thì ổ đĩa hỏng. Đó là hướng nghiên cứu cũng như mục tiêu
mà đề tài muốn hướng đến.
1.3Mục tiêu và nhiệm vụ nghiên cứu
Tìm hiểu và ứng dụng thuật toán Naive Bayes trong việc dự báo khả
nẳng hỏng của đĩa cứng máy tính, triển khai trên nền tảng Spark. Thực nghiệm
và so sánh về tốc độ so với thuật tốn khi khơng chạy trên nền tảng Spark.
1.4Nhiệm vụ nghiên cứu
- Tìm hiểu thuật tốn Naive Bayes
- Tìm hiểu về bài tốn dự báo đĩa cứng hỏng


12

- Tìm hiểu về lập trình trên mơi trường Spark.
- Cài đặt thuật tốn Naive Bayes trên mơi trường Spark cho bài toán dự
báo đĩa cứng hỏng.
- Thực nghiệm và đánh giá
1.5Đối tượng và phạm vi nghiên cứu
Đối tượng nghiên cứu:
- Thuật toán Naive Bayes.

- Bài toán dự báo đĩa cứng hỏng
- Mơi trường Spark.
- Phương pháp lập trình thuật tốn Naive Bayes trên mơi trường Spark.
Phạm vi nghiên cứu:

Thuật
cài
đặt
tốn
thuật
Naive
tốn
Bayes
trêntheo
mơi trường
mơ hìnhSpark
lập trình
cho bài
MapReduce
tốn dựvà
báo
đĩa
cứng
hỏng.


CHƯƠNG 1: KIẾN THỨC TỔNG QUAN
1.1Giới thiệu về học máy
1.1.1.


Học máy là gì?

Học máy (Machine Learning) là một lĩnh vực của trí tuệ nhân tạo liên
quan đến việc nghiên cứu và xây dựng các kĩ thuật cho phép các hệ thống
"học" tự động từ dữ liệu để giải quyết những vấn đề cụ thể. Ví dụ như các máy
có thể "học" cách phân loại thư điện tử xem có phải thư rác (spam) hay không
và tự động sắp xếp thư vào thư mục tương ứng. Học máy rất gần với suy luận
thống kê (statistical inference) tuy có khác nhau về thuật ngữ.[8]
Học máy có mối liên hệ rất mật thiết với thống kê. Học máy sử dụng các
mơ hình thống kê để "ghi nhớ" lại sự phân bố của dữ liệu. Tuy nhiên, không
đơn thuần là ghi nhớ, học máy phải có khả năng tổng qt hóa những gì đã
được nhìn thấy và đưa ra dự đốn cho những trường hợp chưa được nhìn thấy.
Lấy ví dụ về xếp thư điện tử tự động như trên, một hệ thống tự động sau
khi trải qua quá trình học từ dữ liệu ("training") có thể suy diễn một số nguyên
tắc riêng (chẳng hạn như xem xét nội dung: nếu thư được viết bằng tiếng Anh
mà chứa một số từ như "porn", "sell", "good product" hoặc người gửi đến từ
Somalia trong khi người nhận ở Hà Nội không thân quen nhau) để quyết định
xem có phải là thư rác hay khơng. Tuy nhiên, nếu như trong dữ liệu huấn luyện
(training data) có ngơn ngữ khác trong thực tế (tiếng Việt thay vì tiếng Anh)
hoặc thậm chí khơng phải dạng thuần văn bản (dạng ảnh khiến cho việc bóc
tách nội dung khó hơn hoặc khơng thể) thì rất có thể máy sẽ dự báo khơng
chính xác nữa.
Một số hệ thống học máy nỗ lực loại bỏ nhu cầu trực giác của con người
trong việc phân tích dữ liệu, trong khi các hệ thống khác hướng đến việc tăng
sự cộng tác giữa người và máy. Khơng thể loại bỏ hồn tồn tác động của con
người vì các nhà thiết kế hệ thống phải chỉ định cách biểu diễn của dữ liệu và


những cơ chế nào sẽ được dùng để tìm kiếm các đặc tính của dữ liệu. Học máy
có thể được xem là một nỗ lực để tự động hóa một số hoạt động trong phương

pháp khoa học.
Một số chương trình có thể tự động cập nhật trong thời gian thực (ví dụ
như người sử dụng có chỉ ra rằng thư bị sắp xếp sai danh mục).
Dưới góc nhìn của trí tuệ nhân tạo, động lực chính của học máy là nhu
cầu thu thập tri thức (knowledge acquisition). Trong nhiều trường hợp ta cần
kiến thức chuyên gia, nhưng kiến thức chuyên gia trong từng lĩnh vực cịn ít
(theo dõi từng trạng thái đèn tín hiệu trên thiết bị điện, phân tích sự biến động
của thị trường chứng khoán, dự báo khả năng hỏng của đĩa cứng máy tính trong
một trung tâm DC, ...) hoặc tìm được kiến thức chuyên gia bị chậm trong một
số nhiệm vụ cần đưa ra quyết định nhanh chóng dựa trên xử lý dữ liệu khổng lồ
(trong mua bán chứng khoán phải quyết định trong khoảnh khắc vài giây chẳng
hạn) và thiếu ổn định thì buộc phải cần đến máy tính. Ngồi ra, đại đa số dữ
liệu được sinh ra ngày nay chỉ phù hợp cho máy đọc (computer readable) tiềm
tàng nguồn kiến thức quan trọng. Học máy nghiên cứu cách thức để mơ hình
hóa bài tốn cho phép máy tính tự động hiểu, xử lý và học từ dữ liệu để thực
thi nhiệm vụ được giao cũng như cách đánh giá giúp tăng tính hiệu quả.
Hiện nay, học máy đang là lĩnh vực cho thấy sự tiến bộ trong tiến trình
của trí tuệ nhân tạo (AI) và có khả năng làm cho máy móc trở nên thơng minh
hơn. Học máy cịn được áp dụng rộng rãi bao gồm máy truy tìm dữ liệu, chuẩn
đốn y khoa, phát hiện thẻ tín dụng giả, phân tích thị trường chứng khốn, phân
loại các chuỗi ADN, nhận dạng tiếng nói và chữ viết, dịch tự động, chơi trò
chơi và cử động rô-bốt (robot locomotion).
Những năm gần đây, khi mà khả năng tính tốn của các máy tính được
nâng lên một tầm cao mới và lượng dữ liệu khổng lồ được thu thập bởi các
hãng công nghệ lớn, học máy đã tiến thêm một bước dài và một lĩnh vực mới


được ra đời gọi là học sâu (Deep Learning). Nó đã giúp máy tính thực thi
những việc tưởng chừng như không thể vào 10 năm trước: phân loại cả ngàn
vật thể khác nhau trong các bức ảnh, tự tạo chú thích cho ảnh, bắt chước giọng

nói và chữ viết của con người, giao tiếp với con người, hay thậm chí cả sáng
tác văn hay âm nhạc.[8]
1.1.2.

Các thành phần của học máy

Học có giám sát (Supervised learning)
Q trình học có giám sát thực tế là chuyển dữ liệu đầu vào thành đầu ra
theo mong muốn. Trong các thuật toán học máy đầu vào được gọi là Input và
đầu ra là một kết quả tương ứng được gán “nhãn” trước trong tập dữ liệu huấn
luyện. Điểm cần quan tâm ở đây chính là mọi mẫu dữ liệu trong tập dữ liệu
huấn luyện cần phải biết trước “nhãn” của nó.
Học có giám sát là một kĩ thuật của ngành học máy để xây dựng một
hàm (function) từ dữ liệu huấn luyện. Dữ liệu huấn luyện bao gồm các cặp gồm
đối tượng đầu vào (thường dạng vec-tơ), và đầu ra mong muốn. Đầu ra của một
hàm có thể là một giá trị liên tục (gọi là hồi qui), hay có thể là dự đốn một
nhãn phân loại cho một đối tượng đầu vào (gọi là phân loại). Nhiệm vụ của học
có giám sát là dự đoán giá trị của hàm cho một đối tượng bất kì là đầu vào hợp
lệ, sau khi đã xem xét một số ví dụ huấn luyện (nghĩa là, các cặp đầu vào và
đầu ra tương ứng). Để đạt được điều này, chương trình học phải tổng qt hóa
từ các dữ liệu sẵn có để dự đốn được những tình huống chưa gặp phải theo
một cách "hợp lý"
Học có giám sát có thể tạo ra hai loại mơ hình. Phổ biến nhất, học có
giám sát tạo ra một mơ hình toàn cục (global model) để ánh xạ đối tượng đầu
vào đến đầu ra mong muốn. Tuy nhiên, trong một số trường hợp, việc ánh xạ
được thực hiện dưới dạng một tập các mơ hình cục bộ (như trong phương pháp
lập luận theo tình huống (case-based reasoning) hay giải thuật láng giềng gần


nhất).

Học khơng giám sát (Unsupervised Learning)
Trong thuật tốn này, chúng ta không biết trước kết quả hay được gắn
nhãn trước mà chỉ có dữ liệu đầu vào. Nó được sử dụng nhiều trong việc khám
phá cấu trúc và mối quan hệ của dữ liệu. Thuật tốn học máy khơng giám sát sẽ
dựa vào cấu trúc của dữ liệu để thực hiện một cơng việc nào đó, ví dụ như phân
nhóm (clustering) hoặc giảm số chiều của dữ liệu (dimension reduction) để
thuận tiện trong việc lưu trữ và tính tốn.
Một cách tốn học, học máy khơng giám sát là khi chúng ta chỉ có dữ
liệu vào X mà khơng biết nhãn Y tương ứng.
Những thuật toán loại này được gọi là học máy khơng giám sát vì khơng
giống như học máy có giám sát, chúng ta khơng biết câu trả lời chính xác cho
mỗi dữ liệu đầu vào. Giống như khi ta học, khơng có thầy cơ giáo nào chỉ cho
ta biết đó là chữ A hay chữ B. Cụm khơng giám sát được đặt tên theo nghĩa
này.
Các bài toán học máy không giám sát được tiếp tục chia nhỏ thành hai
loại:
Bài tốn phân cụm (Clustering)
Một bài tốn phân cụm tồn bộ dữ liệu X thành các nhóm nhỏ dựa trên
sự liên quan giữa các dữ liệu trong mỗi nhóm. Ví dụ: phân nhóm khách hàng
dựa trên hành vi mua hàng. Điều này cũng giống như việc ta đưa cho một đứa
trẻ rất nhiều mảnh ghép với các hình thù và màu sắc khác nhau, ví dụ hình tam
giác, hình vng, hình trịn với màu xanh và đỏ, sau đó u cầu trẻ phân chúng
thành từng nhóm. Mặc dù khơng cho trẻ biết mảnh nào tương ứng với hình nào
hoặc màu nào, nhiều khả năng chúng vẫn có thể phân loại các mảnh ghép theo
màu hoặc hình dạng.
Bài tốn ràng buộc (Association)


Là bài toán khi chúng ta muốn khám phá ra một quy luật dựa trên nhiều
dữ liệu cho trước. Ví dụ: những khách hàng nam mua quần áo thường có xu

hướng mua thêm đồng hồ hoặc thắt lưng; những khán giả xem phim Spider
Man thường có xu hướng xem thêm phim Bat Man, dựa vào đó tạo ra một hệ
thống gợi ý khách hàng (Recommendation System), thúc đẩy nhu cầu mua
sắm.
Học bán giám sát (Semi - Supervised learning)
Các bài toán khi chúng ta có một lượng lớn dữ liệu X nhưng chỉ một
phần trong chúng được gán nhãn được gọi là học bán giám sát (SemiSupervised Learning). Những bài toán thuộc nhóm này nằm giữa hai nhóm học
có giám sát (Supervised learning) và học khơng có giám sát (Unsupervised
Learning).
Một ví dụ điển hình của nhóm này là chỉ có một phần ảnh hoặc văn bản
được gán nhãn (ví dụ bức ảnh về người, động vật hoặc các văn bản khoa học,
chính trị) và phần lớn các bức ảnh/văn bản khác chưa được gán nhãn được thu
thập từ Internet. Thực tế cho thấy rất nhiều các bài toán Học máy thuộc vào
nhóm này vì việc thu thập dữ liệu có nhãn tốn rất nhiều thời gian và có chi phí
cao. Rất nhiều loại dữ liệu thậm chí cần phải có chun gia mới gán nhãn được
(ảnh y học chẳng hạn). Ngược lại, dữ liệu chưa có nhãn có thể được thu thập
với chi phí thấp từ Internet.
Học củng cố (Reinforcement Learning)
Học củng cố (Reinforcement learning) là các bài toán giúp cho một hệ
thống tự động xác định hành vi dựa trên hồn cảnh để đạt được lợi ích cao nhất
(maximizing the performance). Hiện tại, học củng cố (Reinforcement learning)
chủ yếu được áp dụng vào Lý Thuyết Trò Chơi (Game Theory), các thuật toán
cần xác định nước đi tiếp theo để đạt được điểm số cao nhất.


1.1.3.

Phương thức hoạt động của học máy

Từ một thuật toán để có thể cho ra kết quả như mong muốn từ một tập

dữ liệu ban đầu ta cần một quá trình huấn luyện sử dụng các dữ liệu huấn
luyện. Nó chính là kinh nghiệm mà ta dạy cho máy.
Một tập dữ liệu huấn luyện bao gồm nhiều mẫu huấn luyện. Mỗi mẫu
huấn luyện sẽ là một thể hiện của bài tốn (có đầu vào và lời giải). Học máy sẽ
học từ các thể hiện đó để tìm ra lời giải phù hợp với từng đầu vào mới. Nó
giống như là bạn dạy 1 đứa trẻ cách ném 1 quả bóng; bạn sẽ ném quả bóng vài
lần cho đứa trẻ quan sát; Sau đó đứa trẻ sẽ bắt đầu học để tự ném quả bóng
[12].
Các ví dụ trong tập huấn luyện thường có một tập thuộc tính/đặc trưng
cố định. Đó là những thể hiện để mơ tả về đối tượng đó.
1.1.4.

Ứng dụng của học máy

Hiện nay học máy đã được ứng dụng mạnh mẽ trong hầu hết các lĩnh
vực như: Nghiên cứu, y tế, xã hội, dự đoán ...v.v. Một số những ứng dụng thành
công và được nhiều người biết đến như:
Khai phá dữ liệu thông qua các ứng dụng trong các mạng xã hội
Học máy đang được sử dụng trong một loạt các ứng dụng ngày nay. Một
trong những ví dụ nổi tiếng nhất là Facebook News Feed. Nguồn cấp tin tức sử
dụng học máy để cá nhân hóa từng nguồn cấp dữ liệu thành viên.
Nếu một thành viên thường xuyên dừng lại để đọc hoặc thích một bài
đăng của một người bạn cụ thể, Facebook News Feed sẽ bắt đầu hiển thị nhiều
hơn về hoạt động của người bạn đó trước đó trong nguồn cấp dữ liệu.
Đằng sau hệ thống ấy, phần mềm sử dụng phân tích thống kê và phân
tích dự đốn để xác định các mẫu trong dữ liệu người dùng và sử dụng các mẫu
đó để điền vào Facebook News Feed. Nếu thành viên khơng cịn dừng lại để
đọc, thích hoặc bình luận trên các bài đăng của bạn bè, dữ liệu mới đó sẽ được



bao gồm trong tập dữ liệu và Facebook News Feed sẽ điều chỉnh tương ứng.
Không chỉ riêng Facebook News Feed, ta có thể bắt gặp những tính năng
tương tự đó qua các mạng xã hội khác như Google, Instagram, ...[12].
Xử lý hình ảnh
Nhận dạng hình ảnh là một trong những ví dụ về học máy và trí tuệ nhân
tạo phổ biến nhất. Về cơ bản, nó là một cách tiếp cận để xác định và phát hiện
các đặc trưng của một đối tượng trong hình ảnh kỹ thuật số. Hơn nữa, kỹ thuật
này có thể được sử dụng để phân tích sâu hơn, chẳng hạn như nhận dạng mẫu,
nhận diện hình khn, nhận dạng khn mặt, nhận dạng ký tự quang học và
nhiều hơn nữa, ...
Trò chơi điện tử và robot
Trò chơi điện tử (Video games) và robot (Robotics) là lĩnh vực lớn có sự
góp mặt của học máy. Nếu ta có một nhân vật cần di chuyển và tránh các
chướng ngại vật trong game. Học máy có thể học và giải quyết công việc này
thay bạn. Một kỹ thuật phổ biến được áp dụng trong trường hợp này là Học
tăng cường (Reinforcement learning). Ở đó, máy sẽ học tăng cường với mục
tiêu là giải quyết nhiệm vụ trên. Học tăng cường là tiêu cực nếu nó va phải
chướng ngại vật, là tích cực nếu nó chạm tới đích.
Một thành tựu gần đây nhất là cỗ máy Alpha Go của Google DeepMind
đã đánh bại kỳ thủ cờ vậy số 1 thế giới. Trong khi cờ vây là một trò chơi có
khơng gian trạng thái cực kỳ lớn.
Phân tích văn bản
Phân tích văn bản (Text analysis) là cơng việc trích xuất hoặc phân loại
thông tin từ văn bản. Các văn bản ở đây có thể là các facebook posts, emails,
các đoạn chat, tài liệu, ... Một số ví dụ phổ biến là:
Lọc spam (Spam filtering), là một trong những ứng dụng phân loại văn
bản được biết đến và sử dụng nhiều nhất. Ở đây, phân loại văn bản là xác định


chủ đề cho một văn bản. Bộ lọc spam sẽ học cách phân loại một email có phải

thư rác (spam) không dựa trên nội dung và tiêu đề của email.
Phân tích ngữ nghĩa (Sentiment Analysis), học cách phân loại một ý kiến
là tích cực, trung tính hay tiêu cực dựa trên nội dung văn bản của người viết.
Khai thác thông tin (Information Extraction), từ một văn bản, học cách
để trích xuất các thơng tin hữu ích. Chẳng hạn như trích xuất địa chỉ, tên người,
từ khóa, .
1.2Mơ hình lập trình MapReduce
1.2.1

Tổng quan về mơ hình MapReduce

MapReduce là một mơ hình lập trình (programming model), lần đầu
được giới thiệu trong bài báo của Jefferey Dean và Sanjay Ghemawat ở hội
nghị OSDI, năm 2004 ([6]). MapReduce chỉ là một mơ hình hay là một
framework để người lập trình xây dựng chương trình. Để thực hiện chương
trình theo mơ hình MapReduce thì cần có một nền tảng hay một cách triển khai
(implementation) cụ thể. Google có một nền tảng của MapReduce bằng C++.
Apache có Hadoop, một hiện thực mã nguồn mở khác trên Java (người dùng
dùng Hadoop qua một Java interface).
MapReduce là quy trình giúp xử lý tập hợp dữ liệu lớn đặt tại các máy
tính phân tán, có thể xử lý được dữ liệu khơng cấu trúc và dữ liệu có cấu trúc.
Trong MapReduce, các máy tính chứa dữ liệu đơn lẻ được gọi là các nút
(node).
Đơn giản thì MapReduce là một cách tiếp cận chia để trị, tức là chia vấn
đề lớn thành các vấn đề nhỏ, xử lý song song từng vấn đề nhỏ và tổng hợp kết
quả lại. Để thực hiện được cơng việc, mơ hình MapReduce chia cơng việc
thành hai phần chính là map và reduce. Trong đó, hàm map thường rút trích
thơng tin cần thiết các từng phần tử, qua một bước trung gian để trộn và sắp
xếp lại kết quả, sau đó tại hàm reduce thì tổng hợp kết quả trung gian và tính ra



kết quả cuối cùng.
Ví dụ, trong bài tốn đếm số lần xuất hiện của từng từ trong văn bản
(wordCount), công việc chủ yếu là đếm số lần xuất hiện của từng từ trong văn
bản. Cơng việc như vậy thì có thể phân chia thành hai phần như sau:
Mapper


Đầu vào: Một dịng của văn bản



Đầu ra: key: từ, value: 1
Reducer



Đầu vào: key: từ, values: tập hợp các giá trị đếm được của mỗi từ



Đầu ra: key: từ, value: tổng
Dữ liệu là văn bản, được chia thành nhiều dòng khác nhau, lưu trữ ở

nhiều nơi khác nhau. Hàm map chạy song song tạo ra các giá trị trung gian
khác nhau từ tập dữ liệu khác nhau. Hàm reduce cũng chạy song song, mỗi
hàm reducer xử lý một tập khóa khác nhau. Tất cả các giá trị được xử lý một
cách độc lập. Và giai đoạn reduce chỉ bắt đầu khi giai đoạn map kết thúc.



Phân
vùng 1

Phân
vùng 1

Phân
vùng 2
_______ A

Reduce 2

->
Phân
vùng 3

Phân
vùng 3

Dừ liệu
đầu vào

Giai đoạn Map

Sắp
xếp và
xáo
trộn

Giai đoạn Reduce


DÌT liệu
đầu ra

Hình 1.1 Mơ hình làm việc của một công việc MapReduce

MapRedue định nghĩa dữ liệu (cấu trúc và khơng cấu trúc) dưới dạng cặp
khóa/giá trị (key/value). Ví dụ, key có thể là tên của tập tin (file) và value nội
dung của tập tin, hoặc key là địa chỉ URL và value là nội dung của URL, ...
Việc định nghĩa dữ liệu thành cặp key/value này linh hoạt hơn các bảng dữ liệu
quan hệ 2 chiều truyền thống (quan hệ cha - con hay còn gọi là khóa chính khóa phụ).
Để xử lý khối dữ liệu này, lập trình viên viết hai hàm map và reduce.
Hàm map có input là một cặp (k1, v1) và output là một danh sách các cặp (k2,
v2). Chú ý rằng các input và output, keys và values có thể thuộc về các kiểu dữ
liệu khác nhau.
Như vập hàm map có thể được viết một cách hình thức như sau:
map (k1, v1) -> list (k2, v2)
MapReduce sẽ áp dụng hàm map (mà người dùng viết) vào từng cặp (key,
value) trong khối dữ liệu đầu vào, chạy cùng lúc nhiều cặp của hàm map song


song với nhau trên các máy tính của cụm (cluster). Sau giai đoạn này thì chúng
ta có một tập hợp rất nhiều cặp (key, value) thuộc kiểu (k2, v2) gọi là các cặp
(key, value) trung gian. MapReduce cũng sẽ nhóm các cặp này theo từng key,
như vậy các cặp (key, value) trung gian có cùng k2 sẽ nằm cùng một nhóm
trung gian.
Giai đoạn hai MapReduce sẽ áp dụng hàm reduce (mà người dùng viết)
vào từng nhóm trung gian. Một cách hình thức, hàm này có thể mơ tả như sau:
reduce (k2, list (v2)) -> list (v3)
Trong đó k2 là key chung của nhóm trung gian, list(v2) là tập các values

trong nhóm, và list(v3) là một danh sách các giá trị trả về của reduce thuộc
kiểu dữ liệu v3.
Do reduce được áp dụng vào nhiều nhóm trung gian độc lập với nhau,
nên chúng lại một lần nữa có thể được chạy song song với nhau nêm rút ngắn
được thời gian về mặt tính tốn.
1.2.2

Ngun tắc hoạt động của mơ hình MapReduce


MapReduce được xây dựng từ mơ hình lập trình hàm và lập trình song
song. Tăng tốc độ thực thi xử lý dữ liệu là mục đích quan trọng nhất của
MapReduce. Quy trình này gồm 2 phần:
- Map: Bắt đầu từ nút chủ (master node), công việc được chia nhỏ ra
thành các công việc với phạm vi nhỏ hơn, gọi là các split 0, split 1, split
2 ...
- Reduce: Từ các đầu ra trung gian sẽ tổng hợp lại để đưa ra các kết quả
cuối cùng.
(1) : Thư viện MapReduce mà chương trình người dùng (User Program) sử
dụng chia các tập tin đầu vào (dữ liệu cần xử lý) thành các phần nhỏ.
Dung lượng mỗi phần từ 16 MB đến 64 MB. Sau đó sao chép chương
trình thành các tiến trình song song chạy trên các máy tính phân tán chứa
dữ liệu.
(2) : Chương trình điều khiển Master sẽ gán mỗi phần dữ liệu cho một hàm


Map và một hàm Reduce.
(3) - (4): worker là phần được gán một hàm Map và Reduce để xử lý, nó sẽ
đọc dữ liệu, phân tích cặp key/value ở đầu vào và phân tích thành các
cặp trung gian khác được lưu tại vùng nhớ đệm.

(5) : Định kỳ, các cặp dữ liệu trung gian sẽ được đẩy đến các worker tương
ứng (do master điều khiển) để hàm reduce xử lý. Các thuật toán sắp xếp,
so sánh, phân vùng dữ liệu sẽ được sử dụng tại giai đoạn này. Các tập dữ
liệu trung gian có cùng key sẽ được sắp xếp cùng một nhóm.
(6) : Khi tất cả các tác vụ Map và Reduce đã hồn tất thì sẽ cho ra kết quả
cuối cùng của quy trình MapReduce.
Ví dụ minh họa cho bài đếm từ, đầu vào và đầu ra, tương tự như phần
trên nhưng mô tả cụ thể nội dung của từng hàm:
Hàm Map:
void map (String name, String document):
// name: document name
// document: document contents
for each word w in document:
EmitIntermediate (w, "1");
Hàm Reduce:
void reduces (String word, Iterator partialCounts):
// word: a word
// partialCounts: a list of aggregated partial counts
int result = 0;
for each pc in partialCounts:
result += ParseInt (pc);
Emit (AsString (result));


×