Emil25 commited on
Commit
c54be94
·
verified ·
1 Parent(s): 1425e9d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +36 -32
app.py CHANGED
@@ -4,7 +4,6 @@ import numpy as np
4
  import nltk
5
  from nltk.tokenize import sent_tokenize, word_tokenize
6
  from transformers import AutoModelForCausalLM, AutoTokenizer
7
- from nltk.data import find
8
  import functools
9
 
10
 
@@ -17,6 +16,9 @@ st.set_page_config(
17
 
18
  @functools.lru_cache(maxsize=None)
19
  def get_model():
 
 
 
20
  # Загрузка модели
21
  model = AutoModelForCausalLM.from_pretrained('model')
22
  # Загрузка токенизатора
@@ -24,39 +26,23 @@ def get_model():
24
  return model, tokenizer
25
 
26
 
27
- @functools.lru_cache(maxsize=None)
28
- def gen_review(input_text):
29
- model, tokenizer = get_model()
30
- input_ids = tokenizer.encode(input_text, return_tensors='pt')
31
- output = model.generate(
32
- input_ids,
33
- max_length=300,
34
- num_return_sequences=1,
35
- no_repeat_ngram_size=2,
36
- do_sample=True,
37
- top_p=0.95,
38
- top_k=60,
39
- temperature=0.9,
40
- eos_token_id=tokenizer.eos_token_id,
41
- )
42
- return tokenizer.decode(output[0], skip_special_tokens=True)
43
-
44
-
45
  def correct_sentence(sentence):
46
- """Функция для исправления предложений."""
 
 
 
47
  words = word_tokenize(sentence)
48
-
49
- # Делаем первую букву первого слова заглавной
50
  if len(words) > 0:
51
  words[0] = words[0].capitalize()
52
-
53
- # Собираем обратно предложение
54
  corrected_sentence = ' '.join(words)
55
  return corrected_sentence
56
 
57
 
58
  def process_reviews(reviews):
59
- """Функция для обработки списка отзывов."""
 
 
 
60
  corrected_reviews = []
61
  for review in reviews:
62
  sentences = sent_tokenize(review)
@@ -66,18 +52,27 @@ def process_reviews(reviews):
66
 
67
 
68
  def load_nltk_data():
 
 
 
 
69
  try:
70
- find('tokenizers/punkt')
71
- find('tokenizers/punkt_tab')
72
  print("Данные уже загружены.")
73
  except LookupError:
74
  print("Загрузка данных NLTK...")
75
- nltk.download(['punkt', 'punkt_tab'])
76
-
77
 
 
78
  def preprocess_input(input_text):
 
 
 
 
79
  input_text = input_text.split(":")[-1].strip()
80
  sentences = sent_tokenize(input_text)
 
 
81
  last_sentence = sentences[-1]
82
  if not last_sentence.endswith('.'):
83
  sentences.pop()
@@ -93,11 +88,14 @@ def preprocess_input(input_text):
93
 
94
 
95
  def generate_review(input_text):
 
 
 
96
  model, tokenizer = get_model()
97
  input_ids = tokenizer.encode(input_text, return_tensors='pt')
98
  output = model.generate(
99
  input_ids,
100
- max_length=300,
101
  num_return_sequences=1,
102
  no_repeat_ngram_size=2,
103
  do_sample=True,
@@ -110,22 +108,28 @@ def generate_review(input_text):
110
 
111
 
112
  def main():
 
 
 
113
  if 'btn_predict' not in st.session_state:
114
  st.session_state['btn_predict'] = False
115
 
 
116
  category = st.text_input("Категория:", value="Кондитерская")
117
  rating = st.slider("Рейтинг", 1, 5, 1)
118
  key_words = st.text_input("Ключевые слова", value="десерт, торт, цена")
119
 
120
- # Ввод новых параметров
121
  input_text = f"Категория: {category}; Рейтинг: {rating}; Ключевые слова: {key_words} -> Отзыв:"
122
 
123
- if st.button('Generate'):
124
  with st.spinner('Генерация отзыва...'):
125
  processed_input = preprocess_input(input_text)
126
  generated_text = generate_review(processed_input)
127
  st.success("Готово!")
128
  st.text(generated_text)
129
 
 
130
  if __name__ == "__main__":
 
131
  main()
 
4
  import nltk
5
  from nltk.tokenize import sent_tokenize, word_tokenize
6
  from transformers import AutoModelForCausalLM, AutoTokenizer
 
7
  import functools
8
 
9
 
 
16
 
17
  @functools.lru_cache(maxsize=None)
18
  def get_model():
19
+ """
20
+ Кэшируемая функция для загрузки модели и токенизатора.
21
+ """
22
  # Загрузка модели
23
  model = AutoModelForCausalLM.from_pretrained('model')
24
  # Загрузка токенизатора
 
26
  return model, tokenizer
27
 
28
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  def correct_sentence(sentence):
30
+ """
31
+ Функция для исправления предложений.
32
+ Делает первую букву заглавной.
33
+ """
34
  words = word_tokenize(sentence)
 
 
35
  if len(words) > 0:
36
  words[0] = words[0].capitalize()
 
 
37
  corrected_sentence = ' '.join(words)
38
  return corrected_sentence
39
 
40
 
41
  def process_reviews(reviews):
42
+ """
43
+ Функция для обработки списка отзывов.
44
+ Исправляет каждое предложение в отзывах.
45
+ """
46
  corrected_reviews = []
47
  for review in reviews:
48
  sentences = sent_tokenize(review)
 
52
 
53
 
54
  def load_nltk_data():
55
+ """
56
+ Функция для загрузки данных NLTK.
57
+ Проверяет, загружены ли данные, и при необходимости загружает их.
58
+ """
59
  try:
60
+ nltk.data.find('tokenizers/punkt')
 
61
  print("Данные уже загружены.")
62
  except LookupError:
63
  print("Загрузка данных NLTK...")
64
+ nltk.download('punkt')
 
65
 
66
+
67
  def preprocess_input(input_text):
68
+ """
69
+ Функция для предварительной обработки входного текста.
70
+ Убирает лишние символы, исправляет предложения.
71
+ """
72
  input_text = input_text.split(":")[-1].strip()
73
  sentences = sent_tokenize(input_text)
74
+ if len(sentences) == 0:
75
+ return ""
76
  last_sentence = sentences[-1]
77
  if not last_sentence.endswith('.'):
78
  sentences.pop()
 
88
 
89
 
90
  def generate_review(input_text):
91
+ """
92
+ Функция для генерации отзыва на основе входного текста.
93
+ """
94
  model, tokenizer = get_model()
95
  input_ids = tokenizer.encode(input_text, return_tensors='pt')
96
  output = model.generate(
97
  input_ids,
98
+ max_length=200,
99
  num_return_sequences=1,
100
  no_repeat_ngram_size=2,
101
  do_sample=True,
 
108
 
109
 
110
  def main():
111
+ """
112
+ Основная функция приложения Streamlit.
113
+ """
114
  if 'btn_predict' not in st.session_state:
115
  st.session_state['btn_predict'] = False
116
 
117
+ # Ввод данных пользователем
118
  category = st.text_input("Категория:", value="Кондитерская")
119
  rating = st.slider("Рейтинг", 1, 5, 1)
120
  key_words = st.text_input("Ключевые слова", value="десерт, торт, цена")
121
 
122
+ # Формируем входной текст
123
  input_text = f"Категория: {category}; Рейтинг: {rating}; Ключевые слова: {key_words} -> Отзыв:"
124
 
125
+ if st.button('Generate'): # Кнопка для генерации отзыва
126
  with st.spinner('Генерация отзыва...'):
127
  processed_input = preprocess_input(input_text)
128
  generated_text = generate_review(processed_input)
129
  st.success("Готово!")
130
  st.text(generated_text)
131
 
132
+
133
  if __name__ == "__main__":
134
+ load_nltk_data()
135
  main()