Paraphrase

This tutorial is available as an IPython notebook at Malaya/example/paraphrase.

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

[2]:
%%time

import malaya
from pprint import pprint
CPU times: user 8 µs, sys: 0 ns, total: 8 µs
Wall time: 12.2 µs

List available T5 models

[3]:
malaya.paraphrase.available_t5()
INFO:root:tested on 1k paraphrase texts.
[3]:
Size (MB) Uncompressed Size (MB) Optimized Size (MB) BLEU
small 122.0 355.6 244.0 0.81801
base 448.0 1300.0 895.0 0.86698

Load T5 models

def t5(
    model: str = 'base',
    compressed: bool = True,
    optimized: bool = False,
    **kwargs,
):

    """
    Load T5 model to generate a paraphrase given a string.

    Parameters
    ----------
    model : str, optional (default='base')
        Model architecture supported. Allowed values:

        * ``'base'`` - T5 BASE parameters.
        * ``'small'`` - T5 SMALL parameters.

    compressed: bool, optional (default=True)
        Load compressed model, but this not able to utilize malaya-gpu function.
        This only compressed model size, but when loaded into VRAM / RAM, size uncompressed and compressed are the same.
        We prefer un-compressed model due to compressed model prone to error.

    optimized : bool, optional (default=False)
        if True, will load optimized uncompressed model, remove unnecessary nodes and fold batch norm to reduce model size.
        Optimized model not necessary faster, totally depends on the machine.
        We have no concrete proof optimized model maintain same accuracy as uncompressed model.

For malaya-gpu user, compressed t5 very fragile and we suggest use ``compressed=False``. Uncompressed model also can utilise GPU usage more efficient.

[7]:
t5 = malaya.paraphrase.t5()
WARNING:tensorflow:From /Users/huseinzolkepli/Documents/Malaya/malaya/paraphrase.py:84: load (from tensorflow.python.saved_model.loader_impl) is deprecated and will be removed in a future version.
Instructions for updating:
This function will only be available through the v1 compatibility library as tf.compat.v1.saved_model.loader.load or tf.compat.v1.saved_model.load. There will be a new function for importing SavedModels in Tensorflow 2.0.
INFO:tensorflow:Restoring parameters from /Users/huseinzolkepli/Malaya/paraphrase/t5/base/model/variables/variables

Paraphrase simple string

We only provide greedy_decoder method for T5 models,

@check_type
def greedy_decoder(self, string: str, split_fullstop: bool = True):
    """
    paraphrase a string. Decoder is greedy decoder with beam width size 1, alpha 0.5 .

    Parameters
    ----------
    string: str
    split_fullstop: bool, (default=True)
        if True, will generate paraphrase for each strings splitted by fullstop.

    Returns
    -------
    result: str
    """
[9]:
string = "Beliau yang juga saksi pendakwaan kesembilan berkata, ia bagi mengelak daripada wujud isu digunakan terhadap Najib."
pprint(string)
('Beliau yang juga saksi pendakwaan kesembilan berkata, ia bagi mengelak '
 'daripada wujud isu digunakan terhadap Najib.')
[13]:
pprint(t5.greedy_decoder(string))
('Ini juga bagi mengelakkan wujud isu yang digunakan terhadap Najib, kata '
 'saksi kesembilan.')

Paraphrase longer string

[14]:
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.
"""
[15]:
import re

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

string = cleaning(string)
pprint(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.')

T5 model

[19]:
pprint(t5.greedy_decoder(string))
('Peletakan jawatan Tun Dr. Mahathir sebagai Pengerusi Parti Pribumi Bersatu '
 'Malaysia ditolak di dalam mesyuarat khas MPT (Parti Pimpinan Tertinggi) pada '
 '24 Februari lalu. Tidak kira sama ada peletakan jawatan itu sah atau tidak, '
 'kerana sudah pun dinyatakan pada peringkat parti yang menyetujui semua, '
 'termasuk Presiden Tan Sri Muhyiddin Yassin. Saya telah mencadangkan kepada '
 'MPT untuk sebulat suara, kata Marzuki. " Ini semua dibuat berlawanan dengan '
 'keputusan yang kita sudah membuat. Saya tak faham bagaimana Jabatan '
 'Pendaftaran Pertubuhan Malaysia (JPPM) mengatakan bahawa peletakan jawatan '
 'itu sah, padahal kita sudah membuat keputusan di dalam pertemuan, bukan dua '
 'orang yang membuat keputusan. " Semua keputusan mesti dibuat oleh parti. '
 'Tetapi keputusan untuk memberi kesan kepada perbincangan, itu bukan '
 'keputusan parti. " Apa yang berlaku di locus standy Setiausaha Kerja untuk '
 'membawa perkara ini ke JPPM. Seharusnya diserahkan kepada Setiausaha Agung '
 'sebagai pentadbir kepada parti, kata Bruno. Namun, dia menambah laporan '
 'media tempatan hari ini mengenai pengesahan JPPM bahawa Dr Mahathir tidak '
 'lagi menjadi pemimpin Bersatu setelah peletakan jawatan di tengah-tengah '
 'pergolakan politik pada akhir Februari. Kedudukan Muhyiddin juga sah, kata '
 'laporan itu. Dia mengatakan bahawa memang betul Tun Mahathir menyerahkan '
 'surat peletakan jawatan tetapi ditolak oleh MPT. "Fasal yang disebut itu '
 'terpakai sekiranya berhenti atau diberhentikan, tetapi ini pertemuan sudah '
 'menolak," katanya. Sebaliknya, Marzuki mempersoalkan kenyataan media '
 'beberapa pimpinan parti hari ini yang menyatakan sokongan kepada Perikatan '
 'Nasional. Akhbar bebas sepenuhnya menentukan keputusan rasmi mereka. '
 'Walaupun kami membuat 1,000 kenyataan, ia tetap tidak mengubah keputusan '
 'yang sudah dibuat di dalam mesyuarat. Kami mengambil minit apa yang berlaku '
 'di dalam mesyuarat ini, "kata Griffin.')

You can see Griffin out-of-context, this is because the model trying to predict who is katanya, so it simply pulled random name from training set. To solve this problem, you need to do sliding windows. If we have 5 strings, simply give [s1, s2], [s2, s3] and so on the model, at least the model got some context from previous string.

[20]:
pprint(t5.greedy_decoder(string, split_fullstop = False))
('Kedudukan Dr. Mahathir sebagai Pengerusi Parti Pribumi Bersatu Malaysia '
 '(Bersatu) ditolak di dalam mesyuarat khas Majlis Pimpinan Tertinggi (MPT) '
 'pada 24 Februari, dan bahawa posisi beliau memangku melalui parti, dan '
 'bahawa semua keputusan harus diambil oleh MPT, dan itu bukan keputusan '
 'parti, tetapi sebagai kenyataan media, kata Marzuki, pemimpin yang '
 'berpangkalan di Perlis, yang ditemui pada hari Jumaat. "')

When you try to paraphrase entire string, the output is quite good, a summary!

List available LM Transformer models

Problem with T5 models, it built on top of mesh-tensorflow, so the input must size of 1. So we use Tensor2Tensor library to train exact model as T5 with dynamic size of batch.

[4]:
malaya.paraphrase.available_transformer()
INFO:root:tested on 1k paraphrase texts.
[4]:
Size (MB) Quantized Size (MB) BLEU
small 379.0 120.0 0.658490
base 832.0 279.0 0.596123

Load Transformer

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.

[ ]:
model = malaya.paraphrase.transformer(model = 'small')
quantized_model = malaya.paraphrase.transformer(model = 'small', quantized = True)
[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.
"""
[8]:
import re

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

string = cleaning(string)
splitted = malaya.text.function.split_into_sentences(string)

Predict using greedy decoder

def greedy_decoder(self, strings: List[str], **kwargs):
    """
    Paraphrase strings using greedy decoder.

    Parameters
    ----------
    strings: List[str]

    Returns
    -------
    result: List[str]
    """
[9]:
' '.join(splitted[:2])
[9]:
'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.'
[10]:
model.greedy_decoder([' '.join(splitted[:2])])
[10]:
['Catatan mengenai peletakan jawatan Tun Dr. Mahathir sebagai Pengerusi Parti Pribumi Bersatu Malaysia (Bersatu) telah ditolak dalam mesyuarat khas MPT pada 24 Februari lalu, dan tidak akan ada persoalan bahawa ia sudah pun diputuskan pada peringkat parti yang menyetujui semua, termasuk Presiden Tan Sri Muhyiddin Yassin.']
[11]:
quantized_model.greedy_decoder([' '.join(splitted[:2])])
[11]:
['Tidak timbul persoalan bahawa peletakan jawatan Tun Dr. Mahathir sebagai Pengerusi Parti Pribumi Bersatu Malaysia (Bersatu) telah ditolak dalam mesyuarat khas MPT pada 24 Februari lalu, dan tidak ada persoalan bahawa ia sudah pun diputuskan pada peringkat parti yang menyetujui semua, termasuk Presiden Tan Sri Muhyiddin Yassin.']

Predict using beam decoder

def beam_decoder(self, strings: List[str], **kwargs):
    """
    Paraphrase strings using beam decoder, beam width size 3, alpha 0.5 .

    Parameters
    ----------
    strings: List[str]

    Returns
    -------
    result: List[str]
    """
[12]:
model.beam_decoder([' '.join(splitted[:2])])
[12]:
['Catatan mengenai peletakan jawatan Tun Dr. Mahathir sebagai Pengerusi Parti Pribumi Bersatu Malaysia (Bersatu) telah ditolak pada 24 Februari lalu dalam mesyuarat khas Majlis Pimpinan Tertinggi (MPT).']
[13]:
quantized_model.beam_decoder([' '.join(splitted[:2])])
[13]:
['Catatan mengenai peletakan jawatan Tun Dr. Mahathir sebagai Pengerusi Parti Pribumi Bersatu Malaysia (Bersatu) telah ditolak pada 24 Februari lalu dalam mesyuarat khas Majlis Pimpinan Tertinggi (MPT).']

Predict using nucleus decoder

def nucleus_decoder(self, strings: List[str], top_p: float = 0.7, **kwargs):
    """
    Paraphrase strings using nucleus sampling.

    Parameters
    ----------
    strings: List[str]
    top_p: float, (default=0.7)
        cumulative distribution and cut off as soon as the CDF exceeds `top_p`.

    Returns
    -------
    result: List[str]
    """
[14]:
model.nucleus_decoder([' '.join(splitted[:2])])
[14]:
['Pengaturan jawatan Tun Dr. Mahathir sebagai Pengerusi Parti Pribumi Bersatu Malaysia (Bersatu) ditolak dalam mesyuarat khas MPT pada 24 Februari lalu, dan tidak ada alasan untuk future pencalonan, kerana ia sudah pun diputuskan pada peringkat parti yang menyetujui semua, termasuk Presiden Tan Sri Muhyiddin Yassin.']
[16]:
quantized_model.nucleus_decoder([' '.join(splitted[:2])], top_p = 0.5)
[16]:
['Pemerintah dilantik sebagai Pengerusi Parti Pribumi Bersatu Malaysia (Bersatu) oleh Majlis Pimpinan Tertinggi (MPT) pada 24 Februari lalu, dan tidak ada persoalan bahawa peletakan jawatan itu sah atau tidak, kerana sudah diputuskan pada peringkat parti yang menyetujui semua, termasuk Presiden, Tan Sri Muhyiddin Yassin. Kata Dr Mahathir Mohamad, "18." Parti itu telah menolak sebarang keputusan mengenai peletakan jawatan mereka. kerana semua itu tidak ada persoalan bahawa Muhyiddin Yassin. Parti Pribumi Bersatu Malaysia, yang menjauhkan diri dari semua haknya untuk jawatan mereka dari jawatannya. dan peletakan jawatan Tun Dr Mahathir Mohamad. parlimen, dalam kedudukan Dr Mahathir Mohamad, dalam peletakan jawatan Dr Mahathir Mohamad, menyuarakan pentadbiran, yang diterima oleh Majlis Pimpinan']