Сопоставление представления абзаца doc2vec с тегом класса после обучения - PullRequest
0 голосов
/ 10 мая 2019

Я обучил встраиванию абзацев Doc2Vec в текстовые документы с помощью модуля Doc2Vec в пакете Python gensim. Обычно каждый документ помечается уникальным идентификатором, что дает уникальное выходное представление, как показано ниже (см. эту ссылку ):

def tag_docs(docs, col):
    tagged = docs.apply(lambda r: TaggedDocument(words=simple_preprocess(r[col]), tags=[r.label]), axis=1)
    return tagged

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

print(model.docvecs.count)

У меня следующий вопрос: я обучил модель классов документов n, получив n векторов документов в model.docvecs. Теперь я хочу отобразить каждый вектор документа на соответствующий тег класса. Как я могу установить, какой вектор связан с каким тегом?

1 Ответ

1 голос
/ 11 мая 2019

Если classA был одним из тегов документа, который вы указали во время обучения, то model.docvecs['classA'] вернет единственный вектор документа, который был извлечен для этого тега из обучения.

Если у вас есть другой новый вектор - например, один выведенный на новый текст через model.infer_vector(words), то вы можете получить список, из которых изученные векторы документа в модели наиболее близки через model.docvecs.most_similar(positive=[new_vector]).

Если ваша истинная цель - классифицировать новые документы в один (или несколько) из этих классов, то взятие наивысшего результата most_similar() является одним грубым способом сделать это.

Но если свести все классы к одному итоговому вектору (одному вектору, запомненному для этого тега), а затем взять только одного ближайшего соседа нового документа, это может не сработать. Это несколько заставляет предположить, что классы - это очень простые формы в n-мерном пространстве.

Для классификации вы можете разрешить всем документам получать отдельные векторы (не основанные на их известных классах или в дополнение к их известным классам), а затем обучить отдельный классификатор для этого набора (doc-vector, label) с меткой -данные. Это могло бы обнаружить более мелкозернистые и странные границы между классами.

...