【问题标题】:Use custom Word2Vec embedding instead of GloVe使用自定义 Word2Vec 嵌入而不是 GloVe
【发布时间】:2021-03-12 11:52:24
【问题描述】:

我正在使用 seq2seq 模型进行文本生成,其中使用了 GloVe 嵌入。我想在此代码中使用嵌入的自定义 Word2Vec (CBOW/Gensim)。谁能帮忙使用我的自定义嵌入而不是 GloVe?

    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 嵌入。

【问题讨论】:

  • 您的代码有什么问题?您是否已经创建了自定义嵌入?如果是这样,您如何/在哪里保存它? (Gensim 已经有编写/读取自己的模型和其他词向量格式的方法 - 因此通常不需要像这种自定义读取/拆分这样的代码。)

标签: keras stanford-nlp gensim word2vec seq2seq


【解决方案1】:

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

虽然word2vec 在本地上下文(相邻词)上进行训练,但Glove 将在整个文本或语料库中寻找同时出现的词,它的方法更加全球化。

word2vec

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

  • 来自w 的相邻词及其上下文,这是Skip-Gram 方法

  • w 从其上下文来看,这是CBOW 方法

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

手套

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 2020-12-26
    相关资源
    最近更新 更多