File size: 2,614 Bytes
aa805a6
 
 
 
 
 
 
 
 
 
 
 
 
 
5c5eade
 
 
 
aa805a6
 
5c5eade
aa805a6
 
5c5eade
 
 
 
 
 
 
aa805a6
5c5eade
 
 
aa805a6
 
 
5c5eade
aa805a6
5c5eade
 
aa805a6
5c5eade
 
 
 
 
 
 
 
 
 
 
 
 
aa805a6
 
 
 
 
5c5eade
 
 
aa805a6
5c5eade
 
 
 
 
 
 
 
aa805a6
5c5eade
 
 
 
aa805a6
5c5eade
 
aa805a6
5c5eade
 
aa805a6
 
5c5eade
aa805a6
 
 
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
import streamlit as st
from huggingface_hub import InferenceApi
import pandas as pd
from transformers import pipeline

STYLE = """
<style>
img {
    max-width: 100%;
}

th {
    text-align: left!important
}

td {
    font-size:
}
</style>
"""

MASK_TOKEN = "<mask>"

EMOTION_MAP = {
    "anger": "๐Ÿ˜ก",
    "fear": "๐Ÿ˜ฑ",
    "happy": "๐Ÿ˜„",
    "love": "๐Ÿ˜",
    "sadness": "๐Ÿ˜ญ",
}


def display_table(df: pd.DataFrame, subheader: str):
    st.subheader(subheader)
    st.table(df)


def setup():
    st.markdown(STYLE, unsafe_allow_html=True)
    st.title("๐Ÿ‡ฎ๐Ÿ‡ฉ Indonesian RoBERTa Base")


def main():
    setup()

    user_input = st.text_input(
        f"Insert a sentence to predict with a {MASK_TOKEN} token // Masukkan kalimat untuk diisi dengan token {MASK_TOKEN}",
        value=f"Aduh... gimana nih.. hari ini {MASK_TOKEN} banget...",
    )

    mlm_model = "flax-community/indonesian-roberta-base"
    mask_api = InferenceApi(mlm_model)

    sa_model = "StevenLimcorn/indonesian-roberta-base-emotion-classifier"
    sa_pipeline = pipeline("sentiment-analysis", model=sa_model, tokenizer=sa_model)

    if len(user_input) > 0:
        try:
            user_input.index(MASK_TOKEN)
        except ValueError:
            st.error(
                f"Please enter a sentence with the correct {MASK_TOKEN} token // Harap masukkan kalimat dengan token {MASK_TOKEN} yang benar"
            )
        else:
            # render masked language modeling table
            mlm_result = mask_api(inputs=user_input)
            mlm_df = pd.DataFrame(mlm_result)
            mlm_df.drop(columns=["token", "token_str"], inplace=True)
            mlm_df_styled = mlm_df.style.set_properties(
                subset=["sequence", "score"], **{"text-align": "left"}
            )
            display_table(mlm_df_styled, "๐ŸŽˆ Top 5 Predictions")

            # render sentiment analysis table
            sa_df = pd.DataFrame(columns=["sequence", "label", "score"])
            for sequence in mlm_df["sequence"].values:
                sa_output = sa_pipeline(sequence)  # predict for every mlm output
                result_dict = {"sequence": sequence}
                result_dict.update(sa_output[0])
                sa_df = sa_df.append(result_dict, ignore_index=True)

            sa_df["label"] = sa_df["label"].apply(lambda x: x + " " + EMOTION_MAP[x])
            sa_df_styled = sa_df.style.set_properties(
                subset=["sequence", "label", "score"], **{"text-align": "left"}
            )
            display_table(sa_df_styled, "๐Ÿค” By saying that, I guess you are feeling..")


main()