这是我的词向量:
googleteststackoverflowyahoo
我为这些词分配了如下值:
google : 1test : 2stackoverflow : 3yahoo : 4
以下是一些示例用户及其词汇:
user1 google, test , stackoverflowuser2 test , googleuser3 test , yahoouser4 stackoverflow , yahoouser5 stackoverflow , googleuser6
对于词向量中不包含值的用户,我分配了’0′
基于此,这对应于:
user1 1, 2 , 3user2 2 , 1 , 0user3 2 , 4 , 0user4 3 , 4 , 0user5 3 , 1, 0user6 0 , 0 , 0
我不确定这些值是否正确,或者这种为每个词向量值分配值的方法是否正确,以便应用’欧几里得距离’和’相关性’。我基于《编程集体智慧》一书中的片段进行操作:
“收集偏好 你需要一种方式来表示不同的人及其偏好。如果你在构建一个购物网站,你可能会使用1来表示某人过去购买过某物品,而使用0来表示他们没有购买过。”
对于我的数据集,我没有偏好值,所以我只是使用唯一的数值来表示用户是否包含词向量中的某个词。
这些是我应该为我的词向量设置的正确值吗?我应该如何确定这些值应该是什么?
回答:
为了使距离和相似性度量有效,你需要为词汇表中的每个词设置一列,然后用布尔值零和一来填充这些列,根据样本中出现的相应词。例如:
G T SO Y!google, test, stackoverflow => 1, 1, 1, 0test, google => 1, 1, 0, 0stackoverflow, yahoo => 0, 0, 1, 1
等等。
现在,第一和第二个向量之间的平方欧几里得距离是
(1 - 1)² + (1 - 1)² + (1 - 0)² + (0 - 0)² = 1
这在直觉上是有意义的,因为这两个向量仅在一个位置上不同。同样,最后两个向量之间的平方距离是四,这是这个空间中的最大平方距离。
这种编码是“独热编码”或“一对K编码”的扩展,它是文本机器学习的常用方法(尽管很少有教科书会详细说明)。