Papers › BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer

BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer

14 Apr 2019arXiv:1904.06690archive 2025-07-28

Fei Sun, Jun Liu, Jian Wu, Changhua Pei, Xiao Lin, Wenwu Ou, Peng Jiang

Modeling users' dynamic and evolving preferences from their historical behaviors is challenging and crucial for recommendation systems. Previous methods employ sequential neural networks (e.g., Recurrent Neural Network) to encode users' historical interactions from left to right into hidden representations for making recommendations. Although these methods achieve satisfactory results, they often assume a rigidly ordered sequence which is not always practical. We argue that such left-to-right unidirectional architectures restrict the power of the historical sequence representations. For this purpose, we introduce a Bidirectional Encoder Representations from Transformers for sequential Recommendation (BERT4Rec). However, jointly conditioning on both left and right context in deep bidirectional model would make the training become trivial since each item can indirectly "see the target item". To address this problem, we train the bidirectional model using the Cloze task, predicting the masked items in the sequence by jointly conditioning on their left and right context. Comparing with predicting the next item at each position in a sequence, the Cloze task can produce more samples to train a more powerful bidirectional model. Extensive experiments on four benchmark datasets show that our model outperforms various state-of-the-art sequential models consistently.

PaperPDFCodeCode Syntology ran

In Syntology Open this paper in Syntology's Atlas, the map of the papers in Syntology's graph and their citations.

For agents, Syntology's MCP tool lists every function and class Syntology harvested from this paper and whether it ran (how to connect): get_harvested_code_for_paper(arxiv_id="1904.06690")

Code

Syntology Ran 2 of 6 code samples harvested from 2 repositories linked to this paper; 4 have no recorded run. Of those that ran: 1 ran · violated contract; 1 ran · our draft was wrong.

By repository: official repository: 5 samples from 1 repository, 1 ran; community (archive-listed): 1 sample from 1 repository, 1 ran. The run record, sample by sample. “Ran” means executed on a synthesized input, not that the code is correct or reproduces the paper.

FeiSun/BERT4Rec officialmentioned in papertfApache-2.0 report
UlionTse/mlgb mentioned on GitHubpytorch report
tunghia1890/BERT4Rec_TF2x mentioned on GitHubtf report
xinyooo/ALBERT4Rec mentioned on GitHubpytorch report

Repository list and official/mentioned flags are the archive's, frozen 2025-07-28. Reachability, where shown, is from one Syntology probe window (2026-09-16 to 2026-09-18); repositories not probed show nothing. GitHub stars are not tracked.

Code Syntology ran Syntology

6 samples harvested; 2 ran; 0 honoured the contract we drafted; 4 have no recorded run. Read from Syntology's graph 2026-09-24; that is when this build read the record, not when the samples ran.

1ran · violated contract
1ran · our draft was wrong
4unverified

Licence: 1 of the 6 samples is pointer only, meaning Syntology does not serve that copy's text. This page shows no code text for any sample; each one links to its file in the repository.

Harvested from 2 repositories linked to this paper, official or community; each sample names its own and says which. “Ran” means the sample executed on a synthesized input. It does not mean the output is correct, and nothing here reproduces the paper's results. “Honoured” and “violated” refer to a contract Syntology drafted from the code itself; “our draft was wrong” and “fixture could not drive it” are failures of Syntology's instrument, not of the code.

Each sample ends with its code_sha256, Syntology's identity for that exact code. An agent fetches the stored sample with Syntology's MCP tool get_code(code_sha256="…") (how to connect); click an identity to copy that call.

Repository labels, per sample. official repository: The archive marks this repository official for the paper. named in the paper: The archive records that the paper mentions this repository; it is not marked official. community (archive-listed): In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper. found in paper text by Syntology: Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted. community: Not in the archive's code links for this paper; a community repository Syntology harvested. Samples from a repository marked official are listed first. Licence labels name the repository's licence as recorded at harvest. “Pointer only” means Syntology does not serve that copy's text, for one of four reasons: no licence file was found; the licence was not identified; the licence is recorded as permissive but that copy's record is not marked cleared; or the licence is outside the permissive list Syntology serves text under (MIT, Apache-2.0, BSD and similar). Some licences outside that list permit redistribution, such as WTFPL, and GPL-3.0 under its conditions; they are simply not on the list. Hover a licence label for the reason. File links open the file on GitHub at the default branch, which may have changed since the harvest.

convert_by_vocab FeiSun/BERT4Rec/vocab.py official repository ran · our draft was wrong Apache-2.0 (permissive) · bf6088a6a68ef09c · report
data_partition FeiSun/BERT4Rec/util.py official repository unverified Apache-2.0 (permissive) · c6bb4fb1768a7890 · report
gelu FeiSun/BERT4Rec/modeling.py official repository unverified Apache-2.0 (permissive) · 50fd1894a0a439a6 · report
get_activation FeiSun/BERT4Rec/modeling.py official repository unverified Apache-2.0 (permissive) · 3daeda6c430de0b5 · report
get_assignment_map_from_checkpoint FeiSun/BERT4Rec/modeling.py official repository unverified Apache-2.0 (permissive) · 50958618b65e514e · report
str2bool jinweiluo/BERT4Rec_AC/ml1m.py community (archive-listed) ran · violated contract no licence file found · pointer only · 7373b3408ee13c1c · report

Tasks

Recommendation SystemsSequential Recommendation

Results from the paper archive 2025-07-28

TaskDatasetModelMetricValueRank at snapshotLeaderboardReport
Recommendation Systems MovieLens 1M BERT4Rec HR@10 (full corpus) 0.2843 #30 of 31 Archive leaderboard report
Recommendation Systems MovieLens 1M BERT4Rec NDCG@10 (full corpus) 0.1537 #30 of 31 Archive leaderboard report
Recommendation Systems MovieLens 20M BERT4Rec HR@10 (full corpus) 0.2816 #17 of 18 Archive leaderboard report
Recommendation Systems MovieLens 20M BERT4Rec nDCG@10 (full corpus) 0.1703 #17 of 18 Archive leaderboard report

Ranks are positions in the archive's leaderboards as they stood at the 2025-07-28 snapshot. Results published since then are not among these rows, so a rank here is not a current standing.

Report a problem or propose a change · a person checks every report against the paper or source before anything changes; decisions are listed on /corrections