Как получить доступ к деталям документа из оценок подобия Doc2Vec в модели gensim?

Мне дали модель doc2vec с использованием gensim, которая была обучена на 20 миллионах документов. 20 миллионов документов, которые он обучил, также переданы мне, но я не знаю, как и в каком порядке документы были обучены из папки. Я должен использовать тестовые данные, чтобы найти 10 лучших совпадений из обучающей выборки. Код, который я использую, -

model = gensim.models.doc2vec.Doc2Vec.load("doc2vec_sample.model")

test_docs=["This is the test set I want to test on."]

def read_corpus(documents, tokens_only=False):
    count=0
    count=count+1
    for line in documents:
        if tokens_only:
            yield gensim.utils.simple_preprocess(line)
        else:
            # For training data, add tags
            yield gensim.models.doc2vec.TaggedDocument(gensim.utils.simple_preprocess(line), [count])


test_corpus = list(read_corpus(test_docs, tokens_only=True))

doc_id=0

inferred_vector = model.infer_vector(test_corpus[doc_id])
maxx=10
sims = model.docvecs.most_similar([inferred_vector], topn=maxx)

for match in sims:
    print match

`На выходе я получаю -

(1913, 0.4589531719684601)
(3250, 0.4300411343574524)
(1741, 0.42669129371643066)
(1, 0.4023148715496063)
(1740, 0.3929900527000427)
(1509, 0.39229822158813477)
(3189, 0.387174129486084)
(3145, 0.3842133581638336)
(1707, 0.3813004493713379)
(3200, 0.3754497170448303)

Как мне узнать, к какому документу относится документ с идентификатором «1913»? Как я могу получить доступ к документам обученного набора данных из этих 10 идентификаторов вакансий?


person User54211    schedule 20.11.2017    source источник
comment
documents[i], не так ли?   -  person cs95    schedule 20.11.2017
comment
Документы [i] будут относиться к учебному документу, мне нужны данные в тестовом документе.   -  person User54211    schedule 20.11.2017
comment
@ User54211 застрял в той же проблеме. Нашли какое-нибудь решение ..?   -  person Quamber Ali    schedule 21.11.2017
comment
@ NSQuamber.java застрял в той же проблеме. Единственное решение, которое я нашел, заключалось в том, что при создании обучающего набора каждый документ в одной и той же последовательности будет иметь здесь один и тот же идентификатор, однако в моем случае это не помогает, поскольку я понятия не имею, как было проведено обучение.   -  person User54211    schedule 22.11.2017


Ответы (2)


Наилучший подход - спросить человека, обучавшего модель, как он присваивает документам идентификаторы («теги» на языке Doc2Vec).

Если это недоступно, просмотрите учебный корпус, чтобы увидеть, есть ли какое-либо естественное именование или порядок, применимый к документам. (Они по одному на файл? Тогда, возможно, имена файлов в отсортированном порядке сопоставляются с возрастающими идентификаторами. Является ли каждый документ строкой в ​​одном файле? Тогда, возможно, номер строки является идентификатором-тегом.

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

Вы могли бы сделать это специальным образом - вам нравятся результаты или случайные проверки документов запроса?

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

Но на самом деле, если модель настолько плохо документирована, что вы не можете сопоставить документы с идентификаторами, а исходный человек недоступен, вы можете выбросить его и повторно обучить документ с помощью более документированных процедур.

person gojomo    schedule 22.11.2017

Просто распечатайте документы в виде списка и запросите список из 20 миллионов. Конечно, вы не хотите печатать (документы) и выводить на экран 20 миллионов векторов. Может оказаться более эффективным вставлять список из документов в таблицу базы данных. Когда вы печатаете вектор документов (например, train_corpus из учебника gensim doc2vec), результатом является список в следующем формате: [TaggedDocument (words = ['token1', 'token2', ..., 'tokenn'], tags = [номер документа]). Вы можете запросить этот результат, чтобы найти 1913-й документ в списке.

person Vera    schedule 20.04.2018