Makine öğrenimi arama motoru tasarımına nasıl dahil edilir?


15

Şu anda Apache Lucene tabanlı küçük bir şirket içi arama motoru inşa ediyorum. Amacı basittir - bazı anahtar kelimelere dayanarak, şirketimizde dahili olarak yazılmış bazı makaleler önerecektir. Temel bir metrik olarak oldukça standart bir TF-IDF puanlaması kullanıyorum ve üzerine kendi puanlama mekanizmamı oluşturdum. Tüm bunlar, sıralamanın dağılmış olduğu bazı köşe vakaları dışında mükemmel çalışıyor gibi görünüyor.

Yapmayı planladığım şey, arama sonuçları sayfasına küçük bir Alakalı / Alakalı olmayan bağlantı eklemektir, böylece kullanıcılar bu sonucun ilk etapta yer alması gerekip gerekmediğine dair algılarına bağlı olarak bunlardan birini tıklayabilirler.

Benim fikrim

  1. Bunlara Alakalı / Alakasız etiket olarak davranın ve bir eğitim verisi oluşturun.
  2. Bir sınıflandırıcıyı (SVM gibi) eğitmek için bu verileri kullanın
  3. Bu modeli arama motoruna dahil edin, yani her yeni sonuç sınıflandırıcıdan geçecek ve alakalı olup olmadığı konusunda bir etiket atanacaktır.

Bu yaklaşım benim için sezgisel görünüyor, ancak pratikte işe yarayıp yaramayacağından emin değilim. İki özel sorum var:

  1. Hangi tüm özellikleri çıkarmalıyım?
  2. Makine öğrenimi bileşenini arama motoruna entegre etmenin daha iyi bir yolu var mı? Son hedefim, hem iş mantığına hem de kullanıcı geri bildirimlerine dayalı olarak sıralama işlevini "öğrenmek".

4
Bir keresinde böyle bir şey yaptım ve kullanıcılar bundan nefret ediyordu, bu yüzden kapattım. Sorun kullanıcı davranışıydı. Kullanıcılar terimlerini değiştirerek arama sonuçlarındaki zayıf noktalara adapte oldular ve ardından bu terimleri tekrar kullanmaya devam edeceklerdi. Sistem, öğelerin sıralamasını ayarlayarak yanıt verdi ve tercih edilen terimler farklı sonuçlar üretmeye başladı. Bu, kullanıcıları sardı. Öğrenme daha akıllı olduğu anlamına gelmez;)
Reactgular

İşte elasticsearch ve angularjs kullanan bir uygulama olduğunu - - Ayrıca gerekmez açıklamalar içeren machinelearningblogs.com/2016/12/12/...
Vivek Kalyanarangan

Yanıtlar:


15

(1) Hangi tüm özellikleri çıkarmalıyım?

İlk olarak, belgeleri sınıflandırmadığınızı anlayın. Çiftleri sınıflandırıyorsunuz (belge, sorgu), bu yüzden ne kadar iyi eşleştiklerini ifade eden özellikleri çıkarmalısınız.

Sıralamayı öğrenmede standart yaklaşım , sorguyu çeşitli arama motoru kurulumlarına (örneğin, tf-idf, BM-25, vb.) Karşı çalıştırmak ve daha sonra benzerlik puanları hakkında bir model eğitmektir, ancak küçük, alana özgü bir SE için, gibi özelliklere sahip olabilirsiniz

  • Her terim için, terimin hem sorguda hem de belgede olup olmadığını gösteren bir boole. Ya da belki bir boolean değil, belgede gerçekten meydana gelen sorgu terimlerinin tf-idf ağırlıkları.
  • Jaccard veya Tanimoto gibi çeşitli örtüşme metrikleri .

(2) Makine öğrenimi bileşenini arama motoruna entegre etmenin daha iyi bir yolu var mı? Son hedefim, hem iş mantığına hem de kullanıcı geri bildirimlerine dayalı olarak sıralama işlevini "öğrenmek".

Bu çok geniş bir sorudur ve cevap ne kadar çaba harcamak istediğinize bağlıdır. Akla gelen ilk gelişme, sınıflandırıcıdan gelen ikili alaka düzeyi kararlarını değil, gerçek değerli karar işlevini kullanmanız gerektiğidir, böylece filtreleme yerine sıralama yapabilirsiniz. SVM için, karar işlevi köprü ile işaretli mesafedir. İyi makine öğrenimi paketleri bunun değerini elde etmek için bir arayüze sahiptir.

Bunun ötesinde, sıralamayı öğrenmek için ikili ve düzgün bir şekilde öğrenmeye bakın; önerdiğiniz noktadan noktaya yaklaşımdır. IIRC, ikili uygulamada çok daha iyi çalışır. Bunun nedeni, ikili sıralamada çok daha az tıklamaya ihtiyaç duymanızdır: kullanıcıların dokümanları alakalı / alakasız olarak etiketlemek yerine yalnızca "alakalı" düğmesini verirsiniz. Daha sonra üçlüde (document1, document2, sorgu), document1'in sorgu ile document2'den daha alakalı olup olmadığını söyleyen ikili bir sınıflandırıcı öğrenirsiniz ( veya tam tersi). Bir kullanıcı, diyelim ki, sıralamadaki 4. belgeyi ilgili olarak etiketlediğinde, size öğrenmeniz için altı örnek verir:

  • document4> belge3
  • document4> belge2
  • document4> belge1
  • belge1 <belge4
  • belge2 <belge4
  • belge3 <belge4

böylece negatifleri ücretsiz olarak alırsınız.

(Bunlar sadece öneri, bunların hiçbirini denemedim. İnsanların sıralamayı öğrenmeyi araştırdıkları bir araştırma grubunda çalıştım. Bir kez okuma grubu için başkasının gazetesinin bir sunumunu yaptım, belki de slaytlar yardımcı olabilir.)


+1 Teşekkürler. Bana ikinci kez yardım ettin! Bunu sindirmek için birkaç saat ayırmama izin verin. :)
Efsane

4
Bu mükemmel bir cevap, sadece küçük bir değişiklik önermek istiyorum. Bir ux perspektifinden bakıldığında, "alakasız" düğmesini kullanarak kullanıcıların "alakalı" bir düğmeden daha fazla sonuç almasını sağlama olasılığınız daha yüksektir. Aradıklarını bulduklarında kim sonuç almak için dolaşır? İstedikleri şeyi bulamadıklarında "şikayet etme fırsatı" gibi görünen bir düğmeye basmaları çok daha muhtemeldir, çünkü o noktada sistemi geliştirmek aslında mevcut hedefleriyle uyumludur.
Raket

4
tl; dr Sadece bir giriş kullanacaksanız, bunu "alakasız" hale getirin, insanların hayal kırıklığına uğradıklarında onu tıklama olasılıkları daha yüksektir.
Racheet

"Listwise" yaklaşım ne olurdu? Ayrıca, ücretsiz 3 veya 6 örnek mi demek istediniz? (Son 3 sadece ilk 3'ün tekrarı gibi mi görünüyor?)
Maks
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.