import gradio as gr from transformers import pipeline from transformers import AutoModelForSeq2SeqLM from transformers import AutoTokenizer from transformers import GenerationConfig import re model_name='google/flan-t5-base' model = AutoModelForSeq2SeqLM.from_pretrained(model_name) tokenizer = AutoTokenizer.from_pretrained(model_name, use_fast=True) Examples_to_teach_model=""" Text: I hate apples Sentiment analysis: Sentiments: Negative PPrint Key words: hate, aples Text: I enjoy watching movies Sentiment analysis: Sentiments: Positive PPrint Key words: enjoy, movies Text: I'm tired of this long process Sentiment analysis: Sentiments: Negative PPrint Key words: tired, long process """ def make_prompt(sentence): prompt = Examples_to_teach_model+ "Text: " + sentence + "Sentiment analysis:" return prompt def split_conj(text): return re.sub('(but|yet|although|however|nevertheless|on the other hand|still|though)', "|", text).split('|') def get_sentiment_from_llm(review_text): sentences = review_text.lower().split(".") segments=[] for sen in sentences: segments=segments+split_conj(sen) ls_outputs=[] segments= [x for x in segments if len(x)>=5] print(segments) for seg in segments: input = make_prompt(seg) inputs = tokenizer(input, return_tensors='pt') output = tokenizer.decode( model.generate( inputs["input_ids"], max_new_tokens=100, )[0], skip_special_tokens=True) ls_outputs.append("\n".join(output.split('PPrint '))) return "\n".join(ls_outputs) demo = gr.Blocks() sentiment_extr = gr.Interface( fn=get_sentiment_from_llm, inputs=gr.Textbox(label="Text input", type="text"), outputs=gr.Textbox(label="Sentiments", type="text"), title="Sentiments analysis", description="Sentiment analysis and keywords extraction. Powered by prompt tuned flan-t5 from Google.
The model is run on small CPU. Please allow 2-3 minutes for longer inputs.", ) with demo: gr.TabbedInterface([sentiment_extr], ["Sentiment text analysis"]) demo.launch()