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

Несмотря на демократизацию машинного обучения, обеспечиваемую такими фреймворками, как PyTorch, TensorFlow, Keras и отличными библиотеками, такими как scikit-learn, gensim, spaCy, textaCy и другими, building продукт, ориентированный на ИИ »по-прежнему считается сложным и дорогим .

Даже если вы разрабатываете что-то на основе предварительно обученных готовых моделей, выйти за рамки демонстрации определенно все равно сложно, но должно ли это быть дорогим? Что касается обработки изображений, вы, безусловно, можете выполнять обнаружение объектов в реальном времени на дешевом, маломощном оборудовании (хотя частота кадров будет ужасно низкой), но для обработки текста вам придется нелегко с развертыванием fastText. или модель word2vec на машине с оперативной памятью менее 16 ГБ.

Стартап с ИИ обычно может начинаться с целевой страницы и демонстрации, вызывать интерес, чтобы продемонстрировать спрос, а затем искать начальное финансирование - скажем, от 100 000 до 1 миллиона долларов - для создания команды и инфраструктуры для создания продукта. Но для тех, кто только начинает, без бюджета или финансирования, сколько вам может понадобиться потратить на создание и развертывание производственного ИИ, который сделает что-то полезное?

Изначально я не ставил перед собой задачу найти ответ на этот вопрос. Я просто хотел создать что-то, что решило бы мою проблему:

Моя лента в Твиттере была полна интересных исследовательских работ, которые я хотел прочитать, но у меня не было времени их читать.

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

Мой опыт работы с текстами и наукой о данных, поэтому у меня было довольно хорошее представление о том, что требовалось для создания какого-то инструмента командной строки с этой функциональностью. Раньше я разрабатывал или вносил свой вклад в различные инструменты с открытым исходным кодом, которые решали некоторые из этих проблем. Но в то время у меня не было опыта в создании или развертывании реального продукта. Мои предпочтительные языки - Python и Ruby, поэтому это исключало возможность расширения многих инструментов с открытым исходным кодом, которые могут анализировать PDF-файлы, таких как Apache Tika, Grobid или science-parse, поскольку они написаны на Java. Я понял, что мне нужно будет начать с нуля и преодолеть следующие проблемы:

  • Быть быстрым и работать в режиме реального времени - обрабатывать документ за несколько секунд или меньше
  • быть обученным и работать на моем ноутбуке
  • возможность развертывания на относительно дешевых облачных сервисах, например, Linode VPS за 20 долларов в месяц
  • быть расширяемым, чтобы я мог развертывать дополнительные модели по мере добавления новых функций

Трудности с обработкой PDF-файлов хорошо описаны в других источниках. Такие инструменты, как Poppler предоставят вам необработанный текст, но чтобы получить пригодный для использования текст из PDF, вам необходимо:

  • определить и удалить верхние и нижние колонтитулы
  • идентифицировать элементы документа, такие как заголовок, автор, заголовки, столбцы, рисунки, таблицы
  • реконструировать и переформатировать текст вокруг этих элементов

В течение следующих недель я создал инструмент на Python, который брал документ PDF или Word, извлекал, очищал и перекомпоновывал текст, а затем классифицировал каждую строку как один из следующих типов:

  • метаданные: название, автор и т. д.
  • заголовок раздела
  • основной текст
  • табличный текст
  • подпись
  • библиографическая ссылка

Затем, используя spaCy и gensim, я создал следующие функции, специально предназначенные для исследовательских работ и отчетов:

  • упрощение и резюмирование текста
  • извлечение ключевых слов
  • выявление фактов, утверждений и «важных моментов»
  • извлечение и анализ ссылок

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

Я решил создать API во Flask, чтобы превратить эту функциональность в микросервис, а потом позаботиться о внешнем интерфейсе. Комбинация веб-приложения, которое обеспечивает взаимодействие с пользователем и настройку, с отдельным API, выполняющим тяжелую работу, я надеюсь, дала бы мне минимально жизнеспособный продукт.

Я решил, что самый простой способ создать и развернуть пользовательское приложение, не обладая текущими навыками веб-разработки, - это расширение Chrome. Имея это в виду, я создал шаблон HTML с разделами, соответствующими функциям API, и приступил к изучению Javascript, достаточного для заполнения шаблона выходными данными API.

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

  • настройка репо частного кода (7 долларов в месяц)
  • регистрация доменного имени (10 $)
  • создание сайта в SquareSpace (15 $ / мес.)
  • настройка облачного VPS (20 долларов в месяц)
  • регистрация в Интернет-магазине Chrome (5 долларов США)

API был развернут на api.scholarcy.com, я отправил расширение в Chrome Store, и несколько дней спустя появилось расширение Scholarcy для Chrome. На это ушло 2 месяца моего времени, но это обошлось мне менее чем в 100 долларов.

Справедливо сказать, что с момента первого выпуска для альфа-тестеров в феврале 2018 года было добавлено и улучшено довольно много, и было потрачено больше денег, например, на разработку Веб-библиотеки Scholarcy. Еще многое предстоит сделать, и знаменитая изречение Рида Хоффмана:

«Если вас не смущает первая версия продукта, значит, вы запустили слишком поздно»

определенно применяется здесь. Но я надеюсь, что это демонстрирует, что вы можете создать и развернуть в пространстве AI / ML с четкой целью, большим объемом работы, но не большими финансовыми затратами.

Наконец, если вы заинтересованы в создании инструмента искусственного интеллекта, который делает полезные вещи с текстом, то для начала я рекомендую следующие руководства:













Последняя вещь. Этот пост можно было бы также назвать Как я создал продукт из некоторых нелюбимых проектов GitHub, потому что моей отправной точкой была реализация textrank и парсер текста, который определял пары термин-аббревиатура, которые я использовал для предоставления функций для текстового классификатора, а затем продолжили оттуда. Так что, если у вас есть старый код, посмотрите, сможете ли вы использовать его в качестве отправной точки для создания чего-то нового!

Подробнее откуда это взялось

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

Следите за нашей публикацией, чтобы увидеть больше историй о продуктах и ​​дизайне, представленных командой Журнала.