Download model.py from SkillForge45/SkillForge: direct link, hf CLI and curl.
- Browser
- Download file 3.44 kB
-
https://huggingface.co/SkillForge45/SkillForge/resolve/main/model.py
- Command line
-
hf download hf://SkillForge45/SkillForge/model.py
-
curl -L -o model.py https://huggingface.co/SkillForge45/SkillForge/resolve/main/model.py
3.44 kB
| import numpy as np | |
| import pandas as pd | |
| import requests | |
| from io import StringIO | |
| from sklearn.feature_extraction.text import TfidfVectorizer | |
| from sklearn.metrics.pairwise import cosine_similarity | |
| class ChatBotFromWebDataset: | |
| def __init__(self, dataset_url): | |
| self.dataset_url = dataset_url | |
| self.qa_pairs = {} # {"вопрос": "ответ"} | |
| self.vectorizer = TfidfVectorizer() | |
| self.X = None # Векторизованные вопросы | |
| self.load_dataset() # Загружаем датасет при инициализации | |
| self.train() # Обучаемся на нём | |
| def load_dataset(self): | |
| """Загружает датасет с сайта (CSV/JSON)""" | |
| try: | |
| response = requests.get(self.dataset_url) | |
| response.raise_for_status() | |
| # Если CSV (можно адаптировать под JSON) | |
| data = pd.read_csv(StringIO(response.text)) | |
| # Пример: датасет в формате ["question", "answer"] | |
| for _, row in data.iterrows(): | |
| self.qa_pairs[row["question"]] = row["answer"] | |
| print(f"Загружено {len(self.qa_pairs)} пар вопрос-ответ.") | |
| except Exception as e: | |
| print(f"Ошибка загрузки датасета: {e}") | |
| self.qa_pairs = {} | |
| def train(self): | |
| """Векторизует вопросы для поиска похожих""" | |
| if not self.qa_pairs: | |
| print("Нет данных для обучения!") | |
| return | |
| questions = list(self.qa_pairs.keys()) | |
| self.X = self.vectorizer.fit_transform(questions) | |
| def predict(self, user_input): | |
| """Находит ближайший вопрос в датасете и возвращает ответ""" | |
| if not self.qa_pairs: | |
| return "Я не обучен (датасет не загружен)." | |
| # Векторизуем вопрос пользователя | |
| user_vec = self.vectorizer.transform([user_input]) | |
| # Ищем ближайший вопрос из датасета | |
| similarities = cosine_similarity(user_vec, self.X) | |
| best_match_idx = np.argmax(similarities) | |
| best_match_score = similarities[0, best_match_idx] | |
| if best_match_score > 0.6: # Порог схожести | |
| best_question = list(self.qa_pairs.keys())[best_match_idx] | |
| return self.qa_pairs[best_question] | |
| else: | |
| return "Я не знаю, что ответить." # Можно добавить обучение на лету | |
| def main(): | |
| # Пример датасета (можно заменить на любой CSV/JSON с вопросами и ответами) | |
| dataset_url = "https://raw.githubusercontent.com/user/repo/main/qa_dataset.csv" | |
| bot = ChatBotFromWebDataset(dataset_url) | |
| print("Чат-бот (обучен на датасете с сайта). Введите 'стоп' для выхода.") | |
| while True: | |
| user_input = input("Вы: ").strip() | |
| if user_input.lower() == "стоп": | |
| break | |
| reply = bot.predict(user_input) | |
| print(f"Бот: {reply}") | |
| if __name__ == "__main__": | |
| main() | |