Горе от LLM ума
Aug. 23rd, 2025 11:23 amПонадобилось мне в качестве хобби иметь в хозяйстве программу, которая должна уметь следующее:
по данным двум текстовым файлам, одному длиннее, другому короче, она должна находить такое смещение в первом файле, начиная с которого его строки наиболее точно совпадают со строками второго файла, причем строки последнего, состоящие из одной звёздочки, считаются совпадающими с любой строкой.
В моём случае более длинный файл - от силы десяток тысяч строк, более короткий - редко когда более тысячи строк, поэтому наивный O(n*m) алгоритм мне бы годился, просто писать было лень. Но я в промпте это не сказал, и получил от Cerebras программу на Питоне, которая пользовалась этим алгоритмом только в качестве крайнего случая, если не был доступен NumPy.
А если NumPy был доступен, то программа каждой уникальной строке, встретившейся в обоих файлах, ставила в соответствие случайное комплексное число длины 1, кроме *, для которой брался 0. Потом она строила соответствующие массивы чисел, удлиняя при необходимости до степени 2, причем для второго массива числа брались сопряжённые, и делала всему этому делу FFT со всеми возможными смещениями от 0 до разницы длин файлов.
В конкретных деталях алгоритма я не разбирался, но мотивировалось это тем, что для совпадающих строк произведение чисел будет равно в точности вещественному 1, а для несовпадающих - произвольным комплексным числам со случайным Re, в среднем равным нулю. Так как нас интересуют только нетривиальные совпадения, то совпадения со звёздочкой, сиречь умножения на 0, общий результат не изменяют.
Потом в массиве полученных результатов находился максимум, и его индекс объявлялся искомым смещением.
Этим всем делом Cerebras был очень горд, потому что вычислительная сложность получалась меньше, типа O((n+m)*log(nm)) или что-то в таком духе.
Ну и, короче, в тех случаях, когда реальное совпадение было стопроцентным, этот алгоритм с хорошей вероятностью выдавал правильное смещение, хотя и с рейтингом заметно меньше 1 (обычно около 0.8-0.9), а для совпадения с погрешностями результат был произвольным и непохожим на реальность. Пришлось подавить это безобразие, закомментировав "import math", и всё заработало ровно так, как я хотел.
по данным двум текстовым файлам, одному длиннее, другому короче, она должна находить такое смещение в первом файле, начиная с которого его строки наиболее точно совпадают со строками второго файла, причем строки последнего, состоящие из одной звёздочки, считаются совпадающими с любой строкой.
В моём случае более длинный файл - от силы десяток тысяч строк, более короткий - редко когда более тысячи строк, поэтому наивный O(n*m) алгоритм мне бы годился, просто писать было лень. Но я в промпте это не сказал, и получил от Cerebras программу на Питоне, которая пользовалась этим алгоритмом только в качестве крайнего случая, если не был доступен NumPy.
А если NumPy был доступен, то программа каждой уникальной строке, встретившейся в обоих файлах, ставила в соответствие случайное комплексное число длины 1, кроме *, для которой брался 0. Потом она строила соответствующие массивы чисел, удлиняя при необходимости до степени 2, причем для второго массива числа брались сопряжённые, и делала всему этому делу FFT со всеми возможными смещениями от 0 до разницы длин файлов.
В конкретных деталях алгоритма я не разбирался, но мотивировалось это тем, что для совпадающих строк произведение чисел будет равно в точности вещественному 1, а для несовпадающих - произвольным комплексным числам со случайным Re, в среднем равным нулю. Так как нас интересуют только нетривиальные совпадения, то совпадения со звёздочкой, сиречь умножения на 0, общий результат не изменяют.
Потом в массиве полученных результатов находился максимум, и его индекс объявлялся искомым смещением.
Этим всем делом Cerebras был очень горд, потому что вычислительная сложность получалась меньше, типа O((n+m)*log(nm)) или что-то в таком духе.
Ну и, короче, в тех случаях, когда реальное совпадение было стопроцентным, этот алгоритм с хорошей вероятностью выдавал правильное смещение, хотя и с рейтингом заметно меньше 1 (обычно около 0.8-0.9), а для совпадения с погрешностями результат был произвольным и непохожим на реальность. Пришлось подавить это безобразие, закомментировав "import math", и всё заработало ровно так, как я хотел.
no subject
Date: 2025-08-23 09:16 pm (UTC)Можно сравнить с grok.com по программистским способностям. Если у тебя есть под рукой хороший промпт.
no subject
Date: 2025-08-24 12:57 am (UTC)no subject
Date: 2025-08-23 09:55 pm (UTC)(А что значит "наиболее точно"?
Вообще похоже на генетику. Вариант Укконена вполне бы годился, он линейный.
no subject
Date: 2025-08-24 12:58 am (UTC)no subject
Date: 2025-08-24 01:31 am (UTC)Cerebras разрабатывает специализированные железки для выполнения моделей, есть ещё один похожий стартап SambaNova.
no subject
Date: 2025-08-24 02:04 pm (UTC)no subject
Date: 2025-08-25 03:49 pm (UTC)А также в Уголовном кодексе – приравнять бандеровский символ к символам, которые соответствуют немецкому национал-социализму, общеизвестному как нацизм, советскому коммунизму, и внести изменения в закон об Институте национальной памяти – Комиссии по преследованию преступлений против польского народа в части, касающейся преступлений ОУН-УПА.
no subject
Date: 2025-08-25 04:58 pm (UTC)