Введение в искусственный интеллект
331 subscribers
63 photos
2 videos
171 links
Просто об искусственном интеллекте и его возможностях. Помогу разобраться в базовых понятиях и создать собственную нейросеть. Рассказываю, что у ИИ под кожей.
Елена Михалькова
Download Telegram
Forwarded from Kali Novskaya (Tatiana Shavrina)
Извините, я пропала. Всё хорошо, пишу для вас длиннопост! 🌸
На самом деле я не исчезла, а готовлю онлайн-лекцию про то, что такое юмор с точки зрения количественных методов. После нее вы точно больше не сможете от души посмеяться. Вы сначала будете оценивать вероятность того, что вам смешно, а также того, что окружающие сочтут вашу реакцию уместной 😎 (Но, на самом деле, мы с вами и так уже это делаем. 😜)
Поэтому ни за что не регистрируйтесь на мою онлайн-лекцию вот тут.
До старта осталось 3 часа 💫🚀

#ниипетпроект
5👍2
А вот и ссылка на видео с лекцией про количественную природу комического.
С февраля осталось у меня два поста - выложу на этой неделе. И пора выбирать темы на март! 🌷(Пока он не закончился, хе-хе)
👍3
🖤 Языки разметки: HTML, XML, YAML

Бывают языки программирования (programming languages) - для создания компьютерных программ.
Бывают языки запроса к данным (query languages) - для записи и обращения к данным.
А бывают языки разметки данных (markup languages).. барабанная дробь.. для разметки данных.
Разметки? Что такое разметка? Вот, положим, у нас есть текстовый документ - курсовая работа. Обычно в курсовых есть такие типичные элементы, как заголовок, названия глав, названия параграфов, абзацы с текстом и т.д. Для удобной навигации по структурированным текстам современные программы-редакторы текста предлагают стили. Форматируем заголовок стилем “заглавие” (title), названия параграфов и подпараграфов стилями подзаголовков верхнего и нижнего уровней (heading 1, heading 2 и т.д.), текст курсовой - стилем “обычный текст”. В текстовых редакторах часто можно увидеть полученную структуру текста на панели слева в виде списка с разными уровнями. Ну или можно сгенерировать автоматическое содержание (оглавление). Захотели перейти к другому параграфу - жмяк на гиперссылку, и вы уже там. Получается, что стили документа размечают текст в соответствии с его структурой - для удобного представления текста на странице и навигации по нему.
А теперь разберу три примера самых часто встречающихся в моей практике языков разметки.
HTML (HyperText Markup Language) - это прям то, что я описала выше в примере с разметкой документа, только он используется для сайтов. В сайтах типичными элементами, как и в курсовых, являются заглавие, заголовки разного уровня, параграфы с текстом. Но есть и особенности. Hypertext в названии языка какбэ намекает, что основная особенность документов в вебе: возможность прыгать между веб-страницами, переходить по ссылкам. Также сайтам важно деление на верх страницы (header, хЕдер) и подвал (footer, фУтер). Еще хорошо бы предоставлять мета-информацию о странице: кодировку, копирайт, ключевые слова и т.д. Система разметки строится на тэгах. Берем заголовок “Мой сайт” и помещаем между открывающим и закрывающим тегами: <title>Мой сайт</title>. Внутри тега можно добавить атрибут, который заменяет необходимость помещать его содержимое в еще один тег. Например, у нас есть текст, который является кликабельным, то есть за него спрятана гиперссылка. Гиперссылку (href) можно поместить в атрибут:
<a href="https://yandex.ru/support/webmaster/controlling-robot/html.xml">сообщает</a>.
XML (eXtensible Markup Language) - это та же система тегов, только в ней принято делать теги на любой случай. Поэтому XML может превратить текст в… базу данных. Но не жестко структурированную в виде табличек, а (воспользуюсь растительными метафорами из прошлых постов) какбэ дерево с ветвящимися веточками. Где внутри текста одного уровня может быть вложен еще текст более низкого уровня. Например, есть магазин, в нем есть склад, а на складе есть холодильник, в котором лежит пицца. См. картинку ниже.
YAML (Yet Another Markup Language) - “И, тем не менее, вот вам еще один язык разметки”. Этой фразой (yet another…) в ИТ часто начинаются названия изобретений, которые дополняют и без того широкий ряд. Вот как с языками разметки взял и появился еще один очень простой язык разметки, чтобы компактно и интуитивно понятно хранить информацию о чем угодно. Часто этот язык используют для сохранения настроек программы в конфигурационном файле.

#база
6
La XML-Pizza (точнее яблоко и морковка). Взято отсюда.
🔥5
🖤 DBSCAN - это не простой набор букв. Это еще и алгоритм кластеризации
Disclaimer. Данный пост надо понимать, прожмякав вот этот ноутбук из поста про иерархическую кластеризацию. А то будет непонятно и даже не очень интересно. Но, возможно, все равно понятно. И даже интересно. Но, если чувствуете, что не поняли, лучше прожмякайте.
Кстати, я этот ноутбук обновила, решив побольше написать про очень важный процесс в иерархической кластеризации - linkage, соединение точек в кластер.


DBSCAN читается “дибискЭн”, или “дэбэскАн”. Расшифровывается Density-based spatial clustering of applications with noise - основанный на плотности метод пространственной кластеризации для данных с шумом. На что тут стоит обратить внимание по сравнению с иерархической кластеризацией. Во-первых, на слово плотность. Иерархическая кластеризация, выбирая, к какому кластеру отнести каждую точку, движется как бы как паучок по сети, нанизывая точки одна за одной. И, оказавшись в какой-то точке, которая находится между двумя большими кластерами, она может через нее влить один большой кластер в другой. (Жмякали мой ноутбук? 😜 Там как раз про это говорится в примере.) Чем больше в данных таких вот “шумных” точек, которые не особо относятся ни к одному из больших кластеров, тем выше шанс слить несколько плотных скоплений точек в мега-кластер. Помимо шумных точек это еще может происходить, если одно скопление оказалось в (частичном) окружении другого.
Предложенный в 1996 г. DBSCAN позволяет отдать предпочтение следующей точке в кластере на основе желательной плотности точек. Сначала, правда, придется изучить свои данные, чтобы определить плотность, которую вы будете считать желательной. Берем какую-то произвольную точку и строим вокруг нее окружность с радиусом, например, 3 (радиус называется эпсилон, ε). Причем, 3 - это не сантиметры и даже не котики или воробьи, а космический замес всех параметров ваших данных: росто-весо-возраст человека, длино-ширино-чашелистика-и-лепестка ириса и т.д. Чтобы параметры равномерно влияли на этот выбор, данные нужно “нормализовать / стандартизировать” - сделать так, чтобы 1 сантиметр роста равнялся, например, 2 килограммам веса. Это важно для всех алгоритмов, которые принимают решение на основе евклидова расстояния между точками.
Теперь надо понять: если вокруг точки в этой окружности оказалось нормально так других точек, значит, эта точка - основная. “Нормально так” - это тоже число, вы его задаете сами (параметр называется эм, m). Пусть будет пять точек минимум, чтобы определить основную точку. То есть нужен такой компромисс между ε и m, чтобы у вас нашлось достаточно много основных точек для дальнейшего анализа.
Затем берем случайную основную точку и собираем из нее первый кластер: она сама плюс все ее соседи. Соседей, которые не являются основными точками, оставляем в покое в нашем первом кластере. А тех, которые являются основными, просим пригласить всех своих соседей. Продолжаем, пока не исчерпаем все варианты для данного кластера. Затем идем собирать следующий кластер.
Варьирование ε и m позволяет собрать данные во столько кластеров и отбросить столько шумных точек, сколько вам в итоге понравится. Так что все в конечном итоге снова сводится к точке зрения человека. 🤓

#база
❤‍🔥4👍1🔥1
Пикча одного кластера, который хотел съесть другой кластер, но DBSCAN ему не дал. https://ru.wikipedia.org/wiki/DBSCAN
😁41🤝1
🍀 Апрельский анонс нашего журнала

🕸2 Как правильно чистить данные
🐘4 Большая языковая модель - это сколько? И в чем измерять?
🐣7 Создаём собственное веб-приложение
🤗9 Hugging Face - место, где обитают предобученные языковые модели
📝11 Формат CoNLL-U для морфологического и синтаксического парсинга
🤳14 Sora. Вы видели тот сгенерированный видос с японкой?
🗾16 На Python приходится 17.5% всех энергозатрат на программирование - экологические последствия бума искусственного интеллекта
🏗18 Морфологический разбор с UDPipe
🎓21 Генерируем прозу
🤝23 Знакомимся с Keras
🗽25 Знакомимся с PyTorch
🎩28 Генерируем поэзию
30 Знакомимся с Lightning

(И бонус: завтра в остаток марта выпущу пост с секретной темой 🎁)
7
Что такое языковая модель? 🎁

Ну, во-первых, это тема моего секретного поста ;) Анбоксинг состоялся, уиии! Такую тему я выбрала, потому что апрельский номер будет во многом посвящен языковым моделям. Раз уж они все ещё из каждого утюга, то чем мой блог не утюг?
А, во-вторых, это алгоритм, который:
1⃣ умеет рассчитывать вероятность появления каждого слова в тексте,
2⃣ умеет на основе этой вероятности предсказывать продолжение текста.
Вот этих двух связанных причинно-следственной связью операций достаточно, чтобы генерировать произведения а-ля Пушкин, отвечать на реплику человека как человек, разбираться в данных, писать код, ставить диагноз. На заре появления маленькие языковые модели были что-то вроде игрушки: “смотрите-ка какую дичь нагенерил наш несмышленыш!” Но потом, пройдя через нейронки, word2vec, мультитаски и трансформеры, языковые модели превратились из маленького котеночка 🐱 в большого и страшного льва 🦁.
Принцип работы языковой модели. Если я вам скажу “Чето есть хочется. Пойдем в…”, то вы, скорее всего, мысленно достроите продолжение: кафе, столовую, магаз и т.п. Потому что это самое типичное продолжение ситуации, которую я задала в своей реплике. Как машине узнать это типичное продолжение? Надо собрать много-много текстов, разбить их на последовательности из двух, трёх, а, может, даже четырех слов, “откусить” последнее слово и рассчитать, как часто оно появляется после предыдущих слов. В примере выше: нужно посчитать, как часто кафе, столовая и магаз появляются после “есть хочется . Пойдем в”. При этом можно убирать из текстов какие-то “шумные” слова типа предлога в и знаки пунктуации. Затем получаем от пользователя какую-то реплику типа “Чето есть хочется”, и наша модель уже сама может сказать “Пойдем в кафе”. Я вот, кстати, в ЖизньМарт зачастила - и это щас не нативная реклама. Как всегда вот вам ноутбучек с кодом: “Поговори с языковой моделью”.
Такая простая модель, как я описала выше, называется частотная. А вот те модели, которые превратились во льва, называются большими: Large Language Models, LLM. Сейчас в тренде именно LLM - даже в ресече. Что на мой взгляд плохо. Во-первых, большую модель дома не создать. Нужны мощности. Какие? Читайте в нашем апрельском номере. Хотя готовые модели есть в открытом доступе, исследователи ограничены решениями, которые создали в индустрии или больших лабораториях. Во-вторых, у учёных нет единого мнения, что считать большой моделью. Недавно я рецензировала статью для Ассоциации компьютерной лингвистики. В ней авторы используют языковую модель BERT. А им прилетает претензия: чё это вы BERT, а не LLM используете? То есть под LLM теперь иногда понимают только большие коммерческие модели типа ChatGPT. В-третьих, если вы в принципе сделали исследование не по генерации, то вам может прилететь претензия - эээ, где LLM? Я с этим столкнулась в другой статье, которую рецензировала: первая половина статьи - изучение лингвистических особенностей авторской речи, вторая - тестирование LLM. Пишу авторам: зачем LLM? Они отвечают: нам так предыдущие рецензенты сказали. То есть это теперь такой экзамен у комьюнити: если ты тру компьютерный лингвист, то покажи, как ты LLM крутить умеешь. Но, знаете, если бы мир был совершен и не было бы таких перекосов, то о чем бы я сейчас вела свой холивар? Ну и, конечно, оставайтесь с нами: мы вас научим крутить LLMами.🌪

ПС. Вторая “Дюна” божественна! Это тоже не реклама.

#база #notebook
7💅1🦄1
Как правильно чистить текстовые данные

Первый этап в анализе любых данных называется предобработка, или препроцессинг. Сначала надо проверить, что полученные данные соответствуют тому, что вы рассчитывали получить. А если у вас изначально не было представления о том, что вы получите (например, вы просто распарсили много-много сайтов), то надо понять, какие данные брать в дальнейший анализ и как их к нему подготовить. Это тем более актуально в случае, если наши данные - это текст, живая речь, продукт коммуникации. В речи мы много креативим, используем собственный стиль, подаем информацию линейно, в процессе общения выбирая, что сказать дальше. Такие данные называются неструктурированными. В компьютерной лингвистике есть набор лайфхаков для препроцессинга:
🕸 перевод в нижний регистр
🕸 удаление пунктуационных символов
🕸 удаление стоп-слов (это часто встречающиеся слова, которые несут в основном грамматическую информацию - предлоги, союзы, местоимения и т.п.)
🕸 чистка повторяющихся пробелов
🕸 перевод ё в е (деЁфикация)
🕸 стемминг и некоторые другие.
Самое важное, что, по моему мнению, нужно помнить, чистя данные: с водой можно выплеснуть полезные фичи, которые потом окажутся необходимы следующим алгоритмам, примененным к текстам. Например, верхний регистр указывает на имена собственные и на начало предложения или строки в поэтическом тексте, а также на тональность: капсом можно на кого-то НАКРИЧАТЬ.
Я тут прочитала, что все блогеры советуют в тг писать как можно короче 😅 Поэтому сегодня отмахиваюсь от создания неструктурированной пасты... барабанная дробь... ноутбучеком с кодом: тут основные лайфхаки с примерами.
Как говорится, keep clear! И держите свои данные в чистоте! 🌊

#notebook #лайфхакИИ
8🔥2
Большая языковая модель - это сколько? И в чем измерять?

Напомню, что языковая модель - это такая программа, которая предсказывает самое вероятное следующее слово в тексте и на этом основании может дописать любой текст, включая ответную реплику. То есть диалог с ботом - это по сути дописывание реплики пользователя самым вероятным ответом до тех пор, пока самым вероятным следующим словом станет что-то типа “стоп, останавливаемся, хватит дописывать”. Маленькая языковая модель может обучиться говорению даже на паре предложений. Ограничений нет. Словарь Эллочки-людоедки включал 30 слов - этого хватило, чтобы стать персонажем “Двенадцати стульев”. Но на слуху в последнее время большие языковые модели, которые, кажется, вобрали в себя все мировое знание.

Так сколько же слов они знают? Сюрприз-сюрприз, многие из них не общаются словами, поэтому - нисколько. Иначе говоря, столько, сколько в принципе смогут сгенерить. Причем гипотетически могут нагенерить даже такие слова, которых мы еще не придумали. Представим ситуацию. Вот забыли мы слово “аэропорт” и начинаем его как бы припоминать. Сначала вспомнили, что слово начинается на “а”, добавляем “эро”, наконец вспомнили “порт”. А могли вместо “порта” добавить “космический”. Модель, как человек, как бы припоминает слова по сочетаниям букв. Тем не менее в некоторых моделях указан размер словаря, например, в DistilBERT 30522 слова, точнее, токена. Но речь, скорее всего, идет именно о лексических токенах - словах в разной форме.

В целом, мое внутреннее ощущение, что модели знают обычно несколько десятков тысяч слов, если это язык не малоресурсный. То есть для этого языка есть достаточно большой корпус текстов. Создатели ChatGPT не раскрывают, на чем она обучалась, но многие исследователи уверены, что в обучающем наборе точно был Common Crawl (кОмон крол) - самый большой в мире открытый корпус из 250 миллиардов (!) страниц контента на 160 языках. Более 40% текстов, конечно, на английском, но затем идут немецкий и русский языки (более 5.5%). Кстати, большие языковые модели часто являются мультилингвальными, т.е. могут говорить на нескольких языках одновременно.

Но самое большое число в языковых моделях - это не слова, токены и размер корпусов, а количество так называемых параметров обучения. Параметры - это фичи, признаки. В word2vec обычно 300 параметров (правда, это не совсем такие же параметры, как у больших языковых моделей). В GPT-4, по некоторым оценкам, 100 триллионов параметров. На этом фоне модели с всего лишь парой миллиардов параметров уже не всегда называются большими. Правда, слово “средние” за ними тоже пока не закрепилось. Но больше здесь не означает лучше. Некоторые модели после уменьшения параметров оказались более успешными, например, у ALBERT’а 12 миллионов параметров, а его предшественника, BERT’a, 108 млн. Есть даже такой тренд в исследованиях: взять из модели дистиллят из лучших параметров так, чтобы она не потеряла в эффективности.

#база
👍5🔥1
Создаем собственное веб-приложение

Вчера мне мой смартфон Pixel порекомендовал прочитать вот этот пост на Хабре. Это перевод статьи ИТ-эксперта Чип Хуэн. Статья в целом мне показалась очень познавательной, но вот что зацепило больше всего, так это то, что скоро, цитирую, “мы увидим множество дорогих компаний, состоящих из одного человека”. То есть в современной ИТ-реальности есть, по крайней мере, инфраструктурные возможности создать приложение, которое принесет его автору миллион, а может и миллиард. Это примерно как написать песню “Cadillac” или “Cristal & МОЁТ”.
Что вам понадобится, чтобы создать приложение с ИИ (согласно той же статье):
💻 Инфраструктура - компухтер, ну или хотя бы планшет с выходом в Интернет и установленными инструментами для разработки.
📊 Моделька и датасет - алгоритм, обученный выполнять какую-то экспертную задачу, например, отвечать на вопросы. Обычно это делается на данных, специально размеченных для данной задачи. Например, чтобы определять номера машин, нужен датасет фотографий чисел.
📱Веб-оболочка для вашего приложения: сайт, бот в мессенджере, устанавливаемое приложение на телефон.
Сервер и инструменты запуска и поддержки приложения, чтобы оно было доступно пользователю 24/7.
Я решила порекомендовать в этом посте некоторые инструменты, которыми пользуюсь сама. = сложность в освоении и запуске (мое ИМХО). 💰 = есть платные версии с расширенным функционалом.
💰 Aimylogic - лучший зеро-код инструмент для ботов. Легкий, интуитивно понятный, допускает сложные штуки, если захотите, например JavaScript. Прям в нем можно запустить бота вконтакт, в тг и даже настроить обзвон.
💰 JAICP - платформа для создания ботов на языке Scala. Это уже уровень более сложный, чем зеро-код. Помогает понять проблемы разработчиков ботов и компьютерных лингвистов.
Telebot - самый легкий способ создать Питонового бота в телегрэм.
Фреймворк Aiogram - крутейшая Питоновая библиотека для запуска ботов в телеграмме. Можно делать очень сложные проекты.
WebApps в Телеграмме - инструмент, чтобы создать свое приложение прямо в тг. В тьюториале предлагается вариант на Java.
Django - старый-добрый фреймворк для разработки приложений на Питоне.
💰 Python Anywhere - хостинг приложух на Питоне. Инструкция, как устанавливать, здесь.
💰 Render - тоже хостинг, но подходит для любых приложений. Вот здесь наша со студентами инструкция, как захостить приложение.
Всем бабла 🤑 добра и креативных приложений!

#спискии
9🔥2
Ребята, очень рекомендую маги ПИШа, если а. вам не опостылела нефтянка, б. вы хотите в нефтянке трудоустроиться через магистратуру. Обратите внимание на экзамены - там может быть нужен инглиш. Есть время подтянуть до старта приемной кампании.
Присоединяйся к поколению новых инженеров😎

ПИШ ТюмГУ приглашает будущих магистрантов на День открытых дверей

🔹Узнаем, как стать высококлассным специалистом в нефтегазовой отрасли
🔹Обсудим перспективы трудоустройства и возможности карьерного роста
🔹Поговорим о правилах поступления и об организации учебного процесса

Регистрация по ссылке
2
Hugging Face - место, где обитают большие языковые модели

Один мой коллега как-то сказал: “Ну, сегодня языковую модель может любая девочка из MTS AI обучить”. Я сначала подумала, неужели он не знает, что в современных LLM (large language models - больших языковых моделях) миллиарды, а то и триллионы параметров? Чтобы обработать таблицу из пары сотен миллионов параметров, понадобится 300 гигов оперативы. Или кластер из десятка NVIDIA видеокарт (если что, это такие очень дорогие железки). А вот этот блог говорит уже о сотнях или даже тысячах видеокарт. По стоимости просто одно обучение такой модели, как LLaMa обойдется в 760 000 $.
А потом я наткнулась на вот такой тьюториал. Оказывается, в Google Colab, если вам удастся переключить свой ноутбук на TPU (тензорный процессор специально для машин лернинга), то приложение выделит вам как раз примерно 300 Гб оперативной памяти, и вы сможете реально небольшую большую языковую модель обучить. Да, она будет маленькая. Но, если вы это делаете для малоресурсного языка, как, например, создатели модели выше для Эсперанто, то и ок. Единственное, в их коде, запущенном в колабе, вылезает какая-то проблема совместимости версий некоторых библиотек - я ее попробую пофиксить и скину сюда. Либо вы сами, если разбираетесь в pytorch и вдруг да пофиксите, поделитесь ноутбучеком плиз.
Другой вариант - можно дообучить уже существующую модель на какую-то свою задачу. Но это не так почётно в мире LLM 😎
А все обученные и дообученные модели попадают… Правильно, на Hugging Face. Кроме коммерческих моделей, которые доступны только как бот или приложение, присылающее вам только ответ модели. Hugging Face - это а) компания, которая создала и поддерживает эту платформу, б) разработчик питоновой библиотеки Transformers, в которой можно загружать модели и решать с их помощью NLP задачи, в) платформа, где лежат модели, датасеты и очень много понятных и полезных тьюториалов. Так что, даже если вы знаете только самые основы Питона, берите код из тьюториалов, выбирайте модель, кормите ей свои данные и наслаждайтесь магией синтетического интеллекта. А если вы уже продвинутый юзер, то вам по зубам оказаться среди создателей моделей. Я, например, нашла много моделей для русского языка от разработчика по имени Илья Гусев. Видимо, в одиночку работает, но, как я поняла, проведя маленькое журналистское расследование, не в MTS AI 😊

#база #notebook (не мой 😇)
7👍1🔥1
Пора менять зимнюю аватарку на весеннюю 🌱
🔥125👀2
Формат CoNLL-U для морфологического и синтаксического парсинга

Бывают деревья. А бывают синтаксические деревья (см. подробности в посте https://t.me/freeAIintro/180). Treebanks (трибЭнкс) - это и способ моделирования связи между словами в предложении, и коллекция размеченных данных. Как носители языка, синтаксис и морфологию мы ощущаем интуитивно, выучиваем вместе с языком. Но, чтобы их начала понимать машина, пришлось создать модель и разметить на основе этой модели достаточно большой датасет.
Достаточно большой для чего? Чтобы современные нейросети для синтаксического парсинга справлялись с разметкой на более, чем 90%. То же самое с морфологией. Для английского state-of-the-art (SOTA - мировой уровень решения задачи) результат вот такой: fscore=96.38. Причем алгоритмы делают это вжух! как быстро. Без разметки производительность алгоритмов падает до fscore~60-70.
Что за разметка и что за датасет такой? В 2000-е в Университете Стенфорда возник проект: Stanford Dependencies (стЕнфорд депЕнденсиз, Стэнфордские зависимости). Цель проекта была разметить основные характеристики синтаксиса и морфологии: части речи и некоторые их формы, а также пары слов и словосочетаний, связанные друг с другом синтаксической связью. Концептуальной основой такой разметки стала так называемая лексико-функциональная грамматика (Lexical functional grammar). Разметка оказалась полезной для многих задач NLP, таких как извлечение фактов, именованных сущностей, разрешение анафоры. Проект вышел за рамки университета и стал называться Universal Dependencies (юнивЕсал депЕнденсиз, универсальные зависимости). И в рамках уже этого большого проекта была принята универсальная система разметки: CoNLLU (кэ эн эл эл ю) формат. Формат включает универсальные теги для:
🦩 частей речи,
🐸 дополнительных лексических и грамматических свойств,
🦔 синтаксических отношений (Universal Dependency Relations), например, nsubj - номинативное подлежащее.
Сегодня размечены уже 104 языка. Растет интерес к разметке древних, малоресурсных, искусственных языков (например, эсперанто).
Ну и как всегда ноутбучек с примером.

#база #notebook
🔥2