对称LCWA训练循环

class SymmetricLCWATrainingLoop(model: Model, triples_factory: CoreTriplesFactory, optimizer: str | Optimizer | type[Optimizer] | None = None, optimizer_kwargs: Mapping[str, Any] | None = None, lr_scheduler: str | LRScheduler | type[LRScheduler] | None = None, lr_scheduler_kwargs: Mapping[str, Any] | None = None, automatic_memory_optimization: bool = True, mode: Literal['training', 'validation', 'testing'] | None = None, result_tracker: str | ResultTracker | type[ResultTracker] | None = None, result_tracker_kwargs: Mapping[str, Any] | None = None)[source]

基础类:TrainingLoop[tuple[Tensor], tuple[Tensor]]

“对称”LCWA同时评分头部尾部。

这个目标由 [lacroix2018] 提出,如下所示:

\[l_{i,j,k}(X) = - X_{i,j,k} + \log \left( \sum_{k'} \exp(X_{i,j,k′}) \right) - X_{k,j+P,i} + \log \left( \sum_{i'} \exp (X_{k, j+P, i'}) \right)\]

这可以被视为一种“对称的LCWA”,其中对于一批三元组,我们根据三元组的其余部分对头部尾部进行评分。

注意

同时,与LCWATrainingLoop也有一个区别:我们不会按例如头实体+关系对进行分组。因此,这个名称可能不是最优的,未来可能会更改。

初始化训练循环。

Parameters:
  • model (Model) – 要训练的模型

  • triples_factory (CoreTriplesFactory) – 训练三元组工厂

  • optimizer (Optimizer) – 训练模型时使用的优化器

  • optimizer_kwargs (Mapping[str, Any] | None) – 用于实例化优化器的额外基于关键字的参数(如果需要)。params 将根据 model 自动添加。

  • lr_scheduler (LRScheduler | None) – 在训练模型时你想要使用的学习率调度器

  • lr_scheduler_kwargs (Mapping[str, Any] | None) – 用于实例化LR调度器的额外基于关键字的参数(如果需要)。optimizer 将会自动添加。

  • automatic_memory_optimization (bool) – bool 是否在训练期间自动优化子批次大小,并在评估期间根据当前硬件自动优化批次大小。

  • mode (Literal['training', 'validation', 'testing'] | None) – 归纳训练模式。如果是传导式的则为None。

  • result_tracker (str | ResultTracker | type[ResultTracker] | None) – 结果跟踪器

  • result_tracker_kwargs (Mapping[str, Any] | None) – 用于实例化结果跟踪器的额外基于关键字的参数