Как уменьшить размер вложения документа? - PullRequest
0 голосов
/ 21 декабря 2018

Давайте предположим, что у меня есть набор вложений документов.(D) Каждый из документов встраивания состоит из N числа векторов слов, где каждый из этих предварительно обученных векторов имеет 300 измерений.

Корпус будет представлен как [D, N, 300].

Мой вопрос таков: как лучше всего сократить [D, N, 300] до [D, 1, 300].Как мне представить документ в одном векторе вместо N векторов?

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 21 декабря 2018

Довольно часто и довольно (возможно, на удивление) эффективно просто усреднять векторы слов.

0 голосов
/ 22 декабря 2018

Хороший вопрос, но все ответы приведут к некоторой потере информации.Лучший способ для вас - использовать слой Bi-LSTM / GRU и предоставить встраивание слов в качестве входных данных для этого слоя.И возьмите вывод последнего временного шага.

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

Обратите внимание, что чем больше документ, тем больше потеря информации.

0 голосов
/ 21 декабря 2018

Я бы сказал, что вы ищете doc2vec .Используя это, вы можете конвертировать весь документ в один 300-мерный вектор.Вы можете использовать его следующим образом:

from gensim.test.utils import common_texts
from gensim.models.doc2vec import Doc2Vec, TaggedDocument

documents = [TaggedDocument(doc, [i]) for i, doc in enumerate(your_documents)]
model = Doc2Vec(documents, vector_size=300, window=2, min_count=1, workers=4)

Это позволит обучить модель вашим данным, и вы сможете представить каждый документ только с одним вектором, как вы указали в вопросе.

Вы можете запустить вывод с помощью:

vector = model.infer_vector(doc_words)

Надеюсь, это полезно:)

...