Isi Penting Generator HuggingFace news style#

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

This tutorial is available as an IPython notebook at Malaya/example/isi-penting-generator-huggingface-news-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.21 s, sys: 3.44 s, total: 6.64 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

[4]:
isi_penting = ['Dr M perlu dikekalkan sebagai perdana menteri',
              'Muhyiddin perlulah menolong Dr M',
              'rakyat perlu menolong Muhyiddin']
[5]:
pprint(model.generate(isi_penting, mode = 'surat-khabar',
    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.
['Tan Sri Muhyiddin Yassin harus menggalas tanggungjawab sebagai perdana '
 'menteri yang mempunyai majoriti lebih besar daripada Datuk Seri Ismail Sabri '
 'Yaakob bagi memastikan peralihan kuasa dalam kerajaan diadakan. Menteri '
 'Komunikasi dan Multimedia, Tan Sri Annuar Musa yang mengakui mengakui '
 'perkara itu berkata, Muhyiddin perlulah membantu Dr M. Muhyiddin untuk '
 'memastikan semua Ahli Parlimen akan menyokong dan memberi kepercayaan '
 'kepadanya untuk menguruskan hal negara dengan baik. Beliau turut menegaskan, '
 'jika perdana menteri berjaya mengemudi negara, beliau akan menjalankan tugas '
 'seperti biasa. "Janganlah kita bercakap tentang pelantikan perdana menteri '
 'tetapi untuk mengekalkan kuasa seperti mana perdana menteri lain, apa yang '
 'boleh dibuat oleh Muhyiddin adalah memimpin negara itu kerana beliau tidak '
 'boleh memilih dalam Pilihan Raya Umum ke-15 (PRU15) atau Pilihan Raya Negeri '
 '(PRN) Johor. "Bagi Dr M, dia mempunyai majoriti yang lebih besar daripada '
 'dia. "Oleh kerana ada ramai anggota Parlimen dari PH, saya boleh menasihati '
 'beliau untuk (meletakkan jawatan) kepada saya. "Jangan (perlu) meletakkan '
 'jawatan dengan segera. Beliau mesti memainkan peranan sebagai perdana '
 'menteri tetapi sekiranya beliau tidak dapat memastikan parti-parti PH boleh '
 'menyokong beliau, kita boleh memberikan kepercayaan kepadanya," katanya '
 'dalam satu hantaran di akaun Twitter rasminya pada Sabtu. Muhyiddin berkata '
 'demikian sebagai respons terhadap kenyataannya pada Sabtu yang berkata '
 'Muhyiddin perlu']
[6]:
pprint(model.generate(isi_penting, mode = 'surat-khabar',
    do_sample=True,
    max_length=256,
    penalty_alpha=0.8, top_k=4,))
['KUALA LUMPUR:Perdana Menteri, Tan Sri Muhyiddin Yassin perlu dikekalkan '
 'sebagai perdana menteri, kata Ahli Parlimen Muar, Syed Saddiq Syed Abdul '
 'Rahman. Menurut Ahli Parlimen Muar itu lagi, Muhyiddin perlulah menolong Dr '
 'M. "Rakyat perlu menolong beliau. Beliau haruslah bertanggungjawab kepada Dr '
 'M. "Janganlah kita (kerajaan) tidak boleh membantu beliau. "Beliau mesti '
 'bertanggungjawab," katanya dalam satu video yang dimuat naik di laman '
 'Twitternya. Syed Saddiq yang juga bekas Ahli Parlimen Muar berkata, beliau '
 'sendiri akan memastikan Dr Mahathir kekal sebagai perdana menteri. "Saya '
 'akan pastikan beliau kekal sebagai perdana menteri," katanya lagi.']
[7]:
isi_penting = ['Neelofa tetap dengan keputusan untuk berkahwin akhir tahun ini',
              'Long Tiger sanggup membantu Neelofa',
              'Tiba-tiba Long Tiger bergaduh dengan Husein Zolkepli']

We also can give any isi penting even does not make any sense.

[8]:
pprint(model.generate(isi_penting, do_sample=True,
    max_length=256,
    top_k=50,
    top_p=0.9, ))
['"SAYA minta maaf apabila sudah tak boleh berkahwin," kata pelakon dan '
 'pengacara Neelofa, 26. Neelofa tetap dengan keputusannya untuk mengahwini '
 'lelaki pilihannya, Muhammad Husein Zolkepli, 21 bulan. Katanya, apa yang '
 'berlaku adalah kerana masalah peribadi yang dihadapi dengan dirinya sejak '
 'kebelakangan ini. "Bukan sebab saya berkahwin, tetapi saya dah lama tidak '
 'berkahwin. Jadi, saya tetap dengan keputusan untuk berkahwin akhir tahun '
 'ini. "Saya bersyukur kerana pada awalnya saya sanggup membantu Neelofa. '
 'Tiba-tiba Long Tiger (nama fandom Neelofa) bergaduh dengan Husein. "Sebaik '
 'menerima surat kahwin, dia dah suruh saya pikul tanggungjawab. Saya minta '
 'maaf kerana sudah tidak boleh buat. "Saya minta maaf kerana sudah tak boleh '
 'berkahwin. Sebaik menerima surat kahwin saya terus pikul tanggungjawab. '
 '"Sebaik menerima surat kahwin, dia akan cakap tak mengapa. Saya tak ada '
 'masalah pun," katanya kepada Harian Metro. Sementara itu, Neelofa '
 'menjelaskan dia pernah berjumpa suami pertamanya sebelum ini dan mempunyai '
 'masalah peribadi. "Maklumat saya dan isteri memang saya bertemu sejak '
 'berusia sembilan tahun dan dia sangat']
[9]:
pprint(model.generate(isi_penting, mode = 'surat-khabar',
    do_sample=True,
    max_length=256,
    penalty_alpha=0.8, top_k=4,))
['PELAKON dan pengacara Neelofa tetap dengan keputusan untuk berkahwin akhir '
 'tahun ini selepas berkahwin pada tahun lalu. Namun, Neelofa atau nama '
 'sebenarnya, Nur Neelofa Mohd Noor, 25, memilih untuk tidak bernikah kerana '
 'terlalu sibuk dengan urusan keluarga. "Saya tidak boleh berkahwin kerana '
 'sibuk dengan hal keluarga. "Saya juga tidak mahu berkahwin kerana terlalu '
 'sibuk menguruskan keluarga dan tidak mempunyai wang untuk melangsungkan '
 'perkahwinan. "Saya tidak mahu berkahwin lagi kerana bimbang akan berlaku '
 'perkara yang tidak diingini. "Saya juga tidak mempunyai sebarang masalah '
 'dengan keluarga dan tidak pernah berjumpa keluarga. "Apapun, saya tetap '
 'dengan keputusan untuk berkahwin," katanya kepada BH Online. Tiba-tiba Long '
 'Tiger bergaduh dengan Husein Zolkepli. "Saya tidak pernah berjumpa pun, '
 'malah ada juga berjumpa dengan isteri saya. "Namun, saya tetap bergaduh '
 'dengan lelaki yang saya kenali sejak dulu lagi. "Saya juga tidak mahu lagi '
 'bergaduh dengan suami kerana takut akan perkara yang tidak diingini," '
 'ujarnya. Neelofa dan Husein mendirikan rumah tangga pada tahun 2016 dan '
 'dikurniakan dua orang cahaya mata, Jebat Jayden, 2 tahun, dan Aaisyah Dhia '
 'Rana, 2 tahun.']