Gunakan model dasar AI generatif untuk meringkas dan menjawab pertanyaan menggunakan data Anda sendiri | Layanan Web Amazon

Gunakan model dasar AI generatif untuk meringkas dan menjawab pertanyaan menggunakan data Anda sendiri | Layanan Web Amazon

Model bahasa besar (LLM) dapat digunakan untuk menganalisis dokumen yang rumit dan memberikan ringkasan dan jawaban atas pertanyaan. Pos Penyempurnaan Adaptasi Domain dari Model Fondasi di Amazon SageMaker JumpStart pada data Keuangan menjelaskan cara menyempurnakan LLM menggunakan kumpulan data Anda sendiri. Setelah Anda memiliki LLM yang solid, Anda ingin memaparkan LLM tersebut kepada pengguna bisnis untuk memproses dokumen baru, yang panjangnya bisa ratusan halaman. Dalam posting ini, kami mendemonstrasikan cara membangun antarmuka pengguna waktu nyata untuk memungkinkan pengguna bisnis memproses dokumen PDF dengan panjang sewenang-wenang. Setelah file diproses, Anda dapat meringkas dokumen atau mengajukan pertanyaan tentang konten. Solusi sampel yang dijelaskan dalam posting ini tersedia di GitHub.

Bekerja dengan dokumen keuangan

Laporan keuangan seperti laporan pendapatan triwulanan dan laporan tahunan kepada pemegang saham seringkali panjangnya puluhan atau ratusan halaman. Dokumen-dokumen ini mengandung banyak bahasa boilerplate seperti penafian dan bahasa hukum. Jika Anda ingin mengekstrak poin data utama dari salah satu dokumen ini, Anda memerlukan waktu dan keakraban dengan bahasa boilerplate sehingga Anda dapat mengidentifikasi fakta menarik. Dan tentu saja, Anda tidak dapat mengajukan pertanyaan LLM tentang dokumen yang belum pernah dilihatnya.

LLM yang digunakan untuk peringkasan memiliki batasan jumlah token (karakter) yang diteruskan ke dalam model, dan dengan beberapa pengecualian, ini biasanya tidak lebih dari beberapa ribu token. Itu biasanya menghalangi kemampuan untuk meringkas dokumen yang lebih panjang.

Solusi kami menangani dokumen yang melebihi panjang urutan token maksimum LLM, dan membuat dokumen tersebut tersedia untuk LLM untuk menjawab pertanyaan.

Ikhtisar solusi

Desain kami memiliki tiga bagian penting:

  • Ini memiliki aplikasi web interaktif bagi pengguna bisnis untuk mengunggah dan memproses PDF
  • Itu menggunakan perpustakaan langchain untuk membagi PDF besar menjadi potongan-potongan yang lebih mudah dikelola
  • Ini menggunakan teknik generasi augmented pengambilan untuk memungkinkan pengguna mengajukan pertanyaan tentang data baru yang belum pernah dilihat LLM sebelumnya

Seperti yang ditunjukkan pada diagram berikut, kami menggunakan ujung depan yang diimplementasikan dengan React JavaScript yang dihosting di sebuah Layanan Penyimpanan Sederhana Amazon (Amazon S3) ember digawangi oleh Amazon CloudFront. Aplikasi front-end memungkinkan pengguna mengunggah dokumen PDF ke Amazon S3. Setelah pengunggahan selesai, Anda dapat memicu pekerjaan ekstraksi teks yang diberdayakan oleh Teks Amazon. Sebagai bagian dari pasca-pemrosesan, an AWS Lambda fungsi menyisipkan penanda khusus ke dalam teks yang menunjukkan batas halaman. Saat pekerjaan itu selesai, Anda bisa memanggil API yang meringkas teks atau menjawab pertanyaan tentangnya.

Gunakan model dasar AI generatif untuk merangkum dan menjawab pertanyaan menggunakan data Anda sendiri | Kecerdasan Data PlatoBlockchain Layanan Web Amazon. Pencarian Vertikal. Ai.

Karena beberapa langkah ini mungkin memerlukan waktu, arsitektur menggunakan pendekatan asinkron yang dipisahkan. Misalnya, panggilan untuk meringkas dokumen memanggil fungsi Lambda yang memposting pesan ke Layanan Antrian Sederhana Amazon (Amazon SQS) antrian. Fungsi Lambda lain mengambil pesan itu dan memulai Layanan Kontainer Amazon Elastic (AmazonECS) Fargate AWS tugas. Tugas Fargate memanggil Amazon SageMaker titik akhir inferensi. Kami menggunakan tugas Fargate di sini karena meringkas PDF yang sangat panjang mungkin memerlukan lebih banyak waktu dan memori daripada fungsi Lambda yang tersedia. Ketika peringkasan selesai, aplikasi front-end dapat mengambil hasil dari sebuah Amazon DynamoDB tabel.

Untuk meringkas, kami menggunakan model Summarize AI21, salah satu model dasar yang tersedia melalui Mulai Lompatan Amazon SageMaker. Meskipun model ini menangani dokumen hingga 10,000 kata (sekitar 40 halaman), kami menggunakan pemisah teks langchain untuk memastikan bahwa setiap panggilan ringkasan ke LLM tidak lebih dari 10,000 kata. Untuk pembuatan teks, kami menggunakan model Medium Cohere, dan kami menggunakan GPT-J untuk penyematan, keduanya melalui JumpStart.

Pemrosesan ringkasan

Saat menangani dokumen yang lebih besar, kita perlu menentukan cara membagi dokumen menjadi bagian yang lebih kecil. Saat kami mendapatkan hasil ekstraksi teks kembali dari Amazon Textract, kami menyisipkan penanda untuk potongan teks yang lebih besar (sejumlah halaman yang dapat dikonfigurasi), halaman individual, dan jeda baris. Langchain akan membagi berdasarkan penanda tersebut dan menyusun dokumen yang lebih kecil yang berada di bawah batas token. Lihat kode berikut:

text_splitter = RecursiveCharacterTextSplitter( separators = ["<CHUNK>", "<PAGE>", "n"], chunk_size = int(chunk_size), chunk_overlap = int(chunk_overlap)) with open(local_path) as f: doc = f.read() texts = text_splitter.split_text(doc) print(f"Number of splits: {len(texts)}") llm = SageMakerLLM(endpoint_name = endpoint_name) responses = [] for t in texts: r = llm(t) responses.append(r) summary = "n".join(responses)

LLM dalam rantai peringkasan adalah pembungkus tipis di sekitar titik akhir SageMaker kami:

class SageMakerLLM(LLM): endpoint_name: str @property
def _llm_type(self) -> str: return "summarize" def _call(self, prompt: str, stop: Optional[List[str]] = None) -> str: response = ai21.Summarize.execute( source=prompt, sourceType="TEXT", sm_endpoint=self.endpoint_name ) return response.summary 

Menjawab pertanyaan

Dalam metode pembuatan augmented pengambilan, pertama-tama kami membagi dokumen menjadi segmen-segmen yang lebih kecil. Kami membuat penyematan untuk setiap segmen dan menyimpannya di basis data vektor Chroma sumber terbuka melalui antarmuka langchain. Kami menyimpan database dalam sebuah Sistem File Amazon Elastis (Amazon EFS) sistem file untuk digunakan nanti. Lihat kode berikut:

documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size = 500, chunk_overlap = 0)
texts = text_splitter.split_documents(documents)
print(f"Number of splits: {len(texts)}") embeddings = SMEndpointEmbeddings( endpoint_name=endpoint_name,
)
vectordb = Chroma.from_documents(texts, embeddings, persist_directory=persist_directory)
vectordb.persist()

Saat penyematan sudah siap, pengguna dapat mengajukan pertanyaan. Kami mencari database vektor untuk potongan teks yang paling cocok dengan pertanyaan:

embeddings = SMEndpointEmbeddings( endpoint_name=endpoint_embed
)
vectordb = Chroma(persist_directory=persist_directory, embedding_function=embeddings)
docs = vectordb.similarity_search_with_score(question)

Kami mengambil potongan yang paling cocok dan menggunakannya sebagai konteks untuk model pembuatan teks untuk menjawab pertanyaan:

cohere_client = Client(endpoint_name=endpoint_qa)
context = docs[high_score_idx][0].page_content.replace("n", "")
qa_prompt = f'Context={context}nQuestion={question}nAnswer='
response = cohere_client.generate(prompt=qa_prompt, max_tokens=512, temperature=0.25, return_likelihoods='GENERATION')
answer = response.generations[0].text.strip().replace('n', '')

Pengalaman pengguna

Meskipun LLM mewakili ilmu data tingkat lanjut, sebagian besar kasus penggunaan LLM pada akhirnya melibatkan interaksi dengan pengguna non-teknis. Aplikasi web contoh kami menangani kasus penggunaan interaktif di mana pengguna bisnis dapat mengunggah dan memproses dokumen PDF baru.

Diagram berikut menunjukkan antarmuka pengguna. Pengguna memulai dengan mengunggah PDF. Setelah dokumen disimpan di Amazon S3, pengguna dapat memulai pekerjaan ekstraksi teks. Setelah selesai, pengguna dapat menjalankan tugas peringkasan atau mengajukan pertanyaan. Antarmuka pengguna memaparkan beberapa opsi lanjutan seperti ukuran potongan dan tumpang tindih potongan, yang akan berguna bagi pengguna tingkat lanjut yang menguji aplikasi pada dokumen baru.

User interface

Langkah berikutnya

LLM memberikan kemampuan pengambilan informasi baru yang signifikan. Pengguna bisnis membutuhkan akses mudah ke kemampuan tersebut. Ada dua arah untuk pekerjaan masa depan untuk dipertimbangkan:

  • Manfaatkan LLM canggih yang sudah tersedia di model dasar Jumpstart. Dengan hanya beberapa baris kode, aplikasi sampel kami dapat menerapkan dan menggunakan LLM lanjutan dari AI21 dan Cohere untuk peringkasan dan pembuatan teks.
  • Jadikan kemampuan ini dapat diakses oleh pengguna non-teknis. Prasyarat untuk memproses dokumen PDF adalah mengekstraksi teks dari dokumen, dan tugas meringkas mungkin memerlukan waktu beberapa menit untuk dijalankan. Itu membutuhkan antarmuka pengguna yang sederhana dengan kemampuan pemrosesan backend asinkron, yang mudah dirancang menggunakan layanan cloud-native seperti Lambda dan Fargate.

Kami juga mencatat bahwa dokumen PDF adalah informasi semi-terstruktur. Isyarat penting seperti judul bagian sulit diidentifikasi secara terprogram, karena bergantung pada ukuran font dan indikator visual lainnya. Mengidentifikasi struktur informasi yang mendasari membantu LLM memproses data dengan lebih akurat, setidaknya sampai LLM dapat menangani masukan dengan panjang tak terbatas.

Kesimpulan

Dalam postingan ini, kami menunjukkan cara membuat aplikasi web interaktif yang memungkinkan pengguna bisnis mengunggah dan memproses dokumen PDF untuk ringkasan dan menjawab pertanyaan. Kami melihat bagaimana memanfaatkan model dasar Jumpstart untuk mengakses LLM tingkat lanjut, dan menggunakan pemisahan teks dan pengambilan teknik augmented generation untuk memproses dokumen yang lebih panjang dan membuatnya tersedia sebagai informasi untuk LLM.

Saat ini, tidak ada alasan untuk tidak membuat kemampuan canggih ini tersedia bagi pengguna Anda. Kami mendorong Anda untuk mulai menggunakan Model pondasi jumpstart hari ini.


Tentang Penulis

Gambar penulisRandy De Fauw adalah Senior Principal Solutions Architect di AWS. Dia memegang gelar MSEE dari University of Michigan, tempat dia mengerjakan visi komputer untuk kendaraan otonom. Dia juga memegang gelar MBA dari Colorado State University. Randy telah memegang berbagai posisi di bidang teknologi, mulai dari rekayasa perangkat lunak hingga manajemen produk. Memasuki ruang Big Data pada tahun 2013 dan terus menjelajahi area tersebut. Dia aktif mengerjakan proyek di ruang ML dan telah mempresentasikan di berbagai konferensi termasuk Strata dan GlueCon.

Stempel Waktu:

Lebih dari Pembelajaran Mesin AWS