Connect with us

Artificiell intelligens

LlamaIndex: Förbättra dina LLM-applikationer med anpassad data enkelt

mm
LlamaIndex

Stora språkmodeller (LLM) som OpenAI:s GPT-serie har tränats på en mångfaldig mängd offentligt tillgängliga data, vilket har visat på anmärkningsvärda förmågor inom textgenerering, sammanfattning, frågesvar och planering. Trots deras mångsidighet kretsar en vanligt ställd fråga kring den smidiga integrationen av dessa modeller med anpassad, privat eller proprietär data.

Företag och individer är överhopade med unik och anpassad data, ofta belagd i olika applikationer som Notion, Slack och Salesforce, eller lagrad i personliga filer. För att utnyttja LLM för denna specifika data har flera metoder föreslagits och experimenterats med.

Fine-tuning representerar en sådan approach, det består av justering av modellens vikter för att inkorporera kunskap från specifika datamängder. Men denna process är inte utan utmaningar. Den kräver betydande ansträngning i dataförberedelse, kombinerat med en svår optimeringsprocess, vilket kräver en viss nivå av maskinlärarakompetens. Dessutom kan de ekonomiska implikationerna vara betydande, särskilt när man hanterar stora datamängder.

In-context learning har dykt upp som ett alternativ, med fokus på att skapa ingångar och prompter för att ge LLM den nödvändiga kontexten för att generera precisa utdata. Denna approach mildrar behovet av omfattande modellomträning, vilket erbjuder en mer effektiv och tillgänglig metod för integration av privat data.

Men nackdelen med detta är dess beroende av användarens färdighet och expertis i prompt engineering. Dessutom kan in-context learning inte alltid vara lika exakt eller tillförlitlig som fine-tuning, särskilt när man hanterar högt specialiserad eller teknisk data. Modellens pre-träning på en bred mängd internettext garanterar inte förståelse för specifik jargong eller kontext, vilket kan leda till felaktiga eller irrelevanta utdata. Detta är särskilt problematiskt när den privata datan är från en nischdomän eller industri.

Dessutom är mängden kontext som kan tillhandahållas i en enda prompt begränsad, och LLM:s prestation kan försämras när uppgiftens komplexitet ökar. Det finns också utmaningen med sekretess och datasäkerhet, eftersom informationen som tillhandahålls i prompten potentiellt kan vara känslig eller konfidentiell.

Medan samhället utforskar dessa tekniker, får verktyg som LlamaIndex uppmärksamhet.

Llama Index

Llama Index

Det startades av Jerry Liu, en före detta Uber-forskare. Medan han experimenterade med GPT-3 i höstas, observerade Liu modellens begränsningar när det gäller att hantera privat data, såsom personliga filer. Denna observation ledde till starten av det öppna projektet LlamaIndex.

Initiativet har lockat investerare, säkrat $8,5 miljoner i en nylig seedfinansieringsrunda.

LlamaIndex möjliggör utökning av LLM med anpassad data, broar gapet mellan förtränade modeller och anpassad dataanvändning. Genom LlamaIndex kan användare utnyttja sin egen data med LLM, låser upp kunskapsgenerering och resonemang med personliga insikter.

Användare kan smidigt tillhandahålla LLM med sin egen data, skapar en miljö där kunskapsgenerering och resonemang är djupt personliga och insiktsfulla. LlamaIndex adresserar begränsningarna i in-context learning genom att tillhandahålla en mer användarvänlig och säker plattform för datainteraktion, säkerställer att även de med begränsad maskinlärarakompetens kan utnyttja full potential av LLM med sin privata data.

Högsta koncept och insikter

1. Retrieval Augmented Generation (RAG):

LlamaIndex RAG

LlamaIndex RAG

RAG är en tvåfaldig process designad för att koppla LLM med anpassad data, förbättrar modellens förmåga att leverera mer precisa och informerade svar. Processen består av:

  • Indexeringssteg: Detta är den förberedande fasen där grunden för kunskapsbasen läggs.
LlamaIndex INDEXES

LlamaIndex Indexing

  • Frågesteg: Här genomsöks kunskapsbasen för relevant kontext för att assistera LLM i att svara på frågor.
LlamaIndex QUERY STAGE

LlamaIndex Query Stage

Indexeringsresa med LlamaIndex:

  • Dataanslutningar: Tänk på dataanslutningar som din datas pass till LlamaIndex. De hjälper till att importera data från varierande källor och format, inkapslar dem i en enkel “dokument”-representation. Dataanslutningar kan hittas inom LlamaHub, ett öppet repository fyllt med. Dessa laddare är skapade för enkel integration, möjliggör en plug-and-play-upplevelse med någon LlamaIndex-applikation.
Llama hub

LlamaIndex hub (https://llamahub.ai/)

  • Dokument / Noder: Ett dokument är som en generisk resväska som kan hålla olika datatyper—antingen en PDF, API-utdata eller databasposter. Å andra sidan är en nod en snippet eller “chunk” från ett dokument, berikad med metadata och relationer till andra noder, säkerställer en robust grund för exakt dataåtervinning senare.
  • Dataindex: Efter datainmatning hjälper LlamaIndex till att indexera denna data i en återvinningsbar form. Bakom kulisserna dissekerar den råa dokumenten i mellanliggande representationer, beräknar vektorembeddningar och härleder metadata. Bland indexen är “VectorStoreIndex” ofta det gängse valet.

Typer av index i LlamaIndex: Nyckel till organiserad data

LlamaIndex erbjuder olika typer av index, var och en för olika behov och användningsfall. I kärnan av dessa index ligger “noder” som diskuterats ovan. Låt oss försöka förstå LlamaIndex-index med deras mekanismer och tillämpningar.

1. Listindex:

  • Mekanism: Ett Listindex anordnar noder sekventiellt som en lista. Efter att ha chunkat indata i noder, anordnas de i en linjär form, redo att frågas antingen sekventiellt eller via nyckelord eller inbäddningar.
  • Fördel: Denna index typ lyser när behovet är för sekventiell fråga. LlamaIndex säkerställer att hela indata används, även om den överstiger LLM:s tokenbegränsning, genom att smart fråga text från varje nod och raffinera svar när den navigerar nedåt listan.

2. Vector Store Index:

  • Mekanism: Här omvandlas noder till vektorembeddningar, lagrade antingen lokalt eller i en specialiserad vektordatabas som Milvus. När den frågas, hämtar den de topp_k mest liknande noderna, kanaliserar dem till svarsyntetisatorn.
  • Fördel: Om din arbetsflöde är beroende av textjämförelse för semantisk likhet via vektorsökning, kan denna index användas.

3. Trädindex:

  • Mekanism: I ett Trädindex utvecklas indata till en trädstruktur, byggd underifrån av löv-noder (de ursprungliga). Föräldranoder uppstår som sammanfattningar av löv-noder, skapade med hjälp av GPT. Under en fråga kan trädindexet antingen traversera från rotnoden till löv-noder eller konstruera svarekt från valda löv-noder.
  • Fördel: Med ett Trädindex blir fråga av långa textchunk mer effektiv, och extrahering av information från olika textsegment förenklas.

4. Nyckelordsindex:

  • Mekanism: En karta av nyckelord till noder utgör kärnan i ett Nyckelordsindex. När den frågas, plockas nyckelorden från frågan, och endast de kartade noderna bringas in i rampljuset.
  • Fördel: När du har en tydlig användarfråga, kan ett Nyckelordsindex användas. Till exempel, att sila genom hälso-dokument blir mer effektivt när man bara fokuserar på dokument som är relevanta för COVID-19.

Installation av LlamaIndex

Installation av LlamaIndex är en enkel process. Du kan välja att installera det antingenekt från Pip eller från källan. (Se till att ha python installerat i ditt system eller så kan du använda Google Colab)

1. Installation från Pip:

  • Kör följande kommando:

    pip install llama-index

  • Notera: Under installationen kan LlamaIndex ladda ner och lagra lokala filer för vissa paket som NLTK och HuggingFace. För att ange en katalog för dessa filer, använd “LLAMA_INDEX_CACHE_DIR”-miljövariabeln.

2. Installation från källa:

  • Först, klona LlamaIndex-repositoriet från GitHub:

    git clone https://github.com/jerryjliu/llama_index.git

  • När det är klont, navigera till projektkatalogen.
  • Du behöver Poetry för att hantera paketberoenden.
  • Nu, skapa en virtuell miljö med hjälp av Poetry:

    poetry shell

  • Slutligen, installera det grundläggande paketkraven med:

    poetry install

Konfigurera din miljö för LlamaIndex

1. OpenAI-konfiguration:

  • Som standard använder LlamaIndex OpenAI:s gpt-3.5-turbo för textgenerering och text-embedding-ada-002 för återvinning och inbäddningar.
  • För att använda denna konfiguration behöver du ha en OPENAI_API_KEY. Få en genom att registrera dig på OpenAI:s webbplats och skapa en ny API-nyckel.
  • Du har flexibiliteten att anpassa den underliggande stora språkmodellen (LLM) enligt ditt projekts behov. Beroende på din LLM-leverantör kan du behöva ytterligare miljönycklar och token.

2. Lokal miljökonfiguration:

  • Om du föredrar att inte använda OpenAI, växlar LlamaIndex automatiskt till lokala modeller – LlamaCPP och llama2-chat-13B för textgenerering, och BAAI/bge-small-en för återvinning och inbäddningar.
  • För att använda LlamaCPP, följ den tillhandahållna installationsguiden. Se till att installera llama-cpp-python-paketet, idealiskt kompilera för att stödja din GPU. Denna konfiguration kommer att använda cirka 11,5 GB minne över CPU och GPU.
  • För lokala inbäddningar, kör pip install sentence-transformers. Denna lokala konfiguration kommer att använda cirka 500 MB minne.

Med dessa konfigurationer kan du anpassa din miljö för att antingen utnyttja kraften från OpenAI eller köra modeller lokalt, i linje med ditt projekts krav och resurser.

En enkel användningsfall: Fråga webbsidor med LlamaIndex och OpenAI

Här är ett enkelt Python-skript för att demonstrera hur du kan fråga en webbsida för specifika insikter:

!pip install llama-index html2text


import os
from llama_index import VectorStoreIndex, SimpleWebPageReader

# Ange din OpenAI-nyckel nedan:
os.environ["OPENAI_API_KEY"] = ""

# URL du vill ladda in i din vektordatabas här:
url = "http://www.paulgraham.com/fr.html"

# Ladda URL:en in i dokument (flera dokument möjliga)
dokument = SimpleWebPageReader(html_to_text=True).load_data([url])

# Skapa vektordatabas från dokument
index = VectorStoreIndex.from_documents(dokument)

# Skapa frågemotor så att vi kan ställa frågor:
query_engine = index.as_query_engine()

# Ställ så många frågor som du vill mot den laddade datan:
svar = query_engine.query("Vad är de tre bästa råden från Paul för att samla in pengar?")
print(svar)
De tre bästa råden från Paul för att samla in pengar är:
1. Börja med ett lågt nummer när du först samlar in pengar. Detta möjliggör flexibilitet och ökar chanserna att samla in mer pengar på lång sikt.
2. Syfta till att vara lönsam om möjligt. Att ha en plan för att nå lönsamhet utan att förlita sig på ytterligare finansiering gör startupen mer attraktiv för investerare.
3. Optimera inte för värdering. Medan värdering är viktigt, är det inte den viktigaste faktorn i finansiering. Fokusera på att få nödvändiga medel och hitta bra investerare istället.
Google Colab Llama Index Notebook

Google Colab Llama Index Notebook

Med detta skript har du skapat ett kraftfullt verktyg för att extrahera specifik information från en webbsida genom att enkelt ställa en fråga. Detta är bara en glimt av vad som kan uppnås med LlamaIndex och OpenAI när man frågar webbdata.

LlamaIndex vs Langchain: Välj baserat på ditt mål

Ditt val mellan LlamaIndex och Langchain kommer att bero på ditt projekts mål. Om du vill utveckla ett intelligent sökverktyg är LlamaIndex ett solitt val, excellerar som en smart lagringsmekanism för dataåtervinning. Å andra sidan, om du vill skapa ett system som ChatGPT med plugin-funktioner, är Langchain ditt gå-till. Det inte bara faciliterar flera instanser av ChatGPT och LlamaIndex, men också expanderar funktionalitet genom att tillåta konstruktion av multi-uppgiftsagenter. Till exempel, med Langchain, kan du skapa agenter som kan exekvera Python-kod samtidigt som de genomför en Google-sökning. I kort, medan LlamaIndex excellerar i datahantering, orkestrerar Langchain flera verktyg för att leverera en holistisk lösning.

LlamaIndex Logo Artwork created using Midjourney

LlamaIndex Logo Artwork created using Midjourney

Jag har under de senaste fem åren dykt ner i den fascinerande världen av Machine Learning och Deep Learning. Min passion och expertis har lett mig till att bidra till över 50 olika mjukvaruutvecklingsprojekt, med särskild fokus på AI/ML. Min pågående nyfikenhet har också dragit mig mot Natural Language Processing, ett område som jag är angelägen om att utforska vidare.