Вложения слов с несколькими категориальными функциями для одного слова - PullRequest
0 голосов
/ 08 октября 2019

Я ищу способ реализации сети встраивания слов со слоями LSTM в Pytorch, чтобы входные данные для слоя nn.Embedding имели другую форму, чем векторы идентификаторов слов.

Каждое слово в моемcase имеет соответствующий вектор, и, следовательно, предложение в моем корпусе является вектором векторов. Так, например, у меня может быть слово «король» с вектором [500, 3, 18], где 500 - это идентификатор слова, 3 - это цвет слова, 18 - размер шрифта и т. Д. Роль слоя внедрения здесьсделать автоматическое уменьшение / извлечение объектов.

Как я могу заполнить слой внедрения такими данными формы? Или у вас есть предложения получше?

1 Ответ

0 голосов
/ 08 октября 2019

Я не уверен, что вы подразумеваете под алгоритмом word2vec с LSTM, потому что оригинальный алгоритм word2vec не использует LSTM и использует непосредственное вложение для прогнозирования окружающих слов.

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

  1. Вы можете создавать новые идентификаторы для всех возможных комбинаций ваших функций и использовать для них nn.Embedding. Однако существует риск, что большинство идентификаторов появятся слишком редко в данных, чтобы узнать надежные вложения.

  2. Имеют отдельное вложение для каждой из функций. Затем вам нужно будет объединить вложения для функций вместе. У вас есть в основном три варианта, как это сделать:

    • Просто объедините вложения и разрешите следующие слои сети для разрешения комбинации.
    • Выберите одно и то же измерение вложения для всех объектови усреднить их. (Я бы начал с этого, вероятно.)
    • Добавьте слой nn.Dense (или два, первый с активацией ReLU, а второй без активации), который явно объединит вложения для ваших функций.

Если вам нужно включить непрерывные объекты, которые не могут быть дискретизированы, вы всегда можете взять непрерывные объекты, нанести один или два слоя поверх них и объединить их с вложениями объектов. дискретные особенности.

...