2013-05-29 17 views
5

Farklı yazı stillerini sınıflandırmam gereken bir doğal dil işleme projesi üzerinde çalışıyorum. Metinlerin semantik özelliklerinin benim için çoktan çıkarıldığını varsayarsak, diğer metinleri sınıflandırmak için kullanılabilecek bu özellikleri kullanarak SVM sınıflandırıcılarını eğitmek için Java'da Weka'yı kullanmayı planlıyorum.Doğal Dil İşleme - Özellik Özelliklerine Metin Özelliklerini Dönüştürme

Sorun yaşadığım bölüm bir SVM'yi eğitmek için özelliklerin bir özellik vektörüne dönüştürülmesi gerektiğidir. Kelime zenginliği, n-gram, noktalama işareti, paragraf sayısı ve paragraf uzunluğunun özelliklerini bir vektörde sayı olarak nasıl gösterebileceğinizi bilmiyorum. Birisi doğru yöne işaret ederse, bu büyük takdir edilecektir.

+0

Tam olarak aradığınızdan emin değilsiniz, ancak umarım küçük örneğim size yardımcı olacaktır. İyi şanslar. –

cevap

5

Ben senin nitelikleri üzerinde alabilecekleri değerlerin ne olduğundan emin değilim, ama belki de bu örnek size yardımcı olacaktır:

bir dönem bir cümlenin sonunu belirlemek için denemek için denetimli öğrenme deneyi yapıyorlar varsayalım ya da değil, EOS ve NEOS. eğitim verileri bir paragraf stili formatında Normal cümle geldi, ancak aşağıdaki vektör modeline dönüştürülmüştür:

  • Sütun 1: Sınıf: Sonu Cümle-of or Not-Sonu Cümle
  • Sütunlar 2-8: Söz konusu dönemi çevreleyen +/- 3 sözcük
  • Sütunlar 9,10: Bir sonraki güvenilir cümle sınırlayıcısından önceki dönemin sırasıyla sol/sağdaki sözcük sayısı (ör.?,! Veya paragraf işareti).
  • Sütun 11: Döneme ait boşluk sayısı.

Elbette, bu çözmek için çok karmaşık bir sorun değil, ama Weka'ya hoş bir giriş. Kelimeleri sadece kelimeler olarak kullanamayız (gerçekten yüksek boyutlu alan), ama onların POS (konuşma bölümleri) etiketlerini alabiliriz. Ayrıca, kelimenin büyük/küçük harfli olmasına rağmen sözcüklerin uzunluğunu da çıkarabiliriz.

Bu yüzden, yukarıdaki vektör modeline dönüştürebildiğiniz ve verileri ayıklayabildiğiniz sürece, verileri test verileri olarak besleyebilirsiniz. .arff'ta kullanılan özellikler.

.arff dosyanın aşağıdaki (çok küçük bir kısmı) bir cümlede bir dönem sonunu veya olmasın işaretli olmadığını belirlemek için kullanıldı

: Gördüğünüz gibi

@relation period 

@attribute minus_three {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute minus_three_length real 
@attribute minus_three_case {'UC','LC','NA'} 
@attribute minus_two {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute minus_two_length real 
@attribute minus_two_case {'UC','LC','NA'} 
@attribute minus_one {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute minus_one_length real 
@attribute minus_one_case {'UC','LC','NA'} 
@attribute plus_one {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute plus_one_length real 
@attribute plus_one_case {'UC','LC','NA'} 
@attribute plus_two {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute plus_two_length real 
@attribute plus_two_case {'UC','LC','NA'} 
@attribute plus_three {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute plus_three_length real 
@attribute plus_three_case {'UC','LC','NA'} 
@attribute left_before_reliable real 
@attribute right_before_reliable real 
@attribute spaces_follow_period real 
@attribute class {'EOS','NEOS'} 

@data 

VBP, 2, LC,NP, 4, UC,NN, 1, UC,NP, 6, UC,NEND, 1, NA,NN, 7, LC,31,47,1,NEOS 
NNS, 10, LC,RBR, 4, LC,VBN, 5, LC,?, 3, NA,NP, 6, UC,NP, 6, UC,93,0,0,EOS 
VBD, 4, LC,RB, 2, LC,RP, 4, LC,CC, 3, UC,UH, 5, LC,VBP, 2, LC,19,17,2,EOS 

, her özelliğiyle ilgili alabilir ne olursa olsun

  • real Ben sırasıylabüyük harf ve küçük harf belirtmek için LC ve UC oluşan
  • gerçek sayısını gösterir: siz istediğiniz diğer değerlerin çoğu etiketler

Sen özellikleri tam olarak ne olduğunu anlamaya gerekir ve temsil etmek kullanacağız hangi değerleri/onları sınıflandırmak vardır. Ardından, verilerinizi .arff tarafından tanımlanan biçime dönüştürmeniz gerekir.

Noktalama sorusu soruna dokunmak için, tüm sonuna kadar . veya ? numaralı cümleleri aldığımızı varsayalım.bir veri noktası eksik olduğunda atanan (geleneksel) budur çünkü ? kullanmadım

@attribute punc {'p','q'} 

: İki değerleri alır Punc adlı bir öznitelik, sahip olabilir. Bir karakterin ya da neyin var olduğunuzu (0, 1 ya da false, true) belirten boole niteliklerine sahip olabilirsiniz. Ama kalite için Başka bir örnek: Eğer nasıl belirleriz

@attribute quality {'great','good', 'poor'} 

sınıflandırma size kalmış söyledi, ama yukarıda başlamak gerekir. İyi şanslar.

+0

Mümkün olduğunca detaylı çalışmayı denedim, ancak tablet bilgisayardayım - bu zor. –

İlgili konular