Word2vec:将外部词添加到每个上下文

Word2vec: add external word to every context

我正在寻找一个简单的 "hack" 来实现以下想法:我希望在每个单词的上下文中人为地出现一个特定的单词(基本目标是尝试使用 word2vec 进行监督句子分类)。

最好举个例子:

假设我有句子:"The dog is in the garden",以及 1 的 window。

所以我们会得到以下几对(目标,上下文):

(dog, The), (dog, is), (is, dog), (is, in), etc.

但我想提供给 word2vec 算法的是:

(dog, The), (dog, is), **(dog, W)**, (is, dog), (is, in), **(is, W)**, etc.,

好像我的单词 W 在每个单词的上下文中。

其中 W 是我选择的词,不在现有词汇表中。

在 R 或 python 中有没有简单的方法来做到这一点?

我想你有句子列表和每个句子的标签列表:

sentences = [
    ["The", "dog", "is", "in", "the", "garden"],
    ["The", "dog", "is", "not", "in", "the", "garden"],
]

然后您创建了单词-上下文对:

word_context = [("dog", "The"), ("dog", "is"), ("is", "dog"), ("is", "in") ...]

现在,如果每个句子都有一个标签,您可以将标签添加到所有单词的上下文中:

labels = [
    "W1",
    "W2",
]

word_labels = [
    (word, label)
    for sent, label in zip(sentences, labels)
    for word in sent
]

word_context += word_labels

除非您想保持单词-上下文对的顺序!

看看 'Paragraph Vectors' 算法——在 Python gensim 中实现为 class Doc2Vec。在其中,每个文本示例都会得到一个额外的伪词,该伪词基本上漂浮在整个示例上,为每个类 skip-gram(在段落向量中称为 PV-DBOW)或类 CBOW(在段落向量中称为 PV-DM)训练做出贡献-语境。

另请查看 Facebook 的 'FastText' 论文和图书馆。它本质上是 word2vec 在两个不同方向上的扩展:

首先,它可以选择学习子词片段(字符 n-gram)的向量,以便将来未知的词可以从其子词中获得粗略的猜测向量。

其次,它可以选择在向量训练期间不仅尝试预测附近的单词,还可以尝试预测包含文本示例(句子)的已知class化标签。因此,学习到的词向量可能更适合后续 class 其他未来句子的化。