DeepLearning4J Doc2Vec 输入结构

DeepLearning4J Doc2Vec input structure

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

现在是真正的问题,我觉得有点愚蠢,但确实有点缺乏文档和谷歌搜索(见上面的问题):过去几天我一直在阅读有关使用 DL4J 构建简单文档分类器的文章,这看起来很简单, 尽管后续 material 再次稀疏得吓人。

我构建了一个ParagraphVector,添加一些标签,传入训练数据并进行训练。我还想通了,数据是作为 LabelAwareIterator 传入的。使用文件结构我什至发现了这个 documentation by DL4J how to structure the data. But what if I want to read the data from say an API or similar and not through file structuring? I am guessing I need a LabelAwareDocumentIterator,但是数据应该如何构建以及如何将其输入?我读到有关将文本结构化为 table 并将标签作为列的结构,但这似乎相当粗略且非常不精确。

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

--更新

通过阅读源代码(通常只检查实现是个好主意),看起来我真正想要的是 SimpleLabelAwareIterator。该代码可读性很好。还没有真正理解 LabelAwareDocumentIterator 的用途。无论如何,简单的只需要一个 LabelledDocuments 的列表。 LabelledDocuments 只有一个字符串内容和一个标签列表。到目前为止一切顺利,今晚将尝试实施。如果成功了,我会post这个作为答案。

更新中的方法成功了。我现在正在使用一个 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");