Fremkomsten af tekst og semantisk søgning motorer har gjort e-handel og detailvirksomheder nemmere at søge for sine forbrugere. Søgemaskiner drevet af samlet tekst og billede kan give ekstra fleksibilitet i søgeløsninger. Du kan bruge både tekst og billeder som forespørgsler. For eksempel har du en mappe med hundredvis af familiebilleder på din bærbare computer. Du vil hurtigt finde et billede, der blev taget, da du og din bedste ven var foran dit gamle huss swimmingpool. Du kan bruge samtalesprog som "to personer står foran en swimmingpool" som en forespørgsel for at søge i en samlet tekst- og billedsøgemaskine. Du behøver ikke at have de rigtige søgeord i billedtitler for at udføre forespørgslen.
Amazon OpenSearch Service støtter nu cosinus lighed metrisk for k-NN-indekser. Cosinus lighed måler cosinus af vinklen mellem to vektorer, hvor en mindre cosinus vinkel angiver en højere lighed mellem vektorerne. Med cosinus-lighed kan du måle orienteringen mellem to vektorer, hvilket gør det til et godt valg til nogle specifikke semantiske søgeapplikationer.
Contrastive Language-Image Pre-Training (CLIP) er et neuralt netværk trænet på en række forskellige billed- og tekstpar. CLIP neurale netværk er i stand til at projicere både billeder og tekst ind i det samme latent rum, hvilket betyder, at de kan sammenlignes ved hjælp af et lighedsmål, såsom cosinus-lighed. Du kan bruge CLIP til encode dine produkters billeder eller beskrivelse ind indlejringer, og gem dem derefter i et OpenSearch Service k-NN-indeks. Så kan dine kunder forespørge i indekset for at hente produkter, som de er interesserede i.
Du kan bruge CLIP med Amazon SageMaker at udføre kodning. Amazon SageMaker Serverless Inference er en specialbygget inferenstjeneste, der gør det nemt at implementere og skalere maskinlæringsmodeller (ML). Med SageMaker kan du implementere serverløs til dev og test og derefter flytte til inferens i realtid når du går til produktion. SageMaker serverless hjælper dig med at spare omkostninger ved at nedskalere infrastrukturen til 0 i inaktive tider. Dette er perfekt til at bygge en POC, hvor du vil have lange tomgangstider mellem udviklingscyklusser. Du kan også bruge Amazon SageMaker batch transformation at få slutninger fra store datasæt.
I dette indlæg demonstrerer vi, hvordan man bygger en søgeapplikation ved hjælp af CLIP med SageMaker og OpenSearch Service. Koden er open source, og den hostes på GitHub.
Løsningsoversigt
OpenSearch Service giver tekstmatchning og indlejring af k-NN-søgning. Vi bruger indlejring af k-NN-søgning i denne løsning. Du kan bruge både billede og tekst som en forespørgsel til at søge efter varer fra beholdningen. Implementering af denne forenede billed- og tekstsøgningsapplikation består af to faser:
- k-NN referenceindeks – I denne fase sender du et sæt korpusdokumenter eller produktbilleder gennem en CLIP-model for at kode dem til indlejringer. Tekst- og billedindlejringer er numeriske repræsentationer af henholdsvis korpus eller billeder. Du gemmer disse indlejringer i et k-NN-indeks i OpenSearch Service. Konceptet bag k-NN er, at lignende datapunkter findes i umiddelbar nærhed i indlejringsrummet. Som et eksempel er teksten "en rød blomst", teksten "rose" og et billede af rød rose ens, så disse tekst- og billedindlejringer er tæt på hinanden i indlejringsrummet.
- k-NN indeksforespørgsel – Dette er slutningsfasen af ansøgningen. I denne fase indsender du en tekstsøgeforespørgsel eller billedsøgning gennem deep learning-modellen (CLIP) for at kode som indlejringer. Derefter bruger du disse indlejringer til at forespørge på reference-k-NN-indekset, der er gemt i OpenSearch Service. k-NN-indekset returnerer lignende indlejringer fra indlejringsområdet. Hvis du f.eks. sender teksten "en rød blomst", vil det returnere indlejringerne af et billede af en rød rose som et lignende element.
Følgende figur illustrerer løsningsarkitekturen.
Workflow-trinene er som følger:
- Opret en SageMaker model fra en fortrænet CLIP-model til batch- og realtidsslutning.
- Generer indlejringer af produktbilleder ved hjælp af et SageMaker batch-transformationsjob.
- Brug SageMaker Serverless Inference til at indkode forespørgselsbilleder og tekst til indlejringer i realtid.
- Brug Amazon Simple Storage Service (Amazon S3) til at gemme den rå tekst (produktbeskrivelse) og billeder (produktbilleder) og billedindlejring genereret af SageMaker batch-transformationsjob.
- Brug OpenSearch Service som søgemaskine til at gemme indlejringer og finde lignende indlejringer.
- Brug en forespørgselsfunktion til at orkestrere indkodning af forespørgslen og udfør en k-NN-søgning.
Vi anvender Amazon SageMaker Studio notesbøger (ikke vist i diagrammet) som det integrerede udviklingsmiljø (IDE) til at udvikle løsningen.
Opsæt løsningsressourcer
For at konfigurere løsningen skal du udføre følgende trin:
- Opret et SageMaker-domæne og en brugerprofil. For instruktioner henvises til trin 5 af Ombord på Amazon SageMaker Domain ved hjælp af hurtig opsætning.
- Opret et OpenSearch Service-domæne. For instruktioner, se Oprettelse og administration af Amazon OpenSearch Service-domæner.
Du kan også bruge en AWS CloudFormation skabelon ved at følge GitHub instruktionerne at oprette et domæne.
Du kan forbinde Studio til Amazon S3 fra Amazon Virtual Private Cloud (Amazon VPC) ved hjælp af en grænsefladeslutpunkt i din VPC, i stedet for at oprette forbindelse over internettet. Ved at bruge et interface-VPC-endepunkt (interface-endepunkt), foregår kommunikationen mellem din VPC og Studio fuldstændigt og sikkert inden for AWS-netværket. Din Studio notesbog kan oprette forbindelse til OpenSearch Service over en privat VPC for at sikre sikker kommunikation.
OpenSearch Service-domæner tilbyder kryptering af data i hvile, som er en sikkerhedsfunktion, der hjælper med at forhindre uautoriseret adgang til dine data. Node-til-node-kryptering giver et ekstra lag af sikkerhed oven i standardfunktionerne i OpenSearch Service. Amazon S3 anvender automatisk serverside-kryptering (SSE-S3) for hvert nyt objekt, medmindre du angiver en anden krypteringsindstilling.
I OpenSearch Service-domænet kan du vedhæfte identitetsbaserede politikker, der definerer, hvem der kan få adgang til en tjeneste, hvilke handlinger de kan udføre, og hvis det er relevant, hvilke ressourcer de kan udføre disse handlinger på.
Indkod billeder og tekstpar til indlejringer
Dette afsnit diskuterer, hvordan man koder billeder og tekst til indlejringer. Dette omfatter forberedelse af data, oprettelse af en SageMaker-model og udførelse af batchtransformation ved hjælp af modellen.
Dataoverblik og forberedelse
Du kan bruge en SageMaker Studio notesbog med en Python 3 (Data Science) kerne til at køre eksempelkoden.
Til dette indlæg bruger vi Amazon Berkeley Objects Dataset. Datasættet er en samling af 147,702 produktlister med flersprogede metadata og 398,212 unikke katalogbilleder. Vi bruger kun varebillederne og varenavnene på amerikansk engelsk. Til demoformål bruger vi cirka 1,600 produkter. For flere detaljer om dette datasæt, se README. Datasættet er hostet i en offentlig S3-bøtte. Der er 16 filer, der inkluderer produktbeskrivelse og metadata for Amazon-produkter i formatet listings/metadata/listings_<i>.json.gz
. Vi bruger den første metadatafil i denne demo.
Du bruger pandaer for at indlæse metadataene, vælg derefter produkter, der har amerikansk engelske titler fra datarammen. Pandas er et open source-dataanalyse- og manipulationsværktøj bygget oven på Python-programmeringssproget. Du bruger en attribut kaldet main_image_id
at identificere et billede. Se følgende kode:
Der er 1,639 produkter i datarammen. Forbind derefter varenavnene med de tilsvarende varebilleder. images/metadata/images.csv.gz
indeholder billedmetadata. Denne fil er en gzip-komprimeret CSV-fil med følgende kolonner: image_id
, height
, width
og path
. Du kan læse metadatafilen og derefter flette den med elementmetadata. Se følgende kode:
Du kan bruge den indbyggede SageMaker Studio-notebook Python 3-kerne PIL bibliotek for at se et eksempelbillede fra datasættet:
Udarbejdelse af model
Opret derefter en SageMaker model fra en fortrænet CLIP-model. Det første trin er at downloade den forudtrænede modelvægtningsfil, lægge den ind i en model.tar.gz
fil, og upload den til en S3-bøtte. Stien til den fortrænede model kan findes i CLIP repo. Vi bruger en fortrænet ResNet-50 (RN50) model i denne demo. Se følgende kode:
Du skal derefter angive et script for inferensindgangspunkt for CLIP-modellen. CLIP implementeres vha PyTorch, så du bruger SageMaker PyTorch rammer. PyTorch er en open source ML-ramme, der accelererer vejen fra forskningsprototyping til produktionsimplementering. For information om implementering af en PyTorch-model med SageMaker, se Implementer PyTorch-modeller. Inferenskoden accepterer to miljøvariabler: MODEL_NAME
, ENCODE_TYPE
. Dette hjælper os med at skifte mellem forskellige CLIP-modeller nemt. Vi bruger ENCODE_TYPE
for at angive, om vi ønsker at kode et billede eller et stykke tekst. Her implementerer du model_fn
, input_fn
, predict_fn
og output_fn
funktioner til at tilsidesætte standard PyTorch-inferenshåndtering. Se følgende kode:
Løsningen kræver yderligere Python-pakker under modelslutning, så du kan levere en requirements.txt
fil for at tillade SageMaker at installere yderligere pakker, når de hoster modeller:
Du bruger PyTorchModel klasse at oprette et objekt, der indeholder oplysningerne om modelartefakternes Amazon S3-placering og detaljerne om inferensindgangspunktet. Du kan bruge objektet til at oprette batch-transformationsjob eller implementere modellen til et slutpunkt til onlineslutning. Se følgende kode:
Batchtransformation for at kode varebilleder til indlejringer
Dernæst bruger vi CLIP-modellen til at kode varebilleder til indlejringer og bruger SageMaker batchtransformation til at køre batch-inferens.
Før du opretter jobbet, skal du bruge følgende kodestykke til at kopiere varebilleder fra Amazon Berkeley Objects Dataset offentlige S3-bøtte til din egen bøtte. Operationen tager mindre end 10 minutter.
Dernæst udfører du inferens på varebillederne på en batch-måde. SageMaker batch-transformationsjobbet bruger CLIP-modellen til at kode alle billeder, der er gemt i Amazon S3-indgangen, og uploader output-indlejringer til en output-S3-mappe. Jobbet tager omkring 10 minutter.
Indlæs indlejringer fra Amazon S3 til en variabel, så du kan indlæse dataene i OpenSearch Service senere:
Opret en ML-drevet samlet søgemaskine
Dette afsnit diskuterer, hvordan man opretter en søgemaskine, der bruger k-NN-søgning med indlejringer. Dette omfatter konfiguration af en OpenSearch Service-klynge, indlæsning af elementindlejring og udførelse af fritekst- og billedsøgningsforespørgsler.
Konfigurer OpenSearch Service-domænet ved hjælp af k-NN-indstillinger
Tidligere oprettede du en OpenSearch-klynge. Nu skal du oprette et indeks til at gemme katalogdata og indlejringer. Du kan konfigurere indeksindstillingerne for at aktivere k-NN-funktionaliteten ved hjælp af følgende konfiguration:
Dette eksempel bruger Python Elasticsearch-klient at kommunikere med OpenSearch-klyngen og oprette et indeks til at hoste dine data. Du kan løbe %pip install elasticsearch
i notesbogen for at installere biblioteket. Se følgende kode:
Indtag billedindlejringsdata i OpenSearch Service
Du går nu gennem dit datasæt og indtager elementdata i klyngen. Dataindtagelsen for denne praksis bør afsluttes inden for 60 sekunder. Den kører også en simpel forespørgsel for at kontrollere, om dataene er blevet indlæst i indekset. Se følgende kode:
Udfør en forespørgsel i realtid
Nu hvor du har et fungerende OpenSearch Service-indeks, der indeholder indlejringer af varebilleder som vores beholdning, lad os se på, hvordan du kan generere indlejring til forespørgsler. Du skal oprette to SageMaker-slutpunkter for at håndtere henholdsvis tekst- og billedindlejringer.
Du opretter også to funktioner til at bruge slutpunkterne til at kode billeder og tekster. For encode_text
funktion, tilføjer du this is
før et varenavn for at oversætte et varenavn til en sætning til varebeskrivelse. memory_size_in_mb
er indstillet til 6 GB for at tjene understregningen Transformer , ResNet modeller. Se følgende kode:
Du kan først plotte det billede, der skal bruges.
Lad os se på resultaterne af en simpel forespørgsel. Efter at have hentet resultater fra OpenSearch Service, får du listen over emnenavne og billeder fra dataset
:
Det første punkt har en score på 1.0, fordi de to billeder er ens. Andre elementer er forskellige typer briller i OpenSearch Service-indekset.
Du kan også bruge tekst til at forespørge på indekset:
Du kan nu få tre billeder af vandglas fra indekset. Du kan finde billederne og teksten inden for det samme latente rum med CLIP-koderen. Et andet eksempel på dette er at søge efter ordet "pizza" i indekset:
Ryd op
Med en betal-per-brug-model er Serverless Inference en omkostningseffektiv mulighed for et sjældent eller uforudsigeligt trafikmønster. Hvis du har en streng serviceniveauaftale (SLA), eller ikke kan tolerere koldstart, er realtidsslutpunkter et bedre valg. Ved brug af multi-model or multicontainer endepunkter giver skalerbare og omkostningseffektive løsninger til implementering af et stort antal modeller. For mere information, se Amazon SageMaker-priser.
Vi foreslår at slette de serverløse endepunkter, når de ikke længere er nødvendige. Når du har afsluttet denne øvelse, kan du fjerne ressourcerne med følgende trin (du kan slette disse ressourcer fra AWS Management Console, eller ved at bruge AWS SDK eller SageMaker SDK):
- Slet det endepunkt, du oprettede.
- Slet eventuelt de registrerede modeller.
- Slet eventuelt SageMaker-udførelsesrollen.
- Tøm og slet eventuelt S3-spanden.
Resumé
I dette indlæg demonstrerede vi, hvordan man opretter en k-NN søgeapplikation ved hjælp af SageMaker og OpenSearch Service k-NN indeksfunktioner. Vi brugte en fortrænet CLIP-model fra dens OpenAI implementering.
OpenSearch Service-implementeringen af indlægget bruges kun til prototyping. Hvis du vil indtage data fra Amazon S3 til OpenSearch Service i stor skala, kan du starte en Amazon SageMaker Processing job med den relevante instanstype og instansantal. For en anden skalerbar indlejringsopløsning, se Novartis AG bruger Amazon OpenSearch Service K-Nearest Neighbor (KNN) og Amazon SageMaker til at drive søgning og anbefaling (del 3/4).
CLIP giver nul-skud kapaciteter, som gør det muligt at adoptere en præ-trænet model direkte uden brug overføre læring at finjustere en model. Dette forenkler anvendelsen af CLIP-modellen. Hvis du har par produktbilleder og beskrivende tekst, kan du finjustere modellen med dine egne data ved hjælp af transfer learning for yderligere at forbedre modellens ydeevne. For mere information, se Lære overførbare visuelle modeller fra naturligt sprogovervågning og CLIP GitHub repositorium.
Om forfatterne
Kevin Du er en Senior Data Lab Architect hos AWS, dedikeret til at hjælpe kunder med at fremskynde udviklingen af deres Machine Learning (ML) produkter og MLOps platforme. Med mere end ti års erfaring med at bygge ML-aktiverede produkter til både startups og virksomheder, er hans fokus på at hjælpe kunder med at strømline produktionsaliseringen af deres ML-løsninger. I sin fritid nyder Kevin at lave mad og se basketball.
Ananya Roy er en Senior Data Lab-arkitekt med speciale i kunstig intelligens og maskinlæring baseret fra Sydney Australien. Hun har arbejdet med forskellige kunder for at give arkitektonisk vejledning og hjælpe dem med at levere en effektiv AI/ML-løsning via datalab-engagement. Før AWS arbejdede hun som senior dataforsker og beskæftigede sig med ML-modeller i stor skala på tværs af forskellige industrier som teleselskaber, banker og fintech. Hendes erfaring inden for AI/ML har gjort det muligt for hende at levere effektive løsninger til komplekse forretningsproblemer, og hun brænder for at udnytte banebrydende teknologier til at hjælpe teams med at nå deres mål.
- SEO Powered Content & PR Distribution. Bliv forstærket i dag.
- Platoblokkæde. Web3 Metaverse Intelligence. Viden forstærket. Adgang her.
- Kilde: https://aws.amazon.com/blogs/machine-learning/implement-unified-text-and-image-search-with-a-clip-model-using-amazon-sagemaker-and-amazon-opensearch-service/
- :er
- ][s
- $OP
- 1
- 10
- 100
- 11
- 7
- 8
- 9
- a
- I stand
- Om
- accelererer
- accepterer
- adgang
- opnå
- tværs
- aktioner
- Yderligere
- vedtage
- Efter
- AG
- Aftale
- AI
- AI / ML
- Alle
- Amazon
- Amazon OpenSearch Service
- Amazon SageMaker
- analyse
- ,
- En anden
- anvendelig
- Anvendelse
- applikationer
- passende
- cirka
- arkitektonisk
- arkitektur
- ER
- argument
- omkring
- AS
- At
- vedhæfte
- Australien
- automatisk
- AWS
- Banker
- baseret
- Basketball
- BE
- fordi
- før
- Berkeley
- BEDSTE
- Bedre
- mellem
- krop
- bygge
- Bygning
- bygget
- indbygget
- virksomhed
- virksomheder
- by
- kaldet
- CAN
- kapaciteter
- katalog
- CD
- kontrollere
- valg
- kunde
- Luk
- Cluster
- kode
- samling
- Kolonner
- kommunikere
- Kommunikation
- sammenlignet
- fuldføre
- komplekse
- Konceptet
- gennemført
- Konfiguration
- Tilslut
- Tilslutning
- tilslutning
- Forbrugere
- indeholder
- indeholder
- indhold
- konversation
- Tilsvarende
- Koste
- omkostningseffektiv
- kunne
- skabe
- oprettet
- Oprettelse af
- Legitimationsoplysninger
- Kop
- Kunder
- banebrydende
- cykler
- data
- dataanalyse
- datapunkter
- datalogi
- dataforsker
- datasæt
- årti
- dedikeret
- dyb
- dyb læring
- Standard
- definere
- levere
- demonstrere
- demonstreret
- indsætte
- implementering
- implementering
- beskrivelse
- ønskes
- detaljer
- dev
- udvikle
- Udvikling
- enhed
- forskellige
- Dimension
- direkte
- Skærm
- forskelligartede
- dokumenter
- domæne
- Domæner
- Dont
- ned
- downloade
- i løbet af
- hver
- lettere
- nemt
- ecommerce
- Effektiv
- muliggøre
- kryptering
- Endpoint
- engagement
- Engine (Motor)
- Motorer
- Engelsk
- sikre
- virksomheder
- helt
- indrejse
- Miljø
- fejl
- eksempel
- udførelse
- Dyrke motion
- erfaring
- ekstra
- familie
- Feature
- Funktionalitet
- Figur
- File (Felt)
- Filer
- Finde
- slut
- Fornavn
- Fleksibilitet
- Fokus
- efter
- følger
- Til
- format
- fundet
- FRAME
- Framework
- Gratis
- ven
- fra
- forsiden
- funktion
- funktionel
- funktionalitet
- funktioner
- yderligere
- generere
- genereret
- få
- Git
- GitHub
- glas
- Go
- Mål
- gå
- godt
- vejledning
- håndtere
- Have
- headers
- højde
- hjælpe
- hjælpe
- hjælper
- link.
- højere
- Hit
- Hits
- host
- hostede
- Hosting
- Hvordan
- How To
- HTML
- http
- HTTPS
- Hundreder
- i
- identificere
- tomgang
- IDX
- billede
- Billedsøgning
- billeder
- gennemføre
- implementering
- implementeret
- gennemføre
- importere
- Forbedre
- in
- omfatter
- omfatter
- indeks
- indekser
- Indeks
- industrier
- oplysninger
- Infrastruktur
- indgang
- installere
- instans
- i stedet
- anvisninger
- integreret
- interesseret
- grænseflade
- Internet
- opgørelse
- IT
- Varer
- ITS
- Job
- Karriere
- jpg
- json
- lab
- Sprog
- laptop
- stor
- storstilet
- lancere
- lag
- læring
- løftestang
- Bibliotek
- ligesom
- LINK
- Liste
- Listings
- belastning
- lastning
- placering
- Lang
- længere
- Se
- maskine
- machine learning
- lavet
- maerker
- ledelse
- styring
- Håndtering
- måde
- midler
- måle
- foranstaltninger
- Flet
- Meta
- Metadata
- metrisk
- minutter
- ML
- MLOps
- model
- modeller
- mere
- bevæge sig
- navn
- navne
- Natural
- Behov
- netværk
- neurale netværk
- Ny
- næste
- notesbog
- numre
- objekt
- objekter
- of
- tilbyde
- Gammel
- on
- online
- åbent
- open source
- drift
- Option
- OS
- Andet
- output
- overstyring
- oversigt
- egen
- pakker
- par
- pandaer
- del
- lidenskabelige
- sti
- Mønster
- Mennesker
- perfekt
- Udfør
- ydeevne
- udfører
- fase
- billede
- Billeder
- stykke
- Pizza
- Platforme
- plato
- Platon Data Intelligence
- PlatoData
- PoC
- Punkt
- punkter
- politikker
- pool
- mulig
- Indlæg
- magt
- strøm
- praksis
- forudsigelse
- Forudsigelser
- forberede
- forhindre
- Forud
- private
- problemer
- forarbejdning
- Produkt
- produktion
- Produkter
- Profil
- Programmering
- projekt
- egenskaber
- prototyping
- give
- giver
- offentlige
- formål
- sætte
- Python
- pytorch
- Hurtig
- hurtigt
- rækkevidde
- Raw
- Læs
- ægte
- realtid
- Anbefaling
- optage
- Rød
- regulært udtryk
- region
- registreret
- Fjern
- Kræver
- forskning
- Ressourcer
- svar
- REST
- resultere
- Resultater
- detail
- afkast
- afkast
- Rise
- roller
- ROSE
- Kør
- sagemaker
- samme
- Gem
- skalerbar
- Scale
- skalering
- Videnskab
- Videnskabsmand
- score
- SDK
- Søg
- søgemaskine
- Søgemaskiner
- sekunder
- Sektion
- sikker
- sikkert
- sikkerhed
- senior
- dømme
- tjener
- Serverless
- tjeneste
- Session
- sæt
- indstillinger
- Shape
- bør
- vist
- lignende
- Simpelt
- Størrelse
- mindre
- So
- løsninger
- Løsninger
- nogle
- Kilde
- Space
- specialiserede
- specifikke
- stå
- starter
- Nystartede
- Trin
- Steps
- opbevaring
- butik
- opbevaret
- strømline
- Streng
- Studio
- indsende
- Succesfuld
- sådan
- Understøtter
- Kontakt
- sydney
- SYS
- tager
- hold
- Teknologier
- Telco
- skabelon
- prøve
- at
- oplysninger
- deres
- Them
- Disse
- tre
- Gennem
- tid
- gange
- Titel
- titler
- til
- token
- værktøj
- top
- fakkel
- Torchvision
- Trafik
- uddannet
- overførsel
- Transform
- Oversætte
- sand
- typer
- forenet
- enestående
- uforudsigelige
- us
- brug
- Bruger
- værdi
- række
- verificere
- via
- Specifikation
- Virtual
- ser
- Vand
- GODT
- som
- WHO
- bredde
- Wikipedia
- vilje
- med
- inden for
- uden
- ord
- arbejder
- ville
- X
- Du
- Din
- zephyrnet