BACKGROUND
我有一些带有一些样本数据的向量,每个向量都有一个类别名称(地点,颜色,名称) .
['john','jay','dan','nathan','bob'] -> 'Names'
['yellow', 'red','green'] -> 'Colors'
['tokyo','bejing','washington','mumbai'] -> 'Places'
我的目标是训练一个模型,该模型采用新的输入字符串并预测它属于哪个类别 . 例如,如果新输入是“紫色”,那么我应该能够将“颜色”预测为正确的类别 . 如果新输入是“卡尔加里”,则应将“地点”预测为正确的类别 .
APPROACH
我做了一些研究,遇到了Word2vec . 这个库有一个"similarity"和"mostsimilarity"函数,我可以使用它 . 所以我想到的一种蛮力方法如下:
-
接受新的输入 .
-
计算每个向量中每个单词的相似度并取平均值 .
因此,例如对于输入“粉红色”,我可以计算其与向量“名称”中的单词的相似性取平均值,然后对其他2个向量也执行此操作 . 给出最高相似度平均值的向量将是输入所属的正确向量 .
ISSUE
鉴于我在NLP和机器学习方面的知识有限,我不确定这是否是最好的方法,因此我正在寻找有关解决问题的更好方法的帮助和建议 . 我对所有建议持开放态度,并请指出我可能因为我是机器学习和NLP世界的新手而犯的任何错误 .
2 回答
如果您正在寻找最简单/最快速的解决方案,那么我建议您采用预先训练好的单词嵌入(Word2Vec或GloVe),并在其上构建一个简单的查询系统 . 这些向量已经在一个庞大的语料库中进行了训练,并且可能包含对您的域数据足够好的近似值 .
以下是我的解决方案:
要运行它,您必须从here(小心,800Mb!)下载并解压缩预训练的GloVe数据 . 在运行时,它应该产生这样的东西:
......看起来很合理 . 并且's it! If you don't需要这么大的模型,你可以根据他们的tf-idf得分过滤
glove
中的单词 . 请记住,模型大小仅取决于您拥有的数据和您可能希望查询的单词 .此外,它的 Value ,PyTorch这些天有一个好的和更快的手套 .