Gensim - Transformasi
Bab ini akan membantu Anda mempelajari berbagai transformasi di Gensim. Mari kita mulai dengan memahami dokumen transformasi.
Mengubah Dokumen
Transformasi dokumen berarti merepresentasikan dokumen sedemikian rupa sehingga dokumen tersebut dapat dimanipulasi secara matematis. Selain menyimpulkan struktur laten korpus, mengubah dokumen juga akan memenuhi tujuan berikut -
Ini menemukan hubungan antara kata-kata.
Ini memunculkan struktur tersembunyi di dalam korpus.
Ini menggambarkan dokumen dengan cara baru dan lebih semantik.
Itu membuat representasi dokumen lebih kompak.
Ini meningkatkan efisiensi karena representasi baru mengkonsumsi lebih sedikit sumber daya.
Ini meningkatkan efektivitas karena dalam representasi baru tren data marjinal diabaikan.
Kebisingan juga berkurang dalam representasi dokumen baru.
Mari kita lihat langkah-langkah implementasi untuk mengubah dokumen dari satu representasi ruang vektor ke yang lain.
Langkah Implementasi
Untuk mengubah dokumen, kita harus mengikuti langkah-langkah berikut -
Langkah 1: Membuat Corpus
Langkah pertama dan dasar adalah membuat korpus dari dokumen. Kami telah membuat korpus di contoh sebelumnya. Mari buat yang lain dengan beberapa peningkatan (menghapus kata-kata umum dan kata-kata yang hanya muncul sekali) -
import gensim
import pprint
from collections import defaultdict
from gensim import corpora
Sekarang berikan dokumen untuk membuat korpus -
t_corpus = ["CNTK sebelumnya dikenal sebagai Computational Network Toolkit", "adalah toolkit kelas komersial open source gratis yang mudah digunakan", "yang memungkinkan kami untuk melatih algoritme pembelajaran mendalam untuk belajar seperti otak manusia.", " Anda dapat menemukan tutorial gratisnya di tutorialspoint.com "," Tutorialspoint.com juga menyediakan tutorial teknis terbaik tentang teknologi seperti pembelajaran mesin AI deep learning secara gratis "]
Selanjutnya, kita perlu melakukan tokenise dan bersamaan dengan itu kita juga akan menghapus kata-kata umum -
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
]
Skrip berikut akan menghapus kata-kata yang hanya muncul -
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)
Keluaran
[
['toolkit'],
['free', 'toolkit'],
['deep', 'learning', 'like'],
['free', 'on', 'tutorialspoint.com'],
['tutorialspoint.com', 'on', 'like', 'deep', 'learning', 'learning', 'free']
]
Sekarang berikan ke corpora.dictionary() objek untuk mendapatkan objek unik dalam korpus kami -
dictionary = corpora.Dictionary(processed_corpus)
print(dictionary)
Keluaran
Dictionary(7 unique tokens: ['toolkit', 'free', 'deep', 'learning', 'like']...)
Selanjutnya, baris kode berikut akan membuat model Bag of Word untuk korpus kita -
BoW_corpus = [dictionary.doc2bow(text) for text in processed_corpus]
pprint.pprint(BoW_corpus)
Keluaran
[
[(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)]
]
Langkah 2: Membuat Transformasi
Transformasi adalah beberapa objek Python standar. Kita dapat menginisialisasi transformasi ini yaitu objek Python dengan menggunakan korpus terlatih. Di sini kita akan menggunakantf-idf model untuk membuat transformasi korpus terlatih kami yaitu BoW_corpus.
Pertama, kita perlu mengimpor paket model dari gensim.
from gensim import models
Sekarang, kita perlu menginisialisasi model sebagai berikut -
tfidf = models.TfidfModel(BoW_corpus)
Langkah 3: Mengubah Vektor
Sekarang, pada langkah terakhir ini, vektor akan diubah dari representasi lama ke representasi baru. Karena kita telah menginisialisasi model tfidf pada langkah di atas, tfidf sekarang akan diperlakukan sebagai objek hanya-baca. Di sini, dengan menggunakan objek tfidf ini kita akan mengubah vektor kita dari bag of word representasi (representasi lama) menjadi bobot bernilai nyata Tfidf (representasi baru).
doc_BoW = [(1,1),(3,1)]
print(tfidf[doc_BoW]
Keluaran
[(1, 0.4869354917707381), (3, 0.8734379353188121)]
Kami menerapkan transformasi pada dua nilai korpus, tetapi kami juga dapat menerapkannya ke seluruh korpus sebagai berikut -
corpus_tfidf = tfidf[BoW_corpus]
for doc in corpus_tfidf:
print(doc)
Keluaran
[(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)
]
Contoh Implementasi Lengkap
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)
Beragam Transformasi di Gensim
Dengan menggunakan Gensim, kita dapat mengimplementasikan berbagai transformasi yang populer, yaitu algoritma Vector Space Model. Beberapa di antaranya adalah sebagai berikut -
Tf-Idf (Term Frequency-Inverse Document Frequency)
Selama inisialisasi, algoritma model tf-idf ini mengharapkan korpus pelatihan memiliki nilai integer (seperti model Bag-of-Words). Kemudian setelah itu, pada saat transformasi, dibutuhkan representasi vektor dan mengembalikan representasi vektor lainnya.
Vektor keluaran akan memiliki dimensi yang sama tetapi nilai fitur langka (pada saat pelatihan) akan ditingkatkan. Ini pada dasarnya mengubah vektor bernilai integer menjadi vektor bernilai nyata. Berikut sintaks dari transformasi Tf-idf -
Model=models.TfidfModel(corpus, normalize=True)
LSI (Pengindeksan Semantik Laten)
Algoritme model LSI dapat mengubah dokumen dari model vektor bernilai integer (seperti model Bag-of-Words) atau ruang berbobot Tf-Idf menjadi ruang laten. Vektor keluaran akan memiliki dimensi yang lebih rendah. Berikut ini adalah sintaks transformasi LSI -
Model=models.LsiModel(tfidf_corpus, id2word=dictionary, num_topics=300)
LDA (Alokasi Dirichlet Laten)
Algoritma model LDA adalah algoritma lain yang mengubah dokumen dari ruang model Bag-of-Words menjadi ruang topik. Vektor keluaran akan memiliki dimensi yang lebih rendah. Berikut ini adalah sintaks transformasi LSI -
Model=models.LdaModel(corpus, id2word=dictionary, num_topics=100)
Proyeksi Acak (RP)
RP, pendekatan yang sangat efisien, bertujuan untuk mengurangi dimensi ruang vektor. Pendekatan ini pada dasarnya mendekati jarak Tf-Idf antar dokumen. Itu dilakukan dengan melemparkan sedikit keacakan.
Model=models.RpModel(tfidf_corpus, num_topics=500)
Proses Dirichlet Hierarki (HDP)
HDP adalah metode Bayesian non-parametrik yang merupakan tambahan baru untuk Gensim. Kita harus berhati-hati saat menggunakannya.
Model=models.HdpModel(corpus, id2word=dictionary