Generatiivne andmeluure

Rääkige oma liumäega, kasutades Amazon Bedrockis hostitud multimodaalseid alusmudeleid – 2. osa | Amazoni veebiteenused

kuupäev:

In Osa 1 sellest seeriast esitlesime lahendust, mis kasutas Amazoni Titani multimodaalsed manused mudel üksikute slaidide teisendamiseks slaiditekilt manusteks. Salvestasime manused vektorandmebaasi ja kasutasime seejärel Suur keele- ja nägemisassistent (LLaVA 1.5–7b) mudel, et genereerida vektorandmebaasist otsitud kõige sarnasema slaidi põhjal tekstivastused kasutaja küsimustele. Kasutasime AWS-i teenuseid, sealhulgas Amazonase aluspõhi, Amazon SageMakerja Amazon OpenSearch Serverita selles lahenduses.

Selles postituses näitame teistsugust lähenemist. Me kasutame Antroopiline Claude 3 sonett mudel, et luua tekstikirjeldused iga slaidikomplekti slaidi jaoks. Need kirjeldused teisendatakse seejärel teksti manusteks, kasutades Amazon Titani teksti manustamine mudel ja salvestatakse vektorandmebaasis. Seejärel kasutame Claude 3 Sonneti mudelit, et genereerida vastuseid kasutaja küsimustele, mis põhinevad vektorandmebaasist hangitud kõige asjakohasemal tekstikirjeldusel.

Saate testida mõlemat lähenemisviisi oma andmestiku jaoks ja hinnata tulemusi, et näha, milline lähenemisviis annab teile parimad tulemused. Selle seeria 3. osas hindame mõlema meetodi tulemusi.

Lahenduse ülevaade

Lahendus pakub teostust küsimustele vastamiseks, kasutades tekstis sisalduvat teavet ja slaidikomplekti visuaalseid elemente. Disain tugineb taastamise laiendatud põlvkonna (RAG) kontseptsioonile. Traditsiooniliselt on RAG-i seostatud tekstiandmetega, mida saab töödelda suurte keelemudelite (LLM) abil. Selles seerias laiendame RAG-i, et hõlmata ka pilte. See annab võimsa otsinguvõimaluse kontekstipõhise sisu ekstraheerimiseks visuaalsetest elementidest, nagu tabelid ja graafikud, koos tekstiga.

See lahendus sisaldab järgmisi komponente:

  • Amazon Titan Text Embeddings on teksti manustamismudel, mis teisendab loomuliku keele teksti, sealhulgas üksikud sõnad, fraasid või isegi suured dokumendid, numbrilisteks esitusteks, mida saab kasutada semantilise sarnasuse alusel selliste kasutusjuhtumite käivitamiseks nagu otsing, isikupärastamine ja rühmitamine.
  • Claude 3 Sonnet on Anthropicu tipptasemel mudelite järgmine põlvkond. Sonnet on mitmekülgne tööriist, mis saab hakkama paljude ülesannetega alates keerukatest arutlustest ja analüüsidest kuni kiirete väljunditeni, aga ka tõhusa otsimise ja hankimiseni suures koguses teavet.
  • OpenSearch Serverless on Amazon OpenSearch Service'i tellitav serverita konfiguratsioon. Kasutame OpenSearch Serverlessi vektorandmebaasina Amazon Titan Text Embeddingsi mudeli genereeritud manustamiste salvestamiseks. OpenSearch Serverless kollektsioonis loodud register toimib meie RAG-lahenduse vektorihoidlana.
  • Amazon OpenSearchi sisestamine (OSI) on täielikult hallatav serverita andmekogu, mis edastab andmeid OpenSearch Service'i domeenidesse ja OpenSearchi serverita kogudesse. Selles postituses kasutame OSI torujuhtme API-d andmete edastamiseks OpenSearchi serverita vektorpoodi.

Lahenduse disain koosneb kahest osast: allaneelamisest ja kasutaja interaktsioonist. Sisseelamise ajal töötleme sisendslaidikomplekti, teisendades iga slaidi pildiks, genereerides iga pildi jaoks kirjeldused ja tekstimanused. Seejärel täidame vektorandmete salve iga slaidi manuste ja tekstikirjeldusega. Need sammud tehakse enne kasutajaga suhtlemise etappe.

Kasutaja interaktsiooni faasis teisendatakse kasutaja küsimus teksti manusteks. Sarnasuse otsing käivitatakse vektorandmebaasis, et leida slaidile vastav tekstikirjeldus, mis võib sisaldada vastuseid kasutaja küsimusele. Seejärel esitame Claude 3 Sonneti mudelile slaidikirjelduse ja kasutaja küsimuse, et genereerida päringule vastus. Kogu selle postituse kood on saadaval aadressil GitHub puhata.

Järgmine diagramm illustreerib allaneelamise arhitektuuri.

Töövoog koosneb järgmistest sammudest:

  1. Slaidid teisendatakse JPG-vormingus pildifailideks (üks slaidi kohta) ja edastatakse tekstikirjelduse genereerimiseks Claude 3 Sonneti mudelile.
  2. Andmed saadetakse Amazon Titan Text Embeddingsi mudelisse, et luua manuseid. Selles seerias kasutame liugtekki Treenige ja juurutage Stable Diffusion, kasutades AWS Trainium & AWS Inferentia juunil 2023 Torontos toimunud AWS-i tippkohtumiselt, et näidata lahendust. Näidisplaadil on 31 slaidi, seetõttu loome 31 vektormanustuste komplekti, millest igaühel on 1536 mõõtmet. Lisame täiendavaid metaandmevälju, et teha rikkalikke otsingupäringuid, kasutades OpenSearchi võimsaid otsinguvõimalusi.
  3. Manustused sisestatakse API-kõne abil OSI-konveierisse.
  4. OSI-konveier neelab andmed dokumentidena OpenSearchi serverita registrisse. Indeks on konfigureeritud selle torujuhtme valamuks ja luuakse OpenSearchi serverita kogumiku osana.

Järgmine diagramm illustreerib kasutaja interaktsiooni arhitektuuri.

Töövoog koosneb järgmistest sammudest:

  1. Kasutaja esitab küsimuse, mis on seotud sissevõetud slaiditekiga.
  2. Kasutaja sisend teisendatakse manusteks, kasutades Amazon Titan Text Embeddingsi mudelit, millele pääseb juurde Amazon Bedrocki kaudu. Neid manuseid kasutades tehakse OpenSearch Service'i vektorotsing. Teostame k-lähima naabri (k-NN) otsingu, et leida kasutajapäringule vastavad kõige asjakohasemad manused.
  3. OpenSearch Serverlessi vastuse metaandmed sisaldavad kõige asjakohasemale slaidile vastava pildi ja kirjelduse teed.
  4. Viip luuakse kasutaja küsimuse ja pildi kirjelduse kombineerimisel. Viip antakse Amazon Bedrockis hostitavale Claude 3 Sonetile.
  5. Selle järelduse tulemus tagastatakse kasutajale.

Järgmistes jaotistes käsitleme mõlema etapi samme ja lisame üksikasjad väljundi kohta.

Eeldused

Selles postituses pakutava lahenduse rakendamiseks peaks teil olema AWS-i konto ning FM-ide, Amazon Bedrocki, SageMakeri ja OpenSearch Service'i tundmine.

See lahendus kasutab Amazon Bedrockis hostitud Claude 3 Sonneti ja Amazon Titan Text Embeddingsi mudeleid. Veenduge, et need mudelid on kasutamiseks lubatud, navigeerides lehele Juurdepääs mudelile lehel Amazon Bedrocki konsoolil.

Kui mudelid on lubatud, Juurdepääsu olek teatab Juurdepääs antud.

Kui mudelid pole saadaval, lubage juurdepääs, valides Mudeli juurdepääsu haldamine, mudelite valimine ja valimine Taotlege juurdepääsu mudelile. Mudelid lubatakse koheselt kasutamiseks.

Kasutage lahenduste virna loomiseks AWS CloudFormationi

Lahenduste virna loomiseks saate kasutada AWS CloudFormationit. Kui olete loonud 1. osa lahenduse samal AWS-i kontol, kustutage see kindlasti enne selle virna loomist.

AWS piirkond on siin
us-east-1
us-west-2

Pärast virna edukat loomist liikuge AWS CloudFormationi konsoolis virna vahekaardile Väljundid ja märkige üles väärtused MultimodalCollectionEndpoint ja OpenSearchPipelineEndpoint. Kasutage neid järgmistes etappides.

CloudFormationi mall loob järgmised ressursid.

  • IAM-i rollid - Järgnev AWS-i identiteedi- ja juurdepääsuhaldus (IAM) rollid luuakse. Värskendage neid rolle, et rakendada vähimate privileegide õigusi, nagu on kirjeldatud artiklis Turvalisuse parimad tavad.
    • SMExecutionRole koos Amazoni lihtne salvestusteenus (Amazon S3), SageMaker, OpenSearch Service ja Amazon Bedrock täielik juurdepääs.
    • OSPipelineExecutionRole juurdepääsuga S3 ämbrile ja OSI toimingutele.
  • SageMakeri märkmik – Kogu selle postituse kood käitatakse selle märkmiku abil.
  • OpenSearchi serverita kogu – See on vektorandmebaas manuste salvestamiseks ja toomiseks.
  • OSI torujuhe – See on konveier andmete sisestamiseks OpenSearch Serverlessi.
  • S3 kopp – Kõik selle postituse andmed salvestatakse sellesse ämbrisse.

CloudFormationi mall seadistab konveieri konfiguratsiooni, mis on vajalik OSI konveieri konfigureerimiseks HTTP-ga allikana ja OpenSearch Serverlessi indeksiga valamuna. SageMakeri märkmik 2_data_ingestion.ipynb kuvab, kuidas sisestada andmeid torujuhtmesse kasutades Taotlused HTTP teek.

CloudFormationi mall loob ka võrk, krüpteerimist ja juurdepääs andmetele teie OpenSearch Serverless kogu jaoks vajalikud eeskirjad. Värskendage neid eeskirju, et rakendada väikseima õigusega õigusi.

CloudFormationi malli nimele ja OpenSearch Service'i indeksi nimele viidatakse SageMakeri märkmikus 3_rag_inference.ipynb. Kui muudate vaikenimesid, värskendage neid kindlasti märkmikus.

Testige lahendust

Pärast CloudFormationi virna loomist saate lahendust testida. Tehke järgmised sammud.

  1. Valige SageMakeri konsoolil Sülearvutid navigeerimispaanil.
  2. valima MultimodalNotebookInstance Ja vali Avage JupyterLab.
  3. In Failibrauser, liikuge märkmike kausta, et näha märkmikke ja tugifaile.

Märkmikud on nummerdatud nende käitamise järjekorras. Iga märkmiku juhised ja kommentaarid kirjeldavad selle märkmikuga tehtud toiminguid. Käitame neid märkmikke ükshaaval.

  1. Vali 1_data_prep.ipynb selle avamiseks JupyterLabis.
  2. Kohta jooks menüüst valige Käivitage kõik rakud koodi käivitamiseks selles märkmikus.

See märkmik laadib alla avalikult kättesaadava liumekk, teisendage iga slaid JPG-vormingusse ja laadige need üles S3 ämbrisse.

  1. Vali 2_data_ingestion.ipynb selle avamiseks JupyterLabis.
  2. Kohta jooks menüüst valige Käivitage kõik rakud koodi käivitamiseks selles märkmikus.

Selles märkmikus loote indeksi OpenSearchi serverita kogus. See register salvestab slaiditeki manustamisandmed. Vaadake järgmist koodi:

session = boto3.Session()
credentials = session.get_credentials()
auth = AWSV4SignerAuth(credentials, g.AWS_REGION, g.OS_SERVICE)

os_client = OpenSearch(
  hosts = [{'host': host, 'port': 443}],
  http_auth = auth,
  use_ssl = True,
  verify_certs = True,
  connection_class = RequestsHttpConnection,
  pool_maxsize = 20
)

index_body = """
{
  "settings": {
    "index.knn": true
  },
  "mappings": {
    "properties": {
      "vector_embedding": {
        "type": "knn_vector",
        "dimension": 1536,
        "method": {
          "name": "hnsw",
          "engine": "nmslib",
          "parameters": {}
        }
      },
      "image_path": {
        "type": "text"
      },
      "slide_text": {
        "type": "text"
      },
      "slide_number": {
        "type": "text"
      },
      "metadata": { 
        "properties" :
          {
            "filename" : {
              "type" : "text"
            },
            "desc":{
              "type": "text"
            }
          }
      }
    }
  }
}
"""
index_body = json.loads(index_body)
try:
  response = os_client.indices.create(index_name, body=index_body)
  logger.info(f"response received for the create index -> {response}")
except Exception as e:
  logger.error(f"error in creating index={index_name}, exception={e}")

Kasutate Claude 3 Sonneti ja Amazon Titan Text Embeddingsi mudeleid, et teisendada eelmises sülearvutis loodud JPG-kujutised vektormanustusteks. Need manustused ja täiendavad metaandmed (nt S3 tee ja pildifaili kirjeldus) salvestatakse koos manustega registrisse. Järgmine koodilõik näitab, kuidas Claude 3 Sonet loob piltide kirjeldusi:

def get_img_desc(image_file_path: str, prompt: str):
    # read the file, MAX image size supported is 2048 * 2048 pixels
    with open(image_file_path, "rb") as image_file:
        input_image_b64 = image_file.read().decode('utf-8')
  
    body = json.dumps(
        {
            "anthropic_version": "bedrock-2023-05-31",
            "max_tokens": 1000,
            "messages": [
                {
                    "role": "user",
                    "content": [
                        {
                            "type": "image",
                            "source": {
                                "type": "base64",
                                "media_type": "image/jpeg",
                                "data": input_image_b64
                            },
                        },
                        {"type": "text", "text": prompt},
                    ],
                }
            ],
        }
    )
    
    response = bedrock.invoke_model(
        modelId=g.CLAUDE_MODEL_ID,
        body=body
    )

    resp_body = json.loads(response['body'].read().decode("utf-8"))
    resp_text = resp_body['content'][0]['text'].replace('"', "'")

    return resp_text

Piltide kirjeldused edastatakse Amazon Titan Text Embeddingsi mudelile, et luua vektormanused. Need manustused ja täiendavad metaandmed (nt S3 tee ja pildifaili kirjeldus) salvestatakse koos manustega registrisse. Järgmine koodilõik näitab kõnet Amazon Titan Text Embeddingsi mudelile:

def get_text_embedding(bedrock: botocore.client, prompt_data: str) -> np.ndarray:
    body = json.dumps({
        "inputText": prompt_data,
    })    
    try:
        response = bedrock.invoke_model(
            body=body, modelId=g.TITAN_MODEL_ID, accept=g.ACCEPT_ENCODING, contentType=g.CONTENT_ENCODING
        )
        response_body = json.loads(response['body'].read())
        embedding = response_body.get('embedding')
    except Exception as e:
        logger.error(f"exception={e}")
        embedding = None

    return embedding

Andmed sisestatakse OpenSearch Serverlessi indeksisse, tehes API-kutse OSI torujuhtmele. Järgmine koodilõik näitab HTTP-taotluste teegi abil tehtud kõnet:

data = json.dumps([{
    "image_path": input_image_s3, 
    "slide_text": resp_text, 
    "slide_number": slide_number, 
    "metadata": {
        "filename": obj_name, 
        "desc": "" 
    }, 
    "vector_embedding": embedding
}])

r = requests.request(
    method='POST', 
    url=osi_endpoint, 
    data=data,
    auth=AWSSigV4('osis'))

  1. Vali 3_rag_inference.ipynb selle avamiseks JupyterLabis.
  2. Kohta jooks menüüst valige Käivitage kõik rakud koodi käivitamiseks selles märkmikus.

See sülearvuti rakendab RAG-lahendust: teisendate kasutaja küsimuse manusteks, leiate vektorandmebaasist sarnase pildikirjelduse ja edastate allalaaditud kirjelduse Claude 3 Sonnetile, et genereerida vastus kasutaja küsimusele. Kasutate järgmist viipamalli:

  llm_prompt: str = """

  Human: Use the summary to provide a concise answer to the question to the best of your abilities. If you cannot answer the question from the context then say I do not know, do not make up an answer.
  <question>
  {question}
  </question>

  <summary>
  {summary}
  </summary>

  Assistant:"""

Järgmine koodilõik pakub RAG-i töövoogu:

def get_llm_response(bedrock: botocore.client, question: str, summary: str) -> str:
    prompt = llm_prompt.format(question=question, summary=summary)
    
    body = json.dumps(
    {
        "anthropic_version": "bedrock-2023-05-31",
        "max_tokens": 1000,
        "messages": [
            {
                "role": "user",
                "content": [
                    {"type": "text", "text": prompt},
                ],
            }
        ],
    })
        
    try:
        response = bedrock.invoke_model(
        modelId=g.CLAUDE_MODEL_ID,
        body=body)

        response_body = json.loads(response['body'].read().decode("utf-8"))
        llm_response = response_body['content'][0]['text'].replace('"', "'")
        
    except Exception as e:
        logger.error(f"exception while slide_text={summary[:10]}, exception={e}")
        llm_response = None

    return llm_response


# create prompt and convert to embeddings question: str = "How does Inf2 compare in performance to comparable EC2 instances? I need numbers." text_embedding = get_text_embedding(bedrock, question) # vector db search vector_db_response: Dict = find_similar_data(text_embeddings) # download image for local notebook display s3_img_path = vector_db_response.get('hits', {}).get('hits')[0].get('_source').get('image_path') logger.info(f"going to answer the question="{question}" using the image "{s3_img_path}"") !aws s3 cp {s3_img_path} . local_img_path = os.path.basename(s3_img_path) display(filename=local_img_path) # Ask Claude 3 Sonnet slide_text = vector_db_response.get('hits', {}).get('hits')[0].get('_source').get('slide_text') llm_response = get_llm_response(bedrock, question, slide_text) print(llm_response)

Tulemused

Järgmine tabel sisaldab mõningaid kasutajate küsimusi ja vastuseid, mille meie juurutamine genereeris. The Küsimus veerg hõlmab kasutaja küsimust ja Vastus veerg on Claude 3 Sonneti loodud tekstiline vastus. The pilt veerus on näidatud OpenSearchi serverita vektorotsingu tagastatud k-NN slaidivaste.

Multimodaalsed RAG-i tulemused

Küsimus Vastus pilt
Kuidas on Inf2 jõudluses võrreldav võrreldavate EC2 eksemplaridega? Ma vajan numbreid. Kokkuvõttes esitatud teabe põhjal on Amazon EC2 Inf2 eksemplaride peamised jõudluse võrdlusnumbrid võrreldes teiste eksemplaridega järgmised: 1. Kuni 4 korda suurem läbilaskevõime. 2. Kuni 10 korda väiksem latentsusaeg. Kokkuvõte ei anna konkreetseid numbreid, mis võrdleksid Inf2 eksemplare teiste EC2 eksemplaritüüpidega. Siiski tõstab see esile läbilaskevõime ja latentsusaja täiustused kui Inf2 eksemplaride peamised jõudluse eelised võrreldes generatiivsete AI-mudelite käitamiseks kasutatavate eksemplaridega.
Mida AI/ML hooratta järgi AWS AI/ML teenused pakuvad? Kokkuvõtte põhjal pakuvad AWS AI/ML teenused mitmesuguseid võimalusi, mis toidavad AI/ML hooratast. See hooratas koosneb innovatsioonist uute ja paremate algoritmide väljatöötamisel, võimaldades rohkem kasutusjuhtumeid ja rakendusi, suurendades laiemat kasutuselevõttu ja nõudlust, mis omakorda toob kaasa täiendavad investeeringud teadusuuringutesse ja optimeerimisse, et suurendada innovatsiooni. Näib, et AWS AI/ML teenused pakuvad tööriistu, ressursse ja infrastruktuuri, et toetada seda pidevat innovatsiooni, rakenduste arendamise, kasutuselevõtu ja reinvesteerimise tsüklit tehisintellekti ja masinõppe valdkonnas.
Kui palju rohkem parameetreid on GPT-2-l võrreldes GPT-3-ga? Mis on numbriline erinevus GPT-2 ja GPT-3 parameetrite suuruse vahel? Kokkuvõttes toodud teabe kohaselt oli 3. aasta GPT-2020 parameetritega 175B (175 miljardit), 2. aasta GPT-2019-l aga 1.5B (1.5 miljardit) parameetreid. Seetõttu on GPT-2 ja GPT-3 parameetrite suuruse arvuline erinevus 173.5 miljardit parameetrit. GPT-3-l on ligikaudu 115 korda rohkem parameetreid kui GPT-2-l.
Mis on kvargid osakeste füüsikas? Kahjuks ei sisalda antud kokkuvõte mingit infot kvarkide kohta osakeste füüsikas. Kokkuvõte kirjeldab pilti, mis on seotud loomuliku keele töötlemise ja generatiivse AI-tehnoloogia arenguga, kuid selles ei mainita midagi osakeste füüsikast ega kvarkide kontseptsioonist.

Esitage päring oma indeksist

Saate kasutada OpenSearchi armatuurlaudu, et suhelda OpenSearch API-ga, et käivitada oma indeksi ja sissevõetud andmete kiirteste.

Korista ära

Edaspidiste tasude vältimiseks kustutage ressursid. Seda saate teha, kustutades virna AWS CloudFormationi konsooli abil.

Järeldus

Ettevõtted loovad kogu aeg uut sisu ning slaidikomplektid on levinud viis teabe jagamiseks ja levitamiseks nii organisatsioonisiseselt kui ka väljastpoolt klientidega või konverentsidel. Aja jooksul võib rikkalik teave jääda maetud ja peidetud mittetekstilistesse modaalsustesse, nagu graafikud ja tabelid nendes slaidipakkides.

Saate kasutada seda lahendust ja multimodaalsete FM-ide (nt Amazon Titan Text Embeddings ja Claude 3 Sonneti) võimsust, et avastada uut teavet või avastada uusi vaatenurki slaidipakkide sisule. Saate proovida erinevaid Amazon Bedrockis saadaolevaid Claude'i mudeleid, värskendades CLAUDE_MODEL_ID aasta globals.py faili.

See on kolmeosalise sarja 2. osa. 1. osas kasutasime Amazon Titan Multimodal Embeddingsi ja LLaVA mudelit. 3. osas võrdleme 1. ja 2. osa lähenemisviise.

Osa sellest koodist avaldatakse all Apache 2.0 litsents.


Autoritest

Amit Arora on AI ja ML spetsialistarhitekt ettevõttes Amazon Web Services, aidates ettevõtetel kasutada pilvepõhiseid masinõppeteenuseid, et oma uuendusi kiiresti skaleerida. Ta on ka MS andmeteaduse ja -analüütika programmi adjunkt Georgetowni ülikoolis Washingtonis.

Manju Prasad on Amazon Web Servicesi vanemlahenduste arhitekt. Ta keskendub tehniliste juhiste pakkumisele erinevates tehnilistes valdkondades, sealhulgas AI/ML. Enne AWS-iga liitumist kavandas ja ehitas ta lahendusi finantsteenuste sektori ettevõtetele ja ka idufirmadele. Ta on kirglik teadmiste jagamise ja uute talentide vastu huvi tekitamise vastu.

Archana Inapudi on AWS-i vanemlahenduste arhitekt, kes toetab strateegilist klienti. Tal on üle kümne aasta valdkonnaüleseid teadmisi, mis juhivad strateegilisi tehnilisi algatusi. Archana on AWS-i AI/ML tehnilise valdkonna kogukonna ambitsioonikas liige. Enne AWS-iga liitumist juhtis Archana tervishoiuettevõttes üleminekut traditsioonilistest silditud andmeallikatest Hadoopi. Ta on kirglik tehnoloogia kasutamise vastu, et kiirendada kasvu, pakkuda klientidele väärtust ja saavutada äritulemusi.

Antara Raisa on AI ja ML Solutionsi arhitekt ettevõttes Amazon Web Services, kes toetab Texase osariigis Dallases asuvaid strateegilisi kliente. Tal on ka varasem töökogemus suurettevõtete partneritega AWS-is, kus ta töötas digikesksete klientide jaoks partner Success Solutions Architectina.

spot_img

Uusim intelligentsus

spot_img