Merhaba, bu yazımızda sizlere geliştirmekte olduğumuz doğal dil işleme projesinden bahsetmek istiyoruz. Hayat boyu yanlış anlaşılmak, istediğini anlatamamak, aradığını bulamamak hepimizin kâbusu olmuştur. Kimi belki bu sebeple hayatının aşkını kaçırmış, kimi de belki hayalindeki işe ulaşamamıştır. Olayın duygusal kısmı bizi derinden yaralıyor olsa da bizler çözümü geliştirirken arayıp bulamadığımız şirkete, ilana, özelliğe ve bilgiye odaklı ilerledik.
Projede, Kariyer.net arama motorunda aranan pozisyonun, işverenin veya bir niteliğin kullanıcı tarafından eksik ya da yanlış girilmiş olsa dahi kullanıcıyı anlamlı ve yakın sonuçlara ulaştırmasını hedefledik. Başlangıç olarak aranan kısaltmalara çözüm getirmek istedik. Word embedding algoritmaları kullanarak, örneğin arama motorunda “SQL” sorgusunu aratan birinin “Structured Query Language” sonucuna erişmesini veya tam tersi olarak “Structured Query Language” keyword’ün aslında “SQL” ile aynı key olduğunu anlamasını sağlamaya çalıştık.
Kariyer.net kurulduğu yıldan bu yana oldukça büyük veri havuzu oluşturmuştur. Bu veri havuzundan ilan ve özgeçmiş verilerinin metinlerini kullanarak iki ayrı case ile kısaltma sözlüğü oluşturmaya çalıştık. Şimdi kek tarifi anlatır gibi adım adım anlatmaya çalışacağım.
İlk case’de Word2Vec modelden yararlandık. Word2vec, metni işleyen iki katmanlı bir sinir ağıdır. Girdi bir metin korpusu ve çıktısı bir vektör kümesidir yani bu korpustaki kelimeler için feature vektörleri.
Word2vec'in amacı ve kullanışlılığı, benzer kelimelerin vektörlerini, vektör alanında birlikte gruplamaktır. Yani, benzerlikleri matematiksel olarak algılar. Word2vec, kelime özelliklerinin, tek tek kelimelerin bağlamı gibi özelliklerin sayısal temsilleri olarak dağıtılan vektörleri oluşturur. Bunu insan müdahalesi olmadan yapar.Yeterli veri, kullanım ve bağlamlar göz önüne alındığında, Word2vec, bir kelimenin geçmiş görünümlerine dayanan anlamı hakkında oldukça doğru tahminlerde bulunabilir.
Word2Vec yaklaşımıyla veri seti içerisinde metinlerdeki her bir kelime için yakınlıklarını bulduk. Bulunan yakınlıklar iki ya da daha fazla kelimeden oluşuyorsa baş harflerini alarak kısaltmasını oluşturduk, eğer yakınlıkları bulunan key ile eşleşiyorsa sözlüğümüze eklenmiş oluyor..
İkinci case’imizde metin içerisinde parantez “()” içeren cümlelere odaklandık. İlk olarak ilan veri setinden çektiğimiz metinleri daha anlaşılır olması için HTML kodlarından temizledik. Daha sonra parantez içindeki bilginin kısaltma olup olmadığını, ardından da parantez içi ve dışı gerçekten uyuşup uyuşmadığını kontrol ettik. Örneğin; “Air Pollution Control (APC)” veya “KBB (Kulak Burun Boğaz)”. Eğer kısaltma ve açılım birbirine uyuyorsa sözlüğe eklenmiş oluyor. Baş harfler ile yakalanabilen kısaltmalar dışında bu kurala uymayan kısaltmalarla da karşılaşıyoruz. Mesela, “Fransa – fr”, “Regular Expressions - ReGex ” gibi. Bu kısaltmalar içinde kısaltma ve açılımı eşleştiren algoritmaya 2 ya da 3 harf esnekliği vererek yakalamaya çalıştık. Sonuçta ilan metinlerinden toplamda 3000den fazla, farklı kısaltma ve açılımını içeren bir sözlük elde ettik. Aşağıda çalışma sonucunun bir parçasını görüyorsunuz
Firma kısaltmaları, proje kısaltmaları, terim kısaltmalarının tespiti ile başvurulan ilan içinde geçen R&D ile özgeçmiş bilgilerinde Research & Development aynı anlama sahip olduğu anlaşılmaktadır. Bu bize bir çok alanda ilan metinlerini ve özgeçmişlerini daha iyi anlamada yardımcı olmaktadır.