hello world rag
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…
Reference in New Issue