huseinzol05's picture
improve
a4577da
import os
os.environ['CUDA_VISIBLE_DEVICES'] = ''
os.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true'
import malaya
import ctranslate2
from transformers import AutoTokenizer
import gradio as gr
import logging
import os
HF_TOKEN = os.getenv('HF_TOKEN')
hf_writer = gr.HuggingFaceDatasetSaver(HF_TOKEN, 'mesolitica/crowdsourced-malaysian-translation')
logging.basicConfig(level=logging.INFO)
TO_LANG = {
'Malay': 'ms',
'English': 'en',
}
TO_LANG_KEYS = list(TO_LANG.keys())
model = None
map_lang = {
'en': 'Inggeris',
'jav': 'Jawa',
'bjn': 'Banjarese',
'ms': 'Melayu',
'ind': 'Indonesia',
'pasar ms': 'pasar Melayu',
'manglish': 'Manglish',
}
converter = ctranslate2.converters.TransformersConverter(
'mesolitica/translation-t5-small-standard-bahasa-cased-v2')
try:
converter.convert('t5-small-ct2', quantization='int8')
except BaseException:
pass
tokenizer = AutoTokenizer.from_pretrained(
'mesolitica/translation-t5-small-standard-bahasa-cased-v2',
use_fast=False,
)
def translate(text, to_lang):
if len(text) < 2:
raise gr.Error('text input must longer than 1 character')
if to_lang is None or len(to_lang) < 1:
raise gr.Error('Please select target language')
global model
to_lang = TO_LANG[to_lang]
if model is None:
translator = ctranslate2.Translator('t5-small-ct2')
prefix = f'terjemah ke {map_lang[to_lang]}: {text}'
input_tokens = tokenizer.convert_ids_to_tokens(tokenizer.encode(prefix))
outputs = translator.translate_batch(
[input_tokens],
max_input_length=6144,
max_decoding_length=6144,
disable_unk=True,
)
results = []
for o in outputs:
o = o.hypotheses[0]
o = tokenizer.convert_tokens_to_ids(o)
results.append(o)
results = tokenizer.batch_decode(
[[i for i in o if i not in [0, 1, 2]] for o in results],
spaces_between_special_tokens=False,
)
return results[0], results[0]
hansard = """
\n26 DR.27.10.2021 \n\n \nUSUL MENANGGUHKAN MESYUARAT \n\nDI BAWAH P.M. 18(1) \n \n\nPENJUALAN ASET GAS PETRONAS DI AZERBAIJAN \n\n \n\n11.33 pg. \n\nDato’ Seri Anwar bin Ibrahim [Port Dickson]: Tuan Yang di-Pertua, saya \nmohon mengemukakan usul di bawah Peraturan Mesyuarat 18(1) dan 18(2) Peraturan-\nperaturan Majlis Mesyuarat Dewan Rakyat seperti berikut: \n\n“Bahawa Dewan yang bersidang pada hari ini merundingkan \nlaporan bahawa Petronas telah menjual aset gas di Azerbaijan dengan \nharga hampir RM10 bilion berikutan desakan kerajaan menaikkan \nbayaran dividen Petronas sebanyak RM25 bilion kepada kerajaan bagi \ntahun 2021.” \n\n \nPerkara ini adalah perkara tertentu kerana penjualan aset gas di Azerbaijan \n\nbernilai RM10 bilion dan juga pembayaran dividen kepada kerajaan sebanyak RM25 bilion \nbagi tahun 2021 adalah berbahaya dan menjejaskan masa depan Petronas. Terkait \ndengan― sedikit penjelasan. Kerana tindakan seperti ini telah menyebabkan J.P. Morgan \nmengeluarkan Petronas dari ESG Emerging Market Bond Index dan ESG Asia Credit \nIndex. \n\nOleh itu, perkara itu perlu disegerakan kerana Petronas mengalami defisit \nberikutan pembayaran dividen berlebihan sejak tahun 2018 sehingga kini yang memaksa \nPetronas menjual aset atau meminjam lebih banyak dana luar negara bagi menampung \naliran tunai. \n\nIni diperkukuh dengan kenyataan Tengku Muhammad Taufik, CEO Petronas, “If \nthere is a policy shift but it comes too suddenly or too slowly, not only Petronas but the \nentire Malaysian economy could be put at risk, with regards to our energy mix.” \n\nIni perkara berkenaan dengan kepentingan orang ramai, malah seluruh ekonomi \nnegara, kerana Petronas adalah institusi penting ekonomi negara dan sewajarnya \ndiperkukuh kekuatannya dan tidak dilemahkan penarafan syarikat. Kemampuan untuk \nmelabur bagi menjana keuntungan masa depan yang mampu untuk membayar dividen \nyang munasabah kepada kerajaan demi kepentingan rakyat. Dengan tambahan RM7 \nbilion tahun ini, hasil Petronas akan berjumlah RM44.8 bilion atau 18 peratus daripada \npendapatan kerajaan bagi tahun 2021 daripada RM37.8 bilion sebelumnya. \n\nJadi, mohon persetujuan Tuan Yang di-Pertua untuk dibahaskan. [Tepuk] \n\nTuan Yang di-Pertua: Terima kasih Yang Berhormat. Sebenarnya Yang \nBerhormat perlu melengkapkan teks Yang Berhormat dan cuma dibaca teks tersebut \nmengikut peraturan. Akan tetapi, tak apa. \n\nAhli-ahli Yang Berhormat, saya telah menerima satu pemberitahu usul di bawah \nPeraturan Mesyuarat 18(1) oleh Yang Berhormat Port Dickson, Ketua Pembangkang pada \nhari Isnin, 25 Oktober 2021. Teks usul itu adalah seperti yang dibacakan tadi dengan \nsedikit tambahan oleh Ahli Yang Berhormat Port Dickson sebentar tadi. \n\nBagi membolehkan perkara ini ditimbangkan oleh Majlis Mesyuarat, saya \nhendaklah berpuas hati bahawa perkara yang dibangkitkan oleh Yang Berhormat itu \nmematuhi tiga syarat seperti mana biasalah iaitu: \n\n(i) perkara tertentu; \n\n(ii) bagi kepentingan orang ramai; dan \n\n(iii) berkehendak disegerakan. \n\n\n
""".strip()
code = """
Untuk menggunakan numpy, pertama, Anda perlu menginstalnya melalui pip. Anda dapat melakukannya dengan menjalankan perintah `pip install numpy` di terminal Anda.
Setelah numpy terinstal, Anda dapat mengimpor modul numpy dengan menambahkan baris `import numpy as np` di awal program Anda.
Berikut adalah contoh beberapa operasi dasar numpy:
``` python
import numpy as np
# membuat array numpy dari list
my_list = [1, 2, 3, 4, 5]
my_array = np.array(my_list)
# membuat array numpy dengan rentang nilai tertentu
my_range = np.arange(0, 10, 2) # nilai awal, nilai akhir, dan loncatan
# membuat array numpy dengan nilai acak
my_random_array = np.random.rand(3, 3) # 3 baris dan 3 kolom
# mengakses elemen array numpy
print(my_array[0]) # mengakses elemen pertama
# melakukan operasi matematika pada array numpy
my_array = my_array + 1 # menambah setiap elemen dengan 1
my_array = my_array * 2 # mengalikan setiap elemen dengan 2
# mengubah bentuk array numpy
my_array = np.reshape(my_array, (2, 5)) # menjadi array 2D dengan 2 baris dan 5 kolom
```
Itulah beberapa operasi dasar numpy. Anda dapat menemukan dokumentasi resmi numpy di https://numpy.org/doc/stable/.
""".strip()
description = """
<a href="https://huggingface.co/mesolitica/translation-t5-small-standard-bahasa-cased-v2">mesolitica/translation-t5-small-standard-bahasa-cased-v2</a> able to translate malay, pasar malay (social media texts or local context), english, manglish, javanese, banjarese and indonesian to target language. It also able to maintain the text structure as it is and only translate necessary texts, eg, programming code.
If you found out the translation is wrong, by simply fix the second box output and click `Flag as Wrong` button. You can help us to improve the future model, the dataset will be open source at <a href="https://huggingface.co/datasets/mesolitica/crowdsourced-malaysian-translation">mesolitica/crowdsourced-malaysian-translation</a>
""".strip()
demo = gr.Interface(
fn=translate,
inputs=[
gr.components.Textbox(label='Input Text'),
gr.components.Dropdown(label='Output language', choices=TO_LANG_KEYS, value='Malay'),
],
outputs=[
gr.components.Textbox(label='Output', interactive = False),
gr.components.Textbox(label='Does it correct? fix me!', interactive = True),
],
examples=[
['Syed Saddiq berkata, mereka seharusnya mengingati bahawa semasa menjadi Perdana Menteri Pakatan Harapan', 'English'],
['SHAH ALAM - Pertubuhan Kebajikan Anak Bersatu Selangor bersetuju pihak kerajaan mewujudkan Suruhanjaya Siasatan Diraja untuk menyiasat isu kartel daging.', 'English'],
['Smh the dude literally has a rubbish bin infront of his house', 'English'],
["I think I won't be able to catch it within 1 min lol", 'Malay'],
["Memanglah. Ini tak payah expert, aku pun tau. It's a gesture", 'Malay'],
["hg nk p mna tu", 'English'],
["hg ckp elok sikit, ckp mcm musuh islam", 'Malay'],
['Kita ora duwe wektu kanggo gelut utawa sengit.', 'Malay'],
[hansard, 'English'],
[code, 'Malay']
],
allow_flagging='manual',
flagging_options=['Wrong'],
flagging_callback=hf_writer,
cache_examples=False,
title='Malaysian NMT',
description=description,
)
demo.launch(server_name='0.0.0.0')