Küçük bağlam pencerelerinde istemci tarafı özetleme özelliğini ölçeklendirme

Yayınlanma tarihi: 12 Mart 2025, Son güncelleme tarihi: 28 Mayıs 2025

Açıklayıcı Web Uzantılar Chrome Durumu Amaç
MDN Chrome 138 Chrome 138 Görünüm Kargoya verme amacı

Özetleyici API, çeşitli uzunluk ve biçimlerdeki bilgilerin özetlerini oluşturmanıza yardımcı olur. Uzun veya karmaşık metinleri kısa ve öz bir şekilde açıklamak için Chrome'daki temel modelle ya da tarayıcılara yerleştirilmiş diğer dil modelleriyle birlikte kullanın.

İstemci tarafında gerçekleştirildiğinde verilerle yerel olarak çalışabilirsiniz. Bu sayede hassas verileri güvende tutabilir ve geniş ölçekte kullanılabilirlik sağlayabilirsiniz. Ancak bağlam penceresi, sunucu tarafı modellerdekinden çok daha küçüktür. Bu nedenle, çok büyük belgelerin özetlenmesi zor olabilir. Bu sorunu çözmek için özetlerin özeti tekniğini kullanabilirsiniz.

Özetlerin özeti nedir?

Özetlerin özeti tekniğini kullanmak için giriş içeriğini önemli noktalarda bölün ve her bölümü ayrı ayrı özetleyin. Her bölümden gelen çıktıları birleştirebilir, ardından bu birleştirilmiş metni tek bir nihai özet halinde özetleyebilirsiniz.

Örneğin, üç bölüme ayrılmış bir dokümanın her bölümü özetlenir. Bu üç özet bir araya getirilip son sonuç için tekrar özetlenir.

İçeriğinizi dikkatli bir şekilde bölme

Büyük bir metni nasıl böleceğinizi düşünmeniz önemlidir. Çünkü farklı stratejiler, LLM'lerde farklı çıktılara yol açabilir. İdeal olarak, konu değiştiğinde (ör. makalenin yeni bir bölümü veya paragraf) metin bölünmelidir. Metni kelime veya cümlenin ortasında bölmekten kaçınmak önemlidir. Bu nedenle, tek bölme yönergesi olarak karakter sayısını kullanamazsınız.

Bunu yapmanın birçok yolu vardır. Aşağıdaki örnekte, performans ve çıkış kalitesi arasında denge sağlayan LangChain.js'deki Recursive Text Splitter (Yinelemeli Metin Bölücü) kullanılmıştır. Bu yöntem çoğu iş yükü için uygundur.

Yeni bir örnek oluştururken iki temel parametre vardır:

  • Her bölümde izin verilen maksimum karakter sayısı chunkSize'dır.
  • chunkOverlap, iki ardışık bölme arasında çakışacak karakter sayısıdır. Bu, her parçanın önceki parçadaki bağlamın bir kısmını içermesini sağlar.

Her parçayı içeren bir dizeler dizisi döndürmek için metni splitText() ile bölün.

Çoğu büyük dil modelinin bağlam penceresi karakter sayısı yerine jeton sayısı olarak ifade edilir. Ortalama olarak bir jeton 4 karakter içerir. Örneğimizde chunkSize 3.000 karakterden oluşuyor ve bu yaklaşık 750 jetona karşılık geliyor.

jeton kullanılabilirliğini belirleyin.

Jetonun kullanılabilirliğini belirleme

Bir giriş için kaç jetonun kullanılabileceğini belirlemek üzere measureInputUsage() yöntemini ve inputQuota özelliğini kullanın. Bu durumda, özetleyici tüm metni işlemek için kaç kez çalıştırılacağını bilemeyeceğinizden uygulama sınırsızdır.

Her bölüm için özet oluşturma

İçeriğin nasıl bölüneceğini ayarladıktan sonra, Özetleyici API'si ile her bölüm için özet oluşturabilirsiniz.

create() işleviyle özetleyicinin bir örneğini oluşturun. Mümkün olduğunca fazla bağlamı korumak için format parametresini plain-text, type parametresini tldr ve length parametresini long olarak ayarladık.

Ardından, RecursiveCharacterTextSplitter ile oluşturulan her bölüm için özeti oluşturun ve sonuçları yeni bir dizede birleştirin. Her bölümün özetini net bir şekilde belirlemek için özetleri yeni bir satırla ayırdık.

Bu yeni satır, döngü yalnızca bir kez yürütüldüğünde önemli olmasa da her özetin son özetin jeton değerine nasıl katkıda bulunduğunu belirlemek için kullanışlıdır. Bu çözüm çoğu durumda orta ve uzun içeriklerde işe yarar.

Özetlerin yinelemeli özeti

Çok uzun metinlerde birleştirilmiş özetin uzunluğu, mevcut bağlam penceresinden daha büyük olabilir. Bu durumda özetleme işlemi başarısız olur. Bu sorunu gidermek için özetleri yinelemeli olarak özetleyebilirsiniz.

Özetlerinizin özeti hâlâ çok uzunsa işlemi tekrarlayabilirsiniz. Teorik olarak, uygun uzunlukta bir yanıt alana kadar bu işlemi süresiz olarak tekrarlayabilirsiniz.

RecursiveCharacterTextSplitter tarafından oluşturulan ilk ayrışmaları toplamaya devam ediyoruz. Ardından, recursiveSummarizer() işlevinde, birleştirilmiş bölümlerin karakter uzunluğuna göre özetleme sürecini döngüye alıyoruz. Özetlerin karakter uzunluğu 3000'yı aşarsa fullSummaries olarak birleştirilir. Sınıra ulaşılmazsa özet partialSummaries olarak kaydedilir.

Tüm özetler oluşturulduktan sonra son kısmi özetler tam özete eklenir. fullSummaries içinde yalnızca 1 özet varsa ek yineleme gerekmez. İşlev, nihai bir özet döndürür. Birden fazla özet varsa işlev, kısmi özetleri tekrarlar ve özetlemeye devam eder.

Bu çözümü, 17.560 kelime içeren 110.030 karakterlik Internet Relay Chat (IRC) RFC ile test ettik. Summarizer API, aşağıdaki özeti sağladı:

Internet Relay Chat (IRC), kısa mesajlar kullanarak internette gerçek zamanlı iletişim kurmanın bir yoludur. Kanallarda sohbet edebilir veya özel mesajlar gönderebilirsiniz. Ayrıca, sohbeti kontrol etmek ve sunucuyla etkileşim kurmak için komutları kullanabilirsiniz. İnternetteki bir sohbet odası gibidir. Burada mesaj yazabilir ve diğer kullanıcıların mesajlarını anında görebilirsiniz.

Bu oldukça etkili bir yöntemdir. Ayrıca, yalnızca 309 karakterden oluşuyor.

Sınırlamalar

Özetlerin özeti tekniği, istemci boyutundaki bir modelin bağlam penceresinde çalışmanıza yardımcı olur. İstemci tarafı yapay zekanın birçok avantajı olsa da aşağıdakilerle karşılaşabilirsiniz:

  • Daha az doğru özetler: Özyineleme ile özetleme sürecinin tekrarı sonsuza kadar sürebilir ve her özet, orijinal metinden daha uzak olur. Bu, modelin yararlı olamayacak kadar yüzeysel bir nihai özet oluşturabileceği anlamına gelir.
  • Daha yavaş performans: Her özetin oluşturulması zaman alır. Yine, daha uzun metinlerde sonsuz sayıda özet oluşturulabileceğinden bu yaklaşımın tamamlanması birkaç dakika sürebilir.

Özetleyici demosunu inceleyebilir ve tam kaynak kodunu görüntüleyebilirsiniz.

Görüşlerinizi paylaşın

Summarizer API ile farklı uzunluklarda giriş metni, farklı bölme boyutları ve farklı örtüşme uzunluklarıyla özetlerin özeti tekniğini kullanmayı deneyin.