Word2vec:为每个上下文添加外部单词

时间:2017-06-28 15:31:58

标签: nlp word2vec

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

最好的例子是:

说我有句子:"The dog is in the garden",窗口为1。

所以我们得到以下(目标,上下文)的pais:

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

但我想提供给word2vec algo的是:

(dog, The), (dog, is), **(dog, W)**, (is, dog), (is, in), **(is, W)**, etc.,
好像我的单词W在每个单词的上下文中。

其中W是我选择的单词,而不是现有的词汇。

在R或python中有一种简单的方法吗?

2 个答案:

答案 0 :(得分:1)

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

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

除非你想在字对中保持顺序!

答案 1 :(得分:1)

看一下'段落向量' algorithm - 在Python gensim中实现为Doc2Vec类。在其中,每个文本示例都获得了一个额外的伪词,它基本上浮动在整个示例上,有助于每个类似跳过类型(在段落向量中称为PV-DBOW)或类似CBOW(在段落向量中称为PV-DM)训练-context。

另请参阅Facebook的FastText'纸和图书馆。它本质上是word2vec在两个不同方向的扩展:

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

其次,它可以选择在矢量训练期间尝试不仅预测附近的单词,而且还可以预测包含文本示例(句子)的已知分类标签。结果,学习的单词矢量可能更好地用于其他未来句子的后续分类。