сравнить документы, используя наиболее похожий метод - PullRequest
0 голосов
/ 01 октября 2018

Я могу построить модель, используя встроенный корпус lee_background.Но когда я пытаюсь сравнить, используя метод most_s Similar, я получаю сообщение об ошибке.

lee_train_file = '/opt/conda/lib/python3.6/site-packages/gensim/test/test_data/lee_background.cor'

train_corpus=list()
with open(lee_train_file) as f:
    for i, line in enumerate(f):
        train_corpus.append(gensim.models.doc2vec.TaggedDocument(gensim.utils.simple_preprocess(line), [i]))

model = gensim.models.doc2vec.Doc2Vec(vector_size=48, min_count=2, epochs=40)
model.build_vocab(train_corpus)
model.wv.vocab['penalty'].count
model.train(train_corpus, total_examples=model.corpus_count, epochs=model.epochs)

line="""
dummy text here...
"""

inferred_vector=model.infer_vector(gensim.utils.simple_preprocess(line) )

model.docvecs.most_similar(inferred_vector, topn=3)

Я пытался сделать это со списком (inferred_vector), но все равно получаю ошибку.

TypeError: 'numpy.float32 'объект не повторяется

Я пытаюсь сравнить фиктивный текст с корпусом и определить, существует ли уже запись в файле данных.


Обновить: Вместо списка (inferred_vector) мне нужно использовать [inferred_vector].Это решило мою проблему.Но когда я запускаю этот код, я получаю разные похожие документы.Как это возможно?

line="""
The national executive of the strife-torn Democrats last night appointed little-known West Australian senator Brian Greig 
as interim leader--a shock move likely to provoke further conflict between the party's senators and its organisation. 
In a move to reassert control over the party's seven senators, the national executive last night rejected Aden Ridgeway's 
bid to become interim leader, in favour of Senator John, a supporter of deposed leader Natasha Stott Despoja and an outspoken 
gay rights activist.
"""

inferred_vector=model.infer_vector(gensim.utils.simple_preprocess(line))

model.docvecs.most_similar([inferred_vector], topn=5)

Иногда я получаю этот список, и этот список постоянно меняется каждый раз, когда я запускаю код, даже если в модели нет изменений.

[(151, 0.5980586409568787),
 (74, 0.5736572742462158),
 (106, 0.5714541077613831),
 (249, 0.5695925951004028),
 (209, 0.5642371773719788)]

[(249, 0.5727256536483765),
 (151, 0.5725511312484741),
 (74, 0.5711895823478699),
 (106, 0.5583171248435974),
 (292, 0.5491517782211304)]

КакНа самом деле, первая строка в учебном корпусе на 99% похожа на эту строку, потому что изменилось только 1 слово.Удивительно, но document_id 1 нигде нет в списке 5 лучших.

1 Ответ

0 голосов
/ 01 октября 2018

Фиктивная линия должна быть выбрана из lee_background.cor, а не из lee.cor. Текст модели будет соответствовать учебному корпусу, а не тестовому.

...