You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.3 KiB
Markdown
111 lines
3.3 KiB
Markdown
|
1 year ago
|
# 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.
|