【问题标题】:Using custom Tags for Tagged Documents in Gensim在 Gensim 中为标记文档使用自定义标签
【发布时间】:2020-02-19 16:51:58
【问题描述】:

我正在 Gensim 中构建文档向量。

我有一个要用于 TaggedDocument 的自定义标签列表(称为 url):

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

每个自定义网址都是由 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 处的标签不是自定义标签,而是通用数字。

我在这里做错了什么?

【问题讨论】:

    标签: python gensim doc2vec


    【解决方案1】:

    tags 应该是一个标签列表,因为Doc2Vec 可以每个TaggedDocument 学习多个标签(尽管这不一定是个好主意)。

    通过提供tags='4577911',因为 Python 字符串也是字符列表,所以它与tags=['4', '5', '7', '7', '9', '1', '1'] 本质上相同——并且训练只显示模型 10 个唯一标签,每个数字一个,在所有标签中重复文本。

    改为提供tags=['4577911'],它应该可以按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-13
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多