Kesalahan Tatabahasa
Contents
Kesalahan Tatabahasa#
This tutorial is available as an IPython notebook at Malaya/example/tatabahasa.
This module only trained on standard language structure, so it is not save to use it for local language structure.
[1]:
import logging
logging.basicConfig(level=logging.INFO)
[2]:
import malaya
from pprint import pprint
INFO:numexpr.utils:NumExpr defaulting to 8 threads.
List available Transformer models#
[3]:
malaya.tatabahasa.available_transformer()
INFO:malaya.tatabahasa:tested on 7.5k generated dataset at https://github.com/huseinzol05/malaya/blob/master/session/tatabahasa/t5/prepare-tatabahasa.ipynb
[3]:
Size (MB) | Quantized Size (MB) | WER | |
---|---|---|---|
t5 | 1250.0 | 481.00 | 0.017890 |
small-t5 | 355.6 | 195.00 | 0.018797 |
tiny-t5 | 208.0 | 103.00 | 0.032804 |
super-tiny-t5 | 81.8 | 27.10 | 0.035114 |
3x-super-tiny-t5 | 18.3 | 4.46 | 0.036762 |
Load Transformer model#
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`.
"""
[3]:
model = malaya.tatabahasa.transformer(model = 'small-t5')
INFO:root:running kesalahan-tatabahasa/small-t5 using device /device:CPU:0
Predict using greedy decoder#
def greedy_decoder(self, strings: List[str]):
"""
fix kesalahan tatabahasa.
Parameters
----------
strings: List[str]
Returns
-------
result: List[str]
"""
[4]:
# https://ms.wikipedia.org/wiki/Bola_sepak
string = 'Pada amnya, hanya penjaga gol sahaja yang dibenarkan menyentuh bola dengan tangan di dalam kawasan golnya'
[5]:
model.greedy_decoder([string])
[5]:
['Pada amnya , hanya penjaga gol sahaja yang dibenarkan menyentuh bola dengan tangan di dalam kawasan golnya']
Now assumed we have kesalahan frasa nama, from penjaga gol
become gol penjaga
.
[6]:
# https://ms.wikipedia.org/wiki/Bola_sepak
string = 'Pada amnya, hanya gol penjaga sahaja yang dibenarkan menyentuh bola dengan tangan di dalam kawasan golnya'
[7]:
model.greedy_decoder([string])
[7]:
['Pada amnya , hanya penjaga gol sahaja yang dibenarkan menyentuh bola dengan tangan di dalam kawasan golnya']
[8]:
string = 'Sani mendapat markah yang tertinggi sekali.'
string1 = 'Hassan ialah peserta yang termuda sekali dalam pertandingan itu.'
model.greedy_decoder([string, string1])
[8]:
['Sani mendapat markah yang tertinggi .',
'Hassan ialah peserta yang termuda dalam pertandingan itu .']
[19]:
string = 'Dia kata kepada saya.'
model.greedy_decoder([string])
[19]:
['Dia berkata kepada saya .']
More examples#
I just copy pasted from https://ms.wikipedia.org/wiki/Kesalahan_biasa_tatabahasa_Melayu
[11]:
string = 'Tidak ada apa yang mereka risaukan waktu itu.'
model.greedy_decoder([string])
[11]:
['Tidak ada apa yang mereka risaukan waktu itu .']
[12]:
string = 'Ayahnya setuju walaupun melanggar syarat yang dia sendiri menetapkan.'
model.greedy_decoder([string])
[12]:
['Ayahnya setuju walaupun melanggar syarat yang dia sendiri menetapkan .']
[14]:
string = 'Semuanya dia kenal.'
model.greedy_decoder([string])
[14]:
['Semuanya dia kenal .']
[15]:
string = 'Dia menjawab seperti disuruh-suruh oleh kuasa yang dia tidak tahu dari mana puncanya.'
model.greedy_decoder([string])
[15]:
['Dia menjawab seperti disuruh-suruh oleh kuasa yang dia tidak tahu dari mana puncanya .']
[16]:
string = 'Bola ini ditendang oleh saya.'
model.greedy_decoder([string])
[16]:
['Bola ini ditendang oleh saya .']
[17]:
string = 'Makanan ini kamu telah makan?'
model.greedy_decoder([string])
[17]:
['Makanan ini kamu telah makan .']
[18]:
string = 'Segala perubahan yang berlaku kita akan menghadapi sama-sama.'
model.greedy_decoder([string])
[18]:
['Segala perubahan yang berlaku kita akan menghadapi sama-sama .']
[20]:
string = 'Kakak saya sedang memasak gulai nangka. Dia menyenduk seketul nangka gulai dan menyuruh saya merasanya.'
model.greedy_decoder([string])
[20]:
['Kakak saya sedang memasak gulai nangka . Dia menyenduk seketul gulai nangka dan menyuruh saya merasanya .']
[22]:
string = 'Sally sedang membaca bila saya tiba di rumahnya.'
model.greedy_decoder([string])
[22]:
['Sally sedang membaca bila dia tiba di rumahnya .']
[23]:
string = 'Badannya besar kecuali kakinya kecil.'
model.greedy_decoder([string])
[23]:
['Badannya besar dan kakinya kecil .']
[24]:
string = 'Beribu peniaga tidak membayar cukai pendapatan.'
model.greedy_decoder([string])
[24]:
['Beribu peniaga tidak membayar cukai pendapatan .']
[25]:
string = 'Setengah remaja suka membuang masa di pasar raya.'
model.greedy_decoder([string])
[25]:
['Setengah remaja suka membuang masa di pasar raya .']
[26]:
string = 'Umar telah berpindah daripada sekolah ini bulan lalu.'
model.greedy_decoder([string])
[26]:
['Umar telah berpindah ke sekolah ini bulan lalu .']
[28]:
string = 'Para-para peserta sedang berbaris.'
model.greedy_decoder([string])
[28]:
['Para peserta sedang berbaris .']