Topic Modelling

Note

This tutorial is available as an IPython notebook here.

import pandas as pd
import malaya
df = pd.read_csv('tests/02032018.csv',sep=';')
df = df.iloc[3:,1:]
df.columns = ['text','label']
corpus = df.text.tolist()

Load attention model

We can use BERT or XLNET model to build topic modeling for corpus we have, the power of attention!

xlnet = malaya.transformer.load(model = 'xlnet', size = 'base')
attention = malaya.topic_model.attention(corpus, n_topics = 10, vectorizer = xlnet)
WARNING: Logging before flag parsing goes to stderr.
W1018 00:42:06.978917 4487972288 deprecation_wrapper.py:119] From /Users/huseinzol/Documents/Malaya/malaya/_transformer/_xlnet_model/xlnet.py:70: The name tf.gfile.Open is deprecated. Please use tf.io.gfile.GFile instead.

W1018 00:42:06.981930 4487972288 deprecation_wrapper.py:119] From /Users/huseinzol/Documents/Malaya/malaya/_transformer/_xlnet.py:71: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.

W1018 00:42:06.992113 4487972288 deprecation_wrapper.py:119] From /Users/huseinzol/Documents/Malaya/malaya/_transformer/_xlnet_model/xlnet.py:253: The name tf.variable_scope is deprecated. Please use tf.compat.v1.variable_scope instead.

W1018 00:42:06.993095 4487972288 deprecation_wrapper.py:119] From /Users/huseinzol/Documents/Malaya/malaya/_transformer/_xlnet_model/xlnet.py:253: The name tf.AUTO_REUSE is deprecated. Please use tf.compat.v1.AUTO_REUSE instead.

W1018 00:42:06.995229 4487972288 deprecation_wrapper.py:119] From /Users/huseinzol/Documents/Malaya/malaya/_transformer/_xlnet_model/modeling.py:686: The name tf.logging.info is deprecated. Please use tf.compat.v1.logging.info instead.

W1018 00:42:06.997777 4487972288 deprecation_wrapper.py:119] From /Users/huseinzol/Documents/Malaya/malaya/_transformer/_xlnet_model/modeling.py:693: The name tf.get_variable is deprecated. Please use tf.compat.v1.get_variable instead.

W1018 00:42:07.099963 4487972288 deprecation.py:323] From /Users/huseinzol/Documents/Malaya/malaya/_transformer/_xlnet_model/modeling.py:797: dropout (from tensorflow.python.layers.core) is deprecated and will be removed in a future version.
Instructions for updating:
Use keras.layers.dropout instead.
W1018 00:42:07.776345 4487972288 deprecation.py:323] From /Users/huseinzol/Documents/Malaya/malaya/_transformer/_xlnet_model/modeling.py:99: dense (from tensorflow.python.layers.core) is deprecated and will be removed in a future version.
Instructions for updating:
Use keras.layers.dense instead.
W1018 00:42:15.209581 4487972288 deprecation_wrapper.py:119] From /Users/huseinzol/Documents/Malaya/malaya/_transformer/_xlnet.py:84: The name tf.InteractiveSession is deprecated. Please use tf.compat.v1.InteractiveSession instead.

W1018 00:42:16.381231 4487972288 deprecation_wrapper.py:119] From /Users/huseinzol/Documents/Malaya/malaya/_transformer/_xlnet.py:90: The name tf.train.Saver is deprecated. Please use tf.compat.v1.train.Saver instead.

W1018 00:42:16.752380 4487972288 deprecation.py:323] From /usr/local/lib/python3.6/site-packages/tensorflow/python/training/saver.py:1276: checkpoint_exists (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.
Instructions for updating:
Use standard file APIs to check for files with this prefix.

Get topics

attention.top_topics(5, top_n = 10, return_df = True)
topic 0 topic 1 topic 2 topic 3 topic 4
0 ambil nyata rana menteri malaysia
1 putus dasar negara laku negara
2 undi tulis laksana jalan pimpin
3 rakyat laksana menteri gaji sasar
4 raja parti mdb perdana jalan
5 lembaga rana terima perdana menteri antarabangsa
6 ros catat urus tingkat hidup
7 kerja pas dakwa usaha undang
8 teknikal tangguh tuntut raja menteri
9 jalan umno sivil rakyat serius

Get topics as string

attention.get_topics(10)
[(0, 'ambil putus undi rakyat raja lembaga ros kerja teknikal jalan'),
 (1, 'nyata dasar tulis laksana parti rana catat pas tangguh umno'),
 (2, 'rana negara laksana menteri mdb terima urus dakwa tuntut sivil'),
 (3,
  'menteri laku jalan gaji perdana perdana menteri tingkat usaha raja rakyat'),
 (4,
  'malaysia negara pimpin sasar jalan antarabangsa hidup undang menteri serius'),
 (5, 'malaysia bangun raja negara laku kongsi niaga pelbagai bina tumbuh'),
 (6,
  'jppm mdb tangguh daftar selesai selesai jppm tutup mdb bayar tutup mdb pimpin sokong'),
 (7, 'mdb selesai laku hutang rana projek pendek wang tempoh pelbagai'),
 (8, 'negara punca mca malaysia pilih percaya malu kebaji jaga kebaji jaga'),
 (9, 'malaysia rakyat parti negara bangun program alam ajar raja resolusi')]

Train LDA2Vec model

lda2vec = malaya.topic_model.lda2vec(corpus, 10, vectorizer = 'skip-gram', skip = 4)
minibatch loop: 100%|██████████| 287/287 [00:02<00:00, 135.60it/s, cost=-7.4e+3, epoch=1]
minibatch loop: 100%|██████████| 287/287 [00:01<00:00, 145.11it/s, cost=-8.01e+3, epoch=2]
minibatch loop: 100%|██████████| 287/287 [00:02<00:00, 143.11it/s, cost=-8.62e+3, epoch=3]
minibatch loop: 100%|██████████| 287/287 [00:01<00:00, 144.70it/s, cost=-9.24e+3, epoch=4]
minibatch loop: 100%|██████████| 287/287 [00:01<00:00, 147.26it/s, cost=-9894.22, epoch=5]
minibatch loop: 100%|██████████| 287/287 [00:01<00:00, 145.32it/s, cost=-1.06e+4, epoch=6]
minibatch loop: 100%|██████████| 287/287 [00:01<00:00, 139.67it/s, cost=-1.13e+4, epoch=7]
minibatch loop: 100%|██████████| 287/287 [00:01<00:00, 148.40it/s, cost=-1.2e+4, epoch=8]
minibatch loop: 100%|██████████| 287/287 [00:01<00:00, 149.87it/s, cost=-1.27e+4, epoch=9]
minibatch loop: 100%|██████████| 287/287 [00:01<00:00, 150.03it/s, cost=-1.33e+4, epoch=10]

Get topics

You able to set to return as Pandas Dataframe or not by using return_df parameter

lda2vec.top_topics(5, top_n = 10, return_df = True)
topic 0 topic 1 topic 2 topic 3 topic 4
0 bidang didik proses bahagian dagang didik latih guru takut
1 kandung gagal projek jalan lancar muda dagang didik latih
2 wang dagang tani alam negara april program kerjasama malaysia tatakelakuan
3 langkah sokong tanding terima tumbuh bahagian
4 laku raja tingkat mahkamah awam ubah program teknikal
5 negara maju ancang alam ekonomi main peran kongsi tatakelakuan pindah kampung baharu
6 dagang didik latih bekal bersih rasmi serang nama
7 kaya negara negara maju gagal awam gagal
8 sivil doj ajar ajar alam ekonomi bahagian ikan
9 raja tingkat maju tani didik teknikal ikan jho low kapal ekonomi dagang

Important sentences based on topics

lda2vec.get_sentences(5)
['teknikal',
 'konon fokus pilih raya',
 'sedia kongsi alam bangun ekonomi sosial negara bangun rangka program kerjasama teknikal malaysia mtcp sedia malaysia kongsi alam bangun negara negara selatan selatan',
 'kerja diploma kerja jawat kerani',
 'niaga masuk niaga digital santan santan terima minat asia hubung aktiviti francais restoran makan asia']

Get topics as string

lda2vec.get_topics(10)
[(0,
  'bidang didik proses kandung wang dagang tani langkah laku raja tingkat negara maju ancang dagang didik latih kaya sivil doj raja tingkat maju'),
 (1,
  'bahagian gagal alam negara sokong mahkamah alam ekonomi bekal bersih negara negara maju ajar ajar tani didik teknikal'),
 (2,
  'dagang didik latih projek jalan lancar april tanding awam main peran kongsi rasmi gagal alam ekonomi ikan'),
 (3,
  'guru muda program kerjasama malaysia terima tumbuh ubah tatakelakuan serang awam bahagian jho low kapal'),
 (4,
  'takut dagang didik latih tatakelakuan bahagian program teknikal pindah kampung baharu nama gagal ikan ekonomi dagang'),
 (5,
  'demokrasi kongsi maklumat main peran tatakelakuan bank seri razak pendek laku raja tingkat alam bangun nama'),
 (6,
  'melayu cina atur teknikal mtcp sedia serang aabar latih teknikal diplomasi ekonomi wajar nyata pengaruh suasana'),
 (7,
  'industri diplomasi kongsi alam bangun rangka sumber baca ekonomi sosial bangun pelopor jppm kukuh bantu teknikal industri diplomasi'),
 (8,
  'berita aabar main peran kongsi sesuai huni menteri najib dagang tani maju bidang fasal alam negara'),
 (9,
  'sebahagian alam ekonomi program teknikal huni takut saudi bahagian bawa nama generasi')]

Visualize topics

lda2vec.visualize_topics(notebook_mode = True)

Train LDA model

lda = malaya.topic_model.lda(corpus,10,stemming=None,vectorizer='skip-gram',ngram=(1,4),skip=3)
/usr/local/lib/python3.6/site-packages/sklearn/decomposition/online_lda.py:536: DeprecationWarning: The default value for 'learning_method' will be changed from 'online' to 'batch' in the release 0.20. This warning was introduced in 0.18.
  DeprecationWarning)

Important sentences based on topics

lda.get_sentences(5)
['bantu negara negara maju bidang ancang ekonomi wang dagang tani didik latih teknikal industri diplomasi',
 'bantu negara negara maju bidang ancang ekonomi wang dagang tani didik latih teknikal industri diplomasi',
 'laku raja tingkat maju bidang didik proses ajar ajar',
 'laku raja tingkat maju bidang didik proses ajar ajar',
 'tolak sebarang percubaan merosak musnah tanah suci jaga tumpu islam']

Get topics

lda.get_topics(10)
[(0,
  'maju bidang ajar ajar maju bidang proses ajar maju proses ajar didik ajar maju bidang didik ajar maju didik ajar tingkat didik proses ajar didik proses ajar bidang proses ajar'),
 (1, 'parti tangguh ros jppm rana nyata pilih daftar umno kelulus'),
 (2,
  'bangun negara selatan alam negara selatan negara selatan alam bangun negara selatan kongsi bangun negara selatan kongsi alam negara selatan bangun kongsi negara alam negara'),
 (3, 'awam terima pilih putus bayar ambil menteri isu politik tindak'),
 (4, 'projek laku asli mdb hutang wang raja selesai malaysia masyarakat'),
 (5,
  'terjemah ambil ilmu bahasa bahasa ilmu kaji ambil langkah langkah bahasa bahasa tunggu'),
 (6,
  'malaysia bangun negara negara malaysia pesawat nyata kawasan bandar kawasan bandar dakwa'),
 (7, 'duduk urus takut giat hidup arab saudi bidang arab saudi pekan nilai'),
 (8,
  'rakyat bahasa rakyat malaysia malaysia niaga negara bahasa ilmu inggeris bahasa inggeris jual'),
 (9,
  'tanggung hutang capai matlamat dunia main negara teknikal silap individu')]

Visualize topics

lda.visualize_topics(notebook_mode = True)

Train NMF model

nmf = malaya.topic_model.nmf(corpus,10)
nmf.top_topics(5, top_n = 10, return_df = True)
topic 0 topic 1 topic 2 topic 3 topic 4
0 negara negara menteri mdb projek
1 bangun wang perdana niaga jual
2 sedia ancang perdana menteri doj syarikat
3 kongsi maju seri urus sewa
4 alam bidang najib low jual syarikat
5 malaysia ekonomi najib razak jho swasta
6 kongsi alam industri razak urus niaga indonesia
7 selatan latih menteri seri jho low tanah
8 kongsi alam bangun dagang menteri seri najib tuntut rana
9 alam bangun didik seri najib razak sivil kena
nmf.get_sentences(5)
['sedia kongsi alam bangun ekonomi sosial negara bangun rangka program kerjasama teknikal malaysia mtcp sedia malaysia kongsi alam bangun negara negara selatan selatan',
 'sedia kongsi alam bangun ekonomi sosial negara bangun rangka program kerjasama teknikal malaysia mtcp sedia malaysia kongsi alam bangun negara negara selatan selatan',
 'kali kongsi maklumat kena pelbagai khidmat biaya program sedia usahawan wanita iks sabah kongsi idea alam aspirasi promosi produk peringkat luas',
 'mou memorandum persefahaman arab saudi bidang selamat kongsi alam pakar malaysia deradikalisasi ganas khusus daesh',
 'terusi bentang bajet raja sedia promosi tingkat mudah lancong negara']
nmf.get_topics(10)
[(0,
  'negara bangun sedia kongsi alam malaysia kongsi alam selatan kongsi alam bangun alam bangun'),
 (1, 'negara wang ancang maju bidang ekonomi industri latih dagang didik'),
 (2,
  'menteri perdana perdana menteri seri najib najib razak razak menteri seri menteri seri najib seri najib razak'),
 (3, 'mdb niaga doj urus low jho urus niaga jho low tuntut sivil'),
 (4,
  'projek jual syarikat sewa jual syarikat swasta indonesia tanah rana kena'),
 (5,
  'rakyat malaysia negara rakyat malaysia pimpin pimpin negara maklumat kait asas pandang'),
 (6,
  'parti umno tangguh pilih lembaga putus jalan tangguh pilih pilih parti tangguh pilih parti'),
 (7, 'ajar raja tingkat laku ajar ajar proses didik bidang maju didik proses'),
 (8,
  'bangun malaysia kawasan alam bangun kawasan main bandar kongsi kongsi alam peran'),
 (9,
  'asli masyarakat jakoa bangun perdana bangun arus perdana pelopor arus arus perdana ganti')]

Train LSA model

lsa = malaya.topic_model.lsa(corpus,10)
lsa.top_topics(5, top_n = 10, return_df = True)
topic 0 topic 1 topic 2 topic 3 topic 4
0 negara negara negara mdb projek
1 bangun wang maju niaga jual
2 malaysia menteri maju bidang doj malaysia
3 kongsi mdb bidang urus raja
4 alam raja teknikal jho syarikat
5 kongsi alam didik didik urus niaga tingkat
6 sedia maju negara negara low ajar
7 selatan bidang tani jho low sewa
8 alam bangun maju bidang negara maju bidang tuntut jual syarikat
9 kongsi alam bangun rakyat tani didik latih tuntut sivil rakyat
lsa.get_sentences(5)
['sedia kongsi alam bangun ekonomi sosial negara bangun rangka program kerjasama teknikal malaysia mtcp sedia malaysia kongsi alam bangun negara negara selatan selatan',
 'sedia kongsi alam bangun ekonomi sosial negara bangun rangka program kerjasama teknikal malaysia mtcp sedia malaysia kongsi alam bangun negara negara selatan selatan',
 'negara bangun malaysia main peran kongsi alam mahir bangun kawasan bandar',
 'negara bangun malaysia main peran kongsi alam mahir bangun kawasan bandar',
 'bantu negara negara maju bidang ancang ekonomi wang dagang tani didik latih teknikal industri diplomasi']
lsa.get_topics(10)
[(0,
  'negara bangun malaysia kongsi alam kongsi alam sedia selatan alam bangun kongsi alam bangun'),
 (1, 'negara wang menteri mdb raja didik maju bidang maju bidang rakyat'),
 (2,
  'negara maju maju bidang bidang teknikal didik negara negara tani negara maju bidang tani didik latih'),
 (3, 'mdb niaga doj urus jho urus niaga low jho low tuntut tuntut sivil'),
 (4,
  'projek jual malaysia raja syarikat tingkat ajar sewa jual syarikat rakyat'),
 (5,
  'parti pilih rakyat tangguh umno pimpin negara malaysia rakyat malaysia tangguh pilih'),
 (6,
  'rakyat malaysia menteri bangun asli perdana kawasan negara bangun kawasan main'),
 (7,
  'ajar tingkat ajar ajar proses raja bidang didik tingkat maju raja tingkat maju laku raja tingkat didik proses'),
 (8,
  'bangun projek bandar kawasan bangun kawasan main mahir peran kongsi alam peran kongsi kawasan bandar'),
 (9,
  'asli masyarakat jakoa bangun arus perdana pelopor ganti arus arus perdana bangun arus masyarakat asli')]