Xlera8

Semantisch zoeken met vectordatabases – KDnuggets

Semantisch zoeken met vectordatabases
Afbeelding gegenereerd met Ideogram.ai
 

Ik ben er zeker van dat de meesten van ons wel eens zoekmachines hebben gebruikt. 

Er is zelfs een zin als 'Google maar eens'. De zinsnede betekent dat u naar het antwoord moet zoeken met behulp van de zoekmachine van Google. Zo kan universeel Google nu als zoekmachine worden geïdentificeerd.

Waarom is een zoekmachine zo waardevol? Met zoekmachines kunnen gebruikers eenvoudig informatie op internet verkrijgen met behulp van beperkte zoekopdrachten en die informatie ordenen op basis van relevantie en kwaliteit. Zoeken maakt op zijn beurt toegang mogelijk tot enorme kennis die voorheen ontoegankelijk was. 

Traditioneel is de zoekmachinebenadering voor het vinden van informatie gebaseerd op lexicale overeenkomsten of woordovereenkomsten. Het werkt goed, maar soms kan het resultaat nauwkeuriger zijn omdat de gebruikersintentie verschilt van de invoertekst.

De invoer ‘Red Dress Shot in the Dark’ kan bijvoorbeeld een dubbele betekenis hebben, vooral bij het woord ‘Shot’. De meest waarschijnlijke betekenis is dat de foto van de Rode Jurk in het donker is genomen, maar traditionele zoekmachines zouden dit niet begrijpen. Dat is de reden waarom Semantisch zoeken in opkomst is.

Semantisch zoeken kan worden gedefinieerd als een zoekmachine die rekening houdt met de betekenis van woorden en zinnen. De semantische zoekuitvoer zou informatie zijn die overeenkomt met de betekenis van de zoekopdracht, wat contrasteert met een traditionele zoekopdracht die de zoekopdracht met woorden matcht.

Op het gebied van NLP (Natural Language Processing) hebben vectordatabases de semantische zoekmogelijkheden aanzienlijk verbeterd door gebruik te maken van de opslag, indexering en het ophalen van hoogdimensionale vectoren die de betekenis van tekst vertegenwoordigen. Semantisch zoeken en vectordatabases waren dus nauw verwante velden.

In dit artikel wordt semantisch zoeken besproken en hoe u een vectordatabase gebruikt. Laten we, met dat in gedachten, erop ingaan.

Laten we semantisch zoeken bespreken in de context van vectordatabases.

Semantische zoekideeën zijn gebaseerd op de betekenissen van de tekst, maar hoe kunnen we die informatie vastleggen? Een computer kan geen gevoel of kennis hebben zoals mensen dat hebben, wat betekent dat het woord 'betekenissen' naar iets anders moet verwijzen. Bij de semantische zoektocht zou het woord ‘betekenis’ een representatie van kennis worden die geschikt is voor betekenisvol ophalen.

De betekenisweergave komt als Embedding, het teksttransformatieproces naar een vector met numerieke informatie. We kunnen bijvoorbeeld de zin ‘Ik wil meer leren over semantisch zoeken’ transformeren met behulp van het OpenAI Embedding-model.

[-0.027598874643445015, 0.005403674207627773, -0.03200408071279526, -0.0026835924945771694, -0.01792600005865097,...]

 

Hoe kan deze numerieke vector dan de betekenissen vastleggen? Laten we een stapje terug doen. Het resultaat dat u hierboven ziet, is het insluitingsresultaat van de zin. De uitvoer van het insluiten zou anders zijn als u zelfs maar één woord in de bovenstaande zin zou vervangen. Zelfs een enkel woord zou ook een andere inbeddingsuitvoer hebben.  

Als we naar het hele plaatje kijken, zullen de inbedding van een enkel woord en die van een volledige zin aanzienlijk verschillen, omdat de inbedding van zinnen rekening houdt met relaties tussen woorden en de algemene betekenis van de zin, die niet wordt vastgelegd in de inbedding van individuele woorden. Dit betekent dat elk woord, elke zin en elke tekst uniek is wat betreft het insluitingsresultaat. Op deze manier kan inbedding betekenis vastleggen in plaats van lexicale matching.

Hoe werkt semantisch zoeken met vectoren? Een semantische zoekopdracht heeft tot doel uw corpus in een vectorruimte in te bedden. Hierdoor kan elk datapunt informatie verstrekken (tekst, zin, documenten, enz.) en een coördinaatpunt worden. De zoekopdrachtinvoer wordt tijdens de zoektijd verwerkt tot een vector via inbedding in dezelfde vectorruimte. We zouden de inbedding van ons corpus die het dichtst bij de zoekopdrachtinvoer ligt vinden met behulp van vectorgelijkenismaatstaven zoals Cosinus-overeenkomsten. Om het beter te begrijpen, kunt u de onderstaande afbeelding bekijken.

 

Semantisch zoeken met vectordatabases
Afbeelding door auteur
 

Elke inbeddingscoördinaat van een document wordt in de vectorruimte geplaatst, en de inbedding van de query wordt in de vectorruimte geplaatst. Het document dat het dichtst bij de vraag ligt, wordt geselecteerd omdat dit theoretisch de semantische betekenis heeft die het dichtst bij de invoer ligt.

Het onderhouden van de vectorruimte die alle coördinaten bevat, zou echter een enorme taak zijn, vooral met een groter corpus. De Vector-database heeft de voorkeur voor het opslaan van de vector in plaats van de hele vectorruimte, omdat deze betere vectorberekeningen mogelijk maakt en de efficiëntie kan behouden naarmate de gegevens groeien.

Het proces op hoog niveau van semantisch zoeken met vectordatabases is te zien in de onderstaande afbeelding.

 

Semantisch zoeken met vectordatabases
Afbeelding door auteur
 

In de volgende sectie zullen we een semantische zoekopdracht uitvoeren met een Python-voorbeeld. 

In dit artikel gebruiken we een open-source vectordatabase Weviaten. Voor tutorialdoeleinden gebruiken we ook Weaviate Cloud Service (WCS) om onze vector op te slaan.

Eerst moeten we het Weavieate Python-pakket installeren.

pip install weaviate-client

 

Meld u dan aan voor hun gratis cluster via Weaviate-console en beveilig zowel de Cluster-URL als de API-sleutel.

Wat het datasetvoorbeeld betreft, zouden we de Juridische tekstgegevens van Kaggle. Om het eenvoudiger te maken, zouden we ook alleen de bovenste 100 rijen met gegevens gebruiken.

import pandas as pd
data = pd.read_csv('legal_text_classification.csv', nrows = 100)

 

Semantisch zoeken met vectordatabases
Afbeelding door auteur
 

Vervolgens zouden we alle gegevens opslaan in de Vector Databases op Weaviate Cloud Service. Om dat te doen, moeten we de verbinding met de database instellen.

import weaviate
import os
import requests
import json


cluster_url = "YOUR_CLUSTER_URL"
wcs_api_key = "YOUR_WCS_API_KEY"
Openai_api_key ="YOUR_OPENAI_API_KEY"

client = weaviate.connect_to_wcs(
    cluster_url=cluster_url,
    auth_credentials=weaviate.auth.AuthApiKey(wcs_api_key),
    headers={
        "X-OpenAI-Api-Key": openai_api_key
    }
)

 

Het volgende dat we moeten doen is verbinding maken met de Weaviate Cloud Service en een klasse maken (zoals Table in SQL) om alle tekstgegevens op te slaan. 

import weaviate.classes as wvc

client.connect()
legal_cases = client.collections.create(
    name="LegalCases",
    vectorizer_config=wvc.config.Configure.Vectorizer.text2vec_openai(),  
    generative_config=wvc.config.Configure.Generative.openai()  
)

 

In de bovenstaande code maken we een LegalCases-klasse die het OpenAI Embedding-model gebruikt. Op de achtergrond zou elk tekstobject dat we in de LegalCases-klasse zouden opslaan, het OpenAI Embedding-model doorlopen en worden opgeslagen als de insluitingsvector.

Laten we proberen de juridische tekstgegevens op te slaan in een vectordatabase. Om dat te doen, kunt u de volgende code gebruiken.

sent_to_vdb = data.to_dict(orient='records')
legal_cases.data.insert_many(sent_to_vdb)

 

U zou in het Weaviate Cluster moeten zien dat uw juridische tekst daar al is opgeslagen. 

Laten we, nu de vectordatabase klaar is, de semantische zoekopdracht proberen. Weaviate API maakt het eenvoudiger, zoals weergegeven in de onderstaande code. In het onderstaande voorbeeld zullen we proberen de gevallen te vinden die zich in Australië voordoen.

response = legal_cases.query.near_text(
      query="Cases in Australia",
      limit=2
  )

for i in range(len(response.objects)):
  print(response.objects[i].properties)

 

Het resultaat is hieronder weergegeven.

{'case_title': 'Castlemaine Tooheys Ltd v South Australia [1986] HCA 58 ; (1986) 161 CLR 148', 'case_id': 'Case11', 'case_text': 'Hexal Australia Pty Ltd v Roche Therapeutics Inc (2005) 66 IPR 325, the likelihood of irreparable harm was regarded by Stone J as, indeed, a separate element that had to be established by an applicant for an interlocutory injunction. Her Honour cited the well-known passage from the judgment of Mason ACJ in Castlemaine Tooheys Ltd v South Australia [1986] HCA 58 ; (1986) 161 CLR 148 (at 153) as support for that proposition.', 'case_outcome': 'cited'}

{'case_title': 'Deputy Commissioner of Taxation v ACN 080 122 587 Pty Ltd [2005] NSWSC 1247', 'case_id': 'Case97', 'case_text': 'both propositions are of some novelty in circumstances such as the present, counsel is correct in submitting that there is some support to be derived from the decisions of Young CJ in Eq in Deputy Commissioner of Taxation v ACN 080 122 587 Pty Ltd [2005] NSWSC 1247 and Austin J in Re Currabubula Holdings Pty Ltd (in liq); Ex parte Lord (2004) 48 ACSR 734; (2004) 22 ACLC 858, at least so far as standing is concerned.', 'case_outcome': 'cited'}

 

Zoals u kunt zien, hebben we twee verschillende resultaten. In het eerste geval werd het woord ‘Australië’ rechtstreeks in het document vermeld, zodat het gemakkelijker te vinden is. In het tweede resultaat stond echter nergens het woord ‘Australië’. Semantisch zoeken kan het echter vinden omdat er woorden zijn die verband houden met het woord ‘Australië’, zoals ‘NSWSC’ wat staat voor het Hooggerechtshof van New South Wales, of het woord ‘Currabubula’, wat het dorp in Australië is.

Bij traditionele lexicale matching kan het tweede record over het hoofd worden gezien, maar semantisch zoeken is veel nauwkeuriger omdat hierbij rekening wordt gehouden met de documentbetekenissen.

Dat is alles: de eenvoudige Semantic Search met Vector Database-implementatie.

Zoekmachines hebben de informatieverwerving op internet gedomineerd, hoewel de traditionele methode met lexicale match een fout bevat, namelijk dat deze er niet in slaagt de intentie van de gebruiker vast te leggen. Deze beperking leidt tot de Semantic Search, een zoekmachinemethode die de betekenis van documentquery's kan interpreteren. Verbeterd met vectordatabases is de semantische zoekmogelijkheid nog efficiënter.

In dit artikel hebben we onderzocht hoe Semantic Search werkt en de praktische Python-implementatie met Open-Source Weaviate Vector Databases. Ik hoop dat het helpt!
 
 

Cornellius Yudha Wijaya is een data science assistent-manager en dataschrijver. Terwijl hij fulltime bij Allianz Indonesia werkt, deelt hij graag Python- en datatips via sociale media en schrijfmedia. Cornellius schrijft over verschillende AI- en machine learning-onderwerpen.

Chat met ons

Hallo daar! Hoe kan ik u helpen?