Вопрос или проблема
Моя задача заключается в том, чтобы предсказать релевантные слова на основе короткого описания идеи. Например, “SQL — это язык, специфичный для домена, используемый в программировании и предназначенный для управления данными, хранящимися в реляционной базе данных” должен привести к таким словам, как “mysql”, “Oracle”, “Sybase”, “Microsoft SQL Server” и т.д.
Я думаю, что можно рассматривать исходный текст как набор слов (после лемматизации и удаления стоп-слов) и предсказывать слова, которые должны входить в этот набор. Я могу затем взять все свои тексты (которых у меня много), удалить одно слово и обучиться его предсказывать.
Моя первоначальная мысль заключалась в том, чтобы использовать word2vec и находить слова, похожие на мой набор. Но это не очень хорошо работает, так как я не хочу похожие слова, а слова, которые используются вместе во многих предложениях, что и является задачей, на которой word2vec обучается для создания своих векторных представлений…
Как бы вы смоделировали эту проблему? Я не думаю, что RNN здесь актуальны, потому что я хочу использовать набор слов — они не имеют порядка, я не пытаюсь предсказать следующее слово никаким образом. Однако, я думаю, что размер набора может варьироваться…
Какую архитектуру нейронной сети вы бы использовали для этой задачи?
ОБНОВЛЕНИЕ:
Чтобы дополнительно объяснить назначение предсказателя и почему word2vec не подходит для меня:
Я обучил модель word2vec на своих данных (которые очень специфичны для домена, и у меня много данных на эту тему). Теперь моя проблема в том, что она выдает слова, которые похожи на те, что я ввел… и не те, которые могут быть в контексте.
Например: я ввожу “производитель компьютеров”, чтобы получить наиболее похожие слова, и получаю:
(u’equipment_manufacturer’, 0.7463390827178955),
(u’manufacture’, 0.7410058975219727),
(u’manufacturer_distributor’, 0.7196526527404785),
(u’distributor’, 0.6950951814651489),
(u’desktop_computer’, 0.6632821559906006)
Это термины с похожим значением…
Но я не ищу слова с похожим значением. Мне было бы интереснее получить “Dell”, например, в качестве результата. Другой пример — ассоциировать “Apple_inc” с информатикой, ОС, аппаратным обеспечением… — не похожие слова, а связанные…
Поэтому теперь я думаю о том, чтобы построить модель word2vec CBOW, но не просто использовать созданные векторные представления, а фактически использовать сеть для предсказания новых слов из контекста…
Эта проблема обычно называется мульти-меточной классификацией, она заключается в том, чтобы учиться предсказывать ноль или более текстовых меток для каждого экземпляра.
Архитектура многослойного перцептрона (MLP) могла бы подойти.
Ответ или решение
Для решения задачи предсказания релевантных слов на основе короткого описания идеи можно рассмотреть несколько подходов, которые могут обеспечить более точные результаты, чем использование метода word2vec. Давайте разберем это более подробно.
1. Понимание задачи
Имеется задача, где на вход подается описание, и требуется предсказать набор связанных слов. Это задача, которую можно отнести к классу многоразовых классификаций (multi-label classification), где для каждого текста нужно предсказать множество возможных меток.
2. Подходы к решению задачи
Следующие методы могут быть использованы для моделирования этой проблемы:
a. Модель на основе Embeddings
Разумным подходом будет использование предобученных эмбеддингов слов (например, GloVe, FastText) для получения векторного представления слов. Такие модели захватывают семантические связи между словами.
-
Предобработка данных: Примените лемматизацию и удалите стоп-слова, как вы уже упоминали. Это позволит сократить размер входного пространства и повысить качество вроде.
-
Создание векторных представлений: Создайте векторные представления для каждого описания, усредняя векторы слов. Вариант с использованием суммирования или усреднения поможет получить одно векторное представление для текста.
b. Нейронные сети
-
Многослойный перцептрон (MLP): Вы можете использовать архитектуру многослойного перцептрона для обработки входного вектора, полученного на предыдущем шаге. Входной слой будет принимать векторные представления, и выходной слой сможет выдавать вероятности для каждого из возможных связанных слов.
-
Классический подход: Обучите сеть предсказывать множество меток из входного текста. Для обучения можно использовать бинарные кросс-энтропийные функции потерь, чтобы оценить, присутствует ли момент в ответе или нет.
-
Циклическая структура и CBOW: Можно доработать подход с CBOW, чтобы он скрыто обучал предсказание слов на основе контекста фраз. Для этого необходимо модифицировать выход CBOW так, чтобы он предсказывал не просто следующее слово, а весь набор возможных слов, которые могут быть связаны с контекстом.
3. Будущие шаги
-
Сбор данных: Определите набор данных для обучения модели. Можно использовать существующую информацию о уже известных связанностях между терминами.
-
Проверка и настройка модели: Проведите несколько экспериментов с различными архитектурами и гиперпараметрами.
-
Оценка моделей: Используйте метрики, такие как F1-score или AUC для оценки качества модели на тестовой выборке.
4. Заключение
Используя эти рекомендации, вы сможете построить надежную модель для предсказания связанных слов на основе описаний. Помните, что задача требует итеративного подхода и тщательной настройки параметров модели.