2016-04-10 23 views
2

Büyük bir veri kursu projesi üzerinde çalışan bir grubun parçasıyım ve NLP için bir sorun olarak gördüğümüz bir çalışmaya girdik. İlgili bilgi (bir kategoride, popülerlik puanı, ve bir kategori/konu kimliği #) ile ilişkiliDoğal Dil İşleme Konuları

"wine": { 
     "category": "socializing", 
     "category_id": 31, 
     "score": 0.0, 
     "topic_id": 611 
    } 
    "dragons": { 
     "category": "lifestyle", 
     "category_id": 17, 
     "score": 0.279108277990115, 
     "topic_id": 2137 
    }, 
    "furry-fandom": { 
     "category": "lifestyle", 
     "category_id": 17, 
     "score": 0.279108277990115, 
     "topic_id": 48595 
    }, 
    "legendarycreatures": { 
     "category": "lifestyle", 
     "category_id": 17, 
     "score": 0.279108277990115, 
     "topic_id": 10523 
    } 

etiketler konuları: Şu anda gibi JSON biçimlendirilmiş veri grupları var. Her bir konu için, ele aldığımız API’den bu yana, zaten bir kategori var. Bizim sorunumuz, kategorilerin çok geniş, sadece 33'le, anlamlı eğilimleri tanımlamak için çok geniş olması ve konuların çok özel w/örtüşmeleri (örneğin ejderhalar/efsaneler) ve yaklaşık 22.000 ile çok fazla olması.

NLP'nin geldiği yer burası; "kategori" kadar geniş olmayan, ancak güncel konular kadar spesifik olmayan bir dizi süper konu oluşturmak istiyoruz. "Ejderhalar" ve "legandarycreatures" ı kullanan bir örnek, "fantezi" nin süper konusu haline gelecek şekilde, diğerleriyle birlikte, her ikisi de olacaktır.

Biraz daha arka plan, veriyi almak/işlemek için Python kullanıyoruz, bunun için kullanmaya devam etmek istiyoruz ve hiçbirimiz NLP ile hiçbir pratik deneyimimiz yok.

Tüm bunlar göz önünde bulundurulduğunda, bu mücadeleyle ilgili bazı önerilerin ve yardımların yapılmasını isteriz. Daha iyi yollar varsa ya da NLP ile mümkün değilse, onlara açığız. Kaçınmaya çalıştığımız şey, kategorileştirmek için bir çeşit tabloyu kodlamaktır.

TL; DR: Mevcut kategorilerden daha kesin olan ancak geçerli kategorilerden daha geniş olan uygun "süper konular" için 22.000 konu kümesini kategorilere ayırmaya çalışıyoruz. Bunu Python'u kullanırken NLP ile yapmaya çalışıyoruz ama bunun nasıl yapılacağını bilmiyoruz ve önerilere de açık.

+0

http://stackoverflow.com/a/22905260/610569 bir göz atın – alvas

cevap

1

, bu sınıflandırıcı eğitmek için sürecini kolaylaştırmak beri. Metin sınıflandırıcıyı nasıl oluşturacağınız hakkında eğitici here'a bakın. Tabii ki kendi özel probleminizde, sınıflandırmak istediğiniz kaç farklı kategoriyi bulmanız gerekir; Daha sonra, önemli bir eğitim seti (veri kümesine uymaktan kaçınmak için çok fazla değil) sunmak için eğitmeniz gerekir; Bu noktada sınıflandırıcınız

"dragons": { 
"category": "lifestyle", 
"category_id": 17, 
"score": 0.279108277990115, 
"topic_id": 2137 
} 

'un yeni verilerini almaya hazır olacak ve sınıflandırın. Bu noktada sınıflamanızı bir test veri kümesine göre değerlendirmelisiniz. lifestyle

olarak etiketlenmiş

ilk küme: o (bunu yosun olurdu daha büyüğü sağlayabilir) bu mini veri kümesi bakarak bu arada göründüğü gibi Bu çok açık değil, sizin gibi verilerin bazı kümeleri var gibi görünüyor

"dragons": { 
    "category": "lifestyle", 
    "category_id": 17, 
    "score": 0.279108277990115, 
    "topic_id": 2137 
}, 
"furry-fandom": { 
    "category": "lifestyle", 
    "category_id": 17, 
    "score": 0.279108277990115, 
    "topic_id": 48595 
}, 
"legendarycreatures": { 
    "category": "lifestyle", 
    "category_id": 17, 
    "score": 0.279108277990115, 
    } 

ikinci küme size süper kategorisini tanımlamak için

"wine": { 
     "category": "socializing", 
     "category_id": 31, 
     "score": 0.0, 
     "topic_id": 611 
    } 

socializing etiketli, terimlerin gibi dragons ve legendarycreatures olmak sınıflandırıcı anlatmak zorunda Aynı veri kümesine özetler, buna fantasy numaralı telefonu diyelim.Yani bu sadece bir konu ya da sınıflandırma değil, aynı zamanda metin analizi ve semantiği de değildir: legendarycreatures =>legendary + creatures (kelime torbası), dragons terimine daha yakın olan bir deyişle, word2vec burada yardımcı olabilir Bu isimlerin vektörlerini değerlendirmek ve bunların arkasındaki metrikleri ve bunların arasındaki mesafeyi tanımlamak. İyi bir uygulama gensim tarafından sağlanır.

word2vec'dan bahsediyorum, çünkü bu girişlerin her birinin metni/açıklaması varsa işe yarayacaktır. Son durumda, yalnızca dragons veya legendarycreatures gibi öğenin başlığı için bir metrik tanımlayabilirsiniz.

[GÜNCELLEME] Yani, @rhiever tarafından yapılan Tpot adında "otomatik oluşturur ve Genetik programlama ile makine öğrenme boru hatlarına optimize" yepyeni bir teknik kullanarak doğru sınıflandırma algoritması bulmak için nasıl anlamaya çalışıyorum

Bu durumda, araç denetlenen veri kümesi biçiminde sunulması gereken özellikler vektörlerini (word2vec'ten) girdi olarak ister. İşte discussion, bu iyi bir başlangıç ​​noktasıdır.

+0

İşte ben birkaç farklı veri setleri şunlardır: (http://txt.do/5wvo8) (http: // txt. do/5wvj6) Bunlar sahip olduğumuz en küçükler; Diğerleri ile büyüklükteki GB'lere yakın ve çok daha çeşitli. –

+0

tamam bir göz atalım ... – loretoparisi

+0

@AustinHoller Bu konuyu daha yeni analizlerle güncelledim, şimdi iyi bir başlangıç ​​noktası var. – loretoparisi

1

Bu tipik bir sınıflandırma sorunudur. Python'u kullanmak isterseniz, Natural Language ToolKit'i (NLTK), özellikle de nltk.classify paketini kullanmanızı tavsiye ederim. Sınıflandırma için NLTK kullanmanın iyi bir tanıtımı ve genel bakış burada bulunabilir: http://www.nltk.org/book/ch06.html. nltk.classify üzerinde fazla bilgiye ulaşmak için: Ben TextBlob önerir

>>> import nltk 
>>> help(nltk.classify)