forked from EurekaLabsAI/ngram
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathretraining_guide.txt
257 lines (214 loc) · 10.9 KB
/
retraining_guide.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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
142
143
144
145
146
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
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
Инструкция по дообучению модели на новых данных
1. Подготовка новых данных
1.1. Требования к формату данных:
- Каждый адрес должен быть на новой строке
- Формат: latitude,longitude|street_address|locality|region|postcode
- Пример: 55.853729,-4.254518|40 Carlton Pl|Glasgow|Lanarkshire|G5 9TS
1.2. Проверка качества данных:
Выполните следующие команды для базовой проверки данных:
```bash
# Проверка формата данных
head -n 5 your_new_data.csv # Просмотр первых 5 строк
# Подсчет общего количества записей
wc -l your_new_data.csv
# Проверка на пустые строки
grep -c "^$" your_new_data.csv
# Проверка формата координат (должны быть числа с точкой)
awk -F'|' '{print $1}' your_new_data.csv | grep -v "^-\?[0-9]\+\.[0-9]\+,-\?[0-9]\+\.[0-9]\+$"
# Поиск строк с неправильным количеством разделителей
awk -F'|' 'NF!=5' your_new_data.csv
# Поиск дубликатов
sort your_new_data.csv | uniq -d
```
2. Предварительная обработка
2.1. Создание рабочей копии данных:
```bash
# Создание рабочей директории
mkdir -p data/retraining_$(date +%Y%m%d)
cd data/retraining_$(date +%Y%m%d)
# Копирование данных
cp ../../your_new_data.csv raw_data.csv
```
2.2. Запуск предобработки:
```bash
# Активация виртуального окружения
source ../../venv/bin/activate
# Запуск предобработки
python3 ../../data/preprocess_geo.py \
--input raw_data.csv \
--output processed_data.txt \
--log-file preprocessing.log
# Проверка результатов
head -n 5 processed_data.txt
wc -l processed_data.txt
```
2.3. Анализ результатов предобработки:
```bash
# Проверка статистики обработки
cat preprocessing.log
# Поиск потенциальных проблем в обработанных данных
grep -i "error" preprocessing.log
grep -i "warning" preprocessing.log
# Проверка распределения компонентов адреса
awk -F'|' '{print NF}' processed_data.txt | sort | uniq -c
```
3. Разделение и объединение данных
3.1. Создание резервных копий:
```bash
# Создание директории для бэкапов
mkdir -p ../../data/backups_$(date +%Y%m%d)
# Копирование текущих наборов данных
cp ../../data/train.txt ../../data/backups_$(date +%Y%m%d)/train.txt.backup
cp ../../data/val.txt ../../data/backups_$(date +%Y%m%d)/val.txt.backup
cp ../../data/test.txt ../../data/backups_$(date +%Y%m%d)/test.txt.backup
```
3.2. Разделение новых данных:
```bash
# Подсчет количества строк для каждого набора
total_lines=$(wc -l < processed_data.txt)
train_lines=$(( total_lines * 80 / 100 ))
val_lines=$(( total_lines * 10 / 100 ))
test_lines=$(( total_lines * 10 / 100 ))
# Случайное перемешивание и разделение
shuf processed_data.txt > shuffled_data.txt
head -n $train_lines shuffled_data.txt > new_train.txt
head -n $val_lines shuffled_data.txt | tail -n $val_lines > new_val.txt
tail -n $test_lines shuffled_data.txt > new_test.txt
```
3.3. Объединение с существующими данными:
```bash
# Объединение наборов данных
cat new_train.txt >> ../../data/train.txt
cat new_val.txt >> ../../data/val.txt
cat new_test.txt >> ../../data/test.txt
# Проверка результатов
echo "Размеры новых наборов данных:"
wc -l ../../data/train.txt
wc -l ../../data/val.txt
wc -l ../../data/test.txt
```
4. Настройка параметров модели
4.1. Создание конфигурационного файла:
```bash
# Создание файла с текущими параметрами
cat > retrain_config.json << EOL
{
"component_weights": {
"coordinates": 0.4,
"street": 0.3,
"locality": 0.15,
"region": 0.1,
"postcode": 0.05
},
"coordinate_normalization": {
"lat_scale": 0.01,
"lon_scale": 0.01
},
"similarity_threshold": 0.85,
"duplicate_threshold": 0.95
}
EOL
```
5. Запуск дообучения
5.1. Подготовка окружения:
```bash
# Активация виртуального окружения (если еще не активировано)
source ../../venv/bin/activate
# Проверка зависимостей
pip install -r ../../requirements.txt
# Создание директории для логов
mkdir -p logs
```
5.2. Запуск процесса обучения:
```bash
# Запуск с сохранением логов
python3 ../../address_cli.py \
--retrain \
--config retrain_config.json \
--log-file logs/retrain_$(date +%Y%m%d).log
```
5.3. Мониторинг процесса:
```bash
# Просмотр логов в реальном времени
tail -f logs/retrain_$(date +%Y%m%d).log
# После завершения - анализ результатов
grep "Accuracy" logs/retrain_$(date +%Y%m%d).log
grep "Processing time" logs/retrain_$(date +%Y%m%d).log
```
6. Тестирование и валидация
6.1. Автоматическое тестирование:
```bash
# Запуск тестов с подробным выводом
python3 ../../test_model.py --verbose \
--test-file ../../data/test.txt \
--output-file logs/test_results_$(date +%Y%m%d).json
```
6.2. Интерактивное тестирование:
```bash
# Запуск CLI в интерактивном режиме
python3 ../../address_cli.py --interactive
# Примеры тестовых запросов:
# 1. Полный адрес: "55.853729,-4.254518|40 Carlton Pl|Glasgow|Lanarkshire|G5 9TS"
# 2. Частичный адрес: "40 Carlton Place, Glasgow"
# 3. Адрес с опечаткой: "40 Carlten Place, Glasgow"
```
6.3. Анализ производительности:
```bash
# Тестирование производительности
time python3 ../../test_model.py --benchmark \
--iterations 1000 \
--output-file logs/benchmark_$(date +%Y%m%d).json
# Анализ результатов
python3 ../../test_model.py --analyze-results \
logs/benchmark_$(date +%Y%m%d).json
```
7. Откат изменений (при необходимости)
7.1. Восстановление из резервной копии:
```bash
# Проверка наличия бэкапов
ls -l ../../data/backups_$(date +%Y%m%d)
# Восстановление данных
cp ../../data/backups_$(date +%Y%m%d)/train.txt.backup ../../data/train.txt
cp ../../data/backups_$(date +%Y%m%d)/val.txt.backup ../../data/val.txt
cp ../../data/backups_$(date +%Y%m%d)/test.txt.backup ../../data/test.txt
```
7.2. Очистка временных файлов:
```bash
# Удаление временных файлов
rm -rf processed_data.txt shuffled_data.txt new_*.txt
```
8. Финальные шаги
8.1. Очистка после успешного дообучения:
```bash
# Удаление временных файлов
rm -rf processed_data.txt shuffled_data.txt new_*.txt
# Архивация логов
tar -czf logs_$(date +%Y%m%d).tar.gz logs/
mv logs_$(date +%Y%m%d).tar.gz ../../data/logs/
```
8.2. Обновление документации:
```bash
# Создание отчета о дообучении
cat > retraining_report_$(date +%Y%m%d).md << EOL
# Отчет о дообучении модели $(date +%Y-%m-%d)
## Статистика данных
- Исходный размер данных: $(wc -l < raw_data.csv)
- Размер после обработки: $(wc -l < processed_data.txt)
- Финальные размеры наборов:
- Обучающий: $(wc -l < ../../data/train.txt)
- Валидационный: $(wc -l < ../../data/val.txt)
- Тестовый: $(wc -l < ../../data/test.txt)
## Метрики качества
$(grep "Accuracy" logs/retrain_$(date +%Y%m%d).log)
## Производительность
$(grep "Processing time" logs/retrain_$(date +%Y%m%d).log)
EOL
```
Важные замечания:
1. Все команды предполагают выполнение из корневой директории проекта
2. Перед выполнением команд убедитесь, что виртуальное окружение активировано
3. Регулярно проверяйте логи на наличие ошибок и предупреждений
4. Сохраняйте все отчеты и метрики для последующего анализа
5. При возникновении ошибок обращайтесь к логам для диагностики
6. Рекомендуется выполнять дообучение на машине с достаточным объемом памяти и CPU
7. Все временные метки в именах файлов помогают отслеживать историю изменений