Использование пользовательских тегов для документов с метками в Gensim - PullRequest
1 голос
/ 19 февраля 2020

Я создаю Вектор документа в Gensim.

У меня есть собственный список тегов (называемый url), который я хочу использовать для TaggedDocument:

documents = [[TaggedDocument(doc, str(ur)) for ur in url] for doc in space]

Каждый пользовательский URL-адрес последовательность из 10 чисел.

Результат выглядит так:

[TaggedDocument(words=['googl', 'ibm', 'quantenrechnpentium', 'fdiv', 'bug', 'vierteljahrhundert', 
'intel', 'geld', 'technikquantencomput', 'computibm', 'googl', 'beweis', 
'quantum', 'supremacyforsch', 'natursycamor', 'qubit', 'groessenordn', 'supercomput', 'bauartibm', 
'algorithmus', 'rechn', 'quant', 'quantenrechn', 'werkzeug', 'rechenfehl', 'intel', 'erfahr', 
'professor', 'drthomas', 'fdiv', 'bug', 'intel', 'pentium', 'intel', 'fehl', 'austauschprogramm', 
'intel', 'sorgdesktop', 'pc', 'prozessor', 'ghz', 'cor', 'fertigungstechn', 'stromauflag', 'pc', 
'bauvorschlaeg', 'amd', 'ryzdesktop', 'schwaech', 'intel', 'geldquartal', 'rekordumsatz', 
'milliard', 'dollarmilliard', 'preis', 'geld', 'fertigungsanlag', 'servermarkt', 'ausblick', 'amd', 
'umsatz', 'jahresvergleich', 'anleg', 'ryz', 'epycs', 'ausblick', 'amd', 'erfolgmicrosoft', 'ryz', 
'kund', 'surfac', 'notebook', 'gruend', 'journalist', 'surfac', 'testgeraet', 'ryz', 'ryz', 
'vergleich', 'intel', 'cor', 'processor', 'conferenc', 'intel', 'atomkern', 'tremont', 
'mikroarchitektur', 'atom', 'prozessor', 'nanomet', 'fertigelkhart', 'lak', 'embedded', 'systemiot', 
'devic', 'skyhawk', 'lak', 'chips', 'nasatom', 'celeron', 'pentium', 'silv', 'tremont', 'goldmont', 
'plusceleron', 'tremont', 'cor', 'kern', 'lakefield', 'microsoft', 'surfac', 'neo', 'kombination', 
'cor', 'tremont', 'intel', 'atom', 'kern', 'cach', 'serv', 'tremont', 'risc', 'spezialist', 'sifiv', 
'kern', 'aussichtnanomet', 'chipsarm', 'cortex', 'raspberry', 'pi', 'rechenpowspannend', 'erweiter', 
'sichsogenannt', 'world', 'ids', 'trennung', 'welt', 'risc', 'socsprozess', 'cpu', 'kerncach', 
'zeil', 'ram', 'adressbereich', 'world', 'id', 'sicherheitslueck', 'spectr', 'art', 'schreck', 
'prozessor', 'markt', 'microsoft', 'sich', 'business', 'notebook', 'sogenannt', 'secured', 'cor', 
'pcs', 'massnahmstart', 'betriebssystem', 'notebook', 'bios', 'bios', 'windows', 'updat', 'uefi', 
'capsul', 'updattechnik', 'linuxsecured', 'cor', 'pcs', 'microsoft', 'angab', 'mobilrechn', 
'business', 'version', 'surfacuefi', 'bios', 'kern', 'microsoft', 'rahm', 'project', 'artikel'], tags='4577911')

Как видите, в конце поля tags с моим пользовательским номером.

После обучения модели:

model = Doc2Vec(docu, vector_size=5, window=2, min_count=2, dm =1)

Я выполняю запрос на сходство с невидимыми тестовыми документами:

rank = []
for line in test:
    tokens = line.split()

    new_vector = model.infer_vector(tokens)
    sims = model.docvecs.most_similar([new_vector])
    rank.append(sims)

Что дает это для первого документа:

[('8', 0.9214882850646973),('9', 0.919198751449585), 
('0', 0.9049716591835022), ('1', 0.9047936797142029), 
('6', 0.9028873443603516), ('2', 0.8913612365722656), 
('3', 0.8857095837593079), ('7', 0.8747860789299011), 
('5', 0.8512719869613647), ('4', 0.8370641469955444)]

Как видите, теги с индексом 0 каждого подсписка - это не пользовательские теги, а общие c числа.

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 20 февраля 2020

tags должен быть списком тегов, потому что Doc2Vec может изучать более одного тега на TaggedDocument (хотя это не обязательно хорошая идея).

Предоставляя tags='4577911', поскольку строки Python также являются списками символов, по сути, это то же самое, что и tags=['4', '5', '7', '7', '9', '1', '1'] - и на тренировке всегда показываются только 10 уникальных тегов модели, по одному для каждого di git, повторяется по всем текстам.

Поставьте взамен tags=['4577911'], и все должно работать как положено.

...