Rumi-to-Jawi#

This tutorial is available as an IPython notebook at Malaya/example/rumi-jawi.

This module heavily trained on news and wikipedia dataset.

Explanation#

Originally from https://www.ejawi.net/converterV2.php?go=rumi able to convert Rumi to Jawi using heuristic method. So Malaya convert from heuristic and map it using deep learning model by inverse the dataset.

comel -> چوميل

[1]:
import logging

logging.basicConfig(level=logging.INFO)
[2]:
%%time
import malaya
INFO:numexpr.utils:NumExpr defaulting to 8 threads.
CPU times: user 5.81 s, sys: 1.24 s, total: 7.06 s
Wall time: 9.8 s

List available Transformer model#

[3]:
malaya.rumi_jawi.available_transformer()
INFO:malaya.rumi_jawi:tested on first 10k Rumi-Jawi test set, dataset at https://huggingface.co/datasets/mesolitica/rumi-jawi
[3]:
Size (MB) Quantized Size (MB) CER WER Suggested length
small 42.7 13.1 0.000617 0.001928 256.0
base 234.0 63.8 0.000124 0.000438 256.0

Load Transformer model#

def transformer(model='base', quantized: bool = False, **kwargs):
    """
    Load transformer encoder-decoder model to convert rumi to jawi.

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

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

    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: malaya.model.tf.JawiRumi class
    """
[24]:
model = malaya.rumi_jawi.transformer()
INFO:malaya_boilerplate.frozen_graph:running Users/huseinzolkepli/.cache/huggingface/hub using device /device:CPU:0

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.

[25]:
quantized_model = malaya.rumi_jawi.transformer(quantized = True)

Predict using greedy decoder#

def greedy_decoder(self, strings: List[str]):
    """
    Convert list of jawi strings to rumi strings.
    'isu bil tnb dibawa ke kabinet - saifuddin' -> 'ايسو بيل تنب دباوا ك كابينيت - صيفالدين'

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

    Returns
    -------
    result: List[str]
    """
    return self._greedy_decoder(strings)
[6]:
strings = ['di labuan ibfc.',
 'sebelumnya lebih banyak jumlahnya.',
 'dan memerlukan pembelaan. dan memerlukan pembelaan.',
 'yang lain.',
 'kereta peronda daripada balai polis bachok.',
 'selepas 28 pusingan rundingan dan 18 mesyuarat menteri selama kira-kira tujuh tahun, rundingan itu',
 'penjaga perlu faham dan ada ilmu urus warga emas, elak nyanyuk lebih teruk.',
 'gondang adalah tidak benar, kata kementerian pertanian dan industri asas tani (moa).',
 'beliau (izham) datang ke fam pada khamis lepas berjumpa dengan setiausaha agung fam (stuart ramalingam) selepas itu keluar dengan kenyataan',
 'yang turut hadir, timbalan perdana menteri, datuk seri dr wan azizah wan ismail dan menteri kabinet.']
[21]:
for s in strings:
    print(model.greedy_decoder([s])[0])
د لابوان ابفچ.
سبلومڽ لبيه باڽق جوملهڽ.
دان ممرلوكن ڤمبلاان. دان ممرلوكن ڤمبلاان.
يڠ لاين.
كريتا ڤروندا درڤد بالاي ڤوليس باچوق.
سلڤس ٢٨ ڤوسيڠن رونديڠن دان ١٨ مشوارت منتري سلاما كيرا-كيرا توجوه تاهون، رونديڠن ايت
ڤنجاڬ ڤرلو فهم دان اد علمو اوروس ورڬ امس، ايلق ڽاڽوق لبيه تروق.
ڬوندڠ اداله تيدق بنر، كات كمنترين ڤرتانين دان ايندوستري اساس تاني ﴿موا﴾.
بلياو ﴿ازهم﴾ داتڠ ك فام ڤد خميس لڤس برجومڤا دڠن ستياءوسها اڬوڠ فام ﴿ستوارت راماليڠام﴾ سلڤس ايت كلوار دڠن كڽاتأن
يڠ توروت حاضر، تيمبالن ڤردان منتري، داتوق سري در وان عزيزه وان اسماعيل دان منتري كابينيت.
[22]:
for s in strings:
    print(quantized_model.greedy_decoder([s])[0])
د لابوان ابفچ.
سبلومڽ لبيه باڽق جوملهڽ.
دان ممرلوكن ڤمبلاان. دان ممرلوكن ڤمبلاان.
يڠ لاين.
كريتا ڤروندا درڤد بالاي ڤوليس باچوق.
سلڤس ٢٨ ڤوسيڠن رونديڠن دان ١٨ مشوارت منتري سلاما كيرا-كيرا توجوه تاهون، رونديڠن ايت
ڤنجاڬ ڤرلو فهم دان اد علمو اوروس ورڬ امس، ايلق ڽاڽوق لبيه تروق.
ڬوندڠ اداله تيدق بنر، كات كمنترين ڤرتانين دان ايندوستري اساس تاني ﴿موا﴾.
بلياو ﴿ازهم﴾ داتڠ ك فام ڤد خميس لڤس برجومڤا دڠن ستياءوسها اڬوڠ فام ﴿ستوارت راماليڠام﴾ سلڤس ايت كلوار دڠن كڽاتأن
يڠ توروت حاضر، تيمبالن ڤردان منتري، داتوق سري در وان عزيزه وان اسماعيل دان منتري كابينيت.
[9]:
string = 'saya suka makan ayam dan ikan, sedap gila'
[10]:
model.greedy_decoder([string])
[10]:
['ساي سوك ماكن ايم دان ايكن، سداڤ ڬيلا']
[11]:
quantized_model.greedy_decoder([string])
[11]:
['ساي سوك ماكن ايم دان ايكن، سداڤ ڬيلا']