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

Báo cáo cuối kì môn học hệ phân bố (1)

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.75 MB, 21 trang )

KHOA CÔNG NGHỆ THÔNG TIN
MÔN: HỆ PHÂN BỐ
ĐỀ TÀI: RECOMMEND SYSTEM
GVHD: TS. Nguyễn Thiên
Bảo
SVTH:
1913310
19133022
19133023
19133025

Trần

nguyên

Thái

Bảo

Hồng Tiến Hào
Lê Tuấn Hiệp
Đinh Quốc Hùng

TP. Hồ Chí Minh, ngày 05 tháng 05 năm 2022

1


MỤC LỤC
PHẦN 1: CƠ SỞ LÝ THUYẾT APACHE SPARK


5

1.

Apache Spark Là Gì?

5

2.

Sự phát triển của Apache Spark

5

3.

Các tính năng của Apache Spark

5

4.

Spark được xây dựng trên hadoop

6

5.

Thành phần của Spark


7

6.

RDD

9

7.

6.1.

Resilient Distributed Datasets

6.2.

Chia Sẻ Dữ Liệu Chậm Trong Mapreduce

10

6.3.

Các Hoạt Động Lặp Lại Trên Mapreduce

10

6.4.

Hoạt Động Tương Tác Trên Mapreduce


10

6.5.

Chia sẻ dữ liệu bằng Spak RDD

11

6.6.

Hoạt Động Lặp Lại Trên Spark RDD

11

6.7.

Hoạt Động Tương Tác Trên Spark RDD

12

Kiến Trúc Apache Spark

9

13

7.1.

Kiến trúc Apache Spark


13

7.2.

Quy Trình Làm Việc Của Spark

14

PHẦN 2: XÂY DỰNG MỘT HỆ THỐNG ĐỀ XUẤT

16

1.

Mục Đích Ứng Dụng

16

2.

Ý Tưởng

16

3.

Thuật Tốn

17


3.1.

Collaborative Filtering

17

3.2.

Cosine Similarity

19

3.3.

Elasticsearch

20

4.

Tập Dữ Liệu

20

5.

Quy Trình

21


PHẦN 3: THỰC NGHIỆM

22

2


3


PHẦN 1: CƠ SỞ LÝ THUYẾT APACHE SPARK
1. Apache Spark Là Gì?
Apache Spark là một framework xử lý dữ liệu có thể thực hiện các tác vụ xử
lý trên các tập dữ liệu rất lớn, được thiết kế để tính tốn nhanh chóng. Nó dựa
trên Hadoop MapReduce và nó mở rộng mơ hình MapReduce để sử dụng hiệu
quả nó cho nhiều loại tính tốn hơn, bao gồm các truy vấn tương tác và xử lý
luồng. Tính năng chính của Spark là tính tốn cụm trong bộ nhớ giúp tăng tốc
độ xử lý của ứng dụng.
Spark được thiết kế để bao gồm một loạt các khối lượng công việc như ứng
dụng hàng loạt, thuật toán lặp lại, truy vấn tương tác và phát trực tuyến. Ngoài
việc hỗ trợ tất cả khối lượng công việc này trong một hệ thống tương ứng, nó
làm giảm gánh nặng quản lý trong việc duy trì các công cụ riêng biệt.

2. Sự phát triển của Apache Spark
Spark là một trong những dự án con của Hadoop được phát triển vào năm
2009 trong AMPLab của UC Berkeley bởi Matei Zaharia. Nó được Open
Sourced vào năm 2010 theo giấy phép BSD. Nó đã được quyên góp cho nền
tảng phần mềm Apache vào năm 2013 và bây giờ Apache Spark đã trở thành
một dự án Apache cấp cao nhất từ tháng 2 năm 2014.


3. Các tính năng của Apache Spark
Tốc độ: Spark giúp chạy ứng dụng trong cụm Hadoop, nhanh hơn tới 100
lần trong bộ nhớ và nhanh hơn 10 lần khi chạy trên đĩa. Điều này có thể thực
hiện được bằng cách giảm số lượng các thao tác đọc / ghi vào đĩa. Nó lưu trữ dữ
4


liệu xử lý trung gian trong bộ nhớ.
In-memory Computing: Dữ liệu trong bộ nhớ sẽ cải thiện hiệu suất theo thứ
tự cường độ. Phần trừu tượng chính của Spark là các RDD của nó. Và các RDD
được lưu vào bộ đệm bằng cách sử dụng phương thức cache() hoặc persist().
Khi chúng ta sử dụng phương thức cache(), tất cả RDD sẽ lưu trữ trong bộ nhớ.
Khi RDD lưu trữ giá trị trong bộ nhớ, dữ liệu không phù hợp với bộ nhớ sẽ
được tính tốn lại hoặc dữ liệu thừa được gửi đến đĩa. Bất cứ khi nào chúng ta
muốn RDD, nó có thể được giải nén mà khơng cần đến đĩa. Điều này làm giảm
sự phức tạp về không gian-thời gian và chi phí lưu trữ trên đĩa. Khả năng trong
bộ nhớ của Spark rất tốt cho việc học máy và xử lý hàng loạt vi mơ. Nó cung
cấp khả năng thực thi nhanh hơn cho các công việc lặp đi lặp lại.
Hỗ trợ nhiều ngôn ngữ: Spark cung cấp các API tích hợp sẵn bằng Java,
Scala hoặc Python. Do đó, bạn có thể viết ứng dụng bằng các ngơn ngữ khác
nhau. Spark đưa ra 80 tốn tử cấp cao để truy vấn tương tác.
Khả năng chịu lỗi: Vì Apache Spark RDD là một tập dữ liệu bất biến, mỗi
Spark RDD nhớ dòng dõi của hoạt động xác định đã được sử dụng trên tập dữ
liệu đầu vào có khả năng chịu lỗi để tạo ra nó. Nếu do lỗi worker node mà bất
kỳ phân vùng nào của RDD bị mất, thì phân vùng đó có thể được tính toán lại
từ tập dữ liệu chịu lỗi ban đầu bằng cách sử dụng dịng hoạt động.
Phân tích nâng cao - Spark khơng chỉ hỗ trợ 'Map' và 'reduce'. Nó cũng hỗ
trợ các truy vấn SQL, Dữ liệu truyền trực tuyến, Máy học (ML) và các thuật
toán Đồ thị.


4. Spark được xây dựng trên hadoop
Sơ đồ sau đây cho thấy ba cách về cách Spark có thể được tạo bằng các
thành phần Hadoop.
5


-

Standalone: Spark Triển khai độc lập có nghĩa là Spark chiếm vị trí trên đầu
HDFS (Hệ thống tệp phân tán Hadoop) và không gian được phân bổ cho HDFS
một cách rõ ràng. Ở đây, Spark và MapReduce sẽ chạy song song với nhau để
bao gồm tất cả các công việc spark trên cụm.

-

Hadoop Yarn: Việc triển khai Hadoop Yarn có nghĩa là đơn giản, spark chạy
trên Yarn mà không cần cài đặt trước hoặc truy cập root. Nó giúp tích hợp Spark
vào hệ sinh thái Hadoop hoặc ngăn xếp Hadoop. Nó cho phép các thành phần
khác chạy trên đầu ngăn xếp.

-

Spark in MapReduce (SIMR): Spark trong MapReduce được sử dụng để khởi
chạy cơng việc spark ngồi việc triển khai độc lập. Với SIMR, người dùng có
thể khởi động Spark và sử dụng trình bao của nó mà khơng cần bất kỳ quyền
truy cập quản trị nào.

5. Thành phần của Spark
Hình minh họa sau đây mô tả các thành phần khác nhau của Spark


6


-

Apache Spark gồm có 5 thành phần chính: Spark Core, Spark Streaming,
Spark SQL, MLlib và GraphX, trong đó:
o Spark Core là nền tảng cho các thành phần còn lại và các thành phần này
muốn khởi chạy được thì đều phải thơng qua Spark Core do Spark Core
đảm nhận vai trị thực hiện cơng việc tính tốn và xử lý trong bộ nhớ (Inmemory computing) đồng thời nó cũng tham chiếu các dữ liệu được lưu
trữ tại các hệ thống lưu trữ bên ngoài.
o Spark SQL cung cấp một kiểu data abstraction mới (SchemaRDD) nhằm
hỗ trợ cho cả kiểu dữ liệu có cấu trúc (structured data) và dữ liệu nửa cấu
trúc (semi-structured data – thường là dữ liệu dữ liệu có cấu trúc nhưng
không đồng nhất và cấu trúc của dữ liệu phụ thuộc vào chính nội dung
của dữ liệu ấy). Spark SQL hỗ trợ DSL (Domain-specific language) để
thực hiện các thao tác trên DataFrames bằng ngôn ngữ Scala, Java hoặc
Python và nó cũng hỗ trợ cả ngơn ngữ SQL với giao diện command-line
và ODBC/JDBC server.
o Spark Streaming được sử dụng để thực hiện việc phân tích stream bằng
việc coi stream là các mini-batches và thực hiện kỹ thuật RDD
transformation đối với các dữ liệu mini-batches này. Qua đó cho phép các
đoạn code được viết cho xử lý batch có thể được tận dụng lại vào trong
7


việc xử lý stream, làm cho việc phát triển lambda architecture được dễ
dàng hơn. Tuy nhiên điều này lại tạo ra độ trễ trong xử lý dữ liệu (độ trễ
chính bằng mini-batch duration) và do đó nhiều chuyên gia cho rằng
Spark Streaming không thực sự là công cụ xử lý streaming giống như

Storm hoặc Flink.
o MLlib (Machine Learning Library): MLlib là một nền tảng học máy phân
tán bên trên Spark do kiến trúc phân tán dựa trên bộ nhớ. Theo các so
sánh benchmark Spark MLlib nhanh hơn 9 lần so với phiên bản chạy trên
Hadoop (Apache Mahout).
o GrapX: Grapx là nền tảng xử lý đồ thị dựa trên Spark. Nó cung cấp các
Api để diễn tả các tính tốn trong đồ thị bằng cách sử dụng Pregel Api.

6. RDD
6.1.

Resilient Distributed Datasets
Resilient Distributed Datasets Là dữ liệu phân tán có khả năng phục hồi.

Là một cấu trúc dữ liệu cơ bản của Spark, là một tập hợp phân tán bất biến của
các đối tượng. Mỗi tập dữ liệu trong RDD được chia thành các phân vùng logic,
có thể được tính tốn trên các nodes khác nhau của cụm. RDD có thể chứa bất
kỳ loại đối tượng Python, Java hoặc Scala nào, bao gồm cả các lớp do người
dùng định nghĩa.
Về mặt hình thức, RDD là một tập hợp các bản ghi được phân vùng, chỉ
đọc. RDD có thể được tạo thơng qua các hoạt động xác định trên dữ liệu trên bộ
lưu trữ ổn định hoặc các RDD khác. RDD là một tập hợp các phần tử chịu được
lỗi có thể hoạt động song song. Spark sử dụng khái niệm RDD để đạt được các
hoạt động MapReduce nhanh hơn và hiệu quả hơn.
8


6.2.

Chia Sẻ Dữ Liệu Chậm Trong Mapreduce

o Khi sử dụng lại dữ liệu giữa các lần tính tốn (Ví dụ: giữa 2 cơng việc
MapReduce) thì phải bắt buộc ghi dữ liệu vào đĩa.
o Chia sẻ dữ liệu chậm trong MapReduce do replication, serialization và
disk IO.
o Hầu hết các ứng dụng Hadoop dành 90% thời gian để đọc và ghi dữ liệu.

6.3.

Các Hoạt Động Lặp Lại Trên Mapreduce
Sử dụng lại kết quả của các lần tính tốn trung gian à phát sinh chi phí

đáng kể do sao chép, I/O disk và tuần tự hóa, khiến hệ thống chậm.

6.4.

Hoạt Động Tương Tác Trên Mapreduce
Mỗi truy vấn khi được thực thi sẽ I/O disk à điều này chi phối thời gian

thực thi của ứng dụng.

9


6.5.

Chia sẻ dữ liệu bằng Spak RDD

● Hầu hết các ứng dụng Hadoop, chúng dành hơn 90% thời gian để thực hiện
các thao tác đọc-ghi HDFS.
● Nhận thức được vấn đề này thì các nhà nguyên cứu đã phát triển một

framework chuyên biệt có tên là Apache Spark.
● Ý tưởng chính của Spark là Resilient Distributed Datasets (RDD), nó hỗ trợ
tính tốn xử lý trong bộ nhớ.
● Điều này có nghĩa là, nó lưu trữ trạng thái bộ nhớ như một đối tượng trên
các cơng việc và đối tượng có thể chia sẻ giữa các cơng việc đó. Chia sẻ dữ
liệu trong bộ nhớ nhanh hơn mạng và đĩa từ 10 đến 100 lần.
6.6.

Hoạt Động Lặp Lại Trên Spark RDD
Hình minh họa dưới đây cho thấy các hoạt động lặp lại trên Spark RDD.

Nó sẽ lưu trữ các kết quả trung gian trong một bộ nhớ phân tán thay vì Ổ lưu
trữ ổn định (Đĩa) và làm cho hệ thống nhanh hơn.

Nếu bộ nhớ phân tán

(RAM) không đủ để lưu trữ các kết quả trung gian (Trạng thái công việc), thì nó
sẽ lưu các kết quả đó trên đĩa.

10


6.7.

Hoạt Động Tương Tác Trên Spark RDD
Nếu các truy vấn khác nhau được chạy lặp lại trên cùng một tập dữ liệu,

thì dữ liệu cụ thể này có thể được lưu trong bộ nhớ để có thời gian thực thi tốt
hơn.


Theo mặc định, mỗi RDD đã chuyển đổi có thể được tính tốn lại mỗi khi
bạn chạy một hành động trên nó. Tuy nhiên, bạn cũng có thể duy trì một RDD
trong bộ nhớ, trong trường hợp đó Spark sẽ giữ các phần tử xung quanh trên
cụm để truy cập nhanh hơn nhiều, vào lần tiếp theo bạn truy vấn nó. Ngồi ra
cịn có hỗ trợ cho các RDD lâu dài trên đĩa hoặc được sao chép qua nhiều nút.

11


7. Kiến Trúc Apache Spark
7.1.

Kiến trúc Apache Spark

Driver program trong kiến trúc Apache Spark gọi chương trình chính của
một ứng dụng và tạo SparkContext. Một SparkContext bao gồm tất cả các chức
năng cơ bản. Spark Driver chứa nhiều thành phần khác như DAG Scheduler, Task
Scheduler, Backend Scheduler và Block Manager, chịu trách nhiệm dịch mã do
người dùng viết thành các công việc thực sự được thực thi trên cụm.d Datasets.
Spark Driver và SparkContext cùng giám sát việc thực hiện công việc trong
cụm. Spark Driver làm việc với Trình quản lý cụm để quản lý nhiều công việc
khác. Người quản lý cụm thực hiện công việc phân bổ tài nguyên. Và sau đó, cơng
việc được chia thành nhiều nhiệm vụ nhỏ hơn được phân phối tiếp đến các nút
worker.
Bất cứ khi nào RDD được tạo trong SparkContext, nó có thể được phân phối
trên nhiều nút worker và cũng có thể được lưu vào bộ nhớ đệm ở đó.
Các nút worker thực thi các nhiệm vụ được giao bởi Trình quản lý cụm và
đưa nó trở lại Bối cảnh Spark.
Người thi hành có trách nhiệm thực hiện các nhiệm vụ này. Thời gian tồn tại
của các trình thực thi giống như thời gian tồn tại của Ứng dụng Spark. Nếu chúng

12


ta muốn tăng hiệu suất của hệ thống, chúng ta có thể tăng số lượng các nút worker
để các cơng việc có thể được chia thành nhiều phần hợp lý hơn.
7.2.

Quy Trình Làm Việc Của Spark

Bước 1. Client gửi spark user application code. Khi application code được gửi,
driver sẽ chuyển đổi hồn tồn user code có chứa các transformations và
actions thành DAG (directed acyclic graph). Ở giai đoạn này, nó cũng thực
hiện các tối ưu hóa như biến đổi pipelining.
Bước 2. Sau đó, nó chuyển đổi đồ thị logic được gọi là DAG thành kế hoạch
thực thi vật lý với nhiều giai đoạn. Sau khi chuyển đổi thành một kế hoạch
thực thi vật lý, nó tạo ra các đơn vị thực thi vật lý được gọi là các nhiệm vụ
theo từng giai đoạn. Sau đó, các nhiệm vụ được nhóm lại và gửi đến cụm.
Bước 3. Bây giờ driver nói chuyện với cluster manager và thương lượng các
tài nguyên. Driver khởi chạy các trình thực thi trong các worker node thay
mặt cho driver. Tại thời điểm này, driver sẽ gửi các nhiệm vụ cho những
người thực thi dựa trên vị trí dữ liệu. Khi người thực thi bắt (executors) đầu,
13


họ tự đăng ký với driver. Vì vậy, driver sẽ có một cái nhìn đầy đủ về những
người thực thi đang thực thi tác vụ.

Bước 4. Trong quá trình thực thi các tasks, driver program sẽ giám sát tập hợp
các trình thực thi đang chạy. driver node cũng lên lịch các tasks trong tương
lai dựa trên vị trí dữ liệu.


14


PHẦN 2: XÂY DỰNG MỘT HỆ THỐNG ĐỀ XUẤT

1. Mục Đích Ứng Dụng
Trong khi làm việc trong các nhóm tìm kiếm của các cơng ty sản phẩm khác
nhau, ln có nhu cầu liên tục xây dựng một hệ thống khuyến nghị cho người
dùng.
Nhóm đã tìm hiểu xây dựng với các cơng cụ tìm kiếm phổ biến như
Elaticsearch, SOLR và đã thử hồn thiện mức độ liên quan tìm kiếm. Nhưng
ln có một giới hạn khi thực hiện liên quan đến tìm kiếm và tạo hệ thống đề
xuất chỉ với các cơng cụ tìm kiếm. Chúng ta ln ngạc nhiên bởi các công ty
như Amazon và Netflix cung cấp các khuyến nghị dựa trên sự quan tâm của
mình. Vì vậy, bằng cách sử dụng các khả năng học tập của Apache Spark cùng
với Elaticsearch, nhóm sẽ xây dựng một hệ thống khuyến nghị.

2. Ý Tưởng

Như trong hình trên, nếu người dùng 1 thích Mục A, Mục B và Mục C và
Người dùng 2 Thích Mục B và Mục C, có khả năng cao là Người dùng 2 cũng
thích Mục A và có thể giới thiệu Mục A cho Người dùng 2.
Trong lĩnh vực hệ thống khuyến nghị, chủ yếu có ba kỹ thuật được sử dụng
để cung cấp các khuyến nghị.
o Collaborative filtering
15


o Content-based

o Hybrid technique
Chúng ta sẽ sử dụng kỹ thuật Collaborative filtering trong pyspark để tạo ra
một hệ thống đề xuất. Apache Spark ML thực hiện các bình phương tối thiểu xen
kẽ (Alternating Least Squares – ALS) để Collaborative filtering, một thuật toán rất
phổ biến để đưa ra các khuyến nghị.
ALS là một thuật toán nhân tố ma trận sử dụng các bình phương tối thiểu
xen kẽ với các quy tắc hóa học có trọng số (ALS – WR).
Vấn đề chính với Spark ALS là nó sẽ chỉ đề xuất các sản phẩm hàng đầu cho
một người dùng cụ thể (mơ hình sản phẩm người dùng) và người dùng hàng đầu
cho một sản phẩm cụ thể (mơ hình người dùng sản phẩm).
Tính tốn sự tương tự giữa n item và n item ta có độ phức tạp O(N2) tăng rất
nhanh đến các hoạt động xáo trộn quá tốn kém chi phí và thời gian máy tính khơng
khả thi. Để tính toán độ tương tự mục của item – item, chúng ta xây dựng một mơ
hình item bằng cách sử dụng sự giống nhau của các yếu tố vật phẩm từ mơ hình
ALS bằng Spark và Elaticsearch.
Thuật tốn ALS về cơ bản là yếu tố hai ma trận - một là userFeatures và cái
cịn lại là ma trận itemFeatures. Chúng tơi đang thực hiện sự tương đồng cosine
trên Ma trận xếp hạng ItemFeatures để tìm sự tương đồng của mục vật phẩm.

3. Thuật Toán
3.1.

Collaborative Filtering
Ở phương pháp này ta sẽ cần xây dựng ma trận hệ số tương quan của véc
tơ rating của các users để tìm ra nhóm users có cùng sở thích. Hệ số tương quan
giữa các users càng lớn thì sở thích của họ càng giống nhau và trái lại thì họ
càng có sở thích khác biệt. Thuật toán sẽ dự đoán giá trị rating tại một cặp (user,
item) chưa được rate bằng cách tính tổng có trọng số các giá trị rating của users
tương quan nhất với user đó mà đã rate item trên. Trọng số thơng thường sẽ
bẳng chính hệ số tương quan.

Để xây dựng một thuật toán Neighborhood-based collaborative Filtering
chúng ta cần trải qua các bước cơ bản bên dưới
a) Lấy trung bình các cột
16


b)
c)
d)
e)
f)

Chuẩn hóa ma trận bằng cách trừ đi trung bình
Tính hệ số tương quan của ma trận chuẩn hóa
Dự đốn trên ma trận chuẩn hóa các vị trí chưa được rate
Diễn giải công thức dự báo rating
Chuyển đổi sang giá trị rating thực tế.

Chuẩn hóa dữ liệu ở ma trận tiện ích bằng cách trừ đi ở mỗi cột (là các rating
của cùng 1 user) trung bình giá trị rating của cột. Việc này là để loại bỏ sự khác
biệt về mức độ cho điểm của các user. Vì ví dụ: Có một số user khó tính có thể cho
điểm cao nhất là 3 nhưng user dễ tính thì điểm thấp nhất là 3. Khi đó nếu nhận định
user khó tính khơng thích item (nếu ta coi 3 là điểm thấp) hoặc user dễ tính yêu
thích item (nếu ta coi 3 là điểm cao) là khơng chuẩn xác. Chuẩn hóa giá trị rating
nhằm mục đích đưa trung bình rating của các user sau khi chuẩn hóa về 0. Gía trị
rating dương thể hiện user ưa thích item và trái lại âm sẽ là khơng thích, bằng 0 là
trung lập
Tính ma trận hệ số tương quan giữa các véc tơ cột. Ma trận tương quan thể
hiện sự tương đồng trong hành vi mua sắm giữa các user. Từ ma trận tương quan ta
có thể xác định ra các users có sở thích tương đồng nhất với một user xác định. Hệ

số tương quan dương và càng gần 1 chứng tỏ 2 users có sở thích giống nhau. Hệ số
tương quan âm là 2 users có hành vi trái ngược.
17


Dự báo rating của một user cho một item bằng cách xác định trên ma trận hệ
số tương quan một tập gồm users có giá trị tương quan lớn nhất đối với user mà đã
rate item. Gía trị dự báo rating của user sẽ được tính bằng tổng có trọng số của các
rating trong tập users tương quan nêu trên theo công thức bên dưới:

Chuyển giá trị dự báo ở ma trận chuẩn hóa sang giá trị dự báo rating bằng cách
cộng các giá trị ở ma trận chuẩn hóa với giá trị trung bình của mỗi cột.
Một số hạn chês của User-user CF:
o Trên thực tế, số lượng users ln lớn hơn số lượng items rất nhiều. Kéo
theo đó là Similarity matrix là rất lớn với số phần tử phải lưu giữ là hơn 1
nửa của bình phương số lượng users (chú ý rằng ma trận này là đối
xứng). Việc này, như đã đề cập ở trên, khiến cho việc lưu trữ ma trận này
trong nhiều trường hợp là không khả thi.
o Ma trận Utility Y thường là rất sparse. Với số lượng users rất lớn so với
số lượng items, rất nhiều cột của ma trận này sẽ rất sparse, tức chỉ có một
vài phần tử khác 0. Lý do là users thường lười rating. Cũng chính vì việc
này, một khi user đó thay đổi rating hoặc rate thêm items, trung bình
cộng các ratings cũng như vector chuẩn hố tương ứng với user này thay
đổi nhiều. Kéo theo đó, việc tính tốn ma trận Similarity, vốn tốn nhiều
bộ nhớ và thời gian, cũng cần được thực hiện lại.
🡺 Vì vậy về mặt tính tốn, Item-item CF có thể nhận được từ User-user
CF bằng cách chuyển vị (transpose) ma trận utility, và coi như items đang
rate users. Sau khi tính ra kết quả cuối cùng, ta lại chuyển vị một lần nữa
để thu được kết quả.
3.2. Cosine Similarity

Đây là hàm được sử dụng nhiều nhất cơng thức tính cos của góc giữa hai vector
(u1, u2)

18


Trong đó u1 u2 là vectors tương ứng với users 1, 2 đã được chuẩn hoá.

Độ similarity của hai vector là 1 số trong đoạn [-1, 1]. Giá trị bằng 1 thể hiện hai
vector hoàn toàn similar nhau. Hàm số coscos của một góc bằng 1 nghĩa là góc
giữa hai vector bằng 0, tức một vector bằng tích của một số dương với vector còn
lại. Giá trị cos bằng -1 thể hiện hai vector này hoàn toàn trái ngược nhau. Điều này
cũng hợp lý, tức khi hành vi của hai users là hoàn toàn ngược nhau
thi similarity giữa hai vector đó là thấp nhất.
3.3.

Elasticsearch

là một cơng cụ tìm kiếm dựa trên nền tảng Apache Lucene. Nó cung cấp một bộ máy
tìm kiếm dạng phân tán, có đầy đủ cơng cụ với một giao diện web HTTP có hỗ trợ dữ liệu
JSON.
Elasticsearch hoạt động như 1 server riêng biệt để “phục vụ” việc tìm kiếm dữ liệu.
ES sẽ chạy một cổng (dưới local default là 9200). Người ta cũng có thể dùng ES là DB chính
nhưng thường khơng ai làm thế vì cái gì cũng có nhiệm vụ riêng biệt của nó.

4. Tập Dữ Liệu
Tập dữ liệu chứa 2 loại dữ liệu chính từ amazon.com:
o Metadata: chứa tất các siêu dữ liệu về sản phầm
o Rating data: dữ liệu đánh giá các sản phẩm khác nhau tương ứng với
người dùng

Tải tập dữ liệu tại: />
19


5. Quy Trình
Tải dữ liệu sản phẩm vào Spark
Sử dụng các hoạt động của Spark DataFrame để làm sạch bộ dữ liệu.
Tải dữ liệu được làm sạch vào Elaticsearch.
Sử dụng Spark Mllib, hãy đào tạo mơ hình khuyến nghị lọc hợp tác từ dữ
liệu xếp hạng.
o Lưu dữ liệu mô hình kết quả vào Elaticsearch.
o Sử dụng các truy vấn Elaticsearch, tạo các khuyến nghị.
o
o
o
o

20


PHẦN 3: THỰC NGHIỆM

21



×