Cài đặt thuật toán cải tiến

Một phần của tài liệu (LUẬN văn THẠC sĩ) thuật toán đánh chỉ mục ngược với mapreduce và ứng dụng trong việc đánh giá ý kiến của học sinh hòa bình trên mạng xã hội​ (Trang 44 - 46)

Các thuật toán lập chỉ mục ngược được trình bày trong phần trước phục vụ như là một cơ sở hợp lý. Tuy nhiên, có một khả năng mở rộng ý nghĩa bottleneck (nghẽn cổ chai): thuật toán giả định rằng có đủ bộ nhớ để giữ tất cả các tin đăng liên quan cùng một term. Vì framework MapReduce cơ bản không đảm bảo về trật tự của các value liên quan đến cùng một key, reducer đầu tiên buffers tất cả các tin đăng và sau đó thực hiện một sắp xếp trong bộ nhớ trước khi ghi vào đĩa. Đối với phục hồi hiệu quả, thông tin đăng cần phải được sắp xếp theo id tài liệu. Tuy nhiên, khi bộ sưu tập trở nên lớn hơn, danh sách tin đăng trở nên dài hơn, và tại một số điểm trong thời gian, reducer sẽ hết bộ nhớ.

Có một giải pháp đơn giản cho vấn đề này. Kể từ khi framework thực hiện đảm bảo rằng các key đến được với từng reducer trong thứ tự sắp xếp, một cách để vượt qua những khả năng mở rộng bottleneck là để cho thời gian chạy MapReduce làm các phân loại cho chúng ta. Thay vì phát ra cặp key-value của các loại sau đây:

Người ta phát ra cặp key-value trung bình của các loại thay vào đó: (tuple <t, docid>, tf f)

Nói cách khác, key là một tuple chứa các thuật ngữ và các id tài liệu, trong khi value là tần số term. Đây chính là mẫu thiết kế chuyển đổi value-to-key chính xác được giới thiệu. Với thay đổi này, Mô hình lập trình đảm bảo rằng các thông tin đăng đến được theo thứ tự đúng. Điều này, kết hợp với thực tế mà reducer có thể giữ trạng thái trên nhiều key, cho phép danh sách tin đăng phải được tạo ra với việc sử dụng bộ nhớ tối thiểu. Một chi tiết là, hãy nhớ rằng chúng ta phải xác định một partitioner tùy chỉnh để đảm bảo rằng tất cả các tuples với cùng một term được xáo trộn đến cùng một reducer.

Các thuật toán MapReduce ngược lập chỉ mục sửa đổi (revised MapReduce inverted indexing algorithm) được thể hiện trong thuật toán Mapper vẫn không thay đổi đối với hầu hết các phần, khác hơn sự khác biệt trong các cặp key-value trung gian. Phương pháp Reduce được gọi cho mỗi key (tức là, ht, ni), và do thiết kế, sẽ chỉ có một value liên quan tới mỗi key. Đối với mỗi cặp key-value, một bài viết có thể được bổ sung trực tiếp vào danh sách tin đăng. Khi thông tin đăng được đảm bảo đến đúng thứ tự sắp xếp bởi id tài liệu, chúng có thể từng bước mã hóa trong hình thức nén - do đảm bảo một bộ nhớ nhỏ. Cuối cùng, khi tất cả các tin đăng liên quan đến cùng một term đã được xử lý (tức là, t 6 = tprev), toàn bộ danh sách thông tin đăng được phát ra. Danh sách đăng cuối cùng phải được viết ra trong phương thức Close. Với các thuật toán cơ bản, trọng tải có thể dễ dàng thay đổi: bằng việc đơn giản thay thế các giá trị trung gian f (tần số term) với bất cứ điều gì khác đang mong muốn (Ví dụ, thời hạn thông tin định vị).

Có một chi tiết mà ta phải nắm rõ khi xây dựng chỉ số đảo ngược. Vì gần như tất cả các mô hình retrieval đi vào chiều dài tài liệu tài khoản khi tính toán điểm số truy vấn tài liệu, thông tin này cũng phải được giải nén. Mặc dù việc thể hiện tính toán này là minh bạch như các job MapReduce khác, nhiệm vụ này thực sự có thể được xếp vào quá trình lập chỉ mục ngược. Khi xử lý các term trong mỗi tài liệu, chiều dài tài liệu được biết đến, và có thể được viết ra như "phụ liệu" trực tiếp để HDFS. Chúng ta có thể tận dụng lợi thế của các khả năng cho một mapper để giữ trạng thái qua xử lý nhiều tài liệu theo cách sau đây: một mảng kết hợp trong bộ nhớ (in-memory associative) được tạo ra để lưu trữ độ dài tài liệu, được phổ biến như mỗi tài liệu được xử lý. Khi mapper kết thúc xử lý hồ sơ đầu vào (input records), độ dài tài liệu được viết ra để HDFS (tức là, trong các phương thức Close). Cách tiếp cận này thực chất là một biến thể của trong-mapper kết hợp mô hình (in-mapper combining pattern). Dữ liệu chiều dài tài liệu (Document length data) kết thúc trong m file khác nhau, trong đó m là số mapper; những tập tin này sau đó được hợp nhất thành một đại diện nhỏ gọn hơn. Ngoài ra, thông tin chiều dài tài liệu có thể được phát ra trong cặp key-value đặc

biệt bởi các mapper. Một người sau đó phải viết partitioner tùy chỉnh để các cặp key- value đặc biệt được xáo trộn đến một reducer đơn, trong đó sẽ chịu trách nhiệm viết ra chiều dài dữ liệu tách biệt với danh mục tin đăng.

Thuật toán Tập chỉ mục ngược mở rộng (5) 1: class Mapper

2: method Map (docid n, doc d) 3: H ← new AssociativeArray 4: for all term t ∈doc d do

5: H{t} ← H{t} + 1

6: for all term t H do

7: Emit (tuple (t, n), tf H{t}) 1: class Reducer

2: method Initialize

3: tprev ←

4: P ← new PostingsList

5: method Reduce (tuple (t, n), tf [f ]) 6: if t ƒ= tprev tprev ƒ= ∅ then

7: Emit (term tprev, postings P ) 8: P.Reset ()

9: P.Add ( (n, f))

10: tprev ← t

11: method Close

12: Emit (term t, postings P )

Một phần của tài liệu (LUẬN văn THẠC sĩ) thuật toán đánh chỉ mục ngược với mapreduce và ứng dụng trong việc đánh giá ý kiến của học sinh hòa bình trên mạng xã hội​ (Trang 44 - 46)

Tải bản đầy đủ (PDF)

(77 trang)