Allrank é uma estrutura baseada em Pytorch para o treinamento de modelos de aprendizado neural (LTR), apresentando implementações de:
Allrank fornece uma maneira fácil e flexível de experimentar vários modelos de rede neural LTR e funções de perda. É fácil adicionar uma perda personalizada e configurar o modelo e o procedimento de treinamento. Esperamos que Allrank facilite a pesquisa na LTR neural e suas aplicações industriais.
Para ajudá -lo a começar, fornecemos um script run_example.sh que gera dados de classificação dummy no formato LIBSVM e treina um modelo de transformador nos dados usando o arquivo de configuração de exemplo config.json . Depois de executar o script, os dados fictícios podem ser encontrados no diretório dummy_data e os resultados do experimento no diretório test_run . Para executar o exemplo, o Docker é necessário.
Como os binários da tocha são diferentes para a versão GPU e CPU e GPU, não funciona na CPU - é preciso selecionar e criar a versão apropriada da imagem do docker.
Para fazer isso, passe gpu ou cpu como arch_version Build-Arg em
docker build --build-arg arch_version=${ARCH_VERSION}
Ao ligar para run_example.sh você pode selecionar a versão correta por um primeiro argumento de linha CMD, por exemplo,
run_example.sh gpu ...
com cpu sendo o padrão, se não for especificado.
Para treinar seu próprio modelo, configure seu experimento no arquivo config.json e execute
python allrank/main.py --config_file_name allrank/config.json --run_id <the_name_of_your_experiment> --job_dir <the_place_to_save_results>
Todos os hiperparâmetros do procedimento de treinamento: ou seja, definição do modelo, localização de dados, perdas e métricas usadas, hiperparametros de treinamento etc. são controlados pelo arquivo config.json . Fornecemos um arquivo de modelo config_template.json onde atributos suportados, seu significado e possíveis valores são explicados. Observe que, seguindo a convenção MSLR-WEB30K, seu arquivo LIBSVM com dados de treinamento deve ser nomeado train.txt . Você pode especificar o nome do conjunto de dados de validação (por exemplo, válido ou teste) na configuração. Os resultados serão salvos sob o caminho <job_dir>/results/<run_id>
O Google Cloud Storage é suportado em Allrank como um local para dados e resultados do trabalho.
Para experimentar sua própria perda personalizada, você precisa implementar uma função que leva dois tensores (previsão de modelos e verdade do solo) como entrada e colocá -la no pacote de losses , certificando -se de que esteja exposto em um nível de embalagem. Para usá -lo no treinamento, basta passar o nome (e args, se seu método de perda tiver alguns hiperparâmetros) da sua função no local correto no arquivo de configuração:
"loss": {
"name": "yourLoss",
"args": {
"arg1": val1,
"arg2: val2
}
}
Para aplicar um modelo de clique, você precisa primeiro ter um modelo Allrank treinado. Em seguida, corra:
python allrank/rank_and_click.py --input-model-path <path_to_the_model_weights_file> --roles <comma_separated_list_of_ds_roles_to_process eg train,valid> --config_file_name allrank/config.json --run_id <the_name_of_your_experiment> --job_dir <the_place_to_save_results>
O modelo será usado para classificar todas as ardósias do conjunto de dados especificado na configuração. Em seguida - Um modelo de clique configurado no Config será aplicado e o conjunto de dados de cliques resultantes será gravado em <job_dir>/results/<run_id> em um formato LIBSVM. O caminho para o diretório de resultados pode ser usado como uma entrada para outro treinamento do modelo Allrank.
Você deve executar scripts/ci.sh para verificar se o código passa diretrizes de estilo e nos testes de unidade.
Essa estrutura foi desenvolvida para apoiar o aprendizado de conhecimento do projeto de pesquisa para classificar com a auto-atenção. Se você usar o AllRank em sua pesquisa, cite:
@article{Pobrotyn2020ContextAwareLT,
title={Context-Aware Learning to Rank with Self-Attention},
author={Przemyslaw Pobrotyn and Tomasz Bartczak and Mikolaj Synowiec and Radoslaw Bialobrzeski and Jaroslaw Bojar},
journal={ArXiv},
year={2020},
volume={abs/2005.10084}
}
Além disso, se você usar a função de perda neuralndcg, cite o trabalho correspondente, neuralndcg: otimização direta de uma métrica de classificação por meio do relaxamento diferenciável de classificação:
@article{Pobrotyn2021NeuralNDCG,
title={NeuralNDCG: Direct Optimisation of a Ranking Metric via Differentiable Relaxation of Sorting},
author={Przemyslaw Pobrotyn and Radoslaw Bialobrzeski},
journal={ArXiv},
year={2021},
volume={abs/2102.07831}
}
Licença Apache 2