Release notes for LensKit 1.1
The Git changelog and the list of closed tickets and pull requests provide more information on what has happened, including bugs that have been fixed.
This release requires some recommender configuration changes, as well as changes to any custom components depending on LensKit parameter annotations; see Upgrading to LensKit 1.1 for details on how to do this.
There are quite a few changes in LensKit 1.1; this list is not exhaustive, but tries to capture highlights and things that will affect current users.
-
Made
RecommenderextendCloseable(#issue(315)). -
Added side channel support to sparse vectors (#issue(185)).
-
Added support for at context matchers (via Grapht), to make it easier to configure complex configurations. See the manual for more details.
-
Made
SparseVectorconstructors package-private. Sparse vectors shouldn’t be subclassed by any additional classes. -
Config change: introduced
predictmethods toRatingPredictor, deprecating the fact that it extendsItemScorer(#issue(164)). As a result, all algorithm item scorers now implementItemScorer, notRatingPredictor, and new rating predictors fill in the old jobs. The upgrading guide, #164, and #311 contain more details. -
Incompatible change: moved abstract and simple/score-based implementations of basic recommender components to the new package
o.g.l.basic. This should only be incompatible for people implementing new LensKit components. -
Config change: Removed dedicated
paramspackages, moving parameters to saner locations (#issue(294)). See the upgrading guide for details. -
Many little cleanups and bug-fixes.
-
Lots more automatic testing support.
Algorithms
-
Item-item scorers now report the number of neighbors used for each score as a side channel.
-
Deprecated algorithm-specific item recommenders in favor of using
ScoreBasedItemRecommenderdirectly. -
Added
LeastSquaresPredictor, a baseline predictor that uses gradient descent to train per-item and per-user baseline values (à la Koren et al.).
k-NN Recommenders
-
Default change: changed default
ModelSizeto 0 (all neighbors retained); by default, item-item models now retain all neighbors with nonnegative similarities. -
Default change: Changed the default value for
ModelSizeto 20 (was 30). -
Refactored the item-item recommender to get rid of
ItemItemModelBackedScorer, simplifying the class hierarchy and configuration. -
Replaced
LongScoredListwith a list ofScoredIdobjects in Item-Item model construction to support side channels (#issue(219)).
Funk-SVD
-
Incompatible change: moved iterative support code to
o.g.l.iterativeand changed parameters. TheStoppingConditioninterface and implementations now live in this package; common iterative method parameters are now defined by annotations ino.g.l.iterative.-
IterationCountis moved to the new package. -
MinimumIterationsis moved to the new package. -
Threshold stopping conditions now use
StoppingThresholdin this package instead ofThresholdValue. If you configure the threshold value, update your configuration accordingly. -
The FunkSVD
LearningRateandRegularizationTermhave been moved to the new iterative parameters package. -
Config change: Changed the default value for
MinimumIterationsto 10.
-
-
Added several new configuration points to the Funk-SVD model builder
Evaluator
-
TrainTestEvalCommandnow returnsTable, notTableImpl. -
Eval configuration changes
-
Force and thread count are now runtime parameters, not script parameters. Specify them with
--forceand--thread-countcommand line options, or the corresponding eval mojo options. -
Commands receive the eval configuration via the
setConfigmethod.
-
-
Added a
trainModelcommand that trains a model and applies arbitrary functions to it. -
Table changes:
-
Tables now live in
o.g.l.util.table. -
TableImplis now package-private and immutable; useTableBuilderto build a table. -
InMemoryWriteris replaced withTableBuilder, which implementsTableWriter. -
Table layouts now live directly in the table package.
-
Table writers now live in
o.g.l.util.table.writer.
-
-
Many improvements to the
dumpGraphcommand (#issue(264)). -
AbstractCommandnow allows for the name to be null, although null names can never be exposed to callers. -
Added
run-rgoal to the Maven plugin to run R. -
Added the
lenskit-publishphase to the LensKit evaluation lifecycle as a place to hook in and generate reports that use the output oflenskit-analyze. -
Added the
subsamplecommand to subsample a data set.
Train-Test Evaluator
-
Train-test evaluator always runs, even if output is up-to-date with respect to input; use the
lenskit.eval.skipMaven property to disable the evaluator when running it via Maven and you only want to run post-eval analysis phases. -
Train-test evaluator now has
predictionChanneldirective to write side channel values out to the prediction output file. -
Added
retaindirective to thetrainTestcommand to retain a fixed number of items per user. -
Deprecated the
holdoutdirective ontrainTestthat takes a fraction in favor of the clearerholdoutFractiondirective. -
Add the ability for
metricto take an arbitrary function to compute metrics over an algorithm, andmultiMetricto compute multiple metrics per algorithm. -
Added the
externalAlgorithmdirective to allow algorithms implemented in external processes to be evaluated.
Archetypes
-
Added lenskit-archetype-fancy-analysis archetype to provide a template for more sophisticated LensKit experimental setups.
-
Improved the simple archetype to use the new R mojo.