Nlp Word2vec:在每个上下文中添加外部单词
我正在寻找一个简单的“黑客”来实现以下想法:我希望在每个单词的上下文中人为地出现一个特定的单词(基本目标是尝试使用word2vec进行监督句子分类) 最好举一个例子: 假设我有一句话:Nlp Word2vec:在每个上下文中添加外部单词,nlp,word2vec,Nlp,Word2vec,我正在寻找一个简单的“黑客”来实现以下想法:我希望在每个单词的上下文中人为地出现一个特定的单词(基本目标是尝试使用word2vec进行监督句子分类) 最好举一个例子: 假设我有一句话:“狗在花园里”,还有一扇窗户 因此,我们将获得以下PAI(目标,上下文): 但我想向word2vec algo提供的是: (dog, The), (dog, is), **(dog, W)**, (is, dog), (is, in), **(is, W)**, etc., 就好像我的单词W是在每个单词的上下文中
“狗在花园里”
,还有一扇窗户
因此,我们将获得以下PAI(目标,上下文):
但我想向word2vec algo提供的是:
(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
除非你想保持单词上下文对的顺序 看看“段落向量”算法——在Python gensim中作为类Doc2Vec实现。在其中,每个文本示例都会获得一个额外的伪词,该伪词基本上漂浮在整个示例上,用于每个类似跳过gram(在段落向量中称为PV-DBOW)或CBOW(在段落向量中称为PV-DM)的训练上下文 还可以看看Facebook的“FastText”报纸和图书馆。它本质上是word2vec在两个不同方向上的扩展: 首先,它可以选择子词片段的学习向量(chractern-grams),以便将来的未知词可以从它们的子词中获得粗略的猜测向量
其次,它可以选择在向量训练过程中不仅尝试预测附近的单词,还可以预测包含文本示例(句子)的已知分类标签。因此,学习到的单词向量可能更好地用于其他未来句子的后续分类 在这方面类似于“上下文充实”吗?是的,非常感谢你的链接!基本上,我的想法似乎是他们“丰富背景”的一个特例。现在我想知道我是否真的必须卷起袖子自己编写代码……这确实是我想在将这些句子输入skip-gram算法之前对它们做的初步步骤。您是否知道可以将这些元组作为输入(而不仅仅是原始语句)的实现?例如,这一个?啊哈,现在我明白你的问题了!对不起,我想你应该给它编码。我发给你的链接不是word2vec。这是一个如何创建这些单词对的示例。我不确定。也许有一种在Gensim中训练单词对的方法。你说得对。一般来说,我对nlp还是相当陌生的,但gensim似乎确实将令牌作为输入。我会深入研究的。太多了!谢谢你的建议!我认为gensim的实现可能就是我想要的,特别是如果我可以在多个段落中重复使用相同的标签(你知道这是否可行吗?)。我将看一看FastText。是的,您可以重复使用标签(在Doc2Vec培训时称为“标签”),或者给每个文本一个唯一的标签,然后培训分类器学习从这些标签向量到标签的映射。
labels = [
"W1",
"W2",
]
word_labels = [
(word, label)
for sent, label in zip(sentences, labels)
for word in sent
]
word_context += word_labels