SkillForge commited on
Commit
a24b86b
·
verified ·
1 Parent(s): e548a79

Upload model.py

Browse files

Main model SkillForge.

Files changed (1) hide show
  1. model.py +81 -0
model.py ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import pandas as pd
3
+ import requests
4
+ from io import StringIO
5
+ from sklearn.feature_extraction.text import TfidfVectorizer
6
+ from sklearn.metrics.pairwise import cosine_similarity
7
+
8
+ class ChatBotFromWebDataset:
9
+ def __init__(self, dataset_url):
10
+ self.dataset_url = dataset_url
11
+ self.qa_pairs = {} # {"вопрос": "ответ"}
12
+ self.vectorizer = TfidfVectorizer()
13
+ self.X = None # Векторизованные вопросы
14
+
15
+ self.load_dataset() # Загружаем датасет при инициализации
16
+ self.train() # Обучаемся на нём
17
+
18
+ def load_dataset(self):
19
+ """Загружает датасет с сайта (CSV/JSON)"""
20
+ try:
21
+ response = requests.get(self.dataset_url)
22
+ response.raise_for_status()
23
+
24
+ # Если CSV (можно адаптировать под JSON)
25
+ data = pd.read_csv(StringIO(response.text))
26
+
27
+ # Пример: датасет в формате ["question", "answer"]
28
+ for _, row in data.iterrows():
29
+ self.qa_pairs[row["question"]] = row["answer"]
30
+
31
+ print(f"Загружено {len(self.qa_pairs)} пар вопрос-ответ.")
32
+
33
+ except Exception as e:
34
+ print(f"Ошибка загрузки датасета: {e}")
35
+ self.qa_pairs = {}
36
+
37
+ def train(self):
38
+ """Векторизует вопросы для поиска похожих"""
39
+ if not self.qa_pairs:
40
+ print("Нет данных для обучения!")
41
+ return
42
+
43
+ questions = list(self.qa_pairs.keys())
44
+ self.X = self.vectorizer.fit_transform(questions)
45
+
46
+ def predict(self, user_input):
47
+ """Находит ближайший вопрос в датасете и возвращает ответ"""
48
+ if not self.qa_pairs:
49
+ return "Я не обучен (датасет не загружен)."
50
+
51
+ # Векторизуем вопрос пользователя
52
+ user_vec = self.vectorizer.transform([user_input])
53
+
54
+ # Ищем ближайший вопрос из датасета
55
+ similarities = cosine_similarity(user_vec, self.X)
56
+ best_match_idx = np.argmax(similarities)
57
+ best_match_score = similarities[0, best_match_idx]
58
+
59
+ if best_match_score > 0.6: # Порог схожести
60
+ best_question = list(self.qa_pairs.keys())[best_match_idx]
61
+ return self.qa_pairs[best_question]
62
+ else:
63
+ return "Я не знаю, что ответить." # Можно добавить обучение на лету
64
+
65
+ def main():
66
+ # Пример датасета (можно заменить на любой CSV/JSON с вопросами и ответами)
67
+ dataset_url = "https://raw.githubusercontent.com/user/repo/main/qa_dataset.csv"
68
+
69
+ bot = ChatBotFromWebDataset(dataset_url)
70
+ print("Чат-бот (обучен на датасете с сайта). Введите 'стоп' для выхода.")
71
+
72
+ while True:
73
+ user_input = input("Вы: ").strip()
74
+ if user_input.lower() == "стоп":
75
+ break
76
+
77
+ reply = bot.predict(user_input)
78
+ print(f"Бот: {reply}")
79
+
80
+ if __name__ == "__main__":
81
+ main()