taxonomy/general 词分类的开源预训练模型

Open source pre-trained models for taxonomy/general word classification

给定任意两个词,我想了解是否存在某种 taxonomy/semantic 基于字段的关系。例如,给定“狗”和“猫”这两个词,我想要一个模型,它可以 return 个单词,其中“狗”和“猫”匹配,例如这个模型会 return 在这种情况下可以是“动物”、“哺乳动物”、“宠物”等。

是否有无需预先训练数据集即可开箱即用的开源预训练模型?

听起来 WordNet 很适合这项任务。 WordNet 是一个词汇数据库,它以分层树结构组织单词,就像分类法一样,并包含许多单词的附加语义信息。参见例如WordNet for "cat" here for a browser-based demo. A word that's one hierarchy level above another word is a so called 'hypernym'. The hypernym for cat is e.g. 'feline'. With WordNet in NLTK你可以得到两个词的上位词,直到你得到相同的上位词。

对于'cat'和'dog',常见的上位词是'animal'。请参阅此处的示例代码:

from nltk.corpus import wordnet as wn

wn.synsets('cat')
# output: [Synset('cat.n.01'), Synset('guy.n.01'), Synset('cat.n.03'), Synset('kat.n.01'),  Synset('cat-o'-nine-tails.n.01'), Synset('caterpillar.n.02'), ...]
wn.synset('cat.n.01').hypernyms()
# output: [Synset('feline.n.01')]
wn.synset('feline.n.01').hypernyms()
wn.synset('carnivore.n.01').hypernyms()
wn.synset('placental.n.01').hypernyms()
wn.synset('mammal.n.01').hypernyms()
wn.synset('vertebrate.n.01').hypernyms()
wn.synset('chordate.n.01').hypernyms()
# output: 'animal'

wn.synsets('dog')
# output: [Synset('dog.n.01'), Synset('frump.n.01'), Synset('dog.n.03'), Synset('cad.n.01'), Synset('pawl.n.01'), Synset('chase.v.01')]
wn.synset('dog.n.01').hypernyms()
wn.synset('domestic_animal.n.01').hypernyms()
# output: 'animal'

您在问题中要求 机器学习 解决方案。一种经典的方法是通过 Gensim 获得 词向量,但它们不会根据专家创建的数据库(如 WordNet)为您提供明确的共同类别,而只是给您训练数据中经常出现在目标词(“猫”、“狗”)旁边的词。我认为机器学习不一定是这里最好的工具。 参见示例:

import gensim.downloader as api

model_glove = api.load("glove-wiki-gigaword-100")

model_glove.most_similar(positive=["dog", "cat"], negative=None, topn=10)

# output: [('dogs', 0.7998143434524536),
 ('pet', 0.7550237774848938),
 ('puppy', 0.7239114046096802),
 ('rabbit', 0.7165164351463318),
 ('cats', 0.7114559412002563),
 ('monkey', 0.6967265605926514),
 ('horse', 0.6890867948532104),
 ('animal', 0.6713783740997314),
 ('mouse', 0.6644925475120544),
 ('boy', 0.6607726812362671)]