如何用单词解释 doc2vec 分类器?

How to interpret doc2vec classifier in terms of words?

我在 gensim 中训练了一个 doc2vec (PV-DM) 模型,其文档分为几个 classes。我在一个非语言环境中工作,出于实际原因,文档数量和唯一单词的数量都很小(~100 个文档,~100 个单词)。每个文档可能有 10k 个标记。我的目表示 class.

与在另一个统计数据上相比,我在嵌入上训练的(交叉验证)classifier 表现良好,但我仍然不确定如何连接 class 给定文档的任何特征的标识符。有没有标准的方法来做到这一点?我的第一个倾向是简单地将共同学习的词嵌入传递给文档 classifier,以便查看哪些词位于嵌入 space 的哪些 classifier 分区区域。文档 classes 的词嵌入输出在交叉验证拆分中非常一致,这令人鼓舞,尽管我不知道如何将这些有效标签转换为声明“文档 X 得到标签 Y 因为文档中单词 A、B 和 C 的各种属性。

另一个想法是查看词向量和文档向量之间的相似性。相似词向量的顺序在随机种子和超参数中非常稳定,但这种标记的输出与之前方法的输出完全不对应。

提前感谢您的帮助。

编辑:这里有一些需要澄清的地方。 “文档”中的标记是有序的,它们是从一个离散值过程中测量出来的,我怀疑它的状态从序列中的上下文中获得它们的“含义”,就像单词一样。只有少数 classes,通常在 3 到 5 之间。文档被赋予唯一标签,classes 不用于学习嵌入。嵌入具有相当大的维度,总是 < 100,这是在许多时期学习的,因为我只担心学习 classifier 时的过度拟合,而不是嵌入。现在,我正在使用多项式逻辑回归器进行 class 化,但我还没有与它结婚。关于这一点,我还尝试在嵌入 space 中使用归一化回归系数作为向量,我可以将其与单词、文档等进行比较

Doc2Vec 的许多已发表作品相比,这是一个非常小的数据集(100 个文档)和词汇表(100 个单词),后者通常使用数万或数百万个不同的文档。

每个文档都有数千个单词,而您使用的 PV-DM 模式混合了文档到单词和单词到单词的上下文来进行训练会有所帮助。我仍然希望您可能需要使用比默认维度更小的维度 (vector_size<<100),以及更多的训练时期 - 但如果它确实对您有用,那就太好了。

你没有提到你有多少 classes,也没有提到你正在使用什么 classifier 算法,也没有提到已知的 classes 是否被混合到 (通常无人监督)Doc2Vec 训练模式。

如果您只使用已知的 classes 作为文档标签,而您的“少数”classes 是,比方说,只有 3 个,那么在某种程度上您只有3 个独特的“文档”,您正在对其进行片段训练。仅使用“少数”独特的 doctags 可能会过早地隐藏对下游 classifier 有用的数据的多样性。

另一方面,如果您给每个文档一个唯一的 ID - 原始的 'Paragraph Vectors' 论文方法,然后您将它们提供给下游 classifier,那可以单独使用没问题,但除了每个文档的 ID 之外,还可以从添加已知的 classes 作为额外标签​​中获益。 (也许如果你有很多 classes,那么这些可能就可以作为唯一的文档标签。值得比较每种方法。)

除了观察到当您使用一种同时训练文档和词向量的模式时,文档向量和词向量具有与单独的词向量相同的有用 similarities/neighborhoods/orientations。

您可以简单地尝试创建合成文档,或通过目标 removal/addition 候选词篡改真实文档的词,或将文档与 strong/correct class 预测器混合,查看 (a) 他们的 doc-vector 和最近的其他 doc-vectors 或 class-vectors 有多少变化;或 (b) 任何下游 classifier 的 predictions/relative-confidences。

(一段时间以来 Doc2Vec 的愿望清单功能一直是从文档向量合成伪文档。有关详细信息,请参阅 this issue,包括 link 到一个部分实现。虽然仅对此类单词进行排名的列表在自然语言中是无稽之谈,但它可能会给文档向量带来一定的“生动性”。)

当您不使用真正的自然语言时,请记住一些有用的事情:

  • 如果您的 'texts' 确实是无序的令牌袋,那么 window 可能不是一个真正有趣的参数。将它设置为一个非常大的数字是有意义的(基本上将所有单词都放在彼此的 windows 中),但可能不会 practical/appropriate 考虑到您的大型文档。或者,改用 PV-DBOW - 甚至可能在 tagswords.
  • 中混合已知的 classes 和单词标记
  • 默认 ns_exponent=0.75 继承自 word2vec 和自然语言语料库,并且至少有一篇研究论文(link来自 class 文档)建议对于其他应用程序,特别是推荐系统,非常不同的值可能会有所帮助。