BERT Modeli ile Benzer Özgeçmişlerin Tespiti

Anıl Özlü
Kariyer.net Tech
Published in
5 min readJan 26, 2022

Merhabalar, bu yazımızda sizlere geliştirdiğimiz özgeçmiş eşleştirme modelimizden bahsedeceğiz. İşe alım süreçlerinin dijitalleşmesi, hem işe alım profesyonelleri için hem de çalışanlar için bir çok fayda sağlamıştır. İşe alım profesyonelleri, tek bakışta ülkenin her yerinden gelen başvuruları görebilmekte, filtreleme yöntemleriyle eleyebilmekte ve uygun adayları tespit edebilmektedir. Fakat bu kolaylığın bir etkisi olarak, dijital bir iş ilanına gelen başvuru sayısının yükseldiği gözlemlenmektedir. Spesifik bir pozisyona uygun bir adayı, mevcut adaylar arasından bulmak için ise çok daha yüksek bir sayıda aday arasından seçim yapılması gerekmektedir. Biz de, Kariyer.net ARGE ekibi olarak, özellikle hızlı ve doğru tercihin önemli olduğu, işten ayrılan çalışanın yerine uygun bir çalışan adayı tespit etme sorununu çözecek bir model geliştirdik. Bu modelimiz, işe alım profesyonellerine tüm adaylar arasından uygun adayları gösterecek bir öneri sistemi olarak çalışmaktadır. Bu öneriler için, modelimiz işten ayrılan çalışanın özgeçmişini baz almaktadır.

Kullandığımız iki ayrı veri setini anlatarak yazımıza devam edeceğiz.

1-) Veri Seti Hakkında Bilgiler:

Veri setinden örnek 4 satır. Aynı özgeçmiş, her farklı iş tecrübesi için farklı bir satır kaplıyor.
  • Veri setimizi, eğitim ve test seti olarak iki ayrı kümeye ayırdık. Test seti için, Kariyer.net’te açılmış olan iş ilanlarına gelen başvuruların bir kısmını kullandık. Bu başvurular, ilanı açan firma tarafından “Olumlu” veya “Olumsuz” olarak, özgeçmişin başvurulan pozisyona uygun olup olmadığını belirtecek şekilde etiketlenmiştir. Olumlu ve olumsuz etiketlenen başvuru sayıları dengeli olan 123 adet ilanı elle seçtik. Bu ilanlara gelen tüm başvuruları, olumlu ve olumsuz etiketleri ve hangi ilana başvurdukları bilgileri ile birlikte ayrı bir veri seti oluşturacak şekilde kümeledik. Kalan tüm özgeçmişleri ise eğitim için kullandık.
  • Modelimizin eğitimi ve testi için, her bir özgeçmişin “Summary” ve “workDescription” sütunlarını kullandık. Bu sütunlar sırayla, adayın kariyer ve hayatını genel olarak özetleyen bir paragraf ile, geçmiş iş tecrübelerini detaylandıran kısa paragraflar bulundurmaktadır. Bunlar üstüne, modelimizin eğitimi için “positionName” sütununu da kullandık. Bu sütunda adayın çalıştığı pozisyon yer almaktadır.
  • Toplamda 6500760 satırlık bir eğitim veri setimiz bulunmaktadır. İş tecrübesi özetlerini gruplayıp, her bir aday için tek bir satır oluşturacak hale getirdiğimizde eğitim veri setimiz 967379 satıra düşmektedir.

2-) Eğitim

Modelin eğitim süreci

Elimizdeki veri düzensiz paragraflardan oluştuğundan, BERT modeli kullanmayı tercih ettik. BERT modelimizin eğitimi, 3 aşamadan oluşmaktadır.

Pre-training:
Öncelikle modeli elimizdeki veri setinin özelliklerini öğrenebilmesi için, Masked Language Modeling objektifi ile bir ön eğitim sürecinden geçirdik. Bu objektif için bir etikete gerek bulunmamaktadır. Modele verdiğimiz paragraf için, her bir sözcüğü %15 ihtimalle gizleyen bir mask oluşturduk. Model, eğitim sürecinde bu gizli sözcükleri paragrafın kalanına bakarak tahmin etmeye çalışmakta, yanlış tahmin ettiği durumda kendini düzeltmektedir.

Masked Language Modeling

Clustering:
Ardından, modelimizi triplet loss kullanarak fine-tune etmeliyiz. Triplet loss, her iterasyonda modele 3lü gruplar halinde örnekler beslemeyi gerektirmektedir. Bu grupların içinde, “anchor” olarak seçilen bir örnek, “positive” olacak aynı etikete sahip bir örnek, bir de “negative” olacak farklı etikete sahip bir örnek bulunmaktadır. Triplet loss’un amacı, anchor ile pozitif arasındaki mesafeyi azaltmak ve anchor ile negative arasındaki mesafeyi arttırmaktır. Halihazırda anchor’a uzak bir negative örnek seçmemiz durumunda, modelin ağırlıklarının güncellenmediği bir iterasyon adımı ile karşılaşmamız olasıdır. Bunun önüne geçebilmek amacıyla, veri setimizi clustering metodlarıyla daha küçük kümelere ayırıp, 3lü gruplarımızı aynı kümeler içinden seçmemiz gerekmektedir.

Bunun için, bir önceki adımda ön eğitim sürecinden geçmiş olan modelimizi kullanarak, elimizdeki tüm eğitim verisinden embedding vektörleri çıkardık. Bu vektörleri kullanarak, tüm eğitim veri setini KMeans ile 8 cluster’a ayırdık.

Triplet Loss:
Modelin eğitim sürecini triplet loss ile tamamlıyoruz. Modeli triplet loss ile eğitebilmek için, “positionName” sütunundaki pozisyon isimlerini 55 üst kategoriye dağıttık. Bu kategorileri kullanarak, bir önceki adımda elde ettiğimiz 8 alt küme üzerinde modelimizi, her epochta sırayla her küme üzerinde olacak şekilde eğittik. Bu sayede, modelimizi benzer özgeçmişleri birbirine yakın, farklı özgeçmişleri birbirine uzak vektörler çıkaracak doğrultuda eğittik.

3-) Test
Test veri setimiz için ise, seçtiğimiz ilanlara gelen başvurular arasından, her bir ilan için bir adet olacak şekilde, uygun birer özgeçmiş seçtik. Bu özgeçmişler, firma tarafından olumlu etiketlenmiş, işe alım sürecinde en azından mülakat aşamasına kadar gelmiş adayları temsil etmektedir. Her bir ilan için, seçilen özgeçmişi ve eğittimiz modeli kullanarak kullanıcıya benzer aday önerilerimizi sunabilmekteyiz. Bu önerimizi, seçilen özgeçmişi temsil eden embedding vektörü ile, ilana gelen başvuruları temsil eden özgeçmişlerden çıkarılan tüm embedding vektörlerini karşılaştırıp, kosinüs benzerliği skoru hesabı ile yapıyoruz. Tüm özgeçmişler arasındaki kosinüs benzerliği skoru hesaplandıktan sonra, bu skora göre özgeçmişleri büyükten küçüğe sıralıyoruz, ardından istediğimiz k adet özgeçmişi en üstten başlayarak seçiyoruz.

Kosinüs benzerliği skoru formülü. A ve B iki ayrı vektörü temsil ediyor.

Modelimizin performansını test edebilmek amacıyla, her bir ilan için precision@k skoru hesapladık, yani her bir ilan için k adet öneride bulunup, bu önerilerin olumlu olma oranını hesapladık. Modelin son skorunu hesaplamak için, her bir ilandan elde ettiğimiz precision@k skorunun ortalamasını aldık.

4-) Sonuçlar

Yazımızın bu bölümünde, denediğimiz clustering metodlarının ve eğittimiz modelin sonuçları üzerinde konuşacağız.

Alt kümelere bölmek istediğimiz veri, BERT modelinin eğitim verisinden çıkardığı, 768 boyutlu vektörlerden oluşmaktadır. Verimizin boyutunun bu denli yüksek olması, clustering metodları ve kullanılan mesafe metricleri açısından zorluk çıkarmaktadır. Bu yüzden, KMeans metodu kullanmaya karar vermeden önce, DBSCAN, KMedoids ve KMeans algoritmalarını denedik.

KMeans ve KMedoids algoritmalarının inertia grafikleri

DBSCAN algoritması, elimizdeki veri içerisinde herhangi bir benzerlik tespit edemeyerek tüm veriyi gürültü olarak işaretledi. KMeans ve KMedoids için, euclidean ve manhattan distance metriclerini test ettik. Vektörlerimizin yüksek boyutuna rağmen, euclidean ile daha iyi sonuçlar alabildik. Yukarıdaki grafikte, KMeans ve KMedoids algoritmalarının her k değeri için her noktanın cluster merkezine olan uzaklıkları toplamlarını görebilirsiniz. KMeans her k değeri için, KMedoids algoritmasından daha iyi performans gösterdiği için, KMeans algoritmasını kullanmayı tercih ettik.

Triplet loss için seçilebilecek anchor-negative örnekler arası mesafelerin dağılımı

Verimizi alt kümelere ayırmamızdaki temel amaç, verimizi sınıflandırmak değil, triplet loss ile eğitim sürecinde boş iterasyon olmasını engellemekti. Dolayısıyla, KMeans algoritmasının inertia grafiğine baktığımızda, Elbow Method’a göre en uygun k değerinin 4 olduğunu söyleyebiliriz. Fakat, sınıflandırma değil, birbirine olabildiğince yakın verilerden oluşan alt küme elde etmeyi amaçladığımızdan, k değerini daha yüksek almanın daha faydalı olacağını düşünerek, k değerimizi 8 olarak seçtik. Yukarıdaki grafikte ise, 8 alt kümeye ayrılan verimiz içerisinde, anchor-negative örneklerin küme içi ve kümeler arası ortalama mesafelerinin dağılımlarını görebilirsiniz.

Farklı eğitim metodları ile eğitilmiş modellerin precision@k skorları

Yukarıdaki tabloda görüldüğü üzere, eğitim sürecindeki adımlar sonucu çok daha başarılı bir model elde edebilmiş bulunuyoruz. Özellikle triplet loss ile eğitim adımına geçmeden önce, eğitim verimizi clustering ile alt kümelere bölmemiz ciddi bir fark yaratmış bulunuyor. Son modelin sonuçlarının yine de çok yüksek olmadığını görebilmekteyiz, fakat elimizdeki verinin düzensiz ve gürültülü olduğunu belirtmek isteriz.

--

--