|
|
|
"""translation practice.ipynb |
|
|
|
Automatically generated by Colaboratory. |
|
|
|
Original file is located at |
|
https://colab.research.google.com/drive/1KrnodZGBZrUFdaJ9FIn8IhtWtCL7peoE |
|
""" |
|
import requests |
|
import gradio as gr |
|
|
|
import os |
|
from openai import OpenAI |
|
import spacy |
|
|
|
|
|
|
|
|
|
|
|
HF_TOKEN = os.environ('HUGGING_FACE_TOKEN') |
|
|
|
|
|
client = OpenAI( |
|
api_key=os.environ('OPENAI_API_KEY') |
|
) |
|
|
|
|
|
|
|
API_URL = f"https://api-inference.huggingface.co/models/" |
|
|
|
headers = {"Authorization": f"Bearer {HF_TOKEN}"} |
|
|
|
example_Japanese = '''ใใใซใกใฏ๏ผ |
|
|
|
ใฟใชใใใ็งใใกใฎใใฌใผใณใใผใทใงใณใซใฏใฏใฏใฏใใฆใใพใใ๏ผ |
|
ใใชใใใใณใใณใงใฏใใใพใใใ๏ผ |
|
ใงใฏใใใณใใณใใฆใ่ใใฆใใ ใใ๏ผ |
|
|
|
ไปๆฅใฎใใฌใผใณใใผใทใงใณใฎใใผใใฏใชใใใใใฎใใใใใใใจใฐใงใใ |
|
|
|
ใใฎใใใชใใจใฐใใฟใชใใไฝใ็ฅใฃใฆใใพใใ๏ผ |
|
|
|
ๆฅๆฌ่ชใฏใใใใใใใจใฐใๆฏๆฅใคใใใพใใๆฐๆใกใใใใใใใใฒใใใใใงใใใใใใใใใใใใใใใใใใซใฎใใ ใใใใใใงใใใใจใใฐใใใดใใดใใใจ่ใใใใใฉใใใใใพใใ๏ผใฉใใชใคใกใผใธใงใใ๏ผใใฃใฑใใใใใใงใใใฎใฒใใใงใใญใ''' |
|
|
|
example_English = '''Hello! |
|
|
|
Are you all excited about our presentation? |
|
Aren't you hungry? |
|
So, smile and listen! |
|
|
|
The theme of today's presentation is onomatopoeic repetition. |
|
|
|
Do you know any such words? |
|
|
|
In Japanese, we use repeated words every day. It's easy to understand, easy to understand, and easy to follow. For example, what do you think when you hear the word "pikapika"? What kind of image do you have? After all, it is a beautiful and electric light.''' |
|
|
|
def split_sentences_ginza(input_text): |
|
nlp = spacy.load("ja_core_news_sm") |
|
doc = nlp(input_text) |
|
sentences = [sent.text for sent in doc.sents] |
|
return sentences |
|
|
|
def query_hf(payload, model_name): |
|
|
|
response = requests.post(API_URL+model_name, headers=headers, json=payload) |
|
|
|
return response.json() |
|
|
|
def translate_hf(input_text): |
|
print("Translating... ", input_text) |
|
|
|
sentences = split_sentences_ginza(input_text) |
|
translated_sentences = [] |
|
|
|
print("Split sentences... ", sentences) |
|
|
|
for sentence in sentences: |
|
if sentence.strip(): |
|
|
|
response = query_hf({ |
|
"inputs": sentence.strip(), |
|
"options": {"wait_for_model": True} |
|
}, "Helsinki-NLP/opus-mt-ja-en") |
|
|
|
print("response: ", response) |
|
translated_sentence = response[0]["translation_text"] |
|
translated_sentences.append(translated_sentence) |
|
|
|
|
|
translation = ' '.join(translated_sentences) |
|
|
|
return translation |
|
|
|
|
|
def translate_openai(input_text): |
|
|
|
prompt = "Translate the following text into Japanese language: " + input_text |
|
|
|
response = client.chat.completions.create( |
|
messages=[ |
|
{ |
|
"role": "user", |
|
"content": prompt, |
|
} |
|
], |
|
model="gpt-3.5-turbo", |
|
temperature=0 |
|
) |
|
|
|
translation = response.choices[0].message.content |
|
|
|
print("GPT translation:", translation) |
|
|
|
return translation |
|
|
|
def assess(original_japanese, student_translation): |
|
|
|
try: |
|
|
|
generated_translation = translate_hf(original_japanese) |
|
except Exception as e: |
|
return "Error in processing translation.", str(e) |
|
|
|
|
|
print("Generated translation:", generated_translation) |
|
try: |
|
prompt = (f"Evaluate the student's English translation of Japanese for accuracy and naturalness. " |
|
f"Original: {original_japanese}, " |
|
f"Reference Translation: {generated_translation}, " |
|
f"Student Translation: {student_translation}. " |
|
"Highlight errors, suggest improvements, and note any nuances. Provide concise and very simple feedback for an English language learner aimed at improving their translation skills. Where possible, give concrete examples.") |
|
|
|
print(prompt) |
|
|
|
|
|
response = client.chat.completions.create( |
|
messages=[ |
|
{ |
|
"role": "user", |
|
"content": prompt, |
|
} |
|
], |
|
model="gpt-3.5-turbo", |
|
) |
|
print("Full GPT response:", response) |
|
|
|
evaluation_feedback = response.choices[0].message.content |
|
|
|
print("GPT feedback:", evaluation_feedback) |
|
return generated_translation, evaluation_feedback |
|
except Exception as e: |
|
return "Error in processing evaluation.", str(e) |
|
|
|
assessor = gr.Interface(fn=assess, |
|
inputs=[ |
|
gr.Textbox(label="Japanese Sentence Input", placeholder="Input text to be translated", lines=1, value="ใใใฏไพใงใ"), |
|
gr.Textbox(label="Student's Translation Attempt", placeholder="Input your English translation", lines=1, value="This is an example") |
|
], |
|
outputs=[ |
|
gr.Textbox(label="Machine Generated Translation"), |
|
gr.Textbox(label="Evaluation Feedback") |
|
], |
|
title="Translation Practice", |
|
description="Enter a Japanese sentence and your English translation attempt to receive evaluation feedback." |
|
) |
|
|
|
assessor.launch(debug=True, share=True) |
|
|
|
|