├── images ├── knn.png ├── pca.png ├── formol.jpg ├── images.jpeg ├── khodro.png ├── rabei.png ├── Naivebais.png ├── chameleon.jpg ├── images-1.png ├── integrate.png ├── oghlidosi.png ├── all-algorithem.gif ├── Calinski-Harabasz.png ├── internal-measure.png ├── Logestic-Regression.jpg ├── Tree-in-Machine-Learning.png ├── An-example-of-random-forest-classifier.png ├── principal-component-analysis-pca-featured.png ├── selvaraj_confusion_matrix_precision_recall.webp ├── SVM-classifier-model-SVM-support-vector-machine.png └── MultiLayer-Perceptron-MLP-sturcture-334-MultiLayer-Perceptron-Classifier-MultiLayer.png ├── ChatBot ├── words.pkl ├── classes.pkl ├── response.mp3 ├── words_fa.pkl ├── classes_fa.pkl ├── chatbot_model.h5 ├── chatbot_model_fa.h5 ├── README.md ├── ecommerce ├── khodro.ipynb ├── makemodel.py ├── TalkAi.md ├── main.py └── Persian_Health_Chatbot_Article.md ├── NeuralComputing ├── 10-K-Fold-Cross-Validation.png ├── Session_3.md ├── Session_5.md └── Quize.md ├── language-translator-ml-codes ├── s2s │ ├── saved_model.pb │ ├── keras_metadata.pb │ └── variables │ │ ├── variables.index │ │ └── variables.data-00000-of-00001 ├── training_data.pkl └── langTraining.py ├── agi ├── len_file.py ├── main.py ├── train.py ├── finetune.py ├── analyze.py ├── quality_sound.py ├── finetun_wac.py ├── repair_sound.py └── fine_tuning_DeepSeek_Llama_80.py ├── Dr-rabiee ├── index.ipynb ├── CTMC.md └── main.ipynb ├── LICENSE ├── Course ├── QT │ ├── README.md │ ├── 01_window.md │ ├── 02_basic_widgets.md │ ├── 03_signals_slots.md │ ├── 04_layouts.md │ ├── 10_stylesheet.md │ ├── 07_calculator.md │ ├── 06_file_dialog.md │ ├── 05_menus_toolbar.md │ ├── 08_text_editor.md │ ├── 09_advanced_widgets.md │ └── qt-document.rts ├── blob_setiment_pos_neg.ipynb ├── Bagging_Boosting.md └── NLTK │ └── NLTK.md ├── README.md ├── دوره-متوسطه--ماشین-لرنینگ.md ├── مقدماتی-ماشین-لرنینگ.md ├── سطح-پیشرفته-هوش-مصنوعی.md ├── Mr_Salmani.md ├── Genetic.md ├── main.py ├── سطح-پیشرفته-پایتون.md ├── gold.md ├── test.ipynb ├── سرفصل_آموزش_پایتون_مقدماتی.md ├── ترم-دوم-سطح-متوسطه.md ├── Alborz.md ├── Dr_Akbari └── Varianse_classes.md ├── more.html ├── index.html ├── main.html ├── dr-akbari2.md └── Insurance.md /images/knn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/knn.png -------------------------------------------------------------------------------- /images/pca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/pca.png -------------------------------------------------------------------------------- /ChatBot/words.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/ChatBot/words.pkl -------------------------------------------------------------------------------- /images/formol.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/formol.jpg -------------------------------------------------------------------------------- /images/images.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/images.jpeg -------------------------------------------------------------------------------- /images/khodro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/khodro.png -------------------------------------------------------------------------------- /images/rabei.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/rabei.png -------------------------------------------------------------------------------- /ChatBot/classes.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/ChatBot/classes.pkl -------------------------------------------------------------------------------- /ChatBot/response.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/ChatBot/response.mp3 -------------------------------------------------------------------------------- /ChatBot/words_fa.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/ChatBot/words_fa.pkl -------------------------------------------------------------------------------- /images/Naivebais.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/Naivebais.png -------------------------------------------------------------------------------- /images/chameleon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/chameleon.jpg -------------------------------------------------------------------------------- /images/images-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/images-1.png -------------------------------------------------------------------------------- /images/integrate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/integrate.png -------------------------------------------------------------------------------- /images/oghlidosi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/oghlidosi.png -------------------------------------------------------------------------------- /ChatBot/classes_fa.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/ChatBot/classes_fa.pkl -------------------------------------------------------------------------------- /ChatBot/chatbot_model.h5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/ChatBot/chatbot_model.h5 -------------------------------------------------------------------------------- /images/all-algorithem.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/all-algorithem.gif -------------------------------------------------------------------------------- /ChatBot/chatbot_model_fa.h5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/ChatBot/chatbot_model_fa.h5 -------------------------------------------------------------------------------- /images/Calinski-Harabasz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/Calinski-Harabasz.png -------------------------------------------------------------------------------- /images/internal-measure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/internal-measure.png -------------------------------------------------------------------------------- /images/Logestic-Regression.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/Logestic-Regression.jpg -------------------------------------------------------------------------------- /images/Tree-in-Machine-Learning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/Tree-in-Machine-Learning.png -------------------------------------------------------------------------------- /NeuralComputing/10-K-Fold-Cross-Validation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/NeuralComputing/10-K-Fold-Cross-Validation.png -------------------------------------------------------------------------------- /language-translator-ml-codes/s2s/saved_model.pb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/language-translator-ml-codes/s2s/saved_model.pb -------------------------------------------------------------------------------- /language-translator-ml-codes/training_data.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/language-translator-ml-codes/training_data.pkl -------------------------------------------------------------------------------- /images/An-example-of-random-forest-classifier.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/An-example-of-random-forest-classifier.png -------------------------------------------------------------------------------- /language-translator-ml-codes/s2s/keras_metadata.pb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/language-translator-ml-codes/s2s/keras_metadata.pb -------------------------------------------------------------------------------- /images/principal-component-analysis-pca-featured.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/principal-component-analysis-pca-featured.png -------------------------------------------------------------------------------- /images/selvaraj_confusion_matrix_precision_recall.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/selvaraj_confusion_matrix_precision_recall.webp -------------------------------------------------------------------------------- /images/SVM-classifier-model-SVM-support-vector-machine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/SVM-classifier-model-SVM-support-vector-machine.png -------------------------------------------------------------------------------- /language-translator-ml-codes/s2s/variables/variables.index: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/language-translator-ml-codes/s2s/variables/variables.index -------------------------------------------------------------------------------- /language-translator-ml-codes/s2s/variables/variables.data-00000-of-00001: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/language-translator-ml-codes/s2s/variables/variables.data-00000-of-00001 -------------------------------------------------------------------------------- /images/MultiLayer-Perceptron-MLP-sturcture-334-MultiLayer-Perceptron-Classifier-MultiLayer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/MultiLayer-Perceptron-MLP-sturcture-334-MultiLayer-Perceptron-Classifier-MultiLayer.png -------------------------------------------------------------------------------- /agi/len_file.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | # مسیر پوشه 4 | folder_path = './wav' # مسیر پوشه خود را مشخص کنید 5 | 6 | # شمارش فایل‌ها 7 | file_count = len([f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]) 8 | 9 | print(f"Number of files in '{folder_path}': {file_count}") -------------------------------------------------------------------------------- /Dr-rabiee/index.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "1c075aed", 6 | "metadata": {}, 7 | "source": [ 8 | "![My Image](../images/integrate.png)" 9 | ] 10 | }, 11 | { 12 | "cell_type": "markdown", 13 | "id": "0df3ed7e", 14 | "metadata": {}, 15 | "source": [ 16 | "![My Image](../images/rabei.png)\n" 17 | ] 18 | } 19 | ], 20 | "metadata": { 21 | "language_info": { 22 | "name": "python" 23 | } 24 | }, 25 | "nbformat": 4, 26 | "nbformat_minor": 5 27 | } 28 | -------------------------------------------------------------------------------- /ChatBot/README.md: -------------------------------------------------------------------------------- 1 | # MLHub ChatBot 2 | 3 | Welcome to the MLHub ChatBot repository! This project provides a modular framework for building AI-powered chatbots. It is designed to help developers create intelligent conversational agents using machine learning techniques. 4 | 5 | 6 | ## Features 7 | 8 | - **Modular Design**: Easily modify and extend the chatbot functionality. 9 | - **Machine Learning Integration**: Seamlessly incorporate machine learning models for enhanced responses. 10 | - **User-Friendly Documentation**: Comprehensive guides to help you get started quickly. 11 | - **Sample Data**: Includes example datasets for training and testing your chatbot. 12 | 13 | ## Installation 14 | 15 | To get started with the MLHub ChatBot, follow these steps: 16 | 17 | 1. **Clone the repository**: 18 | ```bash 19 | git clone https://github.com/pydevcasts/MLHub.git 20 | cd MLHub/ChatBot 21 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) [2024] Siyamak Abasnezhad 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | 1. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | 2. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /Course/QT/README.md: -------------------------------------------------------------------------------- 1 | این کامیت نسخه‌ی اولیه‌ی کتاب «آموزش PyQt6 — گام‌به‌گام برای مبتدیان» را اضافه می‌کند. 2 | مخاطب هدف، دانشجویان و برنامه‌نویسان تازه‌کار هستند و مطالب به صورت ساده و پروژه‌محور ارائه شده‌اند. 3 | 4 | محتوا: 5 | - صفحه ۱: ساخت اولین پنجره گرافیکی با کلاس‌های اصلی 6 | - صفحه ۲: ویجت‌های پایه (دکمه، برچسب، ورودی متن) با مثال عملی 7 | - صفحه ۳: سیگنال و اسلات با تغییر متن برچسب 8 | - صفحه ۴: چیدمان‌ها و ساخت فرم ورود 9 | - صفحه ۵: منو و نوارابزار با پنجره‌ی اصلی 10 | - صفحه ۶: باز و ذخیره‌سازی فایل با پنجره‌ی انتخاب فایل 11 | - صفحه ۷: پروژه ماشین‌حساب ساده (چهار عمل اصلی) 12 | - صفحه ۸: پروژه دفترچه یادداشت ساده با باز/ذخیره 13 | - صفحه ۹: ویجت‌های پیشرفته (تقویم، اسلایدر، نوار پیشرفت) 14 | - صفحه ۱۰: زیباسازی رابط کاربری با استایل‌شیت 15 | 16 | ویژگی‌ها: 17 | - تمرکز بر مثال‌های عملی و کدهای قابل اجرا 18 | - کامنت‌های کد به زبان انگلیسی برای خوانایی بهتر 19 | - پرهیز از مقدمه و جمع‌بندی طولانی؛ تمرکز بر مطالب کاربردی 20 | - رعایت راست‌چین با عدم شروع خطوط با عبارت‌های انگلیسی 21 | 22 | ساختار فایل‌ها: 23 | - docs/book/pyqt6/01_window.md 24 | - docs/book/pyqt6/02_basic_widgets.md 25 | - docs/book/pyqt6/03_signals_slots.md 26 | - docs/book/pyqt6/04_layouts.md 27 | - docs/book/pyqt6/05_menus_toolbar.md 28 | - docs/book/pyqt6/06_file_dialog.md 29 | - docs/book/pyqt6/07_calculator.md 30 | - docs/book/pyqt6/08_text_editor.md 31 | - docs/book/pyqt6/09_advanced_widgets.md 32 | - docs/book/pyqt6/10_stylesheet.md 33 | - README.md با توضیح نحوه اجرا و پیش‌نیازها (اختیاری) 34 | 35 | اعتبار: 36 | - نویسنده: سیامک عباس‌نژاد 37 | -------------------------------------------------------------------------------- /agi/main.py: -------------------------------------------------------------------------------- 1 | 2 | # from analyze import * 3 | import pandas as pd 4 | import re 5 | from analyze import process_data 6 | import string 7 | from sklearn.model_selection import train_test_split 8 | from sklearn.feature_extraction.text import TfidfVectorizer 9 | 10 | # فرض کنید که df قبلاً ایجاد شده است و شامل ستون 'text' است 11 | df = process_data() 12 | # 1. پاک‌سازی متن‌ها 13 | def clean_text(text): 14 | # تبدیل به حروف کوچک 15 | text = text.lower() 16 | # حذف نشانه‌گذاری 17 | text = re.sub(f"[{re.escape(string.punctuation)}]", "", text) 18 | # حذف کلمات بی‌معنی (stop words) 19 | # برای این کار می‌توانید از یک لیست از کلمات بی‌معنی استفاده کنید 20 | # به عنوان مثال: 21 | stop_words = set(['و', 'در', 'به', 'از', 'که', 'این', 'برای', 'است', 'با', 'هم', 'اما', 'اگر']) 22 | text = ' '.join(word for word in text.split() if word not in stop_words) 23 | return text 24 | 25 | # پاک‌سازی متن‌ها 26 | df['cleaned_text'] = df['text'].apply(clean_text) 27 | 28 | # 2. تبدیل داده‌ها به فرمت مناسب 29 | # استفاده از TF-IDF برای تبدیل متن به ویژگی‌های عددی 30 | tfidf_vectorizer = TfidfVectorizer(max_features=5000) # می‌توانید تعداد ویژگی‌ها را تنظیم کنید 31 | X = tfidf_vectorizer.fit_transform(df['cleaned_text']).toarray() # ویژگی‌های عددی 32 | y = df['audio_file'] # یا هر برچسب دیگری که دارید 33 | 34 | # تقسیم داده‌ها به مجموعه‌های آموزشی و آزمایشی 35 | X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) 36 | 37 | # نمایش ابعاد داده‌ها 38 | print(f"Training data shape: {X_train.shape}") 39 | print(f"Testing data shape: {X_test.shape}") 40 | 41 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # MLHub Repository Overview 3 | 4 | ## Introduction 5 | The **MLHub** repository, hosted on GitHub, is a comprehensive resource for machine learning practitioners. It aims to provide tools, libraries, and examples that facilitate the development and deployment of machine learning models. 6 | 7 | ## Key Features 8 | - **Diverse Libraries**: The repository includes a variety of libraries for different machine learning tasks, including TensorFlow and PyTorch. 9 | - **Example Implementations**: Users can find practical examples demonstrating how to implement various machine learning algorithms and techniques. 10 | - **Documentation**: Well-structured documentation is available to help users understand the functionalities and usage of the provided tools. 11 | 12 | ## Installation 13 | To get started with MLHub, you can clone the repository using the following command: 14 | 15 | ```bash 16 | git clone https://github.com/pydevcasts/MLHub.git 17 | ``` 18 | 19 | ## Usage 20 | After cloning the repository, you can explore the different directories for specific tools and examples. The documentation provides detailed instructions on how to use each component effectively. 21 | 22 | ## Contribution 23 | The project encourages contributions from the community. If you have ideas for improvements or new features, feel free to fork the repository and submit a pull request. 24 | 25 | ## Conclusion 26 | MLHub is a valuable resource for anyone interested in machine learning. Its well-organized structure and comprehensive examples make it an excellent starting point for both beginners and experienced developers. 27 | 28 | 29 | -------------------------------------------------------------------------------- /Course/QT/01_window.md: -------------------------------------------------------------------------------- 1 | ## صفحه ۱ – اولین پنجره گرافیکی در PyQt6 2 | 3 | برای شروع یادگیری PyQt6 لازم نیست مقدمات طولانی بخوانید. کافی است بدانید این ابزار یکی از قدرتمندترین فریم‌ورک‌های پایتون برای ساخت نرم‌افزارهای دسکتاپ با رابط کاربری گرافیکی است. حالا بیایید اولین پنجره‌ی گرافیکی خودمان را بسازیم. ✨ 4 | 5 | ### ساختار اصلی برنامه‌ها در PyQt6 6 | 7 | هر برنامه‌ی PyQt6 معمولاً شامل دو بخش اصلی است: 8 | 9 | * شیء اصلی برنامه که وظیفه‌ی مدیریت رویدادها را بر عهده دارد. 10 | * یک پنجره یا ویجت که به‌عنوان رابط کاربری به کاربر نمایش داده می‌شود. 11 | 12 | ### مثال: ساخت اولین پنجره 13 | 14 | ```python 15 | import sys 16 | from PyQt6.QtWidgets import QApplication, QWidget 17 | 18 | # ایجاد یک برنامه 19 | app = QApplication(sys.argv) 20 | 21 | # ایجاد یک پنجره ساده 22 | window = QWidget() 23 | window.setWindowTitle("اولین برنامه PyQt6") 24 | window.resize(400, 300) 25 | 26 | # نمایش پنجره 27 | window.show() 28 | 29 | # اجرای برنامه 30 | sys.exit(app.exec()) 31 | ``` 32 | 33 | ### توضیح خط به خط 34 | 35 | * `QApplication` همیشه باید در ابتدای برنامه ساخته شود چون مدیریت رویدادها و اجرای کل نرم‌افزار را بر عهده دارد. 36 | * `QWidget` ساده‌ترین نوع پنجره است که می‌توان روی آن دکمه‌ها و سایر ویجت‌ها را قرار داد. 37 | * `setWindowTitle` عنوان پنجره را مشخص می‌کند. 38 | * `resize` اندازه‌ی پنجره را تغییر می‌دهد (عرض و ارتفاع). 39 | * `show` باعث نمایش پنجره روی صفحه می‌شود. 40 | * در پایان با `app.exec()` برنامه وارد حلقه‌ی اجرا می‌شود و تا وقتی که پنجره بسته نشود، فعال خواهد بود. 41 | 42 | ✨ حالا شما اولین پنجره‌ی گرافیکی خود را در PyQt6 ساخته‌اید. وقتی این کد را اجرا کنید، یک پنجره‌ی خالی باز می‌شود که نقطه‌ی شروع همه‌ی برنامه‌های گرافیکی است. 43 | 44 | -------------------------------------------------------------------------------- /دوره-متوسطه--ماشین-لرنینگ.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## سرفصل‌های دوره متوسطه ماشین لرنینگ 4 | 5 | --- 6 | 7 | ### جلسه ۱: مرور و تکمیل مباحث دوره مقدماتی 8 | 9 | * مرور مفاهیم پایه و کار با داده‌ها 10 | * یادآوری رگرسیون خطی و لجستیک 11 | * رفع اشکالات و تمرین‌های تکمیلی 12 | 13 | ### جلسه ۲: پردازش پیشرفته داده‌ها 14 | 15 | * Feature Engineering (مهندسی ویژگی‌ها) 16 | * مدیریت داده‌های گمشده و داده‌های نامتوازن 17 | * تبدیل داده‌ها: نرمال‌سازی، استانداردسازی، کدگذاری ویژگی‌های دسته‌ای (One-Hot Encoding) 18 | 19 | ### جلسه ۳: الگوریتم‌های طبقه‌بندی پیشرفته 20 | 21 | * درخت تصمیم (Decision Tree) و مفاهیم آن 22 | * ماشین بردار پشتیبان (Support Vector Machine - SVM) 23 | * K-نزدیک‌ترین همسایه (K-NN) 24 | 25 | ### جلسه ۴: الگوریتم‌های تجمیعی (Ensemble Methods) 26 | 27 | * Bagging و Random Forest 28 | * Boosting و Gradient Boosting 29 | * مزایا و معایب هر روش 30 | 31 | ### جلسه ۵: الگوریتم‌های یادگیری بدون نظارت 32 | 33 | * خوشه‌بندی (Clustering) و انواع آن 34 | * الگوریتم K-Means 35 | * الگوریتم‌های دیگر مثل DBSCAN 36 | 37 | ### جلسه ۶: کاهش ابعاد (Dimensionality Reduction) 38 | 39 | * اصول و ضرورت کاهش ابعاد 40 | * الگوریتم تحلیل مولفه‌های اصلی (PCA) 41 | * نمونه‌های کاربردی 42 | 43 | ### جلسه ۷: ارزیابی و بهینه‌سازی مدل‌ها 44 | 45 | * Cross Validation (اعتبارسنجی متقابل) 46 | * تنظیم هایپرپارامترها با Grid Search و Random Search 47 | * روش‌های مقابله با Overfitting و Underfitting 48 | 49 | ### جلسه ۸: مدیریت داده‌های پیچیده 50 | 51 | * کار با داده‌های متنی (مقدمه) 52 | * آشنایی با داده‌های زمانی و سری‌های زمانی 53 | * معرفی داده‌های ساختاریافته و نیمه‌ساختاریافته 54 | 55 | ### جلسه ۹: پروژه عملی متوسطه 56 | 57 | * انتخاب یک پروژه چالش‌برانگیز (مثلاً تحلیل احساسات متن، پیش‌بینی فروش، تشخیص تقلب) 58 | * آماده‌سازی داده‌ها و پیاده‌سازی مدل‌های پیشرفته 59 | * ارزیابی و بهبود مدل 60 | 61 | 62 | -------------------------------------------------------------------------------- /Course/QT/02_basic_widgets.md: -------------------------------------------------------------------------------- 1 | ## صفحه ۲ – ویجت‌های پایه در PyQt6 2 | 3 | تا اینجا یک پنجره‌ی خالی ساختیم. اما یک پنجره‌ی خالی به درد ما نمی‌خورد! 😅 حالا وقت آن است که عناصر اصلی یا همان **ویجت‌ها** را به پنجره اضافه کنیم. 4 | 5 | ### مهم‌ترین ویجت‌های پایه: 6 | 7 | * دکمه (QPushButton) ➡️ برای انجام عملیات 8 | * برچسب (QLabel) ➡️ برای نمایش متن 9 | * ورودی متن (QLineEdit) ➡️ برای گرفتن داده از کاربر 10 | 11 | ### مثال: اضافه کردن چند ویجت ساده 12 | 13 | ```python 14 | import sys 15 | from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QLineEdit 16 | 17 | app = QApplication(sys.argv) 18 | 19 | # Create main window 20 | window = QWidget() 21 | window.setWindowTitle("Basic Widgets Example") 22 | window.resize(400, 300) 23 | 24 | # Create a label 25 | label = QLabel("Hello PyQt6!", window) 26 | label.move(50, 50) # Set position 27 | 28 | # Create a button 29 | button = QPushButton("Click Me", window) 30 | button.move(50, 100) 31 | 32 | # Create a text input 33 | text_input = QLineEdit(window) 34 | text_input.move(50, 150) 35 | text_input.resize(200, 30) # Set width and height 36 | 37 | # Show the window 38 | window.show() 39 | 40 | sys.exit(app.exec()) 41 | ``` 42 | 43 | ### توضیحات: 44 | 45 | * `QLabel` یک برچسب ساده برای نمایش متن است. 46 | * `QPushButton` یک دکمه ایجاد می‌کند. 47 | * `QLineEdit` یک جعبه‌ی متنی است که کاربر می‌تواند چیزی در آن تایپ کند. 48 | * متد `move(x, y)` مکان ویجت را روی پنجره مشخص می‌کند. 49 | * متد `resize(w, h)` اندازه‌ی ویجت را تغییر می‌دهد. 50 | 51 | 💡 با اجرای این برنامه، شما یک برچسب، یک دکمه و یک ورودی متن خواهید داشت. 52 | 53 | --- 54 | 55 | ✅ حالا با ویجت‌های پایه آشنا شدید. در صفحه‌ی بعد، یاد می‌گیریم چطور این ویجت‌ها را به هم متصل کنیم تا با کلیک روی دکمه، متن برچسب تغییر کند. این همان **مفهوم سیگنال و اسلات** در PyQt6 است. 🔄 56 | 57 | -------------------------------------------------------------------------------- /مقدماتی-ماشین-لرنینگ.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## سرفصل‌های دوره مقدماتی ماشین لرنینگ 4 | 5 | --- 6 | 7 | ### جلسه ۱: معرفی یادگیری ماشین 8 | 9 | * آشنایی با مفهوم یادگیری ماشین 10 | * انواع یادگیری ماشین (نظارت شده، بدون نظارت، تقویتی) 11 | * کاربردهای عملی ماشین لرنینگ در دنیای واقعی 12 | 13 | ### جلسه ۲: مقدمه‌ای بر پایتون برای داده‌کاوی 14 | 15 | * نصب و راه‌اندازی محیط برنامه‌نویسی (Jupyter Notebook یا VSCode) 16 | * آشنایی با ساختارهای پایه پایتون (لیست، دیکشنری، حلقه‌ها، شرط‌ها) 17 | 18 | ### جلسه ۳: آشنایی با NumPy 19 | 20 | * مفهوم آرایه‌ها و عملیات عددی 21 | * ایجاد، تغییر شکل و ایندکسینگ آرایه‌ها 22 | * توابع ریاضی پایه در NumPy 23 | 24 | ### جلسه ۴: آشنایی با Pandas 25 | 26 | * ساختارهای داده‌ای Series و DataFrame 27 | * خواندن و نوشتن داده‌ها از فایل CSV 28 | * انتخاب، فیلتر کردن و مرتب‌سازی داده‌ها 29 | 30 | ### جلسه ۵: آمار پایه و مفاهیم احتمالات 31 | 32 | * میانگین، میانه، واریانس و انحراف معیار 33 | * توزیع‌های آماری ساده 34 | * مفاهیم پایه احتمالات و متغیرهای تصادفی 35 | 36 | ### جلسه ۶: پاکسازی و آماده‌سازی داده‌ها (Data Cleaning) 37 | 38 | * شناسایی داده‌های گمشده و نحوه پرکردن یا حذف آن‌ها 39 | * مدیریت داده‌های تکراری 40 | * نرمال‌سازی و استانداردسازی داده‌ها 41 | 42 | ### جلسه ۷: مصورسازی داده‌ها با Matplotlib و Seaborn 43 | 44 | * رسم نمودارهای خطی، میله‌ای و پراکندگی 45 | * نمایش توزیع داده‌ها با هیستوگرام و نمودار جعبه‌ای (Boxplot) 46 | * ترکیب نمودارها و شخصی‌سازی ظاهر آنها 47 | 48 | ### جلسه ۸: معرفی الگوریتم‌های یادگیری نظارت شده 49 | 50 | * رگرسیون خطی (Linear Regression) — تئوری و پیاده‌سازی ساده 51 | * رگرسیون لجستیک (Logistic Regression) — کاربرد در دسته‌بندی 52 | 53 | ### جلسه ۹: آموزش و ارزیابی مدل 54 | 55 | * تقسیم داده به مجموعه آموزش و آزمون 56 | * مفهوم overfitting و underfitting 57 | * معیارهای سنجش مدل: دقت (Accuracy)، دقت تفکیکی (Precision)، فراخوانی (Recall)، امتیاز F1 58 | 59 | ### جلسه ۱۰: پروژه عملی مقدماتی 60 | 61 | * انتخاب یک مسئله ساده (مثلاً پیش‌بینی قیمت خانه یا دسته‌بندی ایمیل‌ها) 62 | * جمع‌آوری و آماده‌سازی داده 63 | * پیاده‌سازی الگوریتم‌های یادگیری نظارت شده 64 | * ارزیابی مدل و تحلیل نتایج 65 | 66 | 67 | -------------------------------------------------------------------------------- /سطح-پیشرفته-هوش-مصنوعی.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## سرفصل‌های دوره پیشرفته ماشین لرنینگ 4 | 5 | --- 6 | 7 | ### جلسه ۱: مرور کلی و آماده‌سازی 8 | 9 | * مرور نکات کلیدی دوره متوسطه 10 | * معرفی ابزارها و محیط‌های کاری پیشرفته (مثل Google Colab، محیط‌های GPU) 11 | * آشنایی با کتابخانه‌های Deep Learning (TensorFlow, PyTorch) 12 | 13 | ### جلسه ۲: مقدمات یادگیری عمیق 14 | 15 | * ساختار و مفهوم شبکه‌های عصبی مصنوعی (Artificial Neural Networks) 16 | * Perceptron و Multi-Layer Perceptron (MLP) 17 | * الگوریتم پس‌انتشار خطا (Backpropagation) 18 | 19 | ### جلسه ۳: بهینه‌سازی شبکه‌های عصبی 20 | 21 | * توابع هزینه (Loss Functions) 22 | * بهینه‌سازها (Optimizers) مثل SGD، Adam 23 | * تکنیک‌های جلوگیری از Overfitting (Dropout، Early Stopping) 24 | 25 | ### جلسه ۴: شبکه‌های کانولوشنی (CNN) 26 | 27 | * آشنایی با معماری CNN 28 | * لایه‌های کانولوشن، Pooling و Fully Connected 29 | * کاربرد CNN در پردازش تصویر 30 | 31 | ### جلسه ۵: شبکه‌های بازگشتی (RNN) و انواع آن 32 | 33 | * مفهوم و ساختار RNN 34 | * مشکلات RNN معمولی و معرفی LSTM و GRU 35 | * کاربرد در پردازش داده‌های ترتیبی و متنی 36 | 37 | ### جلسه ۶: یادگیری انتقالی (Transfer Learning) 38 | 39 | * مفهوم و کاربرد انتقال یادگیری 40 | * استفاده از مدل‌های پیش‌آموزش دیده (Pretrained Models) 41 | * فاین‌تیونینگ مدل‌ها 42 | 43 | ### جلسه ۷: یادگیری تقویتی (Reinforcement Learning) مقدماتی 44 | 45 | * اصول یادگیری تقویتی 46 | * عناصر کلیدی: عامل (Agent)، محیط (Environment)، پاداش (Reward) 47 | * الگوریتم‌های پایه 48 | 49 | ### جلسه ۸: بهینه‌سازی مدل‌های پیچیده و کار با داده‌های بزرگ 50 | 51 | * آموزش مدل‌های بزرگ با GPU 52 | * روش‌های کاهش زمان آموزش 53 | * مدیریت حافظه و داده‌های حجیم 54 | 55 | ### جلسه ۹: ارزیابی مدل‌های یادگیری عمیق 56 | 57 | * معیارهای عملکرد در مسائل مختلف (کلاس‌بندی، تشخیص شی، ترجمه) 58 | * روش‌های تست و اعتبارسنجی مدل‌های عمیق 59 | 60 | ### جلسه ۱۰: پروژه نهایی پیشرفته 61 | 62 | * پروژه‌های پیشنهادی: 63 | 64 | * تشخیص تصویر با CNN (مثلاً تشخیص اشیاء یا بیماری‌های پزشکی) 65 | * تحلیل متن با RNN یا مدل‌های Transformer (مثلاً تحلیل احساسات یا ترجمه) 66 | * ساخت مدل یادگیری تقویتی ساده (مثلاً بازی یا ربات ساده) 67 | * پیاده‌سازی، آموزش، ارزیابی و بهینه‌سازی پروژه 68 | 69 | --- 70 | 71 | -------------------------------------------------------------------------------- /Course/QT/03_signals_slots.md: -------------------------------------------------------------------------------- 1 | ## صفحه ۳ – سیگنال‌ها و اسلات‌ها در PyQt6 2 | 3 | تا الان فقط ویجت‌های ثابت ساختیم. اما یک برنامه‌ی واقعی باید **واکنش‌پذیر** باشد؛ یعنی وقتی کاربر روی دکمه کلیک کرد یا متنی نوشت، تغییری در برنامه رخ بدهد. در PyQt6 این کار با **Signal** و **Slot** انجام می‌شود. 4 | 5 | ### مفهوم سیگنال و اسلات 6 | 7 | * **سیگنال (Signal):** یک رویداد است که توسط ویجت ارسال می‌شود. مثلاً وقتی روی دکمه کلیک می‌کنیم، سیگنال "کلیک شد" فرستاده می‌شود. 8 | * **اسلات (Slot):** یک تابع یا متد است که به سیگنال وصل می‌شود و وقتی سیگنال رخ داد، اجرا می‌شود. 9 | 10 | --- 11 | 12 | ### مثال: تغییر متن برچسب با کلیک روی دکمه 13 | 14 | ```python 15 | import sys 16 | from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QLineEdit 17 | 18 | app = QApplication(sys.argv) 19 | 20 | # Create main window 21 | window = QWidget() 22 | window.setWindowTitle("Signal and Slot Example") 23 | window.resize(400, 300) 24 | 25 | # Create a label 26 | label = QLabel("Waiting for action...", window) 27 | label.move(50, 50) 28 | 29 | # Create a text input 30 | text_input = QLineEdit(window) 31 | text_input.move(50, 100) 32 | text_input.resize(200, 30) 33 | 34 | # Create a button 35 | button = QPushButton("Change Label", window) 36 | button.move(50, 150) 37 | 38 | # Define slot function 39 | def change_label_text(): 40 | user_text = text_input.text() # Get text from input 41 | label.setText(user_text) # Set label text 42 | 43 | # Connect signal (button click) to slot (function) 44 | button.clicked.connect(change_label_text) 45 | 46 | # Show the window 47 | window.show() 48 | 49 | sys.exit(app.exec()) 50 | ``` 51 | 52 | --- 53 | 54 | ### توضیح کد: 55 | 56 | * وقتی کاربر روی دکمه کلیک می‌کند، سیگنال `clicked` ارسال می‌شود. 57 | * ما با `.connect` این سیگنال را به تابع `change_label_text` وصل کردیم. 58 | * تابع ما متن وارد شده در `QLineEdit` را می‌گیرد و در `QLabel` نمایش می‌دهد. 59 | 60 | 📌 حالا برنامه‌ی شما تعامل‌پذیر شده است! کاربر متنی در ورودی می‌نویسد، روی دکمه کلیک می‌کند و متن برچسب تغییر می‌کند. ✨ 61 | 62 | --- 63 | 64 | ✅ تا اینجا توانستیم ویجت‌ها را به هم متصل کنیم. 65 | در **صفحه ۴** می‌رویم سراغ چیزی بسیار کاربردی‌تر: **مدیریت چیدمان‌ها (Layouts)** برای اینکه برنامه مرتب و حرفه‌ای دیده شود. 🖼️ 66 | 67 | -------------------------------------------------------------------------------- /Course/QT/04_layouts.md: -------------------------------------------------------------------------------- 1 | ## صفحه ۴ – مدیریت چیدمان‌ها در PyQt6 2 | 3 | ### چرا Layout مهم است؟ 4 | 5 | * باعث می‌شود ویجت‌ها به‌طور خودکار مرتب شوند. 6 | * اگر کاربر اندازه‌ی پنجره را تغییر دهد، ویجت‌ها به‌طور مناسب جا‌به‌جا یا تغییر اندازه می‌دهند. 7 | * ظاهر نرم‌افزار حرفه‌ای‌تر می‌شود. 8 | 9 | --- 10 | 11 | ### انواع Layoutهای پرکاربرد 12 | 13 | * **QVBoxLayout** ➡️ چیدمان عمودی (از بالا به پایین) 14 | * **QHBoxLayout** ➡️ چیدمان افقی (از چپ به راست) 15 | * **QGridLayout** ➡️ چیدمان جدولی (ردیف و ستون) 16 | 17 | --- 18 | 19 | ### مثال: فرم ورود با Layout 20 | 21 | ```python 22 | import sys 23 | from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout 24 | 25 | app = QApplication(sys.argv) 26 | 27 | # Create main window 28 | window = QWidget() 29 | window.setWindowTitle("Login Form with Layout") 30 | window.resize(300, 200) 31 | 32 | # Create widgets 33 | label_user = QLabel("Username:") 34 | input_user = QLineEdit() 35 | 36 | label_pass = QLabel("Password:") 37 | input_pass = QLineEdit() 38 | input_pass.setEchoMode(QLineEdit.EchoMode.Password) # Hide password 39 | 40 | login_button = QPushButton("Login") 41 | 42 | # Create vertical layout 43 | layout = QVBoxLayout() 44 | layout.addWidget(label_user) 45 | layout.addWidget(input_user) 46 | layout.addWidget(label_pass) 47 | layout.addWidget(input_pass) 48 | layout.addWidget(login_button) 49 | 50 | # Set layout for window 51 | window.setLayout(layout) 52 | 53 | # Show the window 54 | window.show() 55 | 56 | sys.exit(app.exec()) 57 | ``` 58 | 59 | --- 60 | 61 | ### توضیح کد 62 | 63 | * در این مثال به جای استفاده از `move`، همه‌ی ویجت‌ها را به یک **چیدمان عمودی** (QVBoxLayout) اضافه کردیم. 64 | * متد `addWidget` ویجت‌ها را به ترتیب به Layout اضافه می‌کند. 65 | * با `setLayout` کل چیدمان به پنجره داده می‌شود. 66 | * برای ورودی رمز عبور از ویژگی `setEchoMode` استفاده کردیم تا کاراکترهای واردشده به‌صورت نقطه نمایش داده شوند. 🔒 67 | 68 | --- 69 | 70 | 📌 نتیجه: 71 | شما یک **فرم ورود ساده** دارید که کاملاً مرتب و واکنش‌پذیر است. اگر پنجره را کوچک و بزرگ کنید، ویجت‌ها همچنان منظم باقی می‌مانند. ✨ 72 | 73 | --- 74 | 75 | ✅ حالا که با چیدمان‌ها آشنا شدید، در **صفحه ۵** یاد می‌گیریم چطور یک **منو و نوار ابزار** بسازیم تا برنامه حرفه‌ای‌تر شود. 🛠️ 76 | 77 | -------------------------------------------------------------------------------- /agi/train.py: -------------------------------------------------------------------------------- 1 | import os 2 | import numpy as np 3 | import pandas as pd 4 | import librosa 5 | import matplotlib.pyplot as plt 6 | from sklearn.model_selection import train_test_split 7 | from sklearn.preprocessing import LabelEncoder 8 | from keras.models import Sequential 9 | from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense 10 | from keras.utils import to_categorical 11 | 12 | # 1. بارگذاری داده‌ها 13 | audio_folder = './clips' 14 | tsv_folder = './text' 15 | texts = {} 16 | 17 | # پردازش فایل‌های TSV 18 | for tsv_file in os.listdir(tsv_folder): 19 | if tsv_file.endswith('.tsv'): 20 | tsv_path = os.path.join(tsv_folder, tsv_file) 21 | df_tsv = pd.read_csv(tsv_path, sep='\t', header=0) 22 | 23 | if {'path', 'sentence'}.issubset(df_tsv.columns): 24 | for index, row in df_tsv.iterrows(): 25 | audio_file_name = row['path'] 26 | sentence_text = row['sentence'] 27 | texts[audio_file_name] = sentence_text 28 | 29 | # ایجاد DataFrame 30 | df = pd.DataFrame(list(texts.items()), columns=['audio_file', 'text']) 31 | 32 | # 2. ایجاد Spectrogram 33 | def create_spectrogram(file_name): 34 | audio, sr = librosa.load(file_name, sr=None) 35 | spectrogram = librosa.feature.melspectrogram(y=audio, sr=sr) 36 | spectrogram_db = librosa.power_to_db(spectrogram, ref=np.max) 37 | return spectrogram_db 38 | 39 | # ایجاد Spectrogram برای هر فایل صوتی 40 | df['spectrogram'] = df['audio_file'].apply(lambda x: create_spectrogram(os.path.join(audio_folder, x))) 41 | 42 | # 3. آماده‌سازی داده‌ها برای CNN 43 | X = np.array(list(df['spectrogram'])) 44 | y = df['text'] 45 | le = LabelEncoder() 46 | y_encoded = le.fit_transform(y) 47 | y_categorical = to_categorical(y_encoded) 48 | 49 | # تقسیم داده‌ها 50 | X_train, X_test, y_train, y_test = train_test_split(X, y_categorical, test_size=0.2, random_state=42) 51 | 52 | # 4. ساخت مدل CNN 53 | model = Sequential() 54 | model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(X_train.shape[1], X_train.shape[2], 1))) 55 | model.add(MaxPooling2D(pool_size=(2, 2))) 56 | model.add(Flatten()) 57 | model.add(Dense(64, activation='relu')) 58 | model.add(Dense(len(le.classes_), activation='softmax')) 59 | 60 | model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) 61 | 62 | # 5. آموزش مدل 63 | model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test)) 64 | 65 | # 6. ارزیابی مدل 66 | loss, accuracy = model.evaluate(X_test, y_test) 67 | print(f"Test accuracy: {accuracy} and Loss: {loss}") -------------------------------------------------------------------------------- /Mr_Salmani.md: -------------------------------------------------------------------------------- 1 | ### **تشریح پروژه و برآورد هزینه و زمان** 2 | 3 | #### **توضیحات پروژه:** 4 | این پروژه یک **پلتفرم مدیریت کسب‌وکار گروهی** است که برای مدیران و کارکنان طراحی شده و شامل امکانات زیر می‌شود: 5 | 6 | 1. **صفحه نمایش لوگو (2-3 ثانیه)** 7 | - نمایش لوگو به مدت ۲ تا ۳ ثانیه قبل از ورود به صفحه ورود. 8 | 9 | 2. **صفحه ورود:** 10 | - امکان انتخاب نقش (مدیر/کارکنان). 11 | - فیلدهای نام کاربری و رمز عبور. 12 | - تبلیغات متغیر و تصاویر پس‌زمینه سنتی/مینیاتوری. 13 | - قابلیت بازیابی رمز عبور. 14 | 15 | 3. **داشبورد اصلی:** 16 | - شامل ۵ گزینه اصلی: **افزودن مشتری، پنل ارسال پیامک، درگاه پرداخت، گزارشات، پشتیبانی (چت باکس)**. 17 | - امکان تغییر تصویر پس‌زمینه توسط کاربر (ثابت پس از تغییر). 18 | 19 | 4. **مدیریت مشتریان:** 20 | - ثبت مشخصات مشتری (نام، شماره تماس، آدرس، کد ملی، تاریخ تولد، نحوه آشنایی و...). 21 | - ارسال **پیامک خوشامدگویی و کارت ویزیت الکترونیکی** پس از ثبت مشتری. 22 | 23 | 5. **پنل پیامک:** 24 | - اتصال به سامانه پیامک انبوه. 25 | - امکان ارسال پیامک خودکار و تنظیم پیام‌های از پیش تعریف‌شده (شامل یادآوری پرداخت، قرار ملاقات و...). 26 | 27 | 6. **سیستم گزارش‌گیری:** 28 | - گزارش عملکرد کارکنان بر اساس فیلترهای مختلف (نام مشتری، تاریخ فعالیت، جنسیت، کد ملی و...). 29 | - امکان **سورت/فیلتر چندلایه** (ترکیب نام مشتری + تاریخ فعالیت). 30 | - نمایش اطلاعات در قالب جدول با امکان تنظیم ستون‌ها توسط مدیر. 31 | - **هشدارهای روزانه** برای پیگیری امور. 32 | 33 | 7. **امکانات جانبی:** 34 | - نمایش رویدادهای مهم و آخرین تغییرات در داشبورد. 35 | - امکان نصب پلتفرم روی **وب‌سایت یا پیج اینستاگرام** برای دریافت درخواست مشاوره از مشتریان. 36 | 37 | --- 38 | 39 | ### **برآورد هزینه (بر اساس قیمت‌های ایران):** 40 | | بخش پروژه | هزینه (تومان) | 41 | |------------------------------------------|---------------------| 42 | | طراحی UI/UX (لوگو، صفحات ورود، داشبورد) | ۲۵ میلیون | 43 | | توسعه فرانت‌اند (رابط کاربری) | ۳۰ میلیون | 44 | | توسعه بک‌اند (سرور، دیتابیس، امنیت) | ۵۰ میلیون | 45 | | یکپارچه‌سازی پیامک و درگاه پرداخت | ۱۵ میلیون | 46 | | تست و راه‌اندازی | ۱۰ میلیون | 47 | | **مجموع** | **۱۳۰ میلیون تومان** | 48 | 49 | #### **نکات مالی:** 50 | - قیمت نهایی بستگی به **پیچیدگی طراحی، تعداد ماژول‌ها و دستمزد برنامه‌نویس** احتمال تغییر دارد. 51 | - هزینه میزبانی (هاستینگ) و دامنه سالانه **حدود ۵ میلیون تومان** اضافه می‌شود. 52 | 53 | --- 54 | 55 | ### **تخمین زمان تحویل (ددلاین):** 56 | - **تحلیل نیازها و طراحی:** ۲ هفته 57 | - **توسعه فرانت‌اند:** ۴ هفته 58 | - **توسعه بک‌اند:** ۶ هفته 59 | - **تست و رفع خطا:** ۲ هفته 60 | - **تحویل نهایی:** **حدود ۳ ماه** 61 | 62 | --- 63 | -------------------------------------------------------------------------------- /Genetic.md: -------------------------------------------------------------------------------- 1 | 2 | --- 3 | 4 | ### 🔹 مرحله ۱: پایه‌های لازم (Fundamentals) 5 | 6 | #### ۱. برنامه‌نویسی 7 | - **پایتون (Python)**: زبان اصلی در بیوانفورماتیک و هوش مصنوعی. 8 | - متغیرها، حلقه‌ها، شرط‌ها 9 | - توابع، کلاس‌ها (شی‌گرایی) 10 | - کار با کتابخانه‌های علمی: `NumPy`, `Pandas`, `Matplotlib`, `Seaborn` 11 | - کار با فایل‌های بیولوژیکی: FASTA, FASTQ, BAM, VCF 12 | - کار با کتابخانه‌های بیوانفورماتیک: `Biopython` 13 | 14 | > 💡 تمرین: تحلیل توالی DNA، شمارش نوکلئوتیدها، تبدیل به RNA/پروتئین، یافتن ژن‌ها 15 | 16 | --- 17 | 18 | #### ۲. ریاضیات و آمار 19 | - **آمار و احتمالات**: توزیع‌ها، آزمون فرض، p-value، FDR، معنی‌داری آماری 20 | - **جبر خطی**: بردارها، ماتریس‌ها، ضرب ماتریسی، ویژه‌مقدارها — مهم برای یادگیری ماشین 21 | - **حسابان (Calculus)**: مشتق، گرادیان — برای درک بهینه‌سازی در مدل‌های AI 22 | 23 | --- 24 | 25 | ### 🔹 مرحله ۲: یادگیری ماشین (Machine Learning) 26 | 27 | #### ۳. مفاهیم پایه یادگیری ماشین 28 | - تفاوت یادگیری نظارت‌شده، نظارت‌نشده، تقویتی 29 | - تقسیم داده: train/test/validation 30 | - Overfitting و Regularization 31 | - ارزیابی مدل: دقت، recall، F1-score، AUC-ROC 32 | 33 | #### ۴. الگوریتم‌های کلیدی 34 | - Regression (Linear, Logistic) 35 | - Decision Trees, Random Forest 36 | - Support Vector Machines (SVM) 37 | - Clustering (K-Means, Hierarchical) 38 | - PCA و تحلیل مؤلفه‌های اصلی (برای کاهش ابعاد داده‌های ژنومی) 39 | - Neural Networks مقدماتی (Perceptron, MLP) 40 | 41 | > 🛠️ ابزار: `scikit-learn` در پایتون 42 | 43 | --- 44 | 45 | ### 🔹 مرحله ۳: هوش مصنوعی پیشرفته (Deep Learning) 46 | 47 | #### ۵. شبکه‌های عصبی عمیق 48 | - Dense layers, activation functions (ReLU, sigmoid) 49 | - Backpropagation و بهینه‌سازی (SGD, Adam) 50 | - Dropout, Batch Normalization 51 | 52 | #### ۶. شبکه‌های خاص برای داده‌های بیولوژیکی 53 | - **CNN (Convolutional Neural Networks)**: برای تشخیص الگوهای محلی در توالی DNA/RNA 54 | - **RNN / LSTM / GRU**: برای داده‌های توالی‌محور (مثل توالی ژنی، RNA-seq) 55 | - **Transformers**: برای مدل‌سازی طولانی‌مدت (مثل در مدل‌های پیش‌بینی اسپلایسینگ) 56 | 57 | > 🛠️ ابزار: `TensorFlow` یا `PyTorch` 58 | 59 | --- 60 | 61 | ### 🔹 مرحله ۴: کاربرد در بیوانفورماتیک و ژنتیک 62 | 63 | #### ۷. تحلیل داده‌های ژنومی با AI 64 | - پیش‌بینی اگزون/اینtron با مدل‌های ML 65 | - تشخیص جهش‌های پاتوژنیک (pathogenic variants) 66 | - پیش‌بینی بیان ژن (Gene Expression) با شبکه‌های عصبی 67 | - eQTL analysis با مدل‌های آماری و ML 68 | 69 | #### ۸. Single-cell RNA-seq analysis 70 | - Clustering سلول‌ها با UMAP/t-SNE 71 | - استفاده از مدل‌های deep learning برای طبقه‌بندی سلول‌ها 72 | - Trajectory inference با مدل‌های پویا 73 | 74 | #### ۹. پیش‌بینی ساختار پروتئین 75 | - معرفی AlphaFold و RoseTTAFold 76 | - کار با مدل‌های pre-trained برای پیش‌بینی ساختار 77 | 78 | #### ۱۰. Genomic Variant Interpretation 79 | - استفاده از مدل‌هایی مثل DeepSEA, Enformer برای پیش‌بینی اثر جهش‌ها روی تنظیم ژن 80 | 81 | --- 82 | -------------------------------------------------------------------------------- /Course/QT/10_stylesheet.md: -------------------------------------------------------------------------------- 1 | ## صفحه ۱۰ – زیباسازی رابط کاربری با StyleSheet 2 | 3 | در PyQt6 شما می‌تونید از **StyleSheet** استفاده کنید. این سیستم تقریباً مثل CSS در طراحی وب عمل می‌کنه و می‌شه باهاش رنگ‌ها، فونت‌ها، اندازه‌ها و ظاهر ویجت‌ها رو تغییر داد. 4 | 5 | --- 6 | 7 | ### مثال ۱: تغییر رنگ دکمه‌ها 8 | 9 | ```python 10 | import sys 11 | from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout 12 | 13 | app = QApplication(sys.argv) 14 | 15 | window = QWidget() 16 | window.setWindowTitle("Styled Buttons") 17 | window.resize(300, 200) 18 | 19 | layout = QVBoxLayout() 20 | 21 | button1 = QPushButton("Green Button") 22 | button2 = QPushButton("Red Button") 23 | 24 | # Apply styles 25 | button1.setStyleSheet("background-color: green; color: white; font-size: 16px; padding: 8px;") 26 | button2.setStyleSheet("background-color: red; color: white; font-weight: bold;") 27 | 28 | layout.addWidget(button1) 29 | layout.addWidget(button2) 30 | 31 | window.setLayout(layout) 32 | window.show() 33 | sys.exit(app.exec()) 34 | ``` 35 | 36 | 📌 نتیجه: یک دکمه سبز و یک دکمه قرمز خواهید داشت، با فونت و استایل متفاوت. 37 | 38 | --- 39 | 40 | ### مثال ۲: تغییر استایل ویجت‌ها 41 | 42 | ```python 43 | import sys 44 | from PyQt6.QtWidgets import QApplication, QWidget, QLineEdit, QVBoxLayout, QLabel 45 | 46 | app = QApplication(sys.argv) 47 | 48 | window = QWidget() 49 | window.setWindowTitle("Styled Widgets") 50 | window.resize(300, 200) 51 | 52 | layout = QVBoxLayout() 53 | 54 | label = QLabel("Username:") 55 | textbox = QLineEdit() 56 | 57 | # Apply styles 58 | label.setStyleSheet("font-size: 14px; color: navy;") 59 | textbox.setStyleSheet(""" 60 | border: 2px solid gray; 61 | border-radius: 5px; 62 | padding: 5px; 63 | font-size: 14px; 64 | """) 65 | 66 | layout.addWidget(label) 67 | layout.addWidget(textbox) 68 | 69 | window.setLayout(layout) 70 | window.show() 71 | sys.exit(app.exec()) 72 | ``` 73 | 74 | 📌 نتیجه: لیبل با رنگ آبی و فونت زیباتر نمایش داده می‌شه و جعبه‌ی متنی هم دارای حاشیه گرد و استایل حرفه‌ای خواهد بود. 75 | 76 | --- 77 | 78 | ### نکته‌های مهم در استفاده از StyleSheet 79 | 80 | ✅ می‌تونید برای هر ویجت جداگانه استایل تعریف کنید. 81 | ✅ می‌تونید کلاس یا نام مشخص برای ویجت بذارید و مثل CSS برای همه یکجا استایل اعمال کنید. 82 | ✅ می‌تونید انیمیشن و جلوه‌های گرافیکی ساده بسازید. 83 | 84 | --- 85 | 86 | ✨ حالا دیگه نه تنها می‌تونید برنامه‌های کاربردی با PyQt6 بسازید، بلکه می‌تونید ظاهرشون رو هم شیک و حرفه‌ای طراحی کنید. 87 | 88 | --- 89 | 90 | 📕🎉 به همین ترتیب کتاب ما به پایان رسید: 91 | 92 | * از آشنایی با PyQt6 شروع کردیم. 93 | * ویجت‌های ساده مثل دکمه‌ها و لیبل‌ها رو شناختیم. 94 | * پروژه‌های واقعی مثل ماشین حساب 🧮 و دفترچه یادداشت 📝 ساختیم. 95 | * ویجت‌های پیشرفته مثل تقویم 📅، اسلایدر 🎚️ و ProgressBar 🔄 رو یاد گرفتیم. 96 | * و در نهایت با StyleSheet یاد گرفتیم ظاهر برنامه‌هامون رو زیباتر کنیم. 🎨 97 | 98 | -------------------------------------------------------------------------------- /Course/QT/07_calculator.md: -------------------------------------------------------------------------------- 1 | ## صفحه ۷ – پروژه ماشین حساب ساده 2 | 3 | ماشین حساب ما شامل دکمه‌های اعداد، چهار عمل اصلی و یک نمایشگر خواهد بود. 4 | 5 | --- 6 | 7 | ### کد پروژه 8 | 9 | ```python 10 | import sys 11 | from PyQt6.QtWidgets import QApplication, QWidget, QGridLayout, QPushButton, QLineEdit 12 | from PyQt6.QtCore import Qt 13 | 14 | class Calculator(QWidget): 15 | def __init__(self): 16 | super().__init__() 17 | 18 | # Set window properties 19 | self.setWindowTitle("Simple Calculator") 20 | self.resize(300, 400) 21 | 22 | # Create display 23 | self.display = QLineEdit() 24 | self.display.setAlignment(Qt.AlignmentFlag.Right) # Align text to right 25 | self.display.setReadOnly(True) # User cannot type directly 26 | 27 | # Create grid layout 28 | grid = QGridLayout() 29 | grid.addWidget(self.display, 0, 0, 1, 4) # Span display across 4 columns 30 | 31 | # Buttons for calculator 32 | buttons = [ 33 | ('7', 1, 0), ('8', 1, 1), ('9', 1, 2), ('/', 1, 3), 34 | ('4', 2, 0), ('5', 2, 1), ('6', 2, 2), ('*', 2, 3), 35 | ('1', 3, 0), ('2', 3, 1), ('3', 3, 2), ('-', 3, 3), 36 | ('0', 4, 0), ('.', 4, 1), ('=', 4, 2), ('+', 4, 3), 37 | ] 38 | 39 | # Add buttons to grid 40 | for text, row, col in buttons: 41 | button = QPushButton(text) 42 | button.clicked.connect(self.on_button_clicked) 43 | grid.addWidget(button, row, col) 44 | 45 | self.setLayout(grid) 46 | 47 | def on_button_clicked(self): 48 | # Get text of clicked button 49 | button = self.sender() 50 | text = button.text() 51 | 52 | if text == "=": 53 | try: 54 | result = str(eval(self.display.text())) 55 | self.display.setText(result) 56 | except Exception: 57 | self.display.setText("Error") 58 | else: 59 | self.display.setText(self.display.text() + text) 60 | 61 | app = QApplication(sys.argv) 62 | window = Calculator() 63 | window.show() 64 | sys.exit(app.exec()) 65 | ``` 66 | 67 | --- 68 | 69 | ### توضیح کد 70 | 71 | * از **QGridLayout** استفاده کردیم تا دکمه‌ها مانند صفحه‌کلید ماشین حساب مرتب شوند. 72 | * نمایشگر برنامه با **QLineEdit** ساخته شده که فقط خروجی نشان می‌دهد. 73 | * وقتی روی دکمه‌ای کلیک می‌کنیم، متن آن به محتوای نمایشگر اضافه می‌شود. 74 | * وقتی روی دکمه "=" می‌زنیم، رشته‌ی موجود با دستور `eval` محاسبه و نتیجه نمایش داده می‌شود. 75 | * اگر خطایی رخ دهد (مثلاً کاربر تقسیم بر صفر بزند)، خروجی "Error" نمایش داده می‌شود. 76 | 77 | --- 78 | 79 | 📌 نتیجه: 80 | برنامه‌ی شما حالا یک ماشین حساب ساده دارد که چهار عمل اصلی (+, -, \*, /) را انجام می‌دهد. 🧮 81 | 82 | --- 83 | 84 | ✅ در **صفحه ۸** یک پروژه‌ی دیگر خواهیم ساخت: **دفترچه یادداشت ساده (Text Editor)** با قابلیت نوشتن متن، ذخیره‌سازی و باز کردن فایل. 📝 85 | 86 | -------------------------------------------------------------------------------- /Course/QT/06_file_dialog.md: -------------------------------------------------------------------------------- 1 | ## صفحه ۶ – باز کردن و ذخیره‌سازی فایل در PyQt6 2 | 3 | یکی از قابلیت‌های اساسی نرم‌افزارها این است که بتوانیم فایل باز کنیم یا اطلاعات را در فایلی ذخیره کنیم. در PyQt6 این کار به‌سادگی با ویجت **QFileDialog** انجام می‌شود. 4 | 5 | --- 6 | 7 | ### مثال: برنامه‌ی ساده برای باز و ذخیره فایل 8 | 9 | ```python 10 | import sys 11 | from PyQt6.QtWidgets import QApplication, QMainWindow, QTextEdit, QAction, QFileDialog 12 | 13 | class MainWindow(QMainWindow): 14 | def __init__(self): 15 | super().__init__() 16 | 17 | # Set window properties 18 | self.setWindowTitle("Open and Save File Example") 19 | self.resize(500, 400) 20 | 21 | # Create text editor as central widget 22 | self.editor = QTextEdit() 23 | self.setCentralWidget(self.editor) 24 | 25 | # Create menu bar 26 | menu_bar = self.menuBar() 27 | file_menu = menu_bar.addMenu("File") 28 | 29 | # Create actions 30 | open_action = QAction("Open", self) 31 | save_action = QAction("Save", self) 32 | exit_action = QAction("Exit", self) 33 | 34 | # Add actions to File menu 35 | file_menu.addAction(open_action) 36 | file_menu.addAction(save_action) 37 | file_menu.addSeparator() 38 | file_menu.addAction(exit_action) 39 | 40 | # Connect actions 41 | open_action.triggered.connect(self.open_file) 42 | save_action.triggered.connect(self.save_file) 43 | exit_action.triggered.connect(self.close) 44 | 45 | def open_file(self): 46 | # Show open file dialog 47 | file_path, _ = QFileDialog.getOpenFileName(self, "Open File", "", "Text Files (*.txt)") 48 | if file_path: 49 | with open(file_path, "r", encoding="utf-8") as f: 50 | self.editor.setText(f.read()) 51 | 52 | def save_file(self): 53 | # Show save file dialog 54 | file_path, _ = QFileDialog.getSaveFileName(self, "Save File", "", "Text Files (*.txt)") 55 | if file_path: 56 | with open(file_path, "w", encoding="utf-8") as f: 57 | f.write(self.editor.toPlainText()) 58 | 59 | app = QApplication(sys.argv) 60 | window = MainWindow() 61 | window.show() 62 | sys.exit(app.exec()) 63 | ``` 64 | 65 | --- 66 | 67 | ### توضیح کد 68 | 69 | * متد `getOpenFileName` یک پنجره‌ی انتخاب فایل باز می‌کند و مسیر فایل انتخابی را برمی‌گرداند. 70 | * متد `getSaveFileName` مسیر ذخیره فایل را از کاربر می‌گیرد. 71 | * از `QTextEdit` به‌عنوان ویرایشگر متنی استفاده کردیم و متن باز شده را در آن قرار دادیم. 72 | * هنگام ذخیره‌سازی، محتوای داخل `QTextEdit` در فایل نوشته می‌شود. 73 | 74 | --- 75 | 76 | 📌 نتیجه: 77 | حالا یک برنامه‌ی کوچک دارید که می‌تواند فایل متنی را باز کند یا آن را ذخیره کند. درست مثل یک **دفترچه یادداشت ساده**. 📝 78 | 79 | --- 80 | 81 | ✅ در **صفحه ۷** اولین پروژه‌ی کوچک و کامل خودمان را می‌سازیم: **ماشین حساب ساده** با عملیات جمع، تفریق، ضرب و تقسیم. ➕➖✖️➗ 82 | 83 | -------------------------------------------------------------------------------- /Dr-rabiee/CTMC.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | فرض کنید یک مرکز تلفن با **۲ خط (m = 2)** داریم. نرخ ورود تماس‌ها: 4 | 5 | * $\lambda = 5$ تماس در دقیقه 6 | و نرخ سرویس: 7 | * $\mu = 3$ تماس در دقیقه برای هر خط مشغول. 8 | 9 | ### خواسته‌ها: 10 | 11 | **الف)** فضای حالت سیستم را بنویسید. 12 | **ب)** معادلات توازن سراسری (GBE) را بنویسید. 13 | **ج)** احتمال اشغال کامل خطوط (یعنی $P_{\text{block}} = \pi_2$) را حساب کنید. 14 | 15 | --- 16 | 17 | ## ✅ پاسخ: 18 | 19 | ### 🔹 الف) فضای حالت 20 | 21 | تعداد خطوط اشغال‌شده ممکن است بین 0 تا 2 باشد. پس: 22 | 23 | $$ 24 | S = \{0, 1, 2\} 25 | $$ 26 | 27 | --- 28 | 29 | ### 🔹 ب) معادلات توازن سراسری (GBE) 30 | 31 | در حالت پایدار، جریان ورودی به هر حالت برابر است با جریان خروجی از آن. 32 | 33 | --- 34 | 35 | #### 🔸 حالت 0: 36 | 37 | ورودی: از حالت 1 با نرخ $\mu = 3$ 38 | خروجی: به حالت 1 با نرخ $\lambda = 5$ 39 | 40 | $$ 41 | \pi_1 \cdot \mu = \pi_0 \cdot \lambda 42 | \Rightarrow 3\pi_1 = 5\pi_0 \tag{1} 43 | $$ 44 | 45 | --- 46 | 47 | #### 🔸 حالت 1: 48 | 49 | ورودی: از حالت 0 با نرخ $\lambda = 5$، از حالت 2 با نرخ $2\mu = 6$ 50 | خروجی: به حالت 0 با نرخ 3، به حالت 2 با نرخ 5 51 | 52 | $$ 53 | \pi_0 \cdot \lambda + \pi_2 \cdot 2\mu = \pi_1 \cdot (\lambda + \mu) 54 | \Rightarrow 5\pi_0 + 6\pi_2 = 8\pi_1 \tag{2} 55 | $$ 56 | 57 | --- 58 | 59 | #### 🔸 حالت 2: 60 | 61 | ورودی: از حالت 1 با نرخ $\lambda = 5$ 62 | خروجی: به حالت 1 با نرخ $2\mu = 6$ 63 | 64 | $$ 65 | \pi_1 \cdot \lambda = \pi_2 \cdot 2\mu 66 | \Rightarrow 5\pi_1 = 6\pi_2 \tag{3} 67 | $$ 68 | 69 | --- 70 | 71 | #### 🔸 شرط نرمال‌سازی: 72 | 73 | $$ 74 | \pi_0 + \pi_1 + \pi_2 = 1 \tag{4} 75 | $$ 76 | 77 | --- 78 | 79 | ### 🔹 ج) حل معادلات برای پیدا کردن $\pi_2$ 80 | 81 | از (1): 82 | 83 | $$ 84 | \pi_1 = \frac{5}{3} \pi_0 85 | $$ 86 | 87 | از (3): 88 | 89 | $$ 90 | \pi_2 = \frac{5}{6} \pi_1 = \frac{5}{6} \cdot \frac{5}{3} \pi_0 = \frac{25}{18} \pi_0 91 | $$ 92 | 93 | حالا در (4) جایگذاری کنیم: 94 | 95 | $$ 96 | \pi_0 + \pi_1 + \pi_2 = 1 97 | \Rightarrow \pi_0 + \frac{5}{3}\pi_0 + \frac{25}{18}\pi_0 = 1 98 | $$ 99 | 100 | هم‌مخرج: 101 | 102 | $$ 103 | \pi_0 \left(1 + \frac{5}{3} + \frac{25}{18}\right) = 1 104 | \Rightarrow \pi_0 \cdot \frac{18 + 30 + 25}{18} = 1 105 | \Rightarrow \pi_0 \cdot \frac{73}{18} = 1 106 | \Rightarrow \pi_0 = \frac{18}{73} 107 | $$ 108 | 109 | --- 110 | 111 | حالا: 112 | 113 | $$ 114 | \pi_1 = \frac{5}{3} \cdot \frac{18}{73} = \frac{30}{73}, \quad 115 | \pi_2 = \frac{25}{18} \cdot \frac{18}{73} = \frac{25}{73} 116 | $$ 117 | 118 | --- 119 | 120 | ### 🎯 نتیجه نهایی: 121 | 122 | * $\pi_0 = \frac{18}{73} \approx 0.2466$ 123 | * $\pi_1 = \frac{30}{73} \approx 0.4110$ 124 | * $\pi_2 = \frac{25}{73} \approx 0.3425$ 125 | 126 | --- 127 | 128 | ### ✅ پاسخ بخش (ج): 129 | 130 | احتمال انسداد تماس جدید = **احتمال اشغال کامل خطوط** = 131 | 132 | $$ 133 | \boxed{P_{\text{block}} = \pi_2 = \frac{25}{73} \approx 34.25\%} 134 | $$ 135 | 136 | --- 137 | -------------------------------------------------------------------------------- /agi/finetune.py: -------------------------------------------------------------------------------- 1 | !pip install transformers datasets evaluate soundfile librosa accelerate>=0.21.0 2 | from datasets import load_dataset, Audio 3 | 4 | minds = load_dataset("PolyAI/minds14", name="en-US", split="train") 5 | minds = minds.train_test_split(test_size=0.2) 6 | minds = minds.remove_columns(["path", "transcription", "english_transcription", "lang_id"]) 7 | minds["train"][0] 8 | labels = minds["train"].features["intent_class"].names 9 | label2id, id2label = dict(), dict() 10 | for i, label in enumerate(labels): 11 | label2id[label] = str(i) 12 | id2label[str(i)] = label 13 | id2label[str(2)] 14 | from transformers import AutoFeatureExtractor 15 | 16 | feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-base") 17 | minds = minds.cast_column("audio", Audio(sampling_rate=16_000)) 18 | minds["train"][0] 19 | def preprocess_function(examples): 20 | audio_arrays = [x["array"] for x in examples["audio"]] 21 | inputs = feature_extractor( 22 | audio_arrays, sampling_rate=feature_extractor.sampling_rate, max_length=16000, truncation=True 23 | ) 24 | return inputs 25 | encoded_minds = minds.map(preprocess_function, remove_columns="audio", batched=True) 26 | encoded_minds = encoded_minds.rename_column("intent_class", "label") 27 | import evaluate 28 | 29 | accuracy = evaluate.load("accuracy") 30 | import numpy as np 31 | 32 | 33 | def compute_metrics(eval_pred): 34 | predictions = np.argmax(eval_pred.predictions, axis=1) 35 | return accuracy.compute(predictions=predictions, references=eval_pred.label_ids) 36 | from transformers import AutoModelForAudioClassification, TrainingArguments, Trainer 37 | 38 | num_labels = len(id2label) 39 | model = AutoModelForAudioClassification.from_pretrained( 40 | "facebook/wav2vec2-base", num_labels=num_labels, label2id=label2id, id2label=id2label 41 | ) 42 | training_args = TrainingArguments( 43 | output_dir="my_awesome_mind_model", 44 | evaluation_strategy="epoch", 45 | save_strategy="epoch", 46 | learning_rate=3e-5, 47 | per_device_train_batch_size=32, 48 | gradient_accumulation_steps=4, 49 | per_device_eval_batch_size=32, 50 | num_train_epochs=2, 51 | warmup_ratio=0.1, 52 | logging_steps=10, 53 | load_best_model_at_end=True, 54 | metric_for_best_model="accuracy", 55 | #push_to_hub=True, 56 | ) 57 | 58 | trainer = Trainer( 59 | model=model, 60 | args=training_args, 61 | train_dataset=encoded_minds["train"], 62 | eval_dataset=encoded_minds["test"], 63 | tokenizer=feature_extractor, 64 | compute_metrics=compute_metrics, 65 | ) 66 | 67 | model = trainer.train() 68 | from datasets import load_dataset, Audio 69 | 70 | dataset = load_dataset("PolyAI/minds14", name="en-US", split="train") 71 | dataset = dataset.cast_column("audio", Audio(sampling_rate=16000)) 72 | sampling_rate = dataset.features["audio"].sampling_rate 73 | audio_file = dataset[0]["audio"]["path"] 74 | from transformers import pipeline 75 | 76 | classifier = pipeline("audio-classification", model="./my_awesome_mind_model/checkpoint-6/") 77 | classifier(audio_file) -------------------------------------------------------------------------------- /Course/QT/05_menus_toolbar.md: -------------------------------------------------------------------------------- 1 | ## صفحه ۵ – منوها و نوار ابزار در PyQt6 2 | 3 | بیشتر نرم‌افزارهایی که استفاده می‌کنیم (مثل ورد، مرورگر یا حتی نوت‌پد) دارای **منو** هستند؛ جایی که گزینه‌هایی مثل *File → Open → Save* یا *Help → About* قرار دارند. در PyQt6 ساخت منوها بسیار ساده است و با چند خط کد انجام می‌شود. 4 | 5 | --- 6 | 7 | ### ساختار اصلی منو 8 | 9 | برای استفاده از منو و نوار ابزار باید به‌جای QWidget از **QMainWindow** استفاده کنیم، چون این کلاس امکاناتی مثل منوبار و استاتوس‌بار را به ما می‌دهد. 10 | 11 | --- 12 | 13 | ### مثال: ساخت یک منوی ساده 14 | 15 | ```python 16 | import sys 17 | from PyQt6.QtWidgets import QApplication, QMainWindow, QTextEdit, QAction 18 | 19 | class MainWindow(QMainWindow): 20 | def __init__(self): 21 | super().__init__() 22 | 23 | # Set window properties 24 | self.setWindowTitle("Menu Example") 25 | self.resize(500, 400) 26 | 27 | # Create a text editor as central widget 28 | self.editor = QTextEdit() 29 | self.setCentralWidget(self.editor) 30 | 31 | # Create menu bar 32 | menu_bar = self.menuBar() 33 | 34 | # Create File menu 35 | file_menu = menu_bar.addMenu("File") 36 | 37 | # Create actions 38 | new_action = QAction("New", self) 39 | open_action = QAction("Open", self) 40 | save_action = QAction("Save", self) 41 | exit_action = QAction("Exit", self) 42 | 43 | # Add actions to File menu 44 | file_menu.addAction(new_action) 45 | file_menu.addAction(open_action) 46 | file_menu.addAction(save_action) 47 | file_menu.addSeparator() # Add a separator line 48 | file_menu.addAction(exit_action) 49 | 50 | # Connect exit action 51 | exit_action.triggered.connect(self.close) 52 | 53 | app = QApplication(sys.argv) 54 | window = MainWindow() 55 | window.show() 56 | sys.exit(app.exec()) 57 | ``` 58 | 59 | --- 60 | 61 | ### توضیح کد 62 | 63 | * به‌جای QWidget از QMainWindow استفاده کردیم. 64 | * با `menuBar()` یک نوار منو ساختیم. 65 | * با `addMenu("File")` منوی File را ایجاد کردیم. 66 | * هر گزینه داخل منو یک **Action** است که با QAction ساخته می‌شود. 67 | * با `addSeparator()` خط جداکننده ایجاد کردیم. 68 | * در نهایت، گزینه‌ی Exit را به تابع `close` وصل کردیم تا با انتخاب آن، برنامه بسته شود. 69 | 70 | --- 71 | 72 | ### افزودن نوار ابزار (ToolBar) 73 | 74 | می‌توانیم همان Actionها را در یک **نوار ابزار** هم قرار دهیم: 75 | 76 | ```python 77 | # Create a toolbar and add actions 78 | tool_bar = self.addToolBar("Main Toolbar") 79 | tool_bar.addAction(new_action) 80 | tool_bar.addAction(open_action) 81 | tool_bar.addAction(save_action) 82 | ``` 83 | 84 | با این کار، یک نوار ابزار زیر منو ظاهر می‌شود و گزینه‌ها به‌صورت دکمه نمایش داده خواهند شد. 🛠️ 85 | 86 | --- 87 | 88 | 📌 نتیجه: 89 | برنامه‌ی شما حالا منوی File دارد که شامل گزینه‌های New، Open، Save و Exit است. همچنین می‌توانید با اضافه کردن ToolBar نرم‌افزارتان را حرفه‌ای‌تر کنید. ✨ 90 | 91 | --- 92 | 93 | ✅ در **صفحه ۶** می‌خواهیم سراغ یکی از پرکاربردترین بخش‌ها برویم: **باز کردن و ذخیره‌سازی فایل با QFileDialog**. 📂 94 | 95 | --- 96 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | # class Node: 2 | # def __init__(self, value=0, next=None): 3 | # self.value = value 4 | # self.next = next 5 | 6 | 7 | # class LinkedList: 8 | # def __init__(self, head=None): 9 | # self.head = head 10 | 11 | # def to_string(self): 12 | # node = self.head 13 | # while node is not None: 14 | # print(node.value, end = " -> ") 15 | # if type(node.value) == str: 16 | # raise TypeError("invalid type of value ...") 17 | # node = node.next 18 | # if node is None: 19 | # print("null ..") 20 | 21 | # node1 = Node(value=1) 22 | # node2 = Node(value=2) 23 | # node3 = Node(value=3) 24 | 25 | # node1.next = node2 26 | # node2.next = node3 27 | # ll = LinkedList(head=node1) 28 | # ll.to_string() 29 | 30 | # # class Node: 31 | # # def __init__(self, data): 32 | # # self.data = data #data node 33 | # # self.next = None #pointer to next node 34 | 35 | 36 | # # class LinkedList: 37 | # # def __init__(self): 38 | # # self.head = None #head of list 39 | 40 | # # def append(self, data): 41 | # # new_node = Node(data) #create new node 42 | # # if self.head is None: 43 | # # self.head=new_node 44 | # # else: 45 | 46 | # # current = self.head 47 | # # while current.next: 48 | # # current = current.next 49 | # # current.next = new_node 50 | 51 | # # def print_list(self): 52 | # # current =self.head 53 | # # while current: 54 | # # print(current.data, end = " -> ") 55 | # # current= current.next 56 | # # print("None") 57 | 58 | # # ll = LinkedList() 59 | # # ll.append(10) 60 | # # ll.append(20) 61 | # # ll.append(30) 62 | # # ll.print_list() 63 | 64 | # class Queue: 65 | # def __init__(self): 66 | # self.items = [] 67 | 68 | # def enqueue(self, item): 69 | # self.items.append(item) 70 | 71 | # def dequeue(self): 72 | # if not self.is_empty(): 73 | # return self.items.pop(0) 74 | # return None 75 | # def front(self): 76 | # if not self.is_empty(): 77 | # return self.items[0] 78 | 79 | # def is_empty(self): 80 | # return len(self.items) == 0 81 | 82 | # q = Queue() 83 | # q.enqueue(1) 84 | # q.enqueue(2) 85 | # q.enqueue(3) 86 | # print(q.dequeue()) 87 | # print(q.dequeue()) 88 | # print(q.dequeue()) 89 | # print(q.front()) 90 | # print(q.is_empty()) 91 | 92 | 93 | # x = "hello, how" 94 | 95 | # p= x.split(",") 96 | # print(len(p)) 97 | 98 | def quick_sort(arr): 99 | if len(arr) <= 1: 100 | return arr 101 | pivot = arr[len(arr) // 2] 102 | left = [i for i in arr if i < pivot] #logn 103 | mid = [i for i in arr if i == pivot] #n 104 | right = [i for i in arr if i > pivot] #logn 105 | return quick_sort(left) + mid + quick_sort(right) 106 | print(quick_sort([34,7,23,32,5,62])) 107 | -------------------------------------------------------------------------------- /Course/QT/08_text_editor.md: -------------------------------------------------------------------------------- 1 | ## صفحه ۸ – پروژه دفترچه یادداشت ساده (Text Editor) 📝 2 | 3 | در این پروژه از ویجت **QTextEdit** برای نوشتن متن استفاده می‌کنیم و با کمک **QFileDialog** امکان باز و ذخیره فایل را فراهم می‌کنیم. همچنین یک منوی ساده برای مدیریت عملیات ایجاد می‌کنیم. 4 | 5 | --- 6 | 7 | ### کد پروژه 8 | 9 | ```python 10 | import sys 11 | from PyQt6.QtWidgets import QApplication, QMainWindow, QTextEdit, QAction, QFileDialog 12 | 13 | class TextEditor(QMainWindow): 14 | def __init__(self): 15 | super().__init__() 16 | 17 | # Set window properties 18 | self.setWindowTitle("Simple Text Editor") 19 | self.resize(600, 400) 20 | 21 | # Create text editor 22 | self.editor = QTextEdit() 23 | self.setCentralWidget(self.editor) 24 | 25 | # Create menu bar 26 | menu_bar = self.menuBar() 27 | file_menu = menu_bar.addMenu("File") 28 | 29 | # Create actions 30 | open_action = QAction("Open", self) 31 | save_action = QAction("Save", self) 32 | clear_action = QAction("Clear", self) 33 | exit_action = QAction("Exit", self) 34 | 35 | # Add actions to menu 36 | file_menu.addAction(open_action) 37 | file_menu.addAction(save_action) 38 | file_menu.addAction(clear_action) 39 | file_menu.addSeparator() 40 | file_menu.addAction(exit_action) 41 | 42 | # Connect actions 43 | open_action.triggered.connect(self.open_file) 44 | save_action.triggered.connect(self.save_file) 45 | clear_action.triggered.connect(self.clear_text) 46 | exit_action.triggered.connect(self.close) 47 | 48 | def open_file(self): 49 | # Open file dialog 50 | file_path, _ = QFileDialog.getOpenFileName(self, "Open File", "", "Text Files (*.txt)") 51 | if file_path: 52 | with open(file_path, "r", encoding="utf-8") as f: 53 | self.editor.setText(f.read()) 54 | 55 | def save_file(self): 56 | # Save file dialog 57 | file_path, _ = QFileDialog.getSaveFileName(self, "Save File", "", "Text Files (*.txt)") 58 | if file_path: 59 | with open(file_path, "w", encoding="utf-8") as f: 60 | f.write(self.editor.toPlainText()) 61 | 62 | def clear_text(self): 63 | # Clear editor content 64 | self.editor.clear() 65 | 66 | app = QApplication(sys.argv) 67 | window = TextEditor() 68 | window.show() 69 | sys.exit(app.exec()) 70 | ``` 71 | 72 | --- 73 | 74 | ### توضیح کد 75 | 76 | * `QTextEdit` یک ویجت چند خطی برای نوشتن و ویرایش متن است. 77 | * از **منوی File** برای مدیریت عملیات استفاده کردیم: باز کردن، ذخیره کردن، پاک کردن متن و خروج. 78 | * اکشن "Clear" محتوای ادیتور را خالی می‌کند. 79 | * فایل‌های متنی با انکدینگ UTF-8 باز و ذخیره می‌شوند. 80 | 81 | --- 82 | 83 | 📌 نتیجه: 84 | حالا یک دفترچه یادداشت ساده دارید که می‌تواند متن را ویرایش کند، در فایل ذخیره کند و دوباره باز کند. درست مثل یک **نوت‌پد کوچک**. ✨ 85 | 86 | --- 87 | 88 | ✅ در **صفحه ۹** به سراغ ویجت‌های پیشرفته‌تر می‌رویم مثل **تقویم (QCalendarWidget) 📅، اسلایدر (QSlider) 🎚️ و ProgressBar 🔄** که در خیلی از نرم‌افزارهای حرفه‌ای کاربرد دارند. 89 | 90 | -------------------------------------------------------------------------------- /سطح-پیشرفته-پایتون.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## 🧠 **سرفصل کامل پایتون – سطح پیشرفته (ترم سوم)** 4 | 5 | **هدف کلی:** توانمندسازی هنرجو برای توسعه نرم‌افزارهای حرفه‌ای، تسلط بر مفاهیم پیشرفته برنامه‌نویسی، بهینه‌سازی، طراحی ساختارهای نرم‌افزاری و آماده‌سازی برای پروژه‌های واقعی. 6 | 7 | --- 8 | 9 | ### **۱. مروری عمیق بر برنامه‌نویسی شی‌گرا** 10 | 11 | * بازبینی مفاهیم کلاس و وراثت 12 | * چندریختی (Polymorphism) و وراثت چندگانه 13 | * ترکیب (Composition) در مقابل وراثت 14 | * پیاده‌سازی الگوهای طراحی (Design Patterns) ساده مانند Singleton و Factory 15 | 16 | --- 17 | 18 | ### **۲. متدهای جادویی پیشرفته (Advanced Magic Methods)** 19 | 20 | * متدهای `__getitem__`, `__setitem__`, `__iter__`, `__next__`, `__contains__` 21 | * پیاده‌سازی iterator و generator سفارشی 22 | * استفاده از متدهای `__call__`, `__enter__`, `__exit__` برای ساخت context manager 23 | * بارگذاری عملگرها (operator overloading) با متدهایی مانند `__add__`, `__eq__`, `__lt__` 24 | 25 | --- 26 | 27 | ### **۳. برنامه‌نویسی تابع‌گرا پیشرفته** 28 | 29 | * closures و decorators 30 | * توابع بازگشتی بهینه (مانند tail recursion) 31 | * توابع تو در تو و مدیریت بازگشت مقدار 32 | * استفاده از کتابخانه‌های استاندارد `functools`, `itertools`, `operator` 33 | 34 | --- 35 | 36 | ### **۴. مدیریت حافظه و بهینه‌سازی عملکرد** 37 | 38 | * بررسی مدیریت حافظه با ماژول‌های `sys` و `gc` 39 | * تفاوت نوع‌های mutable و immutable 40 | * مدیریت منابع با context manager 41 | * بررسی و بهینه‌سازی کارایی کد با `timeit` و `cProfile` 42 | 43 | --- 44 | 45 | ### **۵. تست و دیباگ حرفه‌ای** 46 | 47 | * تست واحد (Unit Testing) با ابزارهای `unittest` و `pytest` 48 | * نوشتن تست‌های خودکار و استفاده از `assert` 49 | * مدیریت خطا و استثناها در تست‌ها 50 | * لاگ‌گیری و تحلیل رفتار برنامه با ماژول `logging` 51 | 52 | --- 53 | 54 | ### **۶. کار با پایگاه داده‌ها** 55 | 56 | * ارتباط با پایگاه داده‌های SQLite و PostgreSQL با ماژول‌های `sqlite3` و `psycopg2` 57 | * نوشتن و بهینه‌سازی کوئری‌ها 58 | * آشنایی مقدماتی با ORM و استفاده از `SQLAlchemy` 59 | * معرفی اولیه به پایگاه داده NoSQL و کار با `pymongo` (MongoDB) 60 | 61 | --- 62 | 63 | ### **۷. شبکه و ارتباطات** 64 | 65 | * ساخت کلاینت و سرور ساده با ماژول `socket` 66 | * آشنایی با پروتکل‌های TCP و UDP 67 | * مدیریت ارسال و دریافت داده‌ها 68 | * آشنایی با ارسال درخواست‌های HTTP با `requests` (بدون تمرکز بر APIهای پیشرفته) 69 | 70 | --- 71 | 72 | ### **۸. کار با فایل‌های پیشرفته** 73 | 74 | * کار با فایل‌های باینری 75 | * فشرده‌سازی و بازکردن فایل‌ها با ماژول‌های `zipfile` و `gzip` 76 | * خواندن و نوشتن فایل‌های Excel با `openpyxl` یا `pandas` (در حد خواندن و نوشتن فایل‌ها، بدون تحلیل داده) 77 | 78 | --- 79 | 80 | ### **۹. پردازش داده‌ها و مصورسازی ساده** 81 | 82 | * آشنایی کلی با `pandas` و `numpy` (فقط برای کار با داده‌ها، بدون ورود به یادگیری ماشین) 83 | * مصورسازی داده‌ها با `matplotlib` 84 | * تحلیل آماری ساده و استخراج گزارش از داده‌ها 85 | 86 | --- 87 | 88 | ### **۱۰. پروژه پایانی سطح پیشرفته** 89 | 90 | **پروژه‌های پیشنهادی:** 91 | 92 | * سامانه مدیریت کتابخانه با پایگاه داده و رابط متنی 93 | * خزنده وب (Web Crawler) ساده برای استخراج و ذخیره داده‌ها 94 | * ساخت Task Scheduler برای زمان‌بندی وظایف با قابلیت لاگ‌گیری 95 | * پیاده‌سازی یک REST API ساده با فریم‌ورک‌های وب مانند Flask یا FastAPI (بدون کاربرد ماشین لرنینگ) 96 | 97 | --- 98 | 99 | -------------------------------------------------------------------------------- /gold.md: -------------------------------------------------------------------------------- 1 | 2 | # امکانات وب‌اپلیکیشن ✨ 3 | 4 | ## 1. اپلیکیشن موبایل 📱 5 | - **طراحی اپلیکیشن موبایل**: ارائه اپلیکیشن برای کاربران اندروید و iOS جهت دسترسی آسان‌تر. 6 | - **ناوبری آسان**: طراحی رابط کاربری ساده و کاربرپسند برای سهولت استفاده. 7 | 8 | ## 2. امکانات اصلی وب‌اپلیکیشن 🏛️ 9 | - **ثبت‌نام و احراز هویت آنلاین**: کاربران می‌توانند به سادگی ثبت‌نام کرده و هویت خود را تأیید کنند. 10 | - **خرید و فروش طلای آب‌شده**: امکان خرید و فروش طلای آب‌شده به صورت آنلاین با رابط کاربری آسان. 11 | - **سرمایه‌گذاری با مبالغ کم**: امکان سرمایه‌گذاری در طلا با مبالغ پایین برای جذب کاربران بیشتر. 12 | - **کارمزد پایین و شفافیت معاملات**: ارائه اطلاعات شفاف درباره کارمزدها به کاربران. 13 | - **نقدشوندگی بالا**: تضمین نقدشوندگی بالا برای راحتی کاربران در خرید و فروش. 14 | - **آموزش و راهنما**: ارائه مطالب آموزشی و ویدیوئی برای آشنایی بیشتر کاربران با امکانات وب‌اپلیکیشن. 15 | - **اعلان‌ها و پاپ آپ**: اطلاع‌رسانی به کاربران از طریق اعلان‌ها و پاپ آپ‌های مناسب. 16 | - **امتیازدهی و نظرسنجی**: امکان امتیازدهی و نظرسنجی از کاربران برای بهبود خدمات. 17 | - **سوالات متداول**: ارائه بخش سوالات متداول برای پاسخ به سوالات رایج کاربران. 18 | - **صفحه تماس با ما**: امکان ارتباط کاربران با تیم پشتیبانی از طریق فرم تماس یا اطلاعات تماس. 19 | - **پشتیبانی آنلاین**: وجود راهنما و چت آنلاین برای کمک به کاربران. 20 | - **صفحه درباره ما**: ارائه اطلاعات درباره تاریخچه و اهداف برای افزایش اعتماد کاربران. 21 | - **صفحه مجوزها**: ارائه اطلاعات درباره مجوزهای اخذ شده و مجوزهای قانونی برای افزایش اعتبار وب‌اپلیکیشن. 22 | 23 | ## 3. گزارش‌گیری و داشبورد 📊 24 | - **نمایش موجودی طلا و کیف پول**: داشبورد کاربر باید موجودی طلا و وضعیت کیف پول را به‌صورت واضح نشان دهد. 25 | - **گزارش تراکنش‌ها**: امکان مشاهده تاریخچه تمامی تراکنش‌ها به صورت تفصیلی. 26 | - **نمودار تغییرات قیمت طلا**: نمایش نمودارهای زنده از تغییرات قیمت طلا برای تحلیل بهتر. 27 | - **محاسبه خودکار**: محاسبه خودکار موجودی و سود و زیان کاربران به‌صورت لحظه‌ای. 28 | - **صفحه واریز پول**: ارائه صفحه‌ای برای واریز پول به حساب کاربری با روش‌های مختلف پرداخت. 29 | - **صفحه برداشت پول**: امکان برداشت پول از حساب کاربری به روش‌های مختلف و ارائه اطلاعات لازم برای این فرآیند. 30 | - **صفحه دریافت طلا با طرح‌های مختلف**: ارائه صفحه‌ای مشابه فروشگاه که در آن کاربران می‌توانند طرح‌های مختلف طلا را مشاهده و خریداری کنند. این صفحه باید شامل توضیحات، قیمت، و تصاویری از هر طرح باشد و امکان افزودن به سبد خرید و نهایی کردن خرید نیز فراهم شود. 31 | - **ارسال تیکت**: ارسال تیکت برای کمک به کاربران. 32 | 33 | ## 4. حساب کاربری 🔑 34 | - **حساب کاربری شخصی**: هر کاربر باید بتواند یک حساب کاربری شخصی داشته باشد تا بتواند اطلاعات خود را ویرایش کند. 35 | - **امکان اضافه کردن کارت بانکی**: کاربران باید بتوانند کارت بانکی خود را به حساب کاربری اضافه کنند. 36 | - **خروج امن از حساب**: امکان خروج امن از حساب کاربری با یک کلیک. 37 | 38 | ## 5. امنیت و مجوزها 🔒 39 | - **گرفتن مجوزها**: اخذ مجوزهای لازم مانند اینماد برای تأمین اعتبار و اعتماد بیشتر به وب‌اپلیکیشن. 40 | - **لینک شبکه‌های اجتماعی**: امکان ارتباط با شبکه‌های اجتماعی برای افزایش تعامل. 41 | - **روش‌های امنیتی**: استفاده از پروتکل‌های امنیتی پیشرفته برای حفاظت از اطلاعات کاربران. 42 | 43 | ## 6. امکانات اضافی 🌟 44 | - **سئو سازی و تولید محتوا**: بهینه‌سازی محتوا برای موتورهای جستجو به منظور جذب کاربران جدید. 45 | - **انتقال و دریافت طلا**: قابلیت انتقال طلا به دیگر کاربران یا دریافت طلا از آن‌ها. 46 | - **نظرسنجی از کاربران**: امکان نظرسنجی برای جمع‌آوری بازخورد و بهبود خدمات. 47 | 48 | -------------------------------------------------------------------------------- /ChatBot/ecommerce: -------------------------------------------------------------------------------- 1 | import json 2 | import random 3 | import nltk 4 | from nltk.stem import WordNetLemmatizer 5 | import numpy as np 6 | import tensorflow as tf 7 | from tensorflow import keras 8 | from tensorflow.keras import layers 9 | 10 | # Download necessary NLTK resources 11 | nltk.download('punkt') 12 | nltk.download('wordnet') 13 | 14 | # Load the intents data from the JSON file 15 | with open('data.json') as file: 16 | data = json.load(file) 17 | 18 | # Initialize the lemmatizer 19 | lemmatizer = WordNetLemmatizer() 20 | documents = [] 21 | classes = [] 22 | words = [] 23 | 24 | # Process the intents data 25 | for intent in data['intents']: 26 | for pattern in intent['patterns']: 27 | # Tokenize each word in the pattern 28 | word_list = nltk.word_tokenize(pattern) 29 | words.extend(word_list) 30 | documents.append((word_list, intent['tag'])) 31 | if intent['tag'] not in classes: 32 | classes.append(intent['tag']) 33 | 34 | # Lemmatize and lower the words, and remove duplicates 35 | words = [lemmatizer.lemmatize(w.lower()) for w in words] 36 | words = sorted(set(words)) 37 | classes = sorted(set(classes)) 38 | 39 | # Prepare training data 40 | training = [] 41 | output_empty = [0] * len(classes) 42 | 43 | for doc in documents: 44 | bag = [] 45 | pattern_words = doc[0] 46 | pattern_words = [lemmatizer.lemmatize(word.lower()) for word in pattern_words] 47 | 48 | # Create the bag of words 49 | for w in words: 50 | bag.append(1) if w in pattern_words else bag.append(0) 51 | 52 | # Create the output row for the current intent 53 | output_row = list(output_empty) 54 | output_row[classes.index(doc[1])] = 1 55 | 56 | training.append(bag + output_row) 57 | 58 | # Convert training data to a NumPy array 59 | training = np.array(training) 60 | X_train = training[:, :-len(classes)] 61 | y_train = training[:, -len(classes):] 62 | 63 | # Build the model 64 | model = keras.Sequential() 65 | model.add(layers.Dense(128, input_shape=(len(X_train[0]),), activation='relu')) 66 | model.add(layers.Dense(64, activation='relu')) 67 | model.add(layers.Dense(len(y_train[0]), activation='softmax')) 68 | 69 | # Compile the model 70 | model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 71 | # Train the model 72 | model.fit(X_train, y_train, epochs=200, batch_size=5, verbose=1) 73 | 74 | # Function to predict the intent of the input sentence 75 | def predict_class(sentence): 76 | p = [lemmatizer.lemmatize(word.lower()) for word in nltk.word_tokenize(sentence)] 77 | bag = [0] * len(words) 78 | for s in p: 79 | for i, w in enumerate(words): 80 | if w == s: 81 | bag[i] = 1 82 | res = model.predict(np.array([bag]), verbose=0) 83 | return classes[np.argmax(res)] 84 | 85 | # Function to get a response based on the predicted intent 86 | def get_response(intent): 87 | for i in data['intents']: 88 | if i['tag'] == intent: 89 | return random.choice(i['responses']) 90 | 91 | # Chat loop for user interaction 92 | while True: 93 | user_input = input("You: ") 94 | if user_input.lower() == "goodbye": 95 | print("Chatbot: Goodbye!") 96 | break 97 | intent = predict_class(user_input) 98 | response = get_response(intent) 99 | print("Chatbot:", response) 100 | -------------------------------------------------------------------------------- /test.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 16, 6 | "id": "425eadf1", 7 | "metadata": {}, 8 | "outputs": [ 9 | { 10 | "data": { 11 | "text/plain": [ 12 | "array([[1, 2],\n", 13 | " [3, 4],\n", 14 | " [6, 7],\n", 15 | " [8, 9]])" 16 | ] 17 | }, 18 | "execution_count": 16, 19 | "metadata": {}, 20 | "output_type": "execute_result" 21 | } 22 | ], 23 | "source": [ 24 | "import numpy as np\n", 25 | "\n", 26 | "# print(np.__version__)\n", 27 | "arr = [[1,2,3,4],[6,7,8,9]]\n", 28 | "b = 2\n", 29 | "\n", 30 | "# \n", 31 | "# np.array(arr) + np.array(b)\n", 32 | "# np.array(arr).shape\n", 33 | "# np.zeros((2,2))\n", 34 | "np.array(arr).reshape(4,2)" 35 | ] 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": 23, 40 | "id": "83d3a69c", 41 | "metadata": {}, 42 | "outputs": [ 43 | { 44 | "data": { 45 | "text/plain": [ 46 | "[array([[2, 3]]), array([[8, 9]])]" 47 | ] 48 | }, 49 | "execution_count": 23, 50 | "metadata": {}, 51 | "output_type": "execute_result" 52 | } 53 | ], 54 | "source": [ 55 | "a = np.array([[2,3],[8,9]])\n", 56 | "b = np.array([[22,33],[88,99]])\n", 57 | "np.vsplit(a, 2)\n" 58 | ] 59 | }, 60 | { 61 | "cell_type": "code", 62 | "execution_count": 156, 63 | "id": "9eb0f525", 64 | "metadata": {}, 65 | "outputs": [ 66 | { 67 | "data": { 68 | "text/plain": [ 69 | "array([[0.0407288 , 0.85546058, 0.70365786, 0.47417383, 0.09783416,\n", 70 | " 0.49161588],\n", 71 | " [0.47347177, 0.17320187, 0.43385165, 0.39850473, 0.6158501 ,\n", 72 | " 0.63509365]])" 73 | ] 74 | }, 75 | "execution_count": 156, 76 | "metadata": {}, 77 | "output_type": "execute_result" 78 | } 79 | ], 80 | "source": [ 81 | "# for i in np.nditer(a):\n", 82 | "# print(i)\n", 83 | "# np.linalg.det(a)\n", 84 | "# np.random.rand(5)\n", 85 | "# np.datetime64(\"2025-12-12\")\n", 86 | "# c = [1,2,3]\n", 87 | "# type(np.asarray(c))\n", 88 | "# np.arange(1,10,2)\n", 89 | "# np.logspace(1,10,num=5)\n", 90 | "# x = np.array([[1,2,3],[4,5,6]])\n", 91 | "# np.mean(x)\n", 92 | "# np.std(x)\n", 93 | "# np.dot(a, b)\n", 94 | "# y = x.view()\n", 95 | "# x[0] = 111\n", 96 | "# x\n", 97 | "# y\n", 98 | "arr = [1,5,9,8,7,5]\n", 99 | "np.random.rand(2,6)\n", 100 | "# np.random.uniform(2,7)\n", 101 | "# np.random.normal(0,1,5)\n", 102 | "# np.random.seed(42)\n", 103 | "# x = np.random.choice(arr, size=3,replace=False)\n", 104 | "# np.random.uniform(1,101,size=5)\n" 105 | ] 106 | } 107 | ], 108 | "metadata": { 109 | "kernelspec": { 110 | "display_name": "Python (GAN)", 111 | "language": "python", 112 | "name": "gan" 113 | }, 114 | "language_info": { 115 | "codemirror_mode": { 116 | "name": "ipython", 117 | "version": 3 118 | }, 119 | "file_extension": ".py", 120 | "mimetype": "text/x-python", 121 | "name": "python", 122 | "nbconvert_exporter": "python", 123 | "pygments_lexer": "ipython3", 124 | "version": "3.12.9" 125 | } 126 | }, 127 | "nbformat": 4, 128 | "nbformat_minor": 5 129 | } 130 | -------------------------------------------------------------------------------- /agi/analyze.py: -------------------------------------------------------------------------------- 1 | import os 2 | import pandas as pd 3 | # Paths for audio files and text files 4 | audio_folder = './wav' 5 | tsv_folder = './text' 6 | 7 | # def process_data(): 8 | # Load audio files 9 | audio_files = {f for f in os.listdir(audio_folder) if f.endswith('.mp3') or f.endswith('.wav')} 10 | 11 | # Dictionary to store text data 12 | texts = {} 13 | 14 | # Process TSV files 15 | for tsv_file in os.listdir(tsv_folder): 16 | if tsv_file.endswith('.tsv'): 17 | tsv_path = os.path.join(tsv_folder, tsv_file) 18 | df_tsv = pd.read_csv(tsv_path, sep='\t', header=0) 19 | 20 | # Display number of columns and their names 21 | print(f"Processing {tsv_file}:") 22 | print(f"Number of columns: {df_tsv.shape[1]}") 23 | print(f"Columns: {df_tsv.columns.tolist()}") 24 | 25 | # Check if required columns exist 26 | if {'path', 'sentence'}.issubset(df_tsv.columns): 27 | for index, row in df_tsv.iterrows(): 28 | audio_file_name = row['path'] 29 | sentence_text = row['sentence'] 30 | texts[audio_file_name] = sentence_text 31 | 32 | # Create a DataFrame from processed data 33 | df = pd.DataFrame(list(texts.items()), columns=['audio_file', 'text']) 34 | 35 | # Check if audio files exist 36 | df['audio_exists'] = df['audio_file'].apply(lambda x: x in audio_files) 37 | 38 | # Show missing audio files 39 | missing_audio = df[~df['audio_exists']] 40 | if not missing_audio.empty: 41 | print("Missing audio files:") 42 | print(missing_audio[['audio_file']]) 43 | 44 | # Display total number of unique audio files and texts 45 | print(f"Total unique audio files: {df['audio_file'].nunique()}") 46 | print(f"Total texts: {df['text'].count()}") 47 | 48 | # Check if voting columns exist 49 | if {'up_votes', 'down_votes'}.issubset(df_tsv.columns): 50 | print("Up votes distribution:") 51 | print(df_tsv['up_votes'].describe()) 52 | 53 | print("Down votes distribution:") 54 | print(df_tsv['down_votes'].describe()) 55 | 56 | # Calculate total votes 57 | df_tsv['total_votes'] = df_tsv['up_votes'] + df_tsv['down_votes'] 58 | print("Total votes distribution:") 59 | print(df_tsv['total_votes'].describe()) 60 | 61 | # Analyze sentences 62 | if 'sentence' in df_tsv.columns: 63 | df_tsv['sentence_length'] = df_tsv['sentence'].apply(len) 64 | df_tsv['word_count'] = df_tsv['sentence'].apply(lambda x: len(x.split())) 65 | 66 | print("Sentence length distribution:") 67 | print(df_tsv['sentence_length'].describe()) 68 | 69 | print("Word count distribution:") 70 | print(df_tsv['word_count'].describe()) 71 | 72 | print("Sample sentences with their lengths and word counts:") 73 | print(df_tsv[['sentence', 'sentence_length', 'word_count']].head()) 74 | 75 | # الگو برای شناسایی ترجمه نشده 76 | pattern = r'(?i)(N/A|None|ترجمه نشده)' # به صورت غیر حساس به حروف بزرگ و کوچک 77 | 78 | # پیدا کردن خطوطی که شامل این الگو هستند 79 | untranslated_rows = df_tsv[df_tsv['sentence'].str.contains(pattern, na=False)] 80 | 81 | # نمایش نتایج 82 | print(f"untranslated_rows:{untranslated_rows}") 83 | # return df 84 | -------------------------------------------------------------------------------- /Dr-rabiee/main.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "id": "cb28db31", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "! pip install scipy" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 5, 16 | "id": "edf116e4", 17 | "metadata": {}, 18 | "outputs": [ 19 | { 20 | "name": "stdout", 21 | "output_type": "stream", 22 | "text": [ 23 | "Definite integral value: 2.3333333333333335\n", 24 | "Estimated error: 2.590520390792032e-14\n" 25 | ] 26 | } 27 | ], 28 | "source": [ 29 | "import numpy as np\n", 30 | "from scipy import integrate\n", 31 | "\n", 32 | "# Define the function to be integrated\n", 33 | "def f(x):\n", 34 | " \"\"\"\n", 35 | " Define the function f(x) = x^2.\n", 36 | "\n", 37 | " Args:\n", 38 | " x (float or numpy.ndarray): The input value or array of values.\n", 39 | "\n", 40 | " Returns:\n", 41 | " float or numpy.ndarray: The result of x^2.\n", 42 | " \"\"\"\n", 43 | " return x**2\n", 44 | "\n", 45 | "# Calculate the definite integral from 1 to 2\n", 46 | "result, error = integrate.quad(f, 1, 2)\n", 47 | "\n", 48 | "# Print the result\n", 49 | "print(\"Definite integral value:\", result)\n", 50 | "print(\"Estimated error:\", error)\n" 51 | ] 52 | }, 53 | { 54 | "cell_type": "code", 55 | "execution_count": 2, 56 | "id": "258b7614", 57 | "metadata": {}, 58 | "outputs": [ 59 | { 60 | "name": "stdout", 61 | "output_type": "stream", 62 | "text": [ 63 | "Manual integral value: 2.333333333333333\n" 64 | ] 65 | } 66 | ], 67 | "source": [ 68 | "\n", 69 | "# Manual calculation of the definite integral\n", 70 | "def manual_integration(lower_limit, upper_limit):\n", 71 | " \"\"\"\n", 72 | " Calculate the definite integral of x^2 manually.\n", 73 | "\n", 74 | " The antiderivative of x^2 is x^3 / 3.\n", 75 | " This function calculates the definite integral using the limits of integration.\n", 76 | "\n", 77 | " Args:\n", 78 | " lower_limit (float): The lower limit of integration.\n", 79 | " upper_limit (float): The upper limit of integration.\n", 80 | "\n", 81 | " Returns:\n", 82 | " float: The result of the definite integral.\n", 83 | " \"\"\"\n", 84 | " # The antiderivative of the function x^2 is x^3 / 3\n", 85 | " upper_value = (upper_limit**3) / 3\n", 86 | " lower_value = (lower_limit**3) / 3\n", 87 | " return upper_value - lower_value\n", 88 | "\n", 89 | "manual_result = manual_integration(1, 2)\n", 90 | "\n", 91 | "print(\"Manual integral value:\", manual_result)\n" 92 | ] 93 | } 94 | ], 95 | "metadata": { 96 | "kernelspec": { 97 | "display_name": "Python (GAN)", 98 | "language": "python", 99 | "name": "gan" 100 | }, 101 | "language_info": { 102 | "codemirror_mode": { 103 | "name": "ipython", 104 | "version": 3 105 | }, 106 | "file_extension": ".py", 107 | "mimetype": "text/x-python", 108 | "name": "python", 109 | "nbconvert_exporter": "python", 110 | "pygments_lexer": "ipython3", 111 | "version": "3.12.9" 112 | } 113 | }, 114 | "nbformat": 4, 115 | "nbformat_minor": 5 116 | } 117 | -------------------------------------------------------------------------------- /ChatBot/khodro.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "\n", 8 | "![My Image](../images/khodro.png)" 9 | ] 10 | }, 11 | { 12 | "cell_type": "code", 13 | "execution_count": 1, 14 | "metadata": {}, 15 | "outputs": [ 16 | { 17 | "name": "stdout", 18 | "output_type": "stream", 19 | "text": [ 20 | "Defect prediction: No defect\n" 21 | ] 22 | } 23 | ], 24 | "source": [ 25 | "import pandas as pd\n", 26 | "from sklearn.naive_bayes import GaussianNB\n", 27 | "import matplotlib.pyplot as plt\n", 28 | "import seaborn as sns\n", 29 | "# Creating the dataset\n", 30 | "data = {\n", 31 | " 'Year': [2011, 2011, 2011, 2011, 2012, 2012, 2012, 2011, 2012, 2012],\n", 32 | " 'Type': ['Sport', 'Sport', 'Sport', 'Sport', 'Sport', 'SUV', 'SUV', 'SUV', 'SUV', 'Sport'],\n", 33 | " 'Color': ['Red', 'Red', 'Yellow', 'Yellow', 'Yellow', 'Yellow', 'Yellow', 'Red', 'Red', 'Red'],\n", 34 | " 'Defect': [1, 0, 1, 0, 1, 0, 1, 0, 0, 1] # 1 for has defect and 0 for does not\n", 35 | "}\n", 36 | "\n", 37 | "# Convert the data into a DataFrame\n", 38 | "df = pd.DataFrame(data)\n", 39 | "\n", 40 | "# Encode categorical features as numeric\n", 41 | "df['Type'] = df['Type'].apply(lambda x: 1 if x == 'Sport' else 0)\n", 42 | "df['Color'] = df['Color'].apply(lambda x: 1 if x == 'Red' else 0)\n", 43 | "\n", 44 | "# Separate features and labels\n", 45 | "X = df[['Year', 'Type', 'Color']]\n", 46 | "y = df['Defect']\n", 47 | "\n", 48 | "# Create and train the model\n", 49 | "model = GaussianNB()\n", 50 | "model.fit(X, y)\n", 51 | "\n", 52 | "# Predict for a new sample (Year 2011, Type SUV, Color Red)\n", 53 | "new_data = pd.DataFrame({\n", 54 | " 'Year': [2011],\n", 55 | " 'Type': [0], # SUV = 0\n", 56 | " 'Color': [1] # Red = 1\n", 57 | "})\n", 58 | "\n", 59 | "prediction = model.predict(new_data)\n", 60 | "\n", 61 | "# Display the result\n", 62 | "result = \"Has defect\" if prediction[0] == 1 else \"No defect\"\n", 63 | "print(f\"Defect prediction: {result}\")\n", 64 | "\n", 65 | "\n", 66 | "\n", 67 | "# # Create a count of defects based on Type and Color\n", 68 | "# defect_counts = df.groupby(['Type', 'Color'])['Defect'].sum().reset_index()\n", 69 | "\n", 70 | "# # Plotting\n", 71 | "# # plt.figure(figsize=(10, 6))\n", 72 | "# sns.barplot(data=defect_counts, x='Type', y='Defect', hue='Color', palette='muted')\n", 73 | "\n", 74 | "# # Adding labels and title\n", 75 | "# plt.xlabel('Type (0: SUV, 1: Sport)')\n", 76 | "# plt.ylabel('Number of Defects')\n", 77 | "# plt.title('Number of Defects by Type and Color')\n", 78 | "# plt.xticks(ticks=[0, 1], labels=['SUV', 'Sport'])\n", 79 | "# plt.legend(title='Color', labels=['Yellow', 'Red'])\n", 80 | "# plt.grid(True)\n", 81 | "# plt.show()" 82 | ] 83 | } 84 | ], 85 | "metadata": { 86 | "kernelspec": { 87 | "display_name": "venv", 88 | "language": "python", 89 | "name": "python3" 90 | }, 91 | "language_info": { 92 | "codemirror_mode": { 93 | "name": "ipython", 94 | "version": 3 95 | }, 96 | "file_extension": ".py", 97 | "mimetype": "text/x-python", 98 | "name": "python", 99 | "nbconvert_exporter": "python", 100 | "pygments_lexer": "ipython3", 101 | "version": "3.12.3" 102 | } 103 | }, 104 | "nbformat": 4, 105 | "nbformat_minor": 2 106 | } 107 | -------------------------------------------------------------------------------- /Course/blob_setiment_pos_neg.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [], 7 | "authorship_tag": "ABX9TyMJQb7bvKS74wOtDvhCKSzo", 8 | "include_colab_link": true 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | }, 14 | "language_info": { 15 | "name": "python" 16 | } 17 | }, 18 | "cells": [ 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "id": "view-in-github", 23 | "colab_type": "text" 24 | }, 25 | "source": [ 26 | "\"Open" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "source": [ 32 | "!pip install textblob" 33 | ], 34 | "metadata": { 35 | "colab": { 36 | "base_uri": "https://localhost:8080/" 37 | }, 38 | "id": "EnWtxODyMQDh", 39 | "outputId": "3c9549b2-f497-40d9-bed3-304b8c8f4470" 40 | }, 41 | "execution_count": null, 42 | "outputs": [ 43 | { 44 | "output_type": "stream", 45 | "name": "stdout", 46 | "text": [ 47 | "Requirement already satisfied: textblob in /usr/local/lib/python3.11/dist-packages (0.19.0)\n", 48 | "Requirement already satisfied: nltk>=3.9 in /usr/local/lib/python3.11/dist-packages (from textblob) (3.9.1)\n", 49 | "Requirement already satisfied: click in /usr/local/lib/python3.11/dist-packages (from nltk>=3.9->textblob) (8.1.8)\n", 50 | "Requirement already satisfied: joblib in /usr/local/lib/python3.11/dist-packages (from nltk>=3.9->textblob) (1.4.2)\n", 51 | "Requirement already satisfied: regex>=2021.8.3 in /usr/local/lib/python3.11/dist-packages (from nltk>=3.9->textblob) (2024.11.6)\n", 52 | "Requirement already satisfied: tqdm in /usr/local/lib/python3.11/dist-packages (from nltk>=3.9->textblob) (4.67.1)\n" 53 | ] 54 | } 55 | ] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "execution_count": null, 60 | "metadata": { 61 | "colab": { 62 | "base_uri": "https://localhost:8080/" 63 | }, 64 | "id": "GMxOCKfDMLye", 65 | "outputId": "a9b6c41f-8a38-4106-a715-676833b381f7" 66 | }, 67 | "outputs": [ 68 | { 69 | "output_type": "stream", 70 | "name": "stdout", 71 | "text": [ 72 | "Polarity: -0.4, Subjectivity: 0.9\n", 73 | "احساس منفی\n" 74 | ] 75 | } 76 | ], 77 | "source": [ 78 | "\n", 79 | "# نصب کتابخانه\n", 80 | "# !pip install textblob\n", 81 | "\n", 82 | "from textblob import TextBlob\n", 83 | "\n", 84 | "# متن نمونه\n", 85 | "text = \"I hate this product! It's absolutely wonderful.I am frusrated\"\n", 86 | "\n", 87 | "# تحلیل احساسات\n", 88 | "blob = TextBlob(text)\n", 89 | "sentiment = blob.sentiment\n", 90 | "\n", 91 | "print(f\"Polarity: {sentiment.polarity}, Subjectivity: {sentiment.subjectivity}\")\n", 92 | "\n", 93 | "if sentiment.polarity > 0:\n", 94 | " print(\"احساس مثبت\")\n", 95 | "elif sentiment.polarity < 0:\n", 96 | " print(\"احساس منفی\")\n", 97 | "else:\n", 98 | " print(\"احساس خنثی\")" 99 | ] 100 | } 101 | ] 102 | } -------------------------------------------------------------------------------- /agi/quality_sound.py: -------------------------------------------------------------------------------- 1 | # import os 2 | # import librosa 3 | # import numpy as np 4 | # import pandas as pd 5 | 6 | # audio_folder = './clips' 7 | # low_quality_files = [] 8 | 9 | # def check_audio_quality(file_path): 10 | # try: 11 | # audio, sr = librosa.load(file_path, sr=None) 12 | 13 | # # محاسبه RMS 14 | # rms = np.sqrt(np.mean(audio**2)) 15 | 16 | # # محاسبه سطح نویز (SNR) 17 | # noise_level = np.mean(np.abs(audio)) 18 | # snr = 20 * np.log10(rms / noise_level) if noise_level > 0 else -np.inf 19 | 20 | # # معیارهای کیفیت 21 | # if rms < 0.01 or snr < 10: # این مقادیر می‌توانند بر اساس نیاز شما تغییر کنند 22 | # return True # کیفیت پایین 23 | # else: 24 | # return False # کیفیت خوب 25 | # except Exception as e: 26 | # print(f"Error processing {file_path}: {e}") 27 | # return False 28 | 29 | # # بررسی همه فایل‌های صوتی در پوشه 30 | # for audio_file in os.listdir(audio_folder): 31 | # if audio_file.endswith('.wav') or audio_file.endswith('.mp3'): 32 | # file_path = os.path.join(audio_folder, audio_file) 33 | # if check_audio_quality(file_path): 34 | # low_quality_files.append(audio_file) 35 | 36 | # # نمایش فایل‌های با کیفیت پایین 37 | # print(f"Files with low quality:{len(low_quality_files)}") 38 | # # for file in low_quality_files: 39 | # # print(file) 40 | 41 | 42 | import os 43 | import librosa 44 | import numpy as np 45 | import pandas as pd 46 | 47 | audio_folder = './wav' 48 | low_quality_files = [] 49 | 50 | def calculate_snr(audio): 51 | """محاسبه نسبت سیگنال به نویز (SNR)""" 52 | signal_power = np.mean(audio**2) 53 | noise_power = np.var(audio) 54 | if noise_power == 0: 55 | return np.inf # اگر نویز وجود نداشته باشد 56 | snr = 10 * np.log10(signal_power / noise_power) 57 | return snr 58 | 59 | def calculate_thd(audio, sr, n_harmonics=5): 60 | """محاسبه اعوجاج هارمونیک کل (THD)""" 61 | fft = np.fft.fft(audio) 62 | magnitude = np.abs(fft) 63 | fundamental = np.max(magnitude) 64 | harmonic_indices = np.arange(2, n_harmonics + 2) 65 | harmonic_magnitudes = magnitude[harmonic_indices] 66 | thd = np.sqrt(np.sum(harmonic_magnitudes**2)) / fundamental 67 | return thd 68 | 69 | def calculate_spectral_flatness(audio): 70 | """محاسبه Spectral Flatness""" 71 | spectrum = np.abs(np.fft.fft(audio)) 72 | geometric_mean = np.exp(np.mean(np.log(spectrum + 1e-10))) 73 | arithmetic_mean = np.mean(spectrum) 74 | flatness = geometric_mean / arithmetic_mean 75 | return flatness 76 | 77 | def check_audio_quality(file_path): 78 | try: 79 | audio, sr = librosa.load(file_path, sr=None) 80 | 81 | # محاسبه SNR 82 | snr = calculate_snr(audio) 83 | 84 | # محاسبه THD 85 | thd = calculate_thd(audio, sr) 86 | 87 | # محاسبه Spectral Flatness 88 | flatness = calculate_spectral_flatness(audio) 89 | 90 | # معیارهای کیفیت 91 | if snr < 20 or thd > 0.1 or flatness < 0.1: # مقادیر قابل تنظیم 92 | return True # کیفیت پایین 93 | else: 94 | return False # کیفیت خوب 95 | except Exception as e: 96 | print(f"Error processing {file_path}: {e}") 97 | return False 98 | 99 | # بررسی همه فایل‌های صوتی در پوشه 100 | for audio_file in os.listdir(audio_folder): 101 | if audio_file.endswith('.wav') or audio_file.endswith('.mp3'): 102 | file_path = os.path.join(audio_folder, audio_file) 103 | if check_audio_quality(file_path): 104 | low_quality_files.append(audio_file) 105 | 106 | # نمایش فایل‌های با کیفیت پایین 107 | print(f"Files with low quality: {len(low_quality_files)}") 108 | # for file in low_quality_files: 109 | # print(file) -------------------------------------------------------------------------------- /سرفصل_آموزش_پایتون_مقدماتی.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## **سرفصل کامل پایتون – سطح مقدماتی (ترم اول)** 4 | 5 | **هدف کلی:** آشنایی کامل با ساختار زبان پایتون، درک مفاهیم پایه برنامه‌نویسی، تسلط بر انواع داده‌های داخلی، ساختارهای شرطی و تکرار، و نوشتن برنامه‌های ساده. 6 | 7 | --- 8 | 9 | ### **۱. مقدمه و آماده‌سازی محیط توسعه** 10 | 11 | * آشنایی با پایتون و کاربردهای آن 12 | * نصب پایتون و محیط توسعه (VS Code / PyCharm) 13 | * اجرای کدهای پایتون در فایل و در حالت تعاملی (REPL / Shell) 14 | * مفهوم برنامه‌نویسی و الگوریتم 15 | 16 | --- 17 | 18 | ### **۲. مفاهیم پایه و متغیرها** 19 | 20 | * تعریف متغیر و نام‌گذاری آن‌ها 21 | * تفاوت بین مقداردهی و مقایسه 22 | * بررسی نوع داده با `type()` 23 | * تبدیل نوع داده (Type Casting) 24 | 25 | --- 26 | 27 | ### **۳. انواع داده‌های عددی (Numeric Types)** 28 | 29 | * نوع `int` و `float` 30 | * عملیات ریاضی: جمع، تفریق، ضرب، تقسیم، توان، باقیمانده، تقسیم صحیح 31 | * اولویت عملگرها 32 | * استفاده از توابع `round()`, `abs()`, `pow()`, `divmod()` 33 | 34 | --- 35 | 36 | ### **۴. نوع داده‌ی رشته‌ای (String)** 37 | 38 | * تعریف رشته با کوتیشن‌ها 39 | * اتصال رشته‌ها با `+` 40 | * ضرب رشته در عدد 41 | * ایندکس‌گذاری و برش (Slicing) 42 | * توابع و متدهای پرکاربرد: `len()`, `upper()`, `lower()`, `strip()`, `replace()`, `find()` 43 | * قالب‌بندی رشته‌ها با f-string و `.format()` 44 | 45 | --- 46 | 47 | ### **۵. نوع داده‌ی بولی (Boolean) و عملگرهای منطقی** 48 | 49 | * معرفی `True` و `False` 50 | * عملگرهای مقایسه‌ای: `==`, `!=`, `<`, `>`, `<=`, `>=` 51 | * عملگرهای منطقی: `and`, `or`, `not` 52 | * کاربرد در شرط‌ها 53 | 54 | --- 55 | 56 | ### **۶. ساختارهای شرطی** 57 | 58 | * دستور `if`, `else`, `elif` 59 | * بلاک‌های کد و تورفتگی (indentation) 60 | * شرط‌های تودرتو (nested conditions) 61 | * اپراتور شرطی کوتاه (ternary expression) 62 | 63 | --- 64 | 65 | ### **۷. نوع داده‌ی لیست (List)** 66 | 67 | * تعریف لیست و دسترسی به عناصر 68 | * برش و ایندکس منفی 69 | * تغییر، افزودن و حذف عناصر 70 | * متدهای رایج: `append()`, `insert()`, `remove()`, `pop()`, `sort()`, `reverse()` 71 | * استفاده از `in` و `len()` 72 | 73 | --- 74 | 75 | ### **۸. حلقه‌ها (Loops)** 76 | 77 | * استفاده از `for` در پیمایش لیست و رشته 78 | * استفاده از `range()` در تکرار عددی 79 | * استفاده از `while` برای تکرار شرطی 80 | * دستورات `break` و `continue` 81 | 82 | --- 83 | 84 | ### **۹. نوع داده‌ی تاپل (Tuple) و تفاوت آن با لیست** 85 | 86 | * تعریف و ویژگی‌های Tuple (غیرقابل تغییر بودن) 87 | * تبدیل لیست به تاپل و بالعکس 88 | * استفاده از Tuple برای بازگرداندن چند مقدار از تابع 89 | 90 | --- 91 | 92 | ### **۱۰. نوع داده‌ی دیکشنری (Dictionary)** 93 | 94 | * تعریف دیکشنری با کلید و مقدار 95 | * افزودن، ویرایش، حذف آیتم‌ها 96 | * پیمایش دیکشنری با `for` 97 | * متدهای رایج: `keys()`, `values()`, `items()` 98 | 99 | --- 100 | 101 | ### **۱۱. نوع مجموعه (Set)** 102 | 103 | * تعریف Set و ویژگی‌های آن (عدم تکرار، بدون ترتیب) 104 | * عملیات ریاضی روی مجموعه‌ها: اجتماع، اشتراک، تفاضل 105 | * متدهای `add()`, `update()`, `remove()`, `discard()` 106 | 107 | --- 108 | 109 | ### **۱۲. توابع (Functions)** 110 | 111 | * تعریف تابع با `def` 112 | * پارامتر و مقدار بازگشتی با `return` 113 | * تفاوت پارامتر و آرگومان 114 | * مفهوم Scope متغیرها (global و local) 115 | * توابع پیش‌فرض پایتون مثل `len()`, `sum()`, `max()`, `min()` 116 | 117 | --- 118 | 119 | ### **۱۳. دریافت ورودی از کاربر** 120 | 121 | * استفاده از `input()` 122 | * تبدیل رشته به عدد با `int()` یا `float()` 123 | * نوشتن برنامه‌های تعاملی ساده 124 | 125 | --- 126 | 127 | ### **۱۴. آشنایی اولیه با فایل‌ها** 128 | 129 | * باز کردن فایل با `open()` 130 | * خواندن و نوشتن فایل متنی با `read()`, `write()` 131 | * بستن فایل با `close()` یا استفاده از `with` 132 | 133 | --- 134 | 135 | ### **۱۵. تمرین نهایی و پروژه** 136 | 137 | **پروژه‌های پیشنهادی:** 138 | 139 | * ماشین‌حساب ساده با ورودی از کاربر 140 | * دفترچه نمرات دانش‌آموزان با لیست و دیکشنری 141 | * برنامه تبدیل واحد (مثلاً تبدیل دما) 142 | * ساخت یک بازی ساده حدس عدد 143 | 144 | --- 145 | 146 | -------------------------------------------------------------------------------- /ترم-دوم-سطح-متوسطه.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## **سرفصل کامل پایتون – سطح متوسطه (ترم دوم)** 4 | 5 | **هدف کلی:** ارتقاء مهارت‌های کدنویسی با پایتون از طریق یادگیری اصول طراحی برنامه‌های ساخت‌یافته، شی‌گرا و توانایی استفاده از ابزارها و کتابخانه‌های استاندارد پایتون. 6 | 7 | --- 8 | 9 | ### **۱. مرور مفاهیم مقدماتی** 10 | 11 | * مروری بر انواع داده‌ها، شرط‌ها، حلقه‌ها، توابع 12 | * تمرین برای تسلط بر مفاهیم قبلی با برنامه‌های ترکیبی 13 | 14 | --- 15 | 16 | ### **۲. توابع پیشرفته** 17 | 18 | * پارامترهای پیش‌فرض، موقعیتی و کلیدواژه‌ای 19 | * آرگومان‌های `*args` و `**kwargs` 20 | * توابع بازگشتی (Recursive) 21 | * تعریف توابع در توابع دیگر (Nested functions) 22 | 23 | --- 24 | 25 | ### **۳. ماژول‌ها و بسته‌ها** 26 | 27 | * وارد کردن ماژول‌های استاندارد (`math`, `random`, `datetime`, `os`) 28 | * ایجاد و استفاده از ماژول سفارشی 29 | * ساختار بسته (Package) و فایل `__init__.py` 30 | * نصب پکیج با `pip` و استفاده از پکیج‌های خارجی 31 | 32 | --- 33 | 34 | ### **۴. مدیریت خطا و استثناها (Exception Handling)** 35 | 36 | * معرفی انواع خطاهای رایج 37 | * استفاده از `try`, `except`, `else`, `finally` 38 | * تعریف خطای سفارشی با کلاس 39 | 40 | --- 41 | 42 | ### **۵. برنامه‌نویسی شی‌گرا (OOP)** 43 | 44 | * تعریف کلاس و شی (Object) 45 | * سازنده (`__init__`) 46 | * متدها و ویژگی‌ها 47 | * وراثت (Inheritance) 48 | * روش‌های خاص مثل `__str__`, `__len__` 49 | * مفهوم Encapsulation و دسترسی به متغیرهای خصوصی 50 | 51 | --- 52 | 53 | ### **۶. کار با فایل‌ها (File Handling)** 54 | 55 | * خواندن و نوشتن فایل‌های متنی 56 | * خواندن و نوشتن فایل‌های CSV 57 | * استفاده از ماژول `os` برای مدیریت فایل‌ها و پوشه‌ها 58 | * کار با فایل‌های JSON با `json` module 59 | 60 | --- 61 | 62 | 63 | ### **۷. ساختارهای داده پیشرفته** 64 | 65 | * لیست تو در تو (Nested Lists) و نحوه پیمایش آن‌ها 66 | * دیکشنری تو در تو و استفاده کاربردی از آن در برنامه‌های ساختاریافته 67 | * ترکیب ساختارها برای مدل‌سازی داده‌ها (لیست از دیکشنری، دیکشنری از لیست، و ترکیبات آن‌ها) 68 | * آشنایی با `collections` و ساختارهای خاص مانند `defaultdict`، `Counter` 69 | 70 | 71 | --- 72 | 73 | 74 | ### **۸. برنامه‌نویسی تابع‌گرا مقدماتی** 75 | 76 | * توابع `lambda`, `map`, `filter`, `reduce` 77 | * استفاده از `enumerate`, `zip` 78 | * Comprehension در لیست و دیکشنری 79 | 80 | --- 81 | 82 | ### **۹. آشنایی اولیه با کتابخانه‌های کاربردی** 83 | 84 | * `datetime` برای مدیریت تاریخ و زمان 85 | * `random` برای تولید مقادیر تصادفی 86 | * `math` برای توابع ریاضی خاص 87 | * `statistics` برای محاسبات آماری ساده 88 | 89 | --- 90 | 91 | ### **۱۰. پروژه پایانی سطح متوسطه** 92 | 93 | 94 | ### **۱. سیستم مدیریت دانش‌آموزان (Student Management System)** 95 | 96 | * استفاده از کلاس‌ها برای تعریف دانش‌آموز 97 | * ذخیره اطلاعات در فایل متنی یا CSV 98 | * امکان افزودن، ویرایش، جستجو و حذف دانش‌آموز 99 | * نمایش میانگین نمرات و گزارش‌گیری ساده 100 | 101 | --- 102 | 103 | ### **۲. دفترچه تلفن هوشمند (Smart Contact Book)** 104 | 105 | * کلاس برای مخاطبین با ویژگی‌هایی مثل نام، شماره، ایمیل 106 | * جستجوی سریع بر اساس نام یا شماره 107 | * ذخیره‌سازی داده‌ها در فایل JSON 108 | * استفاده از منو برای رابط کاربری متنی 109 | 110 | --- 111 | 112 | ### **۳. بازی حدس کلمه (Word Guess Game)** 113 | 114 | * استفاده از لیست و توابع برای مدیریت کلمات 115 | * امکان انتخاب تصادفی کلمه از فایل 116 | * شمارش دفعات تلاش و نمایش نتایج 117 | * افزودن سطح سختی (مثلاً طول کلمه، تعداد فرصت‌ها) 118 | 119 | --- 120 | 121 | ### **۴. برنامه مدیریت کارها (To-Do List App)** 122 | 123 | * استفاده از دیکشنری یا لیست برای ذخیره کارها 124 | * قابلیت تعیین وضعیت انجام‌شده و تاریخ انجام 125 | * ذخیره داده‌ها بین اجراها با فایل JSON یا CSV 126 | * اعمال فیلتر برای نمایش فقط کارهای انجام‌نشده 127 | 128 | --- 129 | 130 | ### **۵. ماشین حساب پیشرفته (Advanced Calculator)** 131 | 132 | * پیاده‌سازی با استفاده از کلاس‌ها و توابع جداگانه برای عملیات‌ها 133 | * پشتیبانی از عملیات‌های ریاضی ترکیبی، توان، ریشه، درصد 134 | * ورودی از کاربر با بررسی خطاها 135 | * امکان نمایش تاریخچه عملیات‌ها 136 | 137 | --- 138 | 139 | 140 | -------------------------------------------------------------------------------- /Course/QT/09_advanced_widgets.md: -------------------------------------------------------------------------------- 1 | ## صفحه ۹ – ویجت‌های پیشرفته در PyQt6 2 | 3 | ### ۱. تقویم (QCalendarWidget) 📅 4 | 5 | این ویجت یک تقویم کامل نمایش می‌دهد و کاربر می‌تواند یک تاریخ انتخاب کند. 6 | 7 | ```python 8 | import sys 9 | from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QCalendarWidget, QLabel 10 | 11 | app = QApplication(sys.argv) 12 | 13 | window = QWidget() 14 | window.setWindowTitle("Calendar Example") 15 | window.resize(400, 300) 16 | 17 | layout = QVBoxLayout() 18 | 19 | calendar = QCalendarWidget() 20 | label = QLabel("Select a date") 21 | 22 | # Update label when date is changed 23 | calendar.selectionChanged.connect(lambda: label.setText(calendar.selectedDate().toString())) 24 | 25 | layout.addWidget(calendar) 26 | layout.addWidget(label) 27 | 28 | window.setLayout(layout) 29 | window.show() 30 | sys.exit(app.exec()) 31 | ``` 32 | 33 | 📌 نتیجه: کاربر می‌تواند تاریخ را از تقویم انتخاب کند و همان تاریخ در برچسب نمایش داده می‌شود. 34 | 35 | --- 36 | 37 | ### ۲. اسلایدر (QSlider) 🎚️ 38 | 39 | اسلایدر برای گرفتن عددی بین یک بازه استفاده می‌شود (مثلاً تنظیم صدا یا روشنایی). 40 | 41 | ```python 42 | import sys 43 | from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QSlider, QLabel 44 | from PyQt6.QtCore import Qt 45 | 46 | app = QApplication(sys.argv) 47 | 48 | window = QWidget() 49 | window.setWindowTitle("Slider Example") 50 | window.resize(300, 200) 51 | 52 | layout = QVBoxLayout() 53 | 54 | slider = QSlider(Qt.Orientation.Horizontal) 55 | slider.setMinimum(0) 56 | slider.setMaximum(100) 57 | slider.setValue(50) 58 | 59 | label = QLabel("Value: 50") 60 | 61 | # Update label when slider moves 62 | slider.valueChanged.connect(lambda value: label.setText(f"Value: {value}")) 63 | 64 | layout.addWidget(slider) 65 | layout.addWidget(label) 66 | 67 | window.setLayout(layout) 68 | window.show() 69 | sys.exit(app.exec()) 70 | ``` 71 | 72 | 📌 نتیجه: یک اسلایدر افقی نمایش داده می‌شود که مقدارش بین ۰ تا ۱۰۰ تغییر می‌کند و مقدار فعلی در برچسب نشان داده می‌شود. 73 | 74 | --- 75 | 76 | ### ۳. Progress Bar 🔄 77 | 78 | این ویجت برای نمایش وضعیت پیشرفت یک عملیات (مثل دانلود یا نصب) استفاده می‌شود. 79 | 80 | ```python 81 | import sys 82 | from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QProgressBar, QPushButton 83 | from PyQt6.QtCore import QTimer 84 | 85 | class ProgressExample(QWidget): 86 | def __init__(self): 87 | super().__init__() 88 | 89 | self.setWindowTitle("Progress Bar Example") 90 | self.resize(300, 150) 91 | 92 | self.layout = QVBoxLayout() 93 | 94 | self.progress = QProgressBar() 95 | self.progress.setValue(0) 96 | 97 | self.button = QPushButton("Start") 98 | 99 | self.layout.addWidget(self.progress) 100 | self.layout.addWidget(self.button) 101 | self.setLayout(self.layout) 102 | 103 | # Timer to update progress 104 | self.timer = QTimer() 105 | self.timer.timeout.connect(self.update_progress) 106 | 107 | self.button.clicked.connect(self.start_progress) 108 | self.value = 0 109 | 110 | def start_progress(self): 111 | self.value = 0 112 | self.progress.setValue(0) 113 | self.timer.start(100) 114 | 115 | def update_progress(self): 116 | self.value += 5 117 | self.progress.setValue(self.value) 118 | if self.value >= 100: 119 | self.timer.stop() 120 | 121 | app = QApplication(sys.argv) 122 | window = ProgressExample() 123 | window.show() 124 | sys.exit(app.exec()) 125 | ``` 126 | 127 | 📌 نتیجه: با کلیک روی دکمه، نوار پیشرفت شروع به پر شدن می‌کند تا به ۱۰۰ برسد. 128 | 129 | --- 130 | 131 | ✅ حالا شما با چند ویجت پیشرفته‌ی کاربردی آشنا شدید که تقریباً در همه‌ی نرم‌افزارهای جدی استفاده می‌شوند. 132 | 133 | --- 134 | 135 | در **صفحه ۱۰** یاد می‌گیریم چطور با استفاده از **StyleSheet** ظاهر برنامه‌هایمان را زیباتر کنیم؛ مثل تغییر رنگ‌ها، فونت‌ها و طراحی ظاهری مدرن. 🎨✨ 136 | 137 | -------------------------------------------------------------------------------- /ChatBot/makemodel.py: -------------------------------------------------------------------------------- 1 | import random 2 | import json 3 | import pickle 4 | 5 | import nltk 6 | # Download all NLTK resources (this may take some time) 7 | # nltk.download('all') 8 | from nltk.stem import WordNetLemmatizer 9 | from tensorflow.keras.models import Sequential 10 | from tensorflow.keras.layers import Dense, Dropout 11 | from tensorflow.keras.optimizers import SGD 12 | 13 | import numpy as np 14 | 15 | import nltk 16 | nltk.download('punkt') # دانلود داده‌های punkt برای توکن‌سازی 17 | nltk.download('punkt_tab') # دانلود داده‌های punkt_tab برای توکن‌سازی جملات 18 | nltk.download('wordnet') # دانلود داده‌های wordnet 19 | 20 | # Initialize the lemmatizer 21 | lemmatizer = WordNetLemmatizer() 22 | 23 | # Load intents from the intents.json file 24 | intents = json.loads(open("intents_fa.json").read()) 25 | 26 | # Initialize lists to hold words, classes, and documents 27 | words = [] 28 | classes = [] 29 | documents = [] 30 | 31 | # Define characters to ignore in the input 32 | ignore_letters = ["?", "!", ".", ","] 33 | 34 | # Process each intent in the intents file 35 | for intent in intents["intents"]: 36 | for pattern in intent["patterns"]: 37 | # Tokenize each pattern and add to the word list and documents 38 | word_list = nltk.word_tokenize(pattern) # تقسیم متن به کلمات 39 | words.extend(word_list) 40 | documents.append((word_list, intent["tag"])) 41 | 42 | # Add the intent tag to classes if it's not already present 43 | if intent["tag"] not in classes: 44 | classes.append(intent["tag"]) 45 | 46 | # Lemmatize words and remove ignored characters 47 | words = [lemmatizer.lemmatize(word) 48 | for word in words if word not in ignore_letters] 49 | 50 | # Sort and remove duplicates from words and classes 51 | words = sorted(set(words)) 52 | classes = sorted(set(classes)) 53 | 54 | # Save the processed words and classes to files 55 | pickle.dump(words, open('words_fa.pkl', 'wb')) 56 | pickle.dump(classes, open('classes_fa.pkl', 'wb')) 57 | 58 | # Prepare the dataset for training 59 | dataset = [] 60 | template = [0] * len(classes) # Initialize output template 61 | 62 | # Create the bag of words and output rows for each document 63 | for document in documents: 64 | bag = [] 65 | word_patterns = document[0] #feature 66 | word_patterns = [lemmatizer.lemmatize(word.lower()) 67 | for word in word_patterns] 68 | 69 | # Create a bag of words representation 70 | for word in words: 71 | bag.append(1) if word in word_patterns else bag.append(0) 72 | 73 | # Create the output row for the corresponding class 74 | output_row = list(template) 75 | output_row[classes.index(document[1])] = 1 #document[1] ==>label 76 | dataset.append([bag, output_row]) 77 | 78 | 79 | # Shuffle the dataset to ensure randomness during training 80 | random.shuffle(dataset) 81 | dataset = np.array(dataset, dtype=object) 82 | 83 | # Split the dataset into training features and labels 84 | train_x = list(dataset[:, 0]) 85 | train_y = list(dataset[:, 1]) 86 | 87 | # Build the neural network model 88 | model = Sequential() 89 | model.add(Dense(256, input_shape=(len(train_x[0]),), activation='relu')) # First hidden layer 90 | model.add(Dropout(0.5)) # Dropout layer to prevent overfitting 91 | model.add(Dense(128, activation='relu')) # Second hidden layer 92 | model.add(Dropout(0.5)) # Dropout layer 93 | model.add(Dense(len(train_y[0]), activation='softmax')) # Output layer with softmax activation 94 | 95 | # Compile the model with SGD optimizer and categorical crossentropy loss 96 | sgd = SGD(learning_rate=0.01, momentum=0.9, nesterov=True) 97 | model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy']) 98 | 99 | # Train the model on the training data 100 | hist = model.fit(np.array(train_x), np.array(train_y), epochs=200, batch_size=5, verbose=1) 101 | 102 | # Save the trained model to a file 103 | model.save("chatbot_model_fa.h5", hist) 104 | print("Done!") # Indicate that training is complete 105 | -------------------------------------------------------------------------------- /ChatBot/TalkAi.md: -------------------------------------------------------------------------------- 1 | 2 | ## مراحل توسعه سیستم هوش مصنوعی دستور اطاعت گفتاری 3 | 4 | ### 1. **تعریف دقیق اهداف** 5 | - **تعیین ویژگی‌ها:** مشخص کنید که چه ویژگی‌هایی باید در سیستم وجود داشته باشد. به عنوان مثال: 6 | - پردازش دستورات صوتی 7 | - پاسخگویی سریع و کارآمد 8 | - قابلیت یادگیری از تعاملات کاربران 9 | 10 | ### 2. **جمع‌آوری و پردازش داده‌ها** 11 | - **داده‌های صوتی:** جمع‌آوری داده‌های صوتی شامل دستورات گفتاری و تعاملات کاربران. 12 | - **تنوع داده‌ها:** اطمینان حاصل کنید که داده‌ها شامل لهجه‌ها و زبان‌های مختلف باشند. 13 | - **پیش‌پردازش داده‌ها:** داده‌ها را برای آموزش مدل آماده کنید (پاک‌سازی، نرمال‌سازی، و غیره). 14 | - **آموزش مدل:** مدل را با استفاده از داده‌های جمع‌آوری شده آموزش دهید و به آن اجازه دهید تا الگوهای گفتاری را یاد بگیرد. 15 | 16 | 17 | ### 3. **مدل‌سازی و یادگیری ماشین** 18 | - **انتخاب الگوریتم:** الگوریتم‌های مناسب برای پردازش صوت و یادگیری عمیق را انتخاب کنید. به عنوان مثال: 19 | - شبکه‌های عصبی کانولوشن (CNN) برای پردازش صوت 20 | - شبکه‌های عصبی بازگشتی (RNN) یا LSTM برای پردازش توالی‌های زمانی 21 | - مدل‌های پردازش زبان طبیعی (NLP): برای تحلیل متن و تولید پاسخ، می‌توانید از مدل‌های NLP مانند BERT یا GPT استفاده کنید. 22 | از مدل‌های یادگیری عمیق برای پردازش صوت و تحلیل زبان طبیعی استفاده کنید. به عنوان مثال:**Speech-to-Text:** برای تبدیل صوت 23 | به متن از مدل‌های ASR (Automatic Speech Recognition) استفاده کنید 24 | - از الگوریتم‌های یادگیری تقویتی مانند (DQN/PPO/A3C)استفاده کنید تا مدل بتواند از تعاملات خود با محیط یاد بگیرد. 25 | 26 | 27 | 28 | ## مراحل کلی برای پردازش دستورات صوتی عمومی 29 | 30 | ### 1. **تعریف دامنه و نوع دستورات** 31 | - **دستورات عمومی:** سیستم باید قادر باشد به دستورات عمومی مانند: 32 | - سوالات اطلاعاتی (مثلاً "آب و هوا امروز چطوره؟") 33 | - درخواست‌ها (مثلاً "لطفاً موسیقی پخش کن.") 34 | - دستورات کنترلی (مثلاً "چراغ‌ها را خاموش کن.") 35 | - **تنوع فیلدها:** در نظر داشته باشید که سیستم باید به دستورات مرتبط با فیلدهای مختلف مانند: 36 | - پزشکی 37 | - مالی 38 | - آموزشی 39 | - سرگرمی 40 | - خدمات مشتری 41 | - و غیره پاسخ دهد. 42 | 43 | ### 2. **جمع‌آوری داده‌های متنوع** 44 | 45 | - **دستورات صوتی:** ابتدا باید مجموعه‌ای از دستورات صوتی که می‌خواهید سیستم به آن‌ها پاسخ دهد، جمع‌آوری کنید. این دستورات می‌توانند 46 | شامل سوالات، درخواست‌ها و دستورات کنترلی باشند. 47 | - **تنوع:** اطمینان حاصل کنید که داده‌ها شامل تنوع لهجه‌ها، سنین و جنسیت‌های مختلف باشد. 48 | 49 | - **متن دستورات:** برای هر دستور صوتی، متن مربوط به آن را تهیه کنید. این کار به شما کمک می‌کند تا مدل‌های تبدیل صوت به متن (ASR) را آموزش دهید. 50 | - **تنوع در متن:** متن‌ها باید شامل فرم‌های مختلف بیان دستورات باشند تا سیستم بتواند به خوبی یاد بگیرد. 51 | 52 | - **پاسخ‌های صوتی:** برای هر دستور، پاسخ صوتی مناسب را جمع‌آوری کنید. این پاسخ‌ها باید واضح و مرتبط با دستور باشند. 53 | - **تنوع در پاسخ‌ها:** سعی کنید از گویندگان مختلف برای ضبط پاسخ‌ها استفاده کنید تا تنوع بیشتری داشته باشید. 54 | 55 | - **متن پاسخ‌ها:** متن‌های مربوط به پاسخ‌های صوتی را نیز جمع‌آوری کنید. این کار به شما کمک می‌کند تا مدل‌های پردازش زبان طبیعی (NLP) را آموزش دهید. 56 | 57 | ### 3. **پیش‌پردازش داده‌ها** 58 | - **تنظیم داده‌ها:** داده‌ها را پاک‌سازی و نرمال‌سازی کنید. این شامل حذف نویز و تبدیل داده‌های صوتی به فرمت‌های مناسب است. 59 | - **تنوع لهجه و زبان:** اطمینان حاصل کنید که داده‌ها شامل لهجه‌ها و زبان‌های مختلف هستند. 60 | 61 | ### 5. **پیاده‌سازی سیستم** 62 | - **توسعه نرم‌افزار:** نرم‌افزاری بسازید که قابلیت دریافت دستورات صوتی را داشته باشد و به طور خودکار آن‌ها را پردازش کند. 63 | - **تست و اعتبارسنجی:** سیستم را با کاربران واقعی تست کنید و عملکرد آن را ارزیابی کنید. 64 | 65 | ### 6. **یادگیری از تعاملات کاربران** 66 | - **جمع‌آوری بازخورد:** از کاربران بخواهید تا بازخورد دهند و داده‌های جدیدی از تعاملات آن‌ها جمع‌آوری کنید. 67 | - **مدل‌های یادگیری:** از تکنیک‌های یادگیری تقویتی و یادگیری آنلاین برای بهبود عملکرد سیستم استفاده کنید. 68 | 69 | ### 7. **گسترش و تخصصی‌سازی** 70 | - **توسعه قابلیت‌های جدید:** بر اساس نیازهای جدید و بازخورد کاربران، قابلیت‌های جدیدی به سیستم اضافه کنید. 71 | - **تخصصی‌سازی برای صنایع مختلف:** سیستم را برای کاربردهای خاص در صنایع مختلف تخصصی کنید. 72 | 73 | 74 | -------------------------------------------------------------------------------- /Course/Bagging_Boosting.md: -------------------------------------------------------------------------------- 1 | ### **🌟 طبقه‌بندی‌کننده‌های Ensemble (ترکیبی) 🌟** 2 | 3 | طبقه‌بندی‌کننده‌های Ensemble روش‌هایی هستند که چندین مدل یادگیری ماشین را ترکیب می‌کنند تا پیش‌بینی‌های بهتری ارائه دهند. دو روش اصلی این طبقه‌بندی‌کننده‌ها عبارتند از **Bagging** و **Boosting**. 4 | 5 | --- 6 | 7 | ### **1. Bagging (Bootstrap Aggregating) 🤝✨** 8 | 9 | **ایده**: ایجاد چندین زیرمجموعه از داده‌ها و آموزش مدل‌ها بر روی این زیرمجموعه‌ها. سپس ترکیب پیش‌بینی‌ها برای کاهش واریانس. 🎯 10 | 11 | #### **مثال داوران 🏆🎉**: 12 | 13 | **هدف**: انتخاب بهترین بازیکن از ۴ بازیکن (A، B، C، D) توسط ۵ داور. 14 | 15 | 1. **گروه‌بندی داوران**: 16 | 17 | - گروه ۱: داور ۱، داور ۲، داور ۳ 18 | - گروه ۲: داور ۳، داور ۴، داور ۵ 19 | 20 | 2. **رای‌گیری در هر گروه**: 21 | 22 | | بازیکن | امتیاز گروه ۱ | امتیاز گروه ۲ | 23 | |--------|----------------|----------------| 24 | | A | 7 | 6 | 25 | | B | 8 | 7 | 26 | | C | 6 | 8 | 27 | | D | 5 | 5 | 28 | 29 | 3. **انتخاب بهترین بازیکن در هر گروه**: 30 | 31 | - گروه ۱: بازیکن B (با امتیاز ۸) 32 | - گروه ۲: بازیکن C (با امتیاز ۸) 33 | 34 | 4. **رای‌گیری نهایی**: 35 | 36 | | بازیکن | امتیاز گروه ۱ | امتیاز گروه ۲ | میانگین امتیاز | 37 | |--------|----------------|----------------|------------------| 38 | | A | 7 | 6 | 6.5 | 39 | | B | 8 | 7 | 7.5 | 40 | | C | 6 | 8 | 7 | 41 | | D | 5 | 5 | 5 | 42 | 43 | - **برنده نهایی**: بازیکن B (با میانگین امتیاز ۷.۵) 44 | 45 | --- 46 | 47 | ### **2. Boosting 🚀🌈** 48 | 49 | **ایده**: آموزش مدل‌ها به صورت ترتیبی. هر مدل جدید سعی می‌کند اشتباهات مدل قبلی را اصلاح کند. 🔄 50 | 51 | #### **مثال داوران **: 52 | 53 | 1. **رای‌گیری اولیه**: 54 | 55 | | بازیکن | امتیاز داور ۱ | امتیاز داور ۲ | امتیاز داور ۳ | امتیاز داور ۴ | امتیاز داور ۵ | مجموع امتیاز | 56 | |--------|----------------|----------------|----------------|----------------|----------------|---------------| 57 | | A | 6 | 7 | 5 | 6 | 7 | 31 | 58 | | B | 7 | 6 | 6 | 7 | 6 | 32 | 59 | | C | 5 | 5 | 7 | 8 | 8 | 33 | 60 | | D | 4 | 4 | 4 | 5 | 4 | 21 | 61 | 62 | - **بهترین بازیکن (تا اینجا)**: بازیکن C (با امتیاز ۳۳) 🌟 63 | 64 | 2. **اصلاح نظر داوران**: فرض کنید داوران به بازیکن C بیش از حد امتیاز داده‌اند. ❗ 65 | 66 | 3. **رای‌گیری دوباره**:🌈✨ 67 | 68 | | بازیکن | امتیاز داور ۱ (اصلاح شده) | امتیاز داور ۲ (اصلاح شده) | امتیاز داور ۳ (اصلاح شده) | امتیاز داور ۴ (اصلاح شده) | امتیاز داور ۵ (اصلاح شده) | مجموع امتیاز | 69 | |--------|----------------------------|----------------------------|----------------------------|----------------------------|----------------------------|---------------| 70 | | A | 7 | 8 | 6 | 7 | 8 | 36 | 71 | | B | 8 | 7 | 7 | 8 | 7 | 37 | 72 | | C | 4 | 4 | 6 | 7 | 7 | 28 | 73 | | D | 5 | 5 | 5 | 6 | 5 | 26 | 74 | 75 | - **بهترین بازیکن (بعد از اصلاح)**: بازیکن B (با امتیاز ۳۷) 🎉🥇 76 | 77 | --- 78 | 79 | ### **خلاصه 📚🌟** 80 | 81 | - **Bagging**: چندین زیرمجموعه از داده‌ها ایجاد و مدل‌ها آموزش داده می‌شوند. پیش‌بینی‌ها ترکیب می‌شوند. 82 | - **Boosting**: مدل‌ها به صورت ترتیبی آموزش داده می‌شوند و هر مدل جدید سعی می‌کند اشتباهات مدل قبلی را اصلاح کند. 🚀 83 | 84 | 85 | -------------------------------------------------------------------------------- /Alborz.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ## 📘 بخش اول: آموزش عمومی (پودمان‌های رسمی مدرسه – همه دانش‌آموزان) 5 | 6 | این بخش مطابق کتاب درسی فناوری اطلاعات و ارتباطات است. 7 | 8 | ### 🔹 پودمان ۱: شهروند الکترونیکی 9 | 10 | * آشنایی با شبکه و اینترنت 11 | * کار با ایمیل (ارسال، دریافت، مدیریت) 12 | * امنیت و اخلاق در فضای مجازی 13 | 14 | ### 🔹 پودمان ۲: نوآوری و فناوری 15 | 16 | * تأثیر فناوری بر زندگی روزمره 17 | * خلاقیت و ایده‌پردازی 18 | 19 | ### 🔹 پودمان ۳: کاربرد فناوری اطلاعات و ارتباطات 20 | 21 | * نرم‌افزارهای اداری (Word, PowerPoint, Excel مقدماتی) 22 | * مدیریت فایل‌ها و پوشه‌ها 23 | * کاربرد فناوری در مشاغل مختلف 24 | 25 | ### 🔹 پودمان ۴: جستجو و جمع‌آوری اطلاعات 26 | 27 | * موتورهای جستجو 28 | * شیوه‌های صحیح جستجو 29 | * ارزیابی و انتخاب منابع معتبر 30 | 31 | ### 🔹 پودمان ۵: مستندسازی 32 | 33 | * تایپ ۱۰ انگشتی مقدماتی 34 | * کار با Word و PowerPoint 35 | * تنظیم جدول، تصویر و نمودار 36 | 37 | ### 🔹 پودمان ۶: اشتراک‌گذاری اطلاعات 38 | 39 | * ایجاد و ویرایش ارائه (PowerPoint) 40 | * کار گروهی و اشتراک‌گذاری فایل‌ها 41 | 42 | ### 🔹 پودمان ۷: برنامه‌نویسی (پایتون) 43 | 44 | * مفاهیم پایه الگوریتم 45 | * دستورات شرطی و حلقه 46 | * طراحی پروژه‌های ساده 47 | 48 | --- 49 | 50 | ## 🚀 بخش دوم: سرفصل‌های تکمیلی (ویژه‌ی کلاس خصوصی و مسابقه خوارزمی) 51 | 52 | این بخش مخصوص دانش‌آموزان مستعد است و خارج از ساعات رسمی مدرسه آموزش داده می‌شود: 53 | 54 | ### ۱. مهارت‌های پیشرفته برنامه‌نویسی (پایتون) 55 | 56 | * الگوریتم و فلوچارت 57 | * لیست‌ها، تاپل‌ها و دیکشنری‌ها 58 | * توابع و ماژول‌ها 59 | * پروژه‌های کوچک: ماشین حساب، بازی‌های ساده 60 | 61 | ### ۲. طراحی وب مقدماتی 62 | اینکه بچه‌ها رو به دو گروه **Front-end** و **Back-end** تقسیم کنید هم باعث میشه مسئولیت‌پذیری و کار تیمی رو یاد بگیرن، هم پروژه‌هاشون واقعی‌تر بشه (چون مسابقه خوارزمی روی *پروژه محور بودن* خیلی تأکید داره). 63 | 64 | --- 65 | 66 | ## 🔹 گروه اول: Front-end (طراحی ظاهر و تجربه کاربر) 67 | 68 | 🔸 **سرفصل‌ها:** 69 | 70 | * آشنایی با ساختار HTML (تگ‌ها، لینک، تصویر، جدول، فرم‌ها) 71 | * استایل‌دهی با CSS (رنگ‌ها، فونت‌ها، Flexbox و Grid ساده) 72 | * آشنایی با JavaScript و فریمورک Vue.js 73 | * استفاده از فریمورک سبک مثل Bootstrap برای طراحی واکنش‌گرا 74 | * آشنایی با Git, Github 75 | * پروژه: طراحی یک صفحه شخصی یا وبلاگ ساده با امکان نمایش مقالات/عکس‌ها 76 | 77 | --- 78 | 79 | ## 🔹 گروه دوم: Back-end (منطق و مدیریت داده‌ها) 80 | 81 | 🔸 **سرفصل‌ها:** 82 | 83 | * مفاهیم پایه‌ی سرور و پایگاه داده (توضیح ساده برای سطح راهنمایی) 84 | * آشنایی بافریمورک Python (Django خیلی سبک) 85 | * ایجاد یک API ساده برای دریافت و ذخیره داده‌ها 86 | * کار با فایل JSON یا دیتابیس ساده (SQLite) 87 | * آشنایی با Git, Github 88 | * پروژه: ذخیره و نمایش داده‌ها (مثلاً فرم ثبت‌نام دانش‌آموزان یا دفترچه یادداشت آنلاین) 89 | 90 | --- 91 | 92 | ## 🔹 پروژه‌ی مشترک (ترکیب Front + Back) 93 | 94 | برای تمرین کار گروهی، می‌تونید بچه‌ها رو در قالب یک پروژه مشترک قرار داد: 95 | 96 | **مثال پروژه:** 97 | 🌐 یک وبسایت ساده "کتابخانه آنلاین" 98 | 99 | * تیم فرانت‌اند → طراحی ظاهر سایت (صفحه اصلی، صفحه معرفی کتاب‌ها، فرم ثبت‌نام) 100 | * تیم بک‌اند → ساخت بخش ورود اطلاعات کتاب‌ها و ذخیره در دیتابیس + API برای نمایش کتاب‌ها در سایت 101 | 102 | --- 103 | 104 | 📌 **مزایا برای مسابقه خوارزمی:** 105 | 106 | * دانش‌آموزان یاد می‌گیرن کار تیمی کنن (که توی داوری امتیاز بالایی داره). 107 | * پروژه هم ظاهر جذاب داره هم منطق فنی (ترکیب Front و Back امتیاز ویژه داره). 108 | * می‌تونن در روز مسابقه پروژه رو به صورت عملی اجرا و دفاع کنن. 109 | 110 | --- 111 | 112 | 113 | ### ۳. هوش مصنوعی و داده 114 | 115 | * آشنایی مفهومی با هوش مصنوعی 116 | * کار با داده‌ها در پایتون (pandas, matplotlib) 117 | * کار با برخی از الگوریتمهای هوش مصنوعی 118 | * پروژه: تحلیل داده و پیش بینی مدل ساخته شده(مثل نمرات کلاسی یا جدول لیگ ورزشی و یاتشخیص بیماری ..) 119 | 120 | ### ۴. تفکر خلاق و ایده‌پردازی 121 | 122 | * طراحی و ارائه ایده‌ها 123 | * کار تیمی برای حل یک مسئله واقعی 124 | * آماده‌سازی پروژه برای ارائه در مسابقه 125 | 126 | ### ۵. تمرین‌های مسابقه‌ای 127 | 128 | * انجام نمونه پروژه‌های برگزیده سال‌های قبل مسابقه خوارزمی 129 | * تمرین ارائه شفاهی پروژه در مقابل دیگران 130 | * مدیریت زمان و کار گروهی 131 | 132 | --- 133 | 134 | 135 | * در کلاس رسمی، **پودمان‌های درسی کتاب** را پیش میبریم. 136 | * برای کلاس‌های خصوصی، یک مسیر پروژه‌محور طراحی میکنم (مثلاً ساخت یک وبسایت یا طراحی یک بازی در پایتون یا درسطح پیشرفته دستیار هوش مصنوعی) تا دانش‌آموزان آماده مسابقه شوند. 137 | 138 | --- 139 | 140 | 141 | -------------------------------------------------------------------------------- /agi/finetun_wac.py: -------------------------------------------------------------------------------- 1 | import json 2 | import torch 3 | import torchaudio 4 | from datasets import Dataset 5 | from transformers import ( 6 | Wav2Vec2Processor, Wav2Vec2ForCTC, Wav2Vec2Config, 7 | AutoFeatureExtractor, TrainingArguments, Trainer, 8 | get_scheduler 9 | ) 10 | 11 | # Load the Wav2Vec2 model configuration and model weights 12 | config = Wav2Vec2Config.from_pretrained("facebook/wav2vec2-large-960h") 13 | model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-large-960h") 14 | processor = Wav2Vec2Processor.from_pretrained("facebook/wav2vec2-large-960h") 15 | feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-large-960h") 16 | 17 | # Enable gradient checkpointing to save memory during training 18 | model.gradient_checkpointing_enable() 19 | 20 | # Function to load data from a JSON file 21 | def load_data(json_path): 22 | with open(json_path, 'r', encoding='utf-8') as f: 23 | data = json.load(f) 24 | return Dataset.from_dict({ 25 | "file_path": [item["file_path"] for item in data], 26 | "text": [item["text"] for item in data] 27 | }) 28 | 29 | # Function to preprocess the audio data 30 | def preprocess_data(batch): 31 | speech_array, sampling_rate = torchaudio.load(batch["file_path"]) 32 | resampler = torchaudio.transforms.Resample(orig_freq=sampling_rate, new_freq=16000) 33 | speech_array = resampler(speech_array).squeeze().numpy() 34 | audio = feature_extractor(speech_array, sampling_rate=16000, return_tensors="pt") 35 | batch["input_values"] = audio["input_values"][0] 36 | batch["labels"] = processor.tokenizer(batch["text"], return_tensors="pt").input_ids[0] 37 | return batch 38 | 39 | # Load and preprocess training data 40 | dataset = load_data("transcript_list.json") 41 | dataset = dataset.map(preprocess_data, remove_columns=["file_path", "text"]) 42 | 43 | # Load and preprocess validation data 44 | val_dataset = load_data("validation_transcript_list.json") 45 | val_dataset = val_dataset.map(preprocess_data, remove_columns=["file_path", "text"]) 46 | 47 | # Function for collating batches of data 48 | def collate_fn(batch): 49 | input_values = [torch.tensor(item["input_values"]) for item in batch] 50 | labels = [torch.tensor(item["labels"]) for item in batch] 51 | input_values = torch.nn.utils.rnn.pad_sequence(input_values, batch_first=True, padding_value=0.0) 52 | labels = torch.nn.utils.rnn.pad_sequence(labels, batch_first=True, padding_value=-100) 53 | return {"input_values": input_values, "labels": labels} 54 | 55 | # Training configuration settings 56 | training_args = TrainingArguments( 57 | output_dir="./wav2vec2_finetuned", 58 | per_device_train_batch_size=3, # Adjusted batch size 59 | gradient_accumulation_steps=2, 60 | save_steps=400, 61 | logging_steps=100, 62 | learning_rate=1e-4, # Updated learning rate 63 | weight_decay=0.005, 64 | save_total_limit=2, 65 | num_train_epochs=4, 66 | fp16=False, 67 | push_to_hub=False, 68 | eval_steps=500, 69 | report_to="none", 70 | ) 71 | 72 | # Move the model to CPU or GPU based on availability 73 | device = torch.device("cuda" if torch.cuda.is_available() else "cpu") 74 | model.to(device) 75 | 76 | # Define the optimizer 77 | optimizer = torch.optim.AdamW(model.parameters(), lr=training_args.learning_rate) 78 | 79 | # Define the learning rate scheduler 80 | num_training_steps = len(dataset) // training_args.per_device_train_batch_size * training_args.num_train_epochs 81 | scheduler = get_scheduler( 82 | "linear", 83 | optimizer=optimizer, 84 | num_warmup_steps=int(0.1 * num_training_steps), # 10% warmup 85 | num_training_steps=num_training_steps, 86 | ) 87 | 88 | # Define the Trainer for model training 89 | trainer = Trainer( 90 | model=model, 91 | eval_dataset=val_dataset, 92 | args=training_args, 93 | train_dataset=dataset, 94 | tokenizer=processor, 95 | data_collator=collate_fn, 96 | optimizers=(optimizer, scheduler) 97 | ) 98 | 99 | # Start the training process 100 | try: 101 | for epoch in range(training_args.num_train_epochs): 102 | trainer.train() 103 | torch.cuda.empty_cache() 104 | eval_results = trainer.evaluate() 105 | except RuntimeError as e: 106 | if 'out of memory' in str(e): 107 | print("Out of memory error. Consider alternatives like smaller models or CPU training.") 108 | torch.cuda.empty_cache() 109 | 110 | # Save the trained model and processor 111 | model.save_pretrained("./wav2vec2_finetuned") 112 | processor.save_pretrained("./wav2vec2_finetuned") -------------------------------------------------------------------------------- /Dr_Akbari/Varianse_classes.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | --- 4 | 5 | # 🎯 هدف: 6 | 7 | تحلیل ویژگی‌ها با استفاده از **تحلیل واریانس بین کلاس‌ها** و سپس بررسی فاصله داده تست از میانگین ویژگی‌ها در هر کلاس. 8 | 9 | --- 10 | 11 | ## 🧾 داده‌ها 12 | 13 | ### ✅ داده‌های آموزشی (ویژگی‌ها + کلاس): 14 | 15 | | نمونه | F1 | F2 | F3 | F4 | کلاس | 16 | | ----- | -- | -- | -- | -- | ---- | 17 | | x1 | 1 | 2 | 8 | 9 | 1 | 18 | | x2 | 2 | 3 | 7 | 7 | 1 | 19 | | x3 | 3 | 4 | 6 | 5 | 1 | 20 | | x4 | 4 | 5 | 5 | 6 | 1 | 21 | | x5 | 5 | 6 | 4 | 8 | 2 | 22 | | x6 | 6 | 7 | 3 | 9 | 2 | 23 | | x7 | 7 | 8 | 2 | 7 | 2 | 24 | | x8 | 8 | 9 | 2 | 5 | 2 | 25 | 26 | ### ✅ داده تست: 27 | 28 | $$ 29 | \text{test} = (1.5,\ 7,\ 2,\ 7) 30 | $$ 31 | 32 | --- 33 | 34 | ## ✅ گام 1: نرمال‌سازی داده‌ها در بازه $[-1, 1]$ 35 | 36 | فرمول نرمال‌سازی: 37 | 38 | $$ 39 | x' = \left( \frac{x - x_{\min}}{x_{\max} - x_{\min}} \times 2 \right) - 1 40 | $$ 41 | 42 | ### 🔍 حداقل و حداکثر برای هر ویژگی: 43 | 44 | | ویژگی | min | max | 45 | | ----- | --- | --- | 46 | | F1 | 1 | 8 | 47 | | F2 | 2 | 9 | 48 | | F3 | 2 | 8 | 49 | | F4 | 5 | 9 | 50 | 51 | ### 🔢 نرمال‌سازی داده تست: 52 | 53 | * F1: 54 | 55 | $$ 56 | \left( \frac{1.5 - 1}{7} \times 2 \right) - 1 = \frac{1}{7} - 1 = -\frac{6}{7} 57 | $$ 58 | 59 | * F2: 60 | 61 | $$ 62 | \left( \frac{7 - 2}{7} \times 2 \right) - 1 = 2 - 1 = 1 63 | $$ 64 | 65 | * F3: 66 | 67 | $$ 68 | \left( \frac{2 - 2}{6} \times 2 \right) - 1 = 0 - 1 = -1 69 | $$ 70 | 71 | * F4: 72 | 73 | $$ 74 | \left( \frac{7 - 5}{4} \times 2 \right) - 1 = 1 - 1 = 0 75 | $$ 76 | 77 | ✅ **داده تست نرمال‌شده**: 78 | 79 | $$ 80 | \text{test}' = \left( -\frac{6}{7},\ 1,\ -1,\ 0 \right) 81 | $$ 82 | 83 | --- 84 | 85 | ## ✅ گام 2: میانگین ویژگی‌ها در هر کلاس 86 | 87 | ### کلاس 1 (x1 تا x4): 88 | 89 | | ویژگی | مقادیر | میانگین | 90 | | ----- | ------------- | ------- | 91 | | F1 | \[1, 2, 3, 4] | 2.5 | 92 | | F2 | \[2, 3, 4, 5] | 3.5 | 93 | | F3 | \[8, 7, 6, 5] | 6.5 | 94 | | F4 | \[9, 7, 5, 6] | 6.75 | 95 | 96 | ### کلاس 2 (x5 تا x8): 97 | 98 | | ویژگی | مقادیر | میانگین | 99 | | ----- | ------------- | ------- | 100 | | F1 | \[5, 6, 7, 8] | 6.5 | 101 | | F2 | \[6, 7, 8, 9] | 7.5 | 102 | | F3 | \[4, 3, 2, 2] | 2.75 | 103 | | F4 | \[8, 9, 7, 5] | 7.25 | 104 | 105 | --- 106 | 107 | ## ✅ گام 3: نرمال‌سازی میانگین‌های هر کلاس 108 | 109 | ### نرمال‌سازی کلاس 1: 110 | 111 | * F1: 112 | 113 | $$ 114 | \left( \frac{2.5 - 1}{7} \times 2 \right) - 1 = \frac{3}{7} - 1 = -\frac{4}{7} 115 | $$ 116 | 117 | * F2: 118 | 119 | $$ 120 | \left( \frac{3.5 - 2}{7} \times 2 \right) - 1 = \frac{3}{7} - 1 = -\frac{4}{7} 121 | $$ 122 | 123 | * F3: 124 | 125 | $$ 126 | \left( \frac{6.5 - 2}{6} \times 2 \right) - 1 = \frac{9}{6} - 1 = 0.5 127 | $$ 128 | 129 | * F4: 130 | 131 | $$ 132 | \left( \frac{6.75 - 5}{4} \times 2 \right) - 1 = \frac{3.5}{4} \times 2 - 1 = 1.75 - 1 = 0.75 133 | $$ 134 | 135 | ### نرمال‌سازی کلاس 2: 136 | 137 | * F1: 138 | 139 | $$ 140 | \left( \frac{6.5 - 1}{7} \times 2 \right) - 1 = \frac{11}{7} - 1 = \frac{4}{7} 141 | $$ 142 | 143 | * F2: 144 | 145 | $$ 146 | \left( \frac{7.5 - 2}{7} \times 2 \right) - 1 = \frac{11}{7} - 1 = \frac{4}{7} 147 | $$ 148 | 149 | * F3: 150 | 151 | $$ 152 | \left( \frac{2.75 - 2}{6} \times 2 \right) - 1 = \frac{1.5}{6} \times 2 - 1 = 0.5 - 1 = -0.75 153 | $$ 154 | 155 | * F4: 156 | 157 | $$ 158 | \left( \frac{7.25 - 5}{4} \times 2 \right) - 1 = 1.125 - 1 = 0.125 159 | $$ 160 | 161 | --- 162 | 163 | ## ✅ گام 4: محاسبه فاصله بین داده تست و میانگین‌های نرمال‌شده 164 | 165 | \| ویژگی | تست (نرمال) | \$\bar{f}\_j^+\$ (نرمال) | \$\bar{f}\_j^-\$ (نرمال) | \$| \text{test} - \bar{f}\_j^+ |\$ | \$| \text{test} - \bar{f}\_j^- |\$ | 166 | \|--------|----------------|--------------------------|--------------------------|------------------------------|------------------------------| 167 | \| F1 | \$-\frac{6}{7}\$ | \$-\frac{4}{7}\$ | \$\frac{4}{7}\$ | \$\frac{2}{7}\$ | \$\frac{10}{7}\$ | 168 | \| F2 | 1 | \$-\frac{4}{7}\$ | \$\frac{4}{7}\$ | \$\frac{11}{7}\$ | \$\frac{3}{7}\$ | 169 | \| F3 | -1 | 0.5 | -0.75 | \$1.5\$ | \$0.25\$ | 170 | \| F4 | 0 | 0.75 | 0.125 | \$0.75\$ | \$0.125\$ | 171 | 172 | --- 173 | 174 | ## ✅ نتیجه‌گیری: 175 | 176 | | ویژگی | فاصله از کلاس 1 | فاصله از کلاس 2 | نزدیک‌تر به | 177 | | ----- | --------------- | --------------- | ----------- | 178 | | F1 | 0.286 | 1.429 | کلاس 1 | 179 | | F2 | 1.571 | 0.429 | کلاس 2 | 180 | | F3 | 1.5 | 0.25 | کلاس 2 | 181 | | F4 | 0.75 | 0.125 | کلاس 2 | 182 | 183 | 🔍 نتیجه نهایی: داده تست به کلاس 2 نزدیک‌تر است، به‌خصوص در ویژگی‌های **F2، F3 و F4**. 184 | 185 | --- 186 | -------------------------------------------------------------------------------- /more.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Operagi 7 | 101 | 107 | 108 | 109 |
110 |
111 |

Operagi

112 |
113 |
لینک 1
114 | 115 |
116 |
117 |
لینک 2
118 | 119 |
120 |
121 |
لینک 3
122 | 123 |
124 | 125 |
126 |
127 | 128 | -------------------------------------------------------------------------------- /Course/NLTK/NLTK.md: -------------------------------------------------------------------------------- 1 | # 📖 کتابخانه NLTK چیست؟ 2 | 3 | **NLTK (Natural Language Toolkit)** یکی از پرکاربردترین کتابخانه‌های پایتون برای پردازش زبان طبیعی (NLP) است. این کتابخانه مجموعه‌ای از ابزارها، پیکره‌ها (دیتاست‌ها) و امکانات برای کار با داده‌های متنی (زبان انسانی) فراهم می‌کند. 🌟 4 | 5 | ## کاربردهای اصلی NLTK: 6 | - **پیش‌پردازش متن** (توکنیزه‌کردن، ریشه‌یابی، لماتیزه‌کردن و …) 7 | - **تحلیل زبان‌شناختی** (برچسب‌گذاری اجزای کلام، تجزیه، شناسایی موجودیت‌ها) 8 | - **ساخت برنامه‌های NLP** (چت‌بات، تحلیل احساسات، دسته‌بندی متن و …) 🤖 9 | 10 | --- 11 | 12 | ## ⚙️ ویژگی‌های کلیدی NLTK 13 | 14 | 1. **ابزارهای پردازش متن** 15 | - **توکنیزه‌کردن** → تقسیم متن به کلمات یا جملات 16 | - **ریشه‌یابی (Stemming)** → برگرداندن کلمات به ریشه (مثل: “running” → “run”) 17 | - **لماتیزه‌کردن** → نسخه دقیق‌تر ریشه‌یابی که با توجه به معنا و فرهنگ لغت عمل می‌کند (مثل: “better” → “good”) 18 | - **حذف کلمات ایست (Stopwords)** → حذف کلماتی مثل “است”، “و”، “که” 19 | - **برچسب‌گذاری اجزای کلام (POS Tagging)** → تشخیص نقش کلمات (اسم، فعل، صفت و …) 20 | - **شناسایی موجودیت‌های نامدار (NER)** → استخراج نام افراد، مکان‌ها، تاریخ‌ها و … 21 | 22 | 2. **پیکره‌ها و منابع واژگانی** 23 | - بیش از ۵۰ دیتاست و پیکره آماده دارد، از جمله: 24 | - **WordNet** (واژگان انگلیسی) 25 | - **Brown Corpus** (متون کلاسیک انگلیسی) 26 | - **Movie Reviews** (بررسی احساسات فیلم‌ها) 27 | - **Gutenberg Corpus** (متون ادبی کلاسیک) 📚 28 | 29 | 3. **ابزارهای زبان‌شناسی** 30 | - **تجزیه و ترسیم درخت‌های نحوی** 31 | - **بررسی فراوانی کلمات و همایندی‌ها** 32 | - **تحلیل هم‌آیی واژه‌ها** (مثل: “چای داغ”) 33 | 34 | 4. **یادگیری ماشین** 35 | - پشتیبانی از دسته‌بندی متن 36 | - **الگوریتم‌هایی** مثل Naive Bayes، درخت تصمیم، مدل‌های آنتروپی بیشینه 37 | - قابلیت اتصال به **scikit-learn** برای مدل‌های پیشرفته‌تر 38 | 39 | 5. **تمرکز آموزشی** 40 | - به خاطر سادگی و مستندات زیاد، در دانشگاه‌ها و آموزش NLP بسیار استفاده می‌شود. 🎓 41 | 42 | --- 43 | 44 | ## 🛠 نصب 45 | 46 | برای نصب NLTK می‌توانید از دستور زیر استفاده کنید: 47 | 48 | ```bash 49 | pip install nltk 50 | ``` 51 | 52 | برای دانلود منابع: 53 | 54 | ```python 55 | import nltk 56 | nltk.download('all') 57 | ``` 58 | 59 | (یا می‌توانید فقط بسته‌های موردنیاز را دانلود کنید مثل: `nltk.download('punkt')`) 60 | 61 | --- 62 | 63 | ## 🔑 ماژول‌های اصلی NLTK 64 | 65 | 1. `nltk.tokenize` → توکنیزه کردن (تقسیم متن) 66 | 2. `nltk.corpus` → دسترسی به دیتاست‌ها 67 | 3. `nltk.stem` → ریشه‌یابی و لماتیزه کردن 68 | 4. `nltk.tag` → برچسب‌گذاری اجزای کلام 69 | 5. `nltk.chunk` → شناسایی موجودیت‌های نامدار 70 | 6. `nltk.parse` → تجزیه نحوی 71 | 7. `nltk.classify` → دسته‌بندی متن 72 | 8. `nltk.probability` → توزیع فراوانی 73 | 9. `nltk.sentiment` → تحلیل احساسات 74 | 75 | --- 76 | 77 | ## 📝 نمونه کدها 78 | 79 | ### ۱. توکنیزه کردن 80 | 81 | ```python 82 | from nltk.tokenize import word_tokenize, sent_tokenize 83 | 84 | text = "NLTK is a great library for NLP. It makes text analysis easy!" 85 | print(word_tokenize(text)) 86 | print(sent_tokenize(text)) 87 | ``` 88 | 89 | ### ۲. ریشه‌یابی و لماتیزه کردن 90 | 91 | ```python 92 | from nltk.stem import PorterStemmer, WordNetLemmatizer 93 | 94 | stemmer = PorterStemmer() 95 | lemmatizer = WordNetLemmatizer() 96 | 97 | print(stemmer.stem("running")) # run 98 | print(lemmatizer.lemmatize("better", pos="a")) # good 99 | ``` 100 | 101 | ### ۳. برچسب‌گذاری اجزای کلام 102 | 103 | ```python 104 | import nltk 105 | from nltk.tokenize import word_tokenize 106 | 107 | nltk.download('averaged_perceptron_tagger') 108 | words = word_tokenize("The quick brown fox jumps over the lazy dog.") 109 | print(nltk.pos_tag(words)) 110 | ``` 111 | 112 | ### ۴. شناسایی موجودیت‌ها (NER) 113 | 114 | ```python 115 | from nltk import ne_chunk, pos_tag, word_tokenize 116 | from nltk.tree import Tree 117 | 118 | nltk.download('maxent_ne_chunker') 119 | nltk.download('words') 120 | 121 | text = "Barack Obama was born in Hawaii." 122 | tokens = word_tokenize(text) 123 | tags = pos_tag(tokens) 124 | tree = ne_chunk(tags) 125 | 126 | for subtree in tree: 127 | if isinstance(subtree, Tree): 128 | print(subtree.label(), " ".join([token for token, pos in subtree.leaves()])) 129 | ``` 130 | 131 | ### ۵. توزیع فراوانی 132 | 133 | ```python 134 | from nltk import FreqDist 135 | 136 | words = word_tokenize("NLTK is great. NLTK makes NLP simple. NLP is powerful.") 137 | fdist = FreqDist(words) 138 | print(fdist.most_common(3)) 139 | ``` 140 | 141 | --- 142 | 143 | ## ✅ مزایای NLTK 144 | - **یادگیری آسان** (مناسب برای مبتدیان و آموزش) 145 | - **مجموعه بزرگی از دیتاست‌ها و منابع آماده** 146 | - **توابع کاربردی فراوان برای پردازش متن** 147 | - **پشتیبانی قوی** در حوزه زبان‌شناسی 148 | 149 | ## ⚠️ محدودیت‌ها 150 | - **سرعت پایین‌تر** نسبت به کتابخانه‌های جدیدتر مثل spaCy 151 | - **مناسب نبودن برای تولید** (Production) → بیشتر برای تحقیق و آموزش استفاده می‌شود 152 | - **مدل‌های قدیمی یادگیری ماشین** (بدون پشتیبانی از روش‌های عمیق) 153 | 154 | --- 155 | 156 | ## 🔮 جایگزین‌ها 157 | - **spaCy** → سریع‌تر و مدرن‌تر، مناسب تولید 158 | - **TextBlob** → ساده‌تر برای کارهای مقدماتی 159 | - **Hugging Face Transformers** → پیشرفته‌ترین مدل‌های یادگیری عمیق NLP 160 | 161 | --- 162 | 163 | ## ✅ خلاصه: 164 | **NLTK** یک کتابخانه پایه و آموزشی برای NLP در پایتون است. برای یادگیری و آزمایش عالی است، اما در پروژه‌های بزرگ و کاربردی معمولاً در کنار **spaCy** یا **Transformers** استفاده می‌شود. 🌈 165 | -------------------------------------------------------------------------------- /ChatBot/main.py: -------------------------------------------------------------------------------- 1 | import random 2 | import json 3 | import pickle 4 | import nltk 5 | from nltk.stem import WordNetLemmatizer 6 | from tensorflow.keras.models import load_model 7 | import numpy as np 8 | import speech_recognition as sr 9 | from gtts import gTTS 10 | from playsound import playsound 11 | 12 | # Initialize the lemmatizer 13 | lemmatizer = WordNetLemmatizer() 14 | 15 | # Load intents, words, classes, and the trained model 16 | intents = json.loads(open("intents_fa.json").read()) 17 | words = pickle.load(open('words_fa.pkl', 'rb')) 18 | classes = pickle.load(open('classes_fa.pkl', 'rb')) 19 | model = load_model('chatbot_model_fa.h5') 20 | 21 | # Function to clean up the input sentence 22 | def clean_up_sentence(sentence): 23 | sentence_words = nltk.word_tokenize(sentence) # Tokenize the sentence 24 | return [lemmatizer.lemmatize(word) for word in sentence_words] # Lemmatize each word 25 | 26 | # Function to create a bag of words representation 27 | def bag_of_words(sentence): 28 | sentence_words = clean_up_sentence(sentence) 29 | bag = [0] * len(words) # Initialize bag of words 30 | for w in sentence_words: 31 | for i, word in enumerate(words): 32 | if word == w: 33 | bag[i] = 1 # Mark the presence of the word in the bag 34 | return np.array(bag) # Return as numpy array 35 | 36 | # Function to predict the class of the input sentence 37 | def predict_class(sentence): 38 | bow = bag_of_words(sentence) # Get bag of words 39 | res = model.predict(np.array([bow]))[0] # Predict using the model 40 | ERROR_THRESHOLD = 0.25 41 | results = [[i, r] for i, r in enumerate(res) if r > ERROR_THRESHOLD] # Filter results base on the class is heigher than 0.25 42 | results.sort(key=lambda x: x[1], reverse=True) # Sort by probability 43 | return [{'intent': classes[r[0]], 'probability': str(r[1])} for r in results] # Return intents 44 | 45 | # Function to get a response based on the predicted intents 46 | def get_response(intents_list): 47 | if not intents_list: # Check if the list is empty 48 | return "I'm sorry, I couldn't find any information related to that." 49 | 50 | tag = intents_list[0]['intent'] # Get the top intent 51 | for i in intents['intents']: 52 | if i['tag'] == tag: 53 | return random.choice(i['responses']) # Return a random response 54 | return "" 55 | 56 | # Function to convert text to speech and play it 57 | def speak(text): 58 | tts = gTTS(text=text, lang='en') # Convert text to speech 59 | filename = "response.mp3" 60 | tts.save(filename) # Save the audio file 61 | playsound(filename) # Play the audio file 62 | 63 | # Function to handle the bot's response to user input 64 | def calling_the_bot(txt): 65 | predict = predict_class(txt) # Predict the class of the input 66 | res = get_response(predict) # Get the corresponding response 67 | speak("Found it. From our Database we found that " + res) # Speak the response 68 | print("Your Symptom was: ", txt) # Print the user's input 69 | print("Result found in our Database: ", res) # Print the bot's response 70 | 71 | # Main function to run the chatbot 72 | if __name__ == '__main__': 73 | print("Bot is Running") 74 | recognizer = sr.Recognizer() # Initialize the recognizer 75 | mic = sr.Microphone() # Use the microphone as input 76 | speak("Hello user, I am Siyamak, your personal Talking Healthcare Chatbot.") # Greet the user 77 | 78 | while True: 79 | with mic as source: 80 | print("Say Your Symptoms. The Bot is Listening") 81 | speak("You may tell me your symptoms now. I am listening") # Prompt for symptoms 82 | recognizer.adjust_for_ambient_noise(source) # Adjust for ambient noise 83 | symp = recognizer.listen(source) # Listen for user input 84 | 85 | try: 86 | text = recognizer.recognize_google(symp) # Recognize speech 87 | speak("You said {}".format(text)) # Confirm what was said 88 | speak("Scanning our database for your symptom. Please wait.") # Notify the user 89 | calling_the_bot(text) # Process the input 90 | except sr.UnknownValueError: 91 | speak("Sorry, I could not understand your symptoms. Please try again.") # Handle unrecognized speech 92 | print("Sorry, I could not understand your symptoms.") 93 | except sr.RequestError: 94 | speak("Could not request results from Google Speech Recognition service.") # Handle request errors 95 | print("Could not request results from Google Speech Recognition service.") 96 | 97 | # Ask if the user wants to continue 98 | speak("If you want to continue please say Yes otherwise say exit") 99 | with mic as ans: 100 | recognizer.adjust_for_ambient_noise(ans) # Adjust for ambient noise 101 | voice = recognizer.listen(ans) # Listen for the user's response 102 | 103 | final = recognizer.recognize_google(voice).lower() # Recognize the response 104 | if final in ['no', 'please exit', 'false']: # Check if the user wants to exit 105 | speak("Thank You. Shutting Down now.") # Thank the user 106 | print("Bot has been stopped by the user") # Log the exit 107 | break 108 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Operagi 7 | 101 | 107 | 108 | 109 |
110 |
111 |

Operagi

112 |
113 |
Link 1
114 | 115 |
116 |
117 |
Link 2
118 | 119 |
120 |
121 |
Link 3
122 | 123 |
124 | 125 |
126 |
127 | 128 | -------------------------------------------------------------------------------- /language-translator-ml-codes/langTraining.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | #DataFlair Project 3 | 4 | #Load all the required modules. 5 | from tensorflow.keras.models import Model 6 | from tensorflow.keras import models 7 | from tensorflow.keras.utils import plot_model 8 | from tensorflow.keras.layers import Input,LSTM,Dense 9 | from sklearn.feature_extraction.text import CountVectorizer 10 | import numpy as np 11 | import pickle 12 | 13 | #initialize all variables 14 | input_texts=[] 15 | target_texts=[] 16 | input_characters=set() 17 | target_characters=set() 18 | 19 | #read dataset file 20 | with open('eng-french.txt','r',encoding='utf-8') as f: 21 | rows=f.read().split('\n') 22 | #read first 10,000 rows from dataset 23 | for row in rows[:10000]: 24 | #split input and target by '\t'=tab 25 | input_text,target_text = row.split('\t') 26 | #add '\t' at start and '\n' at end of text. 27 | target_text='\t' + target_text + '\n' 28 | input_texts.append(input_text.lower()) 29 | target_texts.append(target_text.lower()) 30 | #split character from text and add in respective sets 31 | input_characters.update(list(input_text.lower())) 32 | target_characters.update(list(target_text.lower())) 33 | 34 | #sort input and target characters 35 | input_characters = sorted(list(input_characters)) 36 | target_characters = sorted(list(target_characters)) 37 | #get the total length of input and target characters 38 | num_en_chars = len(input_characters) 39 | num_dec_chars = len(target_characters) 40 | #get the maximum length of input and target text. 41 | max_input_length = max([len(i) for i in input_texts]) 42 | max_target_length = max([len(i) for i in target_texts]) 43 | 44 | def bagofcharacters(input_texts,target_texts): 45 | #inintialize encoder , decoder input and target data. 46 | en_in_data=[] ; dec_in_data=[] ; dec_tr_data=[] 47 | #padding variable with first character as 1 as rest all 0. 48 | pad_en=[1]+[0]*(len(input_characters)-1) 49 | pad_dec=[0]*(len(target_characters)) ; pad_dec[2]=1 50 | #countvectorizer for one hot encoding as we want to tokenize character so 51 | #anlyzer is true and None the stopwords action. 52 | cv=CountVectorizer(binary=True,tokenizer=lambda txt: txt.split(),stop_words=None,analyzer='char') 53 | for i,(input_t,target_t) in enumerate(zip(input_texts,target_texts)): 54 | #fit the input characters into the CountVectorizer function 55 | cv_inp= cv.fit(input_characters) 56 | 57 | #transform the input text from the help of CountVectorizer fit. 58 | #it character present than put 1 and 0 otherwise. 59 | en_in_data.append(cv_inp.transform(list(input_t)).toarray().tolist()) 60 | cv_tar= cv.fit(target_characters) 61 | dec_in_data.append(cv_tar.transform(list(target_t)).toarray().tolist()) 62 | #decoder target will be one timestep ahead because it will not consider 63 | #the first character i.e. '\t'. 64 | dec_tr_data.append(cv_tar.transform(list(target_t)[1:]).toarray().tolist()) 65 | 66 | #add padding variable if the length of the input or target text is smaller 67 | #than their respective maximum input or target length. 68 | if len(input_t) < max_input_length: 69 | for _ in range(max_input_length-len(input_t)): 70 | en_in_data[i].append(pad_en) 71 | if len(target_t) < max_target_length: 72 | for _ in range(max_target_length-len(target_t)): 73 | dec_in_data[i].append(pad_dec) 74 | if (len(target_t)-1) < max_target_length: 75 | for _ in range(max_target_length-len(target_t)+1): 76 | dec_tr_data[i].append(pad_dec) 77 | 78 | #convert list to numpy array with data type float32 79 | en_in_data=np.array(en_in_data,dtype="float32") 80 | dec_in_data=np.array(dec_in_data,dtype="float32") 81 | dec_tr_data=np.array(dec_tr_data,dtype="float32") 82 | 83 | return en_in_data,dec_in_data,dec_tr_data 84 | 85 | #create input object of total number of encoder characters 86 | en_inputs = Input(shape=(None, num_en_chars)) 87 | #create LSTM with the hidden dimension of 256 88 | #return state=True as we don't want output sequence. 89 | encoder = LSTM(256, return_state=True) 90 | #discard encoder output and store hidden and cell state. 91 | en_outputs, state_h, state_c = encoder(en_inputs) 92 | en_states = [state_h, state_c] 93 | 94 | #create input object of total number of decoder characters 95 | dec_inputs = Input(shape=(None, num_dec_chars)) 96 | #create LSTM with the hidden dimension of 256 97 | #return state and return sequences as we want output sequence. 98 | dec_lstm = LSTM(256, return_sequences=True, return_state=True) 99 | #initialize the decoder model with the states on encoder. 100 | dec_outputs, _, _ = dec_lstm(dec_inputs, initial_state=en_states) 101 | #Output layer with shape of total number of decoder characters 102 | dec_dense = Dense(num_dec_chars, activation="softmax") 103 | dec_outputs = dec_dense(dec_outputs) 104 | 105 | #create Model and store all variables 106 | model = Model([en_inputs, dec_inputs], dec_outputs) 107 | pickle.dump({'input_characters':input_characters,'target_characters':target_characters, 108 | 'max_input_length':max_input_length,'max_target_length':max_target_length, 109 | 'num_en_chars':num_en_chars,'num_dec_chars':num_dec_chars},open("training_data.pkl","wb")) 110 | 111 | #load the data and train the model 112 | en_in_data,dec_in_data,dec_tr_data = bagofcharacters(input_texts,target_texts) 113 | model.compile( 114 | optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"] 115 | ) 116 | model.fit( 117 | [en_in_data, dec_in_data], 118 | dec_tr_data, 119 | batch_size=64, 120 | epochs=200, 121 | validation_split=0.2, 122 | ) 123 | # Save model 124 | model.save("s2s") 125 | 126 | #summary and model plot 127 | model.summary() 128 | plot_model(model, to_file='model_plot.png', show_shapes=True, show_layer_names=True) 129 | -------------------------------------------------------------------------------- /agi/repair_sound.py: -------------------------------------------------------------------------------- 1 | import os 2 | import torchaudio 3 | import torch 4 | import numpy as np 5 | 6 | # مسیر پوشه حاوی فایل‌های صوتی 7 | audio_folder = './clips' # مسیر پوشه خود را مشخص کنید 8 | output_folder = './final_audio' # مسیر ذخیره فایل‌های بهبود یافته 9 | 10 | # ایجاد پوشه خروجی در صورت عدم وجود 11 | if not os.path.exists(output_folder): 12 | os.makedirs(output_folder) 13 | 14 | # پردازش فایل‌های صوتی 15 | for audio_file in os.listdir(audio_folder): 16 | if audio_file.endswith('.mp3') or audio_file.endswith('.wav'): 17 | file_path = os.path.join(audio_folder, audio_file) 18 | 19 | try: 20 | # بارگذاری فایل صوتی با torchaudio 21 | audio, sr = torchaudio.load(file_path) 22 | 23 | # بررسی طول سیگنال 24 | if audio.shape[1] < sr: # کمتر از 1 ثانیه 25 | print(f"Audio file {audio_file} is too short for noise reduction. Skipping.") 26 | continue 27 | 28 | # بررسی وجود سیگنال‌های NaN یا inf 29 | if torch.any(torch.isnan(audio)) or torch.any(torch.isinf(audio)): 30 | print(f"Audio file {audio_file} contains NaN or infinite values. Skipping.") 31 | continue 32 | 33 | # کاهش نویز با استفاده از فیلتر پایین‌گذر (Low-pass Filter) 34 | try: 35 | # اعمال فیلتر پایین‌گذر 36 | cutoff_freq = 3000 # فرکانس قطع (بر حسب هرتز) 37 | filtered_audio = torchaudio.functional.lowpass_biquad(audio, sr, cutoff_freq=cutoff_freq) 38 | 39 | # اعمال فیلتر بالا‌گذر (High-pass Filter) برای حذف نویز فرکانس پایین 40 | cutoff_freq_high = 200 # فرکانس قطع (بر حسب هرتز) 41 | filtered_audio = torchaudio.functional.highpass_biquad(filtered_audio, sr, cutoff_freq=cutoff_freq_high) 42 | 43 | except Exception as filter_error: 44 | print(f"Noise reduction failed for {audio_file}: {filter_error}. Skipping this file.") 45 | continue # ادامه به فایل بعدی 46 | 47 | # ذخیره فایل بهبود یافته 48 | output_file_path = os.path.join(output_folder, audio_file) 49 | torchaudio.save(output_file_path, filtered_audio, sr) 50 | 51 | print(f"Processed {audio_file} and saved to {output_file_path}") 52 | 53 | except Exception as e: 54 | print(f"Error processing {audio_file}: {e}. Skipping this file.") 55 | continue # ادامه به فایل بعدی 56 | 57 | print("All files processed.") 58 | # ============================================== 59 | 60 | # import os 61 | # import numpy as np 62 | # from scipy.signal import butter, filtfilt 63 | # from pydub import AudioSegment 64 | # from pydub.playback import play 65 | 66 | # # مسیر پوشه حاوی فایل‌های صوتی 67 | # audio_folder = './clips' # مسیر پوشه خود را مشخص کنید 68 | # output_folder = './enhanced_audio' # مسیر ذخیره فایل‌های بهبود یافته 69 | 70 | # # ایجاد پوشه خروجی در صورت عدم وجود 71 | # if not os.path.exists(output_folder): 72 | # os.makedirs(output_folder) 73 | 74 | # # طراحی فیلتر پایین‌گذر باترورث 75 | # def butter_lowpass(cutoff, sr, order=5): 76 | # nyquist = 0.5 * sr 77 | # normal_cutoff = cutoff / nyquist 78 | # b, a = butter(order, normal_cutoff, btype='low', analog=False) 79 | # return b, a 80 | 81 | # # اعمال فیلتر پایین‌گذر 82 | # def lowpass_filter(data, cutoff, sr, order=5): 83 | # b, a = butter_lowpass(cutoff, sr, order=order) 84 | # y = filtfilt(b, a, data) 85 | # return y 86 | 87 | # # پردازش فایل‌های صوتی 88 | # for audio_file in os.listdir(audio_folder): 89 | # if audio_file.endswith('.mp3') or audio_file.endswith('.wav'): 90 | # file_path = os.path.join(audio_folder, audio_file) 91 | 92 | # try: 93 | # # بارگذاری فایل صوتی با pydub 94 | # audio = AudioSegment.from_file(file_path) 95 | 96 | # # تبدیل به آرایه numpy 97 | # samples = np.array(audio.get_array_of_samples()) 98 | # sr = audio.frame_rate 99 | 100 | # # بررسی طول سیگنال 101 | # if len(samples) < sr: # کمتر از 1 ثانیه 102 | # print(f"Audio file {audio_file} is too short for noise reduction. Skipping.") 103 | # continue 104 | 105 | # # بررسی وجود سیگنال‌های NaN یا inf 106 | # if np.any(np.isnan(samples)) or np.any(np.isinf(samples)): 107 | # print(f"Audio file {audio_file} contains NaN or infinite values. Skipping.") 108 | # continue 109 | 110 | # # کاهش نویز با فیلتر پایین‌گذر 111 | # try: 112 | # cutoff_freq = 3000 # فرکانس قطع (بر حسب هرتز) 113 | # filtered_samples = lowpass_filter(samples, cutoff_freq, sr) 114 | 115 | # # تبدیل به AudioSegment 116 | # filtered_audio = AudioSegment( 117 | # filtered_samples.tobytes(), 118 | # frame_rate=sr, 119 | # sample_width=audio.sample_width, 120 | # channels=audio.channels 121 | # ) 122 | 123 | # except Exception as filter_error: 124 | # print(f"Noise reduction failed for {audio_file}: {filter_error}. Skipping this file.") 125 | # continue # ادامه به فایل بعدی 126 | 127 | # # ذخیره فایل بهبود یافته 128 | # output_file_path = os.path.join(output_folder, audio_file) 129 | # filtered_audio.export(output_file_path, format="wav") 130 | 131 | # print(f"Processed {audio_file} and saved to {output_file_path}") 132 | 133 | # except Exception as e: 134 | # print(f"Error processing {audio_file}: {e}. Skipping this file.") 135 | # continue # ادامه به فایل بعدی 136 | 137 | # print("All files processed.") -------------------------------------------------------------------------------- /NeuralComputing/Session_3.md: -------------------------------------------------------------------------------- 1 | 2 | ## 🎓 نمونه سوال امتحانی – شبکه‌های عصبی مصنوعی پارت 3 3 | 4 | ### 🧠 سوال ۱: 5 | 6 | پرسپترون چیست؟ چه محدودیتی دارد؟ 7 | 8 | **✅ پاسخ:** 9 | پرسپترون یک مدل ساده از نورون مصنوعی است که فقط قادر به حل مسائل **خطی جداپذیر** است. یعنی اگر داده‌ها با یک خط یا صفحه قابل جدا شدن نباشند، **قانون یادگیری پرسپترون همگرا نمی‌شود** و نمی‌تواند آن‌ها را به‌درستی طبقه‌بندی کند. 10 | ⚠️ **محدودیت اصلی:** عدم توانایی در یادگیری مسائل غیرخطی. 11 | 12 | --- 13 | 14 | ### ⚙️ سوال ۲: 15 | 16 | فرمول به‌روزرسانی وزن‌ها در قانون دلتا چیست؟ توضیح دهید. 17 | 18 | **✅ پاسخ:** 19 | فرمول کلی: 20 | 21 | $$ 22 | \Delta w_i = \eta (t - o)x_i 23 | $$ 24 | 25 | * $\eta$: نرخ یادگیری (Learning Rate) 26 | * $t$: خروجی هدف 27 | * $o$: خروجی واقعی 28 | * $x_i$: ورودی به نرون 29 | 30 | در این قانون، از **گرادیان نزولی** برای کاهش خطا استفاده می‌شود. وزن‌ها در جهت خلاف شیب خطا حرکت می‌کنند تا به مینیمم محلی برسند. 31 | 📉 **هدف:** کاهش تابع خطا. 32 | 33 | --- 34 | 35 | ### 🧮 سوال ۳: 36 | 37 | تفاوت گرادیان نزولی دسته‌ای (Batch) و تصادفی (SGD) در چیست؟ 38 | 39 | **✅ پاسخ:** 40 | 41 | | روش | ویژگی | مزیت | عیب | 42 | | ------------ | ------------------------------ | ---------------------------- | ------------- | 43 | | 🎲 **SGD** | استفاده از یک داده در هر مرحله | سریع‌تر، عبور از مینیمم محلی | نوسان بالا | 44 | | 📦 **Batch** | استفاده از کل داده‌ها | به‌روزرسانی دقیق | کند و پرهزینه | 45 | 46 | --- 47 | 48 | ### 🧪 سوال ۴: 49 | 50 | فرایند کلی آموزش شبکه عصبی چند لایه (MLP) را به‌اختصار نام ببرید. 51 | 52 | **✅ پاسخ:** 53 | 54 | 1. شناسایی ورودی و خروجی‌ها 📥📤 55 | 2. نرمال‌سازی داده‌ها 📏 56 | 3. طراحی ساختار شبکه 🧱 57 | 4. آموزش با داده‌های آموزشی 📚 58 | 5. اعتبارسنجی با داده‌های جدید ✅ 59 | 6. ارزیابی نهایی و استفاده برای پیش‌بینی 🔍 60 | 61 | 62 | --- 63 | 64 | ### 🔄 سوال ۵: 65 | 66 | الگوریتم **پس‌انتشار خطا (Back Propagation)** چگونه عمل می‌کند؟ 67 | 68 | **✅ پاسخ:** 69 | الگوریتم BP برای آموزش شبکه‌های چند لایه استفاده می‌شود. این الگوریتم به صورت زیر عمل می‌کند: 70 | 71 | 1. **جلو رفتن سیگنال (Forward Pass):** داده‌ها از ورودی به خروجی منتقل می‌شوند. 72 | 2. **محاسبه خطا (Error):** اختلاف خروجی شبکه با مقدار هدف محاسبه می‌شود. 73 | 3. **انتشار به عقب (Backward Pass):** خطا به صورت معکوس در شبکه پخش می‌شود و وزن‌ها بر اساس گرادیان نزولی به‌روزرسانی می‌شوند. 74 | 75 | 📌 از مشتق تابع فعال‌سازی (مانند سیگموید) استفاده می‌شود. 76 | 🎯 هدف: کاهش خطا در هر مرحله تکرار (epoch). 77 | 78 | --- 79 | 80 | ### 🔢 سوال ۶: 81 | 82 | فرمول محاسبه **گرادیان خطا در لایه خروجی و لایه پنهان** را بنویسید. 83 | 84 | **✅ پاسخ:** 85 | 86 | * برای نورون خروجی: 87 | 88 | $$ 89 | \delta_k = o_k (1 - o_k)(t_k - o_k) 90 | $$ 91 | 92 | * برای نورون پنهان: 93 | 94 | $$ 95 | \delta_j = o_j (1 - o_j) \sum_k W_{kj} \delta_k 96 | $$ 97 | 98 | ❗این فرمول‌ها نشان‌دهنده تاثیر خطای لایه بعد روی وزن‌های فعلی هستند. 99 | 📉 با استفاده از این δها، وزن‌ها به صورت زیر تغییر می‌کنند: 100 | 101 | $$ 102 | W = W + \eta \cdot \delta \cdot x 103 | $$ 104 | 105 | --- 106 | 107 | ### 🔁 سوال ۷: 108 | 109 | قانون **ممنتوم (Momentum)** در به‌روزرسانی وزن‌ها چیست و چه مزیتی دارد؟ 110 | 111 | **✅ پاسخ:** 112 | 113 | برای به‌روزرسانی وزن‌ها با در نظر گرفتن شیب مرحله قبل: 114 | 115 | $$ 116 | \Delta W_{ji}(n) = \eta \cdot \delta_j \cdot x_{ji} + \alpha \cdot \Delta W_{ji}(n-1) 117 | $$ 118 | 119 | که در آن: 120 | 121 | * $\eta$: نرخ یادگیری (Learning Rate) 122 | * $\alpha$: ضریب ممنتوم (که معمولاً بین ۰ و ۱ انتخاب می‌شود) 123 | * $\delta_j$: خطای نرون 124 | * $x_{ji}$: ورودی به نرون 125 | * $\Delta W_{ji}(n-1)$: تغییر وزن در تکرار قبلی 126 | 127 | 📌 **توضیح دقیق همان‌طور که در فایل آمده:** 128 | 129 | > مقدار $\alpha$ در بازه ۰ تا ۱ قرار دارد و اضافه کردن ممنتوم باعث می‌شود حرکت در مسیر قبلی حفظ شود و: 130 | > 131 | > * از گیر افتادن در **مینیمم محلی** جلوگیری شود ✅ 132 | > * از گیر افتادن در سطوح صاف تابع خطا جلوگیری شود ⚠️ 133 | > * با افزایش تدریجی مقدار گام، **سرعت جستجو افزایش یابد** 🚀 134 | 135 | 136 | 137 | --- 138 | ### 🚫 سوال ۸: 139 | 140 | سه شرط برای **توقف الگوریتم پس‌انتشار خطا (BP)** چیست؟ 141 | 142 | **✅ پاسخ:** 143 | 144 | 1. رسیدن به تعداد مشخصی از تکرارها (epochs) 🕒 145 | 2. کاهش خطا به زیر یک مقدار معین ✅ 146 | 3. افزایش خطا در داده‌های اعتبارسنجی (برای جلوگیری از overfitting) 📉 147 | 148 | --- 149 | 150 | ### 🧩 سوال ۹: 151 | 152 | تفاوت بین سه نوع **گرادیان نزولی (Gradient Descent)** را بنویسید. 153 | 154 | **✅ پاسخ:** 155 | 156 | | نوع | ویژگی | مزیت | محدودیت | 157 | | ------------------- | ------------------------ | ---------------- | --------------------------- | 158 | | 🧺 Batch | کل داده‌ها در هر تکرار | دقیق و پایدار | کند و نیازمند حافظه زیاد | 159 | | 🎲 Stochastic (SGD) | یک داده در هر تکرار | سریع و سبک | نوسان بالا | 160 | | 🧬 Mini-batch | گروه‌های کوچک از داده‌ها | تعادل سرعت و دقت | نیاز به انتخاب اندازه مناسب | 161 | 162 | 163 | --- 164 | 165 | ### 🔍 **سوال ۱۰:** 166 | 167 | چرا انتخاب مقدار اولیه وزن‌ها در شبکه‌های عصبی اهمیت دارد؟ 168 | **✅ پاسخ:** 169 | 170 | زیرا مقدار اولیه وزن‌ها می‌تواند مسیر همگرایی الگوریتم را مشخص کند. اگر وزن‌ها به‌درستی مقداردهی نشوند، ممکن است الگوریتم در **مینیمم محلی** گیر کند و بهینه‌سازی به درستی انجام نشود. 171 | 📌 برای این منظور، معمولاً از مقداردهی تصادفی کوچک استفاده می‌شود. 172 | 173 | --- 174 | 175 | ### 🌀 **سوال ۱۱:** 176 | 177 | چه مشکلاتی ممکن است در الگوریتم گرادیان نزولی رخ دهد؟ 178 | **✅ پاسخ:** 179 | 180 | 1. همگرایی کند یا ناپایدار 181 | 2. گیر افتادن در مینیمم محلی 182 | 3. نیاز به انتخاب دقیق نرخ یادگیری 183 | 4. مشکل در داده‌هایی که تابع خطای آن‌ها صاف یا نویزی است 184 | 185 | --- 186 | 187 | ### 🧠 **سوال ۱۲:** 188 | 189 | چه تفاوتی بین قانون پرسپترون و قانون دلتا وجود دارد؟ 190 | **✅ پاسخ:** 191 | 192 | | ویژگی | قانون پرسپترون | قانون دلتا | 193 | | ------------------- | -------------------------- | ----------------------------------------- | 194 | | داده‌های قابل آموزش | فقط جداپذیر خطی | شامل غیرخطی هم هست | 195 | | الگوریتم پایه | تغییر وزن با خطای صفر و یک | تغییر وزن با استفاده از گرادیان | 196 | | همگرایی | فقط در صورت جداپذیری خطی | همیشه همگرا (اگر تابع خطا مشتق‌پذیر باشد) | 197 | 198 | 199 | -------------------------------------------------------------------------------- /main.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | چت جی‌بی‌تی 7 | 8 | 106 | 107 | 108 |
109 | 110 | 116 | 117 | 118 |
119 |
120 | 121 |
122 |

سلام! چطور می‌توانم به شما کمک کنم؟

123 |
124 |
125 | 126 | 127 |
128 | 129 | 130 |
131 |
132 |
133 | 134 | 186 | 187 | 188 | -------------------------------------------------------------------------------- /NeuralComputing/Session_5.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | --- 9 | 10 | ### 📙 بخش اول: سوالات تشریحی 11 | 12 | ۱. **ساختار کلی شبکه SOM را توضیح دهید.** 13 | 14 | ✅ پاسخ: 15 | شبکه SOM شامل یک لایه ورودی و یک شبکه دو‌بعدی از نورون‌ها است که هر نورون دارای یک بردار وزن با ابعاد مشابه بردار ورودی است. نورون‌ها با بردارهای وزن خود در فضای داده‌ها قرار می‌گیرند و به‌مرور با یادگیری، این بردارها تنظیم می‌شوند. 16 | 17 | --- 18 | 19 | ۲. **سه فاز اصلی الگوریتم SOM را نام ببرید 🔄 و شرح دهید.** 20 | 21 | ✅ پاسخ: 22 | 23 | * **رقابت:** نورون با نزدیک‌ترین وزن به بردار ورودی انتخاب می‌شود. 24 | * **همکاری:** همسایگان نورون برنده مشخص می‌شوند. 25 | * **تطبیق:** وزن نورون برنده و همسایگان آن با نرخ یادگیری به‌روز می‌شود. 26 | 27 | --- 28 | 29 | ۳. **فرمول فاصله برای انتخاب نورون برنده چیست📐 ؟** 30 | 31 | ✅ پاسخ: 32 | 33 | $$ 34 | Distance = \sum_{i=1}^{n}(x_i - w_i)^2 35 | $$ 36 | 37 | نورونی با کمترین فاصله انتخاب می‌شود. 38 | 39 | --- 40 | 41 | ۴. **فرمول کاهش شعاع همسایگی را بنویسید📉 .** 42 | 43 | ✅ پاسخ: 44 | 45 | $$ 46 | \sigma(t) = \sigma_0 \cdot \exp\left(-\frac{t}{\lambda}\right) 47 | $$ 48 | 49 | --- 50 | 51 | 52 | ۵. **فرمول نرخ نفوذ همسایگی (Θ(t)) چیست و چه کاربردی دارد💡 ؟** 53 | 54 | ✅ پاسخ: 55 | 56 | $$ 57 | \Theta(t) = \exp\left(-\frac{dist^2}{2\sigma^2(t)}\right) 58 | $$ 59 | 60 | این مقدار تعیین می‌کند که نورون‌های مجاور تا چه میزان از بردار ورودی تأثیر بگیرند. 61 | 62 | --- 63 | 64 | ۶. **دو پارامتر حساس در SOM را نام ببرید و نقش آنها را توضیح دهید⚙️.** 65 | 66 | ✅ پاسخ: 67 | 68 | * نرخ یادگیری: تنظیم سرعت تغییر وزن نورون‌ها 69 | * شعاع همسایگی: تعیین محدوده نورون‌هایی که با نورون برنده تطبیق می‌یابند 70 | 71 | --- 72 | 73 | ۷. **تفاوت آموزش Batch با روش معمول در SOM چیست🧪؟** 74 | 75 | ✅ پاسخ: 76 | 77 | در آموزش Batch، به جای پردازش هر ورودی به‌تنهایی، مجموعه‌ای از ورودی‌ها به صورت دسته‌ای اعمال شده و تغییرات برآیند در وزن‌ها لحاظ می‌شود. این روش باعث پایداری بیشتر و همگرایی سریع‌تر می‌شود. 78 | 79 | --- 80 | 81 | ۸. **در آموزش SOM از تابع نمایی برای کاهش نرخ یادگیری η(t) استفاده می‌شود. چرا🧠؟** 82 | 83 | ✅ پاسخ: 84 | 85 | این کاهش باعث تثبیت تدریجی شبکه شده و از تغییرات ناگهانی در مراحل پایانی یادگیری جلوگیری می‌کند. 86 | 87 | --- 88 | 89 | ۹. **توپولوژی شبکه در متلب چگونه تعیین می‌شود و چه کاربردی دارد🧮؟** 90 | 91 | ✅ پاسخ: 92 | 93 | با استفاده از تابع `hextop` شبکه‌ای با ساختار شش‌ضلعی تعریف می‌شود که ارتباط میان نورون‌ها را بهتر مدیریت می‌کند و در بهبود همگرایی مؤثر است. 94 | 95 | --- 96 | 97 | ۱۰. **دو کاربرد عملی SOM را نام ببرید و توضیح دهید🏥.** 98 | 99 | ✅ پاسخ: 100 | 101 | * **بانکداری:** خوشه‌بندی مشتریان برای ارائه خدمات شخصی‌سازی‌شده 102 | * **پزشکی:** خوشه‌بندی بافت‌های مغزی در تصاویر MRI برای تشخیص ناهنجاری‌ها 103 | 104 | 105 | 106 | --- 107 | 108 | 109 | ۱۱. **چگونه اندازه شبکه (تعداد نورون‌ها) بر دقت خوشه‌بندی در SOM تأثیر می‌گذارد؟** 110 | 111 | ✅ پاسخ: 112 | 113 | هرچه تعداد نورون‌ها در شبکه بیشتر باشد، جزئیات خوشه‌بندی بهتر نمایان می‌شود و نقشه خروجی دقیق‌تری به دست می‌آید. اما افزایش بیش از حد تعداد نورون‌ها می‌تواند منجر به افزایش زمان آموزش و خطر overfitting شود. بنابراین، انتخاب اندازه شبکه باید متناسب با پیچیدگی و حجم داده‌ها باشد. 114 | 115 | --- 116 | 117 | ۱۲. **چرا کاهش همزمان نرخ یادگیری و شعاع همسایگی در طول زمان برای همگرایی شبکه SOM ضروری است؟** 118 | 119 | ✅ پاسخ: 120 | 121 | در مراحل اولیه آموزش، نرخ یادگیری و شعاع همسایگی بزرگ هستند تا شبکه بتواند ساختار کلی داده‌ها را شناسایی کند. اما در مراحل پایانی باید این مقادیر کاهش یابند تا به جای تغییرات گسترده، تنظیمات جزئی‌تری انجام شود و شبکه به یک وضعیت پایدار (همگرایی) برسد. این کاهش، جلوی نوسانات غیرضروری در وزن‌ها را می‌گیرد. 122 | 123 | --- 124 | 125 | ۱۳. **محدودیت‌های SOM در مواجهه با داده‌های غیرخطی چیست و چگونه می‌توان عملکرد آن را بهبود داد؟** 126 | 127 | ✅ پاسخ: 128 | 129 | در SOM در مدل‌سازی داده‌های پیچیده و دارای روابط غیرخطی ممکن است عملکرد مناسبی نداشته باشد، چون ساختار آن ایستا و مبتنی بر فاصله اقلیدسی است. برای بهبود عملکرد می‌توان از روش‌های ترکیبی مانند ترکیب SOM با شبکه‌های عصبی انعطاف‌پذیرتر (مثل MLP)، استفاده از kernel SOM یا تنظیم دقیق پارامترها بهره برد. 130 | 131 | --- 132 | 133 | ۱۴. **چه روش‌هایی برای مقداردهی اولیه وزن‌ها در SOM وجود دارد و چرا استفاده از PCA توصیه می‌شود؟** 134 | 135 | ✅ پاسخ: 136 | 137 | دو روش رایج مقداردهی اولیه وزن‌ها عبارت‌اند از: 138 | 139 | * مقداردهی تصادفی (Random Initialization) 140 | * استفاده از تحلیل مؤلفه‌های اصلی (PCA Initialization) 141 | 142 | استفاده از PCA باعث می‌شود وزن‌ها با توزیع داده‌های ورودی سازگارتر شروع شوند، که منجر به همگرایی سریع‌تر و پایداری بهتر شبکه در آموزش می‌شود. 143 | 144 | --- 145 | 146 | ۱۵. **در فاز تطبیق SOM، چرا اغلب از تابع گوسی برای وزن‌دهی نورون‌های همسایه استفاده می‌شود؟** 147 | 148 | ✅ پاسخ: 149 | 150 | تابع گوسی، شدت تأثیر نورون‌های همسایه بر اساس فاصله آن‌ها از نورون برنده را به صورت نرم و تدریجی کاهش می‌دهد. این ویژگی باعث می‌شود که تنظیم وزن‌ها به شکل پیوسته انجام شده و از نوسانات شدید جلوگیری شود. همچنین، به همگرایی طبیعی‌تر و خوشه‌بندی دقیق‌تری منجر می‌شود. 151 | 152 | --- 153 | 154 | 155 | 156 | 157 | ### 📘 بخش دوم: سوالات تستی 158 | 159 | ۱. **کدام گزینه از جمله کاربردهای شبکه‌های خودسازمانده نیست؟** 160 | الف) فشرده‌سازی تصویر 161 | 162 | ب) تحلیل داده‌های پزشکی 163 | 164 | ج) طبقه‌بندی نظارت‌شده داده‌ها 165 | 166 | د) خوشه‌بندی مشتریان فروشگاه 167 | 168 | **پاسخ صحیح: ✅ ج** 169 | 170 | --- 171 | 172 | ۲. **کدام فاز از الگوریتم SOM مربوط به تعیین نورون برنده است؟** 173 | الف) فاز تطبیق 174 | 175 | ب) فاز همکاری 176 | 177 | ج) فاز رقابت 178 | 179 | د) فاز همسایگی 180 | 181 | **پاسخ صحیح: 🤖 ج** 182 | 183 | --- 184 | 185 | ۳. **در SOM، بردار وزن هر نورون چه چیزی را نشان می‌دهد؟** 186 | الف) خروجی شبکه 187 | 188 | ب) موقعیت توپولوژیکی نورون 189 | 190 | ج) مختصات در فضای داده‌ها 191 | 192 | د) نرخ یادگیری 193 | 194 | **پاسخ صحیح: 🧠 ج** 195 | 196 | --- 197 | 198 | ۴. **رابطه کاهش نرخ یادگیری η(t) و شعاع همسایگی σ(t) چیست؟** 199 | الف) خطی افزایشی 200 | 201 | ب) نمایی کاهشی 202 | 203 | ج) لگاریتمی 204 | 205 | د) ثابت 206 | 207 | **پاسخ صحیح: 📉 ب** 208 | 209 | --- 210 | 211 | ۵. **در متلب، توپولوژی شبکه SOM به چه صورت تعریف می‌شود؟** 212 | الف) nettop 213 | 214 | ب) gridtop 215 | 216 | ج) hextop 217 | 218 | د) circletop 219 | 220 | **پاسخ صحیح: 🧮 ج** 221 | 222 | --- 223 | 224 | ۶. **کدام جمله درباره آموزش Batch در SOM صحیح است؟** 225 | الف) در آن فقط یک بردار استفاده می‌شود 226 | 227 | ب) وزن‌ها هر بار به طور تصادفی مقداردهی می‌شوند 228 | 229 | ج) چندین ورودی هم‌زمان در یک دسته پردازش می‌شوند 230 | 231 | د) برای آموزش نظارت‌شده استفاده می‌شود 232 | 233 | **پاسخ صحیح: 🧪 ج** 234 | 235 | --- 236 | 237 |
238 | -------------------------------------------------------------------------------- /ChatBot/Persian_Health_Chatbot_Article.md: -------------------------------------------------------------------------------- 1 | 2 | ### چت‌بات بهداشتی گفت‌وگوکننده با استفاده از یادگیری عمیق 3 | 4 | این اسکریپت به منظور آموزش یک مدل شبکه عصبی برای چت‌بات بر تشخیص بیماری با استفاده از پردازش زبان طبیعی (NLP) طراحی شده است. این اسکریپت از کتابخانه‌های NLTK برای پردازش متن و TensorFlow/Keras برای ساخت و آموزش شبکه عصبی استفاده می‌کند. 5 | 6 | این چت‌بات بهداشتی به صورت تعاملی علائم کاربر را دریافت کرده و بیماری محتمل را شناسایی می‌کند. می‌توانید این مدل را با داده‌های بیشتر گسترش داده و برای تشخیص بهتر استفاده کنید. 7 | 8 | --- 9 | 10 | #### ۱. وارد کردن ماژول‌های مورد نیاز 11 | ابتدا، ماژول‌های زیر را برای شروع فرآیند آموزش وارد می‌کنیم: 12 | 13 | ```python 14 | 15 | import random 16 | import json 17 | import pickle 18 | import nltk 19 | from nltk.stem import WordNetLemmatizer 20 | from tensorflow.keras.models import Sequential 21 | from tensorflow.keras.layers import Dense, Activation, Dropout 22 | from tensorflow.keras.optimizers import SGD 23 | import numpy as np 24 | 25 | ``` 26 | 27 | **توضیح مختصر ماژول‌ها:** 28 | - **nltk:** کتابخانه پردازش زبان طبیعی (NLP) در پایتون. 29 | - **WordNetLemmatizer:** برای لِماتیزه کردن کلمات (حذف تغییرات صرفی و بازگرداندن کلمه به شکل پایه). 30 | - **Sequential:** مدل ساده شبکه عصبی برای استفاده در چت‌بات. 31 | - **Dense، Activation و Dropout:** لایه‌های شبکه عصبی؛ *Dense* لایه کاملاً متصل، *Dropout* برای جلوگیری از بیش‌برازش، و *Activation* برای فعال‌سازی نورون‌ها. 32 | - **SGD:** روش گرادیان نزولی تصادفی برای بهینه‌سازی مدل. 33 | 34 | --- 35 | 36 | #### ۲. ساخت داده‌ها و ساختار JSON 37 | 38 | برای داده‌های آموزشی از یک فایل JSON با ساختاری مشابه زیر استفاده می‌کنیم: 39 | 40 | ```json 41 | { 42 | "intents": [ 43 | { 44 | "tag": "نام بیماری", 45 | "patterns": ["علائم جداشده با کاما"], 46 | "responses": ["پاسخی که کاربر دریافت می‌کند"] 47 | }, 48 | ... 49 | ] 50 | } 51 | ``` 52 | 53 | - **tag:** نام بیماری. 54 | - **patterns:** مجموعه‌ای از علائم بیماری. 55 | - **responses:** پاسخ‌هایی که به کاربر نمایش داده می‌شود. 56 | 57 | --- 58 | 59 | #### ۳. پردازش داده‌ها 60 | 61 | اطلاعات JSON را به سه متغیر اصلی تقسیم می‌کنیم: 62 | - **words:** برای ذخیره علائم. 63 | - **classes:** برای ذخیره نام بیماری‌ها. 64 | - **documents:** ترکیبی از علائم و دسته‌بندی مربوط به آن‌ها. 65 | 66 | 67 | #### ۴. ذخیره داده‌ها با استفاده از **pickle** 68 | 69 | برای استفاده‌های بعدی، کلمات و دسته‌بندی‌ها را در قالب فایل **pickle** ذخیره می‌کنیم: 70 | 71 | ```python 72 | pickle.dump(words, open('words.pkl', 'wb')) 73 | pickle.dump(classes, open('classes.pkl', 'wb')) 74 | ``` 75 | 76 | ## فایل‌های مورد نیاز 77 | 78 | 1. `intents.json`: این فایل حاوی داده‌های آموزشی به صورت ساختار نیت‌ها (الگوها و برچسب‌های مربوطه) است. 79 | 2. این اسکریپت فایل‌های زیر را تولید می‌کند: 80 | - `words.pkl`: فایلی که لیست پردازش شده کلمات منحصر به فرد را در خود دارد. 81 | - `classes.pkl`: فایلی که لیست برچسب‌های نیت منحصر به فرد را در خود دارد. 82 | - `chatbot_model.h5`: مدل آموزش‌دیده که در فرمت HDF5 ذخیره می‌شود. 83 | 84 | ## عملکرد 85 | 86 | ### 1. **بارگذاری و پردازش داده‌ها** 87 | - اسکریپت با مقداردهی و بارگذاری نیت‌ها از `intents.json` شروع می‌شود. 88 | - هر الگو در نیت‌ها توکنایز می‌شود و کلمات منحصر به فرد شناسایی می‌شوند و همچنین نیت مربوطه (برچسب) نیز ذخیره می‌شود. 89 | 90 | ### 2. **نرمال‌سازی متن** 91 | - **لوماتیزه کردن**: هر کلمه به فرم پایه‌اش تبدیل می‌شود. 92 | - **شخصیت‌های نادیده**: برخی از نشانه‌گذاری‌ها مانند `؟`، `!`، `.` و `،` نادیده گرفته می‌شوند. 93 | 94 | ### 3. **نمایش Bag of Words** 95 | - برای هر سند (الگو و برچسب) یک نمایش باینری Bag of Words ایجاد می‌شود. 96 | - به این معنی که برای هر الگو، وجود هر کلمه منحصر به فرد با ۱ (وجود دارد) یا ۰ (وجود ندارد) مشخص می‌شود. 97 | - تبدیل متون به نمایه‌های عددی است 98 | 99 | ### 4. **آماده‌سازی مجموعه داده** 100 | - مجموعه داده به منظور اطمینان از تصادفی بودن قبل از آموزش، شافل می‌شود. 101 | - سپس به ویژگی‌های آموزشی (`train_x`) و برچسب‌ها (`train_y`) تقسیم می‌شود. 102 | 103 | ### 5. **مدل شبکه عصبی** 104 | - یک مدل Sequential ساخته می‌شود: 105 | - **لایه ورودی**: لایه Dense با ۲۵۶ نورون و فعال‌سازی ReLU. 106 | - **Dropout**: لایه Dropout با نرخ ۵۰٪ به منظور کاهش بیش‌برازش. 107 | - **لایه مخفی**: لایه Dense با ۱۲۸ نورون و فعال‌سازی ReLU. 108 | - **لایه خروجی**: لایه Dense با فعال‌سازی softmax، که معادل تعداد کلاس‌های منحصر به فرد است. 109 | 110 | ### 6. **کمپایل و آموزش مدل** 111 | - مدل با استفاده از Stochastic Gradient Descent (SGD) به عنوان بهینه‌ساز و categorical crossentropy به عنوان تابع هزینه کمپایل می‌شود. 112 | - مدل بر روی ۲۰۰ اپوک با اندازه بچ ۵ آموزش داده می‌شود. 113 | 114 | 115 | - **learning_rate=0.01**: نرخ یادگیری را تعیین می‌کند، که سرعت به‌روزرسانی وزن‌ها در هر مرحله از آموزش را مشخص می‌کند. 116 | - **momentum=0.9**: مقدار مومنتوم را تعیین می‌کند که به تسریع همگرایی و کاهش نوسانات در مسیر بهینه‌سازی کمک می‌کند. 117 | - **nesterov=True**: فعال‌سازی نستروا (Nesterov) که یک تکنیک بهبود یافته برای مومنتوم است و پیش‌بینی بهتری از موقعیت آینده وزن‌ها ارائه می‌دهد. 118 | 119 | ### **template** 120 | - اگر یک ورودی به یک کلاس خاص تعلق داشته باشد، می‌توان عنصر مربوطه در تمپلت را به ۱ تغییر داد. به عنوان مثال، اگر کلاس اول (نیت “greeting”) باشد، لیست به صورت [1, 0, 0] خواهد بود. 121 | 122 | 123 | --- 124 | 125 | #### . آزمایش چت‌بات 126 | 127 | کد زیر یک چت‌بات کامل است که با استفاده از ورودی صوتی، علائم کاربر را شناسایی کرده و پاسخ مناسب را ارائه می‌دهد: 128 | کد ارائه شده شامل دو تابع است که به پیش‌بینی کلاس (intent) یک جمله و دریافت پاسخ مناسب بر اساس آن کلاس کمک می‌کند. در زیر توضیح مختصری از هر تابع ارائه شده است: 129 | 130 | ### تابع `predict_class(sentence)` 131 | 132 | 1. **ورودی**: یک جمله (string) به عنوان ورودی دریافت می‌کند. 133 | 2. **کیسه کلمات**: با استفاده از تابع `bag_of_words`، نمایه کیسه کلمات (bag of words) جمله را ایجاد می‌کند. 134 | 3. **پیش‌بینی**: با استفاده از مدل یادگیری عمیق، احتمال هر کلاس (intent) را پیش‌بینی می‌کند. 135 | 4. **فیلتر نتایج**: نتایج را بر اساس یک آستانه خطا (ERROR_THRESHOLD) فیلتر می‌کند تا فقط کلاس‌هایی که احتمال آن‌ها بالاتر از 0.25 است، در نظر گرفته شوند. 136 | 5. **مرتب‌سازی**: نتایج را بر اساس احتمال به صورت نزولی مرتب می‌کند. 137 | 6. **خروجی**: یک لیست از دیکشنری‌ها را برمی‌گرداند که شامل نام کلاس (intent) و احتمال مربوط به آن است. 138 | 139 | ### تابع `get_response(intents_list)` 140 | 141 | 1. **ورودی**: یک لیست از intents (کلاس‌های پیش‌بینی شده) به عنوان ورودی دریافت می‌کند. 142 | 2. **بررسی خالی بودن لیست**: اگر لیست خالی باشد، پیامی مبنی بر عدم وجود اطلاعات مرتبط برمی‌گرداند. 143 | 3. **انتخاب کلاس برتر**: کلاس (intent) با بالاترین احتمال را انتخاب می‌کند. 144 | 4. **پیدا کردن پاسخ**: برای کلاس انتخاب شده، از لیست پاسخ‌ها (responses) تصادفی یک پاسخ را انتخاب کرده و برمی‌گرداند. 145 | 5. **خروجی**: پاسخ انتخاب شده را برمی‌گرداند. 146 | -------------------------------------------------------------------------------- /agi/fine_tuning_DeepSeek_Llama_80.py: -------------------------------------------------------------------------------- 1 | !pip install --upgrade unsloth trl huggingface_hub 2 | 3 | # %%capture 4 | !pip install unsloth 5 | !pip install --force-reinstall --no-cache-dir --no-deps git+https://github.com/unslothai/unsloth.git 6 | !pip install --upgrade jupyter 7 | !pip install --upgrade ipywidgets 8 | !pip install wandb 9 | !pip install --upgrade torch 10 | 11 | 12 | import os # Importing the os module to interact with the operating system 13 | 14 | # Setting environment variables 15 | os.environ['HUGGING_FACE_TOKEN'] = '' # Setting the Hugging Face token as an environment variable 16 | os.environ['WANDB_TOKEN'] = '' # Setting the Weights & Biases token as an environment variable 17 | 18 | # Accessing the tokens from environment variables 19 | hugging_face_token = os.environ['HUGGING_FACE_TOKEN'] # Retrieving the Hugging Face token 20 | wandb_token = os.environ['WANDB_TOKEN'] # Retrieving the Weights & Biases token 21 | 22 | # Printing the tokens to verify they are set correctly 23 | print(hugging_face_token) # Outputting the Hugging Face token 24 | print(wandb_token) # Outputting the Weights & Biases token 25 | 26 | 27 | 28 | import torch # Importing the PyTorch library for tensor operations and deep learning models 29 | from unsloth import FastLanguageModel # Importing FastLanguageModel from the unsloth library 30 | from trl import SFTTrainer # Importing SFTTrainer for training the models 31 | from unsloth import is_bfloat16_supported # Importing a function to check bfloat16 support 32 | from huggingface_hub import login # Importing the login function from Hugging Face Hub 33 | from transformers import TrainingArguments # Importing TrainingArguments from the transformers library 34 | from datasets import load_dataset # Importing the function to load datasets 35 | import wandb # Importing Weights & Biases library for tracking experiments 36 | 37 | 38 | 39 | from huggingface_hub import login # Importing the login function from the Hugging Face Hub library 40 | 41 | # Logging into Hugging Face account using the Hugging Face token 42 | login(hugging_face_token) # Using the previously defined Hugging Face token to authenticate 43 | 44 | 45 | 46 | # Logging into Weights & Biases with the provided API key 47 | wandb.login(key=wandb_token) # Using the previously defined Weights & Biases token to authenticate 48 | 49 | # Initializing a new Weights & Biases run 50 | run = wandb.init( 51 | project='Fine_tune_DeepSeeek_Llama_80 for operagi', # Specifying the project name for tracking 52 | job_type="training", # Defining the type of job being run (in this case, training) 53 | anonymous="allow" # Allowing anonymous access to the run (useful for public projects or testing) 54 | ) 55 | 56 | 57 | 58 | 59 | # Setting the maximum sequence length for the model 60 | max_seq_length = 2048 # Maximum number of tokens the model will process in a single input 61 | 62 | # Setting the data type for model parameters (None means default data type will be used) 63 | dtype = None # Data type for model parameters; if None, the default type (usually float32) will be used 64 | 65 | # Configuring the model to load in 4-bit precision 66 | load_in_4bit = True # Enables loading the model with 4-bit precision to reduce memory usage and speed up inference 67 | 68 | 69 | 70 | # Loading a pre-trained language model and tokenizer 71 | model, tokenizer = FastLanguageModel.from_pretrained( 72 | model_name="unsloth/DeepSeek-R1-Distill-Llama-8B", # Specifying the model name to load from Hugging Face Hub 73 | max_seq_length=max_seq_length, # Setting the maximum sequence length defined earlier 74 | dtype=dtype, # Specifying the data type for the model parameters; defaults to bfloat16 if using H100 75 | load_in_4bit=load_in_4bit, # Configuring the model to load in 4-bit precision 76 | token=hugging_face_token # Providing the Hugging Face token for authentication 77 | ) 78 | 79 | 80 | 81 | 82 | 83 | # Updated prompt_template without the response placeholder 84 | prompt_template = """### Introduction: 85 | Hello, I am operagi, your knowledgeable expert here to assist you with a wide range of inquiries. I am dedicated to providing evidence-based and thoughtful responses tailored to your needs. 86 | 87 | ### Role: 88 | You are a knowledgeable expert across diverse fields, capable of providing in-depth analysis on both general inquiries and specialized topics. Your responses should: 89 | - Be evidence-based, drawing from credible sources and established knowledge. 90 | - Offer a thorough exploration of options and perspectives, considering different viewpoints and contexts. 91 | - Prioritize the safety, well-being, and ethical considerations of individuals while maintaining professional standards. 92 | - Clearly acknowledge any limitations, uncertainties, or potential biases in your responses. 93 | - Provide detailed explanations, incorporating relevant examples, case studies, and data where applicable to support your insights. 94 | 95 | ### Question: 96 | {} 97 | 98 | 99 | 100 | ### Detailed Response: 101 | 102 | {} 103 | 104 | {} 105 | """ # Removed {response} placeholder 106 | 107 | # Tokenizing the input using the modified tokenizer 108 | inputs = tokenizer([prompt_template.format(question, "")], return_tensors="pt").to("cuda") 109 | 110 | 111 | 112 | # Defining the question to be asked 113 | question = """پایتخت ایران کجاست و چجور جایی است پاسخ را بصورت فارسی بنویس""" 114 | 115 | # Preparing the model for inference 116 | # The 'for_inference' method is used to set up the model for making predictions based on the defined question. 117 | FastLanguageModel.for_inference(model) # Here, 'model' is the instance of the FastLanguageModel defined earlier. 118 | 119 | 120 | 121 | 122 | # Tokenizing the input using the tokenizer with a dummy response 123 | dummy_response = "" # Placeholder for response 124 | inputs = tokenizer([prompt_template.format(question, "", dummy_response)], return_tensors="pt").to("cuda") 125 | 126 | 127 | 128 | # Generating outputs from the model based on the tokenized inputs 129 | outputs = model.generate( 130 | input_ids=inputs.input_ids, # The input IDs generated from the tokenizer 131 | attention_mask=inputs.attention_mask, # The attention mask to specify which tokens to attend to 132 | max_new_tokens=2000, # Maximum number of new tokens to generate in the output 133 | use_cache=True, # Whether to use cached key/values for faster decoding 134 | temperature=0.7 # تنظیم دما 135 | ) 136 | 137 | 138 | 139 | 140 | # Decoding the generated outputs into human-readable text 141 | response = tokenizer.batch_decode(outputs) 142 | 143 | # Printing the portion of the response after "### Response:" 144 | print(response[0]) -------------------------------------------------------------------------------- /dr-akbari2.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | --- 4 | 5 | ### ✅ **روش 1: تحلیل واریانس بین کلاس‌ها (Feature Selection based on Variance or Fisher Score)** 6 | 7 | در عکس‌ها مفاهیم زیر دیده می‌شود: 8 | 9 | 1. **فرمول واریانس** (سمت چپ تصویر اول): 10 | 11 | $$ 12 | \text{Var}(x) = \frac{\sum (x_i - \bar{x})^2}{n - 1} 13 | $$ 14 | 15 | 2. **محاسبه واریانس داخل کلاس‌ها و بین کلاس‌ها**: 16 | 17 | * $\text{Var}(f_j^-)$: واریانس ویژگی $f_j$ در کلاس منفی 18 | * $\text{Var}(f_j^+)$: واریانس ویژگی $f_j$ در کلاس مثبت 19 | * $|\text{Var}(f_j^+) - \text{Var}(f_j^-)|$: اختلاف بین واریانس‌ها (برای سنجش قدرت تفکیک ویژگی) 20 | 21 | 3. **نرمال‌سازی ویژگی‌ها** (تصویر دوم): 22 | از نرمال‌سازی Min-Max برای مقیاس‌دهی داده‌ها به بازه $[-1, 1]$ استفاده شده. 23 | 24 | 4. **محاسبه فاصله بین مقدار تست و میانگین ویژگی هر کلاس** 25 | 26 | $$ 27 | |test_i - f_j^+| \quad \text{و} \quad |test_i - f_j^-| 28 | $$ 29 | 30 | --- 31 | 32 | ### نتیجه: 33 | خیلی خوب! حالا مرحله‌به‌مرحله با **روش ۲ (تحلیل واریانس بین کلاس‌ها)** می‌رویم تا وزن هر ویژگی (F1 تا F4) را برای نمونه تست داده شده به‌دست بیاوریم. 34 | 35 | --- 36 | 37 | ## 🧮 گام ۱: داده‌ها و کلاس‌ها 38 | 39 | جدول شامل 8 نمونه (X1 تا X8) و 4 ویژگی (F1 تا F4) است، و برچسب کلاس در ستون آخر آمده است. 40 | 41 | ``` 42 | F1 F2 F3 F4 Label 43 | X1 1 4 3 7 1 44 | X2 2 2 2 8 1 45 | X3 3 5 4 6 1 46 | X4 2 2 2 5 1 47 | X5 5 5 6 9 2 48 | X6 7 7 6 8 2 49 | X7 8 6 7 5 2 50 | X8 4 9 8 8 2 51 | ``` 52 | 53 | ### کلاس 1: X1 تا X4 54 | 55 | ### کلاس 2: X5 تا X8 56 | 57 | --- 58 | 59 | ## 🧮 گام ۲: محاسبه میانگین و واریانس هر ویژگی برای هر کلاس 60 | 61 | ### میانگین ویژگی‌ها: 62 | 63 | #### کلاس 1: 64 | 65 | * F1: (1+2+3+2)/4 = **2** 66 | * F2: (4+2+5+2)/4 = **3.25** 67 | * F3: (3+2+4+2)/4 = **2.75** 68 | * F4: (7+8+6+5)/4 = **6.5** 69 | 70 | #### کلاس 2: 71 | 72 | * F1: (5+7+8+4)/4 = **6** 73 | * F2: (5+7+6+9)/4 = **6.75** 74 | * F3: (6+6+7+8)/4 = **6.75** 75 | * F4: (9+8+5+8)/4 = **7.5** 76 | 77 | --- 78 | 79 | ### واریانس ویژگی‌ها: 80 | 81 | #### فرمول واریانس: 82 | 83 | $$ 84 | \text{Var} = \frac{\sum (x_i - \bar{x})^2}{n - 1} 85 | $$ 86 | 87 | #### کلاس 1: 88 | 89 | * **F1**: Var = (1−2)² + (2−2)² + (3−2)² + (2−2)² = 1 + 0 + 1 + 0 = 2 → 2 / 3 = **0.666** 90 | * **F2**: Var = (4−3.25)² + (2−3.25)² + (5−3.25)² + (2−3.25)² = 0.5625 + 1.5625 + 3.0625 + 1.5625 = 6.75 → 6.75 / 3 = **2.25** 91 | * **F3**: Var = (3−2.75)² + (2−2.75)² + (4−2.75)² + (2−2.75)² = 0.0625 + 0.5625 + 1.5625 + 0.5625 = 2.75 / 3 = **0.916** 92 | * **F4**: Var = (7−6.5)² + (8−6.5)² + (6−6.5)² + (5−6.5)² = 0.25 + 2.25 + 0.25 + 2.25 = 5 → 5 / 3 = **1.666** 93 | 94 | #### کلاس 2: 95 | 96 | * **F1**: Var = (5−6)² + (7−6)² + (8−6)² + (4−6)² = 1 + 1 + 4 + 4 = 10 → 10 / 3 = **3.33** 97 | * **F2**: Var = (5−6.75)² + (7−6.75)² + (6−6.75)² + (9−6.75)² = 3.06 + 0.06 + 0.56 + 5.06 = 8.75 / 3 = **2.91** 98 | * **F3**: Var = (6−6.75)² + (6−6.75)² + (7−6.75)² + (8−6.75)² = 0.56 + 0.56 + 0.06 + 1.56 = 2.75 / 3 = **0.916** 99 | * **F4**: Var = (9−7.5)² + (8−7.5)² + (5−7.5)² + (8−7.5)² = 2.25 + 0.25 + 6.25 + 0.25 = 9 → 9 / 3 = **3** 100 | 101 | --- 102 | 103 | ## 🧮 گام ۳: محاسبه قدرت تفکیک (Discriminative Power) 104 | 105 | $$ 106 | \text{Power}_j = |\text{Var}_{\text{کلاس 2}}(f_j) - \text{Var}_{\text{کلاس 1}}(f_j)| 107 | $$ 108 | 109 | | Feature | Var(class 2) | Var(class 1) | Power | 110 | | ------- | ------------ | ------------ | ----- | 111 | | F1 | 3.33 | 0.666 | 2.66 | 112 | | F2 | 2.91 | 2.25 | 0.66 | 113 | | F3 | 0.916 | 0.916 | 0 | 114 | | F4 | 3.0 | 1.666 | 1.33 | 115 | 116 | --- 117 | 118 | ## ✅ نتیجه نهایی: وزن ویژگی‌ها (براساس قدرت تمایز) 119 | 120 | * **F1: 2.66 → مهم‌ترین ویژگی** 121 | * **F4: 1.33 → دوم** 122 | * **F2: 0.66 → سوم** 123 | * **F3: 0.00 → بی‌تأثیر در تفکیک کلاس‌ها** 124 | 125 | --- 126 | 127 | اگر بخواهی نرمال‌شده‌شان را برای استفاده در مدل داشته باشیم: 128 | 129 | $$ 130 | \text{Normalized weight}_j = \frac{\text{Power}_j}{\sum \text{Power}_j} = \frac{Power_j}{2.66 + 1.33 + 0.66} 131 | $$ 132 | 133 | یعنی: 134 | 135 | | Feature | Power | Normalized Weight | 136 | | ------- | ----- | ----------------- | 137 | | F1 | 2.66 | 0.56 | 138 | | F4 | 1.33 | 0.28 | 139 | | F2 | 0.66 | 0.14 | 140 | | F3 | 0.00 | 0.00 | 141 | 142 | --- 143 | 144 | عالی! حالا می‌خواهیم وزن نهایی ویژگی‌ها را با در نظر گرفتن **فاصله تست از میانگین کلاس‌ها** ترکیب کنیم. این به ما کمک می‌کند بفهمیم کدام ویژگی برای **تشخیص کلاس نمونه تست** بیشترین نقش را دارد. 145 | 146 | --- 147 | 148 | ## 🧾 مرحله ۴: تعریف فرمول ترکیبی (Discriminative Power × Test Distance) 149 | 150 | برای هر ویژگی: 151 | 152 | $$ 153 | \text{Final Weight}_j = \text{Power}_j \times |\text{Test}_j - \mu_{j}^{(کلاس)}| 154 | $$ 155 | 156 | که در آن: 157 | 158 | * $\mu_{j}^{(کلاس)}$ میانگین ویژگی j در کلاسی است که احتمال می‌دهیم تست به آن نزدیک‌تر باشد. 159 | * ما می‌خواهیم برای هر دو کلاس محاسبه کنیم و ببینیم هر ویژگی چقدر به افتراق کمک می‌کند. 160 | 161 | --- 162 | 163 | ## 🎯 داده تست: 164 | 165 | ``` 166 | Test Sample: [6, 7, 6, 7] 167 | ``` 168 | 169 | ### گام اول: محاسبه فاصله تست از میانگین هر کلاس برای هر ویژگی 170 | 171 | \| Feature | Test | Mean(Class 1) | |Δ(Test − Class1)| | Mean(Class 2) | |Δ(Test − Class2)| | 172 | \|--------|------|----------------|------------------|----------------|------------------| 173 | \| F1 | 6 | 2 | 4 | 6 | 0 | 174 | \| F2 | 7 | 3.25 | 3.75 | 6.75 | 0.25 | 175 | \| F3 | 6 | 2.75 | 3.25 | 6.75 | 0.75 | 176 | \| F4 | 7 | 6.5 | 0.5 | 7.5 | 0.5 | 177 | 178 | --- 179 | 180 | ## 🎯 گام دوم: ضرب فاصله در Power 181 | 182 | ### حالت کلاس 1 (برای تشخیص اینکه چقدر ویژگی در **تمایز تست از کلاس 1** نقش دارد) 183 | 184 | $$ 185 | \text{FinalWeight}_j = \text{Power}_j \times |\text{Test}_j - \mu_j^{(کلاس 1)}| 186 | $$ 187 | 188 | \| Feature | Power | |Δ(Test − Class1)| | Final Weight | 189 | \|--------|--------|-------------------|----------------| 190 | \| F1 | 2.66 | 4 | **10.64** | 191 | \| F2 | 0.66 | 3.75 | **2.475** | 192 | \| F3 | 0.00 | 3.25 | **0** | 193 | \| F4 | 1.33 | 0.5 | **0.665** | 194 | 195 | ✅ **F1 بیشترین قدرت تمایز نسبت به کلاس 1 دارد.** 196 | 197 | --- 198 | 199 | ### حالت کلاس 2 (برای تشخیص نزدیکی به کلاس 2) 200 | 201 | \| Feature | Power | |Δ(Test − Class2)| | Final Weight | 202 | \|--------|--------|-------------------|----------------| 203 | \| F1 | 2.66 | 0 | **0.00** | 204 | \| F2 | 0.66 | 0.25 | **0.165** | 205 | \| F3 | 0.00 | 0.75 | **0.00** | 206 | \| F4 | 1.33 | 0.5 | **0.665** | 207 | 208 | ✅ در مقایسه با کلاس 2، ویژگی‌ها خیلی تفاوت نشان نمی‌دهند → بنابراین تست به **کلاس 2 نزدیک‌تر** است. 209 | 210 | --- 211 | 212 | ## ✅ نتیجه نهایی: 213 | 214 | اگر بخواهیم بر اساس فاصله از **کلاس 1** (برای تشخیص اینکه نمونه متعلق به کلاس 2 است)، وزن ویژگی‌ها را نرمال کنیم: 215 | 216 | | Feature | Final Weight | Normalized | 217 | | ------- | ------------ | ---------- | 218 | | F1 | 10.64 | 0.75 | 219 | | F2 | 2.475 | 0.17 | 220 | | F4 | 0.665 | 0.08 | 221 | | F3 | 0 | 0.00 | 222 | 223 | --- 224 | 225 | ## ✳️ تفسیر: 226 | 227 | * **F1 با اختلاف زیاد مهم‌ترین ویژگی برای تشخیص است.** 228 | * **F3 بی‌تأثیر ** 229 | 230 | -------------------------------------------------------------------------------- /NeuralComputing/Quize.md: -------------------------------------------------------------------------------- 1 | ### سوالات و پاسخ‌های مربوط به نرون‌های مصنوعی 2 | 3 | --- 4 | 5 | **سؤال 1:** 6 | کدام گزینه نشان‌دهنده وظیفه اصلی سیناپس در نرون مصنوعی است؟ 7 | A) دریافت ورودی 8 | B) تولید خروجی 9 | C) ذخیره‌سازی اطلاعات 10 | D) تعیین وزن اتصال بین نرون‌ها 11 | ✅ **گزینه D** — سیناپس‌ها وزن اتصال بین نرون‌ها را مشخص می‌کنند و نقش حیاتی در یادگیری دارند ⚖️. 12 | 13 | --- 14 | 15 | **سؤال 2:** 16 | کدام تابع فعال‌سازی خروجی بین -1 تا 1 تولید می‌کند؟ 17 | A) Sigmoid 18 | B) Tanh 19 | C) ReLU 20 | D) Linear 21 | ✅ **گزینه B** — تابع **Tanh** خروجی بین **-1 تا 1** می‌دهد، در حالی‌که Sigmoid بین 0 تا 1 است 📈. 22 | 23 | --- 24 | 25 | **سؤال 3:** 26 | در الگوریتم گرادیان نزولی، تغییر وزن‌ها در چه جهتی صورت می‌گیرد؟ 27 | A) در جهت افزایش تابع خطا 28 | B) در جهت کاهش تابع خطا 29 | C) به طور تصادفی 30 | D) همواره صفر 31 | ✅ **گزینه B** — در گرادیان نزولی، حرکت در جهت **کاهش تابع خطا** انجام می‌شود 🔽. 32 | 33 | --- 34 | 35 | **سؤال 4:** 36 | شبکه پرسپترون تنها قادر به حل چه نوع مسائلی است؟ 37 | A) مسائل غیرخطی 38 | B) مسائل چندکلاسه 39 | C) مسائل خطی جداپذیر 40 | D) مسائل بازگشتی 41 | ✅ **گزینه C** — پرسپترون فقط می‌تواند **مسائل خطی جداپذیر** را حل کند (مثل AND)، نه XOR ❌. 42 | 43 | --- 44 | 45 | **سؤال 5:** 46 | در یادگیری بدون ناظر، شبکه چه کاری انجام می‌دهد؟ 47 | A) از خروجی‌های مشخص برای تنظیم وزن‌ها استفاده می‌کند 48 | B) تنها ورودی‌ها را دریافت و خوشه‌بندی می‌کند 49 | C) از برچسب‌های داده برای پیش‌بینی استفاده می‌کند 50 | D) به تقویت یا تنبیه پاسخ‌ها متکی است 51 | ✅ **گزینه B** — در یادگیری **بدون ناظر**، شبکه بر اساس شباهت ورودی‌ها عمل می‌کند، بدون برچسب 🧩. 52 | 53 | --- 54 | 55 | **سؤال 6:** 56 | کدامیک از گزینه‌ها جزو مزایای تابع ReLU نیست؟ 57 | A) سادگی محاسبات 58 | B) افزایش سرعت یادگیری 59 | C) جلوگیری کامل از Overfitting 60 | D) جلوگیری از ناپدید شدن گرادیان 61 | ✅ **گزینه C** — ReLU مزایای زیادی دارد، اما **جلوگیری کامل از Overfitting** وظیفه‌ی آن نیست 🚫. 62 | 63 | --- 64 | 65 | **سؤال 7:** 66 | در ساختار شبکه چندلایه (MLP)، لایه پنهان چه کاربردی دارد؟ 67 | A) تبدیل سیگنال به خروجی نهایی 68 | B) فقط نگهداری اطلاعات 69 | C) مدل‌سازی روابط غیرخطی 70 | D) حذف داده‌های نویزی 71 | ✅ **گزینه C** — لایه پنهان در شبکه MLP برای **مدل‌سازی روابط غیرخطی** بین داده‌ها استفاده می‌شود 🧠. 72 | 73 | --- 74 | 75 | **سؤال 8:** 76 | کدام شبکه در حل مسائل بهینه‌سازی و حافظه انجمنی کاربرد دارد؟ 77 | A) Feedforward 78 | B) Kohonen 79 | C) Hopfield 80 | D) RBF 81 | ✅ **گزینه C** — شبکه **Hopfield** برای حافظه انجمنی و مسائل بهینه‌سازی استفاده می‌شود 💾🔁. 82 | 83 | --- 84 | 85 | **سؤال 9:** 86 | در شبکه‌های عصبی، **Overfitting** زمانی رخ می‌دهد که: 87 | A) شبکه خطاهای ورودی را نادیده بگیرد 88 | B) شبکه روی داده‌های آموزشی بیش‌ازحد دقیق شود 89 | C) داده‌ها بسیار کم باشند 90 | D) تابع فعال‌سازی اشتباه انتخاب شده باشد 91 | ✅ **گزینه B** — Overfitting یعنی شبکه بیش از حد روی داده‌های آموزش حساس شود و به داده‌های جدید خوب پاسخ ندهد ⚠️. 92 | 93 | --- 94 | 95 | **سؤال 10:** 96 | فرمول Kolmogorov برای تخمین نرون‌های لایه پنهان چیست؟ 97 | A) n + 1 98 | B) m × n 99 | C) 2n + 1 100 | D) n² - 1 101 | 102 | ✅ **گزینه C** — فرمول Kolmogorov برای تخمین نرون‌های لایه پنهان: **2n + 1** 📐. 103 | 104 | --- 105 | 106 | ### ✍️ **سؤال تشریحی 1** 107 | 108 | **سؤال:** 109 | در یک پروژه‌ی طبقه‌بندی تصاویر (مثلاً تشخیص گربه و سگ)، از یک شبکه‌ی عصبی چندلایه استفاده شده است. توضیح دهید که هر کدام از موارد زیر چه نقشی در عملکرد شبکه دارد: 110 | 111 | 1. لایه پنهان 112 | 2. تابع فعال‌سازی ReLU 113 | 3. داده‌های اعتبارسنجی (Validation set) 114 | 4. الگوریتم گرادیان نزولی 115 | 116 | 📘 در پاسخ خود، سعی کنید نقش هر بخش را با ذکر مثال یا کاربرد توضیح دهید. 117 | 118 | --- 119 | 120 | ### ✅ **پاسخ سؤال تشریحی** 121 | 122 | در پروژه‌ی طبقه‌بندی تصاویر (مثل تفکیک گربه و سگ 🐱🐶)، از شبکه‌های عصبی چندلایه استفاده می‌شود. هر جزء از این شبکه نقش مهمی در عملکرد نهایی دارد: 123 | 124 | --- 125 | 126 | **1. لایه پنهان (Hidden Layer):** 127 | لایه‌های پنهان واسطه‌ای بین ورودی و خروجی هستند که **ویژگی‌های مهم تصویر** را استخراج می‌کنند 🧠🔍. 128 | به عنوان مثال، در تصویر گربه، ممکن است یک لایه پنهان لبه‌ی گوش را تشخیص دهد و لایه بعدی ترکیب آن با چشم را شناسایی کند. این باعث می‌شود شبکه روابط **غیرخطی و پیچیده** بین پیکسل‌ها را یاد بگیرد. به همین ترتیب، لایه‌های پنهان می‌توانند ویژگی‌های مختلفی مانند رنگ، شکل و بافت را شناسایی کنند. 129 | 130 | --- 131 | 132 | **2. تابع فعال‌سازی ReLU:** 133 | تابع ReLU یا \( f(x) = \max(0, x) \) یکی از پرکاربردترین توابع در شبکه‌های عمیق است. 134 | این تابع باعث می‌شود **نرون‌ها فقط وقتی فعال شوند که سیگنال ورودی مثبت باشد** 🔛، که هم از نظر محاسباتی سریع است ⚡ و هم از بروز مشکل **vanishing gradient** جلوگیری می‌کند. به عنوان مثال، در شرایطی که ورودی منفی است، خروجی تابع ReLU صفر خواهد بود، که به نرون کمک می‌کند تا یادگیری بهتری داشته باشد و از محاسبات غیرضروری پرهیز کند. 135 | 136 | --- 137 | 138 | **3. داده‌های اعتبارسنجی (Validation Set):** 139 | این داده‌ها در طول آموزش برای **ارزیابی مدل** استفاده می‌شوند تا مشخص شود آیا مدل فقط داده‌های آموزش را حفظ کرده (Overfitting) یا واقعاً یاد گرفته است 🧪. 140 | به عنوان مثال، اگر خطای آموزش پایین باشد اما در اعتبارسنجی بالا، این نشان‌دهنده‌ی Overfitting است و باید مدل اصلاح شود. به این ترتیب، داده‌های اعتبارسنجی به ما کمک می‌کنند تا کیفیت و عمومیت مدل را ارزیابی کنیم و در نتیجه تصمیمات بهتری برای بهبود مدل بگیریم. 141 | 142 | --- 143 | 144 | **4. الگوریتم گرادیان نزولی (Gradient Descent):** 145 | این الگوریتم برای **به‌روزرسانی وزن‌ها** در جهت کاهش خطا استفاده می‌شود. 146 | با محاسبه‌ی شیب تابع خطا نسبت به وزن‌ها، مسیر حرکت برای کاهش خطا مشخص می‌شود ➘. به عنوان مثال، اگر مدل خروجی اشتباهی بدهد، گرادیان نزولی کمک می‌کند تا وزن‌ها طوری تنظیم شوند که در تکرارهای بعدی، خروجی بهبود یابد ✅. این فرآیند به تدریج وزن‌ها را به سمت مقادیر بهینه هدایت می‌کند و باعث بهبود عملکرد مدل می‌شود. 147 | 148 | --- 149 | 150 | 📝 **نتیجه‌گیری:** 151 | همه این اجزا به صورت هماهنگ با هم کار می‌کنند تا شبکه بتواند یک ورودی (مثل تصویر) را به درستی تحلیل کرده و نتیجه‌ای دقیق و قابل اعتماد ارائه دهد. 152 | 153 | --- 154 | 155 | ### ✍️ **سؤال تشریحی 2** 156 | 157 | **سؤال:** 158 | الگوریتم گرادیان نزولی چه نقشی در فرآیند یادگیری شبکه عصبی ایفا می‌کند؟ نحوه عملکرد آن را توضیح دهید و بیان کنید چرا انتخاب نرخ یادگیری (Learning Rate) در این الگوریتم اهمیت دارد. 159 | 160 | --- 161 | 162 | ### ✅ **پاسخ نمونه: نقش الگوریتم گرادیان نزولی در یادگیری شبکه عصبی** 163 | 164 | الگوریتم گرادیان نزولی در یادگیری شبکه عصبی، **نقش کلیدی در کاهش خطای مدل** دارد. 🎯 این الگوریتم در واقع تلاش می‌کند **تابع هزینه** (Cost Function) را **کمینه** کند. 📉 165 | 166 | #### نحوه عملکرد الگوریتم گرادیان نزولی: 167 | 168 | 1. **محاسبه خطا:** 169 | وقتی مدل خروجی‌ای تولید می‌کند، با مقایسه آن با خروجی واقعی، **خطا** محاسبه می‌شود. 🔍 170 | 171 | 2. **محاسبه گرادیان:** 172 | سپس با محاسبه **مشتق (گرادیان)** این خطا نسبت به وزن‌ها، مشخص می‌شود که وزن‌ها باید در چه جهتی تغییر کنند. ➕ 173 | 174 | 3. **به‌روزرسانی وزن‌ها:** 175 | وزن‌ها در جهت **منفی گرادیان** تغییر داده می‌شوند تا در تکرارهای بعدی، خطای مدل کمتر شود. این فرآیند شبیه به **حرکت توپ از بالای کوه به سمت دره** است، که همواره در جهت شیب به پایین حرکت می‌کند تا به نقطه مینیمم برسد. 🏔️⬇️ 176 | 177 | #### اهمیت انتخاب نرخ یادگیری (Learning Rate): 178 | 179 | نرخ یادگیری در این الگوریتم اهمیت زیادی دارد: 180 | 181 | - **نرخ یادگیری خیلی کوچک:** 182 | اگر نرخ یادگیری خیلی کوچک باشد، فرآیند یادگیری **کند** می‌شود و ممکن است در **مینیمم محلی** گیر کند. ⏳ 183 | 184 | - **نرخ یادگیری خیلی بزرگ:** 185 | اگر نرخ یادگیری خیلی بزرگ باشد، ممکن است از نقطه مینیمم عبور کرده و شبکه هرگز به **مینیمم کلی (Global Minimum)** نرسد و حتی ناپایدار شود. ⚠️ 186 | 187 | --- 188 | 189 | با توجه به این توضیحات، می‌توان نتیجه گرفت که الگوریتم گرادیان نزولی و انتخاب مناسب نرخ یادگیری از عوامل حیاتی در بهینه‌سازی و عملکرد صحیح شبکه‌های عصبی هستند. 🤖✨ 190 | -------------------------------------------------------------------------------- /Insurance.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # 📄 **بیزنس پلن: دستیار هوش مصنوعی بیمه (Insurance AI Assistant)** 4 | 5 | ## ۱. **خلاصه اجرایی (Executive Summary)** 6 | 7 | **نام پروژه:** **InsurBot – دستیار هوش مصنوعی بیمه** 8 | 9 | **هدف:** توسعه یک دستیار هوش مصنوعی مبتنی بر هوش مصنوعی (AI) و پردازش زبان طبیعی (NLP) برای پاسخگویی به سوالات نمایندگان بیمه و مشتریان، کاهش بار کاری پرسنل، افزایش دقت و بهبود تجربه مشتری در صنعت بیمه. 10 | 11 | **هدف‌گذاری:** 12 | - کاهش ۴۰٪ تماس‌های پشتیبانی 13 | - افزایش رضایت مشتری به میزان ۳۰٪ 14 | - افزایش بهره‌وری نمایندگان بیمه از طریق دسترسی سریع به اطلاعات 15 | 16 | **محل فعالیت:** ایران (قابلیت گسترش به بازارهای خارجی) 17 | 18 | **نوع کسب‌وکار:** فناوری نرم‌افزار (SaaS) + خدمات هوش مصنوعی 19 | 20 | --- 21 | 22 | ## ۲. **تعریف محصول و خدمات** 23 | 24 | ### 🎯 **محصول اصلی:** 25 | **InsurBot** – یک دستیار هوش مصنوعی مبتنی بر هوش مصنوعی که به صورت: 26 | - چت‌بات در وبسایت و اپلیکیشن 27 | - رابط گفتگو در تلگرام، واتساپ و مسنجر 28 | - ماژول داخلی برای سیستم‌های CRM و مدیریت نمایندگان بیمه 29 | 30 | ### ✅ **قابلیت‌های کلیدی:** 31 | - پاسخ به سوالات متداول (FAQ) مشتریان (مثلاً نحوه ثبت خسارت، شرایط بیمه، مدارک مورد نیاز) 32 | - پاسخ به سوالات تخصصی نمایندگان (مثلاً محاسبه حق بیمه، شرایط بیمه نامه، تغییرات قانونی) 33 | - پیشنهاد بیمه‌نامه مناسب بر اساس نیاز مشتری 34 | - راهنمایی مرحله به مرحله برای ثبت خسارت 35 | - ادغام با سیستم‌های داخلی بیمه (CRM، ERP، پایگاه داده) 36 | - آموزش نمایندگان جدید از طریق راهنمای هوشمند 37 | - گزارش‌دهی عملکرد (مثلاً پرکاربردترین سوالات، زمان پاسخ، رضایت کاربر) 38 | 39 | --- 40 | 41 | ## ۳. **تحلیل بازار و مشتریان هدف** 42 | 43 | ### 📊 **اندازه بازار:** 44 | - در ایران بیش از **۴۰ شرکت بیمه** فعال داریم. 45 | - بیش از **۱۰۰,۰۰۰ نماینده بیمه** و **چندین میلیون مشتری**. 46 | - رشد سالانه صنعت بیمه: ~۱۵٪ (برآورد بانک مرکزی) 47 | 48 | ### 👥 **مشتریان هدف:** 49 | | گروه | نیازها | 50 | |------|--------| 51 | | **شرکت‌های بیمه** | کاهش هزینه پشتیبانی، افزایش دقت، بهبود تجربه مشتری | 52 | | **نمایندگان بیمه** | دسترسی سریع به اطلاعات، کاهش خطا، آموزش مداوم | 53 | | **مشتریان بیمه** | پاسخ سریع، شفافیت، عدم نیاز به تماس تلفنی | 54 | 55 | ### 📈 **فرصت بازار:** 56 | - بیشتر شرکت‌های بیمه از سیستم‌های قدیمی و غیرهوشمند استفاده می‌کنند. 57 | - تقاضا برای دیجیتالی‌سازی و هوشمندسازی خدمات بیمه در حال افزایش است. 58 | - استفاده از هوش مصنوعی در خدمات مالی و بیمه در جهان در حال رشد است (مثلاً Lemonade, Hippo در آمریکا). 59 | 60 | --- 61 | 62 | ## ۴. **مدل درآمدی (Revenue Model)** 63 | 64 | | منبع درآمد | توضیحات | قیمت‌گذاری | 65 | |-----------|--------|----------| 66 | | **اشتراک ماهانه (SaaS)** | برای شرکت‌های بیمه | ۵ تا ۲۰ میلیون تومان/ماه (بسته به تعداد کاربر و حجم استفاده) | 67 | | **پیمانکاری نصب و راه‌اندازی** | نصب، ادغام، آموزش | ۱۰ تا ۳۰ میلیون تومان (یک‌باره) | 68 | | **ماژول‌های اختصاصی** | مثلاً ماژول محاسبه خسارت، ماژول آموزش نمایندگان | ۵ تا ۱۵ میلیون تومان به ازای هر ماژول | 69 | | **درآمد از داده (غیرمستقیم)** | بدون فروش داده شخصی! فقط آنالیزهای آگрегیت برای بهبود خدمات | رایگان برای مشتری، اما بهبود محصول | 70 | 71 | --- 72 | 73 | ## ۵. **استراتژی بازاریابی و فروش** 74 | 75 | ### 🎯 **استراتژی بازاریابی:** 76 | - **محتوای آموزشی:** وبینار، مقاله، ویدیو درباره مزایای هوش مصنوعی در بیمه 77 | - **همکاری با انجمن‌های بیمه:** شرکت در نمایشگاه‌ها و کنفرانس‌ها 78 | - **فروش مستقیم (B2B):** ارتباط با مدیران فناوری و عملیات شرکت‌های بیمه 79 | - **شبکه نمایندگان:** همکاری با نمایندگان بزرگ برای تبلیغات دهان به دهان 80 | 81 | ### 🛠️ **کانال‌های توزیع:** 82 | - وبسایت رسمی + دمو آنلاین 83 | - نصب در محیط آزمایشی شرکت‌های بیمه (Pilot) 84 | - ادغام با پلتفرم‌های بیمه‌ای موجود 85 | 86 | --- 87 | 88 | ## ۶. **جنبه‌های فنی (Technical Architecture)** 89 | 90 | ### 🧠 **فناوری‌های اصلی:** 91 | - **پردازش زبان طبیعی (NLP):** استفاده از مدل‌های پیشرفته مثل BERT، GPT (مثلاً با استفاده از Hugging Face یا مدل‌های داخلی) 92 | - **چت‌بات:** با استفاده از پلتفرم‌هایی مانند Rasa، Dialogflow، یا توسعه سفارشی 93 | - **هوش مصنوعی تخصصی:** Fine-tuning مدل‌های زبانی با داده‌های بیمه‌ای (قانون بیمه، بیمه‌نامه، شرایط عمومی و خصوصی) 94 | - **ادغام با سیستم‌ها:** API RESTful برای ادغام با CRM، ERP و سیستم‌های داخلی 95 | - **امنیت داده:** رمزنگاری (SSL/TLS)، مطابقت با قوانین حفظ حریم خصوصی (مثل GDPR و قوانین داخلی) 96 | 97 | ### 🖥️ **معماری سیستم:** 98 | ``` 99 | [کاربر] → [رابط کاربری: وب، تلگرام، اپ] → [سرور AI (NLP Engine)] → [پایگاه دانش بیمه] ↔ [سیستم‌های داخلی بیمه] 100 | ``` 101 | 102 | ### 🔐 **امنیت و حریم خصوصی:** 103 | - ذخیره‌سازی داده‌های کاربران بدون شناسه شخصی 104 | - دسترسی محدود به داده‌های حساس فقط از طریق API امن 105 | - مجوزهای دسترسی برای نمایندگان و مدیران 106 | 107 | ### 📚 **پایگاه دانش (Knowledge Base):** 108 | - ایجاد یک پایگاه دانش هوشمند شامل: 109 | - تمام بیمه‌نامه‌ها و شرایط عمومی/خصوصی 110 | - قوانین بیمه‌ای و تغییرات اخیر 111 | - داده‌های تاریخی خسارت و پرداخت 112 | - پاسخ‌های تاییدشده توسط متخصصان 113 | 114 | --- 115 | 116 | ## ۷. **تیم و منابع مورد نیاز** 117 | 118 | ### 👥 **تیم اصلی:** 119 | | نقش | تعداد | توضیحات | 120 | |-----|-------|--------| 121 | | مدیر محصول | ۱ | مدیریت چرخه توسعه و نیازهای مشتری | 122 | | توسعه‌دهندگان نرم‌افزار | ۳ | فول استک + هوش مصنوعی | 123 | | متخصص هوش مصنوعی / NLP | ۲ | توسعه و آموزش مدل‌های زبانی | 124 | | متخصص بیمه (کنسالتانت) | ۱ | تضمین دقت اطلاعات و تطابق با قوانین | 125 | | طراح UX/UI | ۱ | طراحی رابط کاربری ساده و کاربرپسند | 126 | | مدیر فروش و بازاریابی | ۱ | جذب مشتریان و همکاری با شرکت‌ها | 127 | 128 | ### 💻 **زیرساخت‌های فنی:** 129 | - سرورهای ابری یا هاست داخلی با امنیت بالا 130 | - پایگاه داده (PostgreSQL یا MongoDB) 131 | - ابزارهای توسعه و مدیریت پروژه (Jira, Git, Docker) 132 | 133 | --- 134 | 135 | ## ۸. **برنامه زمانی (Timeline)** 136 | 137 | | مرحله | زمان‌بندی | توضیحات | 138 | |-------|----------|--------| 139 | | ۱. تحقیق و طراحی | ۲ ماه | تحلیل نیازها، طراحی معماری، جمع‌آوری داده‌های بیمه | 140 | | ۲. توسعه نسخه اولیه (MVP) | ۳ ماه | چت‌بات ساده + پایگاه دانش اولیه | 141 | | ۳. تست داخلی و اصلاح | ۱ ماه | تست با نمایندگان بیمه | 142 | | ۴. راه‌اندازی پایلوت | ۲ ماه | نصب در ۱-۲ شرکت بیمه | 143 | | ۵. راه‌اندازی رسمی و بازاریابی | از ماه ۸ | فروش به شرکت‌های بیمه | 144 | | ۶. به‌روزرسانی و گسترش | مداوم | افزودن ماژول‌های جدید، پشتیبانی چندزبانه، ادغام با سیستم‌های بیشتر | 145 | 146 | --- 147 | 148 | ## ۹. **تحلیل مالی (Financial Plan)** 149 | 150 | ### 💰 **هزینه‌های اولیه (سال اول):** 151 | | مورد | هزینه تقریبی (میلیون تومان) | 152 | |------|---------------------------| 153 | | حقوق تیم | ۳۰۰ | 154 | | زیرساخت فنی (سرور، لایسنس) | ۲۰۰ | 155 | | توسعه نرم‌افزار | ۱۵۰ | 156 | | هزینه‌های اداری و حقوقی| ۵۰ | 157 | | **جمع کل** | **۷۰۰ میلیون تومان** | 158 | 159 | ### 💵 **درآمد پیش‌بینی شده (سال اول):** 160 | - ۵ شرکت بیمه با میانگین ۱۰ میلیون تومان/ماه = ۶۰۰ میلیون تومان درآمد سالانه 161 | - درآمدهای جانبی (نصب، ماژول‌ها): ۲۰۰ میلیون تومان 162 | - **جمع کل درآمد:** ۸۰۰ میلیون تومان 163 | 164 | ➡️ **سود خالص تقریبی سال اول:** ۱۰۰ میلیون تومان 165 | ➡️ **سهمیه سود سال دوم و سوم:** رشد ۱۰۰٪ تا ۱۵۰٪ 166 | 167 | --- 168 | 169 | ## ۱۰. **تحلیل ریسک و راهکارهای کاهش آن** 170 | 171 | | ریسک | توضیح | راهکار | 172 | |------|-------|--------| 173 | | مقاومت شرکت‌ها به تغییر | برخی شرکت‌ها از فناوری جدید می‌ترسند | ارائه نسخه آزمایشی رایگان (Pilot) | 174 | | خطای پاسخ‌های هوش مصنوعی | اطلاعات نادرست ممکن است مشکل ایجاد کند | سیستم نظارت انسانی (Human-in-the-loop) و یادگیری مداوم | 175 | | نقض حریم خصوصی | نگرانی درباره داده‌های مشتری | رعایت استانداردهای امنیتی و عدم ذخیره داده شخصی | 176 | | رقابت | ورود رقبا با محصولات مشابه | تمرکز بر تخصصی‌سازی در بیمه و ارائه ماژول‌های انحصاری | 177 | 178 | --- 179 | 180 | ## ۱۱. **چشم‌انداز و گسترش آینده** 181 | 182 | - گسترش به بازارهای عربی‌زبان (خاورمیانه) 183 | - افزودن قابلیت پردازش صوتی (Voice Assistant) 184 | - ادغام با بات‌های بانکی و سیستم‌های مالی 185 | - ایجاد یک اکوسیستم آموزشی برای نمایندگان بیمه با هوش مصنوعی 186 | 187 | --- 188 | 189 | ## ✅ **جمع‌بندی** 190 | 191 | **InsurBot** یک راه‌حل نوآورانه و ضروری برای دیجیتالی‌سازی صنعت بیمه در ایران است. با ترکیب هوش مصنوعی، دانش تخصصی بیمه و رابط کاربری هوشمند، این دستیار می‌تواند: 192 | - هزینه‌های عملیاتی را کاهش دهد 193 | - کیفیت خدمات را افزایش دهد 194 | - تجربه نمایندگان و مشتریان را متحول کند 195 | 196 | این پروژه پتانسیل بالایی برای رشد و سودآوری دارد و می‌تواند به یک استاندارد جدید در صنعت بیمه تبدیل شود 197 | -------------------------------------------------------------------------------- /Course/QT/qt-document.rts: -------------------------------------------------------------------------------- 1 | 2 | 3 | ### 1. QApplication 4 | ##- **توضیح**: این کلاس اصلی برنامه PyQt است. برای هر برنامه PyQt6 باید یک شی از این کلاس ایجاد کنید. 5 | ##- **ویژگی‌ها**: مدیریت رویدادها، تنظیمات عمومی و غیره. 6 | 7 | ### 2. QMainWindow 8 | ##- **توضیح**: این کلاس برای ایجاد پنجره‌های اصلی برنامه استفاده می‌شود. 9 | ##- **ویژگی‌ها**: شامل نوار منو، نوار ابزار و وضعیت است. 10 | 11 | ### 3. QWidget 12 | ##- **توضیح**: این کلاس پایه‌ای برای تمام ویجت‌ها است. می‌توان از آن برای ایجاد ویجت‌های سفارشی استفاده کرد. 13 | ##- **ویژگی‌ها**: قابلیت افزودن چیدمان و ویجت‌های دیگر. 14 | 15 | ### 4. QPushButton 16 | ##- **توضیح**: این کلاس برای ایجاد دکمه‌ها استفاده می‌شود. 17 | ##- **ویژگی‌ها**: قابلیت اتصال سیگنال‌ها و اسلات‌ها، تغییر متن و ظاهر. 18 | 19 | ### 5. QLineEdit 20 | ##- **توضیح**: این کلاس برای ورودی متن استفاده می‌شود. 21 | ##- **ویژگی‌ها**: قابلیت دریافت متن از کاربر، تغییرات در متن و تنظیمات مختلف مانند محدودیت طول. 22 | 23 | ### 6. QTextEdit 24 | ##- **توضیح**: این کلاس برای ویرایش متن چندخطی استفاده می‌شود. 25 | ##- **ویژگی‌ها**: قابلیت فرمت‌دهی متن، افزودن تصاویر و غیره. 26 | 27 | ### 7. QLabel 28 | ##- **توضیح**: این کلاس برای نمایش متن یا تصاویر استفاده می‌شود. 29 | ##- **ویژگی‌ها**: قابلیت تنظیم متن، تصویر و فرمت‌دهی. 30 | 31 | ### 8. QComboBox 32 | ##- **توضیح**: این کلاس برای ایجاد لیست کشویی استفاده می‌شود. 33 | ##- **ویژگی‌ها**: قابلیت انتخاب یک گزینه از بین چند گزینه. 34 | 35 | ### 9. QListWidget 36 | ##- **توضیح**: این کلاس برای نمایش لیست از اقلام استفاده می‌شود. 37 | ##- **ویژگی‌ها**: قابلیت انتخاب چندگانه، افزودن و حذف اقلام. 38 | 39 | ### 10. QSlider 40 | ##- **توضیح**: این کلاس برای ایجاد اسلایدری برای انتخاب مقادیر استفاده می‌شود. 41 | ##- **ویژگی‌ها**: قابلیت تنظیم حداقل و حداکثر، اتصال سیگنال به تغییرات. 42 | 43 | ### 11. QProgressBar 44 | ##- **توضیح**: این کلاس برای نمایش پیشرفت یک عمل استفاده می‌شود. 45 | ##- **ویژگی‌ها**: قابلیت تنظیم مقدار فعلی و حداکثر. 46 | 47 | ### 12. QMenuBar 48 | ##- **توضیح**: این کلاس برای ایجاد نوار منو در پنجره‌ها استفاده می‌شود. 49 | ##- **ویژگی‌ها**: قابلیت افزودن منوها و گزینه‌ها. 50 | 51 | ### 13. QMessageBox 52 | ##- **توضیح**: این کلاس برای نمایش دیالوگ‌های پیغام استفاده می‌شود. 53 | ##- **ویژگی‌ها**: قابلیت نمایش پیغام‌ها، سوالات و اخطارها. 54 | 55 | ### 14. QFileDialog 56 | ##- **توضیح**: این کلاس برای باز کردن دیالوگ انتخاب فایل استفاده می‌شود. 57 | ##- **ویژگی‌ها**: قابلیت انتخاب فایل‌ها و دایرکتوری‌ها. 58 | 59 | ### 15. QVBoxLayout و QHBoxLayout 60 | ##- **توضیح**: این کلاس‌ها برای مدیریت چیدمان ویجت‌ها به صورت عمودی و افقی استفاده می‌شوند. 61 | ##- **ویژگی‌ها**: قابلیت افزودن ویجت‌ها و تنظیم فاصله‌ها. 62 | 63 | ### 16. QGridLayout 64 | ##- **توضیح**: این کلاس برای چیدمان ویجت‌ها در یک جدول استفاده می‌شود. 65 | ##- **ویژگی‌ها**: قابلیت تنظیم موقعیت دقیق ویجت‌ها. 66 | 67 | ### 17. QTabWidget 68 | ##- **توضیح**: این کلاس برای ایجاد تب‌ها در یک پنجره استفاده می‌شود. 69 | ##- **ویژگی‌ها**: قابلیت افزودن چندین تب و مدیریت محتوای هر تب. 70 | 71 | ### 18. QStackedWidget 72 | ##- **توضیح**: این کلاس برای نمایش یک مجموعه از ویجت‌ها به صورت پشته‌ای استفاده می‌شود. 73 | ##- **ویژگی‌ها**: قابلیت نمایش یک ویجت در هر زمان. 74 | 75 | ### 19. QTreeWidget 76 | ##- **توضیح**: این کلاس برای نمایش داده‌ها به صورت درختی استفاده می‌شود. 77 | ##- **ویژگی‌ها**: قابلیت نمایش سلسله‌مراتب داده‌ها. 78 | 79 | ### 20. QSpinBox 80 | ##- **توضیح**: این کلاس برای ورودی عددی استفاده می‌شود. 81 | ##- **ویژگی‌ها**: قابلیت افزایش و کاهش مقدار با دکمه‌ها. 82 | #================================================================= 83 | ### جزوه آموزشی: ایجاد اولین پنجره با PyQt6 84 | 85 | #### مقدمه 86 | PyQt6 یک کتابخانه قدرتمند برای ایجاد رابط‌های کاربری گرافیکی (GUI) در پایتون است. این جزوه به شما آموزش می‌دهد که چگونه اولین پنجره خود را با استفاده از PyQt6 ایجاد کنید. 87 | 88 | --- 89 | 90 | #### 1. نصب PyQt6 91 | 92 | pip install PyQt6 93 | #### 2. ایجاد برنامه ساده 94 | ##### کد نمونه: 95 | 96 | import sys 97 | from PyQt6.QtWidgets import QApplication, QMainWindow 98 | 99 | # ایجاد یک شی از QApplication 100 | app = QApplication(sys.argv) 101 | 102 | # ایجاد پنجره اصلی 103 | window = QMainWindow() 104 | window.setWindowTitle("برنامه ساده PyQt6") # عنوان پنجره 105 | window.setGeometry(100, 100, 600, 400) # موقعیت و اندازه پنجره (x, y, width, height) 106 | 107 | # نمایش پنجره 108 | window.show() 109 | 110 | # اجرای برنامه 111 | sys.exit(app.exec()) 112 | 113 | 114 | #### 3. توضیحات کد 115 | 116 | - **import sys**: برای مدیریت سیستم و خروج از برنامه استفاده می‌شود. 117 | - **from PyQt6.QtWidgets import QApplication, QMainWindow**: کلاس‌های لازم برای ایجاد برنامه و پنجره وارد می‌شوند. 118 | - **QApplication**: شیء اصلی برنامه که مدیریت رویدادها را بر عهده دارد. 119 | - **QMainWindow**: کلاس برای ایجاد پنجره اصلی. 120 | - **setWindowTitle**: عنوان پنجره را تنظیم می‌کند. 121 | - **setGeometry**: موقعیت و اندازه پنجره را تعیین می‌کند. 122 | - **show()**: پنجره را نمایش می‌دهد. 123 | - **sys.exit(app.exec())**: برنامه را اجرا کرده و در صورت بسته شدن به درستی خارج می‌شود. 124 | #================================================================================ 125 | ### خلاصه آموزش: سیگنال‌ها و اسلات‌ها در PyQt6 126 | 127 | #### مقدمه 128 | سیگنال‌ها و اسلات‌ها مکانیزم‌های اصلی برای مدیریت رویدادها در PyQt6 هستند. این سیستم به شما اجازه می‌دهد تا واکنش‌های خاصی را به رویدادهای مختلف (مانند کلیک روی دکمه) متصل کنید. 129 | 130 | #### 1. مفهوم سیگنال‌ها و اسلات‌ها 131 | 132 | - **سیگنال**: وقتی یک رویداد خاص (مثل کلیک روی دکمه) رخ می‌دهد، یک سیگنال ارسال می‌شود. 133 | - **اسلات**: تابعی است که به سیگنال متصل می‌شود و در زمان ارسال سیگنال اجرا می‌شود. 134 | 135 | #### 2. نحوه استفاده 136 | 137 | ##### کد نمونه: 138 | 139 | import sys 140 | from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QMessageBox 141 | 142 | def show_message(): 143 | QMessageBox.information(window, "پیغام", "دکمه کلیک شد!") 144 | 145 | app = QApplication(sys.argv) 146 | window = QMainWindow() 147 | window.setWindowTitle("سیگنال‌ها و اسلات‌ها") 148 | window.setGeometry(100, 100, 300, 200) 149 | 150 | button = QPushButton("کلیک کن", window) 151 | button.clicked.connect(show_message) # اتصال سیگنال کلیک به اسلات 152 | 153 | window.show() 154 | sys.exit(app.exec()) 155 | 156 | #### 3. توضیحات کد 157 | 158 | - **QPushButton**: دکمه‌ای ایجاد می‌کند که کاربر می‌تواند روی آن کلیک کند. 159 | - **clicked.connect(show_message)**: سیگنال `clicked` دکمه را به تابع `show_message` متصل می‌کند. 160 | - **QMessageBox**: برای نمایش پیغام به کاربر استفاده می‌شود. 161 | 162 | #### 4. نکات کلیدی 163 | 164 | - **چندین سیگنال**: می‌توانید چندین سیگنال را به یک اسلات متصل کنید. 165 | - **سیگنال‌های سفارشی**: می‌توانید سیگنال‌های سفارشی نیز تعریف کنید. 166 | 167 | #================================================================================== 168 | 169 | 170 | #### مقدمه 171 | ویجت‌ها اجزای اصلی رابط کاربری در PyQt6 هستند. آن‌ها به شما امکان می‌دهند تا عناصر مختلفی مانند دکمه‌ها، متن‌ها، لیست‌ها و غیره را در برنامه خود ایجاد کنید. 172 | 173 | 174 | #### 1. انواع ویجت‌ها 175 | 176 | - **QPushButton**: دکمه‌های کلیکی. 177 | - **QLabel**: برای نمایش متن یا تصویر. 178 | - **QLineEdit**: برای ورود متن. 179 | - **QTextEdit**: برای ورود متن چندخطی. 180 | - **QComboBox**: لیست کشویی برای انتخاب. 181 | - **QCheckBox**: جعبه‌های انتخابی. 182 | - **QRadioButton**: دکمه‌های رادیویی برای انتخاب یک گزینه از چند گزینه. 183 | 184 | #### 2. ایجاد ویجت‌ها 185 | 186 | import sys 187 | from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel, QVBoxLayout, QWidget 188 | 189 | app = QApplication(sys.argv) 190 | window = QMainWindow() 191 | window.setWindowTitle("ویجت‌ها در PyQt6") 192 | 193 | # ایجاد ویجت‌ها 194 | label = QLabel("سلام، این یک برچسب است.") 195 | button = QPushButton("کلیک کن") 196 | 197 | # تنظیم لایه 198 | layout = QVBoxLayout() 199 | layout.addWidget(label) 200 | layout.addWidget(button) 201 | 202 | # ایجاد یک ویجت مرکزی 203 | central_widget = QWidget() 204 | central_widget.setLayout(layout) 205 | window.setCentralWidget(central_widget) 206 | 207 | window.show() 208 | sys.exit(app.exec()) 209 | 210 | #### 3. توضیحات کد 211 | 212 | - **QVBoxLayout**: برای چیدمان عمودی ویجت‌ها استفاده می‌شود. 213 | - **setCentralWidget**: ویجت مرکزی را برای پنجره تنظیم می‌کند. 214 | 215 | --- 216 | 217 | #### 4. نکات کلیدی 218 | 219 | - **تنظیم لایه**: استفاده از لایه‌ها برای سازماندهی ویجت‌ها بسیار مهم است. 220 | - **سفارشی‌سازی**: می‌توانید ظاهر و رفتار ویجت‌ها را با استفاده از متدهای مختلف سفارشی کنید. 221 | --------------------------------------------------------------------------------