Использование машинного обучения для создания инструмента исследования Covid-19

Оглавление:

  1. Обзор проекта
  2. Импорт
  3. Метод очистки текста
  4. Создание фрейма данных Pandas
  5. Обучение модели LDA
  6. Создание корпусов подсказок
  7. Вычисление тематических распределений
  8. Получение связанных статей
  9. Проверка
  10. Следующие шаги и полезные ссылки

Обзор проекта:

Целью этого проекта является использование тематического моделирования LDA для поиска статей в научных журналах, связанных с подсказкой. Я закодировал это в записной книжке, предоставленной Kaggle, и использовал набор данных из тысяч статей в научных журналах, также предоставленных kaggle. К концу этого руководства вы сможете вводить абзац информации и получать статьи аналогичного характера.

Импорт:

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

Метод очистки текста:

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

Используя библиотеку re python, мы можем использовать регулярные выражения для поиска нежелательных шаблонов в строках и их удаления. Посетите https://regex101.com, чтобы проверить свои собственные.

Создание фрейма данных Pandas:

Библиотека Pandas предоставляет простую в использовании интуитивно понятную структуру данных. Все, что нам нужно сделать, это заполнить объект словаря и вызвать pd.DataFrame().

Kaggle хранит свои статьи в формате JSON в подкаталогах, самый простой способ получить к ним доступ — добавить полный путь к каждому файлу .json в список и повторно вызвать json_load(filepath).

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

Stemming анализирует строку и удаляет окончания, так что остается только основа слова. Таким образом, предложение «бегуны, бегущие быстро, бегут быстрее, чем бегуны, бегущие медленно» становится «бегут, бегут быстрее, чем быстро бегут, бегут медленно». Это помогает, потому что, как люди, мы понимаем семантическую связь между бегунами, бегом и бегом, но для алгоритмов машинного обучения мы должны сделать эту связь немного более очевидной.

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

Наконец, мы удаляем все токены, содержащиеся в массиве STOPWORDS. Стоп-слова настолько распространены, что практически не вносят значимого вклада в модель. Gensim предоставляет список наиболее распространенных, которые можно использовать, просто импортировав их.

На этом этапе все наши читаемые научные статьи стали не более чем блоком бессвязных почти-слов.

Обучение модели LDA:

Для обучения LDA нам нужны 4 вещи: словарь id2word, корпус, количество тем и количество проходов.

Словарь Id2word: Этот словарь присваивает идентификатор каждому отдельному слову в наборе вводимых текстов.

Корпус: корпус — это частота каждого слова в словаре для каждого документа, на котором будет обучаться модель.

Количество тем: количество тем — это количество вероятностных кластеров, на которые модель должна разделить слова. Для этой модели мы выберем несколько большее количество тем — 150.

Количество проходов: количество раз, когда модель обучения будет проходить через все вероятности обновления корпуса.

Создание корпусов подсказок:

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

Затем нам нужно очистить, сформулировать и токенизировать строки.

Вычисление распределения по темам:

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

Что такое тема? В данном конкретном случае тема представляет собой вероятностное распределение слов. Связанные слова будут иметь более высокую вероятность для похожих тем.

Это не полные распределения тем, потому что они не учитывают все 150 тем. Поэтому мы повторяем процесс с другим вспомогательным методом, create_full_vectors, который создает векторы полной вероятности.

Поиск связанных статей:

Для сравнения статей мы будем использовать расстояние Дженсена-Шеннона, предоставленное библиотекой spicy. Чем меньше расстояние между статьями, тем больше они связаны между собой.

Проверка:

Просмотрите результаты и посмотрите, насколько связаны основные документы по сравнению с подсказкой. Для нашей модели мы использовали только случайные 2000 статей, поэтому мы можем пропустить некоторые статьи.

Дальнейшие шаги:

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

  • Выполните некоторые EDA и некоторые более конкретные стоп-слова, которые необходимо отфильтровать. Вы можете сделать это, построив гистограмму того, сколько раз слово встречается в документе не менее x раз. Если слово появляется как минимум x раз примерно в 80% документов, его, вероятно, можно безопасно удалить.
  • Проверьте различное количество тем для обучения. Мы сделали 150 — но посмотрите, как хорошо работают 100 и 50 тем.
  • Обучите и протестируйте больше документов, чем 2000, это даст вам более точную модель, а также даст вам больший банк документов, который может содержать более релевантные статьи.
  • Попробуйте возиться с различными формами ввода статей. Может быть, короткие запросы, загруженные конкретными ключевыми словами, будут работать лучше, чем большие массивы случайной релевантной информации?
  • Биграммы и триграммы — в дополнение к созданию словарной статьи для каждого уникального слова, также создайте одну словарную статью для каждой уникальной пары слов и каждой уникальной пары из 3 слов. Вы можете получить больше информации из каждого документа, но остерегайтесь времени обучения.

Полезные ссылки:

Учебное пособие по LDAhttps://www.youtube.com/watch?v=3mHy4OSyRf0

Документы Genismhttps://gensim.readthedocs.io/en/latest/index.html

Данные Kagglehttps://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge