zoukankan      html  css  js  c++  java
  • 深度学习中的embedding

    深度学习中的embedding

    1.简介

    在整个深度学习框架中都是十分重要的“基本操作”,不论是NLP(Natural Language Processing,自然语言处理)、搜索排序,还是推荐系统,或是CTR(Click-Through-Rate)模型,Embedding都扮演着重要的角色。

    2.介绍embedding的应用方式和如何计算embedding(通俗易懂)

    基础知识了解

    怎么把词表示出来即如何将一个单词表示为数字向量

    最简单的方法是为词汇表中的每个单词定义一个带有节点的巨型输入层,或者至少为数据中出现的每个单词定义一个节点。 如果数据中出现500,000个唯一单词,则可以表示为长度为500,000向量的单词,并将每个单词分配给向量中的一个位置(slot)。

    为什么引入

    (1)神经网络过大(这里ppt引入一下神经网络的图加以说明)

    巨大的输入向量意味着神经网络的超大数量的权重。 如果你的词汇表中有M个单词,并且输入上的网络的第一层中有N个节点,则您需要使用MxN个权重来训练该层。 大量的权重会导致进一步的问题:

    数据量:模型中的权重越多,有效训练需要的数据就越多。
    计算量:权重越多,训练和使用模型所需的计算量就越多,很容易超出硬件的能力。
    

    (2)向量间缺少有意义的关系

    如果将RGB通道的像素值提供给图像分类器,那么谈论“相近”值是有意义的。 略带红色的蓝色接近纯蓝色,无论是在语义上还是在向量之间的几何距离方面。 但是对于索引1247的1的向量表示的“马”,与索引50,430为1的向量表示的“羚羊”的关系不比索引238为1表示的向量“电视”的更接近。

    这些问题的解决方案是使用embedding,embedding将大型稀疏向量转换为保留语义关系的低维空间

    简单来说,我们提取了数据集进行训练,根据训练,找寻我们所给的词汇之间的的关系,根据图,可以看出来积极的词汇聚拢,消极的词汇聚拢。

    实现练习:

    目标:

    通过电影评论的数据集 ACL 2011 IMDB dataset训练一个语义分析模型来预测影评是喜欢(label=1)还是不喜欢(label=0)。

    关于数据集:

    数据集是电影的影评和评分,每个电影有个唯一id和对应评分,文件形式:id_score.txt,内容是影评。
    原始数据集包括了train和test两个目录,train下面的neg目录表示负样本,其中评分score<=4,label为0;pos目录表示正样本,其中评分score>=7,label为1;
    其中用的数据已经转换为tfrecord格式数据了。

    特征工程:

    通过tf.feature_column.categorical_column_with_vocabulary_list函数把影评的terms(影评的单词)转换为feature vector。本示例是为了练习,因此采用了词汇表(vocabulary)方式,只选取小部分词汇表,50个。即50维度的空间,如果影评中出现了其中的特征向量,出现置1,未出现置0。

    采用one-hot编码

    image-20210606191529044

    这里的feature vector就是稀疏的分类数据,可以转换为低纬的embedding

    通过训练,得出50词的特征矩阵,再进行降维,形成训练好的embedding_matrix,等再输入一段影评,通过该矩阵就能判断该影评是好的还是不好的。

  • 相关阅读:
    在 Vim 中,删除 ^@ 符号的几种方法
    西瓜书机器学习算法脉络梳理之聚类
    西瓜书机器学习算法脉络梳理之集成学习
    西瓜书机器学习算法脉络梳理之贝叶斯分类器
    springboot项目,打包时携带所有依赖
    【转载】JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案
    Tomcat组件梳理—Service组件
    Tomcat组件梳理—Digester的使用
    Tomcat组件梳理--Server
    Tomcat组件梳理--Catalina
  • 原文地址:https://www.cnblogs.com/kubopiy/p/14864414.html
Copyright © 2011-2022 走看看