为了账号安全,请及时绑定邮箱和手机立即绑定

预训练 (Word2Vec) 嵌入神经网络

预训练 (Word2Vec) 嵌入神经网络

跃然一笑 2021-09-25 16:38:20
如果我必须使用预训练的词向量作为神经网络中的嵌入层(例如 CNN),我该如何处理索引 0?细节:我们通常从创建一个零 numpy 2D 数组开始。稍后我们填写词汇表中的单词索引。问题是,0 已经是我们词汇表中另一个词的索引(比如,'i' 是 0 处的索引)。因此,我们基本上是用“i”而不是空词来初始化整个矩阵。那么,我们如何处理填充所有等长的句子呢?一个简单的弹出窗口是我们可以使用另一个 digit=numberOfWordsInVocab+1 来填充。但这不是需要更大的尺寸吗?[帮我!]
查看完整描述

2 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

一个简单的弹出窗口是我们可以使用另一个 digit=numberOfWordsInVocab+1 来填充。但这不是需要更大的尺寸吗?


不!那是一样的大小。


a=np.full((5000,5000), 7)

a.nbytes

200000000


b=np.zeros((5000,5000))

b.nbytes

200000000

编辑:错别字


查看完整回答
反对 回复 2021-09-25
?
POPMUISE

TA贡献1765条经验 获得超5个赞

如果我必须使用预训练的词向量作为神经网络中的嵌入层(例如 CNN),我该如何处理索引 0?

回答

通常,可以通过模型和目标的加权成本来处理空条目。但是,在处理单词和顺序数据时,事情可能有点棘手,可以考虑几件事。让我们做一些假设并进行处理。

假设

  1. 我们从一个预训练的 word2vec 模型开始。

  2. 我们有不同长度的序列,最多有max_lenght单词。

细节

  • Word2Vec 是一种学习从离散变量(词标记 = 词唯一 id)到连续向量空间的映射(嵌入)的模型。

  • 向量空间中的表示使得成本函数(CBOW,Skip-gram,本质上是以双向方式从上下文中预测单词)在语料库上被最小化。

  • 阅读基础教程(如GoogleTensorflow教程的 word2vec 教程)揭示了算法的一些细节,包括负采样

  • 实现是一个查找表。它比替代的 one-hot 编码技术更快,因为 one-hot 编码矩阵的维度很大(比如 10,000 个单词的 10,000 列,连续单词的nn)。因此查找(哈希)表明显更快,并且它从嵌入矩阵中选择行(对于行向量)。

任务

  • 添加缺少的条目(无单词)并在模型中使用它。

建议

  • 如果丢失数据的成本有一些用途,例如使用该条目的预测并且该条目有标签,则可以按照建议添加一个新值(可以是 0 索引,但所有索引必须移动i=i+1并且嵌入矩阵应该在位置 0 处有新行)。

  • 按照第一个建议,您需要训练添加的行。您可以对 NaN 类与全部使用负采样。我不建议用它来处理缺失值。处理“未知单词”类是一个很好的技巧。

  • 对于每个比 更短的样本,您可以通过常量 0 对这些条目的成本进行加权max_length。也就是说,如果我们有一个词标记序列[0,5,6,2,178,24,0,NaN,NaN],那么对应的权重向量是[1,1,1,1,1,1,1,0,0]

  • 您应该担心重新索引单词及其成本。在内存中,几乎没有区别(1vs Nwords,N很大)。在复杂性方面,它可以稍后合并到初始标记化函数中。预测和模型复杂度是一个更大的问题,也是对系统更重要的要求。

  • 有很多方法可以解决不同长度的问题(LSTM、RNN,现在我们尝试使用 CNN 和成本技巧)。阅读有关该问题的最新文献,我相信有很多工作要做。例如,请参阅A Convolutional Neural Network for Modeling Sentences论文。


查看完整回答
反对 回复 2021-09-25
  • 2 回答
  • 0 关注
  • 201 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号