İnsanlar ihtiyaçlarını yüksek sesle söyler. Biri şehir sohbetine "eylülde Antalya'ya taşınıyorum, gerçekten dönüş yapan bir emlakçı var mı?" diye yazar, arkadaşlarından üç yanıt alır ve arama motoruna hiç gitmez. Talep yaklaşık dört saat var olur ve kaybolur.
Bunu yakalamak, bir müşteri adayı üretme problemi olmadan önce bir sınıflandırma problemidir. Bu yazı, bunu çözmek için kurduğumuz pipeline hakkında: nerede kırılıyor, maliyeti ne ve çalışıp çalışmadığını nasıl ölçüyoruz.
Asıl problem: "buna ihtiyacım var" ile "ben bunu yapıyorum"
Naif kurgu şudur: "emlakla ilgili mesajları bul". Bu kurgu işe yaramaz bir ürün üretir, çünkü bir konu hakkındaki her sohbette, o konu hakkında konuşanların çoğu onu satar.
Aynı kelime dağarcığını içeren dört mesaj:
| Mesaj | Karar |
|---|---|
| "Konyaaltı'nda 2+1 arıyorum, bütçe 30 bin, uzun dönem" | talep |
| "Konyaaltı'nda 2+1 dairelerimiz var, 28 binden başlıyor, DM" | tedarikçi |
| "Konyaaltı'nda 2+1 kiralar şu an ne durumda acaba?" | araştırma, henüz talep değil |
| "2+1 Konyaaltı 30 bin 🔥🔥 link profilde" | reklam |
Anahtar kelime filtresi dördünü de aynı puanlar. Bir şeyi istemek ile onu sunmak arasındaki farkı temsil edecek hiçbir yapısı yoktur, çünkü bu fark cümlenin isimlerinde değil, niyetinde yaşar. Anahtar kelime bildirimi gönderen botların bir çöp hortumu gibi hissettirmesinin tek sebebi budur: kullanıcının sorduğundan başka bir soruyu yanıtlıyorlar.
Yani iş arama işi değil. İş, bir talebin ne olduğuna dair nişe özel bir tanıma göre sınıflandırma — ve o tanım ürünün kendisidir.
Ön filtre neden bir optimizasyon değildir
Birkaç yüz aktif herkese açık kaynak düşünün. Bu günde on binlerce mesaj demektir ve eklediğiniz her kaynakla doğrusal olarak büyür.
Bunların tamamını bir dil modeline göndermek, bu kategorideki çoğu projenin sessizce öldüğü yerdir. Aritmetik acımasızdır: maliyetiniz toplam sohbet hacmiyle ölçeklenir, geliriniz ise teslim edilen müşteri adaylarıyla — ve teslim edilen adaylar toplam hacmin çok küçük bir kısmıdır. Kapsamı artırmak için kaynak eklemek ekonomiyi iyileştirmez, kötüleştirir. Bir modelin günde on bin kez "gm" okuması için para ödüyorsunuz.
Bu yüzden ilk aşama, herhangi bir model çağrısından önce trafiğin %90–95'ini eleyen ucuz ve deterministik bir filtredir: uzunluk ve yapı kontrolleri, niş sözlüğüne göre sözcüksel benzerlik, bariz çöp kalıpları (çıkartmalar, tek emoji, selamlaşmalar, iletilmiş reklamlar) ve ucuz yazar tarafı sinyalleri. Embedding yok, model yok, ağ çağrısı yok.
Kesin kurallardan daha önemli iki özellik var:
- Kesinlik için değil, kapsam için ayarlanmalı. Ön filtrenin tek görevi gerçek talepleri atmamaktır. Sınırdaki çöpü geçirmek kuruşun küçük bir kesri kadar maliyetlidir; gerçek bir talebi atmak ise tüm ürüne mal olur ve bunun olduğunu asla öğrenemezsiniz.
- Bağımsız olarak ölçülebilmeli. Neyi elediğini kaydedin ve elenenlerden düzenli olarak elle örnek okuyun. Kimsenin öngörmediği bir mesaj biçimini — yeni bir argo, sesli mesaj dökümlerine geçen bir sohbet — sessizce yemeye başlayan bir ön filtre, akışın aşağısındaki tüm metriklerde görünmezdir. Aday sayınız düşer ve tüm panolar sistemin sağlıklı olduğunu söyler.
Hayatta kalan %5–10'u model gerçekten okur.
Sınıflandırıcı: niş bir prompt değil, bir yapılandırmadır
Hayatta kalan mesajlar bir dil modeline niş tanımıyla birlikte gider: sözlük, bu işte neyin talep sayıldığının açık ifadesi ve yakın görünüp talep olmayan karşı örnekler.
Önemli tasarım kararı şudur: bu tanım bir yapılandırma dosyasıdır — kod değil, her müşteri için ayrı yazılmış özel bir prompt da değil. Yeni bir pazar — yeni bir şehir, yeni bir hizmet, yeni bir dil — yeni bir yapılandırmadır: sözlük, müşteri adayı tanımı, kaynak listesi. Hiçbir şey yeniden derlenmez, hiçbir şey yeniden dağıtılmaz.
Bu kısıtı, özel bir durumu kodda halletmek daha hızlı olacakken bile savunmaya değer; iki nedenle. Ticari olarak, "benim işimde çalışır mı?" sorusunun dürüst cevabıdır: tanımı yazabiliyorsak çalışır ve yazıp yazamayacağımızı size bir gün içinde söyleriz. Operasyonel olarak, kalite düştüğünde ayarladığınız şey bir sınıflandırıcının içine gömülü bir mantık dalı değil, diff'te görebileceğiniz bir metin dosyası olur.
Model bir karar ve bir gerekçe döndürür. Gerekçeyi saklamak süs değildir: kötü bir aday şikâyeti geldiğinde, gerekçe satırı saniyeler içinde neyin yanlış olduğunu söyler — tanım mı, fazla geniş sözlük mü, yoksa model mesajı yanlış mı okudu. Bu üç arızanın üç farklı çözümü vardır.
Yinelenenler, düzenlemeler ve kaliteyi belirleyen sıkıcı kısımlar
"Model evet dedi" ile "bir insan bunu gördü" arasında, gösterişsiz görünen ve yanlış yapıldığında hasarın çoğunu veren bir katman vardır.
Metne göre değil, mesaja göre yinelenenleri ayıklayın. (chat_id, message_id) üzerinde benzersiz bir indeks tabandır, tavan değil. İnsanlar ayrıca aynı talebi beş sohbete birden atar: bu tek bir kişidir ve onu beş kez teslim etmek kısa bir akışı spam'e çevirir.
Düzenlemeler bu kuralın istisnasıdır. Çok yaygın bir kalıp: biri "villa arıyorum" yazar, yirmi saniye sonra bütçeyi ve tarihleri ekler. Düzenlemeler yineleme anahtarınız tarafından engelleniyorsa, işe yaramaz ilk sürümü teslim eder ve iyi olanı hiç görmezsiniz. Kısa bir pencere içinde düzenlenen mesajlar yeniden sınıflandırılır ve sonuç ikinci bir kayıt oluşturmak yerine mevcut kararı günceller.
Gecikmenin sebebi çoğunlukla model değildir. Bir dakikanın altı hedefi okuma bağlantısı, kuyruk, model çağrısı ve teslimat arasında harcanır; hedef kaçtığında suçlu genellikle büyük bir sohbetteki ani yığılmanın tıkadığı kuyruktur, çıkarım değil. Aşamaları ayrı ayrı ölçün, yoksa yanlış şeyi optimize edersiniz.
Nasıl ölçüyoruz: kesinlik, kapsam ve geri bildirim döngüsü
İki sayı ve birbirlerinin aleyhine çalışıyorlar.
Kesinlik (precision) — teslim edilen adayların kaçı gerçek talepti. Hedefimiz %80. Bu sayıyı, ne anlama geldiğiyle birlikte açıkça söylüyoruz: yaklaşık her beştebiri ıskalayacak. %99 iddia eden bir satıcı ya çok dar bir nişte çalışıyordur ya da sizinle aynı şeyi saymıyordur.
Kapsam (recall) — kaynaklarda beliren gerçek taleplerin kaçını teslim ettik. Hedef %70 ve ölçmesi çok daha zor bir sayı, çünkü kaçırdığınız talepleri bilmeyi gerektiriyor. Tek dürüst yöntem elle çalışmaktır: bir sohbet alın, bir günlük akışı gözle okuyun ve pipeline'ın teslim ettikleriyle karşılaştırın. Ölçeklenmez — tam da bu yüzden iyi niyete bırakılmak yerine takvime konmalıdır.
Geri bildirim döngüsü en ucuz kısımdır ve ilk kurulmaya değer olandır. Teslim edilen her adayın tek dokunuşluk bir reddi vardır ve her ret etiketlenmiş bir örnektir — nişi bizden daha iyi bilen kişinin ürettiği, elde edilebilecek en kaliteli değerlendirme verisi. Bu retler sözlük değişikliklerini, tanım düzenlemelerini ve kaynak kapatmalarını besler.
Sonuncusu sanılandan önemlidir: iki hafta boyunca tek bir doğrulanmış aday üretmeyen bir kaynak nötr değildir, boşuna kapasite harcar. Kaynakların keşfedilme mekanizması kadar kapatılma ölçütlerine de ihtiyacı vardır.
Pipeline'ın yapmadıkları
Sonradan keşfedilmek yerine baştan söylenen üç sınır:
- Müşteri, satış veya gelir vaat etmez. Talep teslim eder. Sonrasında olan — bir saat içinde yanıt verip vermediğiniz ve o ilk mesajı nasıl yazdığınız — anlaşmanın gerçekten kazanıldığı yerdir ve hiçbir sınıflandırıcı oraya dokunmaz.
- Yalnızca herkese açık süper grupları okur — binlerce diğer üyenin gördüğünün aynısını. Bir insanı içeri almayacak kapalı sohbetler hiçbir şekilde okunmaz.
- Asla yazmaz. Hesaplar yalnızca okur: toplu mesaj yok, otomatik yanıt yok, kimsenin adına hiçbir şey yayınlanmaz. Saklanan şey talebin kendisi ve ona giden bağlantıdır, bir kişinin sohbet geçmişi değil.
Gizlilik sorusu bu kategorideki en yaygın itirazdır ve bir paragraf dolusu lafı dolandırmak yerine doğrudan cevabı hak eder: herkese açık bir süper grup halka açıktır, orada sessiz bir okuyucu olmak diğer her üyenin yaptığı şeydir ve doğru saklama birimi kişi değil, taleptir.
Bu prodüksiyonda çalışıyor
Yukarıdaki pipeline Sonar'dır: nişiniz için herkese açık Telegram sohbetlerini izler ve biri sattığınız şeyi istediğini yazdıktan sonra bir dakika içinde size haber verir. Yalnızca okuma, 30 gün ücretsiz deneme ve nişinizde bunu anlamlı kılacak kadar hacim olup olmadığına dair baştan net bir cevap.
Benzer bir şey kuruyorsanız, yukarıdakilerin sıkıştırılmış hâli: modelin önüne ucuz bir filtre koyun, nişi bir yapılandırma hâline getirin, acı verse de kapsamı elle ölçün ve kesinlik sayınızı açıkça söyleyin.