from cProfile import label
import json
from functools import partial
from typing import Callable, Dict, List
import transformers
from transformers import (
AutoModelForSequenceClassification,
AutoTokenizer,
pipeline
)
import pythainlp
from pprint import pprint
from itertools import chain
import gradio as gr
tokenizer = AutoTokenizer.from_pretrained(
'airesearch/wangchanberta-base-att-spm-uncased',
# revision='finetuned@wisesight_sentiment-v1.1'
)
model = AutoModelForSequenceClassification.from_pretrained(
'airesearch/wangchanberta-base-att-spm-uncased',
revision='finetuned@wisesight_sentiment-v1.1',
)
model.config.return_all_scores = True
LABEL_MAPPING = {
'pos': '🤗 Positive',
'neu': '😐 Neutral',
'neg': '😡 Negative',
'q': '🤔 Quesiton',
}
CSS_PROGRESS_BAR_MAPPING = {
'pos':'w3-green',
'neu': 'w3-light-blue',
'neg': 'w3-red',
'q': 'w3-blue',
}
LABEL_MAPPING_REVERSED = {v:k for k,v in LABEL_MAPPING.items() }
#pipeline
text_cls_pipeline = pipeline(task='sentiment-analysis',
tokenizer=tokenizer,
model=model,
return_all_scores=True)
css_text = """"""
def render_html(items: List[Dict]):
html_text = ''
for item in items:
label, score = item['label'], item['score']
label_id = LABEL_MAPPING_REVERSED[label]
progress_bar_class_text = CSS_PROGRESS_BAR_MAPPING[label_id]
html_text += f'{label.replace(" ", " ")}: {(score*100):8.2f}%' + \
f''
return '' + html_text + '
'
def classify_text(text: str):
text = text.replace(' ', '<_>')
results = text_cls_pipeline(text)[0]
print(f'results:\n {results}')
for i, result in enumerate(results):
results[i]['label'] = LABEL_MAPPING[result['label']]
results[i]['score'] = float(round(float(result['score']), 4))
html_text = css_text + render_html(results)
print(html_text)
return json.dumps(results, ensure_ascii=False, indent=4), html_text
demo = gr.Interface(fn=classify_text,
inputs=gr.Textbox(lines=5, placeholder='Input text in Thai', label='Input text'),
examples=[
['งานจากผกก. คนนี้ไม่เคยทำให้เราผิดหวัง ต้องหาเวลาไปดูรอบสอง'],
['ฟอร์ด บุกตลาด อีวี ในอินเดีย #prachachat #ตลาดรถยนต์'],
['สั่งไป2 เมนู คือมัชฉะลาเต้ร้อน กับ ไอศครีมชาเขียว มัชฉะลาเต้ร้อน รสชาเขียวเข้มข้น หอม มัน แต่ไม่กลมกล่อม มันจืดแบบจืดสนิท ส่วนไอศครีมชาเขียว ทานแล้วรสมันออกใบไม้ๆมากกว่าชาเขียว แล้วก็หวานไป โดยรวมแล้วเฉยมากก ดีแค่รสชาเขียวเข้ม มีน้ำเปล่าบริการฟรี'],
['สาขานี้มีลิปของ Etude ไหมอ่าคะ ']
],
outputs=[gr.Textbox(), gr.HTML()])
print(f'\nINFO: transformers.__version__: {transformers.__version__}')
print(f'\nINFO: pythainlp.__version__: {pythainlp.__version__}')
demo.launch()