En baştan başlayalım. Sınıflandırma (sınıflandırma olarak da bilinir) denetimli öğrenmeye bir örnektir . Denetimli öğrenmede:
- model - verilerinizdeki iç yapıya yaklaşan, bu konuda mantık yürütmenizi ve yararlı tahminler yapmanızı sağlayan bir şey (örneğin, bir nesnenin sınıfını tahmin etme); normalde modelde "öğrenmek" istediğiniz parametreler vardır
- eğitim ve test veri kümeleri - modelinizi eğitmek (parametreler için iyi değerler bulmak) ve daha fazla değerlendirme yapmak için kullandığınız nesne kümeleri
- eğitim ve sınıflandırma algoritmaları - önce eğitim veri kümesinden modelin nasıl öğrenileceğini açıklar, ikincisi eğitimli model verilen yeni bir nesnenin sınıfının nasıl türetileceğini gösterir
Şimdi basit bir spam sınıflandırması vakası ele alalım. Eğitim veri kümeniz, "spam" veya "spam değil" e-postaları + karşılık gelen etiketlerden oluşan bir gruptur. Test veri seti aynı yapıya sahiptir, ancak bazı bağımsız e-postalardan yapılmıştır (normalde veri kümesini böler ve 9/10'u eğitim için ve 1/10 - test için kullanılmasını sağlar). E-postaları modellemenin bir yolu, her birini bir kelime kümesi (çanta) olarak temsil etmektir. Kelimelerin birbirinden bağımsız olduğunu varsayarsak, Naive Bayes sınıflandırıcısını kullanabiliriz , yani her bir kelime ve her sınıf için önceki olasılıkları hesaplayabiliriz (eğitim algoritması) ve sonra yeni bir belgenin ait olma olasılığını bulmak için Bayes teoremini uygulayabiliriz. belirli sınıf.
Yani, temelde:
raw model + training set + training algorithm -> trained model
trained model + classification algorithm + new object -> object label
Şimdi nesnelerimizi (belgelerimizi) bir kelime torbası olarak temsil ettiğimizi unutmayın. Ama tek yol bu mu? Aslında, ham metinden çok daha fazlasını çıkarabiliriz. Örneğin, kelimeler yerine saplarını veya lemmalarını kullanabilir, gürültülü durma sözcükleri atabilir , kelimelerin POS etiketlerini ekleyebilir , adlandırılmış varlıkları çıkarabilir ve hatta belgenin HTML yapısını keşfedebiliriz. Aslında, bir belgenin (ve genel olarak herhangi bir nesnenin) daha genel temsili bir özellik vektörüdür . Örneğin, metin için:
actor, analogue, bad, burn, ..., NOUN, VERB, ADJ, ..., in_bold, ... | label
0, 0, 1, 1, ..., 5, 7, 2, ..., 2, ... | not spam
0, 1, 0, 0, ..., 3, 12, 10, ..., 0, ... | spam
Burada ilk satır olası özelliklerin bir listesidir ve sonraki satırlar bu özelliğin bir belgede kaç kez oluştuğunu gösterir. Örneğin ilk belgede "aktör" kelimesi, 1 "yanık" kelimesi, 5 isim, 2 sıfat ve 2 metin kalın harfle yazılmıştır. Son sütun sonuçta ortaya çıkan bir sınıf etiketine karşılık gelir.
Özellik vektörünü kullanarak metinlerinizin herhangi bir özelliğini dahil edebilirsiniz. İyi özelliklerin bulunması biraz zaman alabilir.
Peki ya model ve algoritmalar? Naif Bayes'e bağlı mıyız? Bir şey değil. lojistik regresyon , SVM , karar ağaçları - sadece birkaç popüler sınıflandırıcıdan bahsetmek. (Çoğu durumda "sınıflandırıcı" dediğimizi, eğitim ve sınıflandırma için model + karşılık gelen algoritmaları kastettiğimizi unutmayın).
Uygulamaya gelince, görevi 2 bölüme ayırabilirsiniz:
- Ekstraksiyon - ham metinleri özellik vektörlerine dönüştürme.
- Nesne sınıflandırması - model oluşturma ve uygulama.
İlk nokta, birçok NLP kütüphanesinde iyi çalışılmıştır . İkincisi, makine öğrenmeyle ilgilidir, bu nedenle veri kümenize bağlı olarak Weka veya MLlib kullanabilirsiniz .