Framväxten av text och semantisk sökning motorer har gjort e-handel och detaljhandelsföretag att söka lättare för sina konsumenter. Sökmotorer som drivs av enhetlig text och bild kan ge extra flexibilitet i söklösningar. Du kan använda både text och bilder som frågor. Till exempel har du en mapp med hundratals familjebilder i din bärbara dator. Du vill snabbt hitta en bild som togs när du och din bästa vän var framför ditt gamla huss simbassäng. Du kan använda samtalsspråk som "två personer står framför en pool" som en fråga för att söka i en enhetlig text- och bildsökmotor. Du behöver inte ha rätt sökord i bildtitlar för att utföra frågan.
Amazon OpenSearch Service stöder nu cosinuslikhet mått för k-NN-index. Cosinuslikhet mäter cosinus för vinkeln mellan två vektorer, där en mindre cosinusvinkel anger en högre likhet mellan vektorerna. Med cosinuslikhet kan du mäta orienteringen mellan två vektorer, vilket gör det till ett bra val för vissa specifika semantiska sökapplikationer.
Contrastive Language-Image Pre-Training (CLIP) är ett neuralt nätverk som tränas på en mängd olika bild- och textpar. Det neurala nätverket CLIP kan projicera både bilder och text i samma latent utrymme, vilket innebär att de kan jämföras med ett likhetsmått, till exempel cosinuslikhet. Du kan använda CLIP för att koda dina produkters bilder eller beskrivning till inbäddningar, och lagra dem sedan i ett OpenSearch Service k-NN-index. Sedan kan dina kunder fråga indexet för att hämta produkter som de är intresserade av.
Du kan använda CLIP med Amazon SageMaker för att utföra kodning. Amazon SageMaker Serverless Inference är en specialbyggd inferenstjänst som gör det enkelt att distribuera och skala modeller för maskininlärning (ML). Med SageMaker kan du distribuera serverlöst för dev och testa och sedan flytta till slutledning i realtid när du går till produktion. SageMaker serverless hjälper dig att spara kostnader genom att skala ner infrastrukturen till 0 under inaktiva tider. Detta är perfekt för att bygga en POC, där du kommer att ha långa vilotider mellan utvecklingscyklerna. Du kan också använda Amazon SageMaker batch-transformation för att få slutsatser från stora datamängder.
I det här inlägget visar vi hur man bygger en sökapplikation med CLIP med SageMaker och OpenSearch Service. Koden är öppen källkod och den finns på GitHub.
Lösningsöversikt
OpenSearch Service tillhandahåller textmatchning och inbäddning av k-NN-sökning. Vi använder inbäddning av k-NN-sökning i denna lösning. Du kan använda både bild och text som en fråga för att söka efter föremål från inventeringen. Implementeringen av denna enhetliga bild- och textsökningsapplikation består av två faser:
- k-NN referensindex – I den här fasen skickar du en uppsättning korpusdokument eller produktbilder genom en CLIP-modell för att koda dem till inbäddningar. Text- och bildinbäddningar är numeriska representationer av korpusen eller bilderna. Du sparar dessa inbäddningar i ett k-NN-index i OpenSearch Service. Konceptet som ligger till grund för k-NN är att liknande datapunkter finns i omedelbar närhet i inbäddningsutrymmet. Som ett exempel är texten "en röd blomma", texten "ros" och en bild av röd ros lika, så dessa text- och bildinbäddningar ligger nära varandra i inbäddningsutrymmet.
- k-NN indexfråga – Det här är slutledningsfasen för ansökan. I den här fasen skickar du en textsökfråga eller bildsökningsfråga genom djupinlärningsmodellen (CLIP) för att koda som inbäddningar. Sedan använder du dessa inbäddningar för att fråga referensen k-NN-index lagrat i OpenSearch Service. k-NN-indexet returnerar liknande inbäddningar från inbäddningsutrymmet. Om du till exempel skickar texten "en röd blomma" skulle det returnera inbäddningarna av en röd rosbild som ett liknande föremål.
Följande figur illustrerar lösningsarkitekturen.
Arbetsflödesstegen är följande:
- Skapa en SageMaker modell från en förtränad CLIP-modell för batch- och realtidsinferens.
- Generera inbäddningar av produktbilder med hjälp av ett SageMaker batch-omvandlingsjobb.
- Använd SageMaker Serverless Inference för att koda frågebild och text till inbäddningar i realtid.
- Använda Amazon enkel lagringstjänst (Amazon S3) för att lagra den råa texten (produktbeskrivning) och bilder (produktbilder) och bildinbäddning som genereras av SageMaker batch-omvandlingsjobb.
- Använd OpenSearch Service som sökmotor för att lagra inbäddningar och hitta liknande inbäddningar.
- Använd en frågefunktion för att orkestrera kodningen av frågan och utför en k-NN-sökning.
Vi använder Amazon SageMaker Studio bärbara datorer (visas inte i diagrammet) som den integrerade utvecklingsmiljön (IDE) för att utveckla lösningen.
Konfigurera lösningsresurser
Utför följande steg för att ställa in lösningen:
- Skapa en SageMaker-domän och en användarprofil. För instruktioner, se steg 5 av Ombord på Amazon SageMaker Domain med snabbinställning.
- Skapa en OpenSearch Service-domän. För instruktioner, se Skapa och hantera Amazon OpenSearch Service-domäner.
Du kan också använda en AWS molnformation mall genom att följa GitHub-instruktionerna för att skapa en domän.
Du kan ansluta Studio till Amazon S3 från Amazon Virtual Private Cloud (Amazon VPC) med en gränssnittsändpunkt i din VPC, istället för att ansluta över internet. Genom att använda en gränssnitts-VPC-ändpunkt (gränssnittsändpunkt), sker kommunikationen mellan din VPC och Studio helt och säkert inom AWS-nätverket. Din Studio-anteckningsbok kan ansluta till OpenSearch Service över en privat VPC för att säkerställa säker kommunikation.
OpenSearch Service-domäner erbjuder kryptering av data i vila, vilket är en säkerhetsfunktion som hjälper till att förhindra obehörig åtkomst till dina data. Nod-till-nod-kryptering ger ett extra lager av säkerhet utöver standardfunktionerna i OpenSearch Service. Amazon S3 tillämpar automatiskt serversideskryptering (SSE-S3) för varje nytt objekt om du inte anger ett annat krypteringsalternativ.
I OpenSearch Service-domänen kan du bifoga identitetsbaserade policyer som definierar vem som kan komma åt en tjänst, vilka åtgärder de kan utföra, och om tillämpligt, på vilka resurser de kan utföra dessa åtgärder.
Koda bilder och textpar till inbäddningar
Det här avsnittet diskuterar hur man kodar bilder och text till inbäddningar. Detta inkluderar att förbereda data, skapa en SageMaker-modell och utföra batchtransformation med modellen.
Dataöversikt och förberedelse
Du kan använda en SageMaker Studio-anteckningsbok med en Python 3 (Data Science) kärna för att köra exempelkoden.
För det här inlägget använder vi Amazon Berkeley Objects Dataset. Datauppsättningen är en samling av 147,702 398,212 produktlistor med flerspråkig metadata och 1,600 XNUMX unika katalogbilder. Vi använder endast objektbilderna och objektnamnen på amerikansk engelska. För demoändamål använder vi cirka XNUMX XNUMX produkter. För mer information om denna datauppsättning, se README. Datauppsättningen är värd i en offentlig S3-bucket. Det finns 16 filer som inkluderar produktbeskrivning och metadata för Amazon-produkter i formatet listings/metadata/listings_<i>.json.gz
. Vi använder den första metadatafilen i denna demo.
Du använder pandor för att ladda metadata, välj sedan produkter som har amerikanska engelska titlar från dataramen. Pandas är ett dataanalys- och manipuleringsverktyg med öppen källkod byggt ovanpå programmeringsspråket Python. Du använder ett attribut som kallas main_image_id
för att identifiera en bild. Se följande kod:
Det finns 1,639 XNUMX produkter i dataramen. Därefter länkar du objektnamnen med motsvarande objektbilder. images/metadata/images.csv.gz
innehåller bildmetadata. Den här filen är en gzip-komprimerad CSV-fil med följande kolumner: image_id
, height
, width
och path
. Du kan läsa metadatafilen och sedan slå samman den med objektmetadata. Se följande kod:
Du kan använda den inbyggda SageMaker Studio-anteckningsboken Python 3-kärnan PIL-bibliotek för att visa en exempelbild från datamängden:
Modellberedning
Skapa sedan en SageMaker modell från en förtränad CLIP-modell. Det första steget är att ladda ner den förtränade modellviktningsfilen, lägga den i en model.tar.gz
fil och ladda upp den till en S3-hink. Den förtränade modellens väg kan hittas i CLIP repo. Vi använder en förutbildad ResNet-50 (RN50) modell i denna demo. Se följande kod:
Du måste sedan tillhandahålla ett inferens-ingångsskript för CLIP-modellen. CLIP implementeras med hjälp av PyTorch, så du använder SageMaker PyTorch ramverk. PyTorch är ett ML-ramverk med öppen källkod som påskyndar vägen från forskningsprototyper till produktionsinstallation. För information om hur du distribuerar en PyTorch-modell med SageMaker, se Distribuera PyTorch-modeller. Slutledningskoden accepterar två miljövariabler: MODEL_NAME
och ENCODE_TYPE
. Detta hjälper oss att enkelt växla mellan olika CLIP-modeller. Vi använder ENCODE_TYPE
för att ange om vi vill koda en bild eller ett stycke text. Här implementerar du model_fn
, input_fn
, predict_fn
och output_fn
funktioner för att åsidosätta standard PyTorch slutledningshanterare. Se följande kod:
Lösningen kräver ytterligare Python-paket under modellinferens, så att du kan tillhandahålla en requirements.txt
fil för att låta SageMaker installera ytterligare paket när du är värd för modeller:
Du använder PyTorchModel klass att skapa ett objekt för att innehålla informationen om modellartefakternas Amazon S3-plats och detaljerna för slutledningsingångspunkten. Du kan använda objektet för att skapa batchomvandlingsjobb eller distribuera modellen till en slutpunkt för online-inferens. Se följande kod:
Batchomvandling för att koda objektbilder till inbäddningar
Därefter använder vi CLIP-modellen för att koda objektbilder till inbäddningar och använder SageMaker batchtransformering för att köra batch-inferens.
Innan du skapar jobbet, använd följande kodavsnitt för att kopiera objektbilder från Amazon Berkeley Objects Dataset public S3-bucket till din egen hink. Operationen tar mindre än 10 minuter.
Därefter utför du slutledning om objektbilderna på ett batchsätt. SageMaker batch-omvandlingsjobb använder CLIP-modellen för att koda alla bilder som är lagrade i Amazon S3-inmatningsplatsen och laddar upp utdatainbäddningar till en utdata S3-mapp. Jobbet tar cirka 10 minuter.
Ladda inbäddningar från Amazon S3 till en variabel, så att du kan mata in data i OpenSearch Service senare:
Skapa en ML-driven enhetlig sökmotor
Det här avsnittet diskuterar hur man skapar en sökmotor som använder k-NN-sökning med inbäddningar. Detta inkluderar att konfigurera ett OpenSearch Service-kluster, ta in objektinbäddning och utföra fritext- och bildsökningsfrågor.
Konfigurera OpenSearch Service-domänen med k-NN-inställningar
Tidigare skapade du ett OpenSearch-kluster. Nu ska du skapa ett index för att lagra katalogdata och inbäddningar. Du kan konfigurera indexinställningarna för att aktivera k-NN-funktionaliteten med följande konfiguration:
I detta exempel används Python Elasticsearch-klient för att kommunicera med OpenSearch-klustret och skapa ett index för dina data. Du kan springa %pip install elasticsearch
i anteckningsboken för att installera biblioteket. Se följande kod:
Ta in bildinbäddningsdata i OpenSearch Service
Du går nu igenom din datauppsättning och matar in objektdata i klustret. Dataintaget för denna praxis bör slutföras inom 60 sekunder. Den kör också en enkel fråga för att verifiera om data har matats in i indexet framgångsrikt. Se följande kod:
Utför en fråga i realtid
Nu när du har ett fungerande OpenSearch Service-index som innehåller inbäddningar av objektbilder som vårt lager, låt oss titta på hur du kan generera inbäddning för frågor. Du måste skapa två SageMaker-slutpunkter för att hantera text- respektive bildinbäddningar.
Du skapar också två funktioner för att använda ändpunkterna för att koda bilder och texter. För encode_text
funktion, lägger du till this is
före ett objektnamn för att översätta ett objekts namn till en mening för objektbeskrivning. memory_size_in_mb
är satt till 6 GB för att tjäna understrykningen Transformator och ResNet modeller. Se följande kod:
Du kan först plotta bilden som ska användas.
Låt oss titta på resultaten av en enkel fråga. Efter att ha hämtat resultat från OpenSearch Service får du listan med objektnamn och bilder från dataset
:
Det första objektet har poängen 1.0, eftersom de två bilderna är desamma. Andra föremål är olika typer av glasögon i OpenSearch Service index.
Du kan också använda text för att fråga indexet:
Du kan nu få tre bilder av vattenglasögon från indexet. Du kan hitta bilderna och texten inom samma latenta utrymme med CLIP-kodaren. Ett annat exempel på detta är att söka efter ordet "pizza" i indexet:
Städa upp
Med en pay-per-use-modell är Serverless Inference ett kostnadseffektivt alternativ för ett sällsynt eller oförutsägbart trafikmönster. Om du har en strikt servicenivåavtal (SLA), eller inte kan tolerera kallstarter, är realtidsslutpunkter ett bättre val. Använder sig av multimodell or multicontainer endpoints tillhandahåller skalbara och kostnadseffektiva lösningar för att distribuera ett stort antal modeller. För mer information, se Amazon SageMaker Prissättning.
Vi föreslår att du tar bort de serverlösa slutpunkterna när de inte längre behövs. När du är klar med den här övningen kan du ta bort resurserna med följande steg (du kan ta bort dessa resurser från AWS Management Console, eller använder AWS SDK eller SageMaker SDK):
- Ta bort slutpunkten du skapade.
- Om du vill kan du radera de registrerade modellerna.
- Om du vill kan du ta bort exekveringsrollen SageMaker.
- Om du vill kan du tömma och ta bort S3-hinken.
Sammanfattning
I det här inlägget demonstrerade vi hur man skapar en k-NN-sökapplikation med SageMaker och OpenSearch Service k-NN-indexfunktioner. Vi använde en förtränad CLIP-modell från dess OpenAI genomförande.
OpenSearch Service-implementeringen av inlägget används endast för prototypframställning. Om du vill mata in data från Amazon S3 till OpenSearch Service i stor skala kan du starta en Amazon SageMaker-bearbetningsjobb med lämplig instanstyp och instansantal. För en annan skalbar inbäddningslösning, se Novartis AG använder Amazon OpenSearch Service K-Nearest Neighbor (KNN) och Amazon SageMaker för att driva sökning och rekommendationer (del 3/4).
CLIP ger nollskott kapacitet, vilket gör det möjligt att använda en förtränad modell direkt utan att använda överför lärande att finjustera en modell. Detta förenklar tillämpningen av CLIP-modellen. Om du har ett par produktbilder och beskrivande text kan du finjustera modellen med dina egna data med hjälp av överföringsinlärning för att ytterligare förbättra modellens prestanda. För mer information, se Lär dig överförbara visuella modeller från övervakning av naturligt språk och CLIP GitHub repositorium.
Om författarna
Kevin Du är en Senior Data Lab Architect på AWS, dedikerad till att hjälpa kunder att påskynda utvecklingen av deras Machine Learning (ML)-produkter och MLOps-plattformar. Med mer än ett decenniums erfarenhet av att bygga ML-aktiverade produkter för både nystartade företag och företag, är hans fokus på att hjälpa kunder att effektivisera produktionsaliseringen av sina ML-lösningar. På fritiden tycker Kevin om att laga mat och titta på basket.
Ananya Roy är en Senior Data Lab-arkitekt specialiserad på AI och maskininlärning baserad från Sydney Australien. Hon har arbetat med en mängd olika kunder för att ge arkitektonisk vägledning och hjälpa dem att leverera effektiv AI/ML-lösning via datalabbets engagemang. Före AWS arbetade hon som senior dataforskare och arbetade med storskaliga ML-modeller inom olika branscher som telekom, banker och fintech. Hennes erfarenhet av AI/ML har gjort det möjligt för henne att leverera effektiva lösningar för komplexa affärsproblem, och hon brinner för att utnyttja banbrytande teknik för att hjälpa team att nå sina mål.
- SEO-drivet innehåll och PR-distribution. Bli förstärkt idag.
- Platoblockchain. Web3 Metaverse Intelligence. Kunskap förstärkt. Tillgång här.
- Källa: https://aws.amazon.com/blogs/machine-learning/implement-unified-text-and-image-search-with-a-clip-model-using-amazon-sagemaker-and-amazon-opensearch-service/
- :är
- ][s
- $UPP
- 1
- 10
- 100
- 11
- 7
- 8
- 9
- a
- Able
- Om Oss
- accelererar
- accepterar
- tillgång
- Uppnå
- tvärs
- åtgärder
- Annat
- anta
- Efter
- AG
- Avtal
- AI
- AI / ML
- Alla
- amason
- Amazon OpenSearch Service
- Amazon SageMaker
- analys
- och
- Annan
- tillämplig
- Ansökan
- tillämpningar
- lämpligt
- cirka
- arkitektoniska
- arkitektur
- ÄR
- Argumentet
- runt
- AS
- At
- bifoga
- Australien
- automatiskt
- AWS
- Banker
- baserat
- Basketboll
- BE
- därför att
- innan
- Berkeley
- BÄST
- Bättre
- mellan
- kropp
- SLUTRESULTAT
- Byggnad
- byggt
- inbyggd
- företag
- företag
- by
- kallas
- KAN
- kapacitet
- katalog
- CD
- ta
- val
- klient
- Stäng
- kluster
- koda
- samling
- Kolonner
- kommunicera
- Kommunikation
- jämfört
- fullborda
- komplex
- begrepp
- genomfördes
- konfiguration
- Kontakta
- Anslutning
- anslutning
- konsumenter
- innehålla
- innehåller
- innehåll
- konversera
- Motsvarande
- Pris
- kostnadseffektiv
- kunde
- skapa
- skapas
- Skapa
- referenser
- Cup
- Kunder
- allra senaste
- cykler
- datum
- dataanalys
- datapunkter
- datavetenskap
- datavetare
- datauppsättningar
- årtionde
- dedicerad
- djup
- djupt lärande
- Standard
- definierande
- leverera
- demonstrera
- demonstreras
- distribuera
- utplacera
- utplacering
- beskrivning
- önskas
- detaljer
- dev
- utveckla
- Utveckling
- anordning
- olika
- Dimensionera
- direkt
- Visa
- flera
- dokument
- domän
- domäner
- inte
- ner
- ladda ner
- under
- varje
- lättare
- lätt
- e-handel
- Effektiv
- möjliggöra
- kryptering
- Slutpunkt
- ingrepp
- Motor
- Motorer
- Engelska
- säkerställa
- företag
- helt
- inträde
- Miljö
- fel
- exempel
- utförande
- Motionera
- erfarenhet
- extra
- familj
- Leverans
- Funktioner
- Figur
- Fil
- Filer
- hitta
- slut
- Förnamn
- Flexibilitet
- Fokus
- efter
- följer
- För
- format
- hittade
- RAM
- Ramverk
- Fri
- vän
- från
- främre
- fungera
- funktionella
- funktionalitet
- funktioner
- ytterligare
- generera
- genereras
- skaffa sig
- gå
- GitHub
- glas
- Go
- Mål
- kommer
- god
- vägleda
- hantera
- Har
- headers
- höjd
- hjälpa
- hjälpa
- hjälper
- här.
- högre
- Träffa
- träffar
- värd
- värd
- värd
- Hur ser din drömresa ut
- How To
- html
- http
- HTTPS
- Hundratals
- i
- identifiera
- Idle
- IDX
- bild
- Sök
- bilder
- genomföra
- genomförande
- genomföras
- genomföra
- importera
- förbättra
- in
- innefattar
- innefattar
- index
- index
- index
- industrier
- informationen
- Infrastruktur
- ingång
- installera
- exempel
- istället
- instruktioner
- integrerade
- intresserad
- Gränssnitt
- Internet
- lager
- IT
- artikel
- DESS
- Jobb
- Lediga jobb
- jpg
- json
- lab
- språk
- laptop
- Large
- storskalig
- lansera
- lager
- inlärning
- hävstångs
- Bibliotek
- tycka om
- LINK
- Lista
- Annonser
- läsa in
- läser in
- läge
- Lång
- längre
- se
- Maskinen
- maskininlärning
- gjord
- GÖR
- ledning
- hantera
- Manipulation
- sätt
- betyder
- mäta
- åtgärder
- Sammanfoga
- meta
- metadata
- metriska
- minuter
- ML
- MLOps
- modell
- modeller
- mer
- flytta
- namn
- namn
- Natural
- Behöver
- nät
- neurala nätverk
- Nya
- Nästa
- anteckningsbok
- nummer
- objektet
- objekt
- of
- erbjudanden
- Gamla
- on
- nätet
- öppet
- öppen källkod
- drift
- Alternativet
- OS
- Övriga
- produktion
- åsidosätta
- Översikt
- egen
- paket
- par
- pandor
- del
- brinner
- bana
- Mönster
- Personer
- perfekt
- Utföra
- prestanda
- utför
- fas
- Bild
- Bilder
- bit
- Pizza
- Plattformar
- plato
- Platon Data Intelligence
- PlatonData
- PoC
- Punkt
- poäng
- Strategier
- poolen
- möjlig
- Inlägg
- kraft
- drivs
- praktiken
- förutsägelse
- Förutsägelser
- förbereda
- förhindra
- Innan
- privat
- problem
- bearbetning
- Produkt
- Produktion
- Produkter
- Profil
- Programmering
- projektet
- egenskaper
- prototyping
- ge
- ger
- allmän
- syfte
- sätta
- Python
- pytorch
- Snabbt
- snabbt
- område
- Raw
- Läsa
- verklig
- realtid
- Rekommendation
- post
- Red
- regex
- region
- registrerat
- ta bort
- Kräver
- forskning
- Resurser
- respons
- REST
- resultera
- Resultat
- detaljhandeln
- avkastning
- återgår
- Rise
- Roll
- ROSE
- Körning
- sagemaker
- Samma
- Save
- skalbar
- Skala
- skalning
- Vetenskap
- Forskare
- göra
- sDK
- Sök
- sökmotor
- Sökmotorer
- sekunder
- §
- säkra
- säkert
- säkerhet
- senior
- mening
- tjänar
- Server
- service
- session
- in
- inställningar
- Forma
- skall
- visas
- liknande
- Enkelt
- Storlek
- mindre
- So
- lösning
- Lösningar
- några
- Källa
- Utrymme
- specialiserade
- specifik
- stå
- startar
- Startups
- Steg
- Steg
- förvaring
- lagra
- lagras
- effektivisera
- Strikt
- studio
- skicka
- Framgångsrikt
- sådana
- Stöder
- Växla
- sydney
- SYS
- tar
- lag
- Tekniken
- Telco
- mall
- testa
- den där
- Smakämnen
- den information
- deras
- Dem
- Dessa
- tre
- Genom
- tid
- gånger
- Titel
- titlar
- till
- token
- verktyg
- topp
- brännaren
- Torchvision
- trafik
- tränad
- överföring
- Förvandla
- Översätt
- sann
- typer
- enhetlig
- unika
- oförutsägbar
- us
- användning
- Användare
- värde
- mängd
- verifiera
- via
- utsikt
- Virtuell
- tittar
- Vatten
- VÄL
- som
- VEM
- bredd
- wikipedia
- kommer
- med
- inom
- utan
- ord
- arbetssätt
- skulle
- X
- Om er
- Din
- zephyrnet