- vừa được xem lúc

Paper reading | BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer

0 0 6

Người đăng: Viblo AI

Theo Viblo Asia

1. Động lực

Việc mô hình hóa mối quan tâm của người dùng dựa vào lịch sử hành vi là rất quan trọng đối với mọi hệ thống gợi ý. Các phương pháp trước đây sử dụng các sequential neural network để encode lịch sử tương tác của người dùng từ trái sang phải thành các biểu diễn ẩn để thực hiện gợi ý. Mặc dù có những hiệu quả nhất định, tuy nhiên cách làm này vẫn tồn tại một số hạn chế:

  • Các cấu trúc đơn hướng hạn chế khả năng biểu diễn ẩn chuỗi hành vi người dùng.

  • Thường dựa trên một giả định không linh hoạt về thứ tự trong chuỗi, điều này là không thực tế.

2. Đóng góp

Để giải quyết vấn đề trên, nhóm tác giả đề xuất một sequential recommendation model có tên là BERT4Rec. Mô hình sử dụng một mạng học sâu bidirectional self-attention để mô hình hóa chuỗi hành vi người dùng. Để hạn chế rò rỉ thông tin và train model bidirectional hiệu quả hơn, nhóm tác giả áp dụng Cloze objective trong việc training, dự đoán item được mask ngẫu nhiên trong chuỗi bằng cách cùng điều chỉnh ngữ cảnh bên phải và bên trái. Bằng cách này, ta sẽ có một mô hình bidirectional representation thực hiện gợi ý bằng cách cho phép mỗi item trong lịch sử hành vi người dùng hợp nhất thông tin từ cả bên trái và phải.

3. Phương pháp

3.1. Mô tả bài toán

Ta đặt U=u1,u2,,uU\mathcal{U}={u_1, u_2, \ldots, u_{|\mathcal{U}|}} là tập các user, V=v1,v2,,vV\mathcal{V}={v_1, v_2, \ldots, v_{|\mathcal{V}|}} là tập các item và danh sách Su=[v1(u),,vt(u),,vnu(u)]\mathcal{S}*u=[v_1^{(u)}, \ldots, v_t^{(u)}, \ldots, v*{n_u}^{(u)}] là chuỗi tương tác theo thứ tự thời gian của người dùng uUu \in \mathcal{U}, trong đó vt(u)Vv_t^{(u)} \in \mathcal{V} là item mà uu đã tương tác tại timestep ttnun_u là độ dài của chuỗi tương tác của user uu. Bài toán đặt ra là cho lịch sử tương tác Su\mathcal{S}*u*, mục tiêu của hệ thống gợi ý sẽ dự đoán item mà user uu sẽ tương tác tại timestep nu+1n_u + 1. Bài toán có thể được công thức hóa như sau:

3.2. Model Architecture

Bản chất, mô hình được để xuất là sử dụng BERT cho một task mới là hệ thống gợi ý. Trong hình b, BERT4Rec được stack bởi LL lớp Bidirectional Transformer. Tại mỗi layer, mô hình lặp đi lặp lại việc sửa đổi biểu diễn của mọi vị trí bằng cách trao đổi thông tin song song qua tất cả các vị trí ở lớp trước đó. Thay vì cách học truyền thông tin liên quan một cách step by step như RNN tại hình d thì cơ chế self attention mang lại cho BERT4Rec khả năng nắm bắt trực tiếp các phần phụ thuộc ở bất kì khoảng cách nào. Điểm hay của cơ chế này là cho ta một global receptive field, trong khi các phương pháp CNN thì thường cho một receptive field hạn chế. Ngoài ra, ngược lại với RNN, selff attention có thể chạy song song được.

3.3. Transformer Layer

Cho một chuỗi input có độ dài tt, ta sẽ lặp lại việc tính toán đồng thời biểu diễn hil\boldsymbol{h}_i^l tại mỗi layer ll cho mỗi vị trí ii bằng cách sử dụng transformer layer. Ta sẽ stack hilRd\boldsymbol{h}_i^l \in \mathbb{R}^d cùng nhau thành một ma trận HlRt×d\boldsymbol{H}^l \in \mathbb{R}^{t \times d}. Việc này sẽ tận dụng khả năng tính toán đồng thời của GPU. Như trên hình a, Transformer layer Trm bao gồm 2 layer con, một Multi-Head Self-Attention sub-layer và một Position-wise Feed-Forward Network.

Multi-Head Self-Attention. Các cơ chế attention đã trở thành một phần không thể thiếu của việc sequence modeling trong nhiều nhiệm vụ khác nhau, nó cho phép nắm bắt sự phụ thuộc giữa các cặp biểu diễn mà không quan tâm đến khoảng cách của chúng trong chuỗi. Trong model, nhóm tác giả sử dụng multi-head self-attention để khai thác điểm mạnh của cơ chế này.

Đầu tiên, multi-head attention thực hiện chiếu tuyến tính Hl\boldsymbol{H}^l vào hh không gian con bằng các linear projection khác nhau và learnable. Sau đó, sử dụng hh hàm attention song song để cho ra biểu diễn output được concat và tiếp tục được project.

Trong đó, ma trận projection cho mỗi head là WiQRd×d/h,WiK\boldsymbol{W}_i^Q \in \mathbb{R}^{d \times d / h}, \boldsymbol{W}_i^K \in Rd×d/h,WiVRd×d/h\mathbb{R}^{d \times d / h}, \boldsymbol{W}_i^V \in \mathbb{R}^{d \times d / h}, and WiORd×dW_i^O \in \mathbb{R}^{d \times d} là các tham số learnable. Các tham số projection không chia sẻ giữa các layer. Tại đây, Attention function là Scaled Dot-Product Attention:

Trong đó, query QQ, key KK, và value V\boldsymbol{V} được chiếu từ cùng một ma trận Hl\boldsymbol{H}^l với các ma trận chiếu khác nhau. Temperature d/h\sqrt{d / h} được sử dụng để thu được phân phối attention mềm hơn (softer attention distribution) nhằm hạn chế gradient quá nhỏ.

Position-wise Feed-Forward Network. Để ý rằng các self-attention sub-layer chủ yếu dựa trên các phép chiếu tuyến tính. Do đó, ta phải cung cấp tính chất phi tuyến tính và tương tác giữa các chiều khác nhau cho model. Nhóm tác giả sử dụng Position-wise Feed-Forward Network cho các output của self-attention sub-layer riêng biệt và giống hệt nhau tại mỗi vị trí. Nó bao gồm 2 affine transformation cùng với Gaussian Error Linear Unit (GELU) activation như sau:

Trong đó, Φ(x)\Phi(x) là hàm phân phối tích lũy của phân phối standard gaussian, W(1)Rd×4d,W(2)R4d×d,b(1)R4d\boldsymbol{W}^{(1)} \in \mathbb{R}^{d \times 4 d}, \boldsymbol{W}^{(2)} \in \mathbb{R}^{4 d \times d}, \boldsymbol{b}^{(1)} \in \mathbb{R}^{4 d}b(2)Rd\boldsymbol{b}^{(2)} \in \mathbb{R}^d là các tham số learnable và chia sẻ giữa các vị trí. Thực tế các tham số này khác nhau giữa các layer.

Stacking Transformer Layer. Bằng các thành phần ở trên, ta đã có thể capture được tương tác giữa người dùng và item sử dụng cơ chế attention. Ta cũng có thể capture được các item transition pattern phức tạp hơn bằng cách stack các self-attention layer. Tuy nhiên, việc này làm cho mô hình sâu hơn và sẽ dẫn đến khó đào tạo hơn. Do vậy, nhóm tác giả sử dụng residual connection giữa mỗi 2 sublayer, tiếp sau đó là normalization layer. Ngoài ra, nhóm tác cũng áp dụng dropout cho đầu ra của mỗi sublayer, trước khi nó được chuẩn hóa. Công thức hóa sẽ như sau

Tổng kết lại, BERT4Rec tinh chỉnh biểu diễn ẩn của mỗi layer như sau:

3.4. Embedding Layer

Để tận dụng thông tin vị trí của chuỗi đầu vào, nhóm tác giả tích hợp Positional Embedding vào input item embedding tại phía dưới của Transformer layer stack. Cho item viv_i, biểu diễn input tương ứng hi0\boldsymbol{h}_i^0 được xây dựng bằng cách tính tổng embedding của item với positional embedding tương ứng.

Trong đó, viE\boldsymbol{v}_i \in \boldsymbol{E}dd-dimensional embedding cho item vi,piPv_i, \boldsymbol{p}_*i \in \boldsymbol{P}dd-dimensional positional embedding cho vị trí ii. Nhóm tác giả sử dụng learnable positional embedding thay vì fixed sinusoid embeddings để đạt hiệu suất tốt hơn.* Ma trận positional embedding PRN×d\mathrm{P} \in \mathbb{R}^{N \times d} cho phép model xác định phần đầu vào mà nó đang xử lý. Tuy nhiên, nó cũng đặt ra giới hạn về độ dài câu tối đa NN mà model có thể xử lý. Vì vậy, ta cần cắt bớt chuỗi đầu vào [v1,,vt][v_1, \ldots, v_t] thành NN item cuối cùng [vtN+1u,,vt][v{t-N+1}^u, \ldots, v_t] nếu t>Nt>N.

3.5. Output Layer

Sau LL layer ta thu được output HL\boldsymbol{H}^L cho tất cả item của chuỗi input. Mục tiêu tiếp theo là ta cần dự đoán item vtv_t tại time step tt biết rằng item vtv_t đã bị mask và ta cần dựa vào htL\boldsymbol{h}_t^L để dự đoán ra nó. Phân phối xác suất các item được tính như sau:

Trong đó WPW^P là learnable projection matrix, bP\boldsymbol{b}^PbO\boldsymbol{b}^O là các bias, ERV×dE \in \mathbb{R}^{|\mathcal {V}| \times d} là embedding matrix cho tập item V\mathcal{V}. Nhóm tác giả sử dụng shared item embedding matrix trong lớp đầu vào và đầu ra để hạn chế overfitting và giảm kích thước mô hình.

3.6. Model Learning

Training. Mục tiêu của các mô hình gợi ý là dự đoán item tiếp theo sẽ được tương tác. Cụ thể, trong các mô hình gợi ý đơn hướng, mục tiêu của chuỗi input [v1,,vt]\left[v_1, \ldots, v_t\right] sẽ là [v2,,vt+1]\left[v_2, \ldots, v_{t+1}\right]. Tuy nhiên, vì mô hình hiện tại mà nhóm tác giả đề xuất là mô hình 2 chiều nên biểu diễn output cuối cùng của mỗi item có thể mang thông tin của item mục tiêu. Điều này làm cho việc dự đoán trở nên tầm thường và model sẽ không học thêm được gì hữu ích. Một giải pháp đơn giản cho vấn đề này là ta sẽ tạo t1t-1 mẫu từ chuỗi lịch sử hành vi người dùng ban đầu có độ dài tt, sau đó encode mỗi chuỗi con bằng bidirectional model và dùng để dự đoán item mục tiêu. Cách tiếp cận này có một nhược điểm là rất tốn thời gian và tài nguyên do ta cần tạo mẫu cho mỗi vị trí và thực hiện dự đoán một cách riêng biệt.

Để cho việc training trở nên hiệu quả hơn, nhóm tác sử dụng objective: Cloze task. Hiểu đơn giản là ta sẽ che đi một số t ừ và phải dự đoán từ đó là gì dựa vào các từ còn lại. Trong trường hợp này, tại mỗi bước training, nhóm tác giả sẽ ngẫu nhiên mask item trong chuỗi đầu vào với tỷ lệ là ρ\rho và sau đó dự đoán id của item bị mask đó dựa vào context bên trái và bên phải. Cụ thể như mô tả dưới:

Hàm loss được sử dụng là negative log-likelihood

Trong đó SuS_u^{\prime} là phiên bản đã mask của lịch sử hành vi người dùng Su,Sum\mathcal{S}_u, \mathcal{S}_u^m là các item được mask ngẫu nhiên trong đó, vmv_m^* là nhãn của item vmv_m bị mask.

Một điểm lợi của Cloze task là nó có thể sinh nhiều mẫu để train model. Giả sử với chuỗi có độ dài nn, BERT4Rec có thể xác định (n k)\left(n k\right) mẫu (trong đó ta mask ngẫu nhiên kk item) tại nhiều epoch. Điều này cho phép việc training bidirectional model hiệu quả hơn.

Testing. Cách làm trên bị phát sinh một thiếu sót là Cloze objective thực hiện dự đoán item bị mask hiện tại trong khi hệ thống gợi ý cần dự đoán item ở trong tương lai. Để giải quyết vấn đề này, nhóm tác giả thêm một token "[mask]" vào cuối chuỗi hành vi của người dùng và dự đoán item tiếp theo dựa vào biểu diễn ẩn cuối cùng của token này, rất tường minh 😄

4. Thực nghiệm

Bảng dưới là kết quả so sánh phương pháp đề xuất với các phương pháp khác trên 4 bộ dữ liệu khác nhau.

Nhận thấy rằng kết quả của BERT4Rec cao hơn các method còn lại. Vậy thì sự hiệu quả này đến từ bidirectional self-attention model hay từ Cloze objective? Để trả lời câu hỏi này, nhóm tác giả tách biệt tác động của hai yếu tố bằng cách hạn chế Cloze task chỉ mask một item tại một thời điểm. Theo cách này, sự khác biệt chính giữa BERT4Rec (với 1 mask) và SASRec là BERT4Rec dự đoán mục tiêu dựa vào cả context bên trái và bên phải. Kết quả cho thấy BERT4Rec với 1 mask vượt trội đáng kể so với SASRec trên tất cả các chỉ số. Nó cho thấy tầm quan trọng của các biểu diễn hai chiều đối trong việc gợi ý tuần tự. Ngoài ra, hai hàng cuối cùng chỉ ra rằng Cloze objective cũng cải thiện hiệu suất.

Hình dưới là heatmap mô tả trung bình trọng số của vị trí bị mask cuối cùng. Ta có thể có một số quan sát quan trọng rằng:

  • Attention là đa dạng với các head và layer khác nhau

  • Các model đơn chiều chỉ tập trung vào một phía, model hai chiều tập trung vào cả 2 phía.

Nhóm tác giả đánh giá tác động của dd khác nhau và nhận thấy rằng, hiệu suất tốt đạt được khi d64d \geq 64

Nhóm tác giả cũng đánh giá tác động của ρ\rho lên hiệu suất mô hình. Kết quả được visualize trong biểu đồ dưới đây. Đúng ra ρ\rho chạy từ 0.1 tới 0.9 nhưng tác giả để tên trục hoành nhầm là Dimensionality 😄

Với độ dài input NN khác nhau, kết quả như sau. Nhận thấy rằng với NN lớn thì chưa chắc model cho ra hiệu suất tốt vì có thể có thêm nhiều noise.

Bảng dưới thể hiện mức độ ảnh hưởng của các thành phần trong model elên độ chính xác.

5. Kết luận

Điểm đáng chú ý của bài báo là khai thác ý tưởng bidirectional model để học được context cả bên trái và bên phải. Tuy nhiên, method mà bài báo đề xuất bị ảnh hưởng khá nhiều đến các tham số độc lập. Các tham số này cần được tinh chỉnh sao cho phù hợp với những bộ dữ liệu khác nhau.

6. Tham khảo

[1] BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer

[2] FeiSun/BERT4Rec: BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer (github.com)

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tổng quan về Recommender System [Recommender System cơ bản - Phần 1]

Giới thiệu. Recommender System là một trong những ứng dụng phổ biến nhất của khoa học dữ liệu ngày nay.

0 0 354

- vừa được xem lúc

Xây dựng Content-based Filtering RS [Recommender System cơ bản - Phần 2]

Tại bài viết trước, chúng ta đã tìm hiểu tổng quan về Recommender System. Tại bài viết này, chúng ta tiếp tục tìm hiểu thuật toán và xây dựng một hệ thống Content-based Recommender System đơn giản với

0 0 252

- vừa được xem lúc

[Paper explained] NISER: Normalized Item and Session Representations to Handle Popularity Bias

Nếu đã dùng qua các trang web như YouTube, có thể bạn đã từng để ý rằng một khi các bạn đã click vào một video nào đó, hệ thống của YouTube sẽ tự động gợi ý các video liên quan ở autoplay list hay là

0 0 10

- vừa được xem lúc

Paper reading | Neural News Recommendation with Long and Short-term User Representations

1. Động lực.

0 0 24

- vừa được xem lúc

Paper reading | Neural News Recommendation with Multi-Head Self-Attention

1. Động lực.

0 0 17

- vừa được xem lúc

Paper reading | Neural News Recommendation with Multi-Head Self-Attention

1. Động lực.

0 0 3