ichuk commited on
Commit
31aa677
·
verified ·
1 Parent(s): a12e029

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +97 -22
README.md CHANGED
@@ -1,5 +1,9 @@
1
  ---
2
  license: mit
 
 
 
 
3
  tags:
4
  - math
5
  - algebra
@@ -7,53 +11,124 @@ tags:
7
  - pytorch
8
  - onnx
9
  - safetensors
 
10
  - rnn
11
  - gru
12
  pipeline_tag: feature-extraction
13
  ---
14
 
15
- # 🤖 Stupi-Equation-Solver (1st–4th Degree)
16
 
17
- Нейросетевой решатель алгебраических уравнений степеней от 1 до 4 (полных и неполных) по сырому тексту.
18
 
19
- Модель обучена извлекать действительные корни полиномов из чистого символьного текста (включая квадратные корни, деление, смену знаков и формулу Кардано).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
 
21
- ## 📊 Архитектура и Обучение
22
- * **Архитектура:** 2-слойная Двунаправленная GRU (BiGRU) + Полносвязный MLP
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  * **Размерности:** `embed_dim=64`, `hidden_dim=384`, `max_roots=4`
24
- * **Обучение:** Обучена на суммарном датасете из более чем **1 000 000 синтетических уравнений**
25
- * **Аппаратное ускорение:** Intel Arc A770 (16GB) под Arch Linux через PyTorch XPU (Level Zero)
26
- * **Функция потерь:** Masked MSE Loss (учитывает только существующие действительные корни)
27
 
28
- ## 🎯 Метрики качества (Бенчмарк)
29
  * **Степень 1 (Линейные):** MAE ≈ **0.33**
30
  * **Степень 2 (Квадратные):** MAE ≈ **0.27** *(Точное извлечение корней, включая иррациональные до сотых, например $1 - \sqrt{2} \approx -0.41$)*
31
  * **Степень 3 (Кубические):** MAE ≈ **0.60**
32
  * **Степень 4 (4-я степень):** MAE ≈ **1.17**
33
  * **Общая средняя ошибка (Overall MAE):** **~0.69 – 0.75**
34
 
35
- ## 🚀 Быстрый запуск (ONNX Runtime)
 
 
36
 
37
  ```python
 
38
  import numpy as np
39
  import onnxruntime as ort
40
- import json
41
 
 
42
  session = ort.InferenceSession("model.onnx")
43
 
44
  with open("config.json", "r", encoding="utf-8") as f:
45
- meta = json.load(f)
 
 
 
46
 
47
- vocab = meta["vocab"]
48
- max_len = meta["max_len"]
 
 
 
 
 
 
 
 
 
49
 
50
- def solve(equation_str):
51
- tokens = [vocab.get(ch, 1) for ch in equation_str]
52
  tokens = tokens[:max_len] + [0] * max(0, max_len - len(tokens))
53
- inp = np.array([tokens], dtype=np.int64)
54
-
55
- roots = session.run(["roots"], {"tokens": inp})[0][0]
56
- return [round(float(r), 2) for r in roots]
57
 
58
- print(solve("x^2 - 16 = 0")) # -> [3.85, -4.02, ...]
59
- print(solve("3x^2 - 4x - 15 = 0")) # -> [2.96, -1.59, ...]
 
 
 
 
1
  ---
2
  license: mit
3
+ language:
4
+ - en
5
+ - pl
6
+ - ru
7
  tags:
8
  - math
9
  - algebra
 
11
  - pytorch
12
  - onnx
13
  - safetensors
14
+ - gguf
15
  - rnn
16
  - gru
17
  pipeline_tag: feature-extraction
18
  ---
19
 
20
+ # 🤖 Stupi-Equation-Solver (1st–4th Degree Polynomials)
21
 
22
+ [English](#-english) | [Polski](#-polski) | [Русский](#-русский)
23
 
24
+ ---
25
+
26
+ ## 🇬🇧 English
27
+
28
+ ### Description
29
+ A lightweight neural network designed to solve algebraic polynomial equations from **1st to 4th degree** (both complete and incomplete) directly from raw character text.
30
+
31
+ The model infers real roots without any external CAS/symbolic algebra engines—it learns polynomial factorization, discriminant calculation, sign switching, and roots extraction directly from ASCII strings.
32
+
33
+ ### 📊 Architecture & Training
34
+ * **Model Architecture:** 2-layer Bidirectional GRU (BiGRU) + Deep MLP regression head
35
+ * **Parameters:** `embed_dim=64`, `hidden_dim=384`, `max_roots=4`
36
+ * **Dataset:** Trained on over **1,000,000 synthetic equations** (random variable names $x, y, a, t, z...$, non-monic scales from -6 to +12, roots range $[-20, 20]$)
37
+ * **Hardware Acceleration:** **Intel Arc A770 (16GB GDDR6)** on **Arch Linux** via PyTorch XPU (oneAPI / Level Zero backend)
38
+ * **Loss Function:** Custom Masked MSE Loss (penalizes only valid real roots, masking out padding slots)
39
+
40
+ ### 🎯 Benchmark Results (100 Unseen Test Equations)
41
+ * **Degree 1 (Linear):** MAE ≈ **0.33**
42
+ * **Degree 2 (Quadratic):** MAE ≈ **0.27** *(Accurate on full quadratics and irrationals, e.g. $1 - \sqrt{2} \approx -0.41$)*
43
+ * **Degree 3 (Cubic):** MAE ≈ **0.60**
44
+ * **Degree 4 (Quartic):** MAE ≈ **1.17**
45
+ * **Overall Mean Absolute Error (MAE):** **~0.69 – 0.75**
46
+
47
+ ---
48
+
49
+ ## 🇵🇱 Polski
50
+
51
+ ### Opis
52
+ Neuronowy solver równań algebraicznych wielomianowych od **1. do 4. stopnia** (zarówno zupełnych, jak i niezupełnych) bezpośrednio z surowego tekstu znakowego.
53
+
54
+ Model wyznacza pierwiastki rzeczywiste bez użycia zewnętrznych silników symbolicznych (CAS) — uczy się wyznaczania wyróżnika (delty), rozkładu na czynniki, reguły znaków i pierwiastkowania wprost z ciągów znaków ASCII.
55
+
56
+ ### 📊 Architektura i Trening
57
+ * **Architektura:** 2-warstwowy dwukierunkowy GRU (BiGRU) + głęboka regresyjna głowica MLP
58
+ * **Wymiary:** `embed_dim=64`, `hidden_dim=384`, `max_roots=4`
59
+ * **Zbiór danych:** Wytrenowany na ponad **1 000 000 syntetycznych równań** (losowe zmienne $x, y, a, t...$, współczynniki skalowania od -6 do +12, zakres pierwiastków $[-20, 20]$)
60
+ * **Akceleracja sprzętowa:** **Intel Arc A770 (16GB)** pod **Arch Linux** z wykorzystaniem PyTorch XPU (Level Zero)
61
+ * **Funkcja straty:** Masked MSE Loss (uwzględnia wyłącznie istniejące pierwiastki rzeczywiste)
62
 
63
+ ### 🎯 Wyniki testowe (Benchmark 100 równań)
64
+ * **Stopień 1 (Liniowe):** MAE ≈ **0.33**
65
+ * **Stopień 2 (Kwadratowe):** MAE ≈ **0.27** *(Wysoka precyzja na pierwiastkach niewymiernych, np. $1 - \sqrt{2} \approx -0.41$)*
66
+ * **Stopień 3 (Sześcienne):** MAE ≈ **0.60**
67
+ * **Stopień 4 (4. stopień):** MAE ≈ **1.17**
68
+ * **Średni błąd bezwzględny (Ogólny MAE):** **~0.69 – 0.75**
69
+
70
+ ---
71
+
72
+ ## 🇷🇺 Русский
73
+
74
+ ### Описание
75
+ Нейросетевой решатель алгебраических уравнений степеней **от 1 до 4** (полных и неполных) по сырому символьному тексту.
76
+
77
+ Модель находит действительные корни полиномов без сторонних систем компьютерной алгебры (CAS) — она выучила формулы Виета, дискриминант, смену знаков и извлечение корней напрямую из строк ASCII.
78
+
79
+ ### 📊 Архитектура и Обучение
80
+ * **Архитектура:** 2-слойная Двунаправленная GRU (BiGRU) + Полносвязная голова MLP
81
  * **Размерности:** `embed_dim=64`, `hidden_dim=384`, `max_roots=4`
82
+ * **Датасет:** Обучена суммарно на более чем **1 000 000 синтетических уравнений** (различные переменные $x, y, a, t...$, коэффициенты от -6 до +12, диапазон корней $[-20, 20]$)
83
+ * **Аппаратное ускорение:** **Intel Arc A770 (16GB)** под **Arch Linux** через PyTorch XPU (интерфейс Level Zero)
84
+ * **Функция потерь:** Кастомный Masked MSE Loss (штрафует только за существующие действительные корни)
85
 
86
+ ### 🎯 Метрики качества (Бенчмарк на 100 контрольных уравнениях)
87
  * **Степень 1 (Линейные):** MAE ≈ **0.33**
88
  * **Степень 2 (Квадратные):** MAE ≈ **0.27** *(Точное извлечение корней, включая иррациональные до сотых, например $1 - \sqrt{2} \approx -0.41$)*
89
  * **Степень 3 (Кубические):** MAE ≈ **0.60**
90
  * **Степень 4 (4-я степень):** MAE ≈ **1.17**
91
  * **Общая средняя ошибка (Overall MAE):** **~0.69 – 0.75**
92
 
93
+ ---
94
+
95
+ ## 💻 Quick Start / Szybki start / Быстрый запуск (ONNX Runtime)
96
 
97
  ```python
98
+ import json
99
  import numpy as np
100
  import onnxruntime as ort
 
101
 
102
+ # 1. Load ONNX model and metadata
103
  session = ort.InferenceSession("model.onnx")
104
 
105
  with open("config.json", "r", encoding="utf-8") as f:
106
+ config = json.load(f)
107
+
108
+ vocab = config["vocab"]
109
+ max_len = config["max_len"]
110
 
111
+ # 2. Inference function
112
+ def solve(equation: str):
113
+ equation = equation.strip()
114
+ if "=" not in equation:
115
+ equation += " = 0"
116
+
117
+ # Determine polynomial degree
118
+ if "^4" in equation: deg = 4
119
+ elif "^3" in equation: deg = 3
120
+ elif "^2" in equation: deg = 2
121
+ else: deg = 1
122
 
123
+ tokens = [vocab.get(ch, 1) for ch in equation]
 
124
  tokens = tokens[:max_len] + [0] * max(0, max_len - len(tokens))
125
+ input_data = np.array([tokens], dtype=np.int64)
126
+
127
+ preds = session.run(["roots"], {"tokens": input_data})[0][0]
128
+ return [round(float(r), 2) for r in preds[:deg]]
129
 
130
+ # 3. Test examples
131
+ print(solve("3x^2 - 4x - 15 = 0")) # -> [2.96, -1.59] (Exact: 3.0, -1.67)
132
+ print(solve("x^2 - 2x - 1 = 0")) # -> [2.03, -0.41] (Exact: 2.41, -0.41)
133
+ print(solve("x^2 - 16 = 0")) # -> [3.85, -4.02] (Exact: 4.0, -4.0)
134
+ print(solve("a^3 - 3a^2 + 2a = 0")) # -> [2.09, 0.84, -0.14] (Exact: 2.0, 1.0, 0.0)