Jawi-to-Rumi#

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

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.71 s, sys: 1.06 s, total: 6.77 s
Wall time: 7.65 s

List available Transformer model#

[3]:
malaya.jawi_rumi.available_transformer()
INFO:malaya.jawi_rumi:tested on first 10k Jawi-Rumi 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.004477 0.013642 256.0
base 234.0 63.8 0.000764 0.003042 256.0

Load Transformer model#

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

    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
    """
[15]:
model = malaya.jawi_rumi.transformer()

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.

[16]:
quantized_model = malaya.jawi_rumi.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)
[12]:
strings = ['د لابوان ابفچ.',
 'سبلومڽ لبيه باڽق جوملهڽ.',
 'دان ممرلوكن ڤمبلاان.',
 'يڠ لاين.',
 'كريتا ڤروندا درڤد بالاي ڤوليس باچوق.',
 'سلڤس ٢٨ ڤوسيڠن رونديڠن دان ١٨ مشوارت منتري سلاما كيرا-كيرا توجوه تاهون، رونديڠن ايت',
 'ڤنجاڬ ڤرلو فهم دان اد علمو اوروس ورڬ امس، ايلق ڽاڽوق لبيه تروق.',
 'ڬوندڠ اداله تيدق بنر، كات كمنترين ڤرتانين دان ايندوستري اساس تاني ﴿موا﴾.',
 'بلياو ﴿ازهم﴾ داتڠ ك فام ڤد خميس لڤس برجومڤا دڠن ستياءوسها اڬوڠ فام ﴿ستوارت راماليڠام﴾ سلڤس ايت كلوار دڠن كڽاتأن',
 'يڠ توروت حاضر، تيمبالن ڤردان منتري، داتوق سري در وان عزيزه وان اسماعيل دان منتري كابينيت.']
[13]:
model.greedy_decoder(strings)
[13]:
['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.']
[14]:
quantized_model.greedy_decoder(strings)
[14]:
['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.']
[17]:
string = 'ساي سوك ماكن ايم'
[18]:
model.greedy_decoder([string])
[18]:
['saya suka makan ayam']
[19]:
quantized_model.greedy_decoder([string])
[19]:
['saya suka makan ayam']