微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

DeepLearning4J Doc2Vec 输入结构

如何解决DeepLearning4J Doc2Vec 输入结构

在这里看到的与 deeplearning4J 相关的问题不到 500 个问题,而且大多数年前,首先是一个不同的问题:DL4J 死了吗?我真的必须处理可怕的、可怕的 Python 来构建我的人工智能吗?我不想!

现在真正的问题,我觉得有点愚蠢,但实际上文档和谷歌搜索有点缺乏(见上面的问题):过去几天我一直在阅读关于使用 DL4J 构建一个简单的文档分类器的文章,这看起来很简单,虽然后续资料又少得吓人。

我构建了一个 ParagraphVector添加了一些标签,传入训练数据并进行训练。我还发现,数据是作为 LabelAwareIterator 传入的。使用文件结构,我什至通过 DL4J 找到了这个 documentation 如何构造数据。但是如果我想从 API 或类似的东西中读取数据而不是通过文件结构来读取数据呢?我猜我需要一个 LabelAwareDocumentIterator,但是数据应该如何结构化以及如何输入?我读过关于将结构化为文本表格和标签作为列的内容,但这似乎相当粗略且非常不精确。

非常感谢您的帮助,以及比我目前找到的更好的资源。谢谢!

--更新

通过阅读源代码(通常是检查实现的好主意),看起来我真正想要的是SimpleLabelAwareIterator。这段代码可读性很好。还不太明白 LabelAwareDocumentIterator 是干什么用的。无论如何,简单的只需要一个 LabelledDocuments 列表。 LabelledDocuments 只有一个字符串内容一个标签列表。到目前为止,今天晚上将尝试实施。如果成功,我会将其发布为答案。

解决方法

更新中的方法奏效了。我现在正在使用一个 SimpleLabelAwareIterator,我填充了一个 LabelledDocuments 列表。短代码示例:

    ArrayList<LabelledDocument> labelledDocumentList = new ArrayList<LabelledDocument>();

    for(Document input : documents){
      LabelledDocument doc = new LabelledDocument();
      doc.setContent(input.content);
      doc.addLabel(input.label);
      labelledDocumentList.add(doc);
    }
    
    SimpleLabelAwareIterator iter = new simpleLabelAwareIterator(labelledDocumentList);
    
    TokenizerFactory t = new UimaTokenizerFactory();
    ParagraphVectors vec = new ParagraphVectors.Builder()
                        .minWordFrequency(1)
                        .labels(Arrays.asList("A","B"))
                        .layerSize(100)
                        .stopWords(new ArrayList<String>())
                        .windowSize(5).iterate(iter).tokenizerFactory(t).build();
    
    vec.fit();
    tools.saveObject(vec,"models/modelName");

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。