Эти модели не хранят свои тренировочные данные - они просто наблюдают их во время каждого из тренировочных проходов, чтобы построить свои векторные модели для каждого слова или документа.
Для Doc2Vec
векторов документов традиционно называют вектор документов с каким-то уникальным ключом к исходному документу, таким как идентификационный номер или имя файла. Так что для векторов документов тег, сообщенный с результатами, вероятно, уже содержит ключ, который вам нужен.
Для слов, когда вы хотите получить список всех документов, в которых появляется слово, используются два традиционных подхода:
сканирование методом перебора, как с командойлинейная программа grep
, где вы просматриваете каждое слово в каждом документе и возвращаете список документов, в которых появилось слово. Например, если у вас есть каталог с вашими файлами Name1Title1.txt
и т.д., команда grep -l -E '(^|\W)second(\W|$)' *.txt
напечатает эти файлы, содержащие слово second
. Конечно, это очень медленно на большом корпусе.
создание инвертированного индекса , какие документы содержат какие слова. Затем, после затрат на одно сканирование и создание / сохранение индекса, поиск списка документов для любого слова происходит очень быстро. Это основополагающий метод, позволяющий использовать полнотекстовые поисковые системы.
Простой инвертированный индекс занимает всего несколько строк Python:
from collections import defaultdict
docs = ( # tuples of doc-name, words
('Name1Title1.txt', "this is the first text. first text paragraph".split()),
('Name2Title2.txt', "this is the second text. second text paragraph".split()),
('Name3Title3.txt', "this is the thirth text. thirth text paragraph".split()),
)
inv_index = defaultdict(list)
for title, words in docs:
for word in set(words):
inv_index[word].append(title)
Затем список любых документов, в которых появилось слово, представляет собой простой поиск:
>>> inv_index['second']
['Name2Title2.txt']
>>> inv_index['this']
['Name1Title1.txt', 'Name2Title2.txt', 'Name3Title3.txt']
Инвертированные индексы могут быть довольно большими, и поэтому для компактности часто используются другие структуры данных, в том числе файловые индексы - поэтому, если ваш корпус большой, вам может потребоваться исследовать другие библиотеки для инвертированной индексации, чтобывозможность создать свой индекс и выполнять поиск на практике.