Source code for malaya.tatabahasa

from malaya.supervised import t5 as t5_load
from malaya.supervised import transformer as load_transformer
from malaya.model.tf import Tatabahasa
from malaya.model.t5 import Tatabahasa as T5_Tatabahasa
from herpetologist import check_type

_transformer_tagging_availability = {
    'small': {
        'Size (MB)': 397,
        'Quantized Size (MB)': 100,
        'Sequence Accuracy': 0.860198,
        'Sequence Tagging Accuracy': 0.96326745,
    },
    'base': {
        'Size (MB)': 875,
        'Quantized Size (MB)': 220,
        'Sequence Accuracy': 0.938972,
        'Sequence Tagging Accuracy': 0.977407,
    },
}

_transformer_availability = {
    't5': {
        'Size (MB)': 1250,
        'Quantized Size (MB)': 481,
        'WER': 0.0178902,
    },
    'small-t5': {
        'Size (MB)': 355.6,
        'Quantized Size (MB)': 195,
        'WER': 0.0187973,
    },
    'tiny-t5': {
        'Size (MB)': 208,
        'Quantized Size (MB)': 103,
        'WER': 0.0328037,
    },
    'super-tiny-t5': {
        'Size (MB)': 81.8,
        'Quantized Size (MB)': 27.1,
        'WER': 0.0351141,
    },
    '3x-super-tiny-t5': {
        'Size (MB)': 18.3,
        'Quantized Size (MB)': 4.46,
        'WER': 0.03676189,
    },
}


[docs]def describe_tagging(): """ Describe kesalahan tatabahasa supported. Full description at https://tatabahasabm.tripod.com/tata/salahtata.htm """ d = [{'class': 0, 'Description': 'PAD', 'salah': '', 'betul': ''}, {'class': 1, 'Description': 'kesambungan subwords', 'salah': '', 'betul': '', }, {'class': 2, 'Description': 'tiada kesalahan', 'salah': '', 'betul': '', }, {'class': 3, 'Description': 'kesalahan frasa nama, Perkara yang diterangkan mesti mendahului "penerang"', 'salah': 'Cili sos', 'betul': 'sos cili', }, {'class': 4, 'Description': 'kesalahan kata jamak', 'salah': 'mereka-mereka', 'betul': 'mereka', }, {'class': 5, 'Description': 'kesalahan kata penguat', 'salah': 'sangat tinggi sekali', 'betul': 'sangat tinggi', }, {'class': 6, 'Description': 'kata adjektif dan imbuhan "ter" tanpa penguat.', 'salah': 'Sani mendapat markah yang tertinggi sekali.', 'betul': 'Sani mendapat markah yang tertinggi.', }, {'class': 7, 'Description': 'kesalahan kata hubung', 'salah': 'Sally sedang membaca bila saya tiba di rumahnya.', 'betul': 'Sally sedang membaca apabila saya tiba di rumahnya.', }, {'class': 8, 'Description': 'kesalahan kata bilangan', 'salah': 'Beribu peniaga tidak membayar cukai pendapatan.', 'betul': 'Beribu-ribu peniaga tidak membayar cukai pendapatan', }, {'class': 9, 'Description': 'kesalahan kata sendi', 'salah': 'Umar telah berpindah daripada sekolah ini bulan lalu.', 'betul': 'Umar telah berpindah dari sekolah ini bulan lalu.', }, {'class': 10, 'Description': 'kesalahan penjodoh bilangan', 'salah': 'Setiap orang pelajar', 'betul': 'Setiap pelajar.', }, {'class': 11, 'Description': 'kesalahan kata ganti diri', 'salah': 'Pencuri itu telah ditangkap. Beliau dibawa ke balai polis.', 'betul': 'Pencuri itu telah ditangkap. Dia dibawa ke balai polis.', }, {'class': 12, 'Description': 'kesalahan ayat pasif', 'salah': 'Cerpen itu telah dikarang oleh saya.', 'betul': 'Cerpen itu telah saya karang.', }, {'class': 13, 'Description': 'kesalahan kata tanya', 'salah': 'Kamu berasal dari manakah ?', 'betul': 'Kamu berasal dari mana ?', }, {'class': 14, 'Description': 'kesalahan tanda baca', 'salah': 'Kamu berasal dari manakah .', 'betul': 'Kamu berasal dari mana ?', }, {'class': 15, 'Description': 'kesalahan kata kerja tak transitif', 'salah': 'Dia kata kepada saya', 'betul': 'Dia berkata kepada saya', }, {'class': 16, 'Description': 'kesalahan kata kerja transitif', 'salah': 'Dia suka baca buku', 'betul': 'Dia suka membaca buku', }, {'class': 17, 'Description': 'penggunaan kata yang tidak tepat', 'salah': 'Tembuk Besar negeri Cina dibina oleh Shih Huang Ti.', 'betul': 'Tembok Besar negeri Cina dibina oleh Shih Huang Ti', }, ] from malaya.function import describe_availability return describe_availability(d, transpose=False)
[docs]def available_transformer_tagging(): """ List available transformer tagging models. """ from malaya.function import describe_availability return describe_availability( _transformer_tagging_availability, text='tested on 10k kesalahan tatabahasa texts.', )
[docs]def available_transformer(): """ List available transformer models. """ from malaya.function import describe_availability return describe_availability( _transformer_availability, text='tested on 7.5k kesalahan tatabahasa texts.', )
[docs]@ check_type def transformer(model: str = 'small-t5', quantized: bool = False, **kwargs): """ Load Malaya transformer encoder-decoder model to correct a `kesalahan tatabahasa` text. Parameters ---------- model : str, optional (default='small-t5') Model architecture supported. Allowed values: * ``'t5'`` - T5 BASE parameters. * ``'small-t5'`` - T5 SMALL parameters. * ``'tiny-t5'`` - T5 TINY parameters. * ``'super-tiny-t5'`` - T5 SUPER TINY parameters. * ``'3x-super-tiny-t5'`` - T5 3X SUPER TINY 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: model List of model classes: * if `t5` in model, will return `malaya.model.t5.Tatabahasa`. """ model = model.lower() if model not in _transformer_availability: raise ValueError( 'model not supported, please check supported models from `malaya.tatabahasa.available_transformer()`.' ) return t5_load.load( module='kesalahan-tatabahasa', model=model, model_class=T5_Tatabahasa, quantized=quantized, **kwargs, )
[docs]@check_type def transformer_tagging(model: str = 'base', quantized: bool = False, **kwargs): """ Load Malaya transformer encoder-decoder + tagging model to correct a `kesalahan tatabahasa` text. Parameters ---------- model : str, optional (default='base') Model architecture supported. Allowed values: * ``'small'`` - Malaya Transformer Tag SMALL parameters. * ``'base'`` - Malaya Transformer Tag 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.Tatabahasa class """ model = model.lower() if model not in _transformer_tagging_availability: raise ValueError( 'model not supported, please check supported models from `malaya.tatabahasa.available_transformer_tagging()`.' ) return load_transformer.load_tatabahasa( module='kesalahan-tatabahasa', model=model, model_class=Tatabahasa, quantized=quantized, **kwargs )