Невозможно выровнять график, поскольку несколько тегов doc2vec возвращают больше элементов в doctag_syn0, чем в обучающих данных - PullRequest
0 голосов
/ 08 октября 2018

Я обучаю модель doc2vec нескольким тэгам, поэтому она включает в себя типичный тэг doc "ID", а затем также содержит тэг метки "Категория 1".Я пытаюсь отобразить результаты так, чтобы я получил распределение документов в 2d (используя LargeVis), но я могу покрасить различные теги.Моя проблема в том, что векторы, возвращаемые моделью, превышают количество обучающих наблюдений на 5, что затрудняет выравнивание исходных тегов с векторами:

In[1]: data.shape 
Out[1]: (17717,5)

Обучение модели по 100 параметрам

In[2]: model.docvecs.doctag_syn0.shape
Out[2]: (17722,100) 

Я понятия не имею, сдвигают ли 5 ​​дополнительных наблюдений порядок векторов или они просто добавляются в конец.Я хочу избежать использования строковых тегов для идентификаторов документов, потому что я готовлю этот код для использования в гораздо большем наборе данных.Я нашел объяснение в группе Google https://groups.google.com/forum/#!topic/gensim/OdvQkwuADl0, в котором объясняется, что использование нескольких тегов для одного документа может привести к такому выводу.Тем не менее, я не смог найти способ избежать или исправить это ни на одном форуме или в документации.

1 Ответ

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

Количество выученных doc-векторов будет равно количеству предоставленных вами уникальных тегов.Похоже, вы указали 17 717 уникальных идентификаторов, а затем 5 дополнительных повторяющихся тегов категорий.Таким образом, всего известно 17 722 тега документа (и, соответственно, соответствующих изученных вектора документа).Итак, это ожидаемое поведение.

Если вам нужно передать только 17 717 векторов для документа в какой-то другой процесс (например, уменьшение размерности до 2-го), вам придется вытянуть их из модели.Вы можете вытащить их 1 на 1 - model.docvecs[doc_id] - и поместить в любую форму, необходимую для следующего шага.

Если ваши doc-идентификаторы были обычными целыми числами от 0 до 17 716, то они фактически будут первыми 17 716 записями в массиве model.docvecs.doctag_syn0, что может упростить ситуацию - вы можете простовозможность использовать вид в этот массив.(Последние пять строк будут строковыми тегами.)

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

...