docs: README bilingue FR/EN

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Grégoire Mureau 2026-09-10 01:49:07 +02:00
parent 849dea3ba6
commit c4f242e168
2 changed files with 238 additions and 0 deletions

View file

@ -9,6 +9,8 @@ Dataset : voir `fetch-data.sh` (hors git si volumineux).
# Système de Recommandation de Contenu - My Content # Système de Recommandation de Contenu - My Content
📘 Ce projet est également disponible en [anglais 🇬🇧](./README.md)
Projet de développement d'un système de recommandation d'articles basé sur une architecture serverless Azure Functions avec interface utilisateur Streamlit. Projet de développement d'un système de recommandation d'articles basé sur une architecture serverless Azure Functions avec interface utilisateur Streamlit.

236
README.md Normal file
View file

@ -0,0 +1,236 @@
**Source of truth** : https://git.gregoiremureau.com/openclassroom-ai/oc-p10-content-recommendation
```bash
git clone https://git.gregoiremureau.com/openclassroom-ai/oc-p10-content-recommendation.git
git clone https://git.gregoiremureau.com/openclassroom-ai/oc-p10-content-recommendation.git
```
Dataset: see `fetch-data.sh` (excluded from git if large).
# Content Recommendation System - My Content
📘 This project is also available in [French 🇫🇷](./README.fr.md)
Project developing an article recommendation system based on a serverless Azure Functions architecture with a Streamlit user interface.
## Project Deliverables
1. **Working application**: Streamlit + Azure Functions deployed
2. **Versioned source code**: Complete GitHub repository
3. **Technical presentation**: PDF deck (docs/presentation.pdf)
## Overview
This project implements a content recommendation system using collaborative filtering and content-based algorithms. The serverless architecture enables automatic scaling and optimized cost.
### Main Features
- **Recommendation API**: Azure Function returning the top 5 recommended articles for a user
- **User interface**: Streamlit application to test and demonstrate the system
- **Implemented algorithms**: Content-Based Filtering with precomputed embeddings
- **Serverless architecture**: Deployment on Azure Functions with Consumption plan
## Analysis and Development
### Jupyter Notebook
- **Data exploration**: Analysis of the Kaggle Globo.com dataset
- **Algorithm implementation**: Content-Based and Collaborative Filtering
- **Approach comparison**: Evaluation and technical choice
- **PCA optimization**: Dimensionality reduction 250D → 50D
Location: `notebook/p10_notebook.ipynb`
## Architecture
### Current MVP
```
[Streamlit Interface] → [Azure Functions API] → [Recommendation Algorithm]
↓
[Embeddings data + user history]
```
### Components
- **Frontend**: Streamlit (test interface)
- **Backend**: Azure Functions (Python 3.12, Linux)
- **Algorithm**: Content-Based Filtering with cosine similarity
- **Data**: Article embeddings (50D via PCA vs 250D original embeddings) + click history
## Project Structure Overview
```
Project_10/
├── azure-app/ # Azure Function
│ ├── function_app.py # Azure Function entry point
│ ├── requirements.txt # Python dependencies
│ ├── host.json # Azure Functions configuration
│ ├── local.settings.json # Local configuration (not versioned)
│ ├── data/
│ │ ├── embeddings_azure_50d.pkl # Article embeddings (PCA 50D)
│ │ └── clicks_sample.csv # User click history
│ └── utils/
│ ├── data_loader.py # Data loading and caching
│ └── content_based.py # Recommendation algorithm
├── notebook/
│ └── p10_notebook.ipynb # Data analysis + model development
├── docs/
│ ├── presentation.pdf # Presentation deck (15-25 slides)
│ └── illustrations/ # Architecture diagrams and screenshots
├── streamlit_app.py # User interface
├── streamlit_requirements.txt # Streamlit dependencies
└── README.md
```
## Installation and Deployment
### Prerequisites
- Python 3.12+
- Azure CLI
- Azure Functions Core Tools
- Azure account
### Azure Functions Deployment
1. **Sign in to Azure**
```bash
az login
```
2. **Infrastructure creation**
```bash
# Resource group
az group create --name rg-content-recommender --location francecentral
# Storage account
az storage account create --name [your-unique-storage-name] \
--resource-group rg-content-recommender \
--location francecentral \
--sku Standard_LRS
# Linux Function App with Python 3.12
az functionapp create \
--resource-group rg-content-recommender \
--consumption-plan-location francecentral \
--runtime python \
--runtime-version 3.12 \
--functions-version 4 \
--name contentrecommender-linux \
--storage-account stcontentrecommend2025 \
--os-type Linux
```
3. **Code deployment**
```bash
# From the azure-app folder
func azure functionapp publish contentrecommender-linux
```
### Streamlit Interface
1. **Install dependencies**
```bash
pip install -r streamlit_requirements.txt
```
2. **Launch the interface**
```bash
streamlit run streamlit_app.py
```
## Usage
### Azure Functions API
**Endpoint**: `https://contentrecommender-linux.azurewebsites.net/api/recommend`
**Parameters**:
- `user_id` (int): User identifier (0-706)
**Example call**:
```bash
curl "https://contentrecommender-linux.azurewebsites.net/api/recommend?user_id=0"
```
**Response**:
```json
{
"user_id": 0,
"recommendations": [157519, 157944, 159495, 156690, 162857]
}
```
### Streamlit Interface
1. Configure the API URL (local or Azure)
2. Select a user ID
3. Get the recommendations
4. Test the advanced features
## Recommendation Algorithm
### Content-Based Filtering
1. **Data loading**: Precomputed embeddings and user history
2. **User profile computation**: Average of the embeddings of the viewed articles
3. **Cosine similarity**: Computed against all articles in the catalog
4. **Filtering**: Exclusion of already-seen articles
5. **Selection**: Top 5 most similar articles
### Optimizations
- **Dimensionality reduction**: PCA 250D → 50D to optimize Azure performance
- **In-memory cache**: Embeddings and user data loaded only once
- **Serverless architecture**: Automatic scaling based on demand
## Tests and Validation
### Local tests
```bash
# Start Azure Functions locally
func start
# Test the algorithm
python test_local.py
```
### Performance metrics
- **Response time**: ~200ms per recommendation
- **Supported users**: 707 in the current dataset
- **Available articles**: 364,047 with embeddings
## Known Issues and Solutions
### Azure Deployment
- **Python on Windows**: Not supported, must use Linux
- **Authentication**: Set `http_auth_level=func.AuthLevel.ANONYMOUS`
- **"Service unavailable" errors**: Temporary Azure issues, retry later
### Current Limitations
- **Cold start**: First request is slow after a period of inactivity
- **New users**: No handling of the cold-start problem
- **Data updates**: Manual process
## Target Architecture (Future)
### Planned Improvements
- **Cold start handling**: Popular recommendations for new users
- **Data pipeline**: Automatic embeddings update
- **Database**: Persistent storage of user profiles
- **Hybrid API**: Combination of Content-Based + Collaborative Filtering
- **Distributed cache**: Precomputation of popular recommendations
## Technologies Used
- **Backend**: Azure Functions, Python 3.12
- **Frontend**: Streamlit
- **ML/Data**: scikit-learn, pandas, numpy
- **Infrastructure**: Azure CLI, Azure Storage
- **Deployment**: Azure Functions Core Tools
## Author
Project carried out as part of an OpenClassrooms training program - AI Engineer.
## License
This project is for educational purposes only.