alexalexes, то что я выше написал - это супер-упрощенные примеры для наглядности. Да, по ним легко предположить, какие сделать правила и легко и быстро их написать. Но меня интересует именно машинное решение этой проблемы для огромного количества разных шаблонов.
Пока что через всякие GPT я нашел советы использовать Random Forest или LightGBM для нормальных и аномальных примеров, а Isolation Forest для поиска редких аномалий. Но оценить качество этого совета сходу не могу, для меня все три варианта - набор слов пока что :-)
exwill, тут даже мой естественный интеллект пасует. Что странного в структуре?
{
"field1": "abc",
"field2": 123,
}
при таком подходе можно ловить странности только если у нас имена всеъ полей очень понятные, а это может быть только в редких случаях. вот tax_number - это ИНН или казахский ИИН или европейский аналог для физлица или европейский для юрлица или еще какой-то? у них у всех разные параметры. Чтобы догадаться, что tax_number должен быть каким-то - надо много примеров, а не один.
Боюсь, что ни в какой контекст не влезет сотни тысяч таких структур разного типа. А по 100 структурам невозможно составить никакие правила (поле sex в них всегда male => делаем логичный, но ложный вывод, что это строковая константа)
Но вообще что-то подобное я делал вроде через langchain и собственная локальная векторная база данных.
много ресурсов на это не нужно.
Общая схема такая:
- вы анализируете книгу кусками (абзацами) и закидываете каждый в векторную базу данных
- по запросу (по теме книги) - ищете N подходящих абзацев на эту тему и формируете запрос к нейронке (в промпте будут ваши куски, в которых ответ )
- ответ от нейронки кидаете юзеру
промт на запрос "назови столицу России" будет вроде:
Ответь на запрос: назови столицу России.
Столица России - город Москва
Население Москвы .... ....
Москва что-то еще про нее
Столица Чехии Прага
(последний - пример - это какой-то малорелеватный кусок из книги, нейронка должна понять, что этот кусок не пригодится и использовать данные из первого)
Нейронку можно или собственную использовать (если потянет) или любую стороннюю.
И я возможно путаю, но у меня на гораздо более старом i5 локальная лама крутилась и более менее терпимо отвечала на простые запросы (я просил ее генерировать правдоподобных людей в JSON для тестовой базы).
iva2000, попробуйте чуть более сложный пример, возможно вы увидите блокирующую причину.
Я спотыкался на том, что он не может хорошо обработать книгу по будущей (еще не вышедшей) версии некоторой известной программы. На запрос "какая последняя версия" он называл реально вышедшую (известную ему), но не информацию из книги. Но на момент публикации книги новая уже должна будет выйти, поэтому на запрос "какая последняя" он должен давать цитату из текста книги "последняя версия продукта X: 1.2.3 вышедшая тогда-то". Переубедить его у меня не получилось.
Попробуйте сделать тестовый документ, обосновывающий, что снег - черный, а курить - очень полезно (вроде "как показали самые свежие исследования") и добиться от нейросети чтобы она в это поверила.
Возможно вы рано или поздно упретесь в проблему, что нейронка просто отвечает вам из своих общих знаний, которые она считает более приоритетными над любым вашим документом.
Dmitry Roo, что-то слышал, примерно с 1997 года :-). Ничего против такого подхода не имею. Тогда задача - автоматически сгенерировать нужные регекспы (только они тут только для проверки поля подойдут) или JSON схему.
Я же говорю - вручную сделать фильтр для собак и людей, дело на 1 вечер неспешно. Теперь представьте, что у нас пара тысяч разных типов данных. И это уже 2000 вечеров, 7 лет, если делать это вручную. Надо - автоматически.
Wispik, Это и есть - разные. Класс, вероятно, одинаковый, но символы разные. :-). Вопрос же не в том, чтобы программа работала (для этого можно хоть int'ом объявить - работать все равно будет).
Но если объявить неправильный символ (импортированный не из того модуля, как задумал автор), в следующей версии он может все реорганизовать внутри своего пакета (оставив все "официальные" символы на месте, а "внутренний" перебросить из file1.py в file2.py или из Engine в MyEngine переименовать, но импортировать его "as Engine"), и тогда наш код, где мы используем file1.Engine вообще поломается на этапе импорта этого неправильного символа.
Я ниже в "ответах" выслал скрин, что IDE показывает. Нечто без полного пути (знаем только последнюю часть - оканчивается на Engine) и есть по меньшей мере 3 разных символа, (вероятно) указывающих на один и тот же класс. (Даже чтобы перепроверить эту версию, что все 3 - это один и тот же класс, надо потратить время).
Я просто надеялся, что есть какой-то прямой путь. Либо функция подобная type() чтобы вернула заведомо правильное название класса (например, не тип именно этого объекта, а тип того его предка, который надо использовать), либо хотя бы VSCode. У меня он не пишет, какой именно Engine надо использовать.
Aragorn, я так понял, что IDE ничего не вычисляет, а тупо показывает прототип и подсказку docstring из кода.
В случае sqlalchemy create_engine это у нас "... -> Engine", который (если перейти, чтобы понять, какой именно из множества символов Engine в этом пакете имеется в виду) приводит в sqlalchemy.engine.base и в нем уже Engine...
Everything_is_bad, Wispik так разные же Engine. Даже если они одинаковые, есть разные символы:
- sqlalchemy.Engine
- sqlalchemy.engine.Engine
- sqlalchemy.engine.base.Engine
Чтобы узнать, разные или нет - надо полазить по исходникам. Неужели это правильный путь?
и еще, наверное, есть какой-то _engine.Engine откуда-то, я даже не нашел откуда.
Пусть даже в нашем частном случае (с sqlalchemy) - все они указывают на один класс, как определить какой из них правильнее?
Мне интересно не с этим конкретным типом разобраться, а с общим правилом. Есть некоторая функция F из пакета P, какой тип использовать для того значения, которое она возвращает?
Не знаю, звучит интересно - а как, в общих чертах? И насколько дорогой этот метод? Какое-то железо нужно специальное? То есть оператор отправляет смску не на свою настояющую БС, а на фейковую?
> сервер должен находиться географически за ее пределами.
CityCat4, хех, в теории - да, а вот по факту (на сегодня) - нет. Видимо, на серверных площадка (по крайней мере на некоторых) нет ТСПУ. Может быть это временно. По крайней мере для двух из двух моих серверов на разных провайдерах это так - но в РФ, но ютуб работает хорошо.
Как проверить торможение ютуба c какого-нибудь сервера (ну или из дома):
Этой командой мы качаем тестовый 100М файл с селектела, но в SNI используем имя ютубовского сервера.
Если есть блокировка по SNI (а ютуб так блочат) то работать не будет (или будет едва-едва).
Этой же командой, кстати, можно убедиться, что дело не в серверах гугла, а в блокировке на ТСПУ. Меняем имя хоста на любое другое (googlevideo -> g00glevideo) - и там где раньше он не работал - теперь работает.
Так можно за несколько секунд проверить, подходит ли российский VPS для обхода или нет.
Кстати, раз средства обхода советовать сейчас нельзя, я просто бессовестно (но зато легально) порекламирую хостера - у firstbyte.ru есть тарифы до 100 рублей, и вроде бесплатный тестовый доступ на 24 часа (достаточно, чтобы выполнить тот тест).
А Аезы тоже (еще проще даже, совсем в два клика) есть "терминатор" - доступ на виртуалку на 15 минут бесплатно и без смс. Мне достались московские сервера (может случайно, может всегда московские дают) - и на них тоже не тормозится. Так что 3/3 российских хостера, где я мог проверить - не блокируют ютуб.
Я сделал у себя так - у меня Raspberry Pi и ТВ LG, ТВ хоть и "модный", но не умеет (в штатном виде) ни в сторонние приложения, ни в vpn, ни даже прокси. Поэтому у меня на rpi стоит wireguard, включил там форвардинг и маскарадинг, и адрес rpi указал на телевизоре в качестве default gateway.
Можете такую же комбинацию сделать. Единственная сложность - если выключить комп (или перенастроить на нем сеть) - телевизор перестанет работаеть.
CityCat4, у нас импортные товары продаются же. Псевдоотечественные (из импортной комплектухи) - тоже. Это все стоит денег. Эти деньги не вагонами же отправляют, а банковскими переводами. Значит, какое бы впечатление от новостей не было - в реальности банковские переводы работают. Сложнее стало, не так проще как раньше - но можно. Один мой друг сам ведет международный бизнес.
Не все банки под санкциями (хотя многие, надо выбирать). Сейчас райф пока держится, про другие не знаю. Газпромбанк, возможно, тоже, как ни смешно (т.к. через него деньги за нефть и газ). Ну и что-то из мелких может быть.
momvov1, надо прояснить - к какому именно файлу базы случается эта ошибка (и посмотреть, тот ли это файл, как ожидалось). Вполне может быть вариант, что вы ХОТЕЛИ каждое приложение увязать с его собственой базой, но где-то ошибка и поэтому они все открывают один и тот же файл. Попробуйте печатать имя файла базы максимально близко к коду его открытия, а еще посмотреть, нет ли имени файла в exception, и может быть его еще распечатать.
Если бы у вас в самом деле они были полностью изолированы - то каждое приложение даже не знало бы, что другое использует какую-то другую базу.
CityCat4, не по сути вопроса, но в порядке трепа (про ленивые *опы). Это в 2000-2005 году ленивая *опа - это тот, кто от статических сайтов не перешел на динамические, которые через perl/cgi или Apache/PHP/MySQL схеме работают. А не ленивые - переходили, и у них на сайте даже guestbook работал через CGI.
Сейчас генеральная линия партии колебнулась обратно, но два раза в одну реку нельзя, поэтому река уже другая. Сейчас "моден" JAMStack - статичные сайты, которые, во-первых, раздаются из статичных файлов (то есть, раздаются быстро и сервер не бывает перегружен, даже в "черную пятницу" может быстро отдавать странички) , а во-вторых, раздаются через CDN, то есть, скорость загрузки - максимальная.
Это не просто мода, есть объективные причины: Загрузка и скорость работы сайта по такой технологии гораздо выше. Поэтому 1. Пользователи получают работающий сайт очень быстро, а пользователи любят быстрые сайты, которые их не раздражают. 2. Гугл выставляет таким сайтам высокие оценки и выше ранжирует их в SERP. (Справедливо полагая, что раз сайт делали крутые секси парни и сделали технически красиво - наверное и сайт в самом деле хорош, гораздо лучше соседнего, который школьник писал. В общем, поисковик уже по веб-технологиям, не заглядывая в бухгалтерию уже видит, где тут Кока-кола, а где Кукуевский завод безалкогольных напитков)
Ну и по функционалу, благодаря JavaScript эти статичные сайты пользуются всякими API, имеют свою логику, поэтому функционально такой сайт может все то же, что и прежние традиционные пэхапешные. Просто все что можно - отрендерено заранее и лишний раз юзер не ожидает ответа от бэкенда.
Если наш сайт, к примеру, продает авиабилеты, то главная страница будет статичной. Загрузится "моментально" с ближайшего сервера CDN. А вот запрос про билеты Москва-Владивосток на 1 Мая - будет выполняться через API. И сообщение "Сегодня через наш сайт уже продано N билетов" тоже появится по завершении запроса к API. А запрос к страничке "Контакты" - опять же статически быстро обслужится, вообще без вызовов API, так как это можно статически сделать, значит, так и надо.
Все это через статику, через всякие Hugo, Gatsby, Next.js и прочие e11ty, с использованием разных headless CMS и API.
А сайты по технологиям начала 2000 и бума CMS, при заходе на сайт PHP лезет в базу и спрашивает - а какой Title у нашей главной страницы? А в какой теме оформляем? А наша фирма по прежнему называется ООО Василек, как и последние 50 лет? И только после туевой хучи всех этих запросов формируется HTMLка и отправляется юзеру. В добавление к этому, традиционно у сайта есть полный доступ к базе (dbname, dbhost, dbuser, dbpass) поэтому уязвимость в коде плагина, который добавляет на сайт танцующих веселых поросяток приводит к тому, что всю базу могут поиметь.
Так что ленивые *опы сегодня - это те, кто в 2000 выучили php/mysql или что-то подобное, и леняться что-то новое учить. Делают так, как научились тогда-то. Ну или продают клиентам вебсайты на технологиях четвертьвековой давности. Четверть века, это как если бы в 2000 кто-то пытался делать проекты на технологиях 1975.
Пока что через всякие GPT я нашел советы использовать Random Forest или LightGBM для нормальных и аномальных примеров, а Isolation Forest для поиска редких аномалий. Но оценить качество этого совета сходу не могу, для меня все три варианта - набор слов пока что :-)