Вступление

Я всегда скептически относился к тому, как опубликовать этот документ, должна ли это быть простая презентация или блог вроде этого? Наконец я решил создать этот блог. Речь идет о том, как написать простой механизм рекомендаций по документам, используя универсальный S кодер Google U entence E ncoder.

Пример использования

Рекомендовать похожие новостные статьи из набора данных article1.csv (50 000 новостных статей).

как нам это сделать?

Простой,

  1. прочтите каждый документ из article1.csv,
  2. закодировать документ в фиксированное 512-мерное встраивание
  3. сохранить внедренный вектор вместе с идентификатором документа в Elasticsearch

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

  1. производитель выпускает новый документ и отправляет его в пар
  2. этот новый документ будет прочитан потребителем
  3. закодировать новый документ в фиксированное 512-мерное встраивание
  4. сохранить внедренный вектор вместе с идентификатором документа в Elasticsearch

Давайте погрузимся в код

Примечание. Я пробовал выполнять приведенное ниже упражнение на своем Mac, на компьютере с Windows команды и последовательности могут измениться.

Для простоты, а также для того, чтобы запускать его локально на моем компьютере, я использую расширенную версию article1.csv = ›article_small.csv (25 строк с данными новостей). Ознакомьтесь с этим README, чтобы узнать, как клонировать и запускать приложение локально.

1. Запустите приложение.

Чтобы запустить флеш-сервер из VSCode, выберите вариант Menu --> Run --> Run without debugging

2. Добавьте документы в Elasticsearch.

Как показано выше на диаграмме, нам нужно пакетно добавить все документы (в нашем случае только 25 новостных материалов) в Elasticsearch, вызвав конечную точку фляги `/ start-indexing-all`

Я создал простой сценарий оболочки для вызова этой конечной точки

Откройте терминал и запустите приведенный выше сценарий, в зависимости от конфигурации вашего Mac это займет от 2 до 3 минут. После того, как все документы будут добавлены в Elasticsearch, откройте Chrome браузер (я использовал Chrome для тестирования этого проекта) и используйте предпочитаемый плагин Elasticsearch, чтобы проверить, как добавляется новостной контент и его вложения. Я использую расширение Chrome Elasticvue для просмотра только что созданного индекса.

3. Выполните поиск в Elasticsearch с помощью некоторой поисковой строки.

Теперь пришло время выполнить поиск похожих документов, предоставив строку поиска конечной точке фляги `/ search`.

Простой скрипт для вызова конечной точки. Из того же терминала (где вы выполнили `start_indexing.sh`) вызовите ./search.sh

Это должно создать еще 512 встраиваний для поискового запроса Health Care и выполнить поиск во всех 25 документах, чтобы найти любое контекстное совпадение и отобразить результат (пользовательский интерфейс в процессе создания) в окне вашего терминала VSCode.

4. Используйте Kafka в качестве потребителя, чтобы использовать новый документ (новостной контент) и добавить его в Elasticsearch.

Примечание. Запустите zooker и kafka локально.

Последовательно вызовите следующие команды в терминале VSCode

экспорт PYTHONPATH = "$ {PYTHONPATH}: app / src /"

приложение Python / SRC / document_consumer.py

Откройте другой терминал VSCode и вызовите ./add_new_document_sync.sh script

Это создаст новый контент и отправит его в поток kafka, который будет использован и добавлен в Elasticsearch.

Конец примечания

Теперь вы можете искать новостной контент по строке поиска или искать любой похожий новостной контент, который соответствует исходному новостному контенту (для рекомендации документа).

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

Большое спасибо всем авторам, опубликовавшим статьи / блоги по AI / ML / NLP. Без обмена знаниями создать эту статью было бы действительно сложно. Еще раз спасибо.

Вы можете найти весь исходный код здесь

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

Вы можете найти меня в LinkedIn