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

Yayınlanma tarihi: 12 Mart 2025

Açıklayıcı Web Uzantılar Chrome Durumu Amaç
GitHub Bayrak arkasında Origin deneme sürümü Bayrak arkasında Origin deneme sürümü Görünüm Deneme yapma niyeti

Summarizer API, çeşitli uzunluk ve biçimlerde bilgi özetleri oluşturmanıza yardımcı olur. Müşteri tarafında çıkarım yapmak ve karmaşık veya uzun metinleri kısaca açıklamak için Chrome'da Gemini Nano ile kullanın.

İşlem istemci tarafında yapıldığında verilerle yerel olarak çalışabilirsiniz. Bu sayede hassas verileri güvende tutabilir ve geniş ölçekte kullanılabilirlik sunabilirsiniz. Ancak bağlam penceresi, sunucu tarafı modellere kıyasla çok daha küçüktür. Bu nedenle, çok büyük belgeleri özetlemek 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 ardından her bölümü bağımsız olarak özetleyin. Her bölümden elde edilen çıkışları birleştirebilir, ardından bu birleştirilmiş metni tek bir nihai özet halinde toplayabilirsiniz.

Örneğin, bir belge üç bölüme ayrılmışsa her bölüm özetlenir. Bu üç özet bir araya getirilir ve nihai sonuç için tekrar özetlenir.

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

Gemini Nano veya diğer LLM'ler tarafından büyük bir metnin farklı konumlarda bölünmesi, tamamen farklı sonuçlara yol açabileceğinden, metni nasıl böleceğinizi dikkatlice düşünmeniz önemlidir. İdeal olarak, metinler konu değişikliği olduğunda (ör. makalenin yeni bir bölümü) veya bir paragrafta bölünmelidir. Metni bir kelimenin veya cümlenin ortasında bölmekten kaçınmanız önemlidir. Yani, tek bölme kuralınız olarak bir karakter sayısı belirleyemezsiniz.

Bunu manuel çaba harcamadan birçok şekilde yapabilirsiniz. Aşağıdaki örnekte, performans ile çıkış kalitesini dengeleyen LangChain.js'deki Yinelenen Metin Bölme işlevini kullandık. Bu, çoğu iş yükü için işe yarayacaktır.

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

  • chunkSize, her bölme için izin verilen maksimum karakter sayısıdır.
  • chunkOverlap, art arda iki bölme arasında çakışma olacak karakter miktarıdır. Bu sayede her bir parçada önceki parçanın bağlamının bir kısmı bulunur.

Her bir parçayı içeren bir dize 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. Bir jeton ortalama 4 karakter içerir. Bu nedenle, bir giriş tarafından kullanılan jeton sayısını tahmin etmek için karakter sayısını 4'e bölebilirsiniz.

Örneğimizde chunkSize 3.000 karakter uzunluğundadır ve yaklaşık 750 jetondan oluşur.

Her bölme için özet oluşturma

İçeriğin nasıl bölüneceğini ayarladıktan sonra Summarizer API ile her bölümün özetini oluşturabilirsiniz.

create() işlevini kullanarak özetleyicinin bir örneğini oluşturun. Olabildiğince fazla bağlam bilgisini korumak için format parametresini plain-text, type parametresini tl;dr ve length parametresini long olarak ayarladık.

Ardından, RecursiveCharacterTextSplitter tarafından oluşturulan her bölme için özeti oluşturun ve sonuçları yeni bir dize halinde birleştirin. Her bölümün özetini net bir şekilde tanımlamak için her özeti yeni bir satırla ayırdık.

Bu yeni satır, bu döngüyü yalnızca bir kez çalıştırırken önemli olmasa da her özetin nihai özet için jeton değerine nasıl eklendiğini belirlemek için yararlıdır. Bu çözüm, çoğu durumda orta ve uzun içerikler için işe yarayacaktır.

Özetlerin yinelenen özeti

Çok uzun bir metniniz varsa birleştirilmiş özetin uzunluğu, mevcut bağlam penceresinden daha büyük olabilir. Bu da özetleme işleminin başarısız olmasına neden olur. Bu sorunu gidermek için özetlerin özetini yinelemeli olarak alabilirsiniz.

Özet özetiniz hâlâ çok uzunsa işlemi tekrarlayabilirsiniz. Teorik olarak, uygun bir uzunluk elde edene kadar işlemi süresiz olarak tekrarlayabilirsiniz.

RecursiveCharacterTextSplitter tarafından oluşturulan ilk bölmelerin toplanması devam eder. Ardından, recursiveSummarizer() işlevinde, birleştirilmiş bölmelerin karakter uzunluğuna göre özetleme işlemini döngüye alırız. Özetlerin karakter uzunluğu 3000'ü aşarsa fullSummaries olarak birleştirilir. Sınıra ulaşılmazsa özet partialSummaries olarak kaydedilir.

Tüm özetler oluşturulduktan sonra nihai 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 özetlerin özetlenmesi işlemini tekrarlayarak devam eder.

Bu çözümü, 17.560 kelime içeren 110.030 karakterden oluşan 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ı olarak iletişim kurmanın bir yoludur. Kanallarda sohbet edebilir veya özel mesaj gönderebilir, sohbeti kontrol etmek ve sunucuyla etkileşimde bulunmak için komutları kullanabilirsiniz. İnternetteki bir sohbet odası gibidir. Yazdığınız mesajlar ve diğer kullanıcıların mesajları anında gösterilir.

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

Sınırlamalar

Özetlerin özeti tekniği, müşteri boyutunda 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: Yinelemeli özetleme işleminde özetleme işleminin tekrarı sonsuz olabilir 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 de, daha uzun metinlerde sonsuz sayıda özet oluşturma olasılığı olduğundan bu yaklaşımın tamamlanması birkaç dakika sürebilir.

Özetleyici demomuz mevcuttur ve tam kaynak kodunu görüntüleyebilirsiniz.

Görüşlerinizi paylaşın

Kullanım alanlarınız için en iyi sonucun ne olduğunu belirlemek üzere, farklı giriş metni uzunlukları, farklı bölme boyutları ve farklı çakışma uzunlukları ile özetlerin özeti tekniğini kullanmayı deneyin.

Kaynak denemesine katılarak Summarizer API'yi hemen test etmeye başlayın ve geri bildirimlerinizi paylaşın. Geri bildiriminiz, bu API'nin gelecekteki sürümlerini ve tüm yerleşik yapay zeka API'lerini nasıl geliştirip uygulayacağımızı doğrudan etkileyebilir.