Farklı biçimlerdeki belgeleri karşılaştırırken TF-IDF ve Kosinüs Benzerliğine alternatifler


12

Bir kullanıcının iş becerilerini alan ve bu becerilere dayanarak onlar için en ideal kariyeri öneren küçük, kişisel bir proje üzerinde çalışıyorum. Bunu başarmak için bir iş listesi veri tabanı kullanıyorum. Şu anda, kod aşağıdaki gibi çalışır:

1) Listede belirtilen becerileri elde etmek için her iş listesinin metnini işleyin

2) Her kariyer için (örn. "Veri Analisti"), o kariyer için iş listelerinin işlenmiş metnini tek bir belgede birleştirin

3) Kariyer belgelerindeki her bir becerinin TF-IDF'sini hesaplayın

Bundan sonra, kariyerleri bir kullanıcının becerilerinin listesine göre sıralamak için hangi yöntemi kullanmam gerektiğinden emin değilim. Gördüğüm en popüler yöntem, kullanıcının becerilerini bir belge olarak ele almak, daha sonra beceri belgesi için TF-IDF'yi hesaplamak ve beceri belgesi ile her biri arasındaki benzerliği hesaplamak için kosinüs benzerliği gibi bir şey kullanmak olacaktır. kariyer belgesi.

Kosinüs benzerliği en iyi aynı formattaki iki belgeyi karşılaştırırken kullanıldığından, bu benim için ideal bir çözüm gibi görünmüyor. Bu nedenle, TF-IDF, kullanıcının beceri listesine uygulanacak uygun metrik gibi görünmemektedir. Örneğin, bir kullanıcı listesine ek beceriler eklerse, her bir beceri için TF düşer. Gerçekte, kullanıcının beceri listesindeki becerilerin sıklığının ne olduğunu umursamıyorum - sadece bu becerilere sahip olmalarını umuyorum (ve belki de bu becerileri ne kadar iyi bildiklerini).

Daha iyi bir metrik aşağıdakileri yapmak gibi görünüyor:

1) Kullanıcının sahip olduğu her beceri için, bu becerinin TF-IDF'sini kariyer belgelerinde hesaplayın

2) Her kariyer için, kullanıcının tüm becerileri için TF-IDF sonuçlarını toplayın

3) Yukarıdaki kariyere göre sıralama kariyeri

Burada doğru çizgileri mi düşünüyorum? Öyleyse, bu çizgiler boyunca çalışan, ancak basit bir toplamdan daha karmaşık olan herhangi bir algoritma var mı? Yardım için teşekkürler!


3
Doc2vec'e göz atın, Gensim uygulaması var
Blue482

Yanıtlar:


1

Belli beceriler arasındaki mesafeyi daha iyi temsil etmek için belki de kelime düğünlerini kullanabilirsiniz. Örneğin, "Python" ve "R", ikisi de programlama dili olduğundan "Python" ve "Zaman yönetimi" nden daha yakın olmalıdır.

Bütün fikir, aynı bağlamda ortaya çıkan kelimelerin daha yakın olması gerektiğidir.

Bu düğünlere sahip olduğunuzda, aday için bir takım becerileriniz ve işler için çeşitli boyutlarda becerileriniz olacaktır. Ardından , kümeler arasındaki mesafeyi hesaplamak için Earth Mover'ın Mesafesini kullanabilirsiniz. Bu mesafe ölçüsü oldukça yavaştır (ikinci dereceden zaman), bu yüzden geçecek çok işiniz varsa iyi ölçeklendirilmeyebilir.

Ölçeklenebilirlik sorunuyla başa çıkmak için, belki de adayları ilk etapta ortak becerilerine göre sıralayabilir ve bu işleri tercih edebilirsiniz.


1

"Belgeleri" eşleştirmek için yaygın ve basit bir yöntem, tanımladığınız gibi TF-IDF ağırlıklandırmasını kullanmaktır. Ancak, sorunuzu anladığım kadarıyla, her kariyeri (belge) bir dizi kullanıcı becerisine göre sıralamak istiyorsunuz.

Becerilerden bir "sorgu vektörü" oluşturursanız, vektörü kariyer dönemi matrisinizle çarpabilirsiniz (tüm tf-idf ağırlıkları değer olarak). Ortaya çıkan vektör size, "sorgu becerileri" kümesi için en iyi k kariyerlerini seçmek için kullanabileceğiniz kariyer belgesi başına bir sıralama puanı verecektir.

q¯1x|terms|M|terms|x|dÖcuments|v¯M1x|dÖcuments|

Bu sıralama yöntemi en basit olanlardan biridir ve birçok varyasyon vardır. Wikipedia'daki TF-IDF girişi de bu sıralama yöntemini kısaca açıklamaktadır. Bu soru-cevap dokümanlarını eşleştirme hakkında SO'da da buldum .


Şaşırtıcı bir şekilde, kelime düğünlerinin basit bir ortalaması, genellikle Tf-Idf ağırlıklarıyla yapılan ağırlıklı düğünlerin ortalaması kadar iyidir.
wacax


0

"Gensim" kullanmayı deneyebilirsiniz. Yapılandırılmamış verilerle benzer bir proje yaptım. Gensim standart TFIDF'den daha iyi skorlar verdi. Ayrıca daha hızlı koştu.

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.