Metin kategorizasyonu: farklı türdeki özellikleri birleştirme


19

Ele aldığım sorun kısa metinleri birden çok sınıfa ayırmak. Şu anki yaklaşımım tf-idf ağırlıklı terim frekanslarını kullanmak ve basit bir lineer sınıflandırıcıyı (lojistik regresyon) öğrenmek. Bu gayet iyi çalışıyor (test setinde yaklaşık% 90 makro F-1, eğitim setinde yaklaşık% 100). Büyük bir sorun görünmeyen kelimeler / n-gramdır.

Diğer özellikleri, örneğin dağıtım benzerlikleri (word2vec tarafından hesaplanan gibi) veya örneklerin diğer kategorik özellikleri kullanılarak hesaplanan sabit boyutlu vektör ekleyerek sınıflandırıcı geliştirmeye çalışıyorum. Benim fikrim sadece sözcüklerin çantasından seyrek giriş özelliklerine eklemek oldu. Ancak bu, test ve eğitim setinde daha kötü performansa neden olur. Ek özellikler kendi başlarına test setinde yaklaşık% 80 F-1 verir, bu yüzden çöp değildirler. Özelliklerin ölçeklendirilmesi de yardımcı olmadı. Şu anki düşüncem, bu tür özelliklerin (seyrek) kelime özellikleri ile iyi karışmamasıdır.

Yani soru şu: Ek özelliklerin ek bilgi sağladığını varsayarsak, bunları birleştirmenin en iyi yolu nedir? Ayrı sınıflandırıcıları eğitmek ve bir grup topluluk çalışmasında birleştirmek mümkün olabilir (bu muhtemelen farklı sınıflandırıcıların özellikleri arasında herhangi bir etkileşimin yakalanamaması dezavantajı olacaktır)? Dikkate almam gereken daha karmaşık modeller var mı?


3
Bazı güncelleme: Ek yoğun vektörleri normalleştirerek kabul edilebilir sonuçlar elde etmeyi başardım. Yanlışlıkla sklearn StandardScaler'ın bunu yapacağını varsaydım. Yine de, etiket bağımlılıklarını modellememi veya alt sınıflandırıcıların güvenini birleştirmemi sağlayacak daha karmaşık yöntemler arıyorum.
elmille

Geçen yıl aynı deneyi yapıyordum ve yaşadığınız problemle tam olarak karşılaşıyordum. L2 normalleştirme işleminden sonra word2vec vektörünüz BOW'u yenebilir mi? L2 normalleştirmesi yapmadım, ancak birçok işlem sonrası yöntemi test ettikten sonra bile semantik vektör hala BOW tf / idf özelliklerinin arkasında yüzde 2-4 mutlak yüzde olduğunu düşünüyorum. Benim asıl istediğim, yoğun bir anlamsal vektörü geleneksel BOW ile birleştirmek ve konu sınıflandırma / modelleme performanslarını geliştirip geliştiremeyeceğini görmek. BTW: Hangi veri seti üzerinde çalışıyorsunuz, benimki 20newsgroup.

CIKM 2014 yarışması için bir veri seti ile çalışıyordum. Benim için, vektör gösterimleri asla tf-idf ağırlıkları ile YAY'yı geçemedi. Planım, kaliteyi artırmak için bunları kullanmaktı. Deneyimlerime göre (metin sınıflandırması için) bir tür tf-idf + n-gram içeren doğrusal bir model son derece güçlü bir yaklaşımdır. Şu anda kıvrımlı sinir ağları ve hatta yenilmesi zor yaklaşan bu (az ya da çok) karmaşık modellerle denemeler yapıyorum.
elmille

Mod: Üzgünüm 50 itibarım yok, bu yüzden yorum alanına yazamıyorum. Merhaba elmille: Evet, tüm testlerde yaşadığım şey bu. Ancak, vec + BOW kelimesinin yardım ettiğini buluyor musunuz? Deneyimlerime göre, VOW kelimesini BOW tf-idf ile birleştirdiğimde (benim durumumda bu vec aslında tüm makale içindeki genel bir vektör, word-vec değil ama çok benzer), performans daha da düşüyor. Aslında bunun BOW + vec> BOW> vec olması gerektiğini düşünüyorum. Karşılıklı yardımcı bilgi içerdiğinden. Gerçekte sonuç BOW> vec> BOW + vec. Sonra yay ve vec standart ölçekleme ve normalleştirme yapmak

Yanıtlar:


13

Doğru anlarsam, modelleriniz için iki tür özelliğiniz vardır. (1) Seyrek bir kelime torbası olarak temsil ettiğiniz metin verileri ve (2) daha geleneksel yoğun özellikler. Durum buysa, 3 ortak yaklaşım vardır:

  1. TruncatedSVDSeyrek verilerinizde boyutsal küçültme (LSA yoluyla ) gibi yoğun hale getirin ve model (ler) inizi eğitmek için özellikleri tek bir yoğun matriste birleştirin.
  2. hstackModel (ler) inizi eğitmek için scipy's gibi bir şeyi tek bir seyrek matriste kullanarak seyrek matrisinize birkaç yoğun özelliğinizi ekleyin .
  3. Yalnızca seyrek metin verilerinizi kullanarak bir model oluşturun ve ardından bir model oluşturmak için tahminlerini (sınıflandırma ise olasılıklar) yoğun bir özellik olarak birleştirin (yani: istifleme yoluyla birleştirme). Bu rotaya giderseniz, CV tahminlerini sadece modelinizi eğitmek için özellikler olarak kullanmayı unutmayın, aksi takdirde oldukça kötü bir şekilde fazla giyeceksiniz (eğer isterseniz bunu tek bir sınıfta yapmak için oldukça sınıf yapabilirsiniz Pipeline).

Her üç yaklaşım da geçerlidir ve kendi artıları ve eksileri vardır. Şahsen, (1) 'in tipik olarak en kötü olduğunu düşünüyorum, çünkü nispeten konuşursak, son derece yavaş. Ayrıca (3) 'ün hem en iyisi olduğunu hem de yeterince hızlı olduğunu ve çok iyi tahminlerle sonuçlandığını düşünüyorum. Daha kapsamlı bir gruplaşma yapmak istiyorsanız, bunların bir kombinasyonunu da yapabilirsiniz.

Kullandığınız algoritmalara gelince, hepsi bu çerçeveye sığabilir. Lojistik regresyon çoğu zaman şaşırtıcı bir şekilde iyi performans gösterir, ancak diğerleri eldeki probleme ve bunları ne kadar iyi ayarladığınıza bağlı olarak daha iyi olabilir. Ben kendim GBMs kısmi, ama sonuçta istediğiniz kadar algoritma deneyebilirsiniz ve hatta tahminlerinin basit ağırlıklı toplulukları yapmak neredeyse her zaman daha iyi bir genel çözüm yol açacaktır.


10

Doğrusal modeller, özelliklerini karşılık gelen ağırlıklarla çarparak basitçe ekler. Örneğin, her örnekte yalnızca 3 veya 4'ü aktif 1000 seyrek özelliğiniz varsa (ve diğerleri sıfırdır) ve tümü sıfır olmayan 20 yoğun özelliğe sahipseniz, yoğun özelliklerin çoğunu yapması muhtemeldir. seyrek özellikler ise etkisi sadece küçük bir değer katacaktır. Birkaç örnek için özellik ağırlıklarına ve bunların sonuçtaki toplamı nasıl etkilediğine bakarak bunu kontrol edebilirsiniz.

Bunu düzeltmenin bir yolu, katkı modelinden uzaklaşmaktır. İşte birkaç aday model.

SVM hiperplanları ayırmaya dayanır. Hiper düzlem doğrusal model olmasına rağmen, SVM parametrelerini özetlemez, bunun yerine özellik alanını en iyi şekilde bölmeye çalışır. Özelliklerin sayısı göz önüne alındığında, doğrusal SVM'nin iyi çalışması gerektiğini söyleyebilirim, ancak daha karmaşık çekirdekler verileri geçersiz kılabilir.

İsmine rağmen, Naive Bayes metin sınıflandırması için iyi sonuçlar veren oldukça güçlü bir istatistiksel modeldir. Ayrıca, seyrek ve yoğun özelliklerin frekansındaki dengesizliği yakalamak için yeterince esnektir, bu yüzden kesinlikle denemelisiniz.

Son olarak, rastgele ormanlar bu durumda iyi bir topluluk yöntemi olarak çalışabilir. Rasgeleleştirme, farklı ağaçlarda farklı türde özelliklerin (seyrek / yoğun) birincil karar düğümleri olarak kullanılmasını sağlayacaktır. RF / karar ağaçları da özellikleri kendileri denetlemek için iyidir, bu nedenle yapılarını yine de not etmeye değer.

Tüm bu yöntemlerin sizin durumunuzda onları çöp haline getirebilecek dezavantajları olduğunu unutmayın. Seyrek ve yoğun özelliklerin taranması gerçekten iyi çalışılmış bir görev değildir, bu nedenle bu yaklaşımlardan hangisinin durumunuz için en iyi olduğunu bize bildirin.


Cevabınız için teşekkür ederim! İki takip sorum var :) 1) SVM (doğrusal bir çekirdek ile) ve Naive Bayes, özelliklerini ve karşılık gelen ağırlıkları (yani "ek model" olarak adlandırdığınız) özetlememeleri açısından nasıl farklıdır? Her ikisi de etkili bir şekilde ayırıcı bir hiper düzlem oluşturur, bu nedenle sonuç her zaman karşılık gelen ağırlıklarla çarpılan bir çeşit özellik ekleme değildir? 2) Rastgele ormanları denemek istiyorum, ancak maalesef özellik alanı onu yoğun biçimde temsil etmek için çok büyük (sklearn kullanıyorum). Bununla başa çıkabilecek bir uygulama var mı?
elmille

1) doğrusal regresyon 'de noktaların ilgilenen edilir üzerine böylece tahmin noktayı almak için ağırlıklı özellikler eklemek, hiperdüzleminin. SVM'de ise hiper düzlemin kenarlarında noktalar arıyorsunuz . Sınıflandırmayı, hangi tarafın örnek olduğunu basit bir şekilde kontrol ederek yaparsınız, tahmin sırasında herhangi bir toplam söz konusu olmaz. Naif Bayes farklı türde modeller içerebilir (örneğin binom veya multinom), ancak temel olarak olasılıkları çoğaltırsınız, eklemezsiniz.
Ağustos'ta arkadaş

2) Bu konuda bazı araştırmalar gördüm, ancak hiç uygulama ile karşılaşmadım (muhtemelen googling burada bazı bağlantılar verecektir). Bununla birlikte, her zaman başka bir yoldan gidebilirsiniz - örneğin PCA ile boyutsallığı azaltın ve daha sonra azaltılmış veri kümesine dayalı olarak rastgele ormanı çalıştırın.
Ağustos'ta arkadaş
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.