Обзор

В этом блоге мы собираемся выполнить задачу моделирования темы, чтобы назначить текст из данного набора данных различным темам. Как только это будет сделано, мы сравним назначенные темы с текстом, сгенерированным с помощью GPT-3, чтобы убедиться в его точности.

В качестве предварительного условия вам, вероятно, потребуются некоторые знания и практика с кодированием Python и машинным обучением, чтобы понять это.

Этот блог представляет собой краткое обсуждение и показывает только частичные фрагменты кода. Вы можете получить полный код на моей странице GitHub.

1. Тематическое моделирование

Дайте мне кучу данных, и я скажу вам, где они находятся. В этом суть тематического моделирования. Тематическое моделирование – это неконтролируемый подход к машинному обучению, который может анализировать несколько документов и группировать их в соответствии с определенными связанными шаблонами. Интересно, что это делается без подачи алгоритму машинного обучения каких-либо помеченных данных.

Например, много лет назад, до появления цивилизации, мужчина взял своего ребенка в джунгли. Мужчина показал своему ребенку птиц и диких кошек, указав их отличительные черты. Это контролируемое обучение.

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

С этим небольшим введением в эти концепции вы сможете погрузиться в основную проблему этого блога. Если вы все еще не понимаете, пожалуйста, углубитесь в эти вопросы, потому что это станет техническим 🔧!

Набор данных

Я использовал Набор данных сообщества OSDG. Это набор данных связанных с ЦУР текстовых выдержек из различных документов. Набор данных представляет собой файл .csv с 7 столбцами, которые включают: doi, text_id, текст, sdg, labels_negative, labels_positive и соглашение. Описание каждого из этих столбцов можно найти на веб-сайте OSDG Community Dataset. Среди них меня интересует только текст данных ЦУР-15.

Фильтрация данных SDG-16

Давайте сначала посмотрим на первые несколько строк набора данных, который мы только что загрузили.

Столбец «ЦУР» показывает ЦУР, к которой относится конкретный текст. Выше показаны только ЦУР и 8, поскольку мы ограничили их тремя строками.

Далее мы фактически фильтруем данные SDG-15. ЦУР-15 в основном сосредоточен на вопросах, связанных с окружающей средой или, как они любят выражаться, «жизнь на суше». Некоторые цели включают восстановление деградированных земель и борьбу с вырубкой лесов. У нас есть 978 текстов, связанных с ЦУР-15.

Алгоритм скрытого распределения Дирихле (LDA)

Это алгоритм обучения без присмотра, который распределяет текст по разным темам в зависимости от частоты слов. Как вы скоро увидите, LDA, как правило, хорошо определяет согласованные темы, которые могут быть легко связаны с проблемами или показателями ЦУР-15.

Во-первых, текст был очищен. Примечательно, что знаки препинания и стоп-слова были удалены.

Столбец «текст» — это текст до его очистки, а «очищенный_текст» — это текст после очистки и разделения предложений на слова. Слова были приведены к корню с помощью лемматизатора.

После подбора нашей модели LDA с 18 темами генерируются следующие темы и их соответствующие вероятности:

В первом кластере (кластер 0) тема «лес» имеет наибольшую вероятность, а в кластере 2 — тема «биоразнообразие». Существует некоторое возможное совпадение тем, поскольку «лес» и «вид» имеют наибольшую вероятность более одного раза. Это становится более ясным после визуализации.

Далее давайте взглянем на карту расстояний между темами. Если вы не можете увидеть это на Github, вы можете просмотреть его через Google Colab.

Темы, которые не пересекаются, были четко выделены. Однако есть два, которые пересекаются. Тема 12 (биоразнообразие) и 13 (лес) частично совпадают. Чего мы действительно хотим, так это иметь какие-то «независимые» темы. На практике эти вопросы связаны, отсюда и дублирование. Однако с этим перекрытием можно справиться путем оптимизации модели. Вы можете попробовать настроить параметр eta модели LDA или использовать поиск по сетке. Вы также можете просто уменьшить количество тем до 9 в переменной num_topics. Нет никакой сложной теории, которая привела бы к выбору количества тем, равного 9.Если вы посмотрите на ЦУР-15 на веб-сайте Организации Объединенных Наций, вы заметите, что их 9 «основные» задачи в рамках ЦУР-15. Вот почему я решил использовать 9. Мы будем придерживаться 18 тем, так как оптимизация не является нашей целью.

Наконец, для задачи моделирования темы мы создаем облако слов для каждого кластера. Вероятно, он выглядит знакомым, поскольку вы видели его в начале этого блога.

Было создано 18 тем кластера облака слов. Вы можете посмотреть их все на github.

2. Генерация текста

Некоторые хотели бы называть генерацию текста генерацией естественного языка. Не парьтесь по этому поводу, для этой задачи я буду использовать генерацию текста. В нашем контексте мы в основном пытаемся сгенерировать текст из заданных тем, чтобы затруднить определение того, был ли текст создан человеком или нет. Звучит как часть теста Тьюринга, верно? Для этого я использовал GPT-3. Из-за ограниченных ресурсов я буду использовать EleutherAI/gpt-neo-1.3B, который является копией архитектуры GPT-3. Он напоминает архитектуру GPT-3 с точки зрения дизайна и производительности с меньшим количеством параметров.

На протяжении всего этого проекта я использовал Tensorflow. Для этой второй задачи я буду использовать PyTorch. По сути, я получаю темы из облака слов, добавляю несколько слов для контекста, затем загружаю их в модель текстового генератора и, наконец, предоставляю вам решить, насколько хороша производительность.

Загрузите модель. Вы можете получить более крупные модели для относительно лучшей производительности, но это, вероятно, скажется на ваших ресурсах.

Затем мы передаем темы в нашу модель. Предложение было сделано только для небольшого контекста

Обратите внимание на текст, созданный только из этого краткого текста. Вот результат:

Вот в чем сила GPT-3!

Попробуйте и задайте несколько вопросов или напишите эссе (сгенерируйте)!

Чтобы получить полный код, посетите мою страницу. Не стесняйтесь, дайте мне знать, как это происходит. Спектакль отличный!