|
|
|||||||
Как составлять обучающую выборку? (на примере поддержки малых языков)26.12.2025, 23:38. Показов 685. Ответов 8
Метки обучение нейронной сети (Все метки)
Общий вопрос, вызывающий у меня полное непонимание, — как составлять обучающую выборку, чтобы обучение было эффективным и результат подходящим.
Всё ниже — это пример задачи, повод для обсуждения. Рассмотрим задачу:
Будем для простоты рассматривать вызов jq без ключей. В таком режиме jq преобразует входной поток (последовательность) JSON-объектов в выходной поток JSON-объектов. Напомним синтаксис
Можно ограничиться фрагментом синтаксиса команд:
1. . — выходной поток совпадает со входным;2. query1 | query2 — композиция: сначала входной поток преобразуется по query1, а затем — по query2;3. .[key] — у каждого объекта из входного потока извлекается значение свойства key (если строка — то свойства объекта, если число — элемент массива по индексу); если свойство отсутствует, возвращается null;4. .foo является синонимом .["foo"], .foo.bar эквивалентно .foo | .bar;5. select(query) — для каждого объекта x из входного потока запустить query и вывести в выходной поток столько копий x, сколько истинозначных (не null или false) значений выдало queryНапример,
isActive, у оставшихся взять свойство username и оставить только истинозначные значения.
Если бы была только прямая задача, я бы её решал следующим образом: 1. алгоритмическое текстовое описание запроса сухим языком, но точно соответствуя синтаксису и семантике конструкций; 2. полировка описания языковой моделькой. Я вижу такой метод решения прямой и обратной задачи: Берём модель общего назначения и дообучаем её низкоранговой Лорой на обучающей выборкой. Как сформировать обучающую выборку? Очевидно, автоматически. Возможно, с последующей ручной правкой. Какие шаблоны вопросов и шаблоны ответов использовать? Как много пар вопрос-ответ генерировать? В каком распределении генерировать запросы? Сколько простых запросов? Сколько запросов длины 10, 20, 50? Я могу сгенерировать обучающую выборку любого размера любого содержания. По каким критериям мне определять хорошесть той или иной выборки?
0
|
|||||||
| 26.12.2025, 23:38 | |
|
Ответы с готовыми решениями:
8
Как создать качественную обучающую выборку? Как создать несложную обучающую выборку для нейронной сети? Как правильно обучать multilabel классификатор на данных вне обучающей выборки (пустому/ненужному классу)? |
|
|
|||||||||||
| 04.01.2026, 15:42 [ТС] | |||||||||||
|
Вопрос ещё открыт.
И для того, чтобы повысить конструктивность, предлагаю конкретный набор данных для обучающей выборки. Пример 10 пар вопрос-ответ
Q: How do I write an object of the input stream, which is not false nor null in jq? A: So, the output stream must consist of an object of the input stream, which is not false nor null. It can be represented with the jq expression ```jq select(.) ``` The expression `select(.)` returns only those objects of the input stream, which is not false nor null. Q: How do I write a property "code" of input object's property "fullyInsteadPrefixLogic" in jq? A: So, the output stream must consist of a property "code" of input object's property "fullyInsteadPrefixLogic". It can be represented with the jq expression ```jq .fullyInsteadPrefixLogic | .code ``` The expression `.fullyInsteadPrefixLogic | .code` represents a composition of two transformations, `.fullyInsteadPrefixLogic` and `.code`. - The expression `.fullyInsteadPrefixLogic` means that the output stream is of the same length as the input stream and it consists of values of properties "fullyInsteadPrefixLogic" (null if no property is found or an input object is a number, a string or null). - The expression `.code` returns a value of the property "code" (null if no property is found or an input object is a number, a string or null). Q: Explain the jq expression `.` A: The expression `.` acts as an identity function which moves an input object to the output "as is" with no action performed. Q: Explain . in jq A: The expression `.` means the input object itself with no modification. Q: What does the expression `select(.seekingMethodsMothers | .evolutionTrail) | select(.fo) | .garbageSoulsEminem | select(.suffered | .[0] | .entCrazyDelayed | .[13] | .intDollarsSoulsOnion | .ethernetMpFolder | .supplier | .advertThongsRachel | .mindsPermit | .modelPretty | .suseTent | .gnomeThemes | .wrapping | .bookArcCourier)` stand for in jq? A: The jq expression `select(.seekingMethodsMothers | .evolutionTrail) | select(.fo) | .garbageSoulsEminem | select(.suffered | .[0] | .entCrazyDelayed | .[13] | .intDollarsSoulsOnion | .ethernetMpFolder | .supplier | .advertThongsRachel | .mindsPermit | .modelPretty | .suseTent | .gnomeThemes | .wrapping | .bookArcCourier)` represents a property "garbageSoulsEminem" of an object of the input stream, a property "evolutionTrail" of whose property "seekingMethodsMothers" is not false nor null, a property "fo" of which is not false nor null, a property "bookArcCourier" of a property "wrapping" of a property "gnomeThemes" of a property "suseTent" of a property "modelPretty" of a property "mindsPermit" of a property "advertThongsRachel" of a property "supplier" of a property "ethernetMpFolder" of a property "intDollarsSoulsOnion" of an element #13 of a property "entCrazyDelayed" of an element #0 of whose property "suffered" is not false nor null,. Q: In jq, what is .geography? A: The expression `.geography` means that the output stream is of the same length as the input stream and it consists of values of properties "geography" (null if no property is found or an input object is a number, a string or null). Q: What jq expression shall I use to represent a property "big" of a property "coverAgoFinalMed" of an object of the input stream, a property "toysNaked" of a property "2\\Hva^." of a property "vp" of a property "republicVgKirkMail" of whose property "quilt" is not false nor null, which is not false nor null? A: So, the output stream must consist of a property "big" of a property "coverAgoFinalMed" of an object of the input stream, a property "toysNaked" of a property "2\\Hva^." of a property "vp" of a property "republicVgKirkMail" of whose property "quilt" is not false nor null, which is not false nor null. It can be represented with the jq expression ```jq select(.quilt | .republicVgKirkMail | .vp | .["2\\Hva^."] | .toysNaked) | .coverAgoFinalMed | .big | select(.) ``` The expression `select(.quilt | .republicVgKirkMail | .vp | .["2\\Hva^."] | .toysNaked) | .coverAgoFinalMed | .big | select(.)` transforms the input stream sequentially by applying `select(.quilt | .republicVgKirkMail | .vp | .["2\\Hva^."] | .toysNaked) | .coverAgoFinalMed | .big` first and then `select(.)`. - The expression `select(.quilt | .republicVgKirkMail | .vp | .["2\\Hva^."] | .toysNaked) | .coverAgoFinalMed | .big` represents a composition of two transformations, `select(.quilt | .republicVgKirkMail | .vp | .["2\\Hva^."] | .toysNaked)` and `.coverAgoFinalMed | .big`. - The expression `select(.quilt | .republicVgKirkMail | .vp | .["2\\Hva^."] | .toysNaked)` represents a filtering function with a predicate defined by the query `.quilt | .republicVgKirkMail | .vp | .["2\\Hva^."] | .toysNaked`: - The expression `.quilt | .republicVgKirkMail | .vp | .["2\\Hva^."] | .toysNaked` represents a composition of two transformations, `.quilt | .republicVgKirkMail | .vp | .["2\\Hva^."]` and `.toysNaked`. - The expression `.quilt | .republicVgKirkMail | .vp | .["2\\Hva^."]` is a composition of `.quilt | .republicVgKirkMail | .vp` and `.["2\\Hva^."]`. - The expression `.quilt | .republicVgKirkMail | .vp` represents a property "vp" of a property "republicVgKirkMail" of an object's property "quilt". - The expression `.["2\\Hva^."]` means that the output stream is of the same length as the input stream, each input object produces a value of its property "2\\Hva^." if defined, and null otherwise. - The expression `.toysNaked` means that the output stream is of the same length as the input stream, each input object produces a value of its property "toysNaked" if defined, and null otherwise. - The expression `.coverAgoFinalMed | .big` transforms the input stream sequentially by applying `.coverAgoFinalMed` first and then `.big`. - The expression `.coverAgoFinalMed` means that the output stream is of the same length as the input stream, each input object produces a value of its property "coverAgoFinalMed" if defined, and null otherwise. - The expression `.big` means that the output stream is of the same length as the input stream and it consists of values of properties "big" (null if no property is found or an input object is a number, a string or null). - The expression `select(.)` picks those objects of the input stream that satisfy the query `.`. Q: What does the expression `.` stand for in jq? A: The expression `.` acts as an identity function which moves an input object to the output "as is" with no action performed. Q: What does the expression `.` mean in jq? A: The jq expression `.` represents an object of the input stream. Q: What jq expression shall I use to represent an object of the input stream? A: So, the output stream must consist of an object of the input stream. It can be represented with the jq expression ```jq . ``` The expression `.` means the input object itself with no modification. В приложении находится образец на 10 000 пар вопрос-ответ в формате JSON, совместимым с SFTTrainer и другими аналогичными инструментами. Пример обучения с этими данными
Предполагается, что файл train.json из приложения лежит в папке /workdir/dataset. Файл test.json я не прикрепляю, но он у меня выглядит аналогично train.json, только меньше в 100 раз. И ещё ремарка: мне пришлось создать файл /workdir/template.jinja с шаблоном запроса:
Исполняемый модуль:
Первыми результатами похвастаться не могу. Вопрос прежний: можно ли на этих данных натренировать сеть, скажем, Qwen/Qwen2.5-0.5B-Instruct (вроде подходящая низкопараметричная модель в качестве базовая), чтобы она была полезным помощником? Следует ли улучшить качество обучающих данных? Какой объём данных и сколько эпох использовать? Надо ли повышать или понижать долю вопросов на select, например, или на любую другую синтаксическую конструкцию?
0
|
|||||||||||
|
wound up as Aussie
462 / 114 / 20
Регистрация: 15.05.2019
Сообщений: 453
|
|||||||||||
| 07.01.2026, 17:06 | |||||||||||
|
Понимаете, это очень сложный вопрос, хотя... В общем, дело обстоит так:
- Надо набрать набор неправильных слов (по сути наборы букв или/и ошибки в словах). И чем больше, тем лучше, но привязанных к Вашему словарю - ну как-то так. Я могу скинуть Вам свою разработку на java (пришлось обращаться к ИИ, т.к. там очень много того, что связано со звуком, пришлось дообучаться (пытаться это сделать)). Я скину с комментариями (моими и ИИ).
0
|
|||||||||||
|
wound up as Aussie
462 / 114 / 20
Регистрация: 15.05.2019
Сообщений: 453
|
||
| 07.01.2026, 17:11 | ||
|
Скидываю zip
0
|
||
|
|
|
| 07.01.2026, 22:34 [ТС] | |
|
Честно говоря, я не понял ответ.
Выглядит это так, будто это описание задачи для кодогенерирующей модели и ответ от неё в виде кода. Сама задача для кодогенерации выглядит как общее описание основных шагов обучения нейросети. Сравнение этой задачи с моим вопросом: 1. Я интересуюсь только вопросом, как собирать данные для обучающей выборки. Остальные этапы (режим обучения, изменение словаря) тоже интересны, он не входят в текущий поставленный вопрос. Я хотел бы разделить их обсуждение, чтобы не сложилась каша в моей голове. В приведённом коде рассматриваются (причём поверхностно) все этапы. 2. Мой вопрос я ставлю на примере конкретной прикладной задачи: обучить ассистента, который 1) объяснял jq-запрос и 2) составлял jq-запрос по описанию на естественном языке. Даже язык выбрал (jq) и для него составил пары вопрос-ответ. В приведённом коде прикладная задача не понятна. Там что-то говорится про исправление ошибок, но я не увидел примеров пар вопрос-ответ (те, что есть, не объясняют принцип составления выборки и не масштабируются на больший объём). 3. Я привёл конкретный пример обучающей выборки. В приведённом коде обучающая выборка должна, видимо, сгенерироваться сторонней LLM. Оставляя в стороне вопрос о корректности составляемой таким образом выборки, я не вижу пример такой выборки. На чём предлагается учить модель? И ещё в копилку вопросов: почему в приведённом коде смешиваются фазы обучение и использования (инференса) модели? Это же разные фазы, которые в общем случае могут выполняться на разных машинах. Код я не осилил — он без комментариев, без внятной структуры и со странным форматированием. В любом случае, в нём не содержится ответ на мой первоначальный вопрос о критериях качества обучающей выборки. Получается, вопрос открыт.
0
|
|
|
wound up as Aussie
462 / 114 / 20
Регистрация: 15.05.2019
Сообщений: 453
|
||
| 09.01.2026, 14:20 | ||
|
Сейчас "проконсультируюсь".... ))
1
|
||
|
wound up as Aussie
462 / 114 / 20
Регистрация: 15.05.2019
Сообщений: 453
|
||
| 09.01.2026, 14:43 | ||
|
Посмотрите в attachment (там я закинул, по-моему, всё что Вам будет нужно - надеюсь. Там ещё Ваш json подкорректирован).
1
|
||
|
|
|
| 11.01.2026, 00:28 [ТС] | |
|
Мне понравился ответ. Прямо в восторге. Надо его, как минимум, выложить в виде сообщения в этой теме.
Как максимум — после окончания этого эксперимента оформить в виде замкнутой статьи. Всё прочитал, но не всё ещё осмыслил и ввёл в употребление. Я прокомментирую то, что есть на данный момент. Анекдот про max_length
Поставил некогда max_length=64, когда самые первые короткие тексты были, а потом и забыл о нём. Тренирую-тренирую свою модель и дивом дивлюсь: почему после первых двух-трёх предложений модель стабильно уходит в какую-то лютую галлюцинацию? Перезапускал несколько раз, менял тексты — всё равно. В итоге поставил в конце каждого ответа ✅, чтобы видеть, где по мнению обученной модели находится конец ответа и начало галлюцинации. Что интересно, даже так этот символ встречался крайне редко. От таки дела, малята. Я пришел к выводу, что случайным образом генерировать jq-выражения нерационально: слишком многие выражения лишены практического смысла. Например, select(select(.foo)).Поэтому сейчас я действую следующим образом: 1. сначала генерирую тип выходных данных (язык типов состоит из массива, объекта и 4 примитивных типов, даже альтернативу не использую) и выходных (только примитивный тип, вроде number, string, boolean или null) 2. затем генерирую jq-выражение, который типизируется этими двумя типами. Для этого я составил специализированную систему типов и правила вывода для них. Упрощает задачу то, что в выбранном подмножестве jq нет связанных переменных. 3. упрощаю (не обязательный этап) выражение: (q | .) → q и т.п.Так получается гораздо более естественные jq-выражения. Правда, пришлось расширить подмножество jq конструкциями empty, true, false и прочими константами, а также бинарными сравнениями x == y, x < y и т.п. Впрочем, так даже лучше выглядят и примеры, и объяснения. Мне рекомендовали использовать fast-check (или любую другую библиотеку для property-based testing) для записи генераторов — вполне приятная альтернатива ручному управлению вероятностями, бонусом идёт воспроизводимость. Текущие (на данный момент) открытые вопросы:
Есть ещё некоторые вопросы, которые мне надо сперва самому проработать:
1
|
|
|
wound up as Aussie
462 / 114 / 20
Регистрация: 15.05.2019
Сообщений: 453
|
||
| 12.01.2026, 02:34 | ||
|
(в attachment, вначале продолжение, точнее развитие Вашей идеи выше, а где-то с середины ответы. )
1
|
||
| 12.01.2026, 02:34 | |
|
Помогаю со студенческими работами здесь
9
Обучающая выборка, с чего начать FANN, обучающая выборка Обучающая выборка Обучающая выборка из матриц разного размера Методика подготовки датасета для бинарной текстовой классификации при наличии обучающих примеров лишь для одного класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|