Het voortdurend veranderende datalandschap, in combinatie met de snelle vooruitgang in Generatieve AI in de afgelopen twee jaar, heeft de koers van semantisch zoeken veranderd en de populariteit van semantische zoektoepassingen sterk vergroot.
Zoeken en ophalen is het proces van het lokaliseren en verkrijgen van specifieke informatie of data uit een grotere database of collectie op basis van zoekcriteria. De vooruitgang in AI heeft de vraag naar nauwkeurigere, contextbewuste en efficiëntere zoekmethoden vergroot en geleid tot de opkomst van semantische zoektoepassingen overal.
Semantisch zoeken overstijgt de beperkingen van traditionele zoekopdrachten op basis van trefwoorden door de intentie en contextuele betekenis van zoekopdrachten te begrijpen, waardoor relevantere en preciezere resultaten worden geleverd.
Om een end-to-end semantische zoekapplicatie te bouwen, moet je verschillende kernconcepten begrijpen, zoals embeddings, vectordatabases, afstandsmetingen, enzovoort, en ook leren hoe je producten/diensten zoals Pinecone en de GPT-modellen van OpenAI gebruikt om end-to-end semantische zoekapplicaties te bouwen en te implementeren.
Aan het eind van deze blog hebben lezers een volledig begrip van de principes van semantisch zoeken, embeddings en de rol van vectordatabases, en leren ze tot slot hoe je semantisch zoeken in Python implementeert met behulp van:
Embedding is een kernconcept in machine learning. Het overbrugt de kloof tussen de complexe, genuanceerde wereld van menselijke taal en begrip en de precieze, wiskundige representatie van de menselijke wereld in getallen.
Ongestructureerde data, zoals tekst, afbeeldingen, audio- en videobestanden, voldoen niet aan een specifiek, georganiseerd formaat en vormen daardoor uitdagingen voor opslag en verwerking in conventionele databases. Voor analyse in machine learning- en AI-toepassingen is vaak een transformatie nodig naar multidimensionale numerieke representaties via vector-embeddings. Het proces van het omzetten van ongestructureerde data in multidimensionale numerieke vectors wordt embedding genoemd.
Embeddings zijn multidimensionale numerieke representaties van tekst, afbeeldingen of elk type ongestructureerde data, waardoor machines de complexiteit van menselijke communicatie, relaties tussen concepten of patronen binnen data kunnen leren op een manier die rekenkundig efficiënt en contextueel rijk is.
Het kernidee achter embeddingmodellen is dat vergelijkbare items kunnen worden weergegeven door punten die dicht bij elkaar liggen in een hoogdimensionale ruimte. Dit concept maakt het mogelijk om ingewikkelde relaties binnen de data vast te leggen, zoals synoniemen, analogieën of zelfs meer abstracte verbindingen, door de enorme complexiteit van menselijke taal of andere datatypen te reduceren tot een vorm waarmee machines kunnen werken.
Bijvoorbeeld: in tekstdata worden woorden omgezet in vectors (getallen), die in wezen reeksen getallen zijn. Deze vectors vatten de essentie van de betekenis, het gebruik en de context van woorden samen binnen het begrip van een taalmodel.
De lengte van de vector, zoals geretourneerd door het embeddingmodel, hangt af van het model dat je gebruikt. Als je bijvoorbeeld het embeddingmodel van OpenAI gebruikt, is de lengte van de vector altijd `1536`.
Het proces van het maken van embeddings
Achter de schermen is het embeddingmodel simpelweg een gigantisch neuronaal netwerk dat is getraind op een extreem grote hoeveelheid data. Het model leert vectors toe te wijzen aan invoerdata op zo’n manier dat de geometrische relatie tussen deze vectors de semantische of conceptuele relaties tussen de datapunten weerspiegelt.
Zo kan in een goed getraind embeddingmodel de vector die het woord "king" vertegenwoordigt, minus de vector voor "man" plus de vector voor "woman", resulteren in een vector die zeer dicht in de buurt komt van de vector die "queen" vertegenwoordigt. Dit vermogen om rekenkundige bewerkingen met betekenissen uit te voeren, is een krachtig voorbeeld van hoe embeddings de onderliggende semantiek van taal vastleggen.
Het klassieke king + woman − man ≈ queen-voorbeeld van neurale woord-embeddings (Bron afbeelding)
Als je wilt, kun je je eigen embeddingmodel trainen, maar dat vereist mogelijk het verzamelen van een enorme hoeveelheid data en middelen om een gigantisch neuraal netwerk te trainen, wat miljoenen dollars kan kosten en maanden kan duren.
Een praktischer alternatief is het gebruik van een voorgetraind embeddingmodel. Er zijn veel open-source embeddingmodellen beschikbaar op Hugging Face die je kunt downloaden en lokaal gebruiken, of je kunt gebruikmaken van propriëtaire modellen van bedrijven zoals OpenAI, Anthropic, Cohere, enzovoort.
In deze blog gebruiken we OpenAI’s `text-embedding-ada-002`-model, dat scherp geprijsd is ($0,00010 per 1K tokens). Dit betekent dat een boek van 1000 pagina’s grofweg nog geen $1 kost.
De usecase voor embeddings
Embeddings zijn cruciaal voor talloze toepassingen in verschillende domeinen. In semantisch zoeken stellen ze systemen in staat om verder te gaan dan simpel trefwoordmatchen en resultaten op te halen die contextueel gerelateerd zijn aan de zoekopdracht, zelfs als de exacte woorden niet in de content voorkomen. Deze mogelijkheid verbetert de relevantie en nauwkeurigheid van zoekresultaten drastisch, waardoor het ontdekken van informatie intuïtiever en efficiënter wordt.
Tekst, audio, video en alle soorten data
Embeddings zijn niet beperkt tot tekst. Beeld-embeddings maken bijvoorbeeld vergelijkbare doorbraken mogelijk in computervisie, waardoor machines objecten, scènes en activiteiten in afbeeldingen en video’s kunnen herkennen door ze te begrijpen in een hoogdimensionale vectorruimte. Dit begrip gaat niet alleen over het identificeren van pixels, maar over het vatten van de essentie van wat die pixels voorstellen.
Embeddingmodellen zijn niet alleen transformerend, maar ook extreem nuttig, omdat ze de complexiteit van real-world data omzetten in een taal (numerieke vectors) die machines kunnen begrijpen en waarop ze kunnen handelen. Zo maken ze een breed scala aan toepassingen mogelijk die afhankelijk zijn van diep semantisch begrip en intelligente dataverwerking.
Vectordatabases vormen een relatief nieuwe categorie van niet-relationele dataopslag, die steeds populairder wordt dankzij de recente vooruitgang in generatieve AI en grote taalmodellen.
In tegenstelling tot traditionele relationele databases die data ordenen in rijen en kolommen, of andere typen niet-relationele datastores zoals documentdatabases, die data organiseren als een json- of xml-object, zijn vectordatabases ontworpen om multidimensionale vectordata efficiënt op te slaan en te verwerken.
Een vectordatabase is een gespecialiseerde database die is geoptimaliseerd voor het opslaan en bevragen van vectors. Vectors zijn in wezen reeksen getallen die datapunten in een multidimensionale ruimte vertegenwoordigen.
Het belangrijkste voordeel van vectordatabases is hun vermogen om efficiënt op gelijkenis te zoeken. Dit betekent dat ze snel items in de database kunnen vinden die het "dichtst" bij een gegeven query-item liggen, volgens een bepaalde maat voor afstand of gelijkenis.
Deze capaciteit is cruciaal voor toepassingen zoals aanbevelingssystemen, waar je producten wilt vinden die lijken op wat een gebruiker leuk vindt, of in semantische zoektoepassingen, waar het doel is om documenten te vinden die semantisch gerelateerd zijn aan een zoekzin.
Vectordatabases gebruiken verschillende algoritmes voor het indexeren en doorzoeken van vectors, vaak gebaseerd op Approximate Nearest Neighbor (ANN)-technieken.
Semantisch zoeken en de usecases
Semantisch zoeken is een grote sprong voorwaarts in de manier waarop zoekmachines gebruikerszoekopdrachten begrijpen en verwerken. In tegenstelling tot traditionele zoekmethoden, die zich richten op letterlijke overeenkomsten tussen de tekst van de query en de inhoud van documenten, duikt semantisch zoeken in de intentie en contextuele betekenis achter een query.
De evolutie van zoektechnologieën richting semantisch zoeken in het afgelopen decennium is door meerdere factoren gedreven. Spraakgestuurd zoeken, mogelijk gemaakt door virtuele assistenten zoals Siri, Alexa en Google Assistant, steunt sterk op natuurlijke taalverwerking om gebruikerscommando’s te begrijpen en uit te voeren.
Het conversatiekarakter van spraakzoekopdrachten vereist begrip van context, waardoor zoekmachines de betekenis achter volledige zinnen of langere frasen moeten doorgronden.
De complexiteit van menselijke taal en beperkingen van zoeken
De complexiteit van menselijke taal is een grote barrière voor traditionele, lexicaal gebaseerde zoektoepassingen, en semantisch zoeken overwint die barrière razendsnel. Er zijn duizenden woorden in het Engels die meerdere betekenissen hebben en de daadwerkelijke betekenis hangt af van de context waarin het woord is gebruikt. Deze woorden staan bekend als polyseme woorden.
Zo kan een woord als "table" verwijzen naar een meubelstuk of een gegevensweergave, afhankelijk van de context.
De opkomst van multimodale Large Language Models (LLM’s)
De opkomst van multimodale large language models (LLM’s) is een belangrijke drijver achter de explosieve populariteit van semantische zoektoepassingen. Semantisch zoeken, dat ernaar streeft de intentie van de zoeker en de contextuele betekenis van termen in de doorzoekbare dataspace te begrijpen, wordt aanzienlijk versterkt door de mogelijkheden van multimodale LLM’s.
Naarmate deze modellen evolueren, begrijpen en genereren ze niet alleen tekst, maar interpreteren en creëren ze ook content in verschillende formaten, waaronder afbeeldingen, audio en video’s. Deze vooruitgang betekent dat zoekopdrachten nu verder kunnen gaan dan louter trefwoordmatching, en de nuances van taal, de subtiliteiten van verschillende media en de complexe relaties tussen concepten kunnen begrijpen.
Zo kan een zoekopdracht in natuurlijke taal worden uitgevoerd en kan het systeem resultaten teruggeven die niet alleen tekstgebaseerd zijn, maar ook relevante afbeeldingen, videoclips of audiosnippers bevatten — allemaal begrepen en samengesteld door de AI om aan de intentie van de query te voldoen.
Usecases en toepassingen
Semantisch zoeken kent een breed scala aan toepassingen in verschillende domeinen en biedt aanzienlijke voordelen bij het verbeteren van de relevantie en precisie van zoekresultaten:
E-commerce: Online retailers gebruiken semantisch zoeken om productontdekking te verbeteren. Door de intentie achter zoekopdrachten te begrijpen, kunnen e-commerceplatforms producten tonen die het best aansluiten bij de behoeften van de shopper, zelfs als de query vaag was of synoniemen gebruikte die niet in de productbeschrijving voorkomen.
Contentontdekking: Contentplatforms zetten semantisch zoeken in om artikelen, video’s en andere vormen van content aan te bevelen die nauw aansluiten bij de interesses en eerdere interacties van de gebruiker, zelfs als de exacte zoektermen niet in de content voorkomen.
Klantenondersteuning: Semantisch zoeken verbetert de effectiviteit van chatbots en supportsystemen door hen in staat te stellen klantvragen nauwkeuriger te begrijpen en te beantwoorden, met reacties die contextueel relevant zijn voor de problemen van gebruikers.
Kennismangement: Binnen organisaties helpt semantisch zoeken medewerkers om informatie en documenten efficiënter te vinden door de context van hun zoekopdrachten te begrijpen, waardoor de zoektijd afneemt en de productiviteit toeneemt.
Optimalisatie voor spraakzoeken: Naarmate spraakzoeken steeds populairder wordt, speelt semantisch zoeken een cruciale rol bij het interpreteren van de natuurlijke, conversatiële taal die in dergelijke queries wordt gebruikt, zodat virtuele assistenten nauwkeurige antwoorden kunnen geven.
Pinecone is een gespecialiseerde vectordatabase die is ontworpen om complexe, hoogdimensionale data te verwerken. Het biedt geavanceerde zoek- en indexeermogelijkheden, waardoor data-engineers en -scientists grootschalige machinelearningprojecten efficiënt kunnen bouwen en draaien.
Belangrijkste functies van Pinecone
Volledig beheerd: Pinecone verzorgt alle infrastructuur en onderhoud, zodat ontwikkelaars zich kunnen richten op het bouwen en uitrollen van hun applicaties zonder het gedoe van backendbeheer.
Schaalbaarheid: Kan moeiteloos miljarden vectors beheren en horizontaal opschalen om te voldoen aan de eisen van intensieve machinelearningtaken.
Realtime data-inname: Pinecone maakt onmiddellijke toevoeging en indexering van nieuwe data mogelijk, zonder downtime of vertragingen.
Snelle zoekopdrachten: Maakt gebruik van geavanceerde algoritmes voor snelle zoekresultaten — cruciaal voor applicaties die directe respons vereisen.
Eenvoudige integratie: De API is ontworpen voor gebruiksgemak, waardoor integratie met bestaande machinelearningpijplijnen en -workflows simpel is.
Deze API’s zijn te benaderen via HTTP-verzoeken, waardoor ze compatibel zijn met elke programmeertaal die via HTTP kan communiceren.
Python-gebruikers kunnen ook de bibliotheek openai gebruiken om met deze API’s te werken, wat het nog eenvoudiger maakt. Deze bibliotheek kun je installeren met pip install openai.
Het gebruiken van de OpenAI API in Python met de openai-bibliotheek vereist maar een minimale hoeveelheid code.
Voorbeeld van het gebruik van de OpenAI-bibliotheek in Python
import os
os.environ["OPENAI_API_KEY"]=" "from openai import OpenAI
client = OpenAI()
completion = client.chat.completions.create(
model="gpt-4",
messages=[{"role":"system","content":"You are expert in Fitness & Health."},{"role":"user","content":"Explain what is Keto diet?"}])print(completion.choices[0].message)Mogelijk gemaakt door
Output: (ingekort)
ChatCompletionMessage(content="The ketogenic diet, commonly known as the keto diet, is a low-carbohydrate, high-fat diet. The diet is named after ketosis, a metabolic state where your body starts burning fat for energy instead of carbohydrates. This is accomplished by drastically reducing your intake of carbohydrates and increasing your intake of fats….", role='assistant', function_call=None, tool_calls=None)
Voor Pinecone: log in op je account en klik op API Keys. Je kunt op de knop `Click API Key` in de rechterhoek klikken.
In tegenstelling tot OpenAI hoef je bij Pinecone niet per se de API-sleutel te kopiëren wanneer je er een genereert, omdat er onder de kolom Actions een kopieericoon staat dat je altijd kunt gebruiken.
API Keys - Pinecone
Nadat je de API-sleutels van OpenAI en Pinecone hebt verkregen, ken je ze toe aan variabelen in de notebook of stel je ze in als omgevingsvariabelen met behulp van de Python os-module.
Voor deze tutorial heb je de volgende bibliotheken nodig, te installeren met pip. Je moet exact deze versies gebruiken, anders werkt de onderstaande code niet.
!pip install pinecone-client==3.0.0
!pip install pinecone-datasets==0.7.0
!pip install openai==0.28Mogelijk gemaakt door
3. Voorbeelddataset
De pinecone-datasets-bibliotheek bevat meerdere datasets die vooraf zijn ge-embed met OpenAI’s embedding-ada-002-model.
Voor dit voorbeeld gebruiken we de dataset `wikipedia-simple-text-embedding-ada-002-100K`, waarbij we slechts 5.000 van de 100.000 documenten en hun embeddings sampelen.
import pinecone_datasets
# load dataset from pinecone
dataset = pinecone_datasets.load_dataset('wikipedia-simple-text-embedding-ada-002-100K')# drop metadata column and renamed blob to metadata
dataset.documents.drop(['metadata'], axis=1, inplace=True)
dataset.documents.rename(columns={'blob':'metadata'}, inplace=True)# sample 5k documents
dataset.documents.drop(dataset.documents.index[5_000:], inplace=True)
dataset.head()Mogelijk gemaakt door
Voorbeelddataset
3. Maak een Pinecone-index
In Pinecone vertegenwoordigt een index de hoogste organisatorische eenheid voor vectordata. Het verzorgt de opslag van vectors, verwerkt queries voor de opgeslagen vectors en voert verschillende bewerkingen uit op de vectordata die het bevat.
from pinecone import Pinecone, ServerlessSpec
# configure client
pc = Pinecone(api_key=PINECONE_API_KEY)# configure serverless spec
spec = ServerlessSpec(cloud='aws', region='us-west-2')# set index name
index_name ='semantic-search-demo'# we create a new index
pc.create_index(
index_name,
dimension=1536,# dimensionality of text-embedding-ada-002
metric='cosine',
spec=spec
)Mogelijk gemaakt door
De bovenstaande code initialiseert de Pinecone-instantie en maakt een index met de naam semantic-search-demo. Op dit punt kun je deze index ook in de UI zien.
4. Data invoegen
Aangezien onze data al embedded representaties bevat, kunnen we het embeddingproces overslaan en direct doorgaan met het invoegen van data in de zojuist aangemaakte index.
Voor datasets zonder embedded representaties, embed je eerst de ruwe data met de OpenAI API (zie stap 5 hieronder voor instructies).
index = pc.Index(index_name)for batch in dataset.iter_documents(batch_size=100):
index.upsert(batch)Mogelijk gemaakt door
Nadat de code succesvol is uitgevoerd, kun je de data ook in de gebruikersinterface bekijken.
5. Nieuwe data embedden met de OpenAI API
Nieuwe data of queries moeten met hetzelfde model worden ge-embed om overeenkomende vectordimensies te garanderen. Omdat onze dataset text-embedding-ada-002 gebruikt, maken we een functie die de OpenAI API gebruikt om nieuwe queries met ditzelfde model te embedden.
import openai
openai.api_key = OPENAI_API_KEY
defget_embedding(text_to_embed):# Embed a line of text
response = openai.Embedding.create(
model="text-embedding-ada-002",input=[text_to_embed])# Extract the AI output embedding as a list of floats
embedding = response['data'][0]['embedding']return embeddingMogelijk gemaakt door
6. De vectordatabase bevragen met nieuwe data
query ="What are some easter related events in Western Christianity?"
result = get_embedding(query)print(len(result))print(result)Mogelijk gemaakt door
De lengte van result is 1536, in lijn met de dimension die is opgegeven tijdens het aanmaken van de index.
Een zoekquery versturen is vrij eenvoudig:
query_result = index.query(vector=result, top_k=3, include_metadata=True)print(query_result)Mogelijk gemaakt door
Output:
De query_result levert een dictionary op met een lijst van de top 3 overeenkomsten die corresponderen met de gebruikersquery. Deze Top N-overeenkomsten kun je nu gebruiken voor downstreamtaken, zoals het bieden van context voor prompts in Retrieval Augmented Generation (RAG)-scenario’s of het bouwen van chatbots.
Conclusie
In deze tutorial hebben we verschillende onderliggende kernconcepten geïntroduceerd, zoals embeddings en vectordatabases, om de volledige mechaniek van semantische zoekapplicaties te begrijpen.
Met de komst van Generatieve AI en de voortdurende evolutie van multimodale LLM’s is de kracht van semantisch zoeken toegenomen, met ongekende precisie en begrip van de complexiteit en nuances van ongestructureerde data.
Door de mogelijkheden van Pinecone, een geavanceerde vectordatabase, en de verfijnde embeddingmodellen van OpenAI te benutten, hebben ontwikkelaars en data scientists nu de tools binnen handbereik om semantische zoekapplicaties te creëren die traditionele zoekmethoden op basis van trefwoorden overstijgen.
In deze gids hebben we ook de betekenis van embeddings verkend bij het overbruggen van de kloof tussen de complexiteit van menselijke taal en de numerieke representaties die nodig zijn voor machine learning, en laten zien hoe deze representaties machines in staat stellen de subtiliteiten van context en intentie te begrijpen.
Het is duidelijk dat de toekomst van zoeken ligt in het begrijpen van taal en andere ongestructureerde vormen van data, aangedreven door AI. Of het nu gaat om e-commerce, contentontdekking, klantenondersteuning of kennismanagement, de principes en praktijken die in deze blog worden beschreven, bieden een fundamentele blauwdruk om de kracht van semantisch zoeken te benutten voor intelligentere, responsievere en gebruiksgerichte zoekervaringen.
Begin je reis met het ontwikkelen van AI-gestuurde applicaties met de OpenAI API. Leer over de functionaliteit achter populaire AI-toepassingen zoals ChatGPT.
Het voortdurend veranderende datalandschap, in combinatie met de snelle vooruitgang in Generatieve AI in de afgelopen twee jaar, heeft de koers van semantisch zoeken veranderd en de populariteit van semantische zoektoepassingen sterk vergroot.
Zoeken en ophalen is het proces van het lokaliseren en verkrijgen van specifieke informatie of data uit een grotere database of collectie op basis van zoekcriteria. De vooruitgang in AI heeft de vraag naar nauwkeurigere, contextbewuste en efficiëntere zoekmethoden vergroot en geleid tot de opkomst van semantische zoektoepassingen overal.
Semantisch zoeken overstijgt de beperkingen van traditionele zoekopdrachten op basis van trefwoorden door de intentie en contextuele betekenis van zoekopdrachten te begrijpen, waardoor relevantere en preciezere resultaten worden geleverd.
Om een end-to-end semantische zoekapplicatie te bouwen, moet je verschillende kernconcepten begrijpen, zoals embeddings, vectordatabases, afstandsmetingen, enzovoort, en ook leren hoe je producten/diensten zoals Pinecone en de GPT-modellen van OpenAI gebruikt om end-to-end semantische zoekapplicaties te bouwen en te implementeren.
Aan het eind van deze blog hebben lezers een volledig begrip van de principes van semantisch zoeken, embeddings en de rol van vectordatabases, en leren ze tot slot hoe je semantisch zoeken in Python implementeert met behulp van:
Ben je benieuwd om met hands-on oefeningen meer te leren? Bekijk dan onze cursus Vector Databases for Embeddings with Pinecone.
Wat is een embedding?
Embedding is een kernconcept in machine learning. Het overbrugt de kloof tussen de complexe, genuanceerde wereld van menselijke taal en begrip en de precieze, wiskundige representatie van de menselijke wereld in getallen.
Ongestructureerde data, zoals tekst, afbeeldingen, audio- en videobestanden, voldoen niet aan een specifiek, georganiseerd formaat en vormen daardoor uitdagingen voor opslag en verwerking in conventionele databases. Voor analyse in machine learning- en AI-toepassingen is vaak een transformatie nodig naar multidimensionale numerieke representaties via vector-embeddings. Het proces van het omzetten van ongestructureerde data in multidimensionale numerieke vectors wordt embedding genoemd.
Embeddings zijn multidimensionale numerieke representaties van tekst, afbeeldingen of elk type ongestructureerde data, waardoor machines de complexiteit van menselijke communicatie, relaties tussen concepten of patronen binnen data kunnen leren op een manier die rekenkundig efficiënt en contextueel rijk is.
OpenAI’s tekst- en code-embeddingmodel (Bron afbeelding)
Het kernidee achter embeddingmodellen is dat vergelijkbare items kunnen worden weergegeven door punten die dicht bij elkaar liggen in een hoogdimensionale ruimte. Dit concept maakt het mogelijk om ingewikkelde relaties binnen de data vast te leggen, zoals synoniemen, analogieën of zelfs meer abstracte verbindingen, door de enorme complexiteit van menselijke taal of andere datatypen te reduceren tot een vorm waarmee machines kunnen werken.
Bijvoorbeeld: in tekstdata worden woorden omgezet in vectors (getallen), die in wezen reeksen getallen zijn. Deze vectors vatten de essentie van de betekenis, het gebruik en de context van woorden samen binnen het begrip van een taalmodel.
De lengte van de vector, zoals geretourneerd door het embeddingmodel, hangt af van het model dat je gebruikt. Als je bijvoorbeeld het embeddingmodel van OpenAI gebruikt, is de lengte van de vector altijd `1536`.
Het proces van het maken van embeddings
Achter de schermen is het embeddingmodel simpelweg een gigantisch neuronaal netwerk dat is getraind op een extreem grote hoeveelheid data. Het model leert vectors toe te wijzen aan invoerdata op zo’n manier dat de geometrische relatie tussen deze vectors de semantische of conceptuele relaties tussen de datapunten weerspiegelt.
Zo kan in een goed getraind embeddingmodel de vector die het woord "king" vertegenwoordigt, minus de vector voor "man" plus de vector voor "woman", resulteren in een vector die zeer dicht in de buurt komt van de vector die "queen" vertegenwoordigt. Dit vermogen om rekenkundige bewerkingen met betekenissen uit te voeren, is een krachtig voorbeeld van hoe embeddings de onderliggende semantiek van taal vastleggen.
Het klassieke king + woman − man ≈ queen-voorbeeld van neurale woord-embeddings (Bron afbeelding)
Als je wilt, kun je je eigen embeddingmodel trainen, maar dat vereist mogelijk het verzamelen van een enorme hoeveelheid data en middelen om een gigantisch neuraal netwerk te trainen, wat miljoenen dollars kan kosten en maanden kan duren.
Een praktischer alternatief is het gebruik van een voorgetraind embeddingmodel. Er zijn veel open-source embeddingmodellen beschikbaar op Hugging Face die je kunt downloaden en lokaal gebruiken, of je kunt gebruikmaken van propriëtaire modellen van bedrijven zoals OpenAI, Anthropic, Cohere, enzovoort.
In deze blog gebruiken we OpenAI’s `text-embedding-ada-002`-model, dat scherp geprijsd is ($0,00010 per 1K tokens). Dit betekent dat een boek van 1000 pagina’s grofweg nog geen $1 kost.
De usecase voor embeddings
Embeddings zijn cruciaal voor talloze toepassingen in verschillende domeinen. In semantisch zoeken stellen ze systemen in staat om verder te gaan dan simpel trefwoordmatchen en resultaten op te halen die contextueel gerelateerd zijn aan de zoekopdracht, zelfs als de exacte woorden niet in de content voorkomen. Deze mogelijkheid verbetert de relevantie en nauwkeurigheid van zoekresultaten drastisch, waardoor het ontdekken van informatie intuïtiever en efficiënter wordt.
Tekst, audio, video en alle soorten data
Embeddings zijn niet beperkt tot tekst. Beeld-embeddings maken bijvoorbeeld vergelijkbare doorbraken mogelijk in computervisie, waardoor machines objecten, scènes en activiteiten in afbeeldingen en video’s kunnen herkennen door ze te begrijpen in een hoogdimensionale vectorruimte. Dit begrip gaat niet alleen over het identificeren van pixels, maar over het vatten van de essentie van wat die pixels voorstellen.
Embeddingmodellen zijn niet alleen transformerend, maar ook extreem nuttig, omdat ze de complexiteit van real-world data omzetten in een taal (numerieke vectors) die machines kunnen begrijpen en waarop ze kunnen handelen. Zo maken ze een breed scala aan toepassingen mogelijk die afhankelijk zijn van diep semantisch begrip en intelligente dataverwerking.
Wil je meer leren over embeddings? Bekijk de Introduction to Text Embeddings with the OpenAI API-blog.
Wat is een vectordatabase?
Vectordatabases vormen een relatief nieuwe categorie van niet-relationele dataopslag, die steeds populairder wordt dankzij de recente vooruitgang in generatieve AI en grote taalmodellen.
In tegenstelling tot traditionele relationele databases die data ordenen in rijen en kolommen, of andere typen niet-relationele datastores zoals documentdatabases, die data organiseren als een json- of xml-object, zijn vectordatabases ontworpen om multidimensionale vectordata efficiënt op te slaan en te verwerken.
Een vectordatabase is een gespecialiseerde database die is geoptimaliseerd voor het opslaan en bevragen van vectors. Vectors zijn in wezen reeksen getallen die datapunten in een multidimensionale ruimte vertegenwoordigen.
Bron afbeelding
Het belangrijkste voordeel van vectordatabases is hun vermogen om efficiënt op gelijkenis te zoeken. Dit betekent dat ze snel items in de database kunnen vinden die het "dichtst" bij een gegeven query-item liggen, volgens een bepaalde maat voor afstand of gelijkenis.
Deze capaciteit is cruciaal voor toepassingen zoals aanbevelingssystemen, waar je producten wilt vinden die lijken op wat een gebruiker leuk vindt, of in semantische zoektoepassingen, waar het doel is om documenten te vinden die semantisch gerelateerd zijn aan een zoekzin.
Vectordatabases gebruiken verschillende algoritmes voor het indexeren en doorzoeken van vectors, vaak gebaseerd op Approximate Nearest Neighbor (ANN)-technieken.
Semantisch zoeken en de usecases
Semantisch zoeken is een grote sprong voorwaarts in de manier waarop zoekmachines gebruikerszoekopdrachten begrijpen en verwerken. In tegenstelling tot traditionele zoekmethoden, die zich richten op letterlijke overeenkomsten tussen de tekst van de query en de inhoud van documenten, duikt semantisch zoeken in de intentie en contextuele betekenis achter een query.
Lexicaal zoeken vs. semantisch zoeken (Bron afbeelding)
De evolutie van zoektechnologieën richting semantisch zoeken in het afgelopen decennium is door meerdere factoren gedreven. Spraakgestuurd zoeken, mogelijk gemaakt door virtuele assistenten zoals Siri, Alexa en Google Assistant, steunt sterk op natuurlijke taalverwerking om gebruikerscommando’s te begrijpen en uit te voeren.
Het conversatiekarakter van spraakzoekopdrachten vereist begrip van context, waardoor zoekmachines de betekenis achter volledige zinnen of langere frasen moeten doorgronden.
De complexiteit van menselijke taal en beperkingen van zoeken
De complexiteit van menselijke taal is een grote barrière voor traditionele, lexicaal gebaseerde zoektoepassingen, en semantisch zoeken overwint die barrière razendsnel. Er zijn duizenden woorden in het Engels die meerdere betekenissen hebben en de daadwerkelijke betekenis hangt af van de context waarin het woord is gebruikt. Deze woorden staan bekend als polyseme woorden.
Zo kan een woord als "table" verwijzen naar een meubelstuk of een gegevensweergave, afhankelijk van de context.
De opkomst van multimodale Large Language Models (LLM’s)
De opkomst van multimodale large language models (LLM’s) is een belangrijke drijver achter de explosieve populariteit van semantische zoektoepassingen. Semantisch zoeken, dat ernaar streeft de intentie van de zoeker en de contextuele betekenis van termen in de doorzoekbare dataspace te begrijpen, wordt aanzienlijk versterkt door de mogelijkheden van multimodale LLM’s.
Naarmate deze modellen evolueren, begrijpen en genereren ze niet alleen tekst, maar interpreteren en creëren ze ook content in verschillende formaten, waaronder afbeeldingen, audio en video’s. Deze vooruitgang betekent dat zoekopdrachten nu verder kunnen gaan dan louter trefwoordmatching, en de nuances van taal, de subtiliteiten van verschillende media en de complexe relaties tussen concepten kunnen begrijpen.
Zo kan een zoekopdracht in natuurlijke taal worden uitgevoerd en kan het systeem resultaten teruggeven die niet alleen tekstgebaseerd zijn, maar ook relevante afbeeldingen, videoclips of audiosnippers bevatten — allemaal begrepen en samengesteld door de AI om aan de intentie van de query te voldoen.
Usecases en toepassingen
Semantisch zoeken kent een breed scala aan toepassingen in verschillende domeinen en biedt aanzienlijke voordelen bij het verbeteren van de relevantie en precisie van zoekresultaten:
Meer leren over vectordatabases? Bekijk deze uitgebreide gids met de beste vectordatabases.
Overzicht van Pinecone
Het landschap van vectordatabases (Bron afbeelding)
Pinecone is een gespecialiseerde vectordatabase die is ontworpen om complexe, hoogdimensionale data te verwerken. Het biedt geavanceerde zoek- en indexeermogelijkheden, waardoor data-engineers en -scientists grootschalige machinelearningprojecten efficiënt kunnen bouwen en draaien.
Belangrijkste functies van Pinecone
Wil je dieper in Pinecone duiken? Bekijk Mastering Vector Databases with Pinecone Tutorial: A Comprehensive Guide op Datacamp.
Overzicht van OpenAI
OpenAI biedt via het platform-API toegang tot alle modellen. Dit omvat de populaire GPT-, DALL-E- en Whisper-modellen, naast drie embeddingmodellen.
Bron
Deze API’s zijn te benaderen via HTTP-verzoeken, waardoor ze compatibel zijn met elke programmeertaal die via HTTP kan communiceren.
Python-gebruikers kunnen ook de bibliotheek
openaigebruiken om met deze API’s te werken, wat het nog eenvoudiger maakt. Deze bibliotheek kun je installeren metpip install openai.Het gebruiken van de OpenAI API in Python met de
openai-bibliotheek vereist maar een minimale hoeveelheid code.Voorbeeld van het gebruik van de OpenAI-bibliotheek in Python
Output: (ingekort)
ChatCompletionMessage(content="The ketogenic diet, commonly known as the keto diet, is a low-carbohydrate, high-fat diet. The diet is named after ketosis, a metabolic state where your body starts burning fat for energy instead of carbohydrates. This is accomplished by drastically reducing your intake of carbohydrates and increasing your intake of fats….", role='assistant', function_call=None, tool_calls=None)Ontdek hoe ChatGPT en grote taalmodellen het digitale landschap veranderen! Duik in Datacamp’s cheat sheet om de basis te beheersen van een van de krachtigste AI-API’s die beschikbaar zijn: de OpenAI API.
End-to-end Python-implementatie van semantisch zoeken in Python met de API’s van OpenAI en Pinecone
1. Meld je aan bij OpenAI en Pinecone
Nadat je een OpenAI-account hebt aangemaakt, ga je naar https://platform.openai.com/api-keys
API Keys platform.openai.com
Voor Pinecone: log in op je account en klik op API Keys. Je kunt op de knop `Click API Key` in de rechterhoek klikken.
In tegenstelling tot OpenAI hoef je bij Pinecone niet per se de API-sleutel te kopiëren wanneer je er een genereert, omdat er onder de kolom Actions een kopieericoon staat dat je altijd kunt gebruiken.
API Keys - Pinecone
Nadat je de API-sleutels van OpenAI en Pinecone hebt verkregen, ken je ze toe aan variabelen in de notebook of stel je ze in als omgevingsvariabelen met behulp van de Python os-module.
2. Python-bibliotheken installeren
Voor deze tutorial heb je de volgende bibliotheken nodig, te installeren met pip. Je moet exact deze versies gebruiken, anders werkt de onderstaande code niet.
3. Voorbeelddataset
De pinecone-datasets-bibliotheek bevat meerdere datasets die vooraf zijn ge-embed met OpenAI’s embedding-ada-002-model.
Voor dit voorbeeld gebruiken we de dataset `wikipedia-simple-text-embedding-ada-002-100K`, waarbij we slechts 5.000 van de 100.000 documenten en hun embeddings sampelen.
Voorbeelddataset
3. Maak een Pinecone-index
In Pinecone vertegenwoordigt een index de hoogste organisatorische eenheid voor vectordata. Het verzorgt de opslag van vectors, verwerkt queries voor de opgeslagen vectors en voert verschillende bewerkingen uit op de vectordata die het bevat.
De bovenstaande code initialiseert de
Pinecone-instantie en maakt een index met de naamsemantic-search-demo. Op dit punt kun je deze index ook in de UI zien.4. Data invoegen
Aangezien onze data al embedded representaties bevat, kunnen we het embeddingproces overslaan en direct doorgaan met het invoegen van data in de zojuist aangemaakte index.
Voor datasets zonder embedded representaties, embed je eerst de ruwe data met de OpenAI API (zie stap 5 hieronder voor instructies).
Nadat de code succesvol is uitgevoerd, kun je de data ook in de gebruikersinterface bekijken.
5. Nieuwe data embedden met de OpenAI API
Nieuwe data of queries moeten met hetzelfde model worden ge-embed om overeenkomende vectordimensies te garanderen. Omdat onze dataset text-embedding-ada-002 gebruikt, maken we een functie die de OpenAI API gebruikt om nieuwe queries met ditzelfde model te embedden.
6. De vectordatabase bevragen met nieuwe data
Output:
1536[0.014745471067726612, -0.03282099589705467, -0.006603493355214596, -0.0025058642495423555,.........]De lengte van
resultis 1536, in lijn met dedimensiondie is opgegeven tijdens het aanmaken van de index.Een zoekquery versturen is vrij eenvoudig:
Output:
De query_result levert een dictionary op met een lijst van de top 3 overeenkomsten die corresponderen met de gebruikersquery. Deze Top N-overeenkomsten kun je nu gebruiken voor downstreamtaken, zoals het bieden van context voor prompts in Retrieval Augmented Generation (RAG)-scenario’s of het bouwen van chatbots.
Conclusie
In deze tutorial hebben we verschillende onderliggende kernconcepten geïntroduceerd, zoals embeddings en vectordatabases, om de volledige mechaniek van semantische zoekapplicaties te begrijpen.
Met de komst van Generatieve AI en de voortdurende evolutie van multimodale LLM’s is de kracht van semantisch zoeken toegenomen, met ongekende precisie en begrip van de complexiteit en nuances van ongestructureerde data.
Door de mogelijkheden van Pinecone, een geavanceerde vectordatabase, en de verfijnde embeddingmodellen van OpenAI te benutten, hebben ontwikkelaars en data scientists nu de tools binnen handbereik om semantische zoekapplicaties te creëren die traditionele zoekmethoden op basis van trefwoorden overstijgen.
In deze gids hebben we ook de betekenis van embeddings verkend bij het overbruggen van de kloof tussen de complexiteit van menselijke taal en de numerieke representaties die nodig zijn voor machine learning, en laten zien hoe deze representaties machines in staat stellen de subtiliteiten van context en intentie te begrijpen.
Het is duidelijk dat de toekomst van zoeken ligt in het begrijpen van taal en andere ongestructureerde vormen van data, aangedreven door AI. Of het nu gaat om e-commerce, contentontdekking, klantenondersteuning of kennismanagement, de principes en praktijken die in deze blog worden beschreven, bieden een fundamentele blauwdruk om de kracht van semantisch zoeken te benutten voor intelligentere, responsievere en gebruiksgerichte zoekervaringen.
Wil je meer leren over het bouwen van semantische zoekapplicaties met Pinecone? Bekijk Semantic Search with Pinecone code-along. Of als je geïnteresseerd bent in de functionaliteit die ten grondslag ligt aan populaire AI-applicaties zoals ChatGPT, bekijk dan de cursus Working with the OpenAI API. Vergeet ook niet onze cursus Vector Databases for Embeddings with Pinecone te bekijken.