hans-thomas / lilac
这是一个基于成对关联规则的推荐系统。
Requires
- php: ^8.1
Requires (Dev)
- nunomaduro/collision: ^7.0
- orchestra/testbench: ^8.0
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
使用方法
假设有两个Post
和Category
模型,它们之间有一个多对多
的关系。
配置
在配置文件中,我们首先应该定义我们的关系。有一个关系的模板定义,你可以编辑它。
// 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
作业。