hans-thomas/lilac

这是一个基于成对关联规则的推荐系统。

v1.0.0 2023-06-01 12:39 UTC

This package is auto-updated.

Last update: 2024-10-01 00:14:42 UTC


README

这是一个基于成对关联规则(PAR)的推荐系统,该规则基于这篇论文。存在一个增强的成对关联规则(EPAR)算法,可以减少产生推荐的时间。此推荐系统能够为单个或多个模型创建训练模型并生成推荐。

安装

通过composer

composer require hans-thomas/lilac

然后

php artisan vendor:publish --tag lilac-config

使用方法

假设有两个PostCategory模型,它们之间有一个多对多的关系。

配置

在配置文件中,我们首先应该定义我们的关系。有一个关系的模板定义,你可以编辑它。

// config/lilac.php

return [
    // ...

    'relations'                => [
        Post::class => [
            'wrappedByModel'                 => Category::class,
            'wrappedByModelRelationToEntity' => 'posts',
            'entityModelRelationToWrappedBy' => 'categories',
        ]
    ]
];

可用方法

recommends

要生成一些推荐,请使用recommends方法。

use Hans\Lilac\Facades\Lilac;

Lilac::recommends( $ids );

它将返回一个按得分排序的模型集合。

updateTrainModel

Lilac提供了一个缓存系统来存储创建的数据并防止创建重复的训练模型。当你为模型(s)创建一些推荐时,相关的训练模型将被缓存以供将来使用。同时,你改变了模型之间的关联。在这种情况下,如果你尝试为你模型创建一些推荐,你将收到过时的推荐。要修复此问题,你可以运行updateTrainModel以更新相关的模型(s)。

use Hans\Lilac\Facades\Lilac;

Lilac::updateTrainModel( $ids );

这将更新并缓存相关的训练模型。

fresh

有时你需要忽略缓存的训练模型并使用数据库的最新数据来生成推荐。为此,你可以在recommends方法之前使用fresh方法。

use Hans\Lilac\Facades\Lilac;

Lilac::fresh()->recommends( $ids );

cache

你可能想在同一个作用域内为两个模型创建推荐。第一个使用最新数据,第二个使用缓存数据。在这种情况下,你应该在第二个调用中使用cache

use Hans\Lilac\Facades\Lilac;

Lilac::fresh()->recommends( $ids );

Lilac::cache()->recommends( $other_ids );

trainer

要设置你的训练器,你可以将实例传递给trainer方法。

use Hans\Lilac\Facades\Lilac;
use Hans\Lilac\Trainers\EPAR;
use Hans\Lilac\Trainers\PAR;

Lilac::trainer( new EPAR( $ids ) )->recommends( $ids );
// or
Lilac::trainer( new PAR )->recommends( $ids );

你可以在配置文件中设置默认的训练器。

limit

你可以设置返回推荐计数限制。

use Hans\Lilac\Facades\Lilac;

Lilac::limit( 10 )->recommends( $ids );

作业

为了自动保持训练模型更新,有两个作业可以使用。你可以在更新关系或使用此设置关系钩子时触发这些作业。

UpdateEntityTrainModel

要更新单个模型的训练模型,你可以触发UpdateEntityTrainModel并传递相关的模型。

UpdateWrapperTrainModel

要更新多个相关模型的训练模型,你应该将它们作为一个集合传递给UpdateWrapperTrainModel作业。

支持