Doğal dil işleme problemini çözmek için, konuları çıkarırken son derece yararlı bir teknik olan konu modeli adı verilen bir metin madenciliği yöntemi vardır.Python'da konu modeli nedir? Konu modeli ne zaman kullanılır? Python'da gizli anlamsal analiz kullanın Konu modelini çözerken hangi sorunlara dikkat edilmelidir? Bu makaleyi okuduktan sonra, en somut kazanımlara sahip olacağınıza inanıyorum!
ÖnsözHiç bakımlı bir kütüphaneye gittiniz mi? Bu kütüphaneciler çok takdire şayan, kitapları isme, içeriğe veya konuya göre sınıflandırıyorlar ve her şeyi düzenli bir şekilde yönetiyorlar. Ama onlara binlerce kitap atıp kitap türüne göre sıralamalarını istersen, bırakın bir saat içinde, bir günde bitiremeyebilirler.
Ancak, bu kitapların tümü elektronik metinlerse, sınıflandırma işi herhangi bir insan gücü olmadan birkaç saniye alabilir. Yaşasın doğal dil işleme!
Önce aşağıdaki metin parçasına bakın:
Arka plan metnine referansla, üç tema (veya kavram) olduğunu görebilirsiniz - tema 1, tema 2 ve tema 3. İyi bir konu modeli, benzer ifadeleri belirleyebilir ve bunları tek bir kategoride gruplayabilir. Yukarıdaki örnekteki en belirgin konu, esas olarak sahte görüntülerin içeriğinden bahseden konu 2'dir.
İlginç? bu iyi! Bu makale, konu modeli adı verilen bir metin madenciliği yöntemini tanıtır. Bu, konuları çıkarırken son derece yararlı bir tekniktir ve doğal dil işleme problemleriyle uğraşırken de çok yaygındır.
İpucu: Tekil değer ayrıştırması (SVD) ve UMAP (https://www.analyticsvidhya.com/blog/2018/08/dimensionality-reduction-techniques-python/) gibi kavramları anlamak için bu makaleyi okumanız önemle tavsiye edilir. Bu makale bu kavramlara dayanmaktadır, bu nedenle önce onları öğrenmek, temel kavramları anlamamızı güçlendirmeye yardımcı olacaktır.
içindekilerKonu modeli, çeşitli metin belgelerindeki konuları keşfetmek için kullanılan denetimsiz bir tekniktir. Bu konular doğası gereği soyuttur, yani birbirleriyle ilişkili kelimeler konuları oluşturur. Aynı zamanda, tek bir belgede birden çok konu olabilir. Bu makalede, konu modeli, aşağıdaki şekilde gösterildiği gibi geçici olarak bir kara kutu olarak anlaşılmaktadır:
Bu kara kutu (yani konu modeli), ilgili cümleleri konular adı verilen farklı gruplara ayırır. Bu konuların metinde belirli bir dağılımı vardır ve her konu farklı oranlarda kelime kombinasyonları ile tanımlanabilir.
2. Konu modelleri ne zaman kullanılmalı?Daha önce bahsedilen kitapları düzenleme görevini hatırlayın. Şimdi elektronik belgeleri sınıflandırmanız gerektiğini hayal edin. Elbette, dokümantasyon nispeten küçükse, bu görevi manuel olarak tamamlayabilirsiniz. Peki ya çok fazla belge varsa?
Şu anda, doğal dil işleme teknolojisi kullanılmalıdır. Bu görev için, konu modeli tamamlanacak.
Konu modelleri, büyük metin verilerini, kümelenmiş ifadeleri keşfetmemize, metinler arasındaki benzerlikleri bulmamıza ve soyut konuları keşfetmemize yardımcı olabilir. Bu görevlerin yeterince zor olmadığını düşünüyorsanız, konu modeli arama motorundaki arama metniyle eşleşen sonuçlar da bulabilir. İlginç değil mi? Araştırmaya devam edelim!
3. Gizli Anlamsal Analiz (LSA)Tüm dillerin kendi karmaşıklıkları ve ince özellikleri vardır ve makinelerin bu içerikleri yakalaması zordur (bazen insanlar için bunları ayırt etmek zordur). Örneğin, farklı sözcükler aynı anlama sahip olabilir ve aynı sözcük farklı anlamlara sahip olabilir.
Şu iki cümleye bakalım:
1. Sonuncusunu beğendim Roman oldukça fazla.
2. Gitmek istiyoruz Roman Pazarlama kampanyası.
Birinci cümlede "roman" bir kitabı ifade ederken, ikinci cümlede roman ve roman anlamına gelir.
Bu iki kelimenin anlamını bağlamdan kolayca çıkarabiliriz, ancak makine bu kavramı yakalayamaz çünkü kelimelerin kullanıldığı bağlamı anlayamaz. Şu anda, kelime öbekleri arasındaki bağlama dayalı olarak arkasındaki anlamı bulabilen gizli anlambilimsel analizi kullanmamız gerekiyor, bu da bahsettiğimiz şeydir.
Bu nedenle, cümleleri belgelerle basitçe eşlemek mutlaka etkili değildir, ihtiyacımız olan şey kelimelerin arkasındaki kavramları ve konuları anlamaktır. Gizli semantik analiz, gizli konuları bulmanın bir yoludur.Şimdi gizli semantik analizin dahili çalışma mekanizmasını inceleyelim.
Gizli anlamsal analizin uygulama adımlarıÖrneğin, m belgemiz var Belgelerde n benzersiz kelime var Tüm belgelerden k konu çıkarmamız gerekiyor. Burada k, kullanıcı tarafından tanımlanan konuların sayısını temsil eder.
Aşağıda, konu modelleri problemini çözmek için Python'da gizli anlamsal analizin nasıl kullanılacağını sunuyoruz. Python'u açtıktan sonra, aşağıda bahsettiğim adımları izleyerek kodu çalıştırmaya başlayabilirsiniz.
4.1 Veri okuma ve görüntülemeÖnce aşağıdaki paketleri yükleyin:
numpy'yi np olarak içe aktar
pandaları pd olarak içe aktar
matplotlib.pyplot dosyasını plt olarak içe aktar
seaborn'u sns olarak ithal etmek
pd.set_option ("display.max_colwidth", 200)
Bu makalede sklearnin '20 Haber Grubu 'veri kümesini kullanacağız. Veri setini buradan indirebilir ve kodu çalıştırabilirsiniz.
sklearn.datasets'den fetch_20newsgroups içe aktar
dataset = fetch_20newsgroups (shuffle = True, random_state = 1, remove = ('headers', 'footers', 'quotes'))
belgeler = dataset.data
len (belgeler)
Çıkış: 11,314
dataset.target_names
Veri seti, 20 farklı haber medyasından 11.314 metin dokümanı içermektedir.
4.2 Veri ön işlemeBaşlangıçta metin verilerini olabildiğince temizlemek istiyoruz. Temel ilke, yerine koyma ("") koduyla harfler ve boşluklar dışındaki tüm karakterleri kaldırmak için normal ifadeler kullanmaktır. Daha sonra bazı kısa kelimeleri hariç tutacağız çünkü bunlar genellikle yararlı bilgiler içermiyorlar. Son olarak, tanımanın büyük / küçük harfe duyarlı olmaması için tüm metni küçük harflere dönüştürüyoruz.
news_df = pd.DataFrame ({'belge': belgeler})
# alfabe dışındaki her şeyi kaldırma`
news_df = news_df.str.replace ("", "")
# kısa kelimeleri kaldırmak
news_df = news_df.apply (lambda x: ".join ())
# tüm metni küçük harf yap
news_df = news_df.apply (lambda x: x.lower ())
Durdurma kelimelerinin silinmesi gereklidir çünkü bunlar genellikle düzensizdir ve herhangi bir bilgi aktarmazlar. Durduran kelimeler arasında "o", "onlar", "am", "olmuş", "yaklaşık", "çünkü", "süre" vb. Yer alır.
Durdurma sözcüğünü belgeden kaldırmak için önce belge dizesini işaretlememiz, yani dizeyi ayrı etiketlere veya sözcüklere bölmemiz gerekir. Durdurma kelimelerini kaldırdıktan sonra, bu içerikleri yeniden bağlayacağız.
nltk.corpus'tan içe aktarma engellenecek kelimeleri
stop_words = stopwords.words ('ingilizce')
# tokenization
tokenized_doc = news_df.apply (lambda x: x.split ())
# durdurulan kelimeleri kaldır
tokenized_doc = tokenized_doc.apply (lambda x :)
# tokenizasyon
detokenized_doc =
aralıktaki i için (len (news_df)):
t = '' .join (tokenized_doc )
detokenized_doc.append (t)
news_df = detokenized_doc
4.3 Metin-kelime matrisiBu, bir konu modeli oluşturmanın ilk adımıdır. 1000 kelimelik bir metin-kelime matrisi oluşturmak için sklearn'ın TfidfVectorizer fonksiyonunu kullanacağız.
sklearn.feature_extraction.text'den import TfidfVectorizer
vectorizer = TfidfVectorizer (stop_words = 'ingilizce',
max_features = 1000, # ilk 1000 terimi koru
max_df = 0.5,
smooth_idf = Doğru)
X = vectorizer.fit_transform (news_df)
X.shape # belge terim matrisinin kontrol şekli
(11314, 1000)
Matrisi oluşturmak için aslında tüm kelimeleri kullanabiliriz, ancak bu çok fazla hesaplama zamanı ve kaynağı boşa harcar. Bu nedenle özellik sayısını 1000 ile sınırlandırıyoruz. Yeterli bilgi işlem kaynağınız varsa, tüm kelimeleri ele almanızı öneririm.
4.4 Tema modeliBir sonraki adım, her kelimeyi ve belgeyi bir vektör olarak temsil etmektir. Belge-kelime matrisini çoklu matrislere indirgemek için sklearn'ın TruncatedSVD fonksiyonunu kullanacağız.
Veriler 20 farklı haber medyasından geldiği için 20 konu belirledik. Konu sayısı n_components parametresi ile ayarlanabilir.
sklearn.decomposition'dan import TruncatedSVD
# SVD, vektörlerdeki belgeleri ve terimleri temsil eder
svd_model = KesilmişSVD (n_components = 20, algoritma = 'randomize', n_iter = 100, random_state = 122)
svd_model.fit (X)
len (svd_model.components_)
20
Svd_model'in bileşenleri temalarımızdır ve bu temaları almak için svd_model.components'ı kullanabiliriz. Son olarak, bu 20 konunun her birindeki daha önemli kelimeleri çıkaralım ve modelimizin nasıl sonuçlandığını görelim.
terimler = vectorizer.get_feature_names ()
i için numaralandırmada comp (svd_model.components_):
terms_comp = zip (terimler, bileşim)
sıralanmış_terms = sıralı (terms_comp, key = lambda x: x, reverse = True)
print ("Konu" + str (i) + ":")
sıralanmış_terms içinde t için:
baskı (t)
Yazdır(" ")
Konu 0: İnsanların iyi vakit geçirdiğini bilmek gibi teşekkürler
Konu 1: Teşekkürler Windows Card Drive Mail File Advance
Konu 2: Oyun Takımı Yıl Oyunları Sezon Oyuncuları İyi
Konu 3: sürücü scsi disk sabit kart sürücüleri sorunu
Konu 4: Windows dosya penceresi dosyaları programı kullanarak sorun
Konu 5: Hükümet çipli posta alanı bilgileri şifreleme verileri
Konu 6: Bisikletin çip seslerinin nasıl göründüğünü bilmesi gibi
Konu 7: Kart satışı video teklifi monitör fiyatı İsa
Konu 8: Kart çipini tanıyın video hükümet insanları kesme makinesi
Konu 9: İyi Zaman Bisikleti İsa Problemi Çalışması
Konu 10: Çipi iyi düşünün, teşekkürler Clipper şifrelemeye ihtiyaç duyar
Konu 11: Teşekkürler, Doğru Problem İyi Bisiklet Zaman Aralığı
Konu 12: İyi insanlar Windows dosya satış dosyalarını bilir
Konu 13: Uzay, Düşünüyorum, Nasa Sorunu Yıl İsrail
Konu 14: Uzay İyi Kart İnsanlar Zaman Nasa Teşekkürler
Konu 15: İnsanlar pencere zamanı sorunu oyunu bisiklet istiyor
Konu 16: Zaman Bisikleti Sağ Windows Dosyası Gerçekten Gerekiyor
Konu 17: Zaman Sorunu Dosyası İsrail Uzun Postasını Düşün
Konu 18: Dosya karta ihtiyaç duyuyor dosya sorunu doğru iyi
Konu 19: Kullanılan uzay çipi satışı sayesinde sorun dosyası
4.5 Tema görselleştirmeTemamızın ayırt edici olup olmadığını bilmek için onu görselleştirmemiz gerekir. Elbette bilgiyi üçten fazla boyutta görselleştiremiyoruz. Ancak temel bileşen analizi (PCA) veya t-SNE kullanarak, yüksek boyutlu verileri görüntüleme için düşük boyutlu görselleştirmeye koyabiliriz. Burada, UMAP (Tekdüzen Manifold Yaklaşımı ve Projeksiyon) adı verilen nispeten yeni bir teknoloji kullanacağız.
umap içe aktar
X_topics = svd_model.fit_transform (X)
katıştırma = umap.UMAP (n_neighbors = 150, min_dist = 0.5, random_state = 12) .fit_transform (X_topics)
plt.figure (figsize = (7,5))
plt.scatter (katıştırma, katıştırma,
c = dataset.target,
s = 10, # boyut
edgecolor = 'yok'
)
plt.show ()
Yukarıdaki resimden sonucun daha güzel olduğunu görebiliyoruz. Her nokta bir belgeyi temsil ediyor ve farklı renkler 20 haber medyasını temsil ediyor.Öyle görünüyor ki LSA modelimiz çok etkili. Resmin neyi değiştireceğini görmek için UMAP parametrelerini değiştirebilirsiniz.
Makaledeki tüm kod GitHub'da bulunabilir.
(Https://github.com/prateekjoshi565/latent_semantic_analysis)
5. LSA'nın avantajları ve dezavantajlarıYukarıdaki örnekte, gizli semantik analizin gücünü görebiliriz, ancak yine de kendi sınırlamaları vardır. LSA'nın avantajlarını ve dezavantajlarını anlamalıyız, böylece onu ne zaman seçeceğimizi ve diğer yöntemleri ne zaman deneyeceğimizi bilelim.
avantaj:LSA'ya ek olarak, LDA ve lda2Vec gibi başka gelişmiş ve etkili konu modeli teknolojileri de vardır. Ayrıca size referans sağlayabilecek LDA hakkında iyi bir makale yazdık. Lda2vec, word2vec kelime yerleştirmeye dayanan çok daha gelişmiş bir konu modeli yöntemidir.
son sözlerBu yazıda öğrenme deneyimimi paylaşıyorum. Konu modeli çok ilginç bir şey, birçok metin veri setiyle başa çıkmanıza yardımcı olabilir. Bu nedenle, diğer veri kümelerindeki sorunu çözmek için bu makaledeki kodu kullanmanızı öneririm. Metin madenciliğinin tadını çıkarın!
Derleyici grubu: Huang Tianyuan, Hu Ting İlgili bağlantılar: https://www.analyticsvidhya.com/blog/2018/10/stepwise-guide-topic-modeling-latent-semantic-analysis/ Yeniden yazdırmanız gerekirse, lütfen arka planda bir mesaj bırakın ve takip edin Yeniden yazdırma özelliği