Veri Vektörleştirme

Vektörleştirme, veri işlemlerinin verimliliğini artırma sürecidir. Özellikle büyük veri kümelerini işlemek için birden fazla veri noktası üzerinde aynı anda işlem yaparak faydalıdır ve dizi programlamanın temel bir yönüdür.

Geleneksel olarak, veri yönetim görevleri, her bir veri parçası üzerinde sırasıyla işlemler yürütmek için döngülere dayanıyordu; bu yöntem skalar hesaplama olarak bilinir. Bu skalar yaklaşım, büyük veri hacimlerini işlerken genellikle yavaş kalır.

Buna karşılık, vektörleştirme hesaplamaların paralel olarak yürütülmesini kolaylaştırır. İşlemlerin, her bir veri noktasını teker teker işlemek yerine, tüm veri dizileri üzerinde aynı anda gerçekleştirilmesine olanak tanır. Bu sayede, vektörleştirme, paralel işlemleri verimli bir şekilde yönetme yeteneğine sahip modern GPU'ların tasarımından yararlanır. Python'daki NumPy gibi kütüphaneler, vektörleştirilmiş işlemler için yüksek düzeyde optimize edilmiştir.

NLP (Doğal Dil İşleme) dünyasında buna "Kelime gömme" denir.

Bu nedenle, vektörleştirme veya kelime gömme, metin verilerini sayısal vektörlere dönüştürür. Daha sonra bu vektörler, çeşitli makine öğrenimi modelleri oluşturmak için kullanılır. Bu şekilde, metinden özellikler çıkararak birden fazla doğal dil işleme modeli oluşturduğumuzu söyleyebiliriz. Metin verilerini sayısal vektörlere dönüştürmenin farklı yolları vardır ve bunları daha sonra tartışacağız.

Bu süreç, hesaplama gücüne, yani GPU'ya ihtiyaç duyar.

Kelime Gömme (Word Embedding) Çeşitleri

Genel olarak, kelime gömmeleri aşağıdaki iki kategoriye ayrılabilir:

  1. Frekansa Dayalı veya İstatistiksel Kelime Gömmesi

  2. Tahmine Dayalı Kelime Gömmesi

Beş ana olarak kullanılan kelime gömme teknolojisi vardır: One-Hot Encoding, Count Vectorizer, Matris Formülasyonu, Bag-of-Words (BoW), N-grams Vectorization ve TF-IDF Vectorization.

1. One-Hot Encoding (OHE)

Bu teknikte, her benzersiz kelime, kelime dağarcığında 1 değerine sahip olan benzersiz bir token ile temsil edilir ve vektördeki diğer konumlarda 0 olarak ayarlanır. Basit bir ifadeyle, bir one-hot encoded vektörün vektör temsili, kelimenin bulunduğu konum için 1 ve diğer tüm konumlar için 0 değerini temsil eder.

Aşağıdaki cümleyi ele alalım:

Cümle: Python'da NLP öğretiyorum.

Bu cümledeki kelimeler “NLP”, “Python”, “öğretiyorum” vb. olabilir.

Bir sözlük, bir cümledeki tüm benzersiz kelimelerin bir listesidir. Yani, bir sözlük şu şekilde görünebilir –

Dictionary: [‘I’,’am’, ’teaching’,’ NLP’,’ in’, ’Python’] ( Sözlük: [‘Ben’, ‘varım’, ‘öğretiyorum’, ‘NLP’, ‘içinde’, ‘Python’] )

Bu nedenle, yukarıdaki sözlüğe göre bu formatta vektör temsili şudur:

Vector for NLP: [0,0,0,1,0,0]  ( NLP için vektör: [0,0,0,1,0,0] )
Vector for Python:  [0,0,0,0,0,1] ( Python için vektör: [0,0,0,0,0,1] )

Bu, bir kelimeyi vektör biçiminde temsil etmenin basit bir yöntemidir.

One-hot Encoding'in Dezavantajları

  1. One-hot encoding'in bir dezavantajı, vektör boyutunun kelime dağarcığındaki benzersiz kelime sayısına eşit olmasıdır.

  2. One-hot encoding, farklı kelimeler arasındaki ilişkileri yakalamaz. Bu nedenle, bağlam hakkında bilgi vermez.

2. Count Vectorizer

Count vectorizer, metin vektörizasyonunun en basit yollarından biridir. Belirli bir kelimenin belgede ortaya çıkıp çıkmadığını gösteren bir dizi dummy değişken olan bir belge terim matrisini oluşturur.

Count vectorizer, kelime dağarcığını öğrenir ve belge terim matrisini oluşturmaya çalışır; burada bireysel hücreler, o kelimenin belirli bir belgede ne sıklıkla bulunduğunu gösterir; bu, terim sıklığı olarak da bilinir. Sütunlar, corpus'taki her bir kelimeye ayrılmıştır.

3. Matris Formülasyonu

C adında bir corpus düşünelim, D belge {d1, d2, …, dD} içeriyor ve buradan N benzersiz token çıkarıyoruz. Artık, bu N token'dan oluşan bir sözlük vardır ve oluşturulan Count Vector matrisinin boyutu D x N ile verilir. M matrisindeki her bir satır, D(i) belgesindeki token'ların sıklığını tanımlar.

4. Bag-of-Words (BoW)

Bu vektörizasyon tekniği, metin içeriğini sayısal özellik vektörlerine dönüştürür. Bag of Words, bir corpus'tan bir belge alır ve her belge kelimesini makine öğrenimi modeli için bir özellik vektörüne harcayarak sayısal bir vektöre dönüştürür.

5. N-grams Vektörizasyonu

Count vektörizasyon tekniği gibi, N-Gram yönteminde bir belge terim matrisinin oluşturulması sağlanır ve her hücre sayımı temsil eder. Sütunlar, uzunluğu n olan komşu kelimelerin tüm sütunlarını temsil eder. Count vektörizasyonu, n=1 olduğu durumun özel bir durumudur. N-gramlar, metindeki n kelimenin sırasını dikkate alır; burada n (1,2,3…) gibi 1-gram, 2-gram gibi olabilir. Token çiftleri. BOW'dan farklı olarak, kelime sırasını korur.

6. TF-IDF Vektörizasyonu

Yukarıda tartışılan tekniklerde, BOW yöntemi basit ve iyi çalışır, ancak tüm kelimeleri eşit şekilde ele alır. Sonuç olarak, yaygın kelimeleri nadir kelimelerden ayırt edemez. Bu sorunu çözmek için TF-IDF devreye girer!

Terim sıklığı-ters belge sıklığı (TF-IDF), bir kelimenin önemini, belgedeki ve corpus'taki ne sıklıkla geçtiğine bağlı olarak dikkate alan bir ölçüdür.

Ağdaki Hesaplama Düğümü

Görüntülenen ağda (bkz. Şekil 1), hesaplama düğümleri mavi dikdörtgenler olarak vurgulanmıştır. Bu düğümler, doğrulama düğümünden alınan doğrulanmış veri setini kabul eder ve bunu vektör formatına dönüştürerek eğitim için hazırlar.

Hesaplama düğümünün işlevi, vektör üretmek için aşağıdakileri gerçekleştirecektir. Tweet işleme örneğini alalım:

Özellik Çıkartma: Bu adımda, Twitter paylaşımlarından özellikler çıkartmak için Bag of Words (BOW) modeli kullanılır. Bu modelde, her belge örneği genellikle kelimenin gözlemlenen sıklığıyla ilişkilendirilerek temsil edilir. Metin içeriğindeki kelimelerin sırası da önemsiz kabul edilir. BOW özellikleri elde edildikten sonra, Zemberek ve Lucene'in yaklaşımını kullanarak durak kelimelerin çıkarılması, kök alma ve metin normalizasyonu adımları uygulanır.

Temsil ve Terim Ağırlığı: Her Tweet, TTF veri setinde VSM (Vektör Alanı Modeli) kullanılarak bir özellik vektörü olarak temsil edilir. VSM'de, her özellik kendi terim sıklığı veya ağırlık değeri ile sayılarla temsil edilir. Bu nedenle, terim ağırlığı, örnek vektöründeki her ilgili özelliğin önemini belirtmek için bir ağırlık atayan önemli bir adımdır. Bu adımda, metin sınıflandırmasında en yaygın olarak kullanılan ağırlıklandırma şeması olan TF∗IDF (Terim Sıklığı-Ters Belge Sıklığı) yöntemi kullanılır. TF∗IDF, bir özelliğe, ters belge sıklığı ve terim sıklığı faktörlerine dayanarak ağırlık uygular. Bu, daha fazla tweet göründüğünde, terimin daha az önemli olacağı ve ağırlığın daha düşük olacağı anlamına gelir. TF∗IDF şu şekilde formüle edilebilir:

tf_ij, N ve n_j, sırasıyla bir tweet i'deki terim j'nin ham terim sıklığını, veri setindeki toplam tweet sayısını ve terim j'nin geçtiği tweet sayısını temsil etmektedir.

GPU Paralel Hesaplama Mimarisi ve CUDA Programlama Modeli:

CUDA, NVIDIA'nın GPU gücünü kullanarak hesaplama performansında önemli artışlar sağlayan bir paralel hesaplama mimarisidir. TESLA GPU mimarisinin geliştirilmesi sayesinde, NVIDIA'nın GPU'ların bir işlemci olarak programlanabileceğini göstermiştir. Daha önce, GPU'lar esas olarak grafik uygulamaları için kullanılıyordu. CUDA mimarisi üzerinde yapılan araştırmalar, CPU'nun performansının GPU'nun performansından daha yüksek olduğunu ortaya koymuştur. Bu fark, GPU mimarisinin grafik işleme gibi yüksek dereceli paralel hesaplamalar ve işlem yoğunluğu gerektiren işlemler için geliştirilmiş olmasından kaynaklanmaktadır. CPU'daki akış kontrolü gerektiren işlemlerin aksine, GPU, veri işleme, görüntü işleme, 3D render alma ve sinyal işleme gibi tekrarlayan ve aritmetik yoğun işlemlerden oluşan paralel hesaplama uygulamalarını hedef alır. Şekil 2'de gösterildiği gibi, GPU paralel hesaplama, CPU'daki önbellek bellek ve akış kontrol mekanizmaları yerine veri işlemeye adanmış yoğun transistörler ile bir mimariyi mümkün kılar. Çok çekirdekli GPU'lar ile genel amaçlı çok çekirdekli CPU'lar arasındaki aşırı performans farkı, iki işlemci arasındaki temel tasarım farkından kaynaklanmaktadır. CPU'ya kıyasla, GPU daha fazla ALU'ya (Şekil 2'ye bakınız) sahiptir ve daha az bileşen (örneğin, önbellek bellek ve akış kontrol) içerir. Bu, paralel aritmetik işlemleri gerçekleştirmek için gereken yüksek aritmetik işlem gücü ve kapasitesini elde etmekte önemlidir. GPU, SIMD (Tek Talimat Çoklu Veri) programlamasına uygun olarak farklı veri elemanları üzerinde aynı işlemlerin gerçekleştirilmesine de olanak tanır ve GPU'daki küçük önbellek bellek, uygulamanın ihtiyaç duyduğu bant genişliğini kontrol etmeyi sağlar. Bu nedenle, aynı bellek alanındaki verilere erişmeye çalışan iş parçacıkları için DRAM'e (Dinamik Rastgele Erişim Belleği) geri dönmeye gerek yoktur. Böylece, GPU'da paralelizable işlevleri çalışan herhangi bir uygulama için sonuçlar çok daha hızlı elde edilir. CUDA, kolay iş parçacığı yönetim yapısı ve GPU'da kullanılabilen paylaşılan bellek ile yazılım olması sayesinde oldukça faydalı ve pratiktir. Ayrıca, CPU için yazılan C programlama dili uygulamalarının, grafik işlemcide çoklu iş parçacığı kullanılarak çalıştırılmasını sağlar çünkü CUDA, C tabanlı bir paralel programlama dilidir. Bu açıdan, NVIDIA GPU'ları ile CUDA programlaması, grafik dışı uygulamalar için de yeterli API'ler sunmaktadır.

Paralel Uygulama: k-NN algoritması paralel bir şekilde uygulanmıştır. Seçimimizin ana nedenleri şunlardır:

  • k-NN, genellikle makine öğrenimi algoritmaları arasında en yavaş olanıdır; çünkü genellikle diğer iyi bilinen sınıflandırıcılara (örn. Karar Ağaçları, Naïve Bayes, vb.) göre hesaplama karmaşıklığı veya doğruluk açısından daha iyi performans gösterir, özellikle metin kategorilendirme konusunda.

  • Diğer sınıflandırma algoritmalarına kıyasla, bu yöntem paralel modda çalışmaya daha uygundur; çünkü en yakın komşuları aramak bağımsız olarak hesaplanabilir. Bu görev, k-NN'nin en çok zaman alan kısmıdır.

Diğer sınıflandırıcıların uygulanması da mümkündür, ancak her algoritmanın kendi hesaplama stratejisi vardır ve tüm algoritmalar aynı paralel potansiyele sahip değildir. Örneğin, k-NN'ye kıyasla, Naïve Bayes algoritmasını paralel bir şekilde çalıştırmak, seri yürütme ile karşılaştırıldığında önemli bir performans farkı sağlamayabilir. Bu nedenle, bu çalışmada, özellikle metin kategorilendirmede yoğun hesaplama gerektiren tembel bir öğrenici olan k-NN algoritmasını seçtik. Mesafe hesaplama, k-NN sınıflandırmasının en çok zaman alan kısmı olduğundan, bu hesaplamayı mesafe hesaplama çekirdeğimizle paralel olarak gerçekleştirdik.

K-En Yakın Komşu Sınıflandırıcısı: k-NN, örneklerin mesafesine (veya benzerliğine) dayalı bir denetimli öğrenme algoritmasıdır. Bu yöntemin sınıflandırma süreci zaman alıcıdır ve en uygun k değerini tahmin etmek zordur. k-NN sınıflandırıcısı, mesafe fonksiyonu ile en yakın k komşuyu bulur ve bu komşuların kategori ağırlıklarını kullanarak test örneğine bir kategori atar. Mesafe (örn. Öklidyen, Manhattan, Minkowski, vb.) veya benzerlik fonksiyonu farklılık gösterebilir. Ancak, k-NN sınıflandırıcısında en yakın komşuları belirlemek için genellikle Öklidyen mesafe kullanılır. d0, 𝑑j ∈ 𝑘𝑘 − 𝑁𝑁(𝑑0) ve 𝐶 test örneğini, k en yakın komşuyu ve kategori kümesini temsil etsin. O halde, test örneğine bir kategori atamak, k en yakın komşusunun kategori ağırlıklarını kullanarak aşağıdaki gibi gerçekleştirilir: Eşitlik (2) ve (3):

Vektörleştirme sürecinde, daha önce doğrulanan veri seti, belirlenen hesaplama yöntemleri aracılığıyla vektör formatına dönüştürülmektedir. Bu aşama, verilerin kesintisiz bir şekilde vektörlere dönüştürülmesini sağlamak için Grafik İşlem Birimleri'nin (GPU'lar) temel donanım olarak kullanıldığı önemli ölçüde hesaplama kaynakları gerektirmektedir.

Önceki bölümde belirtildiği gibi, hesaplama düğümleri bu vektörleştirme görevlerini gerçekleştirmek üzere atanmıştır ve bu sayede veri setinin dönüşüm sürecinin bütünlüğü ve doğruluğu sağlanmaktadır. Hesaplama düğümlerinin yalnızca belirlenen donanım kriterlerini karşılayan düğümlerin yetkilendirildiğini belirtmek önemlidir. Bu gereklilik, hesaplama taleplerinin gerekli performans verimliliği ile karşılanmasını garanti eder.

最后更新于