第一种方法是:one-hot方法
比如说有cat,dog,apple三个词汇。那么就生成一个三维向量,每个词占向量里面的一个位置,cat:[1,0,0] dog:[0,1,0] apple:[0,0,1]。那么假如现在一篇文章有1000个单词,那么每个词汇就要用一个1000维的向量来表述,其中只有单词所在的位置是1,其余位置全部是0,每个单词向量之间是无关的。这样做的好处是简单,但是不太符合现实情况。它忽略了单词之间的相关性,忽略了英语单词的时态,比如get和got都是一个意思,只是时态不一样而已。
第二种方法:word embedding方法
依旧是假设现在有一篇文章有1000个单词,但是我们现在不用1000维来表示,而是把这1000个单词映射到100维或者其他较小的维度,然后每个单词就是一个100维的向量。每个向量并不像one-hot方法那样都是稀疏的,而是都有具体的值。如下图所示,将这几个单词映射到2维空间。我们可以看到,映射后的两个单词如果在语义上比较相近,比如run和jump,都是动词,dog和rabbit都是动物。那么着两个单词的词向量(单词所在的点与原点连接的直线所在的向量)就离得比较近。这样做的好处就是同义词或者时态不同的词它们的词向量就会很接近,保留了文章的语义。
此外,词嵌入还有一个特性,可以做类比,比如
V(“hotter”) - V(“hot”) ≈V(“bigger”) - V(“big”)
V(“king”) - V(“queen”) ≈V(“uncle”) - V(“ant”)
这些都是语义空间的线性关系,可以做加减法,例如:
V(“hotter”) ≈V(“bigger”) - V(“big”) + V(“hot”)
https://blog.csdn.net/puredreammer/article/details/78330821