Isi Penting Generator HuggingFace karangan style#

Generate a long text with karangan style given isi penting (important facts).

This tutorial is available as an IPython notebook at Malaya/example/isi-penting-generator-huggingface-karangan-style.

Results generated using stochastic methods.

[1]:
%%time
import malaya
from pprint import pprint
/home/husein/dev/malaya/malaya/tokenizer.py:208: FutureWarning: Possible nested set at position 3386
  self.tok = re.compile(r'({})'.format('|'.join(pipeline)))
/home/husein/dev/malaya/malaya/tokenizer.py:208: FutureWarning: Possible nested set at position 3904
  self.tok = re.compile(r'({})'.format('|'.join(pipeline)))
CPU times: user 3.2 s, sys: 3.35 s, total: 6.55 s
Wall time: 2.3 s

List available HuggingFace#

[2]:
malaya.generator.isi_penting.available_huggingface()
[2]:
Size (MB) ROUGE-1 ROUGE-2 ROUGE-L Suggested length
mesolitica/finetune-isi-penting-generator-t5-small-standard-bahasa-cased 242.0 0.246203 0.058961 0.15159 1024.0
mesolitica/finetune-isi-penting-generator-t5-base-standard-bahasa-cased 892.0 0.246203 0.058961 0.15159 1024.0

Load HuggingFace#

Transformer Generator in Malaya is quite unique, most of the text generative model we found on the internet like GPT2 or Markov, simply just continue prefix input from user, but not for Transformer Generator. We want to generate an article or karangan like high school when the users give ‘isi penting’.

def huggingface(model: str = 'mesolitica/finetune-isi-penting-generator-t5-base-standard-bahasa-cased', **kwargs):
    """
    Load HuggingFace model to generate text based on isi penting.

    Parameters
    ----------
    model: str, optional (default='mesolitica/finetune-isi-penting-generator-t5-base-standard-bahasa-cased')
        Check available models at `malaya.generator.isi_penting.available_huggingface()`.

    Returns
    -------
    result: malaya.torch_model.huggingface.IsiPentingGenerator
    """
[3]:
model = malaya.generator.isi_penting.huggingface()

generate#

def generate(
    self,
    strings: List[str],
    mode: str = 'surat-khabar',
    **kwargs,
):
    """
    generate a long text given a isi penting.

    Parameters
    ----------
    strings : List[str]
    mode: str, optional (default='surat-khabar')
        Mode supported. Allowed values:

        * ``'surat-khabar'`` - news style writing.
        * ``'tajuk-surat-khabar'`` - headline news style writing.
        * ``'artikel'`` - article style writing.
        * ``'penerangan-produk'`` - product description style writing.
        * ``'karangan'`` - karangan sekolah style writing.

    **kwargs: vector arguments pass to huggingface `generate` method.
        Read more at https://huggingface.co/docs/transformers/main_classes/text_generation

    Returns
    -------
    result: List[str]
    """

Good thing about HuggingFace#

In generate method, you can do greedy, beam, sampling, nucleus decoder and so much more, read it at https://huggingface.co/blog/how-to-generate

And recently, huggingface released https://huggingface.co/blog/introducing-csearch

[7]:
isi_penting = ['ayam yang sihat dan sejahtera', 'nasi ayam yang sedap dan lazat', 'kedai bernama Husein Nasi Ayam']
[5]:
pprint(model.generate(isi_penting, mode = 'karangan',
    do_sample=True,
    max_length=256,
    top_k=50,
    top_p=0.95,))
You're using a T5TokenizerFast tokenizer. Please note that with a fast tokenizer, using the `__call__` method is faster than using a method to encode the text followed by a call to the `pad` method to get a padded encoding.
['Nasi Ayam telah menjadi hidangan tradisi masyarakat Bugis selama lebih dari '
 'tiga puluh tahun. Bertapak di kawasan bukit, gunung, dan sungai serta di '
 'kawasan paya bakau, kita seringkali dikejutkan oleh berita kedatangan ayam '
 'yang digelar sebagai Nasi Ayam. Hari ini, berita ini sering dipaparkan di '
 'dada akhbar dan media massa. Bagaimanakah pula dengan nasi ayam yang sedap '
 'dan lazat? Tentulah tidak. Mungkin ada sesetengah masyarakat yang tak suka '
 'memakan nasi ayam, tetapi tidak salahnya kita mengamalkannya. Bagaimana '
 'caranya untuk memastikan nasi ayam kita kekal sedap dan sedap? Nasi ayam '
 'ialah ayam yang berasal dari spesies ayam belanda yang memerlukan protein, '
 'karbohidrat dan protein yang rendah. Lemak, protein dan lemak menjadi bahan '
 'utama bagi menjamah nasi ayam. Nasi ayam merupakan minuman yang mengandungi '
 'komponen-komponen yang penting seperti vitamin, mineral dan zat besi. Ia '
 'mempunyai sifat antioksidan dan baik untuk kesihatan kulit, hati dan rambut. '
 'Mineral seperti besi, zink, tembaga dan titanium yang terdapat pada nasi '
 'ayam tidak beracun dan selamat untuk dimakan jika dimakan mentah. Ini adalah '
 'kerana kandungan gula dalam darah ayam lebih tinggi berbanding nasi ayam. '
 'Selain itu, ia juga mengandungi bahan-bahan kimia']
[8]:
pprint(model.generate(isi_penting, mode = 'karangan',
    do_sample=True,
    max_length=256,
    penalty_alpha=0.8, top_k=4,))
['Segalanya bermula dengan ayam yang sedap dan lazat. Mutakhir ini, pelbagai '
 'jenis nasi ayam telah menjadi menu wajib rakyat Malaysia. Antara jenis nasi '
 'ayam yang popular ialah ayam salai, nasi putih, nasi merah, nasi putih, nasi '
 'putih dan banyak lagi. Nasi ayam ini merupakan makanan yang cukup sedap dan '
 'menyelerakan kerana rasanya yang enak. Selain itu, nasi kerabu yang digoreng '
 'juga merupakan makanan kegemaran rakyat Malaysia kerana harganya yang '
 'berpatutan dan rasanya yang sedap. Selain itu, nasi ayam turut menyelerakan '
 'di waktu pagi kerana santan dan kuah yang menjadi menu wajib rakyat '
 'Malaysia. Selain itu, nasi ayam juga merupakan makanan tradisi kaum keluarga '
 'yang menetap di kampung. Keluarga yang menetap di kampung biasanya akan '
 'membawa ayam untuk dijamah bersama-sama dengan santan dan kuah. Hal ini '
 'kerana, nasi kerabu merupakan makanan tradisi kaum keluarga yang mendiami '
 'kampung. Mereka akan membawa ayam untuk dijamah bersama-sama dengan santan, '
 'kuah kacang dan dal sebagai menu utama. Selain itu, nasi ayam juga merupakan '
 'hidangan tradisi kaum keluarga yang menetap di kampung. Mereka akan membawa '
 'nasi ayam']
[10]:
# http://mieadham86.blogspot.com/2016/09/isi-isi-penting-karangan-bahasa-melayu.html
# CARA MENJADI MURID CEMERLANG

isi_penting = ['Rajin berusaha – tidak mudah putus asa',
               'Menghormati orang yang lebih tua – mendapat keberkatan',
               'Melibatkan diri secara aktif dalam bidang kokurikulum',
               'Memberi tumpuan ketika guru mengajar.',
               'Berdisiplin – menepati jadual yang disediakan.',
               'Bercita-cita tinggi – mempunyai keazaman yang tinggi untuk berjaya']
[11]:
pprint(model.generate(isi_penting, do_sample=True, mode = 'karangan',
    max_length=256,
    top_k=50,
    top_p=0.95, ))
['Dalam meniti arus kemodenan negara, pembangunan negara semakin digeruni di '
 'dalam segenap pelusuk dunia. Keadaan ini disebabkan pelbagai faktor dan '
 'faktor yang menggalakkan pembangunan yang bukan sahaja di Malaysia malah di '
 'negara lain juga. Persoalannya, apakah kepentingan untuk pembangunan negara '
 'pada hari ini? Antara kepentingan pembangunan negara adalah dapat melahirkan '
 'individu yang berfikiran positif, berketrampilan, dan berjaya. Sebagai '
 'contoh, usahawan-usahawan tempatan telah mengambil keputusan untuk menceburi '
 'bidang pertanian. Mereka telah mendapat idea dan mengusahakan ladang '
 'tersebut dengan bantuan suami isteri mereka demi memajukan sektor pertanian '
 'ini. Selain itu, pendidikan dan kurikulum yang kukuh turut menjadikan '
 'seseorang itu berjaya dalam kerjaya mereka. Sebagai contoh, pendidikan bola '
 'sepak dengan bimbingan dan etika yang baik turut menjadi wadah penting untuk '
 'melahirkan pemain yang berkebolehan tinggi. Hal ini menyebabkan para pelajar '
 'akan sentiasa berusaha untuk mengembangkan ilmu-ilmu yang dipelajari. '
 'Sebagai contoh, bola sepak daripada sukan bola sepak Malaysia telah '
 'menggapai nama negara di mata dunia apabila memenangi Piala Dunia pada tahun '
 '1998 dan Piala Asia 2002. Malah para pelajar turut dapat belajar di '
 'peringkat Olimpik dengan kejayaan yang sama. Maka, pendidikan dan kurikulum '
 'yang kukuh amat diperlukan sebagai persediaan untuk melahirkan para pelajar '
 'yang cemerlang dalam pelajaran. Selain itu, perkembangan negara yang kian '
 'menerjah dunia menyebabkan']
[12]:
pprint(model.generate(isi_penting, mode = 'karangan',
    do_sample=True,
    max_length=256,
    penalty_alpha=0.8, top_k=4,))
['Pada zaman pascakemerdekaan ini, masyarakat kita telah ditimpa pelbagai '
 'masalah sosial seperti pergaulan bebas, pembuangan bayi, dan pelbagai lagi. '
 'Isu-isu seperti ini telah mencambahkan stigma negatif masyarakat terhadap '
 'masyarakat Malaysia. Oleh itu, kita harus mengenal pasti cara-cara untuk '
 'menanganinya. Langkah pertama dalam menangani masalah sosial adalah dengan '
 'memberikan tumpuan kepada golongan yang lebih tua. Jika mereka mempunyai '
 'masalah, mereka boleh berjumpa dengan ibu dan bapa mereka bagi berbincang '
 'tentang masalah yang dihadapi dan kaedah penyelesaiannya. Langkah seterusnya '
 'dalam menangani masalah sosial adalah dengan memberikan tumpuan kepada '
 'golongan tua yang mempunyai sahsiah yang baik. Ibu dan bapa hendaklah '
 'menunjukkan tauladan yang baik kepada anak-anak mereka. Dengan memberi fokus '
 'kepada golongan muda seperti ibu, bapa dan ahli keluarga, mereka dapat '
 'memberikan perhatian yang secukupnya kepada anak-anak mereka. Selain itu, '
 'ibu dan bapa boleh membawa anak-anak untuk ke tempat yang lebih baik apabila '
 'mereka pergi ke tempat yang mereka inginkan. Sebagai contoh, apabila '
 'anak-anak sudah berusia, ibu dan bapa boleh membawa mereka ke tempat yang '
 'lebih baik apabila mereka pergi ke tempat yang mereka inginkan. Ibu dan bapa '
 'juga boleh membawa anak-anak untuk ke tempat-tempat yang mereka inginkan '
 'untuk mencari rezeki. Dengan memberikan perhatian yang sewajarnya kepada '
 'golongan muda seperti']