十四、嵌入(Embeddings)

上一章:十三、文本的张量表示

下一章:十五、语言模型

更多章节:人工智能入门课程


课前练习

在基于BoW 或者TF/IDF训练分类器时我们处理的是长度是词表大小vocab_size)的高维词袋向量并且需要明确的将低维位置表示向量转换为稀疏one-hot表示然而one-hot表示并不是内存高效的另外每个单词都被独立对待即one-hot编码向量并不表达单词之间的语义相似度

embedding的思想是使用低维稠密向量表示单词这些向量在某种程度上反映了单词的语义含义我们将在稍后讨论如何构建有含义的单词embeddings但是现在我们先把embeddings视作一种降低单词向量维度的方法

因此embedding层将接收单词作为输入并生成一个特定嵌入大小embedding_size)的向量输出在某种意义上embedding层非常类似于线性层但不同于线性层接收one-hot编码向量作为输入embedding层能够接收单词的编号作为输入从而避免创建大规模的one-hot编码向量

通过在我们分类网络中使用embedding层作为第一层我们可以从词袋模型bag-of-words转变为嵌入袋embedding bag模型在这一层我们首先把文本中的每个单词转换为相应的embedding然后对所有这些embeddings执行聚合函数比如说求和求平均值或者最大值

图片由作者提供

✍️ 练习: Embeddings

在以下代码笔记中继续学习

语义Embeddings(Semantic Embeddings): Word2Vec

虽然embedding层学习将单词映射成向量表示但是这个向量表示并不具有多少语义含义理想的情况下我们可以学习一种向量表达使得近义词或者同义词对应的向量在某种向量距离如欧氏距离上彼此靠近

为了做到这一点我们需要在大量的文本上以特定的方式预训练我们的embedding模型一种训练语义embeddings的方法称为Word2Vec它基于两种主要架构来生成单词的分布式表示

  • 连续词袋(Continuous bag-of-words (CBoW) )在这种架构中我们训练模型以周围的上下文来预测一个单词给定n元语法ngram即n个连续单词$(W_{-2},W_{-1},W_0,W_1,W_2)$,模型的目标是通过$(W_{-2},W_{-1},W_1,W_2)$上下文来预测单词$W_0$ 。
  • 连续跳字Continuous skip-gram)与CBoW相反该模型使用周围窗口的上下文单词来预测当前单词 

CBoW 更快skip-gram更慢但skip-gram 在表示不频繁的单词方面效果更好 

图像出自这篇论文

Word2Vec 预训练embeddings (以及其他类似模型比如GloVe) 也可以替代神经网络中的embedding层然而我们需要处理词汇表因为用于预训练Word2Vec/GloVE的词汇表很可能与我们文本语料库中的词汇表不同查看上面的代码笔记看看如何解决这个问题

语境Embedding(Contextual Embeddings)

像Word2Vec这种传统预训练embedding表示技术的关键限制是词义歧义消除问题虽然预训练embeddings能够捕获单词在上下文的一些含义但单词的所有可能含义都被编码进同一个embedding中。这可能会给下游模型带来问题因为很多单词比如会说‘玩play使用在不同的上下文中有不同的意思

例如单词‘玩play在这两个不同的句子中意思很不相同

  • 我去剧院看了场戏剧play)(I went to a play at the theatre)。
  • john想和他的朋友们一起玩play)(John wants to play with his friends)

上述预训练embeddings把使用相同的embedding表示单词‘play’的含义为了解决这个限制我们需要基于语言模型来构建embeddings该模型使用大型文本语料库进行训练并且能够理解如何在不同的上下文中组合使用词语基于上下文的embeddings不在本教程的讨论范围但我们将在本课程后续讨论语言模型时再次讲到它

总结

在这节课中您发现了如何在TensorFlow和Pytorch中构建并使用embedding层以更好的反应单词的含义

挑战

Work2Vec已经在某些有趣的应用中使用到了包括生成歌词和诗歌关注这篇文章它介绍了作者如何使用Word2Vec来生成诗歌观看这个由Dan Shiffmann提供的视频了解另一种关于Word2Vec的不同的解释然后在您自己的文本语料库上应用这些技术,也许您可以从Kaggle下载相关语料库

课后练习

复习与自学

通读这篇关于Word2Vec的论文在向量空间中高效评估单词表示

作业: 代码笔记


上一章:十三、文本的张量表示

下一章:十五、语言模型

更多章节:人工智能入门课程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值