问题描述
我需要生成一个嵌入矩阵来代替图层。我先验地知道了这10个特征(彼此等距)之间的相似性,并且由于没有足够的数据,所以无法通过训练生成矩阵。
为此,我必须生成10个任意大小(即10)的矢量,但它们的大小都相同,并且彼此等距,其中单个维的值介于-1和1之间,所有这在python中。
有人知道该怎么做吗?
解决方法
我相信您有一些单词作为特征,并且希望将它们表示为嵌入向量。
创建词嵌入的方法有多种,从最简单的方法到复杂但功能强大的方法,我都会提到其中的几种。
1。计数向量。
这是一种根据您的唯一标记创建矢量的方法。例如,如果词汇表包含三个单词,例如[“ and”,“ basketball”,“ more”],则文本“ more and more”将映射到向量[1、0、2]:单词“ and出现一次,单词“篮球”根本不出现,单词“更多”出现两次。这种文本表示形式称为单词袋,因为它完全失去了单词的顺序。
2。 TF-IDF(术语频率反文档频率)
计数向量的问题是它忽略了重要的 单词,因为它比普通单词具有更少的外观。在上面的示例中,术语“篮球”被忽略,而“更多”被赋予重要性。要克服这种TF-IDF方法,最适合的方法是,例如, 假设单词“和”,“篮球”和“更多”分别出现在训练集中的200、10和100个文本实例中:在这种情况下,最终向量将为[1 / log(200), 0 / log(10),2 / log(100)],大约等于[0.19,0., 0.43]。
3。预先训练的词向量。
这些是在Wikipedia或其他一般来源上获得的数百万个文本数据上经过训练的嵌入向量,它将具有所有可用的英语通用术语。有很多开源的预训练词向量可用。
- GoogleNews载体。
- GloVe
- 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']
有关创建单词嵌入的更多详细信息和其他方法,可以参考NCC编写的this beautiful article。
希望这能回答您的问题,快乐学习!