首页 > 编程知识 正文

graph embedding(一文搞懂one-hot和embedding)

时间:2023-05-05 11:13:53 阅读:122359 作者:4637

在NLP领域,word embedding已经成为众所周知的技术。 在现实生活中,word embedding已经有了非常广泛的应用:语音助手、机器翻译、情感分析…由于word embedding的特殊性,它几乎覆盖了所有NLP的应用。 其次,从传统的one-hot代码入手,阐述其优劣,扩展到word embedding技术及其优点

人类很容易理解“LOVE”这样的单词、短语或字母,但机器无法理解。 要让机器理解单词,它必须是一系列的数字(矢量)。 以下介绍的one-hotencoding(one-hot代码)和Word Embedding是将单词变为向量的两种方法

一、One-Hot Encoding (词汇表-稀疏向量)1.首先什么是one-hot? 为什么要用one-hot? 一般来说,在机器学习教程中,在开始拟合模型之前,建议或要求以特定方式准备数据,一个很好的例子是类别数据(Categorical data )的One-Hot编码

那么,什么是类别数据? 类别数据是只有标签值而没有数值的变量。 值通常是固定大小的,属于有限集合。 类别变量也称为“公称值”。

举例说明。

“宠物”(pet )变量包含狗(dog )、猫(cat )的值。 “颜色”(color )变量具有“红色”(red )、“绿色”(green )和“蓝色”(blue )值。 “放置”(place )变量包含第一(first )、第二(second )和第三(third )值。 上述示例中的每个值都表示不同的类别。 几类互有一定的自然关系,如自然序列关系。 在上述示例中,排名(place )变量的值处于这种自然的排序关系。 这些变量称为序号变量(ordinal variable )。

2 .类别数据有什么问题吗? 一些算法可以直接应用于类别数据。 例如,可以将决策树算法直接应用于类别数据,而无需进行数据转换。 但是,还有很多机器学习算法不能直接操作标签数据。 这些算法要求所有输入/输出变量都是“数值”。 通常,这种限制主要是由于这些机器学习算法的有效实现,而不是算法本身的限制。

但是,这意味着需要将类别数据转换为数值格式。 如果输出变量是类变量,则可能需要将模型的预测值转换为类格式,以便在某些APP应用程序中查看或使用

如何将类别数据转换为数值数据:

两种方法:1.整数编码 2.One-Hot 编码

a.整数编码:第一步,先要给每个类别值都分配一个整数值。

例如,红色(red )表示为1,绿色)表示为2,蓝色)表示为3。 这种方法称为标签代码或整数代码,可以很容易地恢复为类别值。 整数之间有自然的排序关系,机器学习算法可能可以理解并利用这种关系。 例如,前一个位次place的例子的序号变量是很好的例子。 对于那个,标签编码就足够了。

b.One-Hot 编码

但是,对于没有顺序关系的类变量,仅仅进行上述整数编码是不够的。 实际上,使用整数代码时,模型假设类之间存在自然的顺序关系,结果不佳,或者预期值介于两个类之间的意外结果。 在这种情况下,整数表示将使用One-Hot代码。 One-Hot代码删除整数代码,并为每个整数值创建二进制变量。

更容易理解:

用one-hot对离散特征进行编码可简化特征之间距离的计算。 例如,有表示工作类型的离散型特征。 这个离散型的特征一共取三个值,不使用one-hot代码。 这表示分别为x_1=(1)、x_2=(2)、x_3=(3)。 两个功能之间的距离,(x_1, x_2) = 1, d(x_2, x_3) = 1, d(x_1, x_3) = 2。那么x_1和x_3工作之间就越不相似吗这样的表示所计算的特征的距离不合理。 使用one-hot代码,可以得到x _1=(1,0,0 ),x _2=(0,1,0 ),x _3=(0,0,1 ),并且两个作业之间的所有距离都是sqrt(2) .

在“颜色”(color )示例中,有三个类别,因此编码需要三个二值变量。 对应颜色的位置标记为“1”,其他颜色的位置标记为“0”。

red,green,blue 1,0,00,1,00,0,1,2,word embedding -将爱(词与词之间的关系)深度学习应用于自然语言处理时,基本上是用one-hot编码的为什么要这么做呢?

一个原因是深度学习对稀疏输入没有效果。

第二个最主要的原因是,其one-hot方式的代码,对于每个不同的单词或中文的语言,都无法表现出关系

达出来,也即,对于不同的单词,两个单词的one-hot编码的向量的相似度永远为0, 也即cos(Vi, Vj) = 0。那么问题来了,怎样表示出单词之间的内在联系呢?embedding来了

 

要了解 embedding 的优点,我们可以对应 One-hot 编码来观察。One-hot 编码是一种最普通常见的表示离散数据的表示,首先我们计算出需要表示的离散或类别变量的总个数 N,然后对于每个变量,我们就可以用 N-1 个 0 和单个 1 组成的 vector 来表示每个类别。这样做有两个很明显的缺点:

对于具有非常多类型的类别变量,变换后的向量维数过于巨大,且过于稀疏。映射之间完全独立,并不能表示出不同类别之间的关系。

因此,考虑到这两个问题,表示类别变量的理想解决方案则是我们是否可以通过较少的维度表示出每个类别,并且还可以一定的表现出不同类别变量之间的关系,这也就是 embedding 出现的目的。

Embedding 是一个将离散变量转为连续向量表示的一个方式。在神经网络中,embedding 是非常有用的,因为它不光可以减少离散变量的空间维数,同时还可以有意义的表示该变量。

我们可以总结一下,embedding 有以下 3 个主要目的:

在 embedding 空间中查找最近邻,这可以很好的用于根据用户的兴趣来进行推荐。作为监督性学习任务的输入。用于可视化不同离散变量之间的关系。

这也就意味对于维基百科书籍表示而言,使用 Neural Network Embedding,我们可以在维基百科上获取到的所有 37,000 本书,对于每一篇,仅仅用一个包含 50 个数字的向量即可表示。此外,因为 embedding 是可学习的,因此在不断的训练过程中,更相似的书籍的表示在 embedding space 中将彼此更接近。
One-hot 编码的最大问题在于其转换不依赖于任何的内在关系,而通过一个监督性学习任务的网络,我们可以通过优化网络的参数和权重来减少 loss 以改善我们的 embedding 表示,loss 越小,则表示最终的向量表示中,越相关的类别,它们的表示越相近

Embedding 可视化,可以看出词与词之间的相似性

底下这个图是我用tensorflow训练人民的名义的embedding的结果

三、总结

最后我们来做一个总结,自然语言的向量化表示方法主要有两类:one-hot encoding 和 word embedding。它们的优缺点如下:

四、应用

Embedding 的基本内容如前面介绍所示,然而我想说的是它的价值并不仅仅在于 word embedding 或者 entity embedding,这种将类别数据用低维表示且可自学习的思想更存在价值。通过这种方式,我们可以将神经网络,深度学习用于更广泛的领域,Embedding 可以表示更多的东西,而这其中的关键在于要想清楚我们需要解决的问题和应用 Embedding 表示我们得到的是什么。

说到embedding就不得不说说word2vector了,word2vector做法即为embedding的过程,这个可以扩展到推荐中的item2vector 。顺便提一嘴word2vec:

1.可以看作是多分类任务

2.浅层神经网络

3.数据构造模式:cbow、skip-gram模式

完结!

以下加一点用tensorflow模拟embedding的一点代码做个记录

import tensorflow as tf import numpy as np#类似语料库embedding_dict = tf.convert_to_tensor(np.random.random(size=(30,4)))#输入的词索引input_train = tf.convert_to_tensor([1,2,4,5])检索得到对应词的embedding权重embed = tf.nn.embedding_lookup(embedding_dict,input_train)#由于我的tensorflow的版本较高,session开启方式不同sess = tf.compat.v1.Session()sess.run(tf.compat.v1.global_variables_initializer())print(sess.run(embedding_dict))print("====================================")print(sess.run(embed))sess.close()

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。