Если ты до сих пор не понял, то для
Но вот этот перл обьясняет все:
Это догма твоего подхода ко всему. И очередная просьба - не засорять тему. Она для тех, кому интересно разобраться а не плюнуть. Продолжай мыть пол грязной тряпкой ручками.
Чтобы немного развеять мракобесие, сгустившееся над этим топиком, проведу небольшой ликбез и на простом примере расскажу, как могут генерироваться слова в нейросетях.
Для примера возьму уже приведенный выше алгоритм "Цепи Маркова" Он был описан, если не ошибаюсь в ... 1906 году. Это информация для тех, кто рассказывает сказки о том, что знает, как улучшить нейросети))). Возможно, по ходу станет понятно, почему только сейчас это все получается реализовать.
Что бы вам не гуглить:
Це́пь Ма́ркова — последовательность случайных событий с конечным или счётным числом исходов, где вероятность наступления каждого события зависит только от состояния, достигнутого в предыдущем событии[1].
Еще проще - на основе имеющихся данных высчитывается вероятность появления следующего символа. Как это работает.Возьмем конечный набор данных:
words = ["apple", "banana", "orange", "grape", "melon", "kiwi", "peach", "ananas", "grapefruit", "pepper", "melon", "watermelon", "potatoes", "pineapple", "coconut"]
В нашем алгоритме мы будем строить вероятности на основе одного или двух символов, соответственно составляем словарь всех одно- и двухбуквенных сочетаний и количество появлений следующей буквы для них.На выходе имеем следующий словарь( использую питоновские термины, но думаю их несложно интерпретировать в любой известный вам язык)Код:
for word in words: for i in range(len(word)): key = word[max(0, i - 1):i + 1] # use two symb next_letter = word[i + 1] if i + 1 < len(word) else None if key not in transitions: transitions[key] = {} if next_letter: transitions[key][next_letter] = transitions[key].get(next_letter, 0) + 1
Результат:
{'a': {'n': 1, 'p': 1}, 'ac': {'h': 1}, 'an': {'a': 4, 'g': 1}, 'ap': {'e': 2, 'p': 2}, 'as': {}, 'at': {'e': 1, 'o': 1}, 'b': {'a': 1}, 'ba': {'n': 1}, 'c': {'o': 1}, 'ch': {}, 'co': {'c': 1, 'n': 1}, 'ea': {'c': 1, 'p': 1}, 'ef': {'r': 1}, 'el': {'o': 3}, 'ep': {'p': 1}, 'er': {'m': 1}, 'es': {}, 'fr': {'u': 1}, 'g': {'r': 2}, 'ge': {}, 'gr': {'a': 2}, 'in': {'e': 1}, 'it': {}, 'iw': {'i': 1}, 'k': {'i': 1}, 'ki': {'w': 1}, 'le': {}, 'lo': {'n': 3}, 'm': {'e': 2}, 'me': {'l': 3}, 'na': {'n': 2, 's': 1}, 'ne': {'a': 1}, 'ng': {'e': 1}, 'nu': {'t': 1}, 'o': {'r': 1}, 'oc': {'o': 1}, 'oe': {'s': 1}, 'on': {'u': 1}, 'or': {'a': 1}, 'ot': {'a': 1}, 'p': {'e': 2, 'i': 1, 'o': 1}, 'pe': {'a': 1, 'f': 1, 'p': 1, 'r': 1}, 'pi': {'n': 1}, 'pl': {'e': 2}, 'po': {'t': 1}, 'pp': {'e': 1, 'l': 2}, 'ra': {'n': 1, 'p': 2}, 'rm': {'e': 1}, 'ru': {'i': 1}, 'ta': {'t': 1}, 'te': {'r': 1}, 'to': {'e': 1}, 'ui': {'t': 1}, 'ut': {}, 'w': {'a': 1}, 'wa': {'t': 1}, 'wi': {}}
Обратите внимание, что для 15 базовых слов мы получили словарь из 57 элементов. Дальше поймете, почему я это отметил.Но это пока еще сырой список. Нам же нужно понимать вероятность появления следующей буквы, поэтому несложным путем высчитаем ее:
for letter, next_letters in transitions.items(): total = sum(next_letters.values()) for next_letter in next_letters: next_letters[next_letter] /= total
В результате наш псеводнейрон уже выглядит так:
{'a': {'n': 0.5, 'p': 0.5}, 'ac': {'h': 1.0}, 'an': {'a': 0.8, 'g': 0.2}, 'ap': {'e': 0.5, 'p': 0.5}, 'as': {}, 'at': {'e': 0.5, 'o': 0.5}, 'b': {'a': 1.0}, 'ba': {'n': 1.0}, 'c': {'o': 1.0}, 'ch': {}, 'co': {'c': 0.5, 'n': 0.5}, 'ea': {'c': 0.5, 'p': 0.5}, 'ef': {'r': 1.0}, 'el': {'o': 1.0}, 'ep': {'p': 1.0}, 'er': {'m': 1.0}, 'es': {}, 'fr': {'u': 1.0}, 'g': {'r': 1.0}, 'ge': {}, 'gr': {'a': 1.0}, 'in': {'e': 1.0}, 'it': {}, 'iw': {'i': 1.0}, 'k': {'i': 1.0}, 'ki': {'w': 1.0}, 'le': {}, 'lo': {'n': 1.0}, 'm': {'e': 1.0}, 'me': {'l': 1.0}, 'na': {'n': 0.6666666666666666, 's': 0.3333333333333333}, 'ne': {'a': 1.0}, 'ng': {'e': 1.0}, 'nu': {'t': 1.0}, 'o': {'r': 1.0}, 'oc': {'o': 1.0}, 'oe': {'s': 1.0}, 'on': {'u': 1.0}, 'or': {'a': 1.0}, 'ot': {'a': 1.0}, 'p': {'e': 0.5, 'i': 0.25, 'o': 0.25}, 'pe': {'a': 0.25, 'f': 0.25, 'p': 0.25, 'r': 0.25}, 'pi': {'n': 1.0}, 'pl': {'e': 1.0}, 'po': {'t': 1.0}, 'pp': {'e': 0.3333333333333333, 'l': 0.6666666666666666}, 'ra': {'n': 0.3333333333333333, 'p': 0.6666666666666666}, 'rm': {'e': 1.0}, 'ru': {'i': 1.0}, 'ta': {'t': 1.0}, 'te': {'r': 1.0}, 'to': {'e': 1.0}, 'ui': {'t': 1.0}, 'ut': {}, 'w': {'a': 1.0}, 'wa': {'t': 1.0}, 'wi': {}}
И собственно, уже все готово для генерации слова.
Как это происходит? Запускаем код и вводим первые 2 буквы, из которых мы хотим сгенерировать слово, например "pe" В словаре находим сочетания для него:
'pe': {'a': 0.25, 'f': 0.25, 'p': 0.25, 'r': 0.25},
Недалекий фрефоркер увидел в коде random, не удосужился почитать, что это за функция. А random.choice выбирает не случайную букву из последоваиельности, а на основе весов. В данном случае веса одинаковы, значит выбирается первая буква. Получаем "pea". Помним, что наш алгоритм использует 2 последних буквы. Значит ищем следующее сочетние для "ea":
'ea': {'c': 0.5, 'p': 0.5},
Получаем: "peac", продолжаем поиск для "ac":
'ac': {'h': 1.0},
Тут уже без вариантов. Получаем: "peach"Ищем для "ch":
'ch': {},
Вариантов нет, генерация закончена, полученное слово - персик) Можно еще добавить проверку на наличие слова в словаре исходном и останавливать генерацию при совпадении.Это простейший механизм генерции слов. Без дополнительного обучения системы, исправления ошибок и прочего. Просто? Да! А теперь подумаем - а не так ли работает наш мозг? Точно так же мы обрабатываем подходящие варианты и получаем результат.Почему я в начале привел длины исходного списка и результирующего словаря? Это почему алгоритмы, известные в начале прошлого века, получилось реализовать только сейчас. Я использую только 15 исходных слов и для генерации беру последних 2 буквы. А попробуйте создать словарь, например из 100 слов и анализировать 4 буквы? Надеюсь все знают что такое декартово множество и смогут посчитать результирующий словарь. А это самый простой и понятный механизм. Тензор использует более сложные алгоритмы для исключения ошибок, например.
Поэтому все это полезно в образовательных целях. На практике нужно учиться использовать LLMs и механизмы работы со своими данными.
Слушай, ты хоть раз видел-то робот пылесос? Понимаешь как он работает? что он у тебя там трет?
Боюсь спросить - как вопрос аккумуляторов относиться к работе/полезности ИИ? Попробуешь перечитать тему топика?
Как раз сегодня в магазе смотрел новые модели пылесосов. Модели с ИИ уже появились, надо брать) Подключу его к форуму, все умнее будет фом неверующих и контекст лучше сгенерирует)
Копеечный и хватает месяца на три. Понятно что это не для нищебродов.
А ты когда убираешь, моешь пол прямо по грязным трусам, которые перед этим на пол кинул? У меня 64 квадрата хата, мне хватает на 2-3 уборки одной зарядки. Для больших домов более чем тоже.
Каких дыр, ты вообще хоть раз видел робот-пылесос? Равномерно убирает.
Можно програмно, можно по обучению. Так же как в автомобиле, если я с утра в будни выезжаю - он предложит мне маршрут на работу, если вечером - то в зависимости от дня - домой или в спортзал.
Ты опять подменяешь понятия и валишь все в кучу. У каждого инструмента своя область применения и не надо обобщать.
Зачем вникать в то, что выглядит слабо имеющим перспективы? Очередной опиум для народа.
У вас есть/был робот-пылесос? Ерундистика. За 10 лет существования этой ниши ума ему вы так и не прибавили. Как было проще и надежней орудовать обычным и тряпкой, так и осталось.
И ты 30+ страниц пытаешься упорно этот опиум разоблачить? Лично я вот не пишу в темах, которые мне неинтересны.
И в очередной раз неудачный пример. Как говориться, если вы не любите людей, вы просто не умеете их правильно готовить. Для меня робот-пылесос это незаменимая штука, особенно новые модели, моющие с двумя вращающимися тряпками. Сам себе ходит по расписанию, сам пылесосит, моет, раз в неделю примерно нужно в доке убрать мусор и заменить воду. В квартире идеально чисто, можно ходить в белых носках. Он уже знает, когда обычно дома никого нет и в это время убирается.
А ИИ такая бесперспективная вещь, что его уже скоро в утюги будут внедрять)
Не создашь и не изучишь. Ты за 30 страниц топика не смог понять о чем он, а нашему искусственному разуму понадобиться пара секунд, что понять твой уровень знаний.
В том то и дело, что написать примитивный пример который фактически не решает поставленной задачи с использованием случайных чисел, процентов и тп. это GPT выведет( и не всегда рабочий код к тому же).
Мой диагноз относительно тебя всё же верный с самого начала нашего общения, в очередной раз ты это подтвердил.. Что соображения у тебя нет, ты привёл пример кода и не смог даже промпт для нейронки нормальный составить, не говоря уже чтобы получить реальный прототип нейросети, которая реально генерирует осмысленные слова, а не методом rand и вероятностями, извини, но это ж реально диагноз..
ЗЫ. А ещё мне тут втирал про дифференциалы и интегралы..
Уже даже и не знаю, плакать или смеяться с твоей ограниченности... Ты хоть прочитал, то что я написал, прежде чем создавать свой "осмысленный " текст? Приведенный алгоритм - Цепь Маркова, не являющийся в полной мере реализацией нейросети, но позволяющий получать результат на основе предыдущих состояний. Ты не понимаешь, зачем там рандомизация? Ты не в курсе что и полноценные нейросети не создают "осмысленный " текст, а высчитывают вероятность, в данном случае следующей буквы на основе полученных данных? Если входной слой будет содержать ошибочные или бессмысленные данные то и на выходе будет набор букв, а не слово. Ровно как и в твоем случае - генерируешь тупость, вместо того, чтобы прочитать и вникнуть. Реализация тензора - сложнее, но там уже можно использовать несколько скрытых слоев для повышения точности выходного слоя. Жалко тратить время даже на тебя. Читать сначала научись, потом в умные дискуссии лезь.
А я все ждал, когда же патриоты начнут радоваться))) курсу в 109)))5 ноября тоже было укрепление:
11 ноября:
22 октября:
Все зашибись)))
Реализовал еще два варианта нейросети- подбора слов. С помощью numpy - либы пайтона для числовых расширений. Ну и классика с помощью Tensorflow.
Вывод все тот же - это начинает работать на огромных обьемах данных, поэтому практического смысла не имеет в принципе особого. Гораздо продуктивнее работать с LLM+RAG. Можно создавать справочники, документацию, чатботы для хелпдеск...
Так как все антижэпттэшники слились и отпуск у меня тоже закончился, предложение о соревновании сеошник/установщик окон против искусственного разума снимается.