Kecerdasan Data Generatif

Bicaralah dengan dek slide Anda menggunakan model fondasi multimodal yang dihosting di Amazon Bedrock – Bagian 2 | Layanan Web Amazon

Tanggal:

In bagian 1 dari seri ini, kami menyajikan solusi yang menggunakan Penyematan Multimodal Amazon Titan model untuk mengonversi slide individual dari dek slide menjadi embeddings. Kami menyimpan embeddings dalam database vektor dan kemudian menggunakan Asisten Bahasa dan Penglihatan Besar (LLaVA 1.5-7b) model untuk menghasilkan respons teks terhadap pertanyaan pengguna berdasarkan slide paling mirip yang diambil dari database vektor. Kami menggunakan layanan AWS termasuk Batuan Dasar Amazon, Amazon SageMaker, dan Amazon OpenSearch Tanpa Server dalam solusi ini.

Dalam posting ini, kami menunjukkan pendekatan yang berbeda. Kami menggunakan Soneta Antropis Claude 3 model untuk menghasilkan deskripsi teks untuk setiap slide di dek slide. Deskripsi ini kemudian diubah menjadi penyematan teks menggunakan Penyematan Teks Amazon Titan model dan disimpan dalam database vektor. Kemudian kami menggunakan model Claude 3 Sonnet untuk menghasilkan jawaban atas pertanyaan pengguna berdasarkan deskripsi teks paling relevan yang diambil dari database vektor.

Anda dapat menguji kedua pendekatan untuk kumpulan data Anda dan mengevaluasi hasilnya untuk melihat pendekatan mana yang memberikan hasil terbaik. Di Bagian 3 seri ini, kami mengevaluasi hasil kedua metode.

Ikhtisar solusi

Solusinya memberikan implementasi untuk menjawab pertanyaan menggunakan informasi yang terkandung dalam teks dan elemen visual dari slide deck. Perancangannya mengandalkan konsep Retrieval Augmented Generation (RAG). Secara tradisional, RAG telah dikaitkan dengan data tekstual yang dapat diproses oleh model bahasa besar (LLM). Dalam seri ini, kami memperluas RAG untuk menyertakan gambar juga. Ini memberikan kemampuan pencarian yang kuat untuk mengekstrak konten yang relevan secara kontekstual dari elemen visual seperti tabel dan grafik serta teks.

Solusi ini mencakup komponen berikut:

  • Amazon Titan Text Embeddings adalah model penyematan teks yang mengubah teks bahasa alami, termasuk kata tunggal, frasa, atau bahkan dokumen besar, menjadi representasi numerik yang dapat digunakan untuk mendukung kasus penggunaan seperti pencarian, personalisasi, dan pengelompokan berdasarkan kesamaan semantik.
  • Claude 3 Sonnet adalah generasi berikutnya dari model tercanggih dari Anthropic. Soneta adalah alat serbaguna yang dapat menangani berbagai tugas, mulai dari penalaran dan analisis kompleks hingga keluaran cepat, serta pencarian dan pengambilan informasi dalam jumlah besar yang efisien.
  • OpenSearch Serverless adalah konfigurasi tanpa server sesuai permintaan untuk Amazon OpenSearch Service. Kami menggunakan OpenSearch Serverless sebagai database vektor untuk menyimpan embeddings yang dihasilkan oleh model Amazon Titan Text Embeddings. Indeks yang dibuat dalam koleksi OpenSearch Serverless berfungsi sebagai penyimpanan vektor untuk solusi RAG kami.
  • Penyerapan Amazon OpenSearch (OSI) adalah pengumpul data tanpa server yang terkelola sepenuhnya yang mengirimkan data ke domain OpenSearch Service dan koleksi OpenSearch Serverless. Dalam postingan ini, kami menggunakan API pipeline OSI untuk mengirimkan data ke penyimpanan vektor OpenSearch Serverless.

Desain solusi terdiri dari dua bagian: penyerapan dan interaksi pengguna. Selama penyerapan, kami memproses kumpulan slide masukan dengan mengonversi setiap slide menjadi gambar, menghasilkan deskripsi dan penyematan teks untuk setiap gambar. Kami kemudian mengisi penyimpanan data vektor dengan embeddings dan deskripsi teks untuk setiap slide. Langkah-langkah ini diselesaikan sebelum langkah-langkah interaksi pengguna.

Pada fase interaksi pengguna, pertanyaan dari pengguna diubah menjadi penyematan teks. Pencarian kesamaan dijalankan pada database vektor untuk menemukan deskripsi teks yang sesuai dengan slide yang berpotensi berisi jawaban atas pertanyaan pengguna. Kami kemudian memberikan deskripsi slide dan pertanyaan pengguna ke model Claude 3 Soneta untuk menghasilkan jawaban atas pertanyaan tersebut. Semua kode untuk posting ini tersedia di GitHub istirahat.

Diagram berikut menggambarkan arsitektur penyerapan.

Alur kerja terdiri dari langkah-langkah berikut:

  1. Slide dikonversi ke file gambar (satu per slide) dalam format JPG dan diteruskan ke model Claude 3 Soneta untuk menghasilkan deskripsi teks.
  2. Data dikirim ke model Amazon Titan Text Embeddings untuk menghasilkan embeddings. Dalam seri ini, kami menggunakan dek slide Latih dan terapkan Difusi Stabil menggunakan AWS Trainium & AWS Inferentia dari AWS Summit di Toronto, Juni 2023 untuk mendemonstrasikan solusinya. Dek sampel memiliki 31 slide, oleh karena itu kami menghasilkan 31 set penyematan vektor, masing-masing dengan 1536 dimensi. Kami menambahkan bidang metadata tambahan untuk melakukan kueri penelusuran kaya menggunakan kemampuan penelusuran OpenSearch yang canggih.
  3. Penyematan dimasukkan ke dalam saluran OSI menggunakan panggilan API.
  4. Alur OSI menyerap data sebagai dokumen ke dalam indeks OpenSearch Serverless. Indeks dikonfigurasi sebagai sink untuk alur ini dan dibuat sebagai bagian dari koleksi OpenSearch Serverless.

Diagram berikut menggambarkan arsitektur interaksi pengguna.

Alur kerja terdiri dari langkah-langkah berikut:

  1. Seorang pengguna mengajukan pertanyaan terkait dengan dek slide yang telah diserap.
  2. Input pengguna diubah menjadi embeddings menggunakan model Amazon Titan Text Embeddings yang diakses menggunakan Amazon Bedrock. Pencarian vektor OpenSearch Service dilakukan menggunakan embeddings ini. Kami melakukan pencarian k-nearest neighbour (k-NN) untuk mengambil embeddings paling relevan yang cocok dengan kueri pengguna.
  3. Metadata respons dari OpenSearch Serverless berisi jalur ke gambar dan deskripsi yang sesuai dengan slide yang paling relevan.
  4. Prompt dibuat dengan menggabungkan pertanyaan pengguna dan deskripsi gambar. Prompt diberikan kepada Claude 3 Sonnet yang dihosting di Amazon Bedrock.
  5. Hasil inferensi ini dikembalikan ke pengguna.

Kami membahas langkah-langkah untuk kedua tahapan di bagian berikut, dan menyertakan detail tentang keluarannya.

Prasyarat

Untuk mengimplementasikan solusi yang diberikan dalam posting ini, Anda harus memiliki Akun AWS dan keakraban dengan FM, Amazon Bedrock, SageMaker, dan OpenSearch Service.

Solusi ini menggunakan model Claude 3 Sonnet dan Amazon Titan Text Embeddings yang dihosting di Amazon Bedrock. Pastikan model ini diaktifkan untuk digunakan dengan menavigasi ke Akses model halaman di konsol Amazon Bedrock.

Jika model diaktifkan, Status akses akan menyatakan Akses diberikan.

Jika model tidak tersedia, aktifkan akses dengan memilih Kelola akses model, memilih model, dan memilih Minta akses model. Model-model tersebut segera diaktifkan untuk digunakan.

Gunakan AWS CloudFormation untuk membuat tumpukan solusi

Anda dapat menggunakan AWS CloudFormation untuk membuat tumpukan solusi. Jika Anda telah membuat solusi untuk Bagian 1 di akun AWS yang sama, pastikan untuk menghapusnya sebelum membuat tumpukan ini.

Wilayah AWS Link
us-east-1
us-west-2

Setelah tumpukan berhasil dibuat, navigasikan ke tab Keluaran tumpukan di konsol AWS CloudFormation dan catat nilai untuk MultimodalCollectionEndpoint dan OpenSearchPipelineEndpoint. Anda menggunakannya dalam langkah selanjutnya.

Template CloudFormation membuat sumber daya berikut:

  • Peran IAM - Pengikut Identitas AWS dan Manajemen Akses (IAM) peran dibuat. Perbarui peran ini untuk menerapkan izin dengan hak istimewa paling rendah, seperti yang dibahas di Praktik terbaik keamanan.
    • SMExecutionRole dengan Layanan Penyimpanan Sederhana Amazon (Amazon S3), SageMaker, OpenSearch Service, dan akses penuh Amazon Bedrock.
    • OSPipelineExecutionRole dengan akses ke bucket S3 dan tindakan OSI.
  • Buku catatan SageMaker – Semua kode untuk postingan ini dijalankan menggunakan notebook ini.
  • Koleksi Tanpa Server OpenSearch – Ini adalah database vektor untuk menyimpan dan mengambil embeddings.
  • Pipa OSI – Ini adalah alur untuk menyerap data ke OpenSearch Tanpa Server.
  • Ember S3 – Semua data untuk postingan ini disimpan di bucket ini.

Templat CloudFormation menyiapkan konfigurasi alur yang diperlukan untuk mengonfigurasi alur OSI dengan HTTP sebagai sumber dan indeks OpenSearch Serverless sebagai sink. Buku catatan SageMaker 2_data_ingestion.ipynb menampilkan cara memasukkan data ke dalam alur menggunakan Permintaan perpustakaan HTTP.

Templat CloudFormation juga dibuat jaringan, enkripsi dan akses data kebijakan yang diperlukan untuk koleksi OpenSearch Tanpa Server Anda. Perbarui kebijakan ini untuk menerapkan izin dengan hak istimewa paling rendah.

Nama templat CloudFormation dan nama indeks OpenSearch Service direferensikan di notebook SageMaker 3_rag_inference.ipynb. Jika Anda mengubah nama default, pastikan Anda memperbaruinya di buku catatan.

Uji solusinya

Setelah Anda membuat tumpukan CloudFormation, Anda dapat menguji solusinya. Selesaikan langkah-langkah berikut:

  1. Di konsol SageMaker, pilih notebook di panel navigasi.
  2. Pilih MultimodalNotebookInstance Dan pilihlah Buka JupyterLab.
  3. In Browser File, buka folder buku catatan untuk melihat buku catatan dan file pendukung.

Buku catatan diberi nomor sesuai urutan pengoperasiannya. Instruksi dan komentar di setiap buku catatan menjelaskan tindakan yang dilakukan oleh buku catatan tersebut. Kami menjalankan buku catatan ini satu per satu.

  1. Pilih 1_data_prep.ipynb untuk membukanya di JupyterLab.
  2. pada Run menu, pilih Jalankan Semua Sel untuk menjalankan kode di buku catatan ini.

Buku catatan ini akan diunduh secara publik dek geser, konversi setiap slide ke dalam format file JPG, dan unggah ke bucket S3.

  1. Pilih 2_data_ingestion.ipynb untuk membukanya di JupyterLab.
  2. pada Run menu, pilih Jalankan Semua Sel untuk menjalankan kode di buku catatan ini.

Di buku catatan ini, Anda membuat indeks dalam koleksi OpenSearch Serverless. Indeks ini menyimpan data penyematan untuk dek slide. Lihat kode berikut:

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}")

Anda menggunakan model Claude 3 Sonnet dan Amazon Titan Text Embeddings untuk mengonversi gambar JPG yang dibuat di buku catatan sebelumnya menjadi penyematan vektor. Penyematan ini dan metadata tambahan (seperti jalur S3 dan deskripsi file gambar) disimpan dalam indeks bersama dengan penyematan. Cuplikan kode berikut menunjukkan bagaimana Claude 3 Sonnet menghasilkan deskripsi gambar:

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

Deskripsi gambar diteruskan ke model Amazon Titan Text Embeddings untuk menghasilkan penyematan vektor. Penyematan ini dan metadata tambahan (seperti jalur S3 dan deskripsi file gambar) disimpan dalam indeks bersama dengan penyematan. Cuplikan kode berikut menunjukkan panggilan ke model Amazon Titan Text Embeddings:

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

Data diserap ke dalam indeks OpenSearch Serverless dengan membuat panggilan API ke pipeline OSI. Cuplikan kode berikut menunjukkan panggilan yang dilakukan menggunakan pustaka HTTP Permintaan:

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. Pilih 3_rag_inference.ipynb untuk membukanya di JupyterLab.
  2. pada Run menu, pilih Jalankan Semua Sel untuk menjalankan kode di buku catatan ini.

Buku catatan ini mengimplementasikan solusi RAG: Anda mengonversi pertanyaan pengguna menjadi penyematan, menemukan deskripsi gambar serupa dari database vektor, dan memberikan deskripsi yang diambil ke Claude 3 Sonnet untuk menghasilkan jawaban atas pertanyaan pengguna. Anda menggunakan templat prompt berikut:

  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:"""

Cuplikan kode berikut menyediakan alur kerja RAG:

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)

Hasil

Tabel berikut berisi beberapa pertanyaan dan tanggapan pengguna yang dihasilkan oleh penerapan kami. Itu Pertanyaan kolom menangkap pertanyaan pengguna, dan Menjawab kolom adalah respon tekstual yang dihasilkan oleh Claude 3 Soneta. Itu Gambar kolom memperlihatkan pencocokan slide k-NN yang dikembalikan oleh pencarian vektor OpenSearch Serverless.

Hasil RAG multimodal

Pertanyaan Menjawab Gambar
Bagaimana kinerja Inf2 dibandingkan dengan instans EC2 yang sebanding? Saya butuh nomor. Berdasarkan informasi yang diberikan dalam ringkasan, angka perbandingan kinerja utama yang diberikan untuk instans Inf2 Amazon EC2 dibandingkan dengan instans lainnya adalah: 1. Throughput hingga 4x lebih tinggi. 2. Latensi hingga 10x lebih rendah. Ringkasan ini tidak memberikan angka spesifik yang membandingkan instans Inf2 dengan tipe instans EC2 lainnya. Namun, hal ini menyoroti peningkatan throughput dan latensi sebagai keunggulan kinerja utama instans Inf2 dibandingkan instans serupa untuk menjalankan model AI generatif.
Sesuai dengan flywheel AI/ML, apa saja yang disediakan oleh layanan AWS AI/ML? Berdasarkan ringkasan, layanan AWS AI/ML menyediakan berbagai kemampuan yang mendorong flywheel AI/ML. Roda gila ini terdiri dari inovasi dalam mengembangkan algoritma baru dan lebih baik, memungkinkan lebih banyak kasus penggunaan dan aplikasi, mendorong adopsi dan permintaan yang lebih luas, yang pada gilirannya mengarah pada investasi lebih lanjut dalam penelitian dan optimalisasi untuk mendorong lebih banyak inovasi. Layanan AWS AI/ML tampaknya menawarkan alat, sumber daya, dan infrastruktur untuk mendukung siklus inovasi, pengembangan aplikasi, adopsi, dan investasi ulang yang berkelanjutan di bidang kecerdasan buatan dan pembelajaran mesin.
Dibandingkan dengan GPT-2, berapa banyak lagi parameter yang dimiliki GPT-3? Berapa perbedaan numerik antara ukuran parameter GPT-2 dan GPT-3? Menurut informasi yang diberikan dalam ringkasan, GPT-3 dari tahun 2020 memiliki 175 miliar (175 miliar) parameter, sedangkan GPT-2 dari tahun 2019 memiliki 1.5 miliar (1.5 miliar) parameter. Oleh karena itu, perbedaan numerik antara ukuran parameter GPT-2 dan GPT-3 adalah 173.5 miliar parameter. GPT-3 memiliki parameter sekitar 115 kali lebih banyak dibandingkan GPT-2.
Apa yang dimaksud dengan quark dalam fisika partikel? Sayangnya, ringkasan yang diberikan tidak memuat informasi apa pun tentang quark dalam fisika partikel. Ringkasan tersebut menjelaskan gambar yang terkait dengan kemajuan pemrosesan bahasa alami dan teknologi AI generatif, namun tidak menyebutkan apa pun tentang fisika partikel atau konsep quark.

Kueri indeks Anda

Anda dapat menggunakan Dasbor OpenSearch untuk berinteraksi dengan OpenSearch API guna menjalankan pengujian cepat pada indeks dan data yang diserap.

Membersihkan

Untuk menghindari timbulnya biaya di masa mendatang, hapus sumber daya. Anda dapat melakukan ini dengan menghapus tumpukan menggunakan konsol AWS CloudFormation.

Kesimpulan

Perusahaan menghasilkan konten baru setiap saat, dan slide deck adalah cara umum untuk berbagi dan menyebarkan informasi secara internal dalam organisasi dan secara eksternal dengan pelanggan atau di konferensi. Seiring waktu, informasi yang kaya dapat tetap terkubur dan tersembunyi dalam modalitas non-teks seperti grafik dan tabel di slide deck ini.

Anda dapat menggunakan solusi ini dan kekuatan FM multimodal seperti Amazon Titan Text Embeddings dan Claude 3 Sonnet untuk menemukan informasi baru atau mengungkap perspektif baru tentang konten dalam slide deck. Anda dapat mencoba berbagai model Claude yang tersedia di Amazon Bedrock dengan memperbarui CLAUDE_MODEL_ID dalam globals.py file.

Ini adalah Bagian 2 dari seri tiga bagian. Kami menggunakan Amazon Titan Multimodal Embeddings dan model LLaVA di Bagian 1. Di Bagian 3, kami akan membandingkan pendekatan dari Bagian 1 dan Bagian 2.

Bagian dari kode ini dirilis di bawah Lisensi Apache 2.0.


Tentang penulis

Amit Arora adalah Arsitek Spesialis AI dan ML di Amazon Web Services, membantu pelanggan perusahaan menggunakan layanan pembelajaran mesin berbasis cloud untuk menskalakan inovasi mereka dengan cepat. Dia juga dosen tambahan di MS data science and analytics program di Georgetown University di Washington DC

Manju Prasad adalah Arsitek Solusi Senior di Amazon Web Services. Dia berfokus pada pemberian panduan teknis di berbagai domain teknis, termasuk AI/ML. Sebelum bergabung dengan AWS, ia merancang dan membangun solusi untuk perusahaan di sektor jasa keuangan dan juga untuk startup. Dia bersemangat berbagi pengetahuan dan menumbuhkan minat terhadap bakat-bakat baru.

Archana Inapudi adalah Arsitek Solusi Senior di AWS, yang mendukung pelanggan strategis. Dia memiliki lebih dari satu dekade keahlian lintas industri yang memimpin inisiatif teknis strategis. Archana adalah calon anggota komunitas bidang teknis AI/ML di AWS. Sebelum bergabung dengan AWS, Archana memimpin migrasi dari sumber data tradisional yang disimpan ke Hadoop di sebuah perusahaan layanan kesehatan. Dia bersemangat menggunakan teknologi untuk mempercepat pertumbuhan, memberikan nilai kepada pelanggan, dan mencapai hasil bisnis.

Antara Raisa adalah Arsitek Solusi AI dan ML di Amazon Web Services, mendukung pelanggan strategis yang berbasis di Dallas, Texas. Dia juga memiliki pengalaman bekerja dengan mitra perusahaan besar di AWS, di mana dia bekerja sebagai Arsitek Solusi Sukses Mitra untuk pelanggan yang berpusat pada digital.

tempat_img

Intelijen Terbaru

tempat_img

Hubungi kami

Hai, yang di sana! Apa yang bisa saya bantu?