Tilpasning af dokumentopdeling
Implementér avancerede teknikker til tekstopdeling, herunder semantisk opdeling og håndtering af kode eller specifikke datastrukturer.
Tilpasning af dokumentopdeling er en gratis LangChain / RAG / vektordatabaser-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i LangChain / RAG / vektordatabaser, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. LangChain / RAG / vektordatabaser-kurset indeholder 4 lektioner i alt.
Hvorfor tilpasse tekstdeling?
Når du forbereder dokumenter til Retrieval Augmented Generation (RAG), er det afgørende, hvordan du opdeler dem i tekststykker. Grundlæggende tekstsplittere er et godt udgangspunkt, men de kommer ofte til kort med komplekst eller meget struktureret indhold.
Ved at tilpasse din strategi for tekstdeling kan du bevare en bedre kontekstuel sammenhæng, hvilket fører til mere præcise resultater ved hentning og bedre svar fra LLM'er.
Tilpasning af tegnsplittere
LangChains CharacterTextSplitter er enkel, men effektiv. Du kan tilpasse den ved at angive bestemte separator-tegn. Det er nyttigt, når dine dokumenter har unikke afgrænsere, som du vil respektere, f.eks. et bestemt mærke eller et unikt mønster for linjeskift.
Ved at definere dine egne separatorer kan du sikre logiske opdelinger i stedet for vilkårlige tegntællinger.
from langchain.text_splitter import CharacterTextSplitter
class Main:
def run(self):
text = "Chapter 1: Intro.Section 1.1: Basics.Section 1.2: Advanced."
# Custom separator is "."
splitter = CharacterTextSplitter(
separator=".",
chunk_size=20,
chunk_overlap=0
)
chunks = splitter.split_text(text)
for i, chunk in enumerate(chunks):
print(f"Chunk {i+1}: {chunk}")
if __name__ == "__main__":
Main().run()Forfining af rekursive splittere
RecursiveCharacterTextSplitter forsøger at opdele tekst ved hjælp af en liste af separatorer i rækkefølge, samtidig med at den forsøger at holde tekststykkerne så store som muligt. Du kan tilpasse denne liste, så den passer til dokumentets iboende struktur.
Du kan f.eks. prioritere opdeling ved dobbelte linjeskift, derefter enkelte linjeskift, så mellemrum og til sidst tegn.
from langchain.text_splitter import RecursiveCharacterTextSplitter
class Main:
def run(self):
text = "Hello there!\n\nThis is a paragraph.\nAnd this is another sentence."
# Custom list of separators
splitter = RecursiveCharacterTextSplitter(
separators=["\n\n", "\n", " ", ""],
chunk_size=40,
chunk_overlap=0
)
chunks = splitter.split_text(text)
for i, chunk in enumerate(chunks):
print(f"Chunk {i+1}: {chunk}")
if __name__ == "__main__":
Main().run()Introduktion til semantisk opdeling
I stedet for udelukkende at basere os på tegntællinger eller afgrænsere, hvad nu hvis vi kunne opdele tekst ud fra dens betydning?
Semantisk opdeling sigter mod at skabe tekststykker, der repræsenterer komplette, sammenhængende idéer eller emner. Denne metode hjælper med at forhindre, at vigtige begreber opdeles vilkårligt mellem forskellige tekststykker, hvilket ofte sker med splittere med fast størrelse eller simple tegnsplittere.
Sådan fungerer semantisk opdeling
Semantisk opdeling omfatter typisk nogle få trin:
- Indlejr sætninger: Hver sætning eller lille tekstenhed konverteres til en vektorindlejring.
- Mål lighed: Den semantiske lighed mellem tilstødende sætninger eller enheder måles ved hjælp af deres indlejringer.
- Find brudpunkter: Tekststykker dannes dér, hvor den semantiske lighed falder markant, hvilket viser et emneskift eller et skift i samtalen.
Selvom LangChain ikke har en enkelt indbygget 'semantisk splitter', er det et mønster, du kan opbygge ved hjælp af indlejringsmodeller og brugerdefineret logik.
Specialiserede kodesplittere
Kode har en unik struktur med funktioner, klasser, kommentarer og en bestemt syntaks. Generiske tekstsplittere opdeler ofte kode på uhensigtsmæssige steder, så de resulterende tekststykker bliver svære at forstå eller bruge som kontekst for en LLM.
LangChain tilbyder specialiserede splittere til forskellige programmeringssprog. Disse splittere forstår sprogets syntaks og sikrer, at tekststykkerne er syntaktisk meningsfulde, f.eks. ved at holde en hel funktion eller klasse samlet.
Demonstration af Python-kodesplitter
Metoden RecursiveCharacterTextSplitter.from_language giver dig mulighed for at angive et programmeringssprog. Derefter bruger den sprogspecifikke separatorer (som klassedefinitioner, funktionsdefinitioner osv.) til at oprette mere intelligente tekststykker.
Det sikrer, at kodestykker, der sendes til en LLM, er mere sammenhængende.
from langchain.text_splitter import RecursiveCharacterTextSplitter, Language
class Main:
def run(self):
python_code = """
def calculate_sum(a, b):
# This function adds two numbers
return a + b
class MyCalculator:
def __init__(self):
self.result = 0
def add(self, num):
self.result += num
if __name__ == "__main__":
total = calculate_sum(5, 3)
print(f"Sum: {total}")
calc = MyCalculator()
calc.add(10)
print(f"Calc result: {calc.result}")
"""
# Initialize splitter for Python code
python_splitter = RecursiveCharacterTextSplitter.from_language(
language=Language.PYTHON,
chunk_size=100, # Adjust chunk size to see more splits
chunk_overlap=0
)
docs = python_splitter.create_documents([python_code])
for i, doc in enumerate(docs):
print(f"--- Chunk {i+1} ---")
print(doc.page_content)
if __name__ == "__main__":
Main().run()Ud over kode: Andre strukturer
LangChain tilbyder også specialiserede splittere til andre strukturerede formater, ikke kun kode:
MarkdownTextSplitter: Forstår Markdown-syntaks (overskrifter, kodeblokke og lister) for at oprette logisk grupperede tekststykker.LatexTextSplitter: Genkender LaTeX-afsnit, kapitler og miljøer og bevarer dokumentets akademiske struktur.
Disse specialiserede splittere er uvurderlige til behandling af dokumenter, hvor selve formateringen formidler vigtig strukturel information.
Oprettelse af brugerdefineret splitterlogik
Til helt unikke dokumentstrukturer eller proprietære dataformater kan det være nødvendigt at implementere din egen delingslogik. LangChain giver dig mulighed for at:
- Oprette en underklasse af
TextSplitter: Oprette en ny klasse, der nedarver fraTextSplitter, og tilsidesætte dens metoder for at definere brugerdefinerede delingsregler. - Skrive en brugerdefineret funktion: Udvikle en funktion, der tager din tekst og returnerer en liste med tekststykker baseret på dine specifikke krav til fortolkning.
Denne tilgang giver maksimal fleksibilitet til at håndtere komplekse regex-mønstre, brugerdefinerede afgrænsere eller indlejrede strukturer, der er unikke for dit datasæt.
Test din forståelse
Du har lært om forskellige måder at tilpasse tekstdeling til forskellige dokumenttyper. Lad os teste din viden.
Opsummering af brugerdefineret tekstdeling
I denne lektion undersøgte vi, hvordan du kan gå videre end grundlæggende tekstdeling for at håndtere forskellige og komplekse dokumenttyper mere effektivt:
- Vi tilpassede splittere til tegn og rekursive tegn med bestemte lister af separatorer.
- Vi introducerede begrebet semantisk opdeling til betydningsbaserede opdelinger.
- Vi lærte om sprogspecifikke splittere til kode (f.eks. Python og Java) og andre strukturerede formater som Markdown og LaTeX.
- Til sidst talte vi om styrken og fleksibiliteten ved at oprette helt brugerdefineret delingslogik til unikke data.
At mestre tilpassede delingsstrategier er et vigtigt trin i opbygningen af præcise og robuste RAG-applikationer.
Lær LangChain / RAG / vektordatabaser med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 12
- Lektioner
- 48
Ofte stillede spørgsmål
Er lektionen “Tilpasning af dokumentopdeling” gratis?
Ja — hele teksten til “Tilpasning af dokumentopdeling” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af LangChain / RAG / vektordatabaser-kurset, skal du opgradere til CoddyKit PRO. LangChain / RAG / vektordatabaser-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Tilpasning af dokumentopdeling”?
Implementér avancerede teknikker til tekstopdeling, herunder semantisk opdeling og håndtering af kode eller specifikke datastrukturer. Du øver dig i LangChain / RAG / vektordatabaser med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på LangChain / RAG / vektordatabaser?
Der kræves ingen tidligere erfaring. LangChain / RAG / vektordatabaser på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Tilpasning af dokumentopdeling”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne LangChain / RAG / vektordatabaser-lektion?
Ja. Alle LangChain / RAG / vektordatabaser-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Indlæsning af forskellige dokumenttyper
- Forstå strategier til tekstopdeling
- Tilpasning af dokumentopdeling
- Håndtering og filtrering af dokumentmetadata