Bir özellik vektörü elde etmek için kelime gömme işlemlerini tüm belgeye uygulayın


38

Denetimli öğrenme ile kullanıma uygun bir belgeyi özellik vektörüne eşlemek için gömme kelimesini nasıl kullanırım?

Bir kelime gömme her kelime haritalar bir vektör burada, , bazı değil çok sayıda (örneğin, 500) 'dir. Popüler kelime kalıplamaların dahil word2vec ve Eldiven .v R d dwvRdd

Belgeleri sınıflandırmak için denetimli öğrenmeyi uygulamak istiyorum. Şu anda her belgeyi bir sözcük dizisi temsili kullanarak bir özellik vektörüyle eşleştiriyorum, sonra hazır bir sınıflandırıcı kullanıyorum. Sözcük gömme kelimesinde yer alan semantik bilgiden yararlanmak için, sözcük torbası özellik vektörünü, önceden eğitilmiş sözcük gömme temelli bir şeyle değiştirmek istiyorum. Bunu yapmanın standart bir yolu var mı?

Bazı olasılıkları hayal edebiliyorum, ama en mantıklı olan bir şey olup olmadığını bilmiyorum. Aday yaklaşımları düşündüm:

  • Belgedeki her kelime için vektörü hesaplayabilir ve hepsini ortalayabilirim. Ancak, bu çok fazla bilgi kaybedebilir gibi görünüyor. Mesela, sözcüklerin temsili ile, sınıflandırma göreviyle oldukça ilgili birkaç kelime varsa ve çoğu kelime ilgisizse, sınıflandırıcı kolayca öğrenebilir; Belgedeki tüm kelimeler için vektörleri ortalamalandırırsam, sınıflandırıcının şansı yoktur.

  • Vektörlerin bütün kelimeler için birleştirilmesi işe yaramaz çünkü sabit boyutlu bir özellik vektörüne yol açmaz. Ayrıca kötü bir fikir gibi gözüküyor çünkü bir kelimenin spesifik yerleşimine aşırı duyarlı olacak.

  • Tüm kelimelerin kelime dağarcığını sabit bir küme kümesine koymak için gömme kelimesini kullanabilirim, örneğin, vektörlerdeki kosinüs benzerliğini bir kelime benzerliği ölçüsü olarak kullanıyorum. Yerine torba-of-the kelimelerin Sonra, ben bir çanta-of-kümeleri olabilir:, 1000 vektör olabilir classifer için özellik vektörü ben kaynağını nereden inci bileşen sayıları belgede o sözcük sayısı kümenin bir parçasıdır .benii

  • kelimesi verildiğinde , bu kelime gömme işlemleri ve benzerlik puanlarını en benzer 20 kelimeden bir küme hesaplamama izin . Bunu kullanarak sözcük çantası benzeri bir özellik vektörünü uyarlayabilirim. Kelimesini görünce kelimeye karşılık gelen elemanının artan ek olarak, ile , ayrıca sözcüğüne karşılık elemanı artırmak olabilir ile sözcüğüne karşılık elemanı artırmak, ile , vb.w 1 , , w 20 s 1 , , s 20 w w 1 w 1 s 1 s 2 s 2ww1,,w20s1,,s20ww1w1s1w2s2

Belge sınıflandırma için iyi çalışması muhtemel herhangi bir özel yaklaşım var mı?


Paragraf2vec veya doc2vec aramıyorum; bunlar büyük veri birimlerinde eğitim gerektirir ve benim büyük bir veri şirketim yok. Bunun yerine, varolan bir kelimeyi gömmek kullanmak istiyorum.


1
Önceden eğitilmiş yerleştirmeleri kullanarak belgeleri göstermek için belirli bir yönteme karar verdiniz mi? Belki bu biraz yardımcı olabilir?
turdus-merula

1
@ user115202, temiz! Bu benim sahip olduğum problemi tam olarak çözmüyor, fakat bilmeye değecek zekice bir fikir - açıkladığınız için teşekkürler! Bu soruna hiçbir zaman çok iyi bir çözüm bulamamıştım. Belki bu sadece kelime gömülmelerinin iyi olduğu şey değildir. Teşekkürler!
DW

Bu, aynı zamanda probleminizle de ilgilidir, muhtemelen öncekinden biraz daha fazla: Ağırlıklı kelime gömme toplamasını kullanarak çok kısa metinler için öğrenme gösterimi .
turdus-merula 6:16


1
Neden bir RNN kullanmıyorsunuz? Değişken uzunluktaki belgeler RNN'ler için bir sorun değildir. wildml.com/2015/09/…
kalu

Yanıtlar:


23

Kısa metinler (örneğin, bir cümle ya da tweet) için oldukça iyi görünen basit bir teknik, belgedeki her bir kelime için vektörü hesaplamak ve daha sonra koordinatlı ortalama, min veya maks kullanarak bunları toplamaktır.

Son bir makaledeki sonuçlara dayanarak, min ve maks kullanmanın oldukça iyi çalıştığı görülmektedir. En uygun değil, fakat basit ve diğer basit teknikler kadar iyi veya daha iyi. Özellikle, belgedeki kelimelerinin vektörleri , o zaman hesaplarsınız. ve . Burada yani koordinat-bilge minimum alıyorsun, asgari bir vektörüdür öyle ki ve benzer şekilde maks. Özellik vektörü bu iki vektörün birleşmesidir, bu nedenle bir özellik vektörü elde ederizh 1 , v 2 , ... , V nR d dak ( v 1 , ... , v , n ) max ( v 1 , ... , v , n ) u u ı = dakika ( v 1 i , ... , v , n i ) R, 2 dnv1,v2,,vnRdmin(v1,,vn)max(v1,,vn)uui=min(vi1,,vin)R2d. Bunun kelime başına bir temsilden daha iyi veya daha kötü olup olmadığını bilmiyorum, ancak kısa belgeler için sözcüklerden daha iyi performans göstereceğinden şüpheleniyorum ve önceden eğitilmiş kelime yerleştirmelerinin kullanılmasına izin veriyor.

TL; DR: Şaşırtıcı bir şekilde, minimum ve maksimum değerlerin birleştirilmesi oldukça iyi çalışıyor.

Referans:

Çok kısa metinler için ağırlıklı kelime gömme toplamasını kullanarak öğrenme gösterimi. Cedric De Boom, Steven Van Canneyt, Thomas Demeester, Bart Dhoedt. Örüntü Tanıma Harfleri; arXiv: 1607,00570. Özet , pdf . Özellikle Tablo 1 ve 2'ye bakınız.

Kredi: Bu kağıdı dikkatime sunduğunuz için @ user115202'ye teşekkür ederiz.


4
kısa metinler için avg / min / max iyi çalışabilir, ancak haber makalesi gibi uzun metinler ne olur?
avokado

1
Bu makaleyi okuyan ve benim gibi kafam karışan herkes için: makale @DW tarafından belirtilen yaklaşıma odaklanmıyor, sadece kısaca "5.1. Baselines" altında temel bir yaklaşım olarak bahsediyorlar. Makalenin gövdesi, burada belirtilen yaklaşımdan çok daha karmaşık olan, yerleştirmeler kullanarak bir sınıflandırıcı eğitimi içeren kendi tekniklerine odaklanır!
Migwell

16

Word2vec'e benzer doc2vec'i kullanabilir ve büyük bir korpustan önceden eğitilmiş bir model kullanabilirsiniz. Sonra .infer_vector()bir belge vektörü oluşturmak için gensim'deki gibi bir şey kullanın . Doc2vec eğitiminin eğitim setinden gelmesi gerekmez.

Başka bir yöntem ise, bir RNN, CNN kullanmak veya sınıflandırmak için ileri besleme ağını kullanmaktır. Bu, kelime vektörlerini etkili bir şekilde bir belge vektöründe birleştirir.

Birbirini tamamlamak için seyrek özellikleri (sözcükleri) yoğun (sözcük vektörü) özellikleriyle birleştirebilirsiniz. Bu yüzden, özellik matrisiniz, çok geniş bir kelime matrisi torbasıyla sözcük vektörlerinin ortalamalarının bir araya gelmesi olabilir. https://research.googleblog.com/2016/06/wide-deep-learning-better-together-with.html

Başka ilginç bir yöntem de word2vec'e benzer bir algoritma kullanmaktır, ancak bir hedef kelimeyi tahmin etmek yerine, bir hedef etiketi tahmin edebilirsiniz. Bu, doğrudan vektör kelimelerini sınıflandırma görevine uyarlar. http://arxiv.org/pdf/1607.01759v2.pdf

Daha fazla geçici yöntem için, sözdizimine bağlı olarak sözcükleri farklı şekilde tartmayı deneyebilirsiniz. Örneğin, fiilleri belirleyicilerden daha güçlü bir şekilde tartabilirsiniz.


6

İngilizce metinle çalışıyorsanız ve önceden eğitilmiş kelime yerleştirmelerinin başlamasını istiyorsanız, lütfen şuna bakın: https://code.google.com/archive/p/word2vec/

Bu, word2vec'in orijinal C sürümüdür. Bu sürümle birlikte, Google Haberler makalelerinden alınan 100 milyar kelime üzerinde eğitilmiş bir model yayınladılar ("Önceden eğitilmiş kelime ve cümle vektörleri" başlıklı alt bölüme bakın).

Benim düşünceme ve kelime gömme üzerine çalışma deneyimine göre, belge sınıflandırma için, doc2vec (CBOW ile) gibi bir model, kelimelerden çok daha iyi çalışır.

Çünkü, küçük bir korpusunuz olduğunu öne sürdüğümde, gömme matrisinizi yukarıda belirtilen önceden eğitilmiş yerleştirmelerle başlatırsınız. Ardından doc2vec kodunda paragraf vektörünü eğitin. Python ile rahat ederseniz, değiştirmenin çok kolay olduğu gensim sürümünü kontrol edebilirsiniz.

Ayrıca, http://arxiv.org/abs/1411.2738 adresindeki word2vec / doc2vec kelimelerinin iç işleyişini ayrıntılarıyla anlatan makaleyi de inceleyin . Bu, gensim kodunu anlamayı çok kolaylaştıracaktır.


1
Önerileriniz için teşekkürler. Gömmek için bir kelime istemiyorum; Önceden eğitilmiş bir kelimeyi nasıl yerleştireceğimi zaten biliyorum (soruma word2vec'ten bahsettim). Benim sorum, önceden eğitilmiş bir sözcük gömme özellikten özellik vektörlerinin nasıl oluşturulacağıdır. Doc2vec referansını takdir ediyorum, ancak benim korpumum oldukça küçük ve bu nedenle doc2vec kodlarını eğitmeye çalışmanın yetersiz olduğunu ve kötü performans göstereceğinden şüpheliyim / korkuyorum (önceden eğitilmiş gömülerle matrisi başlatsam bile).
DW
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.