hello world rag

main
gwen 1 year ago
parent 3c01502c4f
commit 1094f91871

@ -0,0 +1,11 @@
Hello, World!
Cette phrase est souvent utilisée comme un premier programme dans de nombreux langages de programmation. Elle est simple et permet de vérifier que l'environnement de développement est correctement configuré.
L'origine de "Hello, World!" remonte aux années 1970. Elle a été popularisée par le livre "The C Programming Language" de Brian Kernighan et Dennis Ritchie. Depuis, elle est devenue une tradition dans l'apprentissage de la programmation.
Le programme "Hello, World!" est un excellent point de départ pour les débutants. Il permet de comprendre les bases de la syntaxe d'un langage de programmation et de voir comment compiler et exécuter un programme.
Dans certains langages, comme Python, afficher "Hello, World!" est très simple. Il suffit d'une seule ligne de code : print("Hello, World!"). D'autres langages peuvent nécessiter plus de lignes de code pour accomplir la même tâche.
Aujourd'hui, "Hello, World!" est plus qu'un simple programme. C'est un symbole de l'apprentissage de la programmation et une porte d'entrée vers le monde du développement logiciel.

@ -0,0 +1,56 @@
import faiss
import numpy as np
from sentence_transformers import SentenceTransformer
# Étape 1 : Lire le fichier texte
def lire_fichier(fichier):
with open(fichier, 'r', encoding='utf-8') as file:
return file.read()
# Étape 2 : Découper le texte en chunks
def decouper_texte(texte, taille_chunk=100):
mots = texte.split()
chunks = [' '.join(mots[i:i + taille_chunk]) for i in range(0, len(mots), taille_chunk)]
return chunks
# Étape 3 : Vectoriser les chunks avec SentenceTransformer
model = SentenceTransformer('paraphrase-MiniLM-L6-v2')
def vectoriser_chunks(chunks):
vecteurs = model.encode(chunks)
return vecteurs
# Étape 4 : Stocker les vecteurs dans FAISS
def creer_index_faiss(vecteurs):
dimension = vecteurs.shape[1]
index = faiss.IndexFlatL2(dimension)
index.add(vecteurs)
return index
# Étape 5 : Interroger la base de données
def interroger_base(question, index, chunks, top_k=1):
question_vector = model.encode([question])
distances, indices = index.search(question_vector, top_k)
return [chunks[i] for i in indices[0]]
# Exemple d'utilisation
texte = lire_fichier('hello-world.txt')
chunks = decouper_texte(texte)
vecteurs = vectoriser_chunks(chunks)
index_faiss = creer_index_faiss(vecteurs)
question = "Quelle est la signification de 'hello world'?"
chunks_similaires = interroger_base(question, index_faiss, chunks)
print("Chunks les plus similaires question 1 :")
for chunk in chunks_similaires:
print(chunk)
question = "Comment afficher 'Hello, World!' en Python ?"
chunks_similaires = interroger_base(question, index_faiss, chunks)
print("Chunks les plus similaires question 2 :")
for chunk in chunks_similaires:
print(chunk)

@ -0,0 +1,110 @@
# README.md
## Description
Ce programme permet de lire un fichier texte, de le découper en morceaux (chunks), de vectoriser ces morceaux à l'aide de SentenceTransformer, de stocker les vecteurs dans une base de données FAISS, et enfin d'interroger cette base de données pour trouver les morceaux les plus similaires à une question donnée.
## Prérequis
Avant d'exécuter ce programme, assurez-vous d'avoir installé les bibliothèques suivantes :
- `faiss`
- `numpy`
- `sentence-transformers`
Vous pouvez les installer via pip :
```bash
pip install faiss-cpu numpy sentence-transformers
```
## Utilisation
### Étape 1 : Lire le fichier texte
La fonction `lire_fichier` lit le contenu d'un fichier texte donné.
```python
def lire_fichier(fichier):
with open(fichier, 'r', encoding='utf-8') as file:
return file.read()
```
### Étape 2 : Découper le texte en chunks
La fonction `decouper_texte` découpe le texte en morceaux de taille définie (par défaut 100 mots).
```python
def decouper_texte(texte, taille_chunk=100):
mots = texte.split()
chunks = [' '.join(mots[i:i + taille_chunk]) for i in range(0, len(mots), taille_chunk)]
return chunks
```
### Étape 3 : Vectoriser les chunks avec SentenceTransformer
La fonction `vectoriser_chunks` utilise le modèle `SentenceTransformer` pour vectoriser les morceaux de texte.
```python
model = SentenceTransformer('paraphrase-MiniLM-L6-v2')
def vectoriser_chunks(chunks):
vecteurs = model.encode(chunks)
return vecteurs
```
### Étape 4 : Stocker les vecteurs dans FAISS
La fonction `creer_index_faiss` crée un index FAISS et y ajoute les vecteurs.
```python
def creer_index_faiss(vecteurs):
dimension = vecteurs.shape[1]
index = faiss.IndexFlatL2(dimension)
index.add(vecteurs)
return index
```
### Étape 5 : Interroger la base de données
La fonction `interroger_base` permet de rechercher les morceaux les plus similaires à une question donnée.
```python
def interroger_base(question, index, chunks, top_k=1):
question_vector = model.encode([question])
distances, indices = index.search(question_vector, top_k)
return [chunks[i] for i in indices[0]]
```
### Exemple d'utilisation
Voici un exemple d'utilisation du programme :
```python
texte = lire_fichier('hello-world.txt')
chunks = decouper_texte(texte)
vecteurs = vectoriser_chunks(chunks)
index_faiss = creer_index_faiss(vecteurs)
question = "Quelle est la signification de 'hello world'?"
chunks_similaires = interroger_base(question, index_faiss, chunks)
print("Chunks les plus similaires à la question 1 :")
for chunk in chunks_similaires:
print(chunk)
question = "Comment afficher 'Hello, World!' en Python ?"
chunks_similaires = interroger_base(question, index_faiss, chunks)
print("Chunks les plus similaires à la question 2 :")
for chunk in chunks_similaires:
print(chunk)
```
## Remarques
- Assurez-vous que le fichier `hello-world.txt` existe dans le même répertoire que le script.
- Vous pouvez ajuster la taille des chunks en modifiant le paramètre `taille_chunk` dans la fonction `decouper_texte`.
- Le modèle `SentenceTransformer` utilisé est `paraphrase-MiniLM-L6-v2`, mais vous pouvez en utiliser un autre si nécessaire.
## Licence
Ce projet est sous licence MIT. Voir le fichier `LICENSE` pour plus de détails.

@ -0,0 +1,2 @@
faiss-cpu
sentence-transformers
Loading…
Cancel
Save