Convertitore di documenti
Il convertitore di documenti di LangChain ha principalmente la funzione di segmentare il contenuto del testo, suddividendo un lungo articolo in più frammenti di contenuto più piccoli. Questo viene fatto perché i modelli di grandi dimensioni di solito hanno limiti sulla lunghezza dei prompt e non possono elaborare tutto il contenuto tramite l'IA. Anche se alcuni modelli di grandi dimensioni permettono una lunghezza del prompt molto grande, dal punto di vista dei costi, non è pratico passare un contenuto così lungo all'IA. Dopotutto, più lungo è il contenuto, più elevato è il costo delle chiamate API (anche per modelli open-source implementati in locale, il contenuto più lungo richiede più memoria GPU e un'inferenza più lenta). L'approccio ragionevole è concatenare frammenti di contenuto rilevanti come informazioni di background e prompt al momento della richiesta al modello di IA.
LangChain dispone di vari convertitori di documenti incorporati in grado di dividere, combinare e filtrare facilmente il contenuto del documento.
Separatore di Testo
Nel trattare con ampi blocchi di testo, è necessario suddividere il testo in segmenti. Anche se sembra semplice, ci sono molte complessità potenziali qui. Idealmente, si desidera mantenere insieme segmenti di testo semanticamente correlati. Il termine "semanticamente correlato" qui può dipendere dal tipo di testo.
A un livello più alto, il separatore di testo funziona come segue:
- Dividere il testo in blocchi piccoli e semanticamente significativi (di solito frasi).
- Combinare questi blocchi piccoli in blocchi più grandi fino a raggiungere una certa dimensione (misurata da una qualche funzione).
- Una volta raggiunta questa dimensione, trattare il blocco come un proprio segmento di testo e iniziare a creare un nuovo blocco di testo con un certo sovrapporsi (per mantenere il contesto tra i blocchi).
Ciò significa che è possibile personalizzare il separatore di testo lungo due assi diversi:
- Come suddividere il testo
- Come misurare la dimensione dei blocchi
Esempio
Il separatore di testo consigliato predefinito è RecursiveCharacterTextSplitter. Questo separatore di testo accetta una lista di caratteri. Cerca di creare blocchi basati sul primo carattere, ma se un blocco è troppo grande, continuerà a muoversi al carattere successivo, e così via. Per impostazione predefinita, i caratteri su cui cerca di dividere sono ["\\\\n\\\\n", "\\\\n", " ", ""]
.
Oltre a controllare quali caratteri possono essere suddivisi, è possibile controllare anche diversi altri elementi:
-
length_function
: Come calcolare la lunghezza di un blocco. Per impostazione predefinita, viene conteggiato solo il numero di caratteri, ma spesso vengono passati qui i contatori di token. -
chunk_size
: La dimensione massima dei blocchi (misurata dalla funzione di lunghezza). -
chunk_overlap
: L'overlap massimo tra i blocchi. Mantenere un certo sovrapporsi può aiutare a mantenere la continuità tra i blocchi (ad es., eseguendo una finestra scorrevole). -
add_start_index
: Se includere o meno la posizione iniziale di ciascun blocco nel documento originale nei metadati.
with open('../../state_of_the_union.txt') as f:
state_of_the_union = f.read()
from langchain.separatore_testo import RecursiveCharacterTextSplitter
separatore_testo = RecursiveCharacterTextSplitter(
chunk_size = 100,
chunk_overlap = 20,
length_function = len,
add_start_index = True,
)
testi = separatore_testo.create_documents([state_of_the_union])
print(testi[0])
print(testi[1])
contenuto_pagina='..testo ignorato..' metadati={'start_index': 0}
contenuto_pagina='..testo ignorato..' metadati={'start_index': 82}
Altre Trasformazioni:
Filtraggio dei Documenti Redondanti, Traduzione dei Documenti, Estrazione Metadati e Altro Ancora
Oltre alla suddivisione dei documenti, possiamo anche effettuare altre trasformazioni sul contenuto del documento. Utilizzando EmbeddingsRedundantFilter
, possiamo identificare documenti simili e filtrare contenuti ridondanti. Attraverso integrazioni come doctran, possiamo eseguire operazioni come la traduzione di documenti da una lingua all'altra, l'estrazione delle proprietà richieste e l'aggiunta delle stesse ai metadati, nonché la conversione delle conversazioni in un insieme di documenti formattati Q/A.