如何解决开源的预分类/通用词分类训练模型
给出我想了解的是否存在基于分类法/语义字段的某种关系的任何两个词。例如,给定单词“ Dog”和“ Cat”,我希望有一个模型可以返回“ Dog”和“ Cat”匹配的单词,例如,该模型在这种情况下将返回的某些单词可以是“动物”,“哺乳动物”,“宠物”等。
是否有一个开放源代码的预训练模型,可以在不需要训练数据集的情况下立即进行操作?
解决方法
WordNet 之类的声音非常适合此任务。 WordNet是一个词法数据库,以分类树(如分类法)的形式组织单词,并包含许多单词的附加语义信息。参见例如WordNet for "cat" here用于基于浏览器的演示。一个单词在另一个单词之上的一个层次结构级别的单词被称为“ hypernym”。猫的上位词是“猫”。使用WordNet in NLTK,您可以获得两个单词的上位词,直到获得相同的上位词。
对于“猫”和“狗”,常见的上个字母是“动物”。在此处查看示例代码:
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)]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。