使用Amazon Sagemaker / blazingtext模型基于单词向量的反向查找单词

时间:2018-10-12 00:49:57

标签: amazon-sagemaker

在使用blazingtext算法训练了部署模型之后...直接获得给定单词的单词向量。

如本例中所示– https://github.com/awslabs/amazon-sagemaker-examples/tree/master/introduction_to_amazon_algorithms/blazingtext_word2vec_subwords_text8

我们可以使用给定单词作为有效载荷数据调用sagemaker.RealTimePredictor.predict函数,它将返回单词vector

现在,我希望能够实现一些基本的NLP用例,例如...建议一个类似的词,或者Man-Woman + King = Queen

(有关使用gensim的其他实现,请参见https://rare-technologies.com/word2vec-tutorial/

要做到这一点,我需要能够调用一个将向量作为输入并从嵌入中返回匹配/最近的单词的函数。

使用sagemaker sdk甚至可能吗?我花了几个小时浏览sagemaker api文档(不容易找到或浏览),但我仍然不确定这是否可能

3 个答案:

答案 0 :(得分:1)

您可以在实例上安装fasttext。然后在blazingtext模型创建的.bin文件中使用nn函数。例如:

fasttext nn SageMaker/vectors.bin

有关更多信息,请参见here

答案 1 :(得分:0)

目前,SageMaker BlazingText不支持此功能。但是,SageMaker支持有用的K-NN算法(K最近邻)。您可以使用BlazingText构建单词向量,然后使用这些向量作为特征来训练K-NN分类器。这将为您提供所需的功能。 附言我是SageMaker上BlazingText算法的开发人员之一。

答案 2 :(得分:0)

我发现最简单的方法是导入gensim模块并从blazingtext生成的模型工件中加载vectors.txt

通过这种方式,您甚至不需要创建推理端点-您只需使用笔记本实例来处理训练有素的模型

router.put('/:id', function(req, res, next) {
  Products.findByIdAndUpdate(req.params.id, req.body, function (err, post) {
    if (err) return next(err);
    res.json(post);
  });
});

到目前为止,我遇到的唯一限制是,如果您使用“ subwords = True”训练了模型,期望获得子词或拼写错误的词的词向量,则gensim模型似乎无法返回词向量词汇外(OOV)单词