pip3 install -r requirements.txt
. Certains forfaits de base sont présentés ci-dessous : pytorch==2.1.0
deepspeed==0.14.2
transformers==4.41.1
lightning==2.4.0
flash-attn==2.5.9post1
fbgemm-gpu==0.5.0 [optional for HSTU]
sentencepiece==0.2.0 [optional for Baichuan2]
PixelRec
et Amazon Book Reviews
:PixelRec
et les informations sur les éléments à partir de PixelRec et placez-les dans l'ensemble de données et le dossier d'informations.Amazon Book Reviews
, traitez-les par process_books.py
et placez-les dans l'ensemble de données et le dossier d'informations. Nous fournissons également des informations sur les interactions et les éléments des livres après traitement.├── dataset # Store Interactions
│ ├── amazon_books.csv
│ ├── Pixel1M.csv
│ ├── Pixel200K.csv
│ └── Pixel8M.csv
└── information # Store Item Information
├── amazon_books.csv
├── Pixel1M.csv
├── Pixel200K.csv
└── Pixel8M.csv
Pour entraîner HLLM sur PixelRec / Amazon Book Reviews, vous pouvez exécuter la commande suivante.
Définissez
master_addr
,master_port
,nproc_per_node
,nnodes
etnode_rank
dans les variables d'environnement pour la formation multi-nœuds.
Tous les hyper-paramètres (à l'exception de la configuration du modèle) peuvent être trouvés dans code/REC/utils/argument_list.py et transmis via CLI. D'autres hyper-paramètres du modèle se trouvent dans
IDNet/*
ouHLLM/*
.
# Item and User LLM are initialized by specific pretrain_dir.
python3 main . py
- - config_file overall / LLM_deepspeed . yaml HLLM / HLLM . yaml # We use deepspeed for training by default.
- - loss nce
- - epochs 5
- - dataset { Pixel200K / Pixel1M / Pixel8M / amazon_books }
- - train_batch_size 16
- - MAX_TEXT_LENGTH 256
- - MAX_ITEM_LIST_LENGTH 10
- - checkpoint_dir saved_path
- - optim_args . learning_rate 1e-4
- - item_pretrain_dir item_pretrain_dir # Set to LLM dir.
- - user_pretrain_dir user_pretrain_dir # Set to LLM dir.
- - text_path text_path # Use absolute path to text files.
- - text_keys '[ " title " , " tag " , " description " ]' # Please remove tag in books dataset.
Vous pouvez utiliser
--gradient_checkpointing True
et--stage 3
avec deepspeed pour économiser de la mémoire.
Vous pouvez également entraîner des modèles basés sur l'ID à l'aide de la commande suivante.
python3 main . py
- - config_file overall / ID . yaml IDNet / { hstu / sasrec / llama_id }. yaml
- - loss nce
- - epochs 201
- - dataset { Pixel200K / Pixel1M / Pixel8M / amazon_books }
- - train_batch_size 64
- - MAX_ITEM_LIST_LENGTH 10
- - optim_args . learning_rate 1e-4
Pour reproduire nos expériences sur Pixel8M et Books, vous pouvez exécuter des scripts dans le dossier reproduce
. Vous devriez pouvoir reproduire les résultats suivants.
Pour les modèles basés sur l'ID, nous suivons les hyper-paramètres de PixelRec et HSTU.
Méthode | Ensemble de données | Points négatifs | R@10 | R@50 | R@200 | N@10 | N@50 | N@200 |
---|---|---|---|---|---|---|---|---|
HSTU | Pixel8M | 5632 | 4,83 | 10h30 | 18h28 | 2,75 | 3,94 | 5.13 |
SASRec | Pixel8M | 5632 | 5.08 | 10.62 | 18.64 | 2,92 | 4.12 | 5.32 |
HLLM-1B | Pixel8M | 5632 | 6.13 | 12h48 | 21h18 | 3,54 | 4,92 | 6.22 |
HSTU-grand | Livres | 512 | 5h00 | 11.29 | 20.13 | 2,78 | 4.14 | 5.47 |
SASRec | Livres | 512 | 5h35 | 11.91 | 21.02 | 2,98 | 4h40 | 5,76 |
HLLM-1B | Livres | 512 | 6,97 | 14.61 | 24h78 | 3,98 | 5,64 | 7.16 |
HSTU-grand | Livres | 28672 | 6h50 | 12.22 | 19.93 | 4.04 | 5.28 | 6.44 |
HLLM-1B | Livres | 28672 | 9.28 | 17h34 | 27.22 | 5,65 | 7.41 | 8,89 |
HLLM-7B | Livres | 28672 | 9h39 | 17h65 | 27.59 | 5,69 | 7h50 | 8,99 |
Nous fournissons des modèles HLLM affinés pour l'évaluation, que vous pouvez télécharger à partir des liens suivants ou de hugginface. N'oubliez pas de mettre les poids sur checkpoint_dir
.
Modèle | Ensemble de données | Poids |
---|---|---|
HLLM-1B | Pixel8M | HLLM-1B-Pixel8M |
HLLM-1B | Livres | HLLM-1B-Livres-neg512 |
HLLM-1B | Livres | HLLM-1B-Livres |
HLLM-7B | Livres | HLLM-7B-Livres |
Veuillez vous assurer du respect des licences respectives de TinyLlama-1.1B et Baichuan2-7B lors de l'utilisation des poids correspondants.
Ensuite, vous pouvez évaluer les modèles par la commande suivante (identique à la formation mais val_only).
python3 main . py
- - config_file overall / LLM_deepspeed . yaml HLLM / HLLM . yaml # We use deepspeed for training by default.
- - loss nce
- - epochs 5
- - dataset { Pixel200K / Pixel1M / Pixel8M / amazon_books }
- - train_batch_size 16
- - MAX_TEXT_LENGTH 256
- - MAX_ITEM_LIST_LENGTH 10
- - checkpoint_dir saved_path
- - optim_args . learning_rate 1e-4
- - item_pretrain_dir item_pretrain_dir # Set to LLM dir.
- - user_pretrain_dir user_pretrain_dir # Set to LLM dir.
- - text_path text_path # Use absolute path to text files.
- - text_keys '[ " title " , " tag " , " description " ]' # Please remove tag in books dataset.
- - val_only True # Add this for evaluation
Si notre travail a été utile à votre travail, n'hésitez pas à nous donner une étoile ⭐ ou à nous citer en utilisant :
@article{HLLM,
title={HLLM: Enhancing Sequential Recommendations via Hierarchical Large Language Models for Item and User Modeling},
author={Junyi Chen and Lu Chi and Bingyue Peng and Zehuan Yuan},
journal={arXiv preprint arXiv:2409.12740},
year={2024}
}
Merci aux excellents référentiels de code RecBole, VisRec, PixelRec et HSTU ! HLLM est publié sous la licence Apache 2.0, certains codes sont modifiés à partir de HSTU et PixelRec, qui sont respectivement publiés sous la licence Apache 2.0 et la licence MIT.