Как вставить предложение в вектор
У меня было предложение. Я использую word2vec для встраивания слова в вектор. Например, представьте, что у меня есть предложение из 5 слов. Поэтому я получаю 5 разных векторов (по одному на каждое слово) для предложения. Какой метод является лучшим для создания полное предложение в виде одного вектора, который я передам в ANN?
3 ответа
Это открытая проблема; Существует много подходов к созданию значимых векторов предложений.
- Модели BoW, как объяснил Fabrizio_P
- Элементарные векторные операции ( http://www.aclweb.org/anthology/P/P08/P08-1028.pdf)
- Дополнение (т.е. просто сложите все слова вектор вместе, возможно, нормализуя потом)
- Умножение (т.е. умножение всех векторов по элементам, что приводит к логически обоснованному вложению)
- Произвольные рекуррентные функции для конкретных задач ( http://www.aclweb.org/anthology/D12-1110)
- Более сложные подходы общего назначения ( https://arxiv.org/abs/1508.02354, https://arxiv.org/abs/1506.06726)
Элементарные операции, такие как сложение векторов, достаточны для большинства простых задач, но, очевидно, демонстрируют большую потерю информации по мере того, как предложения увеличиваются или задача становится более требовательной. Рекуррентные нейронные сети довольно хороши для создания вложений предложений для конкретных задач, но, очевидно, они требуют обучающих данных и некоторого знания машинного обучения. Вложения предложений общего назначения являются наиболее интересными с точки зрения исследования, но, вероятно, не то, что вы ищете.
Вы можете использовать концепцию пакета слов, как описано здесь https://machinelearningmastery.com/gentle-introduction-bag-words-model/. Чтобы вы собрали все свои слова и поместили их в словарь. После этого вы можете представить свое предложение в виде вектора, где каждый элемент имеет значение 1 или 0, в зависимости от того, находится слово в предложении или нет. Например, если ваше предложение
Привет, меня зовут Питер.
Ваш словарь будет
[Привет, мой, зовут, Питер]
Вектор для вашего предложения будет
[1, 1, 1, 1, 1]
Если у вас есть другое предложение, как
Я счастлив.
Ваш словарь будет расширяться, включая и эти слова. Так будет
[Привет, меня зовут, Питер, я счастлив]
И ваше векторное предложение также будет расширяться
[1, 1, 1, 1, 1, 0, 0, 0]
В качестве альтернативы вы также можете создать словарь, в котором каждое слово представлено числом, так что
{Здравствуйте: 1, мой: 2, имя: 3, это: Петр: 4, я: 5, я: 6, счастлив: 7}
И вектор для вашего предложения будет
[1,2,3,4]
Для каждого нового предложения вы будете конвертировать слова в числа, используя словарь в качестве справочного материала.
word2vec - это алгоритм для встраивания слов, подробности вы можете прочитать здесь https://www.tensorflow.org/tutorials/word2vec
Вы можете запустить этот алгоритм в своем собственном наборе данных или использовать сохраненные вложения слов, которые Google (или другие стороны) использовали для миллиардов документов.
Идея состоит в том, чтобы отобразить каждое слово как плотный вектор в некотором n-мерном векторном пространстве, таким образом, содержащий гораздо больше информации о словах и их отношениях.
Проще говоря, каждое слово представлено уникальным списком чисел, и теперь возможны математические операции над словами, предложениями и документами.