1. Giriş
Metin özetleme, önemli bilgileri koruyarak bir metin belgesinin daha kısa bir versiyonunu oluşturma işlemidir. Bu işlem, uzun bir dokümanı hızlıca gözden geçirmek, bir makalenin özünü anlamak veya kullanıcılarla bir özeti paylaşmak için kullanılabilir. Kısa bir paragrafı özetlemek kolay bir iş olmasa da büyük bir dokümanı özetlemek istiyorsanız üstesinden gelmeniz gereken birkaç zorluk vardır. Örneğin, birden fazla sayfası olan bir PDF dosyası.
Bu codelab'de, büyük belgeleri özetlemek için üretken modelleri nasıl kullanabileceğinizi öğreneceksiniz.
Ne oluşturacaksınız?
Bu eğitimde, aşağıdaki yöntemleri uygulayarak metinlerdeki bilgileri özetlemek için üretken modelleri nasıl kullanacağınızı öğreneceksiniz:
- Dolgu
- MapReduce
- Çakışan Parçalarla MapReduce
- MapReduce with Rolling Summary
2. Şartlar
3. Maliyetler
Bu eğitici içerikte, Google Cloud'un faturalandırılabilir bileşeni olarak Vertex AI Üretken Yapay Zeka Stüdyosu kullanılır.
Vertex AI fiyatlandırması ve üretken yapay zeka fiyatlandırması hakkında bilgi edinin. Ayrıca, planlanan kullanımınıza göre maliyet tahmini oluşturmak için fiyat hesaplayıcıyı kullanın.
4. Başlarken
- 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ücredeki yorum işaretini kaldırın.
# # 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 için terminali üstteki düğmeyi kullanarak yeniden başlatabilirsiniz.
- Not defteri ortamınızın kimliğini aşağıdaki yöntemlerden birini kullanarak doğrulayın:
- Colab için aşağıdaki hücredeki yorum işaretini kaldırın.
from google.colab import auth
auth.authenticate_user()
- Vertex AI Workbench için kurulum talimatlarına bakın.
- Vertex AI SDK'sını başlatmak için kitaplıkları içe aktarın.
- Colab için aşağıdaki hücrenin yorumunu 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")
- 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")
- Özetleme görevleri için PDF dosyası indireceğiniz veri dosyaları hazırlayın.
# 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
Verileri bir dil modeline iletmenin en basit yolu, bunları bağlam olarak isteme "doldurmaktır". Bu, istemdeki tüm alakalı bilgileri ve modelin işlemesini istediğiniz sırayı içerir.
- PDF dosyasında yalnızca 2. sayfadaki metni ayıklayı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")
- 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:
"""
- Ayıklanan metinleri özetlemek için API aracılığıyla LLM'yi kullanın. LLM'lerin şu anda giriş metni sınırı olduğunu ve büyük bir giriş metninin kabul edilmeyebileceğ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 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)
- Model, 400 İstek geçersiz bir bağımsız değişken içeriyor hata mesajıyla yanıt verdi. Bunun nedeni, çıkarılan metnin üretken modelin işleyebileceğinden çok uzun olmasıdır.
Bu sorunu önlemek için çıkarılan metnin bir bölümü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örmeniz gerekir:

Özet
Tam metin model için çok büyük olsa da modelin yardımıyla PDF'nin bir bölümündeki en önemli bilgileri içeren kısa ve madde işaretli bir liste oluşturmayı başardınız.
Avantajlar
- Bu yöntem, modele yalnızca tek bir çağrı yapar.
- Model, metni özetlerken tüm verilere aynı anda erişebilir. Bu sayede sonuç daha iyi olur.
Dezavantajlar
- Çoğu modelin bağlam uzunluğu vardır. Bu yöntem, büyük dokümanlarda (veya çok sayıda dokümanda) bağlam uzunluğundan daha büyük bir istem oluşturduğu için çalışmaz.
- Bu yöntem yalnızca daha küçük veri parçalarında çalışır ve büyük dokümanlar için uygun değildir.
6. MapReduce yöntemi
Büyük dokümanlarda bu sorunu çözmek için MapReduce yöntemini inceleyeceğiz. 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ı ilgili parçanın özetidir. Tüm ilk çıktılar oluşturulduktan sonra bunları birleştirmek için farklı bir istem çalıştırılır.
Bu yöntemin uygulanmasıyla ilgili ayrıntılar için bu GitHub bağlantısını inceleyin.
7. Tebrikler
Tebrikler! Uzun bir dokümanı başarıyla özetlediniz. Uzun dokümanları özetlemek için 2 yöntemin yanı sıra bu yöntemlerin avantajlarını ve dezavantajlarını öğrendiniz. Büyük dokümanları özetlemenin birkaç yöntemi vardır. Başka bir codelab'de, çakışan parçalarla MapReduce ve kayan özetle MapReduce olmak üzere 2 yöntem daha ele alınmaktadır.
Uzun bir belgeyi özetlemek zor olabilir. Bu görevde, belgenin ana noktalarını belirlemeniz, bilgileri sentezlemeniz ve bunları kısa ve tutarlı bir şekilde sunmanız gerekir. Doküman karmaşık veya teknikse bu işlem zorlaşabilir. Ayrıca, uzun bir dokümanı özetlemek de zaman alabilir. Özetin doğru ve eksiksiz olduğundan emin olmak için metni dikkatlice okuyup analiz etmeniz gerekir.
Bu yöntemler, LLM'lerle etkileşim kurmanıza ve uzun dokümanları esnek bir şekilde özetlemenize olanak tanırken bazen de bootstrapping veya önceden oluşturulmuş yöntemleri kullanarak süreci hızlandırmak isteyebilirsiniz. Bu noktada LangChain gibi kitaplıklar devreye girer. Vertex AI'da LangChain desteği hakkında daha fazla bilgi edinin.