Как ты будешь строить паттерн? В твоем кодировании нет никаких связей между кодами слов
Тебе ли задавать такие вопросы. Хотя понимания как работают нейросети у тебя всё таки маловато.
Вот тут как раз и вся магия нейросетей, даже иногда в СМИ всплывают интервью с разработчиками нейросетей которые говорят, что сами не понимают как они выявляют разные паттерны, закономерности и на их основе потом создают прогнозирование. Все слова охватить с сотнями и тысячами их вариаций использования просто нереально. Поэтому разработчики нейросетей пошли по самому простому пути дробить слова на кусочки и прогнозировать ответы на основе предыдущего контента пересчитывая вероятности на каждой итерации все 50000 токенов для добавления нового кусочка\токена к ответу. По мне это очень тупой способ требовательный больших вычислительных мощностей и много лишней работы(хотя на графических процессорах просчёт всех токенов происходит практически мгновенно за один такт, всё равно это очень много лишней работы).
ЗЫ. Короче говоря тут в помощь вступают всякие лингвистические аспекты: фонетика, морфология, синтаксис, семантика, прагматика и др. (в которых как оказалось ты тоже ни бум-бум). Так вот кое что можно вынести за рамки для усмотрения нейросетью и составить свой алгоритм далее пропустить уже через нейросеть и получить вероятности более сжатые чем 50000, через всякие темы, направления и тд.
Не смеши, с этой мамбой 😁
Дело вообще не в методе кодирования, а в скорости генерации, обучаемости на не больших данных и осознанности. Что трансформер, что мамба и далее по списку всем нужно очень много данных для обучения чтобы генерация ответов была осознанной такой же как если бы отвечал человек, а не набор слов или букв. Я пишу мини-lm чтобы можно было запустить на любом компе, обучить нужным данным и получать хорошие результаты с быстрыми ответами. С теми алгоритмами на каких работают существующие нейросети то, что я хочу просто не реализовать(хотя кому я объясняю, всё равно не поймёшь).
ЗЫ. Что трансформер, что мамба, на каждой итерации просчитываются вероятности всех токенов, у мамба есть скрытое состояние от которого делаются расчёты(балбесы вроде тебя думают, что это ускорение, но на самом деле это не ускорение по большому счёту). Я делаю кодирование слов в числа чтобы не просчитывать тысячи токенов каждый раз, а чтобы по кодам слов находились паттерны и генерировались нужные слова. Не понимаешь же наверное всё равно ничего..
Я изучил как работают алгоритмы нейросетей. В них слова разбиваются на токены от 2 до нескольких символов в зависимости от частоты наличия в словах. Таких токенов около 50000. Для обучения такой сети нужно очень и очень много данных и времени на обучение и тд. Подход для llm не плохой, но слишком затратный и очень много лишней работы при генерации ответа, то есть надо просчитывать все 50000 на каждой итерации..
Я тестил другой подход. Эти функции это прототипы, 64 это токенов русских букв строчных и заглавных без и́ё. Я кодирую слово в числа, а не разбиваю на части токенов по несколько букв. Подход удачный получился. Потом я стал думать как сделать больше токенов для символов и переделал функции кодировки. Понял, что эти прототипы корявые с неправильной формулой. И это на самом деле не единственный случай. У меня так с ИИ постоянно, всё переписываю по своему.
ЗЫ. Да, ИИшный код можно использовать, но по хорошему если подумать, то лучше не надо, лучше свой написать.
Я взял лишь две функции из целого проекта сгенерированного ИИ. Да и этот проект, в принципе простая задача. Но опять же те кто не умеют программировать и для кого сгенерированный корявый код, это само совершенство, для таких конечно сойдёт. Лично я даже небольшую задачу сгенерированную на ИИ перепроверяю и переписываю по своему.
Ты вообще знаешь как 1 и 0 в компе превращаются в числа? А тебе пора бы уже знать как числа хранятся в памяти компьютера.
На каждом разряде увеличивается в двое и не может превышать разряд *2, а разряд*2-1 это максимальное значение всех младших разрядов
Специально для тебя, твой любимый ИИ сделал:
fn main() { let mut result: u64 = 0; let code_u64: u64 = 63; let mut iteration = 0; println!("Начальное значение: result = {}", result); println!("Начинаем вычисления...\n"); loop { let current = result; let operation = format!("{} * 64 + {}", current, code_u64); // Пробуем выполнить операцию if let Some(new_result) = current.checked_mul(64).and_then(|r| r.checked_add(code_u64)) { result = new_result; iteration += 1; println!("Итерация {:2}: {} = {}", iteration, operation, result); } else { println!("\n⚠️ ПЕРЕПОЛНЕНИЕ на итерации {}!", iteration); println!(" Не удалось выполнить: {}", operation); println!(" Текущее значение: {} (максимум для u64: {})", current, u64::MAX); break; } } println!("\nИтоговый результат: {}", result); println!("Всего выполнено итераций: {}", iteration);}Итерация 1: 0 * 64 + 63 = 63Итерация 2: 63 * 64 + 63 = 4095Итерация 3: 4095 * 64 + 63 = 262143Итерация 4: 262143 * 64 + 63 = 16777215Итерация 5: 16777215 * 64 + 63 = 1073741823Итерация 6: 1073741823 * 64 + 63 = 68719476735Итерация 7: 68719476735 * 64 + 63 = 4398046511103Итерация 8: 4398046511103 * 64 + 63 = 281474976710655Итерация 9: 281474976710655 * 64 + 63 = 18014398509481983Итерация 10: 18014398509481983 * 64 + 63 = 1152921504606846975⚠️ ПЕРЕПОЛНЕНИЕ на итерации 10! Не удалось выполнить: 1152921504606846975 * 64 + 63 Текущее значение: 1152921504606846975 (максимум для u64: 18446744073709551615)
На самом деле на 11й переполнение. Да в коде есть ограничение на 10 символов и он рабочий, я тестил нейросеть с этими функциями.
Но они корявые. Здесь просто основание маленькое, сделать побольше и всё.
ЗЫ. Формула должна быть такая result += code_u64 * (64^разряда);
Да, сначала сама пишет с ошибками, потом находит и исправляет, а потом опять делает те же самые ошибки и так по кругу.ЗЫ. Ещё раз говорю кого устраивает корявость, берите на вооружение. Лично я как писал код сам так и продолжаю писать, мне нужно обязательно понимать как он работает, что делает и тд. и практически любой код который мне генерит ИИ я переделываю по своему, потому что меня раздражает эта корявость..
Да, с простыми задачами он справляется на ура.
Но лично мне то, что просто сделать, то с помощью ИИ я делать не буду. А то, что для меня сложно, то и ИИ мне в этом мало чем помочь может.
Для не понимающего да. А для того кто реально умеет программировать и видит говнокод сгенерированный ИИ, то по старинке делает всё своими мозгами и ручками.
Вот к примеру кое что тестил, ИИ мне написал такие кодировщики слов в числа и обратно по моему запросу
/// Кодированиеpub fn encode(word: &str) -> u64 { let mut result: u64 = 0; let max_len = 10; for (idx, sym) in word.chars().enumerate() { if idx >= max_len { break; } if let Some(code) = index(sym) { let code_u64 = code as u64; if result > u64::MAX / 64 { break; result = result * 64 + code_u64; } } result}/// Декодированиеpub fn decode(code: u64) -> String { let mut code=code; let mut syms = Vec::new(); while code > 0 { let tmp = (code % 64) as usize; if let Some(sym) = SYMBOLS.chars().nth(tmp) { syms.push(sym); } code /= 64; } if syms.len()>0 { syms.reverse(); } syms.iter().collect()}
Для того кто не соображает, это идеальный код и он его будет применять.. А фактически это говнокодпри таком кодировании result = result * 64 + code_u64; будет ошибка переполнения. И таких косяков у ИИ очень много. Те кто сами не умеют думать, для них это всё замечательно конечно..
Сейчас ИИ чаты могут по запросу находить сайты с нужной информацией, анализировать и выдавать совокупный результат с выжимкой. Так что ваши традиционные запросы это прошлое и простыня из кучи ссылок нафиг никому уже не нужны..