如何解决生成等距多维矢量作为嵌入矩阵
我需要生成一个嵌入矩阵来代替图层。我先验地知道了这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。
希望这能回答您的问题,快乐学习!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。