Metin madenciliğine giriş kursu: konu modeli metin veri işlemeyi daha mutlu hale getirir

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öz

Hiç 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çindekiler
  • Konu modeli nedir?
  • Konu modelleri ne zaman kullanılır?
  • Gizli Anlamsal Analiz (LSA)
  • Python'da LSA kullanma
  • 4.1 Veri okuma ve görüntüleme
  • 4.2 Veri ön işleme
  • 4.3 Metin-kelime matrisi
  • 4.4 konu modeli
  • 4.5 Tema görselleştirme
  • LSA'nın avantajları ve dezavantajları
  • Konu modelleri için diğer teknikler
  • 1. Konu modeli nedir?

    Konu 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.

    • TF-IDF puanlarını içeren m * n şeklinde bir belge-kelime matrisi oluşturun.

    • Ardından, yukarıdaki matrisi k boyutuna indirmek için tekil değer ayrıştırma (SVD) yöntemini kullanacağız.
    • Tekil değer ayrışımı (SVD), bir matrisi üç matrise ayrıştırır. Örneğin, A matrisini bozmak için tekil değer ayrışımı (SVD) kullanmak istiyorsak, o zaman matris U, matris S ve matris VT (matris V'nin transpoze matrisi) elde ederiz. Uk matrisinin her satırı (belge-ifade matrisi) belgenin vektör temsilidir. Bu vektörlerin uzunluğu, belirlediğimiz konu sayısı olan k'dir. İfadenin vektör temsili Vk (kelime-konu matrisi) olarak bulunabilir.

    • Bu şekilde, tekil değer ayrıştırma (SVD), verilerimizdeki her belgeyi ve tümceciği vektörleştirir ve her vektörün uzunluğu k'dir. Kosinüs benzerlik yöntemini birleştirebilir ve bu vektörleri benzer ifadeler ve belgeler bulmak için kullanabiliriz.

    4. Python'da gizli anlamsal analiz kullanın

    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şleme

    Baş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 matrisi

    Bu, 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 modeli

    Bir 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ştirme

    Temamı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 hızlı ve uygulanması kolaydır.
    • Etki iyidir, düzlem vektör uzay modelinden çok daha iyidir.
    Dezavantajları:
    • Doğrusal bir modeldir, bu nedenle doğrusal olmayan bağımlılıkları olan veri kümelerinde kötü performans gösterir.
    • LSA, kelimelerin belgede normal olarak dağıtıldığını varsayar, ancak tüm sorular bu varsayımı karşılamaz.
    • LDA, hesaplama açısından yoğun olan ve yeni veriler eklendikten sonra güncellenmesi zor olan SVD'yi gerektirir.

    6. Konu modellerinin diğer teknikleri

    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özler

    Bu 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
    Yeni Fox geldiğinde, fazladan bir Transformers arkadaşım varmış gibi hissediyorum
    önceki
    Honor MagicBook Ryzen Edition Nebula Purple raflarda: 200 değerinde anında indirim sadece 4399 yuan
    Sonraki
    Android 9.0 deneyimi, kişisel olarak altta hangi iyileştirmelerin olduğunu görün
    MPV de çok kişisel olabilir! SAIC Maxus G20, 179.800 ila 289.800 yuan için piyasaya sürüldü
    Bugünün Temel Sesi Google Cloud, Üç Kadın Kahramanı dönemine veda ediyor ve hatta patron bile istifa ediyor!
    Anında baskı! Xiaomi Mijia Fotoğraf Yazıcısı Kutudan Çıkarma Turu
    Böyle şık bir bilim kurgu arabası, bu Xiaopeng P7'yi beğendin mi?
    Yeni zeminde düşük yapma: güvenlik sorunları korkusu maçtan önce geri çekildi
    Lu Feng Rongyao'nun bu şiddetli görünüm kesinlikle orijinal olduğunu resmen açıkladı
    Özgeçmişinizi böyle yazın ve veri bilimi İK sizi arkadaş olarak alsın
    Eski rakibi Xiaomi Mi 8, Meizu 16 ile rekabet etmek için fiyatı 100 düşürdü, Li Nan's Weibo ise 2599 tarafından işgal edildi
    Gençlere uygun üç B sınıfı araba var.
    "Akademik Rapor" Pekin Üniversitesi'nden Akademisyen Cheng Heping: Çok modlu ve çapraz ölçekli biyomedikal görüntüleme tesisi
    "Saksağanın yuvasını işgal eden güvercin" terimi hakkında bazı yanlış anlamalarınız olabilir.
    To Top