Категоризация предложения часто является интересным вариантом использования, особенно в случае классификации документов. Категоризация предложений, идентификация категории/проблемы, сходство слова/предложения — все эти термины тесно связаны с классификацией документов. Двигаясь вперед, текущий блог проливает свет на концентратор tensorflow, библиотеку, предоставленную Google для многократно используемых моделей машинного обучения, и на то, как ее можно использовать для категоризации предложений. Концентратор Tensorflow позволяет нам публиковать, находить и повторно использовать модели машинного обучения в tensorflow. Для тех, кто хочет использовать хорошо обученную модель в своих проектах, пропуская обучающую часть, концентратор tensorflow предоставляет простой интерфейс для изучения моделей, обученных на огромных наборах данных и графических процессорах. Существует множество популярных моделей для категорий текста, изображений и видео, таких как начальные модели imagenet, мобильные сети, elmo, универсальный кодировщик предложений и т. д. (https://tfhub.dev/). Более подробную информацию о tensorflow hub можно найти в следующем посте от Josh Gordan: (https://medium.com/tensorflow/introduction-tensorflow-hub-a-library-for-reusable-machine-learning-modules- in-tensorflow-cdee41fa18f9).

На данный момент мы будем использовать модель кодировщика предложений elmo, языковую модель, обученную на контрольных данных из 1 миллиарда слов из текстового раздела концентратора tensorflow, и мы попытаемся разделить данное предложение на несколько категорий. . Для начала нам нужно установить библиотеки numpy, tensorflow и tensorflow_hub (https://www.tensorflow.org/hub).

import tensorflow as tf
import tensorflow_hub as hub
import numpy as np

Затем, чтобы использовать одну из моделей из tensorflow hub, нам нужно получить модель с помощью библиотеки tensorflow_hub. По умолчанию библиотека кэширует модель во временную папку в нашей системе при первой загрузке модели. Мы можем переопределить это поведение и сохранить модель на локальный диск, установив переменную среды TFHUB_CACHE_DIR (https://www.tensorflow.org/hub/basics). Это помогло бы нам не загружать модель каждый раз при очистке кеша или временной папки.

# for the first time, the model is accessed through the url..
elmo = hub.Module("https://tfhub.dev/google/elmo/2")
# once the model is saved to the local disk, it's path can be used..
# elmo = hub.Module("path_to_the_locally_saved_model") 

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

categs = ['crime','technology','relationships']
sent1 = "A person bought a mobile phone recently"
categorize(sent1, categs)

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

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

Использованная литература: