косинусное сходство составляет 0,7 для точно таких же предложений

Косинусное сходство для двух одинаковых предложений равно 0,7. Моя модель doc2vec верна? Я использую набор данных пар вопросов quora, доступный в kaggle. В приведенном ниже коде train1 - это список первых вопросов, а train2 - список вторых вопросов.

docs = []
analyzedDocument = namedtuple('AnalyzedDocument', 'words tags')
for i in range(0,len(train1)):
    words1 = train1[i]
    words2 = train2[i]
    tags1 = [2*i]
    tags2 = [2*i+1]
    docs.append(analyzedDocument(words1, tags1))
    docs.append(analyzedDocument(words2, tags2))

emb="glove.6B.100d.txt"
model = doc2vec.Doc2Vec(docs, vector_size = 300, window = 10, min_count = 1,pretrained_emb=emb)

person Gautam Kumar    schedule 31.03.2018    source источник


Ответы (1)


Похоже, вы можете использовать gensim Doc2Vec, но изначально он не поддерживает аргумент pretrained_emb, а использование предварительно обученных встраиваний слов не обязательно является преимуществом для большинства приложений, особенно если у вас есть соответствующие учебные документы. Кроме того, вы обычно не сможете использовать 100-мерные словесные векторы откуда-то еще, чтобы помочь засеять 300-мерную Doc2Vec модель. (Я удивлен, что какой бы код вы ни использовали, это несоответствие не приводит к ошибке.)

Типичная опубликованная работа с использованием этого алгоритма («Вектор абзаца») использует 10, 20 или более обучающих проходов, но (опять же при условии, что вы используете gensim) вы оставили его со значением по умолчанию всего 5.

Понижение min_count до значения 1, отличного от значения по умолчанию, обычно ухудшает результаты, поскольку слова с таким небольшим количеством вхождений просто служат шумом, делая изученные векторы для других документов / слов менее согласованными.

Какие два предложения вы сравниваете и как?

Поскольку сам алгоритм использует рандомизированную инициализацию, а затем несколько форм случайной выборки во время обучения, а затем многопоточное обучение добавляет некоторую дополнительную рандомизацию порядка обработки текста, повторное выполнение Doc2Vec в одном и том же корпусе обычно не выполняется. получить идентичные результаты.

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

person gojomo    schedule 31.03.2018
comment
Спасибо за помощь. Да, я использую gensim. ** подскажите, как изменить количество тренировочных проходов? ** И я взял min_count как единое целое, потому что в нем есть некоторые релевантные слова, которые появляются только один раз, но они определяют все предложение. - person Gautam Kumar; 01.04.2018
comment
Параметр инициализации iter (или, возможно, в более поздних версиях epochs) контролирует количество проходов обучения: ‹radimrehurek.com/gensim/models/ ›. Слова, которые появляются только один раз, не получат хороших векторов слов или помогут создать хорошие векторы документов - алгоритму требуется несколько различных примеров, чтобы расположить векторы сбалансированным образом. Итак, если у вас есть тексты, содержащие одно слово, и это слово важно, min_count=1 даст вам вектор, но это будет очень плохо, и тренировка всех этих синглтонов ухудшит и другие ваши векторы. - person gojomo; 02.04.2018