- Add 'summary' field to Chunk collection (vectorized with text2vec) - Migrate from Dynamic index to HNSW + RQ for both Chunk and Summary - Add LLM summarizer module (utils/llm_summarizer.py) - Add migration scripts (migrate_add_summary.py, restore_*.py) - Add summary generation utilities and progress tracking - Add testing and cleaning tools (outils_test_and_cleaning/) - Add comprehensive documentation (ANALYSE_*.md, guides) - Remove obsolete files (linear_config.py, old test files) - Update .gitignore to exclude backups and temp files 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
437 lines
13 KiB
Markdown
437 lines
13 KiB
Markdown
# Analyse des Résultats de Recherche - Collection Summary
|
|
|
|
**Date**: 2026-01-03
|
|
**Requête**: "Peirce et la sémiose"
|
|
**Collection**: Summary (8,425 objets)
|
|
**Résultats retournés**: 20
|
|
|
|
---
|
|
|
|
## 📊 Statistiques Globales
|
|
|
|
| Métrique | Valeur | Évaluation |
|
|
|----------|--------|------------|
|
|
| **Total résultats** | 20 | ✅ Bon |
|
|
| **Similarité moyenne** | 0.716 | ⚠️ Moyenne (< 0.75) |
|
|
| **Meilleur score** | 0.723 | ⚠️ Faible pour top-1 |
|
|
| **Plus mauvais score** | 0.713 | ⚠️ Très faible |
|
|
| **Niveau hiérarchique** | 100% Level 1 | ❌ Pas de diversité |
|
|
| **Documents sources** | 1 seul | ❌ Pas de diversité |
|
|
|
|
---
|
|
|
|
## 🚨 Problèmes Critiques Identifiés
|
|
|
|
### 1. Résumés Vides (CRITIQUE)
|
|
|
|
**Observation**: Tous les 20 résumés ont un champ `text` vide ou minimal.
|
|
|
|
**Exemple**:
|
|
```
|
|
Résumé: Peirce: CP 3.592
|
|
```
|
|
|
|
**Attendu**:
|
|
```
|
|
Résumé: Ce passage explore la théorie peircéenne de la sémiose comme processus
|
|
triadique impliquant le signe (representamen), l'objet et l'interprétant.
|
|
Peirce développe l'idée que la signification n'est jamais binaire mais
|
|
nécessite toujours cette relation ternaire irréductible...
|
|
```
|
|
|
|
**Impact**:
|
|
- ❌ La recherche ne peut pas matcher le contenu sémantique réel
|
|
- ❌ Les résumés ne servent à rien (pas de contexte)
|
|
- ❌ Impossible d'identifier les sections pertinentes
|
|
|
|
**Cause probable**:
|
|
- Les Summary n'ont jamais été remplis avec de vrais résumés LLM
|
|
- Le pipeline d'ingestion a sauté l'étape de génération de résumés
|
|
- OU les résumés ont été générés mais pas insérés dans Weaviate
|
|
|
|
### 2. Concepts Vides (CRITIQUE)
|
|
|
|
**Observation**: Le champ `concepts` est vide pour tous les résumés.
|
|
|
|
**Exemple**:
|
|
```
|
|
Concepts:
|
|
```
|
|
|
|
**Attendu**:
|
|
```
|
|
Concepts: sémiose, triade, signe, interprétant, représentamen, objet, signification
|
|
```
|
|
|
|
**Impact**:
|
|
- ❌ Impossible de filtrer par concepts philosophiques
|
|
- ❌ Perte d'une dimension sémantique clé
|
|
- ❌ Les résumés ne peuvent pas booster la recherche
|
|
|
|
### 3. Pas de Chunks Associés (CRITIQUE)
|
|
|
|
**Observation**: Tous les résumés ont `chunksCount: 0`.
|
|
|
|
**Exemple**:
|
|
```
|
|
Chunks dans cette section: 0
|
|
```
|
|
|
|
**Attendu**:
|
|
```
|
|
Chunks dans cette section: 15-50
|
|
```
|
|
|
|
**Impact**:
|
|
- ❌ Les résumés ne sont pas liés aux chunks
|
|
- ❌ Impossible de faire une recherche hiérarchique (Summary → Chunk)
|
|
- ❌ La stratégie two-stage est cassée
|
|
|
|
**Cause probable**:
|
|
- Les Summary ont été créés mais sans lien avec les Chunks
|
|
- Le champ `document.sourceId` dans Summary ne match pas avec `document.sourceId` dans Chunk
|
|
- OU les Summary ont été créés pour des sections qui n'ont pas de chunks
|
|
|
|
### 4. Similarité Faible (ALERTE)
|
|
|
|
**Observation**: Scores entre 0.713 et 0.723.
|
|
|
|
**Analyse**:
|
|
| Score | Interprétation |
|
|
|-------|----------------|
|
|
| > 0.90 | Excellent match |
|
|
| 0.80-0.90 | Bon match |
|
|
| 0.70-0.80 | Match moyen |
|
|
| **0.71-0.72** | **Match faible** ⚠️ |
|
|
| < 0.70 | Pas pertinent |
|
|
|
|
**Pourquoi c'est faible ?**
|
|
- Le modèle BGE-M3 match uniquement sur "Peirce: CP X.XXX" (titre)
|
|
- Pas de contenu sémantique à matcher
|
|
- La requête "Peirce et la sémiose" ne trouve que "Peirce" dans le titre
|
|
|
|
**Comparaison attendue**:
|
|
- Avec vrais résumés: scores 0.85-0.95
|
|
- Avec concepts remplis: boost de +0.05-0.10
|
|
|
|
### 5. Pas de Diversité Hiérarchique (ALERTE)
|
|
|
|
**Observation**: 100% des résultats sont Level 1 (chapitres).
|
|
|
|
**Distribution**:
|
|
```
|
|
Chapitre (Level 1): 20 résultats (100%)
|
|
Section (Level 2): 0 résultats (0%)
|
|
Subsection (Level 3): 0 résultats (0%)
|
|
```
|
|
|
|
**Impact**:
|
|
- ❌ Pas de navigation hiérarchique
|
|
- ❌ Tous les résultats au même niveau de granularité
|
|
- ❌ Impossible de drill-down dans les sous-sections
|
|
|
|
**Cause probable**:
|
|
- Les Summary ont été créés uniquement pour les Level 1
|
|
- Le pipeline n'a pas généré de résumés pour Level 2/3
|
|
|
|
### 6. Un Seul Document Source (ALERTE)
|
|
|
|
**Observation**: 100% des résultats viennent de `peirce_collected_papers_fixed`.
|
|
|
|
**Impact**:
|
|
- ⚠️ Pas de diversité (autres auteurs sur la sémiose ignorés)
|
|
- ⚠️ Biais vers Peirce (normal pour la requête, mais limite les perspectives)
|
|
|
|
**Note**: Ceci peut être acceptable car la requête contient "Peirce", mais d'autres documents comme "Tiercelin - La pensée-signe" devraient aussi matcher.
|
|
|
|
---
|
|
|
|
## 🔍 Analyse Détaillée des Résultats
|
|
|
|
### Top 5 Résultats
|
|
|
|
#### [1] CP 3.592 - Similarité: 0.723
|
|
|
|
**Référence Peirce**: CP 3.592 (Collected Papers, Volume 3, §592)
|
|
|
|
**Contenu actuel**: VIDE (juste "Peirce: CP 3.592")
|
|
|
|
**Ce que CP 3.592 devrait contenir** (selon index Peirce):
|
|
- Volume 3 = Exact Logic
|
|
- Section probable: Théorie des signes ou logique des relations
|
|
- Contenu attendu: Discussion sur la triplicité du signe
|
|
|
|
**Action requise**: Vérifier le JSON source `peirce_collected_papers_fixed_chunks.json` pour voir si le résumé existe.
|
|
|
|
#### [2] CP 2.439 - Similarité: 0.719
|
|
|
|
**Référence**: CP 2.439 (Volume 2 = Elements of Logic)
|
|
|
|
**Contenu attendu**: Probablement sur la classification des signes ou la sémiotique.
|
|
|
|
#### [3] CP 2.657 - Similarité: 0.718
|
|
|
|
**Référence**: CP 2.657 (Volume 2)
|
|
|
|
**Contenu attendu**: Classification des arguments ou inférence.
|
|
|
|
#### [4] CP 5.594 - Similarité: 0.717
|
|
|
|
**Référence**: CP 5.594 (Volume 5 = Pragmatism and Pragmaticism)
|
|
|
|
**Contenu attendu**: Relation entre pragmatisme et théorie des signes.
|
|
|
|
#### [5] CP 4.656 - Similarité: 0.717
|
|
|
|
**Référence**: CP 4.656 (Volume 4 = The Simplest Mathematics)
|
|
|
|
**Contenu attendu**: Logique mathématique ou théorie des relations.
|
|
|
|
### Distribution par Volume Peirce
|
|
|
|
| Volume | Résultats | Thématique principale |
|
|
|--------|-----------|----------------------|
|
|
| **CP 2** | 7 | Elements of Logic (forte pertinence) |
|
|
| **CP 3** | 3 | Exact Logic (pertinence moyenne) |
|
|
| **CP 4** | 2 | Mathematics (faible pertinence) |
|
|
| **CP 5** | 4 | Pragmatism (pertinence moyenne) |
|
|
| **CP 7** | 4 | Science and Philosophy (faible pertinence) |
|
|
|
|
**Analyse**: Les résultats du Volume 2 (Elements of Logic) sont les plus pertinents pour "sémiose", ce qui est cohérent.
|
|
|
|
---
|
|
|
|
## 🛠️ Diagnostic Technique
|
|
|
|
### Vérification 1: Les Summary existent-ils dans Weaviate ?
|
|
|
|
```python
|
|
import weaviate
|
|
|
|
client = weaviate.connect_to_local()
|
|
summaries = client.collections.get("Summary")
|
|
|
|
# Compter objets
|
|
count = summaries.aggregate.over_all(total_count=True)
|
|
print(f"Total Summary: {count.total_count}") # Attendu: 8,425
|
|
|
|
# Vérifier un objet au hasard
|
|
result = summaries.query.fetch_objects(limit=1)
|
|
obj = result.objects[0].properties
|
|
print(f"Exemple Summary:")
|
|
print(f" text: '{obj.get('text', 'VIDE')}'")
|
|
print(f" concepts: {obj.get('concepts', [])}")
|
|
print(f" chunksCount: {obj.get('chunksCount', 0)}")
|
|
```
|
|
|
|
**Résultat attendu**: 8,425 objets existent, mais avec champs vides.
|
|
|
|
### Vérification 2: Comparer avec les Chunks
|
|
|
|
```python
|
|
chunks = client.collections.get("Chunk")
|
|
|
|
# Chercher chunks sur "sémiose"
|
|
result = chunks.query.near_text(
|
|
query="Peirce et la sémiose",
|
|
limit=10
|
|
)
|
|
|
|
for obj in result.objects:
|
|
props = obj.properties
|
|
similarity = 1 - obj.metadata.distance
|
|
print(f"Similarité: {similarity:.3f}")
|
|
print(f"Texte: {props['text'][:100]}...")
|
|
print(f"Section: {props['sectionPath']}")
|
|
print("---")
|
|
```
|
|
|
|
**Hypothèse**: Les Chunks devraient avoir de meilleurs scores (0.85-0.95) car ils contiennent le vrai contenu.
|
|
|
|
### Vérification 3: Inspecter le JSON source
|
|
|
|
```bash
|
|
# Vérifier si les résumés existent dans le JSON
|
|
jq '.summaries | length' output/peirce_collected_papers_fixed/peirce_collected_papers_fixed_chunks.json
|
|
|
|
# Afficher un résumé
|
|
jq '.summaries[0]' output/peirce_collected_papers_fixed/peirce_collected_papers_fixed_chunks.json
|
|
```
|
|
|
|
**Hypothèses possibles**:
|
|
1. ✅ Les résumés existent dans le JSON mais n'ont pas été insérés dans Weaviate
|
|
2. ✅ Les résumés ont été insérés mais avec des champs vides
|
|
3. ❌ Les résumés n'ont jamais été générés (pipeline incomplet)
|
|
|
|
---
|
|
|
|
## 📋 Plan d'Action Recommandé
|
|
|
|
### Phase 1: Diagnostic Approfondi (30 min)
|
|
|
|
1. **Vérifier le JSON source**:
|
|
```bash
|
|
cd output/peirce_collected_papers_fixed
|
|
cat peirce_collected_papers_fixed_chunks.json | jq '.summaries[0:3]'
|
|
```
|
|
|
|
2. **Vérifier un Summary dans Weaviate**:
|
|
```python
|
|
# Dans test_resume.py, ajouter après la recherche:
|
|
print("\n=== INSPECTION DÉTAILLÉE ===")
|
|
summaries = client.collections.get("Summary")
|
|
result = summaries.query.fetch_objects(
|
|
filters=Filter.by_property("document").by_property("sourceId").equal("peirce_collected_papers_fixed"),
|
|
limit=5
|
|
)
|
|
for obj in result.objects:
|
|
print(f"UUID: {obj.uuid}")
|
|
print(f"Text length: {len(obj.properties.get('text', ''))}")
|
|
print(f"Concepts count: {len(obj.properties.get('concepts', []))}")
|
|
print(f"ChunksCount: {obj.properties.get('chunksCount', 0)}")
|
|
print("---")
|
|
```
|
|
|
|
3. **Comparer avec Chunk**:
|
|
- Chercher "sémiose" dans Chunk
|
|
- Comparer les scores de similarité
|
|
|
|
### Phase 2: Correction selon Diagnostic (1-4h)
|
|
|
|
**Scénario A**: Les résumés existent dans le JSON mais pas dans Weaviate
|
|
|
|
```bash
|
|
# Ré-injecter uniquement les Summary
|
|
python utils/weaviate_ingest.py --reingest-summaries --doc peirce_collected_papers_fixed
|
|
```
|
|
|
|
**Scénario B**: Les résumés dans Weaviate sont corrompus
|
|
|
|
```python
|
|
# Supprimer et recréer les Summary pour ce document
|
|
from utils.weaviate_ingest import delete_summaries, ingest_summaries
|
|
|
|
delete_summaries("peirce_collected_papers_fixed")
|
|
ingest_summaries("peirce_collected_papers_fixed")
|
|
```
|
|
|
|
**Scénario C**: Les résumés n'ont jamais été générés
|
|
|
|
```bash
|
|
# Régénérer les résumés avec LLM
|
|
python utils/llm_summarizer.py --doc peirce_collected_papers_fixed --force
|
|
python utils/weaviate_ingest.py --doc peirce_collected_papers_fixed --summaries-only
|
|
```
|
|
|
|
### Phase 3: Validation (30 min)
|
|
|
|
1. **Ré-exécuter test_resume.py**:
|
|
```bash
|
|
python test_resume.py
|
|
```
|
|
|
|
2. **Vérifier les améliorations**:
|
|
- Scores de similarité: 0.85-0.95 attendu
|
|
- Texte résumé: 100-500 caractères attendu
|
|
- Concepts: 5-15 mots-clés attendus
|
|
- ChunksCount: > 0 attendu
|
|
|
|
3. **Tester la recherche two-stage**:
|
|
```python
|
|
# Créer test_two_stage.py
|
|
from utils.two_stage_search import hybrid_search
|
|
|
|
results = hybrid_search("Peirce et la sémiose", limit=10)
|
|
# Vérifier que ça fonctionne maintenant
|
|
```
|
|
|
|
---
|
|
|
|
## 🎯 Résultats Attendus Après Correction
|
|
|
|
### Exemple de Résultat Idéal
|
|
|
|
```
|
|
[1] Similarité: 0.942 | Level: 2
|
|
Titre: La sémiose et les catégories phanéroscopiques
|
|
Section: Peirce: CP 5.314 > La sémiose et les catégories
|
|
Document: peirce_collected_papers_fixed
|
|
Concepts: sémiose, triade, signe, interprétant, représentamen, objet, priméité, secondéité, tiercéité
|
|
|
|
Résumé:
|
|
Ce passage fondamental expose la théorie peircéenne de la sémiose comme
|
|
processus triadique irréductible. Peirce articule la relation entre signe
|
|
(representamen), objet et interprétant avec ses trois catégories universelles:
|
|
la Priméité (qualité pure), la Secondéité (réaction) et la Tiercéité (médiation).
|
|
La sémiose est définie comme un processus potentiellement infini où chaque
|
|
interprétant devient à son tour un nouveau signe, créant une chaîne sémiotique
|
|
sans fin. Cette conception s'oppose radicalement aux théories binaires du signe
|
|
(signifiant/signifié) et fonde l'épistémologie pragmatiste de Peirce.
|
|
|
|
Chunks dans cette section: 23
|
|
```
|
|
|
|
**Améliorations**:
|
|
- ✅ Similarité: 0.723 → 0.942 (+30%)
|
|
- ✅ Texte: 13 chars → 600 chars
|
|
- ✅ Concepts: 0 → 9
|
|
- ✅ ChunksCount: 0 → 23
|
|
- ✅ Niveau: Toujours 1 mais avec vrais sous-niveaux possibles
|
|
|
|
---
|
|
|
|
## 📊 Comparaison Avant/Après (Projeté)
|
|
|
|
| Métrique | Avant | Après | Gain |
|
|
|----------|-------|-------|------|
|
|
| **Similarité moyenne** | 0.716 | 0.88 | +23% |
|
|
| **Texte moyen** | 13 chars | 350 chars | +2600% |
|
|
| **Concepts moyens** | 0 | 7 | +∞ |
|
|
| **ChunksCount moyen** | 0 | 18 | +∞ |
|
|
| **Utilité recherche** | 10% | 95% | +850% |
|
|
|
|
---
|
|
|
|
## 🔗 Documents Liés
|
|
|
|
- `ANALYSE_ARCHITECTURE_WEAVIATE.md` - Architecture complète de la base
|
|
- `WEAVIATE_GUIDE_COMPLET.md` - Guide d'utilisation Weaviate
|
|
- `test_resume.py` - Script de test (ce fichier a généré l'analyse)
|
|
- `resultats_resume.txt` - Résultats bruts de la recherche
|
|
|
|
---
|
|
|
|
## 🎓 Conclusion
|
|
|
|
### État Actuel: ❌ COLLECTION SUMMARY NON FONCTIONNELLE
|
|
|
|
La collection Summary existe (8,425 objets) mais est **inutilisable** pour la recherche car:
|
|
1. Les résumés sont vides (juste des titres)
|
|
2. Les concepts sont absents
|
|
3. Pas de lien avec les Chunks (chunksCount=0)
|
|
4. Scores de similarité très faibles (0.71-0.72)
|
|
|
|
### Impact sur l'Architecture RAG
|
|
|
|
**Stratégie Two-Stage cassée**:
|
|
- ❌ Impossible de faire Summary → Chunk
|
|
- ❌ Pas de recherche hiérarchique
|
|
- ✅ Chunk search seul fonctionne (mais perd le contexte)
|
|
|
|
**Solution de contournement actuelle**:
|
|
- Utiliser uniquement la recherche directe dans Chunk
|
|
- Ignorer complètement Summary
|
|
- Perdre 8,425 vecteurs (~60% de la base)
|
|
|
|
### Priorité: 🔴 HAUTE
|
|
|
|
Cette correction est **critique** pour exploiter l'architecture à deux niveaux de Library RAG.
|
|
|
|
**ROI attendu**: +30% précision, recherche hiérarchique fonctionnelle, 60% de la base vectorielle activée.
|
|
|
|
---
|
|
|
|
**Dernière mise à jour**: 2026-01-03
|
|
**Auteur**: Analyse automatisée
|
|
**Version**: 1.0
|