Blog4 无监督深度关键短语生成——关键代码分析2

本文深入分析了Word2Vec的预处理、词库构建、网络初始化和负样本选中表初始化,并介绍了Doc2Vec模型的思想和代码实现。通过Gensim库训练Doc2Vec模型,生成文档向量并计算相似性。
摘要由CSDN通过智能技术生成

2021SC@SDUSC 

附所有代码链接:https://github.com/Jayshen0/ Unsupervised-Deep-Keyphrase-Generatio

本篇分析代码模块为:extract.py(二)

在上一篇博客里,我们对word2vec的思想以及部分代码进行了分析、学习,下面我们就来继续看一下word2vec模型整个过程到底是如何实现的。然后开始分析Doc2vec模型在本篇代码中是如何根据短语库来生成词向量的。

(二)Word2Vec模型源码再分析

附参考链接:机器学习算法实现解析——word2vec源码解析_null的专栏-CSDN博客_word2vec源码分析

 1.预处理:实现对sigmoid函数的近似计算

在word2vec中,将区间[−6,6](设置的参数MAX_EXP为6)等距离划分成EXP_TABLE_SIZE等份,并将每个区间中的sigmoid值计算好存入到数组expTable中,需要使用时直接从数组中查找。

expTable = (real *)malloc((EXP_TABLE_SIZE + 1) * sizeof(real));// 申请EXP_TABLE_SIZE+1个空间

        // 计算sigmoid值
        for (i = 0; i < EXP_TABLE_SIZE; i++) {
                expTable[i] = exp((i / (real)EXP_TABLE_SIZE * 2 - 1) * MAX_EXP); // Precompute the exp() table
                expTable[i] = expTable[i] / (expTable[i] + 1);                   // Precompute f(x) = x / (x + 1)
        }

2.构建词库

整个过程的流程如下:最主要的工作是对文本进行处理,包括低频词的处理,hash表的处理等。

这里写图片描述

 (1)首先,会在词库中增加一个“< /s>”的词,同时,在读取文本的过程中,将换行符“\n”也表示成该词:

if (ch == '\n') {
    strcpy(word, (char *)"</s>");// 换行符用</s>表示
    return;

(2)在循环的过程中,不断去读取文件中的每一个词,并在词库中进行查找,若存在该词,则该词的词频+1,否则,在词库中增加该词。最终,会过滤掉一些低频词。在得到最终的词库之前,还需根据词库中的词频对词库中的词进行排序。

① 计算词的hash值

int GetWordHash(char *word) {
        unsigned long long a, hash = 0;
        for (a = 0; a < strlen(word); a++) hash = hash * 257 + word[a];
        hash = hash % vocab_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值