首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用自定义Word2Vec嵌入而不是GloVe

使用自定义Word2Vec嵌入而不是GloVe
EN

Stack Overflow用户
提问于 2021-03-12 19:52:25
回答 1查看 94关注 0票数 0

我正在研究一个使用seq2seq模型的文本生成,其中使用了GloVe嵌入。我想在这段代码中使用自定义的Word2Vec (CBOW/Gensim)嵌入。有没有人可以帮我用我的自定义嵌入来代替GloVe?

代码语言:javascript
复制
    def initialize_embeddings(self):
        """Reads the GloVe word-embeddings and creates embedding matrix and word to index and index to word mapping."""
        
        # load the word embeddings
        self.word2vec = {}
        with open(glove_path%self.EMBEDDING_DIM, 'r') as file:
            for line in file:
                vectors = line.split()
                self.word2vec[vectors[0]] = np.asarray(vectors[1:], dtype="float32")```

                
        ```# get the embeddings matrix
        self.num_words = min(self.MAX_VOCAB_SIZE, len(self.word2idx)+1)
        self.embeddings_matrix = np.zeros((self.num_words, self.EMBEDDING_DIM))
        
        for word, idx in self.word2idx.items():
            if idx <= self.num_words:
                word_embeddings = self.word2vec.get(word)
                if word_embeddings is not None:
                    self.embeddings_matrix[idx] = word_embeddings
                    
        self.idx2word = {v:k for k,v in self.word2idx.items()}

此代码用于GloVe嵌入,该代码被转换为Word2Vec。我想加载我自己的Word2Vec嵌入。

EN

回答 1

Stack Overflow用户

发布于 2021-09-01 17:51:01

word2vecGlove是一种用于产生单词嵌入的技术,即用于将文本(一组句子)建模为计算机可读向量的技术。

虽然word2vec基于本地上下文(相邻单词)进行训练,但Glove将在整个文本或语料库中查找共现的单词,其方法更具全球性。

word2vec

word2vec有两种主要的方法,在这两种方法中,算法遍历句子的世界。对于每个当前单词w,它将尝试预测

w及其上下文中提取相邻单词,这是Skip-Gram approach

从上下文来看,这就是CBOW approach

因此,word2vec将为具有相似上下文的单词产生类似的嵌入,例如单数和复数的名词,或者两个同义词。

Glove

Glove模型背后的主要直觉是一个简单的观察,即单词-单词共现概率的比率有可能编码某种形式的意义。换句话说,嵌入是基于目标词对之间距离的计算。该模型通过分析两个目标词与其他探测词(上下文词)的共现情况来计算这两个目标词在文本中的距离。

https://nlp.stanford.edu/projects/glove/

例如,考虑目标单词"ice“和"steam”与词汇表中的各种探测单词的共现概率。以下是来自60亿字语料库的一些实际概率:

正如人们可能预料的那样,“冰”与“固体”共生的频率比“气体”的共生频率高,而“蒸汽”与“气体”的共生频率比“固体”的共生频率更高。这两个词都经常与它们的共同属性“水”一起出现,而这两个词都很少与“时尚”这个不相关的词一起出现。只有在概率比中,来自“水”和“时尚”等非区别性单词的噪声才能抵消,因此较大的值(远大于1)与特定于“冰”的属性很好地相关,而较小的值(远小于1)与特定于“蒸汽”的属性很好地相关。通过这种方式,概率比编码了与热力学相这一抽象概念相关的某种粗略形式的含义。

此外,Glove非常擅长类比,并且在word2vec数据集上表现良好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66599405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档