1 puan yazan GN⁺ 2023-09-04 | 1 yorum | WhatsApp'ta paylaş
  • 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-0301 sü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ı Ct ve doğru yanıt rt kullanılır
    • Amaç, geçmiş oturumlar ve mevcut bağlama dayanarak ilgili ve yüksek tutarlılığa sahip yanıt üretmektir
  • 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
  • text-davinci-003 modelinde BLEU skoru yaklaşık +3% iyileşti
  • Önerilen yöntem, GPT-3.5-Turbo-16k, LongLoRA-8k gibi uzun bağlam pencereli LLM'leri ve LLM-BM25, LLM-DPR gibi retrieval-augmented LLM'leri tamamlayıcı nitelikte
  • Açık kaynak kodu qingyue2014/Rsum adresinde sunuluyor

1 yorum

 
GN⁺ 2023-09-04
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

    • Hacky görünüyor olabilir ama en başta sohbet tipi LLM kavramının kendisi de öyle sayılabilir
      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
    • Bunu kafanın içinde bu yöntemi kullanmak gibi düşünebilirsin. Şimdiye kadarki tartışmayı yinelemeli olarak özetlersen belleğin daha iyi olabilir
      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
    • İlginçtir ki, özetleri sürekli yeniden üretme yöntemi insan beyninin, en azından uzun süreli belleğin çalıştığı düşünülen biçimden çok da farklı değil
      https://news.northwestern.edu/stories/2012/09/your-memory-is...
    • Bugün kullandığımız bilişimin neredeyse tamamı da yeterince soyutlanıp hata işleme eklenmiş olduğu için hack gibi görünmüyor; özünde çoğu zaman hacky yapılardan ibaret
    • Yoğun embedding uzayının tam anlam koruması sağlayabileceğini neden sezgisel olarak düşündüğünü merak ediyorum
      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

    • Prompt sonucunu parse ederken sorun yaşayıp yaşamadığınızı merak ediyorum
      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ı

    • Doğru. Bu, çok fazla kod gerektirmeyen son derece basit bir fikir; derleyip yayımlamak zor olmamalı
      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ı

    • Bağlam penceresi büyük olsa bile bu teknik faydalı
      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

    • Doğru. Güçlenmeyi ciddi ölçüde hafifletemezseniz, bilinen materyal için parça boyutlarını elle ayarlasanız bile bağlamın “ölmekte olan bir düşünceye” tutunması şaşırtıcı derecede Alzheimer'a benziyor
    • Üstelik bu yaklaşımın ölçeklenmediği de kanıtlanabilir
      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
    • “Kötü halüsinasyon deneyimi”ni ya da takıntılı kalıpları akla getiriyor
      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
    • Alakasız görünenleri unutmasını, yani özette atlamasını söylemek yeterli
  • 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

    • En son sayfaya bakarsanız prompt var
    • “Kod ve betikler daha sonra yayımlanacak” da denmiş
      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
    • Basit bir konuyu bilimsel makale formatına sokup çok daha karmaşık hale getirmişler gibi
      Ö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

  • 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