Système de Recommandation de Littérature Académique avec Python, Hadoop et Spark

Contexte et Analyse des Besoins

Avec plus de 300 millions de publications dans CNKI (China National Knowledge Infrastructure) et une croissance annuelle dépassant 15 millions, les chercheurs doivent analyser quotidiennement plus de 200 articles. Les systèmes traditionnels de recherche par mots-clés présentent une efficacité inférieure à 10%, avec des problèmes de surcharge informationnelle et de précision des recommandations interdisciplinaires. Cette solution utilise Python, Hadoop et Spark pour traiter des données à l'échelle du pétaoctet, combinant des algorithmes hybrides et des mécanismes de pondération dynamique. Elle améliore la précition des recommandations de 40% et réduit le temps de réponse à moins de 200 ms.

Architecture du Système

Couche de Collecte de Données

Implémentation technique :

  • Utilisation du framework Scrapy pour extraire les métadonnées des publications
  • Contournement des mécanismes anti-scraping via un pool d'IPs dynamiques
  • Stratégie d'extraction incrémentielle basée sur les DOI

Stockage des Données

Composants clés :

  • HDFS pour le stockage brut avec compression Snappy (taux ≥70%)
  • Entrepôt Hive pour l'analyse des comportements utilisateurs
  • Base de graphes Neo4j pour les relations de citation

Traitement des Données

Processus :

  • Nettoyage avec Spark RDD
  • Extraction de caractéristiques sémantiques via BERT
  • Modélisation des séquences utilisateur avec LSTM

Algorithme de Recommandation

class RecommandateurHybride:
    def __init__(self):
        self.filtrage_collab = ALS(maxIter=10, regParam=0.01)
        self.contenu_base = BERT()
        self.graphe_base = GraphSAGE()
    
    def predire(self, utilisateur, document):
        score_collab = self.filtrage_collab.predire(utilisateur, document)
        score_contenu = self.contenu_base.similarite(utilisateur.profil, document.vecteur)
        score_graphe = self.graphe_base.score_noeud(document.id)
        return 0.4*score_collab + 0.3*score_contenu + 0.3*score_graphe

Interface Utliisateur

Composants :

  • API RESTful avec Flask
  • Interface Vue.js avec visualisations D3.js
  • Feedback en temps réel via Celery

Implémentation Technique

Extraction et Nettoyage

class SpiderCNKI(scrapy.Spider):
    name = 'extracteur_cnki'
    domaines_autorises = ['kns.cnki.net']
    urls_depart = ['https://kns.cnki.net/kns8/defaultresult/index']
    parametres = {
        'DELAI_TELECHARGEMENT': 1.8,
        'LISTE_PROXY': ['http://proxy1:port', 'http://proxy2:port']
    }

Entraînement des Modèles

# Génération d'embeddings avec BERT
tokeniseur = BertTokenizer.from_pretrained('bert-base-chinese')
modele = BertModel.from_pretrained('bert-base-chinese')

def obtenir_vecteur(texte):
    entree = tokeniseur(texte, return_tensors="pt", truncation=True)
    sortie = modele(**entree)
    return sortie.last_hidden_state.mean(dim=1).squeeze().numpy()

Optimisations

  • Traitement du déséquilibre de données par partitionnement adaptatif
  • Réduction de 40% du temps d'entraînement Spark
  • Compression de 70% du modèle BERT

Résultats et Cas d'Usage

  • Précision Top-10 : 85% (+40%)
  • Temps de réponse : 200ms sous forte charge
  • Précision interdisciplinaire : +28%

Évoultions Futures

  1. Intégration de données multi-sources (arXiv)
  2. Implémentation d'algorithmes d'apprentissage par renforcement
  3. Déploiement en apprentissage fédéré

Étiquettes: Python Hadoop Spark Scrapy Big Data

Publié le 24 juin à 19h23