Evrişimli sinir ağı kullanarak belge sınıflandırması


11

Belgeleri sınıflandırmak için CNN (evriyal sinir ağı) kullanmaya çalışıyorum. Kısa metin / cümleler için CNN birçok makalede incelenmiştir. Ancak, hiçbir makalede uzun metin veya belge için CNN kullanılmamıştır.
Benim sorunum, bir belgede çok fazla özellik olması. Veri kümemde her belgede 1000'den fazla simge / kelime var. Her örneği bir CNN'ye beslemek için word2vec veya eldiven kullanarak her belgeyi bir matrise dönüştürerek büyük bir matris oluştururum. Her matris için yükseklik, belgenin uzunluğudur ve genişlik, sözcük gömme vektörünün boyutudur. Veri setimin 9000'den fazla örneği var ve ağı eğitmek (bir hafta) çok zaman alıyor ve bu da parametrelerin ince ayarını zorlaştırıyor.
Başka bir özellik çıkarma yöntemi, her sözcük için bir sıcak vektör kullanmaktır, ancak bu çok seyrek matrisler oluşturur. Ve elbette, bu yöntemin eğitimi önceki yönteme göre daha fazla zaman alır.
Peki, büyük girdi matrisleri oluşturmadan özellikleri çıkarmak için daha iyi bir yöntem var mı?
Ve değişken uzunluktaki belgeleri nasıl ele almalıyız? Şu anda, belgenin aynı uzunlukta olmasını sağlamak için özel dizeler ekliyorum, ancak bunun iyi bir çözüm olduğunu düşünmüyorum.


2
TfIdf vectorizer kullanımı uygun görünüyor mu? Belki word2vec ile birlikte her belge için sadece en iyi x kelime bırakmak?
Diego

Tfldf'in ne olduğunu bilmiyorum. Çalışıp çalışmadığını kontrol edeceğim. Thank you
lenhhoxung


Sadece kontrol ediyorum ve bana yardımcı olmadığını düşünüyorum. Temel olarak, bu yardımcı sınıf bir dizi belge için bir matris oluşturur. Matristeki her satır vektörü (ikili veya wordcount) bir belgeye karşılık gelir, ancak CNN için her belge için bir matrise ihtiyacımız vardır.
lenhhoxung

Mesele, TfIdf'lerine göre sıralanan belge başına yalnızca x önemsiz olmayan kelime bırakmaktı. Ardından belge matrisleri oluşturmak için orijinal kodlamanızı kullanın. Bu iki aşamalı yaklaşım fikrinin ortaya çıkıp çıkmadığından emin değilim.
Diego

Yanıtlar:


8

Belgelerinizi daha uzun kelime vektörleri yerine bir dizi cümle vektörü olarak temsil ederek giriş verilerinizin uzunluğunu azaltabilirsiniz. Doc2vec bunu yapmanın bir yoludur (her cümle bir "belge" olacaktır).

Doc2vec'i kullanmak istemiyorsanız, cümle vektörlerini oluşturmanın bir yolu, her cümle için sözcük vektörlerini ortalamak ve her cümle için aynı genişlikte tek bir vektör vermek olacaktır. Bu, Doc2Vec aracılığıyla kullanılabilen bazı yöntemler kadar kesin olmayabilir, ancak konu modelleme için büyük bir başarı ile kullandım.

Her iki şekilde de, cümle vektörlerinizi edindikten sonra, sözcük vektörleriniz için zaten yaptığınız gibi bunları her belge için sırayla sıralayın ve ardından modelinizde çalıştırın. Her belge için sıra uzunluğu daha kısa olduğundan, modeliniz sözcük vektörlerinden daha hızlı çalışmalıdır.

Bu arada, bu yöntem doğruluk ve hız ihtiyaçlarınızı karşılamak için yukarı veya aşağı ölçeklendiğinde işe yarayabilir. (örn. CNN'niz hala cümle vektörleriyle çok yavaş çalışıyorsa, bunun yerine paragraf vektörleri oluşturabilirsiniz).

Farklı uzunluktaki belgeleri işlemenin bir yolu doldurmadır. Belge dizilerinizin tümü en uzun belgenize eşit uzunlukta olmalıdır. Dolayısıyla, en uzun belgeniz 400 cümle ise, tüm belge dizileri 400 vektör uzunluğunda olacaktır. Maksimum uzunluktan daha kısa belgeler sıfırlarla dolu vektörlerle doldurulur.


İlginç fikir. Ben deneyeceğim :)
lenhhoxung

Bir soru sorabilir miyim? Cümle vektörlerinde temsil ettiğim bile önemli ölçüde farklı uzunluklarda belgeleri (5 cümle / doc, 500 cümle / doc) nasıl ele alabilirim? Burada
dolgu

1
Konuşma işleminde, bazı insanlar dizileri uzunluğuna göre sıralar, böylece benzer uzunlukta diziler aynı partide olur. Bu, metin dizisi için işe yarayabilir.
suthee

4

Bölge düğünlerini kullanabilirsiniz. Tek tek "belirteçleri" vektörlere dönüştürmek yerine metnin bölgelerini vektörlere dönüştürmek için bir strateji kullanabilirsiniz. Bu yaklaşım burada kullanılır: https://arxiv.org/abs/1504.01255

CNN ile sınırlı değilseniz, bunun gibi hiyerarşik bir dikkat modelleri kullanabilirsiniz: https://www.cs.cmu.edu/~diyiy/docs/naacl16.pdf bu tür bir boru hattınızın olduğu yerlerde: word vectors (combined into) sentence vectors (combined into) final document vector

Bu yöntemle, yine de tüm kelime vektörlerini düğünlere dönüştürmeniz gerekeceğini unutmayın, ancak hepsini bir kerede değil.

Farklı uzunluklardaki belgeleri kullanmak için, dolgu / kesme şimdiye kadar tek çözümdür.

Son olarak, hızı arttırmak için, metnin boyutunu yalnızca önemli bölümleri içererek azaltmaya çalışabilirsiniz (belki de belgenin sadece başlangıcı iyi bir sınıflandırma doğruluğu için yeterlidir)


1
Referans bağlantınız için teşekkürler. Bölgenin gömülmesi ilginçtir. Değişken boyutlu belge ile ilgili olarak, bu makalede belirtildiği gibi arxiv.org/abs/1412.1058 (aynı yazar), dolgu / kesme yerine birden fazla havuzlama birimi kullanabiliriz.
lenhhoxung
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.