Gensim - Dönüşümler

Bu bölüm, Gensim'deki çeşitli dönüşümleri öğrenmenize yardımcı olacaktır. Dönüşen belgeleri anlayarak başlayalım.

Belgeleri Dönüştürme

Belgelerin dönüştürülmesi, belgenin matematiksel olarak değiştirilebileceği şekilde temsil edilmesi anlamına gelir. Belgeleri dönüştürmek, derlemenin gizli yapısını çıkarmanın yanı sıra aşağıdaki hedeflere de hizmet edecektir:

  • Kelimeler arasındaki ilişkiyi keşfeder.

  • Korpustaki gizli yapıyı ortaya çıkarır.

  • Belgeleri yeni ve daha anlamsal bir şekilde açıklar.

  • Belgelerin temsilini daha kompakt hale getirir.

  • Yeni temsil daha az kaynak tükettiği için verimliliği artırır.

  • Yeni sunumda marjinal veri trendleri göz ardı edildiği için etkinliği artırır.

  • Yeni belge sunumunda gürültü de azaltılır.

Belgeleri bir vektör alanı gösteriminden diğerine dönüştürmek için uygulama adımlarını görelim.

Uygulama Adımları

Belgeleri dönüştürmek için aşağıdaki adımları izlemeliyiz -

1. Adım: Kitaplığın Oluşturulması

İlk ve temel adım, belgelerden külliyat oluşturmaktır. Önceki örneklerde korpusu zaten oluşturduk. Bazı geliştirmelerle başka bir tane oluşturalım (ortak kelimeleri ve yalnızca bir kez görünen kelimeleri kaldıralım) -

import gensim
import pprint
from collections import defaultdict
from gensim import corpora

Şimdi korpusu oluşturmak için gerekli belgeleri sağlayın -

t_corpus = ["Eskiden Hesaplamalı Ağ Araç Seti olarak bilinen CNTK", "insan beyni gibi öğrenmek için derin öğrenme algoritmalarını eğitmemizi sağlayan, kullanımı kolay, açık kaynaklı, ticari düzeyde ücretsiz bir araç setidir.", " Ücretsiz öğreticiyi tutorialspoint.com adresinde bulabilirsiniz "," Tutorialspoint.com ayrıca AI derin öğrenme makine öğrenimi gibi teknolojiler hakkında ücretsiz olarak en iyi teknik eğitimleri sağlar "]

Ardından, belirteç oluşturmalıyız ve bununla birlikte ortak sözcükleri de kaldıracağız -

stoplist = set('for a of the and to in'.split(' '))
processed_corpus = [
   [
      word for word in document.lower().split() if word not in stoplist
   ]
	for document in t_corpus
]

Aşağıdaki komut dosyası yalnızca görünen kelimeleri kaldıracaktır -

frequency = defaultdict(int)
for text in processed_corpus:
   for token in text:
      frequency[token] += 1
   processed_corpus = [
      [token for token in text if frequency[token] > 1] 
      for text in processed_corpus
   ]
pprint.pprint(processed_corpus)

Çıktı

[
   ['toolkit'],
   ['free', 'toolkit'],
   ['deep', 'learning', 'like'],
   ['free', 'on', 'tutorialspoint.com'],
   ['tutorialspoint.com', 'on', 'like', 'deep', 'learning', 'learning', 'free']
]

Şimdi bunu corpora.dictionary() külliyatımızdaki benzersiz nesneleri elde etmek için nesne -

dictionary = corpora.Dictionary(processed_corpus)
print(dictionary)

Çıktı

Dictionary(7 unique tokens: ['toolkit', 'free', 'deep', 'learning', 'like']...)

Ardından, aşağıdaki kod satırı, külliyatımız için Kelime Çantası modelini oluşturacaktır -

BoW_corpus = [dictionary.doc2bow(text) for text in processed_corpus]
pprint.pprint(BoW_corpus)

Çıktı

[
   [(0, 1)],
   [(0, 1), (1, 1)],
   [(2, 1), (3, 1), (4, 1)],
   [(1, 1), (5, 1), (6, 1)],
   [(1, 1), (2, 1), (3, 2), (4, 1), (5, 1), (6, 1)]
]

Adım 2: Bir Dönüşüm Yaratmak

Dönüşümler bazı standart Python nesneleridir. Bu dönüşümleri, yani Python nesnelerini eğitimli bir külliyat kullanarak başlatabiliriz. Burada kullanacağıztf-idf eğitilmiş külliyatımızın bir dönüşümünü yaratmak için model BoW_corpus.

Öncelikle model paketini gensim'den ithal etmemiz gerekiyor.

from gensim import models

Şimdi, modeli aşağıdaki gibi başlatmamız gerekiyor -

tfidf = models.TfidfModel(BoW_corpus)

Adım 3: Vektörleri Dönüştürme

Şimdi, bu son adımda, vektörler eski temsilden yeni gösterime dönüştürülecek. Yukarıdaki adımda tfidf modelini başlattığımız için, tfidf artık salt okunur bir nesne olarak ele alınacaktır. Burada, bu tfidf nesnesini kullanarak vektörümüzü kelime gösterimi torbasından (eski temsil) Tfidf gerçek değerli ağırlıklara (yeni temsil) dönüştüreceğiz.

doc_BoW = [(1,1),(3,1)]
print(tfidf[doc_BoW]

Çıktı

[(1, 0.4869354917707381), (3, 0.8734379353188121)]

Dönüşümü külliyatın iki değerine uyguladık, ancak bunu tüm külliyat için de şu şekilde uygulayabiliriz -

corpus_tfidf = tfidf[BoW_corpus]
for doc in corpus_tfidf:
   print(doc)

Çıktı

[(0, 1.0)]
[(0, 0.8734379353188121), (1, 0.4869354917707381)]
[(2, 0.5773502691896257), (3, 0.5773502691896257), (4, 0.5773502691896257)]
[(1, 0.3667400603126873), (5, 0.657838022678017), (6, 0.657838022678017)]
[
   (1, 0.19338287240886842), (2, 0.34687949360312714), (3, 0.6937589872062543), 
   (4, 0.34687949360312714), (5, 0.34687949360312714), (6, 0.34687949360312714)
]

Eksiksiz Uygulama Örneği

import gensim
import pprint
from collections import defaultdict
from gensim import corpora
t_corpus = [
   "CNTK formerly known as Computational Network Toolkit", 
   "is a free easy-to-use open-source commercial-grade toolkit", 
   "that enable us to train deep learning algorithms to learn like the human brain.", 
   "You can find its free tutorial on tutorialspoint.com", 
   "Tutorialspoint.com also provide best technical tutorials on 
   technologies like AI deep learning machine learning for free"
]
stoplist = set('for a of the and to in'.split(' '))
processed_corpus = [
   [word for word in document.lower().split() if word not in stoplist]
   for document in t_corpus
]
frequency = defaultdict(int)
for text in processed_corpus:
   for token in text:
      frequency[token] += 1
   processed_corpus = [
      [token for token in text if frequency[token] > 1] 
      for text in processed_corpus
   ]
pprint.pprint(processed_corpus)
dictionary = corpora.Dictionary(processed_corpus)
print(dictionary)
BoW_corpus = [dictionary.doc2bow(text) for text in processed_corpus]
pprint.pprint(BoW_corpus)
   from gensim import models
   tfidf = models.TfidfModel(BoW_corpus)
   doc_BoW = [(1,1),(3,1)]
   print(tfidf[doc_BoW])
   corpus_tfidf = tfidf[BoW_corpus]
   for doc in corpus_tfidf:
print(doc)

Gensim'de Çeşitli Dönüşümler

Gensim'i kullanarak, çeşitli popüler dönüşümleri, yani Vektör Uzay Modeli algoritmalarını uygulayabiliriz. Bunlardan bazıları aşağıdaki gibidir -

Tf-Idf (Terim Frekansı-Ters Belge Frekansı)

Başlatma sırasında, bu tf-idf modeli algoritması, tamsayı değerlerine sahip bir eğitim külliyatını bekler (Kelime Çantası modeli gibi). Bundan sonra, dönüşüm sırasında bir vektör gösterimi alır ve başka bir vektör gösterimi döndürür.

Çıktı vektörü aynı boyutluluğa sahip olacak ancak nadir özelliklerin değeri (eğitim sırasında) artacaktır. Temel olarak tamsayı değerli vektörleri gerçek değerli vektörlere dönüştürür. Tf-idf dönüşümünün sözdizimi aşağıdadır -

Model=models.TfidfModel(corpus, normalize=True)

LSI (Gizli Anlamsal İndeksleme)

LSI model algoritması, belgeyi tam sayı değerli vektör modelinden (Kelime Torbası modeli gibi) veya Tf-Idf ağırlıklı uzaydan gizli alana dönüştürebilir. Çıktı vektörü daha düşük boyutta olacaktır. LSI dönüşümünün sözdizimi aşağıdadır -

Model=models.LsiModel(tfidf_corpus, id2word=dictionary, num_topics=300)

LDA (Gizli Dirichlet Tahsisi)

LDA model algoritması, belgeyi Kelime Çantası model alanından bir konu alanına dönüştüren başka bir algoritmadır. Çıktı vektörü daha düşük boyutta olacaktır. LSI dönüşümünün sözdizimi aşağıdadır -

Model=models.LdaModel(corpus, id2word=dictionary, num_topics=100)

Rastgele Tahminler (RP)

Çok verimli bir yaklaşım olan RP, vektör uzayının boyutsallığını azaltmayı amaçlamaktadır. Bu yaklaşım, temelde belgeler arasındaki Tf-Idf mesafelerini yaklaşık olarak gösterir. Bunu biraz rasgele atarak yapar.

Model=models.RpModel(tfidf_corpus, num_topics=500)

Hiyerarşik Dirichlet Süreci (HDP)

HDP, Gensim'e yeni eklenen parametrik olmayan bir Bayes yöntemidir. Kullanırken dikkatli olmalıyız.

Model=models.HdpModel(corpus, id2word=dictionary