Vertex AI PaLM API kullanarak metin özetleme yöntemleri

1. Giriş

Metin özetleme, önemli bilgileri korurken metin dokümanının daha kısa bir sürümünü oluşturma işlemidir. Bu işlem, uzun bir belgeye hızlıca göz atmak, makalenin genel durumunu öğrenmek veya kullanıcılarla özet paylaşmak için kullanılabilir. Kısa bir paragrafı özetlemek önemsiz bir görev olsa da büyük bir dokümanı özetlemek istediğinizde üstesinden gelmeniz gereken bazı zorluklar vardır. Örneğin, birden fazla sayfalı bir PDF dosyası.

Bu codelab'de, büyük dokümanları özetlemek için üretken modelleri nasıl kullanabileceğinizi öğreneceksiniz.

Oluşturacaklarınız

Bu eğitimde, aşağıdaki yöntemler üzerinde çalışarak metinden bilgileri özetlemek için üretken modelleri nasıl kullanacağınızı öğreneceksiniz:

  • Dolgu Malzemesi
  • MapReduce
  • Örtüşen Yığınlarla MapReduce
  • Kayan Özetle MapReduce ile

2. Şartlar

  • Chrome veya Firefox gibi bir tarayıcı
  • Faturalandırmanın etkin olduğu bir Google Cloud projesi

3. Maliyetler

Bu eğitim, Google Cloud'un faturalandırılabilir bileşeni olarak Vertex AI Generative AI Studio'yu kullanmaktadır.

Vertex AI fiyatlandırması ve Üretken yapay zeka fiyatlandırması hakkında bilgi edinin ve tahmini kullanımınıza dayalı bir maliyet tahmini oluşturmak için Fiyat Hesaplayıcı'yı kullanın.

4. Başlarken

  1. Aşağıdaki komutu kullanarak Vertex AI SDK'yı, diğer paketleri ve bağımlılıklarını yükleyin:
!pip install google-cloud-aiplatform PyPDF2 ratelimit backoff --upgrade --quiet --user
  • Colab için çekirdeği yeniden başlatmak üzere aşağıdaki hücrenin açıklamasını iptal edin.
# # Automatically restart kernel after installs so that your environment can access the new packages
 import IPython

 app = IPython.Application.instance()
 app.kernel.do_shutdown(True)
  • Vertex AI Workbench'te üstteki düğmeyi kullanarak terminali yeniden başlatabilirsiniz.
  1. Aşağıdaki yöntemlerden birini kullanarak not defteri ortamınızın kimliğini doğrulayın:
  • Colab için aşağıdaki hücrenin yorumunu kaldırın.
from google.colab import auth
auth.authenticate_user()
  1. Vertex AI SDK'yı başlatmak için kitaplıkları içe aktarın.
  • Colab için aşağıdaki hücrenin açıklamasını kaldırarak kitaplıkları içe aktarın.
import vertexai

 PROJECT_ID = "[your-project-id]"  # @param {type:"string"}
 vertexai.init(project=PROJECT_ID, location="us-central1")
import re
import urllib
import warnings
from pathlib import Path

import backoff
import pandas as pd
import PyPDF2
import ratelimit
from google.api_core import exceptions
from tqdm import tqdm
from vertexai.language_models import TextGenerationModel

warnings.filterwarnings("ignore")
  1. text-bison@001 adlı önceden eğitilmiş metin oluşturma modelini yüklediğiniz modelleri içe aktarın.
generation_model = TextGenerationModel.from_pretrained("text-bison@001")
  1. Görevleri özetlemek için PDF dosyası indireceğiniz veri dosyaları hazırlama.
# Define a folder to store the files
data_folder = "data"
Path(data_folder).mkdir(parents=True, exist_ok=True)

# Define a pdf link to download and place to store the download file
pdf_url = "https://services.google.com/fh/files/misc/practitioners_guide_to_mlops_whitepaper.pdf"
pdf_file = Path(data_folder, pdf_url.split("/")[-1])

# Download the file using `urllib` library
urllib.request.urlretrieve(pdf_url, pdf_file)

İndirilen PDF dosyasının birkaç sayfasını nasıl görüntüleyebileceğiniz aşağıda açıklanmıştır.

# Read the PDF file and create a list of pages
reader = PyPDF2.PdfReader(pdf_file)
pages = reader.pages

# Print three pages from the pdf
for i in range(3):
    text = pages[i].extract_text().strip()

print(f"Page {i}: {text} \n\n")

#text contains only the text from page 2

5. Doldurma yöntemi

Bir dil modeline veri iletmenin en basit yolu verileri bunu isteme bağlam olarak ekler. Bu bilgiler, istemdeki tüm alakalı bilgileri ve modelin işlemesini istediğiniz sırayla içerir.

  1. PDF dosyasının yalnızca 2. sayfasındaki metni çıkarın.
# Entry string that contains the extacted text from page 2
print(f"There are {len(text)} characters in the second page of the pdf")
  1. Not defterinde daha sonra kullanılabilecek bir istem şablonu oluşturun.
prompt_template = """
    Write a concise summary of the following text.
    Return your response in bullet points which covers the key points of the text.

    ```{text}```

    BULLET POINT SUMMARY:
"""
  1. Çıkarılan metinleri özetlemek için API üzerinden LLM'yi kullanın. LLM'lerde şu anda giriş metni sınırı olduğunu ve büyük bir giriş metninin doldurulmasının kabul edilmeyeceğini unutmayın. Kotalar ve sınırlar hakkında daha fazla bilgi edinmek için Kotalar ve sınırlar bölümüne bakın.

Aşağıdaki kod bir istisnaya neden olur.

# Define the prompt using the prompt template
prompt = prompt_template.format(text=text)

# Use the model to summarize the text using the prompt
summary = generation_model.predict(prompt=prompt, max_output_tokens=1024).text

print(summary)
  1. Model şu hata mesajıyla yanıt verdi: Çıkarılan metin, üretken modelin işleyemeyeceği kadar uzun olduğundan 400 İstek geçersiz bir bağımsız değişken içeriyor.

Bu sorunu önlemek için ayıklanan metnin bir kısmını (ör. ilk 30.000 kelime) girmeniz gerekir.

# Define the prompt using the prompt template
prompt = prompt_template.format(text=text[:30000])

# Use the model to summarize the text using the prompt
summary = generation_model.predict(prompt=prompt, max_output_tokens=1024)

summary

Ekran görüntüsünde aşağıdaki sonucu göreceksiniz:

710efedd9f6dbc6d.png

Özet

Tam metin model için çok büyük olsa da, modeli kullanarak PDF'nin bir bölümündeki en önemli bilgileri kısa ve öz, madde işaretli bir liste oluşturmayı başardınız.

Avantajları

  • Bu yöntem, modele yalnızca tek bir çağrı yapar.
  • Metin özetlenirken model aynı anda tüm verilere erişebilir. Bu sayede sonuç daha iyi olur.

Dezavantajları

  • Çoğu modelin bir bağlam uzunluğu vardır. Büyük dokümanlar (veya birçok doküman) söz konusu olduğunda, bağlam uzunluğundan daha büyük bir istemle sonuçlandığı için bu yöntem işe yaramaz.
  • Bu yöntem yalnızca küçük verilerde işe yarar ve büyük dokümanlar için uygun değildir.

6. MapReduce yöntemi

Büyük dokümanlar için bu sorunu çözme sorununu çözmek üzere MapReduce yöntemini kullanacağız. Bu yöntemde önce büyük veriler daha küçük parçalara bölünür, ardından her parçada bir istem çalıştırılır. Özetleme görevlerinde, ilk istemin çıktısı o parçanın bir özetidir. İlk çıkışların tümü oluşturulduktan sonra bunları birleştirmek için farklı bir istem çalıştırılır.

Bu yöntemin uygulama ayrıntıları için bu gitHub bağlantısına bakın.

7. Tebrikler

Tebrikler! Uzun bir dokümanı başarıyla özetlediniz. Uzun belgeleri özetlemek için 2 yöntemi, avantajları ve dezavantajları öğrendiniz. Büyük dokümanları özetlemek için birkaç yöntem vardır. Şu iki yöntemi daha göz önünde bulundurun: çakışan parçalarla MapReduce ve başka bir codelab'de periyodik özetle MapReduce.

Uzun bir dokümanı özetlemek zor olabilir. Bu yaklaşım belgenin ana noktalarını belirlemenizi, bilgileri sentezlemenizi ve kısa, tutarlı bir şekilde sunmanızı gerektirir. Belge karmaşık veya teknikse bu işlem zor olabilir. Ayrıca, uzun bir dokümanı özetlemek, özetin doğru ve eksiksiz olduğundan emin olmak için metni dikkatli bir şekilde okuyup analiz etmeniz gerektiğinden zaman alabilir.

Bu yöntemler LLM'lerle etkileşim kurmanıza ve uzun dokümanları esnek bir şekilde özetlemenize olanak tanısa da bazen önyükleme veya önceden oluşturulmuş yöntemleri kullanarak süreci hızlandırmak isteyebilirsiniz. İşte LangChain gibi kitaplıklar burada kullanılır. Vertex AI'da LangChain desteği hakkında daha fazla bilgi edinin.