- Uzun süreli konuşma odaklı sohbet botları, uzun bağlam pencerelerine sahip olsalar bile geçmiş etkileşimlerin özünü yanıtlara istikrarlı biçimde yansıtmakta zorlanır; bu çalışma, özyinelemeli özet belleği ile tutarlılık sorununu azaltma yöntemini ele alıyor
- Temel süreç, kısa bir diyalogdan ilk belleği oluşturduktan sonra her yeni oturum eklendiğinde önceki bellek ile yeni diyalogu birlikte özetleyerek güncel belleği yenileme yaklaşımına dayanıyor
- Arama tabanlı yöntemler, gerekli geçmiş ifadeleri doğru biçimde bulabilen bir getiriciye bağımlıdır; mevcut bellek tabanlı yöntemlerde ise güncellenmemiş eski bilgiler yanıt kalitesini bozabilir
- Llama, ChatGLM, OpenAI GPT-3.5-Turbo gibi açık ve kapalı LLM'lerle yapılan deneylerde hem otomatik değerlendirme hem insan değerlendirmesi, mevcut yaklaşımlara kıyasla uzun diyalog tutarlılığının daha yüksek olduğunu gösterdi
- Bu yöntem, uzun bağlam pencereleri veya retrieval-augmented LLM'lerle birlikte de kullanılabildiği için, toplam diyalog uzunluğunu körü körüne artırmadan çok uzun konuşma bağlamlarını ele almak için pratik bir seçenek olabilir
Uzun bağlam tek başına uzun süreli diyalog hafızası için yeterli değil
- GPT-4, ChatGPT gibi LLM'ler farklı konularda dinamik ve bağlama uygun diyaloglar kurabiliyor; ancak uzun süreli diyaloglarda geçmiş bilgileri kaçırıp tutarsız yanıtlar üretebiliyor
- Uzun bağlam pencereleri, tüm konuşma geçmişini girdi olarak işleyebilmeyi sağlasa da, geçmiş etkileşimleri anlayıp temel bilgileri yanıta entegre etme yeteneği hâlâ sınırlı
- Geçmiş konuşma hafızasının gerekli olduğu tipik örnekler kişisel AI yoldaşları ve sağlık destek hizmetleridir
- Kişisel AI yoldaşlarının ilişki kurabilmek için önceki konuşmaları hatırlaması gerekir
- Sağlık destek hizmetlerinin tanı sonuçları sunabilmesi için hastanın tüm başvuru geçmişini dikkate alması gerekir
- Multi-Session Chat Dataset örneğinde, yaklaşık 20 tur sonra kullanıcı geçmişteki “bestecilik” konusunu yeniden gündeme getirdiğinde, ChatGPT
gpt-turbo-3.5-0301sürümü kendisini “geleneksel anlamda bir işi olmayan bir AI dil modeli” olarak tanımlayarak önceki personayla uyuşmayan bir yanıt üretti
Arama tabanlı ve bellek tabanlı yaklaşımların sınırları
- Uzun süreli diyalog yeteneğini güçlendiren başlıca yaklaşımlar arama tabanlı yöntemler ve bellek tabanlı yöntemler olarak ikiye ayrılır
- Arama tabanlı yöntemler, geçmiş ifadeleri bir depoda saklar ve mevcut diyalogla en ilgili geçmişi bir getiriciyle bulup yanıt üretiminde kullanır
- Buradaki sınırlama, mevcut diyalog için gereken anlamı eksiksiz yakalayabilen ideal bir getirici elde etmenin zor olmasıdır
- Bellek tabanlı yöntemler, ayrı bir eğitimli model veya güçlü bir LLM kullanarak geçmiş diyalogları özetler ve temel bilgileri saklar
- Yinelemeli güncelleme mekanizması yetersizse, korunan eski bilgiler yanıt kalitesine doğrudan zarar verebilir
- MemoChat, konuşmacının konu başlıklarına göre geçmiş diyalog geçmişini yeniden yapılandırır ve üretim sırasında yapılandırılmış bellekten arama yapması için LLM'i prompt'lar
- MemoryBank, önce her diyalog oturumunun özetini çıkarıp ardından bunları küresel bir özete sıkıştıran bir bellek mekanizması önerir
- Saklanan bellek tamamen sabit kalırsa, devam eden diyalogla tutarlılığı garanti etmek zorlaşır
Özyinelemeli olarak güncellenen bellek üretimi
- Önerilen yöntem, LLM'in kendisinin özet üretip geçmiş bağlamı sürekli güncelleyip gözden geçirerek konuşmacının gerçek zamanlı bilgilerini saklamasını sağlayan basit bir eklenti yaklaşımıdır
- Süreç üç aşamadan oluşur
- Üretici LLM, kısa bir diyalog bağlamını girdi olarak alıp ilk özeti üretir
- Sonrasında önceki bellek ile devam eden diyalog birleştirilerek yeni özet ya da bellek sürekli güncellenir
- Sohbet botu, mevcut diyaloğa yanıt verirken ana referans olarak en güncel belleği kullanır
- Üretilen özetler, tüm diyalogdan çok daha kısa olduğu için maksimum girdi uzunluğunu pahalı biçimde artırmadan çok sayıda oturuma yayılan çok uzun bağlamlar ele alınabilir
- Uzun süreli diyalog, birden çok oturumdan oluşan Multi-Session Dialogue olarak tanımlanır
- Geçmiş oturum kümesi
S = {S1, S2, ..., SN}, mevcut oturumun diyalog bağlamıCtve doğru yanıtrtkullanılır - Amaç, geçmiş oturumlar ve mevcut bağlama dayanarak ilgili ve yüksek tutarlılığa sahip yanıt üretmektir
- Geçmiş oturum kümesi
- Bellek
Mi, i'inci oturumun sonunda kullanılabilir olan bellektir; tüm süreç, her belleğin yalnızca mevcut oturuma ve önceki belleğe bağlı olduğu sıralı bir süreç olarak tanımlanır
Bellek yinelemesi ve yanıt üretimi
- Önerilen yaklaşım, herhangi bir LLM'e iki görev verir
- Bellek yinelemesi: Uzun süreli diyalog akışına göre temel bilgileri özyinelemeli olarak özetler
- Bellek tabanlı yanıt üretimi: En güncel bellek ile mevcut diyaloğu birleştirerek uygun ve tutarlı yanıt üretir
- Bellek yinelemesi, sohbet botunun kullanacağı tutarlı ve güncel bir özeti elde etme sürecidir
- Bazı önceki çalışmalar belleği güncellemek için özete replace, append, delete gibi “sert işlemler” uygular
- Bu tür yöntemler, işlem etiketleri verilmiş yüksek kaliteli diyaloglara bağımlıdır, özetin anlamsal tutarlılığını bozabilir ve uzun vadeli yönetim için uygun değildir
- Önerilen yaklaşım, diyalog bağlamı ile önceki belleği birlikte vererek LLM'in belleği veya özeti özyinelemeli olarak üretmesini sağlar
- Önceki özetin kullanılması, modelin mevcut diyalog bağlamını daha iyi sindirmesine ve daha yüksek kaliteli bellek üretmesine yardımcı olabilir
- Örnekte, ilk oturumun ardından ilk bellek oluşturuluyor; ikinci oturumdan sonra ise önceki belleğe “botun yakın zamanda 24 saat açık yeni bir spor salonuna kaydolduğu” şeklindeki yeni kişilik bilgisi entegre ediliyor
Deney sonuçları ve uygulanabilirlik
- Deneyler, Llama, ChatGLM, OpenAI GPT-3.5-Turbo gibi güncel açık ve kapalı LLM'lerle yürütüldü
- Uzun süreli diyalog performansı hem otomatik değerlendirmede hem insan değerlendirmesinde mevcut popüler yaklaşımlardan daha yüksek çıktı
- Açık belleğin uzun süreli diyalogda kullanılmasının etkisi ve önerilen yöntemle üretilen belleğin LLM'ler tarafından daha kolay işlenebildiği doğrulandı
- In-context learning (ICL) ile birleştirildiğinde yanıt kalitesi daha da artırılabiliyor
- LLM'e birden fazla
(diyalog, bellek, doğru yanıt)biçiminde örnek sunuluyor - Bu da LLM'in üretilen belleği daha esnek kullanmasını sağlıyor
- LLM'e birden fazla
text-davinci-003modelinde BLEU skoru yaklaşık +3% iyileşti- Önerilen yöntem,
GPT-3.5-Turbo-16k,LongLoRA-8kgibi uzun bağlam pencereli LLM'leri veLLM-BM25,LLM-DPRgibi retrieval-augmented LLM'leri tamamlayıcı nitelikte - Açık kaynak kodu qingyue2014/Rsum adresinde sunuluyor
1 yorum
Hacker News yorumları
“Metin uzayında” bellek biriktirme yöntemlerinin tamamı bana epey hacky geliyor
Modelin anlamını bütünüyle korumak için, sürekli özetleri yeniden üreten ekleme bir prosedür yerine bunu yoğun embedding uzayında saklamak daha doğal görünüyor
Ayrıca modelin belleği tanıyıp kullanacak şekilde eğitilmesi gerekir; mümkünse en baştan böyle bir kurulumda öğrenmesi daha iyi olur diye düşünüyorum
Sonuçta yapılan şey, verilen konuşmaya bir sonraki kelimeyi daha eklemesini istemek; bir noktada bitiş token’ı ürettiğinde de uygulama kontrolü tekrar kullanıcıya devrediyor
Gizil uzay ile metin uzayı sandığımız kadar uzak değil bence. LLM’ler epey hantal ama konuşmada çok yetenekli; kod yazma da buna benzer şekilde iyi yaptıkları bir şey, ama matematik gibi gerçek soyut düşünme gerektiren alanlarda dağılıyorlar
Bu tür metin uzayı hack’leri pratikte oldukça iyi işliyor; “adım adım düşün” gibi prompt’ların yaygınlaşmasının nedeni de bu
LoRA, bahsettiğin yöne daha yakın ve çok az veriye çok fazla anlayış sıkıştırmakta harika. Ancak tek bir konuşma için ağırlıkları ayarlamak henüz gerçekçi değil; bu yüzden o kullanım için metin uzayını araştırıyoruz
Kafanın içinde bir şeyi özetlemek “hacky” gelebilir ama gerçek belleğin çalışma biçiminin büyük bir kısmının buna benzediğini düşünüyorum
https://news.northwestern.edu/stories/2012/09/your-memory-is...
Benim anladığım kadarıyla embedding, doğası gereği kayıplı sıkıştırmaya daha yakın. Metin özeti söz konusuysa en azından ajan, o özetin özgün bilgiyi doğru temsil edip etmediğini doğrulayabilir
CodeRabbit’te PR’ların artımlı incelenmesi ve kod değişikliği bağlamındaki sohbetler için zaten buna benzer bir yöntem kullanıyoruz
Botun gerçekte olduğundan çok daha fazla bağlama sahipmiş gibi görünmesini sağlıyor ve büyük PR’lara (100’den fazla dosya) kadar AI kod incelemesini ölçeklendirmek için kullandığımız birkaç püf noktasından biri
Her commit için dosya bazında diff’i özetliyoruz, sonra özetlerin özetini çıkarıyoruz ve PR’a commit eklendikçe bunu artımlı olarak güncelliyoruz. Bu özetlerin özeti PR yorumunun içinde gizlenerek saklanıyor ve her dosyayı incelerken ya da kullanıcı sorularını yanıtlarken kullanılıyor
Kodun bir kısmı açık kaynak; yinelemeli özetleme için kullandığımız ilgili prompt burada: https://github.com/coderabbitai/ai-pr-reviewer/blob/main/src...
[0]: coderabbit.ai
Eğer yaşıyorsanız, serbest metin çıktısını parse etmek yerine function calling denediniz mi, onu da merak ediyorum
“Kod ve script’ler daha sonra yayımlanacak” aşamasındaysa, artık herhangi bir iddiaya inanmak zor
Doğru da olabilir, saçmalık da olabilir; ama deneyi düşük maliyetle yeniden üretmenin bir yolu yoksa, bu tür makaleleri yazarların CV’lerine koymak için yazdığı işler olarak görüyorum
LLM alanında “kod daha sonra yayımlanacak” denen makaleleri 6 aydan uzun süredir bekliyorum ama gerçekten yayımlanacaklarına dair bir işaret yok. Hatta bazı makaleler park edilmiş domaine giden bozuk bağlantılar koyacak kadar yüzsüz
Artık topluluğun bu yayımlanmayan kod pratiğini doğru dürüst fark etme zamanı
Eskiden benzer bir fikri API panelinde sadece prompt’ları elle kurcalayarak denemiştim; potansiyeli vardı ama API maliyetine değiyor gibi görünmemişti. Muhtemelen vektör embedding yaklaşımı çok daha iyi olabilir
Kişisel bir örnek olarak, şirkette bir saat süren, bazen de tüm gün devam eden çevrimdışı paneller olan binlerce “Briefings” var
Her briefing’i başarıyla özetledik; dağınık transkriptler beş paragraflık özetlere güzelce dönüştü
Daha ilgili olan kısım, her briefing’i konu ve alt konulara 1:N sınıflandırmış olmamız. Konular altında onlarca briefing, alt konular altında ise bir düzine kadar briefing toplandı; ilgili özetlerin alt kümelerini yeniden özetleyerek geniş çaplı test yaptık ve LLM ile çok iyi sonuçlar aldık
Başta bunun işe yarayacağından şüpheliydim ama çok iyi çalıştı. Yeterince büyük bir bağlam penceresi olsaydı bunu yapmazdık, ama neyse ki sorun olmadı
Sorunu MapReduce gibi parçalara ayırmanın, her şeyi 32k’lık dev bir bağlam penceresine tıkıştırıp tek seferde çözdürmekten çok daha iyi olduğunu düşünüyorum
Birkaç ay önce açık kaynak bir modelle özyinelemeli özetleme belleği yapmayı denedim; safça uygulanınca belirli bir konuya sonsuza dek takılıp kalması sık görülüyordu
Çünkü bazı parçalar her özetleme turundan sağ çıkıyordu
Herhangi bir metin bloğunu daha küçük bir metin bloğuna indirgerken hiç bilgi kaybetmemek imkânsızdır
Bu mümkün olsaydı sonsuz sıkıştırma mümkün olurdu; herhangi bir veri kümesini 1 bite indirip sonra kusursuz biçimde geri yükleyebilmemiz gerekirdi. Ama bu yapılamaz
Bir konuşmayı özete sıkıştırdığınızda bazı bilgiler mutlaka kaybolur. Ne kadar ayar yaparsanız, katlarsanız ya da zekice yöntemler kullanırsanız kullanın, temelde bilgi kaybı oluşur
Ayrıca bu süreç özyinelemeli olduğundan bir noktada özetler kümesini yeniden özetlersiniz ve o sırada da bir miktar bilgi kaybolur
Bu yüzden önemsiz durumlarda yardımcı olabilir, ama özyinelemeli özetleri prompt'a koymak epey aptalca görünüyor ve gerçekten yararlı bir iş yaptırıldığında neredeyse kesinlikle düzgün çalışmayacak gibi. Özyinelemeli özetler çok kullanılmadığında kaybedilen bilgi az olduğu için çalışıyor gibi görünür; ama fiilen kullanınca sınırları muhtemelen hızla ortaya çıkar
Yalnızca travma veya gelişim süreciyle bile insan zihninin ne kadar kolay raydan çıkabildiğini düşününce, insan benzeri AI fikrinin ne kadar umut yüklü olduğunu hissediyorum
Makale biraz hayal kırıklığı. Tekniğe dair ayrıntı neredeyse yok; sadece kendi kullandıkları metodolojiyle iyi sonuçlar aldıklarını gösteren tablolar var
Bunun günümüz biliminde yaygın olduğunu biliyorum ama LLM'lerle çalışan bir geliştirici açısından makalenin değeri neredeyse yok. Elbette yazarların akademideki itibarı biraz artacaktır; amacın da büyük olasılıkla bu olduğu görünüyor
Böyle birkaç makaleye birlikte imza atsam mı diye düşünüyorum. Özgeçmişimin en üstüne “ML researcher” unvanını yazabilmek için kaç tane yazmam gerekir merak ediyorum
Örneklere ve prompt'lara çok daha fazla zaman ayırmaları gerekirdi
Birkaç hafta önce de benzer bir şey yazmıştım; insanlar özetleme kısmını fazla basitleştiriyor: https://news.ycombinator.com/item?id=37117515
Uzun vadeli belleğin değeri kullanım senaryosuna göre nüanslı biçimde değişiyor
Bir ev asistanı yapıyorsanız NER ile adları belirlemeniz, o kişiye mesaj gönderirken nasıl bir hitap tarzını sevdiğini, yerleri ve ulaşım biçimlerini anlamanız gerekir
Müşteri destek botu yapıyorsanız uzun konuşmalara dönüşen sorguları veya ani sepet terkine yol açan sorguları belirlemeniz gerekir
Genel düzeyde bir özetlemeyle gösterişli demolar yapmak mümkün, ama şu anda gerçekten yararlı bir ürün geliştirmek için bir adım daha ileri gitmek gerekiyor
Burada neyin yeni olduğundan emin değilim
LLM tabanlı sohbet geçmişi bellek özetlemesi, zaten birçok LLM framework'ünde uygulanmış iyi bilinen bir teknik. Makaledeki gibi her mesajda özetleme yapmak büyük bir performans darboğazı yaratır ve sohbet döngüsüne ciddi gecikme ekler
Birçok uygulama sabit boyutlu bir tampon kullanır ve tampondan dışarı itilen eski bellek kümelerini kademeli olarak özetler. İdeal olarak bu iş de sohbet döngüsünün dışında yapılır
Açık kaynak uzun vadeli bellek deposu Zep'in yazarlarından biriyim ve biz özetlemeyi bu şekilde uyguladık
0: https://github.com/getzep/zep
https://github.com/paul-gauthier/aider/blob/main/aider/histo...
https://www.deeplearning.ai/short-courses/langchain-for-llm-...
Makale ya da tartışmadan biraz sapıyor ama kısa bellek gerçekten de gerçek bir sınırlama
Ancak GPT-4'ün yeteneklerine yönelik eleştirilerin çoğunun insanlara da aynen, hatta daha güçlü biçimde uygulanabileceğini düşünüyorum
Ters Turing testi durumunda, yaşayan herhangi birinin beni kendisinin GPT-4 olduğuna ikna edebileceğini sanmıyorum. GPT-4'ün hızlı ve düzenli yanıtları tek başına bile insan yeteneklerini aşıyor
Hatta insanlardan oluşan bir ekip her soruya 60 dakika ayırabilse bile ilginç sorulara GPT-4'ün verdiği yanıtların gerisinde kalabilir. Eğlenceli bir yarışma olurdu
Makaledeki uygulama aslında bellek metnini prompt'un bir parçası olarak eklemekten ibaret
Neden bağlam penceresi token'larını kullanmayan bir depolama ve arama sistemi kullanmadıklarını merak ediyorum. Örneğin saklama sırasında, yani kullanıcı prompt'u geldiğinde, verileri etiketlerle otomatik sınıflandırabilir; arama sırasında da LLM'in yanıtlamadan önce tahmin ettiği etiketlerle filtreleyen bir sorgu çalıştırabilirsiniz
Sabit kodlanmış etiket adları veya üslup gibi birkaç başlangıç kuralı bile oldukça iyi sonuç verebilir gibi geliyor