生成等距多维向量作为嵌入矩阵

Generate equidistant multidimensional vectors as Embedding matrix

我需要生成一个嵌入矩阵来代替层使用。我先验地知道 10 个特征之间的相似性(彼此等距),但我无法通过训练生成矩阵,因为我没有足够的数据。

要做到这一点,我必须生成 10 个任意大小的向量(即 10),但它们都具有相同的大小并且彼此等距,单个维度的值是 -1 和 1 之间的数字, 所有这些都在 python.

有人知道怎么做吗?

我相信你有一些词作为特征,你想将它们表示为嵌入向量。

有多种创建词嵌入的方法,我将从最简单到复杂但非常强大的方法中提及其中的几种。

1.计数向量。

这是一种从您的独特标记中创建向量的方法。例如,如果词汇表包含三个词,比如说 ["and", "basketball", "more"] ,那么文本 "more and more" 将被映射到向量 [1, 0, 2] :单词 "and ”出现一次,“篮球”二字根本没有出现,“多”字出现两次。这种文本表示被称为词袋,因为它完全失去了词的顺序。

2。 TF-IDF(词频逆文档频率)

计数向量的问题在于它忽略了重要的 词,因为与普通词相比,它的出现较少。在上面的例子中,术语“篮球”被忽略,“更多”被赋予了重要性。要克服这种 TF-IDF 方法最适合,例如, 假设单词 "and" 、 "basketball" 和 "more" 分别出现在训练集中的 200、10 和 100 个文本实例中:在这种情况下,最终向量将为 [1/log(200), 0/log(10), 2/log(100)] ,约等于 [0.19, 0., 0.43].

3。 Pre-trained 个词向量。

这些是根据维基百科或其他一般来源提供的数百万文本数据训练的嵌入向量,它将包含所有可用的英文常用术语。有很多open-sourced pre-trained词向量可用的一些,都是。

  1. Google 新闻矢量。
  2. 手套
  3. Facebook 的 fastText。

您可以根据模型的可用性选择向量维度,例如您可以为每个词选择50,100,200,300维向量。

from gensim.models import Word2Vec

#loading the downloaded model
model = Word2Vec.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True, norm_only=True)

#the model is loaded. It can be used to perform all of the tasks mentioned above.

# getting word vectors of a word
dog = model['dog']

更多细节和其他创建word embeddings的方法,可以参考this beautiful articleNCC写的

希望这能回答您的问题,祝您学习愉快!