引领先锋|基于深度学习的文本数据特征提取方法之Word2Vec(一)( 四 )
Output ------ Vocabulary Size: 12425 Vocabulary Sample: [('perceived', 1460), ('flagon', 7287), ('gardener', 11641), ('named', 973), ('remain', 732), ('sticketh', 10622), ('abstinence', 11848), ('rufus', 8190), ('adversary', 2018), ('jehoiachin', 3189)]可以看到 , 我们已经在语料库中创建了一个包含惟一单词的词汇表 , 以及将单词映射到其惟一标识符的方法 , 反之亦然 。 “PAD”通常用于在需要时将上下文单词填充为固定长度 。
建立一个CBOW(上下文 , 目标)生成器
我们需要由目标中心词和及其上下文词组成的对 。 在我们的实现中 , 目标单词的长度为' 1 ' , 周围的上下文的长度为' 2 x window_size ' , 其中我们在语料库中的目标单词前后分别取' window_size '个单词 。
def generate_context_word_pairs(corpus, window_size, vocab_size): context_length = window_size*2 for words in corpus: sentence_length = len(words) for index, word in enumerate(words): context_words = [] label_word = []start = index - window_size end = index + window_size + 1context_words.append([words[i] for i in range(start, end) if 0 <= i < sentence_length and i != index]) label_word.append(word)x = sequence.pad_sequences(context_words, maxlen=context_length) y = np_utils.to_categorical(label_word, vocab_size) yield (x, y)# Test this out for some samples i = 0 for x, y in generate_context_word_pairs(corpus=wids, window_size=window_size, vocab_size=vocab_size): if 0 not in x[0]: print('Context (X):', [id2word[w] for w in x[0]], '-> Target (Y):', id2word[np.argwhere(y[0])[0][0]])if i == 10: break i += 1Context (X): ['old','testament','james','bible'] -> Target (Y): king Context (X): ['first','book','called','genesis'] -> Target(Y): moses Context(X):['beginning','god','heaven','earth'] -> Target(Y):created Context (X):['earth','without','void','darkness'] -> Target(Y): form Context (X): ['without','form','darkness','upon'] -> Target(Y): void Context (X): ['form', 'void', 'upon', 'face'] -> Target(Y): darkness Context (X): ['void', 'darkness', 'face', 'deep'] -> Target(Y): upon Context (X): ['spirit', 'god', 'upon', 'face'] -> Target (Y): moved Context (X): ['god', 'moved', 'face', 'waters'] -> Target (Y): upon Context (X): ['god', 'said', 'light', 'light'] -> Target (Y): let Context (X): ['god', 'saw', 'good', 'god'] -> Target (Y): light前面的输出应该让你对X如何形成我们的上下文单词有更多的了解 , 我们正试图根据这个上下文预测目标中心单词Y 。例如 , 如果原始文本是“in the beginning god created heaven and earth” , 经过预处理和删除停止词后 , 就变成了‘beginning god created heaven earth’, 而对于我们来说 , 我们正在努力实现的就是这个目标 。 给定[beginning, god, heaven, earth] 作为上下文 , 预测目标中心词是什么 , 在本例中是' created '。
构建CBOW模型架构
我们现在利用keras构建CBOW模型的深度学习架构 。 为此 , 我们的输入是传递给嵌入层(用随机权重初始化)的上下文单词 。 词嵌入被传播到λ层 , 做词嵌入的平均 (叫CBOW是因为在做平均的时候我们真的不考虑上下文词的顺序) , 我们把平均后的向量送到一个dense的softmax层去预测我们的目标词 。 我们将其与实际的目标字匹配 , 通过利用categorical_crossentropy损失计算损失 , 并对每个epoch执行反向传播来更新嵌入层 。 下面的代码向我们展示了我们的模型架构 。
推荐阅读
- 引领时尚新时代|她是饶雪漫书中的模特,和鹿晗在一起被赞般配,笑起来碾压林允!
- 引领时尚新时代|传闻她被渣男骗钱骗大肚子,无奈生下孩子给母亲抚养,气质美上天
- 引领时尚新时代|她是典型中国好媳妇,却嫁给相识不到20天的男友,穿搭霸气侧漏
- 引领时尚新时代|她从小就被亲爸说是捡来的,出道10年没谈过恋爱,美得让人着迷
- 「宁静」宁静不管穿了个啥都能引领时髦,嫌T恤配牛仔裤不够炫,再加薄纱
- 引领先锋|扔员工证的工厂到底啥来头?营收超三千亿,与富士康、伟创力齐名
- 指数债券|美债收益率曲线的陡平之辨:基于供需视角的分析
- 新京报|摩登日记|引领潮流的时尚偶像麦当娜
- 山东沂水提倡彩礼费1万以内|临沂沂水倡导婚俗简约 举办集体婚礼引领风尚
- 【山东沂水提倡彩礼费1万以内】临沂沂水倡导婚俗简约 举办集体婚礼引领风尚
