Введение в искусственный интеллект
331 subscribers
63 photos
2 videos
170 links
Просто об искусственном интеллекте и его возможностях. Помогу разобраться в базовых понятиях и создать собственную нейросеть. Рассказываю, что у ИИ под кожей.
Елена Михалькова
Download Telegram
Анонс на февраль 2024

Чето у меня случилась неделя каникул. Пора продолжить постинг. Итак, по результатам опроса лидируют алгоритмы машобуча. Затем идут NLP, история IT и, наконец, компьютерное зрение. Ну и вот это вот все вдохновило меня на такой план на февраль:

🖤 18 Кластеризация: базовый базис
🖤 20 Зачем графу ребра, и посадил ли он дерево?
🖤 22 Иерархическая кластеризация, или как читать дендрограммы
🖤 25 Синтаксическое дерево
🖤 27 Языки разметки: HTML, XML, YAML
🖤 29 DBSCAN - это вам не просто случайный набор букв

See you soon!
❤‍🔥5
🖤 Кластеризация - это база, это знать надо

Вот ведь что такое кластеризация… Вышел как-то один ботаник в сад, где цвели ирисы, глянул на поле и понял, что ирисы бывают не просто разные, а разных видов. Этого ботаника звали… Нет, не Альберт Эйнштейн, а Эдгар Андерсон - ну, по крайней мере, так говорит Википедия. Именно он собрал четыре параметра ирисов для датасета, который потом назвали… Нет, не в честь Андерсона, а в честь Рональда Фишера, который на примере датасета продемонстрировал метод выявления признаков, на основе которых можно отнести экземпляры к некоторым классам. Фишер уже знал, что ирисы бывают трех видов. А вот Андерсон открыл виргинику - Iris virginica - один из трех видов в датасете.
Как он при этом действовал? Посмотрел на цветы и… мысленно кластеризовал их в две разные группы: вот виргиника, а вот верзиколор (Iris versicolor).
Почему раньше их считали одним видом? Да им просто не померяли те четыре признака, которые Андерсон посчитал значимыми для разделения видов - длина и ширина чашелистика и длина и ширина лепестка. И новый вид он открыл потому, что после измерений понял, что-то тут не так. В отличие от третьего вида в датасете - сетосы (Iris setosa), которая сильно отличается - виргиника и верзиколор во многом похожи. Но если взять все четыре признака и проанализировать их, то реально выходят два разных вида.
Как при этом действовать? Как развести два ириса в разные группы? Пусть каждый признак - это координата по одной из осей. Осей пусть будет столько, сколько признаков мы померили. В случае ирисов - четыре. Теперь каждый ирис представлен точкой в четырехмерном пространстве.
Вариант первый: мы уже знаем, что видов - два. Тогда найдем по каждой из осей такую точку, ниже которой будет, судя по измеряемому признаку, максимум экземпляров одного вида, а выше - второго вида. Найти такую точку сродни поиску баланса, когда у нас минимизируется ошибка. То есть минимум ирисов оказывается не в своей категории. Это была придумка Фишера - линейный дискриминантный анализ.
Вариант второй: мы не знаем, сколько тут видов. Измеряем в нашем многомерном пространстве расстояние от каждой точки до ее соседа. Там, где между точками расстояния поменьше (точки как бы сгрудились вокруг невидимого центра притяжения), это пусть один отдельный вид. Такой вид называется кластер. А процедура его вычисления - кластеризация. И тут мы приходим к одной замечательной особенности. Чтобы произвести кластеризацию, нужно решить, какое максимальное расстояние между двумя точками мы будем считать допустимым, чтобы отнести их к одному кластеру. То есть где нам остановиться, когда мы от центра притяжения, где плотность высокая и расстояния маленькие, уходим к периферии. Либо нужно решить, сколько всего кластеров мы хотим. Тогда делим наши точки по принципу максимальной близости так, чтобы получилось заданное количество кластеров. Ну как будто фломастером обводим эти тучки из точек. Сказали обвести три - обводим три, так чтобы точки максимально плотно внутри них были расположены.
Вот такая она - кластеризация. В ней много зависит от нашего восприятия.

#база
👍51
🖤 Зачем графу ребра, и посадил ли он дерево?

Есть в математике такой раздел: теория графов. По-моему, его пока в школе как отдельный раздел не изучают, но терминологию используют и некоторые задачи решают. Графы полезны как модель для решения. В ИИ они встречаются в кластеризации, деревьях решений, представлении структуры предложения или словаря и даже в визуализации круга ваших контактов в социальных сетях. Поэтому сегодня напишу вкратце о графах.
Граф - это точки, соединенные линиями. Точки называются вершинами (а также узлами; a node, vertex, point), линии - ребрами (дугами; an edge, a link, line). Просто точка, без ничего, это изолированный граф. А если две точки соединены ребрами так, что можно попасть из одной в другую двумя разными способами, то это цикл.
Считается, что теория графов началась с задачи о мостах Кенигсберга: в городе есть семь мостов - как пройти по всем так, чтобы не пройти дважды ни по одному из мостов?
Картинка с мостами тут. Попробуйте мысленно пройти по мостам. Интуитивно вроде бы понятно, что придется несколько раз ходить по одному и тому же мосту, но вдруг мы что-то упускаем? Леонард Эйлер в 1736 первым доказал математически, что это невозможно. Мосты он представил как ребра графа. Вершины - это берега рек, причем у одной вершины пять ребер, а у остальных по три. Эйлер доказал, что решение задачи зависит от количества вершин и того, сколько из них имеют нечетное количество ребер.
А теперь усложним задачу. Пусть у нас есть сотня городов, соединенных дорогами. Мы должны посетить как можно больше городов так, чтобы как можно меньше оказываться в одном и том же городе. Снова представляем города и дороги как графы. Задачу можно усложнить, добавив стоимость поездки по каждой дороге. Это уже задача коммивояжёра (редко пишу ё, но тут прям просится) - задача на построение самого выгодного маршрута, или задача на оптимизацию. Один из самых простых способов решить эту задачу называется “алгоритм ближайшего соседа”:
👆 начнем в случайной вершине,
пометим ее как пройденную, а остальные - как непройденные,
🖖 выбираем ближайший город из тех, которые мы еще не посетили,
👊 топаем в этот ближайший город, отмечаем его как посещенный,
🖐 идем на шаг три, пока все не обойдем.
Т.к. в этой задаче можно посещать один город несколько раз, то, оказавшись в окружении только посещенных городов, ищем самый дешевый/короткий путь до следующего непосещенного. Этот метод решает задачу быстро, но не дает гарантии самого оптимального решения.
Словарь языка (особенно все существительные) тоже можно представить в виде графа. Возьмем слово “стол” - оно будет вершиной. Стол является подвидом мебели - представим над вершиной-столом вершину-мебель и соединим их ребром. Мебель - это вид предметов быта - проведем теперь ребро к ним, куда-то наверх. Предметы быта суть некие объекты. К объектам сходятся ветви из живых существ, объектов неживой природы, абстрактных понятий и т.п. Все ветви образуют дерево: граф, в котором из каждой точки в любую другую его точку можно прийти только одним путем. А представление словаря в виде понятийного графа называется тезаурус.

#база
5
Дорогие подписчики!

Свое следующее мероприятие я проведу не в Тюмени, но там будет частичный онлайн. А если вы вдруг окажетесь в г. Санкт-Петербурге сразу перед мартовскими каникулами, то велком и на практику.
Это будет воркшоп - мастерская по научной теме, над которой я работаю еще со времен диплома (2006 г.): теория комического через призму количественных методов. Данные рассказывают нам, почему и над чем мы смеемся.
Только обязательно зарегистрируйтесь заранее на сайте. Регистрироваться надо и на онлайн-лекцию.

#ниипетпроект
😍5👍1
🖤 Иерархическая кластеризация, или как читать дендрограммы

Оказалось, эта кластеризация - та еще зараза. Рабочий день ушел на то, чтобы... барабанная дробь... ну конечно же, отмахнуться ноутбучеком с кодом.
Что такое иерархическая кластеризация? Берем точки в n-мерном пространстве, но не просто по одной, а по две или даже более, и смотрим какой-то признак, который их сближает. Самое простое - это расстояние между точками. Чем ближе, тем более вероятно, что точки принадлежат одному кластеру (который, возможно, и есть целый класс). Начинаем кластеризовать от самых близких, собирая их в нижний уровень иерархии, к самым дальним, пока все точки не образуют один большой мегакластер. Таким образом, на самом верхнем уровне собирается все подряд - следовательно, здесь нельзя сделать вывод об общности признаков, сходстве элементов. А вот на уровнях пониже можно. Собсна, в ноутбучеке я использую пример из векторизации юморных твитов - самый первый уровень кластеризации проходит успешно. Ну а дальше несвезло 😇🍀 В общем жмякайте ссылку выше и читайте каменты в коде. Там все подробно расписано.

ПС. Синтаксические деревья, которые были по плану на этой неделе, посажу завтра.

#notebook #база
6👍1🔥1
🖤 Синтаксическое дерево

Что такое предложение (на естественном языке, например, русском)? Если посмотреть очень формально, то это набор символов между первой буквой, открывающей предложение (если письмо буквенное, а не, например, иероглифическое), и пунктуационным знаком, который сигнализирует об окончании предложения (.?!). То есть мы сами решаем, где границы предложения, а потом сигналим об этом на письме всякими значками. Если говорить со стороны смысла, то тут стоит сравнить предложения, выделяемые на письме, с устной речью. Когда говорят об устной речи, то там принято выделять даже не столько предложения, сколько высказывания. То есть какой-то интонационно завершенный отрезок, который имеет некоторое смысловое единство, вроде сообщения о факте или вопрошания или отрицания и т.д. На письме же, когда нам кажется, что мы написали более-менее законченную мысль, то мы ставим точку (или другой пунктуационный знак), чтобы разделить речь на удобоваримые отрезки.
Предложение тоже (тоже - если вы жмякали мой прошлый ноутбук) можно представить в виде дерева - синтаксического дерева (“Бонд. Джеймс Бонд.”) 🌳. Его листочками будут отдельные слова. Затем слова собираются во фразы (словосочетания), а те в свою очередь нанизываются на предикативный центр предложения. Обычно таким центром выступает глагольная основа сказуемого (в отличие от грамматической основы, в которую включены подлежащее и сказуемое целиком). Ну то есть самый главный глагол в нашем предложении, если он есть, конечно. Как любила говаривать моя преподавательница по английскому Лариса Евгеньевна Чуфистова: “the V of the sentence” (зэ ви ов зэ сЕнтенс, "то самое Вэ предложения"). Например, “Кошка лежит на рогожке” - зэ ви тут будет лежит. На него навешиваем кошка и на рогожке. Если предложение сложное, то там будет столько зэ ви, сколько есть предикативных центров - главных глаголов в простых предложениях, на которые оно дробится. А что если нет глагола? Тогда в центр встает главное слово в подлежащем: в предложении “Кошка на рогожке.” это будет существительное кошка.
Важный дисклеймер: лингвисты из разных школ по-разному называют то, что я сейчас назвала предикативным центром. Так что не сверкайте этим термином лишний раз перед лингвистами. Они могут докопаться до того, что "а поддерживаете ли вы вообще концепцию Хомского? Или просто прочитали учебник Розенталя в детстве?"
Дальше, когда нашли центр, в каждой фразе выделяем главное слово. Например, во фразе на рогожке главная, конечно, тут рогожка. На нее навешивается предлог на, значение которого гораздо более абстрактно. Он передает отношение между положением объектов в пространстве.
Визуализировать синтаксические деревья можно при помощи разных библиотек для NLP. Вот ноутбучек с примерами. А я пойду выпью чаю и съем еще этих вкусных французских булок, if you know what I mean ;)

#база #notebook
10
Ну если такие люди иногда исчезают из своих каналов, то мне тем более можно ☺️
👌2
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