Как получить предложение / текстовое сходство нового корпуса из модели WIKI-doc2vec? - PullRequest
1 голос
/ 10 июля 2019

Я сейчас работаю над проектом НЛП. Одна задача - сравнить, насколько похожи две новостные статьи / заголовки

Для этого я уже натренировал модель doc2vec, используя статьи из английской википейды о библиотеке gensim. Теперь я хочу сравнить сходство нового текста, выведя векторы из модели wiki doc2vec. Один из методов, который я попробовал, - это функция gensim docvecs 'Similarity_unseen_docs'. Тем не менее, результат не очень интуитивно понятен. Могу ли я узнать, есть ли другой способ получить оценку сходства с лучшей производительностью? Или, может быть, какая-то часть кода неверна?

Обучение модели doc2vec:

models = Doc2Vec(dm=1, dm_mean=1, vector_size=300, window=5, min_count=20, epochs =10, sample=0.001, negative=5, workers=cores)

Сравнение сходства:

arg1='China is  the leader in manufacturing electric vehicle'
arg2='The biggest electric car producer is China'

model.docvecs.similarity_unseen_docs(model=wikimodel, doc_words1=tokenize_text(arg1), 
                                         doc_words2=tokenize_text(arg2), alpha=0.025, min_alpha=0.0001, steps=50)

Оценка сходства результатов составляет всего ~ 0,25, что не очень хорошо.

Вот код для обучения:

from gensim.corpora.wikicorpus import WikiCorpus
from gensim.models.doc2vec import Doc2Vec, TaggedDocument
from gensim.models import KeyedVectors
from pprint import pprint
import multiprocessing

#read the wiki corpus
wiki = WikiCorpus("trend_analysis/enwiki-latest-pages-articles.xml.bz2")

#define the class to convert wikicorpus into suitable form to train Doc2vec
class TaggedWikiDocument(object):
    def __init__(self, wiki):
        self.wiki = wiki
        self.wiki.metadata = True
    def __iter__(self):
        for content, (page_id, title) in self.wiki.get_texts():
            yield TaggedDocument([c for c in content], [title])

documents = TaggedWikiDocument(wiki)


cores = multiprocessing.cpu_count()

#initialize a model and choose training method. (we use DM here)
models = Doc2Vec(dm=1, dm_mean=1, vector_size=300, window=5, min_count=20, epochs =10, sample=0.001, negative=5, workers=cores)

#building vocab for the model
models.build_vocab(documents)

#train the Doc2vec model
models.train(documents,total_examples=models.corpus_count, epochs=1)

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

...