Skip to main content

Story Recommender System based on LightFM

Overview

This project implements a personalized story recommendation system using the LightFM library. The system is designed to recommend stories (books, comics, audiobooks, etc.) to users based on their explicit ratings, reading behavior, language and preferences.

The code is structured in an object-oriented way, making it easy to maintain and extend. It uses Python type hints for clarity and robustness.


Project Structure

  • DataManager: Handles loading, preprocessing, and validation of all datasets (stories, users, ratings, behavioral data).
  • RecommenderSystem: Builds the recommendation model, processes user-story interactions, trains the LightFM model, and generates recommendations.

Data Sources

  1. Story Dataset (story_dataset.csv)

    • Contains metadata for each story: genres, keywords, language, age rating, etc.
  2. User Dataset (user_dataset.csv)

    • Contains user profiles: favorite genres, preferred keywords, language, age rating limitation, etc.
  3. Rating Dataset (simple_rating_dataset.csv)

    • Contains explicit user ratings for stories, with timestamps.
  4. Behavioral Dataset (behavioral_dataset.csv)

    • Contains user behavior logs, specifically:
      • reads: List of strings in the format story-uuid-language-percentage_finished (e.g., abc123-en-0.75)
      • impressions: List of story IDs the user has seen
      • timestamp: When the behavior occurred

Key Features

  • Strict Language Enforcement: Only recommends stories in the user's preferred language. (Can be disabled)
  • Hybrid Recommendation: Uses both explicit ratings (most important) and implicit behavioral signals (e.g., how much of a story was read).
  • Completion Percentage Weighting: For behavioral reads, the percentage of the story finished is used as the interaction strength.
  • Time Decay: More recent interactions are weighted more heavily.

How It Works

1. Data Loading and Preprocessing

  • DataManager loads all datasets.
  • Parses columns that contain lists (e.g., genres, keywords, reads).
  • Builds feature lists for each story and user for use in LightFM.
  • Validates that all stories are in a language supported by at least one user.

2. Interaction Matrix Construction

  • Explicit Ratings: For each user-story pair with a rating, an interaction is created with the rating as the weight.
  • Behavioral Reads: For each read, the code extracts the story ID, language, and completion percentage. If the language matches both the user's preference and the story's language, and there is no explicit rating for that pair, an interaction is created with the completion percentage as the weight.
  • Impressions: Optionally included as weak implicit interactions.
  • Time Decay: All interactions are further weighted by recency, so recent interactions are more important.

3. Model Training

  • The RecommenderSystem builds a LightFM dataset with all users, stories, and their features.
  • The interaction matrix (with weights) is used to train a LightFM model using the WARP loss function.
  • User and item features are included to help with cold-start scenarios.

4. Generating Recommendations

  • For a given user, the system:
    • Filters out stories in the wrong language.
    • Removes stories the user has already interacted with (read or rated).
    • Scores the remaining stories using the trained model.
    • Returns the top-N recommendations, including story metadata.

Example Usage

dm = DataManager(
story_path='story_dataset.csv',
user_path='user_dataset.csv',
rating_path='simple_rating_dataset.csv',
behavior_path='behavioral_dataset.csv'
)
dm.load_data()

recommender = RecommenderSystem(dm)
recommender.prepare_dataset()
recommender.train_model(epochs=30)

example_user = dm.users.iloc['userId']
recommendations = recommender.recommend(example_user, top_n=5)
print(recommendations)

Requirements

  • Python 3.12+
  • pandas
  • numpy
  • lightfm

Authors

Adam Mitrenga
Jan Voracek

Metadata

Release files for literaryuniverse-recommender 0.1.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for literaryuniverse-recommender 0.1.4
File Size Uploaded
literaryuniverse_recommender-0.1.4.tar.gz 8.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for literaryuniverse-recommender 0.1.4
File Interpreter ABI Platform
literaryuniverse_recommender-0.1.4-py3-none-any.whl Python 3 none any Details

Total release size: 17.3 kB

Release files / literaryuniverse_recommender-0.1.4.tar.gz

Download URL literaryuniverse_recommender-0.1.4.tar.gz
Size 8.8 kB
Tags Source
SHA-256 checksum
How to use checksums
dc5d5520ae2f2c0f85e0f3df8ed89314589301b890d8fbca05414a64a19d58b0
BLAKE2b-256 checksum
How to use checksums
b24f65b6f28003e9baeb55bd314b531feba5b9c2d4fee9891f41c0368db9d854
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 12, 2025.

Transparency log

Release files / literaryuniverse_recommender-0.1.4-py3-none-any.whl

Download URL literaryuniverse_recommender-0.1.4-py3-none-any.whl
Size 8.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cd7b8ee59c9a2d607efdc325e3f1a722a7bb0ecac3f0c45c5220264d55652618
BLAKE2b-256 checksum
How to use checksums
975608665797573a10c595309ee34159a639de2f8f57187bcd57a4b6132c4024
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 12, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.4 This release

2 release files

0.1.2

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page