Для тех, кому не только нравится разглядывать весёлые картинки, но и любопытно, как они создаются.
Любая программа с машинным обучением начинается со сбора и подготовки данных. Выудить из блокчейна более миллиона постов – дело нехитрое, хоть и времязатратное. Куда веселее потом с этим словесным потоком разбираться. Ведь это не русский язык в чистом виде, а некий крипто-хайпо-сленг вперемешку со ссылками, картинками, смайлами и прочими посторонними примесями. Приходит на ум меткий белорусский термин – трасянка.
Был огромный соблазн просто вытрясти из этой трасянки всё, что не встречается в русском алфавите, но мне хотелось оставить в словаре всякие хайповые словечки типа ICO, airdrop, GBG – и позже они свою роль сыграли. Поэтому пришлось избирательно вычищать всё лишнее, а именно: html-теги, ссылки, картинки, смайлы, цифры, знаки препинания и всякие оформительские звёздочки-решёточки. Кроме того, все прописные буквы превратились в строчные, а несчастная буква ё по извечной традиции заменилась на е. Однобуквенные предлоги были беспощадно выброшены за ненадобностью – смысловой нагрузки не несут.
Так, после косметических процедур прекрасный пост известного комнатного гурмана @alena4e превращается в не менее симпатичный (на мой программистский взгляд) текст:
наша страна обладает феноменальной гречкотерпимостью толерантность данному продукту вызывает ухмылку европейца пусть думаю гречкоменьшинства нашей страны могут смело пройтись парадом по красной площади при поддержке столовых госбезопасности студпита также организаторов школьного питания заведующих детских садов надписи на майках транспарантах мир труд гречка гречка всему голова щи да гречневая каша пища несомненно наша любители гречки всех стран объединяйтесь
Но на этом подготовка ещё не закончена. Наоборот, начинается самое интересное. Не секрет, что русский язык очень богат словоформами. Гречка, гречку, гречки, гречкой – компьютерная программа посчитает их разными словами, хотя по смыслу они идентичны, так же как и любить, люблю, любила. Есть два подхода, как решать эту проблему.
Первый называется стемминг – это когда берётся основа слова (все помнят морфологию из уроков великого и могучего?). Все варианты гречки превращаются в гречк, а проявления любви в люб. Однако это скользкий путь, ведь, например, под люб может скрываться слово любой, что совсем не в тему. Или – что я видел своими глазами – Китай сокращается до кит, таким образом приравниваясь к многоуважаемому на Голосе млекопитающему.
Поэтому я выбрал второй подход – лемматизацию, то есть приведение слова к его нормальной (словарной) форме. Как бы вы ни любили гречку, это выражение всегда превратится в "любить гречка". Вот, что получилось:
наш страна обладать феноменальный гречкотерпимость толерантность дать продукт вызывать ухмылка европеец пусть думать гречкоменьшинство наш страна мочь сметь пройтись парад красный площадь поддержка столовый госбезопасность студпить также организатор школьный питание заведовать детский сад надпись майк транспарант мир труд гречка гречка весь голова щи гречневый_каша пища несомненно наш любитель гречка страна объединяться
Напоминает речь иностранца, позавчера начавшего учить русский язык.
В последнем варианте текста можно заметить ещё одну уловку: гречневый_каша – так называемая биграмма. Это пара слов, которые часто встречаются вместе и несут общий смысл, хотя могут употребляться и по отдельности.
Самый очевидный пример биграмм – имена и названия: робинзон крузо, маршал жуков, советский союз, набережная челны, полина гагарин (только так можно не спутать певицу с первым космонавтом). Ещё это могут быть устойчивые сочетания, такие как искусственный интеллект, соц сеть, народный артист, спинной мозг, грань исчезновение, ложиться спать, легкий атлетика, борьба коррупция, пенсионный реформа, кривить душа, спаржевый фасоль и любимый кулинарами приятный аппетит. И, наконец, характерные для Голоса: vox populi и golos io.
Итак, все тексты прошли предварительную обработку и уместились в одном файле размером 1.5 Gb. Следующим этапом было построение гигантской статистической таблицы, в строках которой посты, в столбцах слова, а в каждой клеточке число – сколько раз слово встречается в посте. Примерно вот так:
гречка | любить | голос | конкурс | биткойн | блокчейн | ... | |
---|---|---|---|---|---|---|---|
Пост 1 | 8 | 1 | 0 | 0 | 0 | 0 | ... |
Пост 2 | 0 | 1 | 3 | 2 | 0 | 1 | ... |
Пост 3 | 0 | 0 | 0 | 0 | 9 | 6 | ... |
... | ... | ... | ... | ... | ... | ... | ... |
Имея на руках такую статистику, можно легко избавиться от двух категорий ненужных слов, которые вряд ли помогут, а скорее даже исказят желаемые результаты. Во-первых, это слишком частые слова, которые попадаются более чем в половине текстов: что, где, как, который, надо и т. д. Во-вторых, крайне редкие, которые встречаются только в единичных случаях (экспериментально я выбрал цифру менее 0.4% от всех документов). Сюда попадают узкая терминология, опечатки и оригинальные авторские находки вроде гречкотерпимости или гречкоменьшинств. Вспоминаются также кабачкоголизм и цуккини-лайфстайл, изобретённые всё тем же кабачково-инертным комнатным гурманом (кстати, "комнатный гурман" программа тоже посчитала биграммой).
А теперь, внимание, чёрный ящик! (пам-пам-пара-па-па-пам-пам, и так далее)
Да, в машинном обучении обязательно должен быть таинственный чёрный ящик, в котором происходит некое волшебство. Нет, я конечно могу рассказать подробнее о Латентном размещении Дирихле, но, пожалуй, пусть оно посидит в ящике, не распугивая оставшихся читателей (если таковые ещё присутствуют). Главное, надо понимать, что мы кладём в ящик (вышеупомянутую таблицу), и что затем из него извлекаем. А извлекаем мы две важные вещи.
1. Представление тем в виде набора слов
Это те самые картинки из прошлого поста. Алгоритм автоматически выбирает самые выделяющиеся темы и характерный для них словарь.
2. Представление постов в виде набора тем
Теперь для любого поста можно прикинуть, к каким темам он относится. Как правило, это будет сочетание нескольких тем в процентном соотношении. Давайте посмотрим что-нибудь относительно свеженькое.
Что можно делать с этими цифрами дальше? Тут уж есть где разгуляться. Например, @avoice высказала идею снять с пользователей бремя придумывания тегов к своим творениям. Только надо всё же доработать алгоритм, чтобы он выделял больше узких тем. Можно поискать связь между тематикой и выплатами, как предложил @ivprst. Мне же хочется полученные данные запихать в очередной чёрный ящик и вывести из семантики постов что-то ещё более интересное. Надеюсь, продолжение следует.
Источники картинок:
@mindmaker Самое сложное -задать себе вопрос...Потому что потоим придется на него отвечать...Весь прогресс людской строится на этом...))Что то в этом есть во всем, пока неуловимое, но явно может быть структурировано
@nikalaich мысль до конца не уловил, но что-то в этом есть)
@mindmaker Алаверды ))
mindmaker Поздравляю Вас с днем рождения голоса!
И всех пользователей!)
А как это - у вас список постов "свеженькое" - он же рандомный.
Вот если посты в несколько групп по какому-либо признаку. И посмотреть как будут распределяться темы.
По размеру выплат, да интересно. Или по времени публикации утро/вечер))
Или сколько месяцев на голосе автор)
Может и будет закономерность)
А еще можно перейти не к отдельным словам - а к наиболее часто употребляемым фразеологическим оборотам)
@irkinmick да, идей много, только надо время найти на их реализацию. Список составлен вручную из постов за последние дни. Как я уже писал раньше, есть большой перекос в сторону нескольких лидирующих тем, поэтому многие посты на 70-80% попадают в категорию жизнь или блокчейн, что не слишком информативно. А тут я выбрал более разнообразные примеры для иллюстрации.
И взаимно с ДР Голоса!
Очень хочется узнать о:
@oliko всегда пожалуйста. Метод основан на распределении Дирихле, которое примечательно тем, что позволяет выделить одну-две-три доминирующие темы для каждого документа. Так, у Вашего недавнего расследования выделяются три темы: 34% науки, 29% еды и 27% жизни. А у всех остальных тем менее 1%. Зато такой ситуации, когда у поста будет по 5% от каждой из 20 тем, быть не должно – Дирихле не позволит.
Вот оно чё...
Комнатный гурман любить посты mindmaker ))))) блог mindmaker чёрный ящик golos io )))))
в котором всегда есть что-то интересное. Простор мысли, ворох идей. Я за прикладную математику, @mindmaker! Обидно складывать твои исследования под стекло.
@alena4e складывай в ящик)
@mindmaker
а) ящик стола
б) ящик с апельсинами
в) чёрный ящик клуба знатоков
г) в ящик, который все боятся сыграть
д) другое (от слова "друг")
@alena4e надо брать звонок другу (из пункта "д")
@mindmaker Спасибо за интересные исследования. Это правда любопытно - к чему же они всё-таки приведут!
Кулинар-клуб поддержал ваш пост
@vp-kulinar-club спасибо, куда бы я не копал, всегда встречаю что-то вкусненькое)
@mindmaker, и я попала в список)) Интересно было прочесть про алгоритм.
@mindmaker Наверное, и правда, "выплаты" больше к моему посту подходит. Я ставлю "финансы" как более популярный тег.
Разработка просится в применение =)
@mindmaker, Поздравляю!
Ваш пост был упомянут в моем хит-параде в следующей категории: