Abstractive#

This tutorial is available as an IPython notebook at Malaya/example/abstractive-summarization.

This module only trained on standard language structure, so it is not save to use it for local language structure.

This module trained heavily on news structure.

This interface deprecated, use HuggingFace interface instead.

[1]:
import os

os.environ['CUDA_VISIBLE_DEVICES'] = ''
[2]:
import logging

logging.basicConfig(level=logging.INFO)
[3]:
%%time
import malaya
from pprint import pprint
/home/husein/dev/malaya/malaya/tokenizer.py:208: FutureWarning: Possible nested set at position 3372
  self.tok = re.compile(r'({})'.format('|'.join(pipeline)))
/home/husein/dev/malaya/malaya/tokenizer.py:208: FutureWarning: Possible nested set at position 3890
  self.tok = re.compile(r'({})'.format('|'.join(pipeline)))
CPU times: user 3.12 s, sys: 3.62 s, total: 6.74 s
Wall time: 2.17 s
[4]:
import warnings
warnings.filterwarnings('default')
[5]:
import re

# minimum cleaning, just simply to remove newlines.
def cleaning(string):
    string = string.replace('\n', ' ')
    string = re.sub(r'[ ]+', ' ', string).strip()
    return string

I am going to simply copy paste some local news into this notebook. I will search about isu mahathir in google news, link here.

link: https://www.hmetro.com.my/mutakhir/2020/05/580438/peletakan-jawatan-tun-m-ditolak-bukan-lagi-isu

Title: Peletakan jawatan Tun M ditolak, bukan lagi isu.

Body: PELETAKAN jawatan Tun Dr Mahathir Mohamad sebagai Pengerusi Parti Pribumi Bersatu Malaysia (Bersatu) ditolak di dalam mesyuarat khas Majlis Pimpinan Tertinggi (MPT) pada 24 Februari lalu.

Justeru, tidak timbul soal peletakan jawatan itu sah atau tidak kerana ia sudah pun diputuskan pada peringkat parti yang dipersetujui semua termasuk Presiden, Tan Sri Muhyiddin Yassin.

Bekas Setiausaha Agung Bersatu Datuk Marzuki Yahya berkata, pada mesyuarat itu MPT sebulat suara menolak peletakan jawatan Dr Mahathir.

“Jadi ini agak berlawanan dengan keputusan yang kita sudah buat. Saya tak faham bagaimana Jabatan Pendaftar Pertubuhan Malaysia (JPPM) kata peletakan jawatan itu sah sedangkan kita sudah buat keputusan di dalam mesyuarat, bukan seorang dua yang buat keputusan.

“Semua keputusan mesti dibuat melalui parti. Walau apa juga perbincangan dibuat di luar daripada keputusan mesyuarat, ini bukan keputusan parti.

“Apa locus standy yang ada pada Setiausaha Kerja untuk membawa perkara ini kepada JPPM. Seharusnya ia dibawa kepada Setiausaha Agung sebagai pentadbir kepada parti,” katanya kepada Harian Metro.

Beliau mengulas laporan media tempatan hari ini mengenai pengesahan JPPM bahawa Dr Mahathir tidak lagi menjadi Pengerusi Bersatu berikutan peletakan jawatannya di tengah-tengah pergolakan politik pada akhir Februari adalah sah.

Laporan itu juga menyatakan, kedudukan Muhyiddin Yassin memangku jawatan itu juga sah.

Menurutnya, memang betul Dr Mahathir menghantar surat peletakan jawatan, tetapi ditolak oleh MPT.

“Fasal yang disebut itu terpakai sekiranya berhenti atau diberhentikan, tetapi ini mesyuarat sudah menolak,” katanya.

Marzuki turut mempersoal kenyataan media yang dibuat beberapa pimpinan parti itu hari ini yang menyatakan sokongan kepada Perikatan Nasional.

“Kenyataan media bukanlah keputusan rasmi. Walaupun kita buat 1,000 kenyataan sekali pun ia tetap tidak merubah keputusan yang sudah dibuat di dalam mesyuarat. Kita catat di dalam minit apa yang berlaku di dalam mesyuarat,” katanya.

[6]:
string = """
PELETAKAN jawatan Tun Dr Mahathir Mohamad sebagai Pengerusi Parti Pribumi Bersatu Malaysia (Bersatu) ditolak di dalam mesyuarat khas Majlis Pimpinan Tertinggi (MPT) pada 24 Februari lalu.

Justeru, tidak timbul soal peletakan jawatan itu sah atau tidak kerana ia sudah pun diputuskan pada peringkat parti yang dipersetujui semua termasuk Presiden, Tan Sri Muhyiddin Yassin.

Bekas Setiausaha Agung Bersatu Datuk Marzuki Yahya berkata, pada mesyuarat itu MPT sebulat suara menolak peletakan jawatan Dr Mahathir.

"Jadi ini agak berlawanan dengan keputusan yang kita sudah buat. Saya tak faham bagaimana Jabatan Pendaftar Pertubuhan Malaysia (JPPM) kata peletakan jawatan itu sah sedangkan kita sudah buat keputusan di dalam mesyuarat, bukan seorang dua yang buat keputusan.

"Semua keputusan mesti dibuat melalui parti. Walau apa juga perbincangan dibuat di luar daripada keputusan mesyuarat, ini bukan keputusan parti.

"Apa locus standy yang ada pada Setiausaha Kerja untuk membawa perkara ini kepada JPPM. Seharusnya ia dibawa kepada Setiausaha Agung sebagai pentadbir kepada parti," katanya kepada Harian Metro.

Beliau mengulas laporan media tempatan hari ini mengenai pengesahan JPPM bahawa Dr Mahathir tidak lagi menjadi Pengerusi Bersatu berikutan peletakan jawatannya di tengah-tengah pergolakan politik pada akhir Februari adalah sah.

Laporan itu juga menyatakan, kedudukan Muhyiddin Yassin memangku jawatan itu juga sah.

Menurutnya, memang betul Dr Mahathir menghantar surat peletakan jawatan, tetapi ditolak oleh MPT.

"Fasal yang disebut itu terpakai sekiranya berhenti atau diberhentikan, tetapi ini mesyuarat sudah menolak," katanya.

Marzuki turut mempersoal kenyataan media yang dibuat beberapa pimpinan parti itu hari ini yang menyatakan sokongan kepada Perikatan Nasional.

"Kenyataan media bukanlah keputusan rasmi. Walaupun kita buat 1,000 kenyataan sekali pun ia tetap tidak merubah keputusan yang sudah dibuat di dalam mesyuarat. Kita catat di dalam minit apa yang berlaku di dalam mesyuarat," katanya.
"""

string = cleaning(string)

Link: https://www.malaysiakini.com/news/525953

Title: Mahathir jangan hipokrit isu kes mahkamah Riza, kata Takiyuddin

Body: Menteri undang-undang Takiyuddin Hassan berkata kerajaan berharap Dr Mahathir Mohamad tidak bersikap hipokrit dengan mengatakan beliau tertanya-tanya dan tidak faham dengan keputusan mahkamah melepas tanpa membebaskan (DNAA) Riza Aziz, anak tiri bekas perdana menteri Najib Razak, dalam kes pengubahan wang haram membabitkan dana 1MDB.

Pemimpin PAS itu berkata ini kerana keputusan itu dibuat oleh peguam negara dan dilaksanakan oleh timbalan pendakwa raya yang mengendalikan kes tersebut pada akhir 2019.

“Saya merujuk kepada kenyataan Dr Mahathir tentang tindakan Mahkamah Sesyen memberikan pelepasan tanpa pembebasan (discharge not amounting to acquittal) kepada Riza Aziz baru-baru ini.

“Kerajaan berharap Dr Mahathir tidak bersikap hipokrit dengan mengatakan beliau ‘tertanya-tanya’, keliru dan tidak faham terhadap suatu keputusan yang dibuat oleh Peguam Negara dan dilaksanakan oleh Timbalan Pendakwa Raya yang mengendalikan kes ini pada akhir tahun 2019,” katanya dalam satu kenyataan hari ini.

Riza pada Khamis dilepas tanpa dibebaskan daripada lima pertuduhan pengubahan wang berjumlah AS$248 juta (RM1.08 bilion).

Dalam persetujuan yang dicapai antara pihak Riza dan pendakwaan, beliau dilepas tanpa dibebaskan atas pertuduhan itu dengan syarat memulangkan semula aset dari luar negara dengan nilai anggaran AS$107.3 juta (RM465.3 juta).

Ekoran itu, Mahathir antara lain menyuarakan kekhuatirannya berkenaan persetujuan itu dan mempersoalkan jika pihak yang didakwa atas tuduhan mencuri boleh terlepas daripada tindakan jika memulangkan semula apa yang dicurinya.

“Dia curi berbilion-bilion…Dia bagi balik kepada kerajaan. Dia kata kepada kerajaan, ‘Nah, duit yang aku curi. Sekarang ini, jangan ambil tindakan terhadap aku.’ Kita pun kata, ‘Sudah bagi balik duit okey lah’,” katanya.

Menjelaskan bahawa beliau tidak mempersoalkan keputusan mahkamah, Mahathir pada masa sama berkata ia menunjukkan undang-undang mungkin perlu dipinda.

Mengulas lanjut, Takiyuddin yang juga setiausaha agung PAS berkata kenyataan Mahathir tidak munasabah sebagai bekas perdana menteri.

“Kerajaan berharap Dr Mahathir tidak terus bertindak mengelirukan rakyat dengan mengatakan beliau ‘keliru’.

“Kerajaan PN akan terus bertindak mengikut undang-undang dan berpegang kepada prinsip kebebasan badan kehakiman dan proses perundangan yang sah,” katanya.

[7]:
string2 = """
Menteri undang-undang Takiyuddin Hassan berkata kerajaan berharap Dr Mahathir Mohamad tidak bersikap hipokrit dengan mengatakan beliau tertanya-tanya dan tidak faham dengan keputusan mahkamah melepas tanpa membebaskan (DNAA) Riza Aziz, anak tiri bekas perdana menteri Najib Razak, dalam kes pengubahan wang haram membabitkan dana 1MDB.

Pemimpin PAS itu berkata ini kerana keputusan itu dibuat oleh peguam negara dan dilaksanakan oleh timbalan pendakwa raya yang mengendalikan kes tersebut pada akhir 2019.

“Saya merujuk kepada kenyataan Dr Mahathir tentang tindakan Mahkamah Sesyen memberikan pelepasan tanpa pembebasan (discharge not amounting to acquittal) kepada Riza Aziz baru-baru ini.

“Kerajaan berharap Dr Mahathir tidak bersikap hipokrit dengan mengatakan beliau ‘tertanya-tanya’, keliru dan tidak faham terhadap suatu keputusan yang dibuat oleh Peguam Negara dan dilaksanakan oleh Timbalan Pendakwa Raya yang mengendalikan kes ini pada akhir tahun 2019,” katanya dalam satu kenyataan hari ini.

Riza pada Khamis dilepas tanpa dibebaskan daripada lima pertuduhan pengubahan wang berjumlah AS$248 juta (RM1.08 bilion).

Dalam persetujuan yang dicapai antara pihak Riza dan pendakwaan, beliau dilepas tanpa dibebaskan atas pertuduhan itu dengan syarat memulangkan semula aset dari luar negara dengan nilai anggaran AS$107.3 juta (RM465.3 juta).

Ekoran itu, Mahathir antara lain menyuarakan kekhuatirannya berkenaan persetujuan itu dan mempersoalkan jika pihak yang didakwa atas tuduhan mencuri boleh terlepas daripada tindakan jika memulangkan semula apa yang dicurinya.

"Dia curi berbilion-bilion...Dia bagi balik kepada kerajaan. Dia kata kepada kerajaan, 'Nah, duit yang aku curi. Sekarang ini, jangan ambil tindakan terhadap aku.' Kita pun kata, 'Sudah bagi balik duit okey lah'," katanya.

Menjelaskan bahawa beliau tidak mempersoalkan keputusan mahkamah, Mahathir pada masa sama berkata ia menunjukkan undang-undang mungkin perlu dipinda.

Mengulas lanjut, Takiyuddin yang juga setiausaha agung PAS berkata
kenyataan Mahathir tidak munasabah sebagai bekas perdana menteri.

"Kerajaan berharap Dr Mahathir tidak terus bertindak mengelirukan rakyat dengan mengatakan beliau ‘keliru’.

“Kerajaan PN akan terus bertindak mengikut undang-undang dan berpegang kepada prinsip kebebasan badan kehakiman dan proses perundangan yang sah,” katanya.
"""

string2 = cleaning(string2)

List available Transformer models#

[8]:
malaya.summarization.abstractive.available_transformer()
/home/husein/dev/malaya/malaya/summarization/abstractive.py:102: DeprecationWarning: `malaya.summarization.abstractive.available_transformer` is deprecated, use `malaya.summarization.abstractive.available_huggingface` instead
  warnings.warn(
INFO:malaya.summarization.abstractive:tested on translated validation set CNN Daily Mail, https://huggingface.co/mesolitica
[8]:
Size (MB) Quantized Size (MB) ROUGE-1 ROUGE-2 ROUGE-L Suggested length
t5 1250.0 481.0 0.371740 0.184714 0.258272 512.0
small-t5 355.6 195.0 0.366970 0.177330 0.254670 512.0
tiny-t5 208.0 103.0 0.302676 0.119321 0.202918 512.0
pegasus 894.0 225.0 0.251093 0.066789 0.155907 512.0
small-pegasus 293.0 74.2 0.290123 0.118788 0.192322 512.0
bigbird 910.0 230.0 0.267346 0.072391 0.161326 1536.0
small-bigbird 303.0 77.3 0.246203 0.058961 0.151590 1536.0
  1. t5 is multitasks Transformer from T5 paper.

  2. pegasus is Sentence Gap Pegasus.

  3. bigbird is Finetuning Sentence Gap Pegasus.

Load Transformer model#

def transformer(model: str = 'small-t5', quantized: bool = False, **kwargs):
    """
    Load Malaya transformer encoder-decoder model to generate a summary given a string.

    Parameters
    ----------
    model: str, optional (default='small-t5')
        Check available models at `malaya.summarization.abstractive.available_transformer()`.
    quantized: bool, optional (default=False)
        if True, will load 8-bit quantized model.
        Quantized model not necessary faster, totally depends on the machine.

    Returns
    -------
    result: model
        List of model classes:

        * if `t5` in model, will return `malaya.model.t5.Summarization`.
        * if `bigbird` in model, will return `malaya.model.bigbird.Summarization`.
        * if `pegasus` in model, will return `malaya.model.pegasus.Summarization`.
    """

For T5 models, you need to install tensorflow-text, and make sure tensorflow-text version same as your tensorflow version,

# if your TF version is 1.15.4
pip3 install install tensorflow-text==1.15.1

# if your TF version is 2.5
pip3 install install tensorflow-text==2.5.0
[9]:
t5 = malaya.summarization.abstractive.transformer(model = 'small-t5')
/home/husein/dev/malaya/malaya/summarization/abstractive.py:140: DeprecationWarning: `malaya.summarization.abstractive.transformer` is deprecated, use `malaya.summarization.abstractive.huggingface` instead
  warnings.warn(
2022-10-30 15:47:17.983347: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2022-10-30 15:47:17.987134: E tensorflow/stream_executor/cuda/cuda_driver.cc:271] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected
2022-10-30 15:47:17.987151: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:169] retrieving CUDA diagnostic information for host: husein-MS-7D31
2022-10-30 15:47:17.987158: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:176] hostname: husein-MS-7D31
2022-10-30 15:47:17.987230: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:200] libcuda reported version is: Not found: was unable to find libcuda.so DSO loaded into this program
2022-10-30 15:47:17.987245: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:204] kernel reported version is: 470.141.3
[3]:
model = malaya.summarization.abstractive.transformer(model = 'pegasus')
small_model = malaya.summarization.abstractive.transformer(model = 'small-pegasus')

Load Quantized model#

To load 8-bit quantized model, simply pass quantized = True, default is False.

We can expect slightly accuracy drop from quantized model, and not necessary faster than normal 32-bit float model, totally depends on machine.

[8]:
t5 = malaya.summarization.abstractive.transformer(model = 't5', quantized = True)
WARNING:root:Load quantized model will cause accuracy drop.
INFO:root:running abstractive-summarization-v2/pegasus-quantized using device /device:CPU:0

Predict using greedy decoder#

def greedy_decoder(
    self,
    strings: List[str],
    postprocess: bool = False,
    **kwargs,
):
    """
    Summarize strings using greedy decoder.

    Parameters
    ----------
    strings: List[str]
    postprocess: bool, optional (default=False)
        If True, will filter sentence generated using ROUGE score and removed international news publisher.

    Returns
    -------
    result: List[str]
    """
[17]:
pprint(t5.greedy_decoder([string]))
['Kenyataan media yang dibuat beberapa pimpinan parti tidak mengubah keputusan '
 'mesyuarat. Kenyataan media tidak mengubah keputusan mesyuarat. Marzuki '
 'berkata peletakan jawatan Dr Mahathir adalah sah. Beliau berkata peletakan '
 'jawatan itu sudah diputuskan oleh semua pihak.']
[20]:
pprint(t5.greedy_decoder([string2]))
['"Kerajaan berharap Dr Mahathir tidak bersikap hipokrit," kata menteri '
 'undang-undang. Riza Aziz, anak tiri Najib Razak, dilepas tanpa dibebaskan '
 'daripada lima pertuduhan pengubahan wang haram. Mahathir mengatakan Riza '
 'adalah "tertanya-tanya" dan tidak faham. Mahathir juga mempersoalkan jika '
 'pihak yang didakwa mencuri boleh terlepas daripada tindakan jika memulangkan '
 'semula aset.']
[9]:
pprint(model.greedy_decoder([string]))
['Bekas Pengerusi JPT , Datuk Dr . Ismail Mustafa mempersoalkan keputusan '
 'Mesyuarat Agung Bersatu . Mustafar dilantik sebagai Ketua Parti Bersatu '
 'Sabah dan akan digantikan dengan kepimpinan parti . Mesyuarat ini bukan '
 'untuk Mesyuarat Agung Bersatu tetapi untuk Mesyuarat Parti Bersatu yang akan '
 'diadakan pada 1 Februari ini .']
[7]:
pprint(small_model.greedy_decoder([string]))
['Dengan adanya sebarang bayaran balik , pihak - pihak bersetuju untuk membuat '
 'perubahan . Dr Mahathir Mohamad ditolak oleh MPT . Ketua Parti Pribumi '
 'Bersatu Malaysia ( USDP ) menyatakan kedudukan Yassin tidak lagi sah .']

Predict using nucleus decoder#

def nucleus_decoder(
    self,
    strings: List[str],
    top_p: float = 0.7,
    temperature: float = 0.2,
    postprocess: bool = False,
    **kwargs,
):
    """
    Summarize strings using nucleus decoder.

    Parameters
    ----------
    strings: List[str]
    top_p: float, (default=0.7)
        cumulative distribution and cut off as soon as the CDF exceeds `top_p`.
    temperature: float, (default=0.3)
        logits * -log(random.uniform) * temperature.
    postprocess: bool, optional (default=False)
        If True, will filter sentence generated using ROUGE score and removed international news publisher.

    Returns
    -------
    result: List[str]
    """
[8]:
pprint(model.nucleus_decoder([string]))
['Bekas Pengerusi JPT , Datuk Dr . Ismail Mustafa mempersoalkan keputusan '
 'Mesyuarat Agung Bersatu . Mustafar dilantik sebagai Ketua Parti Bersatu '
 'Sabah dan akan digantikan dengan kepimpinan parti . Memetik laporan media '
 'yang menyebut Dr . Mahathir sebagai seorang lagi ahli bukan Melayu .']
[9]:
pprint(small_model.nucleus_decoder([string]))
['Dengan adanya sebarang bayaran balik , pihak - pihak bersetuju untuk membuat '
 'semua keputusan di dalam sebuah mesyuarat . Dr Mahathir Mohamad ditolak oleh '
 'MPT dalam mesyuarat khas . Ketua Parti Pribumi Bersatu Malaysia ( USDP ) '
 'menyatakan pihak tidak pernah mengubah keputusan .']