Deeplearning4j中的Doc2Vec与段落向量
Doc2Vec的主要作用是在任意文档与标签之间建立联系,所以标签是必需的。Doc2Vec是Word2Vec的一项扩展,而Word2Vec的功能也是学习词与标签之间的关联,而非词与其他词之间的关联。Deeplearning4j中的Doc2Vec实现旨在服务Java、Scala和Clojure社区。
我们首先要获得表示一份文档的“意义”的向量,然后再将这个向量输入有监督的机器学习算法,确定与文档有关的标签。
在ParagraphVectors构建器模式中,labels()
方法指明了定型中涉及到的标签。以下的示例中给出了与情感分析相关的标签:
.labels(Arrays.asList("negative", "neutral","positive"))
以下是一个用段落向量进行分类的完整实用示例:
public void testDifferentLabels() throws Exception {
ClassPathResource resource = new ClassPathResource("/labeled");
File file = resource.getFile();
LabelAwareSentenceIterator iter = LabelAwareUimaSentenceIterator.createWithPath(file.getAbsolutePath());
TokenizerFactory t = new UimaTokenizerFactory();
ParagraphVectors vec = new ParagraphVectors.Builder()
.minWordFrequency(1).iterations(5).labels(Arrays.asList("negative", "neutral","positive"))
.layerSize(100)
.stopWords(new ArrayList<String>())
.windowSize(5).iterate(iter).tokenizerFactory(t).build();
vec.fit();
assertNotEquals(vec.lookupTable().vector("UNK"), vec.lookupTable().vector("negative"));
assertNotEquals(vec.lookupTable().vector("UNK"),vec.lookupTable().vector("positive"));
assertNotEquals(vec.lookupTable().vector("UNK"),vec.lookupTable().vector("neutral"));}