Проблема:

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

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

Решение:

Чтобы создать приложение, мы можем использовать Kivy для графического интерфейса, gensim для модели машинного обучения LDA (Скрытое распределение Дирихле) и nltk для частей обработки естественного языка.

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

Конечным результатом будет визуализатор, который может получать и показывать нам изображения из изображений Google, которые соответствуют ключевым словам, найденным нашей моделью LDA, как показано ниже.

Что такое ЛДА:

Я все еще очень новичок, но постараюсь объяснить это как можно лучше:

Скрытое распределение Дирихле – это вероятностный тип моделирования темы, используемый для классификации текста в документе по определенной теме. Он создает тему для модели документа и слова для модели темы, смоделированные как распределения Дирихле.

Один из способов сделать это (называемый выборкой Гиббса) имеет очень забавный способ визуализации. Например, представьте, что у вас есть 5-летняя дочь, и она еще мало что знает о кулинарии. Если вы спросите ее, из какой кухни родом суши или моти, она может не знать, что они родом из японской кухни.

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

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

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

Создание приложения:

Я прошел много онлайн-уроков и постов, чтобы узнать, как это сделать. Лучший пост, который я нашел, был от Priya Dwivedi (огромное спасибо и низкий поклон ей).

В своем посте она объясняет, что вы можете создать модель LDA с помощью пакета gensim. Чтобы построить модель, она создает функцию предварительной обработки, которая лемматизирует (процесс группировки флективных форм слова, чтобы их можно было проанализировать как единый элемент) и объединяет слова в наборе данных, который мы будем передавать в модель LDA gensim.

def lemmatize_stemming(text):
"""Simple function to lemmatize and stem words in document"""
        return stemmer.stem(WordNetLemmatizer().lemmatize(text, pos='v'))

def preprocess(text):
 """Simple function to preprocess words in the variable text"""
        result=[]
        for token in gensim.utils.simple_preprocess(text) :
            if token not in gensim.parsing.preprocessing.STOPWORDS and len(token) > 3:
                result.append(lemmatize_stemming(token))
                
        return result

После построения функции предварительной обработки нам нужно найти данные из религиозных текстов. Для этого мы можем использовать откровения в качестве данных поезда и главу 11 в качестве моих тестовых данных. с Biblia.com.

После этого мы можем построить модель LDA с помощью gensim и обучить ее книге откровений:

‘’’
 Train your lda model using gensim.models.LdaMulticore and save it to ‘lda_model’
 ‘’’
 # TODO
 lda_model = gensim.models.LdaMulticore(bow_corpus, 
 num_topics = 8, 
 id2word = dictionary, 
 passes = 10,
 workers = 2)

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

def downloadimages(query):
  “””
  Function to download images using google_images_download
  “”” 
  # keywords is the search query 
  # format is the image file format 
  # limit is the number of images to be downloaded 
  # print urs is to print the image file url 
  # size is the image size which can 
  # be specified manually (“large, medium, icon”) 
  # aspect ratio denotes the height width ratio 
  # of images to download. (“tall, square, wide, panoramic”) 
    arguments = {“keywords”: query, 
    “format”: “jpg”, 
    “limit”:2, 
    “print_urls”:True, 
    “size”: “medium”, 
    “aspect_ratio”: “panoramic”,
    “no_directory”:”images”,
    } 
    try: 
       response.download(arguments) 
 
  # Handling File NotFound Error 
    except FileNotFoundError: 
       arguments = {“keywords”: query, 
       “format”: “jpg”, 
       “limit”:2, 
       “print_urls”:True, 
       “size”: “medium”} 
 
 # Providing arguments for the searched query 
   try: 
 # Downloading the photos based 
 # on the given arguments 
       response.download(arguments) 
    except: 
       pass

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

Законченный:

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

Важные выводы

Из этого опыта мы можем узнать о:

  • Тематическое моделирование
  • Скрытое распределение Дирихле
  • Система галереи изображений Kivy
  • Веб-скраппинг
  • Обработка естественного языка

Будущие действия

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

Спасибо Прие и Эдвину за их замечательные статьи, объясняющие тематическое моделирование, и вам за то, что читаете: D, это было веселое путешествие.