import streamlit.components.v1 as components from streamlit_player import st_player from transformers import pipeline from tabulate import tabulate import streamlit as st st.header("stream your emotions") st.caption("LOVE: i love you") st.caption("SURPRISE: shocking") st.caption("SADNESS: i feel exhausted") st.caption("JOY: bro i feel so energetic") st.caption("FEAR: im scared of what lies ahead") st.caption("ANGER: you piss me off") def tester(text): classifier = pipeline("sentiment-analysis", model='bhadresh-savani/distilbert-base-uncased-emotion') results = classifier(text) #st.subheader(results[0]['label']) #tester(emo) generator = st.button("Generate Song!") if (generator == True): st.subheader(results[0]['label']) if (results[0]['label']=="joy"): #songs for joy emotion with open('joyplaylist.txt') as f: contents = f.read() components.html(contents,width=560,height=325) elif (results[0]['label']=="fear"): with open('fearplaylist.txt') as f: contents = f.read() components.html(contents,width=560,height=325) elif (results[0]['label']=="anger"): #songs for anger emotion with open('angryplaylist.txt') as f: contents = f.read() components.html(contents,width=560,height=325) elif (results[0]['label']=="sadness"): #songs for sadness emotion with open('sadplaylist.txt') as f: contents = f.read() components.html(contents,width=560,height=325) elif (results[0]['label']=="surprise"): components.html("""""",width=560,height=325) elif (results[0]['label']=="love"): with open('loveplaylist.txt') as f: contents = f.read() components.html(contents,width=560,height=325) emo = st.text_input("Enter a text/phrase/sentence. A corresponding song will be recommended based on its emotion.") st.sidebar.subheader("Description") st.sidebar.write("This application detects the emotion behind your text input and recommends a song that matches it.") st.sidebar.subheader("Disclaimer/Limitations") st.sidebar.write("The model only outputs sadness, joy, love, anger, fear, and surprise. With that said, it does not completely encompass the emotions that a human being feels, and the application only suggests a playlist based on the aforementioned emotions.") st.sidebar.subheader("Model Description") st.sidebar.write("This application uses the DistilBERT model, a distilled version of BERT. The BERT framework uses a bidirectional transformer that allows it to learn the context of a word based on the left and right of the word. According to a paper by V. Sanh, et al., DistilBERT can \"reduce the size of a BERT model by 40%, while retaining 97% of its language understanding capabilities, and being 60% faster.\" This is why the DistilBERT model was used. For more information about the paper, please check out this [link](https://arxiv.org/abs/1910.01108).") st.sidebar.write("The specific DistilBERT model used for this is Bhadresh Savani's [distilbert-base-uncased-emotion] (https://huggingface.co/bhadresh-savani/distilbert-base-uncased-emotion). It is fine-tuned on the Emotion Dataset from Twitter, which can be found [here](https://huggingface.co/datasets/viewer/?dataset=emotion).") st.sidebar.subheader("Performance Benchmarks") st.sidebar.write("[Distilbert-base-uncased-emotion](https://huggingface.co/bhadresh-savani/distilbert-base-uncased-emotion)") st.sidebar.write("Accuracy = 93.8") st.sidebar.write("F1 Score = 93.79") st.sidebar.write("Test Sample per Second = 398.69") st.sidebar.write("[Bert-base-uncased-emotion](https://huggingface.co/bhadresh-savani/bert-base-uncased-emotion)") st.sidebar.write("Accuracy = 94.05") st.sidebar.write("F1 Score = 94.06") st.sidebar.write("Test Sample per Second = 190.152") st.sidebar.write("[Roberta-base-emotion](https://huggingface.co/bhadresh-savani/roberta-base-emotion)") st.sidebar.write("Accuracy = 93.95") st.sidebar.write("F1 Score = 93.97") st.sidebar.write("Test Sample per Second = 195.639") st.sidebar.write("[Albert-base-v2-emotion](https://huggingface.co/bhadresh-savani/albert-base-v2-emotion)") st.sidebar.write("Accuracy = 93.6") st.sidebar.write("F1 Score = 93.65") st.sidebar.write("Test Sample per Second = 182.794") tester(emo)