allRank是一个训练学习库神经模型的框架

allrank-mod的Python项目详细描述


https://github.com/allegro/allRank的修改版本

学习在Pythorch中排名

关于

allRank是一个基于Pythorch的框架,用于训练神经学习排名(LTR)模型,其特点是实现:

  • 公共点态、成对和列表损失函数
  • 全连接和变压器式评分功能
  • 常用的评价指标如标准化折现累积增益(NDCG)和平均倒数排名(MRR)
  • 点击模型在模拟点击数据上的实验研究

动机

allRank提供了一种简单灵活的方法来实验各种LTR神经网络模型和损失函数。 添加自定义损耗、配置模型和训练过程非常简单。 我们希望allRank能促进神经LTR的研究及其工业应用。在

特点

实现的损失函数:

  1. ListNet(用于二进制和分级相关性)
  2. 利斯特姆莱
  3. 兰克内特
  4. 顺序损失
  5. 兰姆达兰克
  6. 兰达罗斯
  7. 近似NDCG
  8. RMSE公司

入门指南

为了帮助您开始,我们提供了一个run_example.sh脚本,该脚本生成libsvm格式的虚拟排名数据并进行训练 使用提供的示例config.json配置文件对数据进行转换。运行脚本后,可以在dummy_data目录中找到虚拟数据 实验结果在test_run目录中。要运行该示例,需要Docker。在

配置您的模型和培训

要训练您自己的模型,请在config.json文件中配置您的实验并运行

python allrank/main.py --config_file_name allrank/config.json --run_id <the_name_of_your_experiment> --job_dir <the_place_to_save_results>

训练过程中的所有超参数:即模型定义、数据定位、丢失和使用的度量、训练超参数等都是受控的 通过config.json文件。我们提供了一个模板文件config_template.json,其中解释了支持的属性、它们的含义和可能的值。 注意,遵循MSLR-WEB30K约定,包含训练数据的libsvm文件应该命名为train.txt。您可以指定验证数据集的名称 (例如有效或测试)在配置中。结果将保存在路径<job_dir>/results/<run_id>

在allRank中,Google云存储作为数据和工作结果的存放地得到了支持。在

实现自定义损失函数

为了测试您自己的自定义损失,您需要实现一个函数,该函数以两个张量(模型预测和基本真实值)作为输入 并将其放入losses包中,确保它在包级别上公开。 要在培训中使用它,只需在配置文件的正确位置传递函数的名称(和参数,如果loss方法有一些超参数):

"loss": {
    "name": "yourLoss",
    "args": {
        "arg1": val1,
        "arg2: val2
    }
  }

应用点击模型

要应用点击模型,你需要首先训练一个allRank模型。 下一步,运行:

python allrank/rank_and_click.py --input-model-path <path_to_the_model_weights_file> --roles <comma_separated_list_of_ds_roles_to_process e.g. train,valid> --config_file_name allrank/config.json --run_id <the_name_of_your_experiment> --job_dir <the_place_to_save_results>

该模型将用于从config中指定的数据集中对所有slate进行排序。下一步-将应用在config中配置的点击模型,结果的点击数据集将以libSVM格式写入<job_dir>/results/<run_id>下。 结果目录的路径可以作为另一个allRank模型训练的输入。在

持续集成

您应该运行scripts/ci.sh来验证代码是否通过了样式准则和单元测试。在

研究

这个框架是为支持研究项目Context-Aware Learning to Rank with Self-Attention而开发的。如果您在研究中使用allRank,请引用:

^{pr2}$

许可证

Apache 2许可证

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Spring启动测试中的java MockBean注释导致NonuniqueBeandDefinitionException   java Spring Hateoas调试模板不能为null   递归培根游戏Java程序?   java在Android中保存少量数据(对象)的最简单方法是什么?   异常处理Java中finally块的要点是什么?   是java。util。货币真的是工厂方法模式吗?   java如何输入字符以停止循环   java如何对流的某些部分执行缩减操作   java new Gson()。单例类的toJson(object)返回null   java Itext泰米尔字体显示不正确   java运行时。getRuntime()。gpg命令不起作用的exec()   java如何在preparedstatemenet中将字符连接到SQL字符串   java将同一实体的多个表示形式与lazyload合并时出错   JavaSpring、Hibernate和JPA:在entitymanager上调用persist似乎并没有提交到数据库   java osgi r6服务。组成部分注释属性列表