Python Word2Vec Skipgrams-夫妻是否应该跨越句子? 出身背景

Python Word2Vec Skipgrams-夫妻是否应该跨越句子? 出身背景,python,keras,word2vec,word-embedding,Python,Keras,Word2vec,Word Embedding,我正在尝试使用负采样训练Skip gram word2vec模型。据我所知,我需要生成目标、上下文和标签,其中0=不在上下文中,1=在上下文中 我不确定的是: 我们应该一句一句地让skipgram夫妇结婚吗?或者我们应该把句子平铺成一个大句子,并从中生成技巧图?换句话说,生成的夫妇是否应该跨越句子 下面两个代码段之间的唯一区别是其中一个代码段生成了跨越两个句子的成对代码,如下所示: data = ['this is some stuff.', 'I have a cookie.'] 结果: 我

我正在尝试使用负采样训练Skip gram word2vec模型。据我所知,我需要生成目标、上下文和标签,其中0=不在上下文中,1=在上下文中

我不确定的是: 我们应该一句一句地让skipgram夫妇结婚吗?或者我们应该把句子平铺成一个大句子,并从中生成技巧图?换句话说,生成的夫妇是否应该跨越句子

下面两个代码段之间的唯一区别是其中一个代码段生成了跨越两个句子的成对代码,如下所示:

data = ['this is some stuff.', 'I have a cookie.']
结果:

我们可以看到,有些夫妻会跨越句子

或者我们可以有不跨句子的夫妇:

...SNIP...
[some, stuff]
[stuff, this]
[stuff, is]
[stuff, some]
[i, have]
[i, a]
[i, cookie]
[have, i]
[have, a]
[have, cookie]
...SNIP...
我到目前为止所做的一切。 获取数据

初始化一些变量

把句子平铺成一个大的序列

或: 将数据集拆分为句子,并根据每个句子生成对

把我们的话打印出来


通常这两种方式都没什么关系

即使当库/API谈论句子时,它们实际上指的是可能是多个句子的文本

最糟糕的情况是,如果你最终发现一些跨文本的上下文没有本质的联系,那就是它给训练增加了一点噪音。。。这可能需要更多的训练才能在其他非噪音环境下达到最佳状态。但通常情况下,文本实际上是相关的,来自同一原始来源,因此这种上下文可能仍然捕捉到真正有用的模式,因此与较小的文本片段相比,它是一个净积极因素


您可以尝试两种方法,并对结果进行评分,看看其中一种方法是否更适合您的语料库和结束任务

感谢我一直在尝试这两种方法,它们似乎给出了相对相似的结果
...SNIP...
[some, stuff]
[stuff, this]
[stuff, is]
[stuff, some]
[i, have]
[i, a]
[i, cookie]
[have, i]
[have, a]
[have, cookie]
...SNIP...
from sklearn.datasets import fetch_20newsgroups
newsgroups_train = fetch_20newsgroups(subset='train',
                          remove=('headers', 'footers', 'quotes'))
vocabulary_size = 8
window_size = 3 
neg_samples = 0.0
sents = newsgroups_train.data
tokenizer = Tokenizer(num_words= vocabulary_size, lower=True, filters=filters)
tokenizer.fit_on_texts(sents)
word_index_inv = {v: k for k, v in tokenizer.word_index.items()}
sequences = tokenizer.texts_to_sequences(sents)
couples, labels = skipgrams(list(itertools.chain.from_iterable(sequences)), vocabulary_size=vocabulary_size, window_size=window_size, shuffle=False, negative_samples=neg_samples)
word_target, word_context = zip(*couples)
word_target = np.array(word_target, dtype="int32")
word_context = np.array(word_context, dtype="int32")
sents = [nltk.sent_tokenize(s) for s in newsgroups_train.data]
sents = list(itertools.chain.from_iterable(sents))

tokenizer = Tokenizer(num_words= vocabulary_size, lower=True, filters=filters)
tokenizer.fit_on_texts(sents)
word_index_inv = {v: k for k, v in tokenizer.word_index.items()}
sequences = tokenizer.texts_to_sequences(sents)    
couples = []
labels = []
for seq in sequences:
    c,l = skipgrams(seq, vocabulary_size=vocabulary_size, 
            window_size=window_size, shuffle=False, 
            negative_samples=neg_samples)
    couples.extend(c)
    labels.extend(l)
word_target, word_context = zip(*couples)
word_target = np.array(word_target, dtype="int32")
word_context = np.array(word_context, dtype="int32")
for couple in couples:
    print('[{}, {}]'.format(word_index_inv[couple[0]], word_index_inv[couple[1]]))