Release notes for LensKit 0.11
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.
The primary focus of this release is making LensKit use Grapht rather than PicoContainer, with additional refactorings of components to more effectively take advantage of Grapht. We also made significant improvements to how the evaluator works to allow evaluation scripts to be more flexible, and made a number of other improvements and bug fixes.
There are a number of backwards-incompatible changes in this release. Configurations and algorithm implementations will definitely need to be updated; other client code may need updates as well.
General Changes
-
Made
SparseVector
returnVectorEntry
objects when iterated, rather thanLong2DoubleMap.Entry
instances. All code that iterates over sparse vectors will need to be updated. -
Added methods to
ItemScorer
andGlobalItemScorer
to output scores to sparse vectors. -
Begun documenting API stability (#issue(103)).
-
Events are no longer
Cloneable
, and theclone
method is now a deprecated alias forcopy()
.
Algorithm Changes
-
The default user similarity for user-user CF is now cosine rather than Pearson.
-
Item-item models can now have unbounded size and have rows truncated by threshold value rather than size (#issue(171)).
-
FunkSVD now incorporates user ratings at predict time (#issue(174)).
Component Refactoring
This release contains a lot of algorithm and component refactorings. The public recommender API is unchanged, but many components and their interfaces have changed. This means that custom components and recommender configurations will need to be updated.
-
Added
@Shareable
annotation for components that can be put in the model build and shared between recommender sessions. All shareable components must now be annotated with this annotation (or configured via instance bindings), or they will not be pre-built. -
Removed
MinRating
andMaxRating
(deprecated in release 0.10). Code should usePreferenceDomain
instead. See #issue(163). -
Renamed
RatingSnapshot
and related classes toPreferenceSnapshot
, since that’s what it really is. -
Removed many annotations formerly used as dependency qualifiers (see #issue(168)).
-
@NormalizedSnapshot
: components that formerly used this qualifier should depend onuserNormalizedPreferenceSnapshot
or use the normalizer directly. -
@NormalizerBaseline
: use a context-sensitive binding onBaselineSubtractingNormalizer
. -
@PredictNormalizer
: use context-sensitive bindings. Usually this will require using context-sensitive bindings to bind the other normalizers. -
@UserHistorySummary
: was redundant with the component interface. -
@UserVectorNormalizer
: refactored into a separateUserVectorNormalizer
interface, the default implementation of which delegates to a generic vector normalizer. Context-sensitive bindings configure the inner normalizer.BaselineSubtractingNormalizer
has becomeBaselineSubtractingUserVectorNormalizer
and implements the new interface. -
@ItemSimilarity
: factored intoItemSimilarity
interface, with default implementation delegating toVectorSimilarity
. -
@UserSimilarity
: factored intoUserSimilarity
interface, with default implementation delegating toVectorSimilarity
. -
@WeightedSimilarity
: removed in favor of context-sensitive bindings. -
Dropped
@ClampingFunction
(andDoubleFunction
) in favor of aClampingFunction
interface. The new interface provides the user and item IDs, too.
-
-
Renamed
HistorySummarizer
toUserHistorySummarizer
, and renamed base classes. -
Moved normalizers and quantizers into subpackages of
o.g.l.transform
. -
Refactored similarities for k-NN recommenders.
Similarity
becameVectorSimilarity
, without a generic parameter, andOptimizableVectorSimilarity
andSymmetricBinaryFunction
have been replaced by methods on similarity interfaces. -
Removed
ItemVector
andUserVector
classes. User and item IDs are now carried independently and we use distinct component interfaces to handle users and items.