【发布时间】:2019-09-30 16:24:50
【问题描述】:
使用嵌入而不是代表汽车品牌和型号的大型 one-hot 编码向量是否有意义?另外,嵌入在概念上代表什么?例如,福特 F-150 与丰田塔科马有多相似?
【问题讨论】:
标签: machine-learning deep-learning embedding one-hot-encoding data-representation
使用嵌入而不是代表汽车品牌和型号的大型 one-hot 编码向量是否有意义?另外,嵌入在概念上代表什么?例如,福特 F-150 与丰田塔科马有多相似?
【问题讨论】:
标签: machine-learning deep-learning embedding one-hot-encoding data-representation
是的,这是有道理的。
您可以将嵌入视为您的输入在不同空间中的表示。有时您想要执行降维,因此您的嵌入的维度低于您的输入。其他时候,您只是希望嵌入对您的输入非常具有描述性,这样您的模型(例如神经网络)就可以轻松地将其与所有其他输入区分开来(这在分类任务中特别有用)。
如您所见,嵌入只是一个向量,它比输入本身更能描述您的输入。在这种情况下,我们通常使用 features 一词来指代嵌入。
但是,也许,你问的有点不同。您想知道嵌入是否可以表达汽车之间的相似性。理论上,是的。假设您有以下嵌入:
Car A: [0 1]
Car B: [1 0]
嵌入的第一个元素是制造商。 0 代表丰田,1 代表法拉利。第二个要素是模型。 0 代表 F-150,1 代表 458 Italia。你如何计算这两辆车之间的相似度?
余弦相似度 基本上,您计算嵌入空间中这两个向量之间夹角的余弦值。这里的嵌入是二维的,因此我们在一个平面上。而且,这两个嵌入是正交的,因此它们之间的夹角为 90°,余弦为 0。所以它们的相似度为 0:它们根本不相似!
假设你有:
Car A: [1 0]
Car B: [1 1]
在这种情况下,制造商是相同的。尽管型号不同,但您可能会认为这两款车比前两款更相似。如果你计算它们嵌入之间角度的余弦,你会得到大约 0.707,大于 0。这两辆车确实更相似。
显然,这并不容易。这完全取决于您如何设计模型以及如何学习嵌入,即您提供哪些数据作为系统的输入。
【讨论】:
TLDR:是的,这是有道理的。不,它与著名的 Word2Vec 嵌入不同。
当人们谈论在向量表示中嵌入数据时,他们真正的意思是factorization 他们显式/隐式构造的设计矩阵。
以Word2Vec 为例。设计矩阵表示人工构建的预测问题,其中使用周围上下文中的单词来预测中心词(SkipGram)。它相当于分解一个包含正点互信息的上下文和中心词的交叉表矩阵。 [1]
现在,假设我们想要回答这个问题:福特 F-150 与丰田塔科马有多相似?
首先,我们必须确定我们的数据是否允许我们使用监督方法。如果是,那么我们可以使用一些算法,例如传统的Feed-forward neural network 和factorization machine。您可以使用这些算法通过使用预测标签来定义 one-hot 空间中的特征相似性,例如单击租车网站上的详细信息页面。然后具有相似向量的模型意味着人们在同一会话中点击他们的详细信息页面。也就是说,响应的行为模拟了特征的相似性。
如果您的数据集没有标记,您仍然可以尝试预测特征的共现。这是Word2Vec 的新颖之处,即在上下文窗口中使用共现标记的未标记句子巧妙地定义预测问题。在这种情况下,向量仅表示特征的共现。它们可以用作一种降维技术,用于为管道中的另一个预测问题提取密集特征。
如果你想节省一些脑力,而你的特征恰好是所有因素,你可以在包中应用现有的算法,比如LDA、NMF、SVD,带有二进制分类的损失函数,如hinge loss。大多数编程语言为其库提供由几行代码组成的 API。
以上所有方法都是matrix factorization。还有更深、更复杂的tensor factorization 方法。但我会让你自己研究它们。
参考
【讨论】: