Gensim Doc2Vec Обучение

Я использую gensim для обучения модели Doc2Vec на документах, назначенных конкретным людям. Есть 10 миллионов документов и 8000 человек. Меня не волнуют все 8000 человек. Я забочусь о конкретной группе людей (скажем, от 1 до 500).

Люди, которые мне интересны, могут меняться изо дня в день, но мне никогда не нужно будет смотреть на всю совокупность. Конечная цель - получить результирующие векторы людей, которые мне интересны. В настоящее время я тренирую модель каждый раз на документах, назначенных конкретным людям.

Следует ли обучать модель на всех 10 миллионах документов? Или мне следует обучать модель только на документах, назначенных интересующим меня людям? Если важно обучить его на всех 10 миллионах документов, как мне получить векторы только для людей, которые меня интересуют?


person OverflowingTheGlass    schedule 23.02.2018    source источник
comment
Это полностью зависит от того, что вы хотите делать с этими векторами. Вы хотите предсказать человека по вектору?   -  person vumaasha    schedule 23.02.2018
comment
нет, я просто хочу взять векторы указанных людей и скормить их TensorBoard, чтобы сделать визуализацию высокой размерности и посмотреть расстояния между векторами (т.е. естественные кластеры)   -  person OverflowingTheGlass    schedule 23.02.2018
comment
вам нужен один вектор для одного человека или один вектор для документа   -  person vumaasha    schedule 23.02.2018
comment
один вектор на документ. Скажем, у меня есть 10 человек, на которых я хочу взглянуть в определенный день, и у них есть в совокупности 20 000 документов. Мне нужно 20 000 векторов, которые затем будут загружены в TensorBoard и отфильтрованы во внешнем интерфейсе, поэтому я смотрю только на векторы для конкретного человека.   -  person OverflowingTheGlass    schedule 23.02.2018


Ответы (1)


Хорошая идея - потренироваться на всех 10 миллионах документов, которые помогут вам уловить общую суть слов, а не только в контексте интересующих вас авторов. Кроме того, это поможет вам, если набор Авторы, которые вам интересны, завтра изменятся.

Если вы считаете, что Doc2Vec занимает много времени, вы также можете использовать Fasttext, чтобы изучить WordEmbeddings и использовать простое среднее значение или TF -IDF средневзвешенное значение векторов слов для построения вашего DocumentVector. Вы можете использовать мощь иерархического softmax (функции потерь) в Fasttext, что сократит время обучения более чем в 1000 раз.

person vumaasha    schedule 23.02.2018
comment
как мне тогда получить векторы интересующих меня авторов? вывести векторы? или есть способ просто извлечь уже созданные векторы? кроме того, использование метода fasttext не обеспечит такой же тип вектора фиксированной размерности, верно? - person OverflowingTheGlass; 23.02.2018
comment
Получите документ, соответствующий автору, токенизируйте, найдите предварительно обученные векторы слов, усредните векторы всех слов в документе - person vumaasha; 23.02.2018
comment
если вы используете Doc2Vec, вы должны получить один вектор для каждого документа напрямую. используя идентификатор документа, вы можете найти автора - person vumaasha; 23.02.2018
comment
правильно, поэтому обучение на 10M документах дает 10M векторов, по одному для каждого документа. я знаю, как получить доступ к вектору по его индексу: model.docvecs.vectors_docs[i] или получить доступ ко всем векторам model.docvecs.vectors_docs. но как мне получить доступ к векторам для данного автора? или набор заданных авторов? - person OverflowingTheGlass; 23.02.2018
comment
если меня интересует только конкретная группа авторов, есть ли какие-либо недостатки в обучении только этой группе (помимо раздражения, связанного с переобучением каждый раз, когда мой набор авторов меняется)? интуитивно кажется, что было бы хорошо знать суть слов только в контексте набора авторов, если меня интересует только этот набор авторов. - person OverflowingTheGlass; 23.02.2018
comment
вам необходимо вести отдельный указатель от документа к автору, например document_id, author_id. Вы готовите это при подготовке данных для обучения. используйте это, чтобы отфильтровать нужные вам документы - person vumaasha; 23.02.2018
comment
Если вы тренируетесь только с группой документов, вы не улавливаете общую суть слов за пределами этих авторов. Некоторые слова могут не получить хорошего представления, поскольку частота их встречаемости будет сравнительно меньше. - person vumaasha; 23.02.2018
comment
это имеет смысл - большое спасибо за вашу помощь! отметив свой ответ как правильный. знаете ли вы о каких-либо ресурсах, касающихся создания отдельного индекса, чтобы легко запрашивать обученные векторы? - person OverflowingTheGlass; 23.02.2018
comment
нормальный индекс btree в любых rdbms должен быть достаточно хорош, чтобы поддерживать документ, индекс автора - person vumaasha; 23.02.2018
comment
ах - так что векторы, выдаваемые doc2vec, гарантированно находятся в том же порядке, в котором они идут? - person OverflowingTheGlass; 23.02.2018
comment
Я не уверен в вашем последнем вопросе. Я не играл с gensim. Попробуйте эту ссылку, хотя stackoverflow.com/questions/ 31321209 / - person vumaasha; 23.02.2018