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
SparseVectorreturnVectorEntryobjects when iterated, rather thanLong2DoubleMap.Entryinstances. All code that iterates over sparse vectors will need to be updated. -
Added methods to
ItemScorerandGlobalItemScorerto output scores to sparse vectors. -
Begun documenting API stability (#issue(103)).
-
Events are no longer
Cloneable, and theclonemethod 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
@Shareableannotation 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
MinRatingandMaxRating(deprecated in release 0.10). Code should usePreferenceDomaininstead. See #issue(163). -
Renamed
RatingSnapshotand 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 onuserNormalizedPreferenceSnapshotor 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 separateUserVectorNormalizerinterface, the default implementation of which delegates to a generic vector normalizer. Context-sensitive bindings configure the inner normalizer.BaselineSubtractingNormalizerhas becomeBaselineSubtractingUserVectorNormalizerand implements the new interface. -
@ItemSimilarity: factored intoItemSimilarityinterface, with default implementation delegating toVectorSimilarity. -
@UserSimilarity: factored intoUserSimilarityinterface, with default implementation delegating toVectorSimilarity. -
@WeightedSimilarity: removed in favor of context-sensitive bindings. -
Dropped
@ClampingFunction(andDoubleFunction) in favor of aClampingFunctioninterface. The new interface provides the user and item IDs, too.
-
-
Renamed
HistorySummarizertoUserHistorySummarizer, and renamed base classes. -
Moved normalizers and quantizers into subpackages of
o.g.l.transform. -
Refactored similarities for k-NN recommenders.
SimilaritybecameVectorSimilarity, without a generic parameter, andOptimizableVectorSimilarityandSymmetricBinaryFunctionhave been replaced by methods on similarity interfaces. -
Removed
ItemVectorandUserVectorclasses. User and item IDs are now carried independently and we use distinct component interfaces to handle users and items.