Итак, я только начинаю изучать, как нейронная сеть может работать для распознавания шаблонов и категоризации входных данных, и я видела, как искусственная нейронная сеть может анализировать данные изображений и классифицировать изображения ( демонстрация с convnetjs ), и ключ к этому является уменьшение изображения, и каждый пиксель стимулирует один входной нейрон в сеть.
Тем не менее, я пытаюсь обернуть голову вокруг, если это возможно сделать с помощью строковых входов? У меня есть сценарий использования «рекомендательного механизма» для фильмов, которые просмотрел пользователь. Фильмы содержат много строковых данных (заголовок, сюжет, теги), и я мог бы представить, что текст будет сокращен до нескольких ключевых слов, которые описывают этот фильм, но даже если я проанализирую пять лучших слов, которые описывают этот фильм, я думаете, мне нужны входные нейроны для каждого английского слова, чтобы сравнить набор фильмов? Я мог бы ограничить входные нейроны только словами, используемыми в наборе, но мог ли он расти / учиться, добавляя новые фильмы (пользователь смотрит новый фильм с новыми словами)? Большинство библиотек, которые я видел, не позволяют добавлять новые нейроны после обучения системы?
Существует ли стандартный способ сопоставления данных строки / слова / символа со входами в нейронную сеть? Или нейронная сеть на самом деле не является подходящим инструментом для разбора строковых данных, подобных этому (что является лучшим инструментом для сопоставления с образцом в строковых данных)?
источник
Оба ответа от @Emre и @Madison могут дать хорошее представление об этой проблеме. Проблема в том, что вы представляете вашу строку в виде векторного элемента для ввода в NN.
Во-первых, проблема зависит от размера строки, которую вы хотите обработать. В этой настройке длинные строки, содержащие маркеры май (обычно слова), часто называют документами. Существуют отдельные методы для работы с отдельными токенами / словами.
Существует несколько способов представления документов. Многие из них делают предположение о сумме слов . Простейшие типы представляют документ в виде вектора количества слов или частоты слова (tf). Чтобы устранить влияние длины документа, обычно люди предпочитают нормализовать количество документов, в которых отображается термин, частоту документов ( tf-idf ).
Другой подход - тематическое моделирование, которое изучает скрытое низкоразмерное представление данных. LDA и LSI / LSA являются типичными вариантами, но важно помнить, что это без присмотра. Изученное представление не обязательно будет идеальным для обучения под присмотром, которое вы проводите со своим NN. Если вы хотите заниматься тематическим моделированием, вы также можете попробовать контролируемые тематические модели .
Для отдельных слов вы можете использовать word2vec , который использует NN для встраивания слов в пространство произвольного размера. Сходство между двумя векторами слов в этом изученном пространстве имеет тенденцию соответствовать семантическому сходству.
Более новаторским подходом является подход к векторам абзацев , который сначала изучает слово-подобную словесную модель, а затем опирается на это представление для изучения распределенного представления наборов слов (документов любого размера). Это показало самые современные результаты во многих приложениях.
При использовании NN в NLP люди часто используют разные архитектуры, такие как рекуррентные нейронные сети (например, сети с кратковременной памятью ). В некоторых случаях люди даже использовали сверточные нейронные сети в тексте.
источник
Это не проблема нейронных сетей как таковых, а представление текстовых данных в машинном обучении. Вы можете представлять фильмы, актеры и темы как категориальные переменные. Сюжет более сложный; вам, вероятно, понадобится тематическая модель для этого, но я бы оставил это, пока вы не освоитесь. Это делает именно ту текстовую «понижающую выборку», которую вы упомянули.
Взгляните на этот учебник, чтобы узнать, как кодировать категориальные переменные для нейронных сетей. И удачи!
источник
Я попробовал следующие 2 способа для пробной n-test реализации нейронных сетей с текстом. Последний работает довольно хорошо, но с ограничениями.
Создайте словарь с помощью токенов word2vect или NLTK / custom word и назначьте индекс каждому слову. Именно этот индекс представляет слово как число.
проблемы:
Использовать единичную матрицу, например, для «n» слов. Использовать «nx n» или (n-1 x n-1) матрицу, где каждая строка и столбец представляет слово. Поместите «1» в ячейку пересечения и «0» в местах отдыха. ( ссылка )
проблемы:
источник