apt-get update
apt-get install build-essential -y
Preparing enviroment:
(for torch 1.12.0)
Option 1:
pip install pyg-lib torch-scatter torch-sparse torch-cluster torch-spline-conv torch-geometric -f https://data.pyg.org/whl/torch-1.12.0+cu113.html
export LD_LIBRARY_PATH="/opt/conda/lib/:$LD_LIBRARY_PATH"
Option 2:
pip install torch==1.12.0+cu113 torchvision==0.13.0+cu113 torchaudio==0.12.0 --extra-index-url https://download.pytorch.org/whl/cu113
pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-${TORCH}+${CUDA}.html
pip install torch-sparse -f https://pytorch-geometric.com/whl/torch-${TORCH}+${CUDA}.html
pip install torch-cluster -f https://pytorch-geometric.com/whl/torch-${TORCH}+${CUDA}.html
pip install torch-spline-conv -f https://pytorch-geometric.com/whl/torch-${TORCH}+${CUDA}.html
pip install torch-geometric
pip install -r requirements.txt
For the case of "command 'x86_64-linux-gnu-gcc' failed with exit status 1":
apt-get install python3.x-dev
python run_bias_crs.py --config config/crs/tgredial/tgredial.yaml
Les expériences ont été menées sur les modèles ReDial, KGSF, KBRD et TGReDial et évaluées sur les ensembles de données ReDIAL et TGReDIAL.
La génération et la préparation des dialogues synthétiques sont implémentées d'abord par [data_prep_gen_ .ipynb] puis [gen_convert_ .ipynb] dans le dossier data_aug (* fait référence au nom des ensembles de données).
L'augmentation des données est implémentée dans base.py dans [bias_crs/data/dataloader/base.py], tandis que les modifications apportées au nombre d'éléments à augmenter via popNudge peuvent être modifiées à partir d'ici.
Pour chaque exécution, les résultats expérimentaux seront enregistrés dans le répertoire [data/bias/] et suivis des dossiers nommés d'après les noms de modèles et d'ensembles de données et intitulés [bias_anlytic_data.csv].
L'analyse correspondante des résultats de recommandation via les scores de popularité inter-épisodes et de popularité orientée intention de l'utilisateur est accessible via le dossier de [analyse].
from scipy.stats.stats import pearsonr
def compute_pop_scores(pop_score_dict, items):
return [pop_score_dict[item] if item in pop_score_dict else 0.0 for item in items]
pop_scores = [compute_pop_scores(pop_score_dict, row['Prediction_items']) for _, row in data.iterrows()]
data['pop_scores'] = pop_scores
new_conv = True
cep_scores = []
for idx, row in data.iterrows():
# set the default value to the first episode
if new_conv:
new_conv = False
cep_scores.append(0.5)
else:
if idx+1 < len(data) and row['conv_id'] != data.at[idx+1, 'conv_id']:
new_conv=True
pearsonr_score = np.abs(pearsonr(row['pop_scores'], data.at[idx-1, 'pop_scores'])[0])
cep_scores.append(pearsonr_score)
data['cep_score'] = cep_scores
data['cep_pop_score'] = data['cep_score'] * data['pop_bias']
data['target_pop_score'] = data['target_item_index'].map(pop_score_dict)
data['UIOP'] = np.abs(data['pop_bias'] - data['target_pop_score'])
@inproceedings{
title={Improving Conversational Recommendation Systems via Bias Analysis and Language-Model-Enhanced Data Augmentation},
author={Xi Wang, Hossein A. Rahmani, Jiqun Liu, Emine Yilmaz}
booktitle={Proceedings of EMNLP 2023 (Findings)}
year={2023}
}
Ce référentiel est développé sur la base du framework CRSLab [https://github.com/RUCAIBox/CRSLab]. Merci à leurs contributions inestimables pour permettre un développement et une évaluation systématiques des modèles au sein de ce projet.