Team Ai
Apppublic

Python-proje/presum

sourceHugging Faceupdated 3y agoView on Hugging Face
0likes
inference.py64 linesDownload Raw Back to root
1import streamlit as st2from transformers import pipeline3import spacy4from difflib import SequenceMatcher5 6nlp = spacy.load("en_core_web_sm")7 8def get_n_first_sent(text, n = 1): # extract first n sentences of text9    doc = nlp(text)10    sentences = [sent.text for sent in doc.sents]11    if n == -1: # return all sentences12        return sentences13    return sentences[0:n-1]14 15def rem_similiar(list_sent_text,list_sent_sum,treshhold = 0.9): # uses SequenceMatcher to find similiar sentences16    for i, sent_sum in enumerate(list_sent_sum):17        if i == len(list_sent_text):18            break19        for sent_text in list_sent_text: # calcule la similiartité avec ttes les autres phrases20            score_similarité = SequenceMatcher(None, sent_sum, sent_text).ratio()21            if score_similarité >= treshhold:22                list_sent_text.pop(i)23 24@st.cache_resource 25def load_model():26    return pipeline("summarization", model="Yahiael1/mymodel_final_v2")27 28def summary_wrapper(sum_obj,text,min_len,max_len):29    return sum_obj(text, max_length = max_len,30                             min_length = min_len,31                             early_stopping = True,32                             clean_up_tokenization_spaces = True,33                             truncation=True, # max token number = 102434                             num_beams = 8, # nombres de tokens à générer après chaque mot, le modèle ensuite choisit l'un de ces tokens; associée à do_sample35                             #do_sample=True, # associée à num_beams, utilise un algorithme non-glouton pour le choix du token suivant36                             repetition_penalty = 1.1, # pénalise les mots redondants en diminuant leur score37                             temperature = 1.3, # modifie hasardément les scores des tokens à choisir pour augmenter ou diminuer la "créativité du modèle" 38                             num_beam_groups = 4 # doit etre diviseur de num_beams, ajoute un mécanisme promouvant la diversité des tokens générés, ne peut pas etre utlisé avec do_sample39                            )[0]["summary_text"]40 41 42def summarize(summarizer_object,desired_length,text):43    if desired_length == 'long':44             max_len = 12845             min_len = 10046    elif desired_length == 'medium':47             max_len = 9048             min_len = 5049    elif desired_length == 'short':50             max_len = 4051             min_len = 1052 53    first_summary = summary_wrapper(summarizer_object,text,min_len,max_len)54    55    sent_text = get_n_first_sent(text, 2) # get 5 first sentences of text56    sent_sum = get_n_first_sent(first_summary, -1) # get all sentences of summary57    58    rem_similiar(sent_text,sent_sum) # on supprime les phrases extraites59    new_text = '\n'.join(sent_text)60    61    return summary_wrapper(summarizer_object,new_text,min_len,max_len)62 63 64