Spaces:
Running
Running
File size: 7,956 Bytes
23c1bff 67e0b37 faa4b4b 23c1bff 67e0b37 23c1bff 67e0b37 07d263c 67e0b37 23c1bff 67e0b37 bfb3dda 67e0b37 faa4b4b 23c1bff bfb3dda 67e0b37 bfb3dda 23c1bff bfb3dda 67e0b37 bfb3dda 23c1bff 67e0b37 23c1bff bfb3dda |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# coding: utf-8
import gradio as gr
import os
import json
from pathlib import Path
from datetime import datetime
from huggingface_hub import CommitScheduler
from translation import Translator, LANGUAGES
LANGUAGES_LIST = list(LANGUAGES.keys())
HF_TOKEN = os.environ.get('HF_TOKEN')
JSON_DATASET_DIR = Path("flagged_data")
JSON_DATASET_DIR.mkdir(exist_ok=True, parents=True)
JSON_DATASET_PATH = JSON_DATASET_DIR / "dataset.json"
def translate_wrapper(text, src_lang, tgt_lang, by_sentence=True, clean=True, num_beams=4):
if src_lang in ["", None, []] or tgt_lang in ["", None, []]:
return "Ընտրեցէք թարգմանութեան կողմերը | Please select source and target languages"
if src_lang == tgt_lang:
return "Ընտրուած լեզուները նոյնն են։ | Source and target languages are identical."
src_lang = LANGUAGES.get(src_lang)
tgt_lang = LANGUAGES.get(tgt_lang)
result = translator.translate(text, src_lang, tgt_lang, by_sentence=by_sentence, clean=clean, num_beams=num_beams)
return result
# hf_writer = gr.HuggingFaceDatasetSaver(HF_TOKEN, "AriNubar/hyw-en-crowd-source")
scheduler = CommitScheduler(
repo_id="AriNubar/hyw-en-crowd-source",
repo_type="dataset",
folder_path=JSON_DATASET_DIR,
path_in_repo="collected_data",
token=HF_TOKEN,
every=1 # every 1 minute
)
TQS = {
"😊 Լաւ | Good": "good",
"😐 Միջակ | Average": "average",
"☹️ Վատ | Bad": "bad"
}
def save_json(src_lang, tgt_lang, input_text, output_text, by_sentence, clean, num_beams, translation_quality):
if any([src_lang in ["", None, []], tgt_lang in ["", None, []], input_text in ["", None, []], output_text in ["", None, []]]):
return
src_lang = LANGUAGES.get(src_lang)
tgt_lang = LANGUAGES.get(tgt_lang)
translation_quality = TQS.get(translation_quality)
# print(src_lang, tgt_lang, input_text, output_text, by_sentence, clean, num_beams, translation_quality)
# print(type(src_lang), type(tgt_lang), type(input_text), type(output_text), type(by_sentence), type(clean), type(num_beams), type(translation_quality))
data = {
"src_lang": src_lang,
"tgt_lang": tgt_lang,
"original": input_text,
"translation": output_text,
"by_sentence": by_sentence,
"clean": clean,
"num_beams": num_beams,
"translation_quality": translation_quality,
"timestamp": datetime.now().isoformat()
}
with scheduler.lock:
with open(JSON_DATASET_PATH, "a", encoding="utf8") as f:
f.write(json.dumps(data, ensure_ascii=False) + "\n")
theme = gr.themes.Default().set(
block_info_text_size="*text_xxs" # for info text
)
with gr.Blocks(title="Արեւմտահայերէն-Անգլերէն Մեքենական Թարգմանիչ | Western Armenian-English Machine Translation",
theme=theme,
) as demo:
gr.Markdown(
"""
# Արեւմտահայերէն-Անգլերէն Մեքենական Թարգմանիչ | Western Armenian-English Machine Translation
Հոս կը ցուցադրուի առաջին արեւմտահայերէն-անգլերէն մեքենական թարգմանիչը, որ կարուցուած է Մեթայի (Ֆեյսպուքի) 'No Language Left Behind' տիպարի հիման վրայ։ Թարգմանութեան տիպարը կ'աշխատի CPU-ի մը մէջ, ուրեմն նախադասութեան մը թարգմանութիւնը կրնայ տեւել մօտաւորապէս 40-60 երկվայրկեան։ Ձեր գնահատութիւնները եւ քննադատութիւնները շատ կարեւոր են տիպարի թարգմանութեան որակը բարելաւելու համար։ Շնորհակալութիւն Գալուստ Կիւլպէնկեան Հիմնարկին, որուն աջակցութեամբ այս նախագիծը իրականացուեցաւ։
This is the demo of the first Western Armenian-English neural machine translation system which is based on Meta's 'No Language Left Behind' model. The model runs on a CPU, so it might take approximately 40-60 seconds to translate a single sentence. Your feedback and comments are very important for us to improve the quality of the translation. Thanks to the Calouste Gulbenkian Foundation for making this project possible with their support.
"""
)
with gr.Row():
with gr.Column():
text = gr.Textbox(lines=5, label="Ներմուծման Գրութիւն | Input Text")
with gr.Row():
src_lang = gr.Dropdown(LANGUAGES_LIST, type="value", label="Թարգմանէ Այս Լեզուէ | Source Language")
tgt_lang = gr.Dropdown(LANGUAGES_LIST, type="value", label="Թարգմանէ Այս Լեզուի | Target Language")
with gr.Column():
translated = gr.Textbox(lines=5, label="Ելքային Գրութիւն | Output Text", interactive=False)
translate_btn = gr.Button(value="Թարգմանէ | Translate", variant="primary")
with gr.Row():
with gr.Column():
gr.Markdown("""
### Թարգմանութեան Որակ | Translation Quality
""")
flag_good_btn = gr.Button(value="😊 Լաւ | Good", size="sm")
flag_average_btn = gr.Button(value="😐 Միջակ | Average", size="sm")
flag_bad_btn = gr.Button(value="☹️ Վատ | Bad", size="sm")
with gr.Row():
gr.Markdown("""
## Յարաչափեր | Parameters
"""
)
by_sentence = gr.Checkbox(label="Նախադասութիւններու Բաժնէ | Split into Sentences", value=True, info="Տուփը նշանագրեցէք եթէ կ'ուզէք ձեր գրութիւնը թարգմանուի նախադասութիւն առ նախադասութիւն։ Այս կերպով թարգմանուած նախադասութիւններուն որակը աւելի լաւ են։ | Check this box if you want to split your input text into sentences. This way the quality of the translation will be better.")
clean = gr.Checkbox(label="Մշակէ | Preprocess", value=True, info="Տուփը նշանագրեցէք եթէ կ'ուզէք ձեր գրութիւնը կանոնաւորուի ծրագրի կողմէ թարգմանութենէ առաջ։ Կանոնաւորումը թարգմանութեան որակի բարելաւման համար օգտակար է։ | Check this box if you want to preprocess your input text before translation. This way the quality of the translation will be better.")
num_beams = gr.Dropdown([1, 2, 3, 4, 5], type="value", label="Առնջութեան Շողեր | Number of Beams", value=4, info="Աւելի բարձր թիւը ընդհանրապէս կը պատճառէ աւելի բարձր որակի, բայց նոյնիսկ երկարատեւ թարգմանութեան։ | Higher beam size will result in better quality translation, but also longer translation time.")
translate_btn.click(translate_wrapper, inputs=[text, src_lang, tgt_lang, by_sentence, clean, num_beams], outputs=translated)
# hf_writer.setup([src_lang, tgt_lang, text, translated, by_sentence, clean, num_beams, flag_bad_btn], "flagged_data_points")
flag_good_btn.click(save_json, inputs=[src_lang, tgt_lang, text, translated, by_sentence, clean, num_beams, flag_good_btn], outputs=None)
flag_average_btn.click(save_json, inputs=[src_lang, tgt_lang, text, translated, by_sentence, clean, num_beams, flag_average_btn], outputs=None)
flag_bad_btn.click(save_json, inputs=[src_lang, tgt_lang, text, translated, by_sentence, clean, num_beams, flag_bad_btn], outputs=None)
if __name__ == "__main__":
translator = Translator()
demo.launch() |