MapReduce hĩa lấy mẫu Gibbs cho LDA

Một phần của tài liệu Đồ án: Mô hình Mapreduce và ứng dụng của Bigdata (Trang 46 - 57)

Phân tích đặc trƣng của LDA và lấy mẫu Gibbs

Phân bố Dirichlet tiềm ẩn (LDA) đƣa ra giả thuyết rằng các tài liệu cĩ chứa các chủ đề với một xác suất nhất định, và các chủ đề này chứa các từ với một xác suất nhất định. Tập hợp các xác suất cĩ thể rất lớn và việc học đƣợc các xác suất này một cách chính xác cĩ liên quan từ tài liệu đến chủ đề, từ chủ đề đến từ, đây là một cơng việc cĩ khối lƣợng tính tốn rất lớn.[9]

Để tìm đƣợc các xác suất nêu trên, em sử dụng phƣơng pháp lấy mẫu Gibbs mà việc tìm kiếm các xác suất trên sử dụng các quy tắc xác suất. Những quy tắc này, hƣớng dẫn tìm kiếm theo hƣớng càng ngày càng tốt hơn cho tới khi tìm đƣợc kết quả nhƣ ý. Khi khơng gian tìm kiếm lớn, nên em đã cố gắng song song hố lấy mẫu Gibbs sử dụng mơ hình MapReduce và dựa vào khả năng quản lý file của Hadoop.

Trong phiên bản tuần tự của lấy mấu Gibbs cho LDA, thuật tốn cần duyệt qua nhiều văn bản từng từ từng từ một, gán cĩ xác suất một chủ đề cho một từ. Sau đĩ các biến đếm cho chủ đề của từ đĩ đƣợc cập nhật. Những biến đếm này chứa số lần xuất hiện của các từ đƣợc gán bởi một chủ đề và số lần chủ đề đƣợc gán cho một văn bản. Sau khi lặp lại qua tập các văn bản nhiều lần, các biến đếm sẽ hội tụ về một tỷ lệ chính xác. Nhƣng rất đáng tiếc là các biến đếm này đều là các biến đếm tồn cục và cần cho tất cả các máy sử lý, do đĩ khơng dễ dàng gì để song song hố thuật tốn lấy mẫu Gibbs.

Chiến lƣợc MapReduce hố

Trong chiến lƣợc song song hố lấy mẫu Gibbs của em, em chia các tài liệu vào trong các máy tính và giữ một bản sao của các biến đếm ở tất cả các máy. Khi các máy lặp qua các tài liệu và sau đĩ tất cả chúng đều cập nhật vào các biến đếm của mình. Điều này đƣợc lặp đi lặp lại nhiều lần cho đến khi số lƣợng hội tụ. Khi áp dụng mơ hình MapReduce, thì các tài liệu đƣợc xử lý bên trong hàm map và việc cập nhật các biến tồn cục sẽ đƣợc diễn ra trong hàm reduce.

Ngồi ra, ta cũng thấy trong từng bƣớc của thuật tốn Gibbs, do sự độc lập trong việc xử lý các tài liệu. Do vậy, ta cĩ thể thực hiện song song hố từng bƣớc nhỏ trong thuật tốn. Mỗi bƣớc đĩ đƣợc áp dụng mơ hình MapReduce theo cách riêng cho từng bƣớc. Ví dụ, nhƣ trong giai đoạn khởi tạo, với việc đếm số lần xuất hiện của từ và chủ đề, cĩ thể song song hố bƣớc nhỏ này bằng cách chia văn bản thành nhiều phần và đặt trên nhiều máy khác nhau, sau đĩ thực hiện đếm trên các văn bản này.

Nhƣ vậy với bài tốn lấy mẫu Gibbs cho LDA chúng ta cĩ hai chiến lƣợc để song song hố. Trên thực tế cịn cĩ thể cĩ nhiều chiến lƣợc khác nữa. Với mỗi chiến lƣợc sẽ cĩ thời gian thực hiện hay hiệu năng khác nhau. Chúng ta cần cài đặt và đánh giá từng chiến lƣợc để chọn một cách áp dụng mơ hình MapReduce cho thuật tốn của mình cĩ hiệu quả nhất.

Hình 14. Mơ hình thuật tốn lấy mẫu Gibbs

Khởi tạo các biến đếm

- Lấy một văn bản từ tập tất cả văn bản. - Sinh ngẫu nhiên chủ đề cho từng từ trong văn bản

- Cập nhật các biến đếm

- Lấy một văn bản từ tập tất cả văn bản. - Tính lại chủ đề của từng từ trong văn bản - Cập nhật lại các biến đếm Xét hết tồn bộ văn bản? No Yes Kết thúc Xét hết tồn bộ văn bản?

Tính độ hội tụ của các biến đếm

Biến đếm cĩ hội tụ khơng? No Yes No Yes

… …

Khởi tạo các biến đếm Lấy một văn bản từ tập văn bản thứ 1. Sinh chủ đề và cập nhật biến đếm Hết tập văn bản thứ 1 No Yes … Lấy một văn bản từ tập văn bản thứ 2. Sinh chủ đề và cập nhật biến đếm Hết tập văn bản thứ 2 Lấy một văn bản từ tập văn bản thứ 3. Sinh chủ đề và cập nhật biến đếm Hết tập văn bản thứ 3 Yes Yes No No Lấy một văn bản từ tập văn bản thứ 1’. Cập nhật chủ đề và cập nhật biến đếm Hết tập văn bản thứ 1’ No Yes … Lấy một văn bản từ tập văn bản thứ 2’. Cập nhật chủ đề và cập nhật biến đếm Hết tập văn bản thứ 2’ Lấy một văn bản từ tập văn bản thứ 3’. Cập nhật chủ đề và cập nhật biến đếm Hết tập văn bản thứ 3’ Yes Yes No No

Hình 15. Lưu đồ MapReduce hố thuật tốn lấy mẫu Gibbs - chiến lược 1

… …

Tổng hợp và

Tính độ hội tụ của các biến đếm

Kết thúc Biến đếm cĩ hội tụ khơng?

Yes No

Hình 16. Lưu đồ MapReduce hố lấy mẫu Gibbs - chiến lược 2

Khởi tạo các biến đếm Lấy một văn bản từ tập văn bản thứ 1. Sinh chủ đề và cập nhật biến đếm Tổng hợp các biến đếm Biến đếm hội tụ? No Kết thúc No Yes … Cập nhật chủ đề và cập nhật biến đếm Hết tập văn bản thứ 1? No Yes

Lƣu lại biến đếm

Lấy một văn bản từ tập văn bản thứ 2. Sinh chủ đề và cập nhật biến đếm Biến đếm hội tụ? No Yes Cập nhật chủ đề và cập nhật biến đếm Hết tập văn bản thứ 2? No Yes Lấy một văn bản từ tập văn bản thứ 3. Sinh chủ đề và cập nhật biến đếm Biến đếm hội tụ? No Yes Cập nhật chủ đề và cập nhật biến đếm Hết tập văn bản thứ 3? No Yes

Cụ thể

Giống nhƣ MapReduce hố k-means và Nạve Bayes, dữ liệu vẫn đƣợc vector hố, và lƣu dƣới dạng cặp key/value. Trong đĩ, key là số thứ tự của tài liệu. Trong phần này, số thứ tự của tài liệu rất quan trọng. Value là nội dung của tài liệu tƣơng ứng, đƣợc tổ chức dƣới dạng vector.

o Chiến lược áp dụng MapReduce vào từng phần của thuật tốn

Thuật tốn lấy mẫu Gibbs cho LDA nhƣ trên đƣợc chia thành 2 bƣớc: Bƣớc 1, khởi tạo và Bƣớc 2 là quá trình lặp lấy mẫu. Và các thành phần này cĩ thể song song hố đƣợc bằng phƣơng pháp sau:

Bƣớc 1: Khởi tạo và lấy mẫu lần đầu.

Bƣớc này, chúng ta cần gán ngẫu nhiên một chủ đề cho từng từ trong từng văn bản. Tuy các văn bản đƣợc xử lý độc lập, nhƣng để đơn giản, em khơng MapReduce hố bƣớc này. Bƣớc này, tạo ra một kểu key/value mới để dễ dàng sử lý hơn cho phần sau. Đĩ là, thay đổi kiểu value từ:

Từ thứ 1 Từ thứ 2 Từ thứ 3 … Từ thứ N

thành :

Từ thứ 1 Từ thứ 2 Từ thứ 3 … Từ thứ N

Chủ đề Chủ đề Chủ đề … Chủ đề

Trong đĩ “Chủ đề” là chủ đề tƣơng ứng đƣợc sinh ra cho các từ.

Cơng việc tiếp theo trong bƣớc này là khởi tạo các biến và đếm theo các chủ đề đƣợc sinh ra. Em áp dụng mơ hình MapReduce cho cơng việc này. Trong đĩ:

 Hàm map: tìm sự xuất hiện của từ và chủ đề, và đánh dấu sẽ tăng biến đếm tƣơng ứng lên 1.

o Đầu vào: key1/value1: Trong đĩ

key1: là số thứ tự của văn bản

value1: là nội dung của văn bản kèm theo chủ đề tƣơng ứng, nhƣ đã chuyển trong phần trên.

o Xử lý: xem sự xuất hiện của từng cặp từ và chủ đề trong mỗi văn bản và đánh dấu các biến đếm tƣơng ứng tăng lên 1.

o Đầu ra: key2/value2: trong đĩ

key2: là kiểu của từng biến đếm

 Hàm Reduce: gộp tất cả các dữ liệu của hàm map và tính tổng cho biến đếm trên tồn bộ dữ liệu.

o Đầu vào: key2/ list(value2). Trong đĩ

key2: kiểu của từng biến đếm

 list(value2): danh sách các đánh dấu “1” của key2 o Xử lý: Cộng tổng các giá trị trong list(value2)

o Đầu ra: list(key3/value3). Là danh sách các biến đếm cùng giá trị của nĩ trên tồn bộ tập dữ liệu

Bƣớc 2. Lặp lại quá trình lấy mẫu đến khi đạt đƣợc mức độ chính xác nhất định.

Cơng việc này, trong mỗi lần lặp đều phải tính tốn lại chủ đề của từng từ trong từng tài liệu. Trong chiến lƣợc này, em song song hố việc tính tốn lại chủ đề bằng một job MapReduce. Vì vậy, để thực hiện bƣớc này, thì phải thực hiện nhiều lần cơng việc này cho tới khi các biến đếm này hội tụ tức là cĩ giá trị khơng đổi.

Cụ thể của cơng việc này khi áp dụng mơ hình MapReduce nhƣ sau:

 Hàm map: dựa trên việc lấy mẫu lần đầu, bƣớc này tính lại topic theo các cơng thức nhƣ đã nêu ở phần giới thiệu về thuật tốn lấy mẫu Gibbs.

o Đầu vào: key1/value1: Trong đĩ

key1: là số thứ tự của văn bản

value1: là nội dung của văn bản kèm theo chủ đề tƣơng ứng đã đƣợc gán ở Bƣớc 1.

o Xử lý: tính lại chủ đề cho từng từ trong văn bản key1 theo cơng thức.

o Đầu ra: key2/value2: trong đĩ

key2: số thứ tự của văn bản (=key1)

value2: nội dung của văn bản (gồm danh sách các từ) và nội dung mới

 Hàm Reduce: gộp tất cả các dữ liệu của hàm map và lƣu dữ liệu mới.

o Đầu vào: key2/ list(value2). Trong đĩ

key2: số thứ tự của văn bản

 list(value2): ở đây danh sách value2 chỉ cĩ một bản ghi tƣơng ứng với key2.

o Xử lý: ghi ra đầu ra

o Đầu ra: list(key3/value3). Là danh sách tài liệu mới đã đƣợc đánh lại chủ đề. Trong đĩ

 key3 = key2

Nhƣ vậy, với chiến lƣợc thứ nhất, ta thấy rằng chiến lƣợc này đã song song hố sâu vào trong thuật tốn, nhƣng nĩ cĩ một nhƣợc điểm là lƣợng dữ liệu trung gian lớn, nên việc lƣu chuyển qua mạng sẽ mất nhiều thời gian, qua đĩ ảnh hƣởng tới tốc độ xử lý nĩi chung của thuật tốn. Sau đây, là chiến lƣợc thứ 2:

o Chiến lược áp dụng MapReduce vào thuật tốn theo hướng tiếp cận tồn bộ

Theo hƣớng tiếp cận này, các tài liệu đƣợc chia ở nhiều máy khác nhau. Các tài liệu đƣợc xử ý song song và mỗi máy đề xử lý từ đầu đến cuối của thuật tốn. Các biến tồn cục đƣợc cập nhật vào bƣớc cuối cùng.

 Hàm map: thực hiện xử lý phân tán từng văn bản, nĩ xử lý mỗi văn bản theo hầu nhƣ các bƣớc trong thuật tốn. Cụ thể nhƣ sau

o Đầu vào: key1/value1: Trong đĩ

key1: là số thứ tự của văn bản

value1: là nội dung của văn bản

o Xử lý: thực hiện các bƣớc của thuật tốn trên văn bản thứ key1. Bao gồm:

 Khởi tạo và lấy mẫu các chủ đề trong lần đầu tiên khi chạy

 Bƣớc lặp đến khi đạt đƣợc một độ chính sác nhất định bao gồm cơng việc tính lại chủ đề của từng văn bản, cập nhật lại nội dung các biến đếm và cập nhật lại giá trị của các tham số Dirichlet.

o Đầu ra: key2/value2: trong đĩ

key2: số thứ tự của văn bản (=key1)

value2: giá trị của các tham số Diriclet Θ và Φ.

 Hàm Reduce: gộp tất cả các dữ liệu của hàm map và lƣu dữ liệu mới.

o Đầu vào: key2/ list(value2). Trong đĩ

key2: số thứ tự của văn bản

 list(value2): giá trị của hai tham số Θ và Φ cho từng văn bản key2

o Xử lý: tổng hợp các thành phần của tham số Θ và Φ. o Đầu ra: list(key3/value3). Là giá trị của hai tham số Θ và Φ.

 key3 = 1 hoặc 2. Nếu là 1 value3 là tham số Θ, nếu là 2 thì value 3 là giá trị của tham số Φ

Ta thấy rằng, trong chiến lƣợc thứ hai đã giảm bớt đƣợc rất nhiều dữ liệu trung gian, vì vậy tốc độ thực thi chắc chăn sẽ đƣợc cải thiện hơn. Qua đây chúng ta cĩ nhận xét:

Việc áp dụng mơ hình MapReduce cho một mơ hình tốn nào đĩ rất linh hoạt. Cĩ nhiều cách đề mơ hình bài tốn trên MapReduce, và khơng phải phƣơng án nào cũng tốt nhƣ nhau.

Trên đây, là thuật tốn và các phƣơng pháp áp dụng mơ hình tốn MapReduce vào để cĩ thể làm các thuật tốn đĩ cĩ thể thực thi đƣợc trên mơi trƣờng phân tán. Cụ thể việc cài đặt trên Hadoop, chạy và so sánh hiệu năng sẽ đƣợc trình bày trong chƣơng tiếp theo – Chƣơng 4

CHƢƠNG IV. CÀI ĐẶT VÀ THỰC NGHIỆM

Sau khi đã cĩ mơ hình, và api lập trình do hadoop cung cấp. Em đã thực hiện cài đặt các thuật tốn trên. Hệ thống đƣợc dựa trên các máy ảo Ubuntu (linux) và phiên bản hadoop 0.21.0.

4.1. Cài đặt trên Hadoop

4.1.1 K-Means

K-means là thuật tốn đơn giản, đầu tiên là việc xây dƣng lớp chứa nội dung của văn bản sau khi đã đƣợc vector hĩa cĩ cấu trúc nhƣ sau:

public class RecordItem implements Writable {

public int[] oneRecord; //Nội dung của vector

public int classifier; //Trường phân loại, nhưng trong k-mean

//khơng dùng tới trường này

public int oneRecordLength;//số chiều của vector

}

Dữ liệu đƣợc lƣu dƣới dạng SequenceFile và lƣu phân tán trên cụm các máy Hadoop. Sau đĩ định nghĩa hai hàm thực hiện Map và Reduce nhƣ sau:

Hàm map:

public void map(IntWritable key, RecordItem value,

OutputCollector<IntWritable, RecordItem> output, Reporter reporter) Hàm này thực hiện các cơng việc chính sau:

 Tính khoảng cách từ điểm cĩ giá trị chứa trong value tới lần lƣợt các trọng tâm  So sánh giữa tất cả các khoảng cách

 Lấy trọng tâm cĩ khoảng cách nhỏ nhất

 Ghi ra ngồi với cặp dữ liệu <IntWritable, RecordItem> tƣơng ứng là số thứ tự của trọng tâm, và value – hay vector nội dung văn bản nhƣ đầu vào. Sau khi thực hiện xong hàm map, đầu ra của hàm map đƣợc tập hợp, sắp xếp các điểm cùng một key, sau đĩ gửi kết quả trung gian này cho hàm reduce.

Hàm reduce:

public void reduce(IntWritable key, Iterator<RecordItem> values,

OutputCollector<IntWritable, RecordItem> output, Reporter reporter) Hàm này thực hiện các cơng việc chính nhƣ sau:

 Tính tổng tọa độ của các điểm thuộc cùng cụm

 Tính trung bình cộng và gửi kết quả đầu ra thơng qua cặp giá trị

<IntWritable, RecordItem> trong đĩ key cĩ kiểu IntWritable và giá trị là số thứ tự của trọng tâm, value cĩ kiểu RecordItem và giá trị là vector trọng tâm mới.

Ngồi ra cũng cịn một số hàm:

o void mainKmean(): là hàm điều phối hoạt động của hai hàm Map và Reduce o void capNhatTrongTamMoi(): để cập nhật lại trọng tâm mới bằng cách đọc file thu

đƣợc ở đầu ra của hàm reduce và đọc nĩ vào mảng các trọng tâm o boolean hoiTu(): để kiểm tra tính hội tụ của trọng tâm

o void inTrongTam(): để hiển thị nội dung của các trọng tâm Kết quả của việc thực thi sẽ đƣợc trình bày rõ ràng hơn trong phần 4.2

4.1.2. Nạve Bayes

Với cấu trúc tƣơng tự, việc cài đặt Nạve Bayes áp dụng mơ hình tốn MapReduce trên Hadoop cũng cĩ cấu trúc nhƣ việc áp dụng với k-means.

Đầu tiên, cũng là việc xây dƣng lớp chứa nội dung của văn bản sau khi đã đƣợc vector hĩa cĩ cấu trúc nhƣ sau:

public class RecordItem implements Writable {

public int[] oneRecord; //Nội dung của vector

public int classifier; //Là lớp phân loại văn bản để tranning

public int oneRecordLength;//số chiều của vector

}

Dữ liệu đƣợc lƣu dƣới dạng SequenceFile và lƣu phân tán trên cụm các máy Hadoop. Trong phần này, vẫn sử cấu trúc dữ liệu với k-means. Sau đĩ xây dựng hàm map và hàm reduce nhƣ sau:

Hàm map:

void map(IntWritable key, RecordItem value,

OutputCollector<Text, IntWritable> output, Reporter reporter)

Một phần của tài liệu Đồ án: Mô hình Mapreduce và ứng dụng của Bigdata (Trang 46 - 57)