Kategori: Genel
Semantic Product Matching Nedir? Ürün Eşleştirme Algoritması Nasıl Çalışır
Leksik eşleştirmeden embedding’e, retrieval-rerank’ten hard negative sampling’e — Senkrondata ürün başlıklarını adım adım nasıl eşleştirir?
E-ticaret ve hızlı market/pazaryeri verisiyle çalışan her ekip er ya da geç aynı problemle karşılaşır: elinizde bir ürün başlığı var, karşınızda binlerce (bazen milyonlarca) başka ürün başlığından oluşan bir küme var — ve bu ikisi arasında hangisinin aynı ürün olduğunu bulmanız gerekiyor. Barkod her zaman yardımcı olmaz; çoğu zaman elinizde yalnızca metin vardır.
Bu yazıda, Senkrondata'da ürün başlıklarını yalnızca metin üzerinden eşleştirmek için kullandığımız yöntemi paylaşıyoruz: önce neden basit yaklaşımların yetmediğini, sonra hangi tekniklerle bunu çözdüğümüzü anlatıyoruz.
Amacımız şu: elimizdeki bir ürün başlığı p için, S = {t₁, t₂, …, tₙ} şeklindeki sıralı olmayan bir küme içinde ona karşılık gelen başlığı (varsa) bulmak. Bu küme kendi kataloğumuz olabilir (mükerrer ürünleri bulmak için) ya da bir rakibin kataloğu olabilir (asortiman/fiyat karşılaştırması için).
Yöntem 1 — Leksik Eşleştirme
İlk akla gelen ve en ucuz yöntem, iki başlığı kelime kümesine (bag of words) ayırıp örtüşen kelime sayısını toplam kelime sayısına oranlamaktır — buna Intersection over Union (IoU) denir. Bu, TF-IDF ağırlıklandırması ve BM25 benzerlik skoruyla daha da geliştirilebilir.
Bu yöntemin iki büyük avantajı var:
- Ters indeksle hız: bir ters indeks (inverted index) kullanarak eşleşen kelimeleri çok hızlı arayabilirsiniz — büyük bir küme S için bile.
- Hazır araçlar: Lucene gibi kütüphaneler bu yöntemi uygulamayı kolaylaştırır.
Ama leksik eşleştirmenin temel bir varsayımı var: p ve t içindeki kelimelerin eşleşmesi için birebir aynı olmaları gerekir. Bu varsayım gerçek dünyada sık sık kırılır:
| Fark türü | Başlık A | Başlık B |
|---|---|---|
| Birim gösterimi | Coca-Cola 1 Lt | Coca-Cola 1000ml |
| Yazım hatası | Ülker Çokokrem 350 gr | Ulker Coko Krem 350g |
| Eksik kelime | Nivea Men Deep Traş Köpüğü 200 ml | Nivea Deep Traş Köpüğü 200 ml |
Bu tablo, leksik eşleştirmenin neden tek başına yetmediğini gösteriyor: aynı ürünü tarif eden farklı ifadeleri tanıyabilecek, dile daha yakın bir yönteme ihtiyaç var.
Yöntem 2 — Semantic Encoder (Embedding)
Bir Semantic Encoder, metni yüzeysel kelime örtüşmesinin ötesine geçip anlamını yakalayan bir vektöre (embedding) çevirir. İki metin aynı ya da çok benzer bir anlam taşıyorsa, embedding'leri arasındaki mesafe (kosinüs ya da öklid) küçük olur.
Biz bunun için, Siamese Network mimarisiyle fine-tune edilmiş, transformer tabanlı bir dil modeline dayanan bir SBERT (Sentence-BERT) tarzı encoder kullanıyoruz. Fine-tuning, kendi iç veri setimizle yapılıyor: "eşleşen" / "eşleşmeyen" olarak etiketlenmiş ürün başlığı çiftlerinden oluşan bir veri seti.
Semantic encoder'ın gücü, farklı kelimelerle yazılmış aynı anlamı yakalayabilmesidir — "hızlı USB şarj cihazı" ile "quick charging USB adaptörü" kelime olarak neredeyse hiç örtüşmez ama anlamca çok yakındır ve iyi bir encoder bunu görür.
Ama bu yöntemin de iki sınırı var:
- Bağlamsal sınır: her başlık bağımsız kodlandığı için, model iki metin arasındaki ince, karşılıklı ilişkiyi (örneğin bir birim/paket farkını) kaçırabilir.
- Anahtar kelime kaybı: embedding'in sınırlı boyutu yüzünden encoder, yüksek seviyeli anlama odaklanır — marka adı gibi eşleştirme için kritik bazı anahtar kelimeler bu temsilde kaybolabilir.
Yöntem 3 — Retrieval-Rerank
Bilgi getirimi (information retrieval) alanında yerleşik bir yöntem olan Retrieval-Rerank, hız ile isabeti dengelemek için iki ayrı aşama kullanır: önce hızlı ama daha az kesin bir getirim (retrieval) aşaması, ardından daha yavaş ama çok daha isabetli bir yeniden sıralama (rerank) aşaması. İlk aşamanın amacı, ikinci aşama daha maliyetli olduğu için, olası eşleşme alanını daraltmaktır.
Birinci Aşama: Retrieval
Retrieval aşamasının amacı, hızlıca bir k adaylık bir liste üretmektir. Bunun için 1. ya da 2. yöntemi kullanabilirsiniz. Biz bu aşamada leksik ve semantik yöntemleri birlikte çalıştırıyoruz: leksik yöntem tam kelime örtüşmelerini ucuza ve hızlıca yakalarken, semantik yöntem farklı yazılmış ama aynı anlama gelen başlıkları da havuza katıyor — böylece hiçbiri tek başına kaçırdığı eşleşmeyi diğeri telafi ediyor.
İkinci Aşama: Rerank
Rerank aşamasında transformer tabanlı bir cross-encoder kullanıyoruz. Sadece-encoder bir modelin aksine — ki o girdileri bağımsız işler ve her biri için ayrı embedding üretir — cross-encoder, girdi çiftini birlikte inceler. Bu ortak işleme, metinler arasındaki etkileşimi yakalamayı sağlar ve belirgin biçimde daha yüksek doğruluk verir.
Bu özellik, özellikle ince nüansları ya da bağlamsal benzerlikleri ayırt etmeyi gerektiren görevlerde değerlidir. Ama cross-encoder'ın yüksek hesaplama maliyeti tam da bu yüzden onu ikinci aşamaya saklamamızın nedeni — birinci aşamanın daralttığı küçük aday kümesinde çalıştırıyoruz, milyonlarca çiftte değil.
İki aşamayı birleştirdiğinizde, retrieval-rerank operasyonel verimlilik ile doğruluk arasında bir denge kurar: birinci aşama devasa veri havuzunu verimli biçimde filtrelerken, ikinci aşama daraltılmış kümeye çok daha titiz bir analiz uygular — cross-encoder'ı tüm veri setine uygulamanın getireceği aşırı hesaplama maliyetine girmeden yüksek kaliteli nihai sonuçlar elde edilir.
Hard Negative Sampling
Hard negative sampling, modelin doğru sınıflandırmakta zorlandığı — bu yüzden "hard" (zor) denen — negatif örneklerin seçimi etrafında döner. Bu teknik, modellerin gerçekten benzer olanla olmayanı ayırt etmeyi öğrenmesini sağlayarak performansı artırmak için kullanılır.
Zor negatif örnekleri bulmak için birincil araç olarak encoder tabanlı yaklaşımı kullanıyoruz: etikete göre eşleşmeyen ama embedding'leri şaşırtıcı derecede yakın çıkan — belirlenmiş bir benzerlik eşiğini aşan — çiftleri buluyoruz. Bu çiftler "zor negatif" sayılır çünkü doğrudan bir eşleşme olmamalarına rağmen embedding'leri yüksek bir benzerlik önerir, bu da modelin onları doğru sınıflandırmasını zorlaştırır. Bu zor negatif örnekleri belirledikten sonra, cross-encoder modellerimizi bunlarla yeniden fine-tune ediyoruz.
Sonuç
Ürün başlıklarına odaklanan yöntemimiz, ilk aşamada leksik eşleştirmeyi kullanıyor, ardından verimli ve isabetli bir eşleştirme için retrieval-rerank yaklaşımını devreye sokuyor. Hard negative sampling ile güçlendirilen bu kapsamlı strateji, benzer ürünleri etkin biçimde tespit etmemizi, asortiman farklarını yönetmemizi ve müşterilerimiz için çeşitli, doğru bir ürün kataloğu sürdürmemizi sağlıyor.
Ürün eşleştirme motorunuzun bu yaklaşımla kurulmasını istiyorsanız, Senkrondata ekibiyle konuşun.
Emre
Fiyat Zekâsı ve Veri Mühendisliği
Emre, rakip fiyat verisinin arkasındaki mekanizmayı yazıyor: ürün eşleştirme, normalizasyon, ölçekte veri toplama ve üzerine kurulan analitik katman.
Emre imzalı diğer yazılarBizimle İletişime Geçin
Detaylı bir demo veya genel bakış oturumu için e-posta adresinizi bırakın, sizinle hemen iletişime geçelim.
