def SGNS_process(self): print("Calculating the sim_sgns...") logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') self.sim_sgns = [] vec_sgns = Word2Vec(LineSentence('text8.txt'), vector_size=100, window=2, sg=1, hs=0, min_count=1, workers=multiprocessing.cpu_count()) tbar = tqdm(total=len(self.word_vector)) for word in self.word_vector: try: self.sim_sgns.append(vec_sgns.wv.similarity(word[0], word[1])) except: self.sim_sgns.append(0) tbar.update(1) tbar.close() # print(self.sim_sgns) f = open('sim_sgns', 'wb', encoding='utf-8') pickle.dump(self.sim_sgns, f) f.close()
时间: 2024-04-28 17:27:08 浏览: 23
这段代码看起来是在计算使用 Skip-gram with Negative Sampling (SGNS) 算法训练的词向量模型中,两个词语在词向量空间中的相似度,并将结果保存到一个文件中。
具体来说,代码首先创建了一个空的列表 self.sim_sgns,然后使用 gensim 库中的 Word2Vec 函数训练了一个 SGNS 模型,这个模型使用的是 'text8.txt' 文件中的数据进行训练,词向量的维度为 100,窗口大小为 2,采用的是 Skip-gram 算法并使用负采样,最小词频设置为 1,使用多线程训练。接着,代码遍历词向量列表 self.word_vector,对于每个词语,使用训练好的 SGNS 模型计算它们在词向量空间中的相似度,并将结果添加到 self.sim_sgns 中。如果计算相似度时出现了异常(比如某个词语在 SGNS 模型中不存在),则将相似度设为 0。最后,代码将计算得到的相似度列表 self.sim_sgns 保存到一个名为 'sim_sgns' 的二进制文件中,使用 pickle.dump() 函数实现。需要注意的是,这里的文件编码应该是二进制,因此无需指定 'utf-8' 编码。
相关问题
def SGNS_process(self): print("Calculating the sim_sgns...") logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') self.sim_sgns = [] vec_sgns = Word2Vec(LineSentence('text7.txt'), size=100, window=2, sg=1, hs=0, min_count=1, workers=multiprocessing.cpu_count()) tbar = tqdm(total=len(self.word_vector)) for word in self.word_vector: try: self.sim_sgns.append(vec_sgns.wv.similarity(word[0], word[1])) except: self.sim_sgns.append(0) tbar.update(1) tbar.close() # print(self.sim_sgns) f = open('sim_sgns', 'wb') pickle.dump(self.sim_sgns, f) f.close()
这段代码是一个Python函数,名为SGNS_process,用于计算文本中词语的相似度,其中用到了Word2Vec模型。
在这个函数中,sg=1是Word2Vec模型中的一个参数,指定了训练算法的类型,这里sg=1表示使用Skip-Gram算法进行训练。Skip-Gram是一种基于神经网络的词向量训练算法,它的基本思想是通过一个中心词预测它周围的上下文词,从而学习到词向量的表示。与之相对的是CBOW算法,它的思想是通过上下文词来预测中心词,Skip-Gram算法相对于CBOW算法更加适用于处理大规模语料库。
所以,sg=1的意思是使用Skip-Gram算法进行训练。
self.sim_svd = [] print("Calculating the sim_svd...") tbar = tqdm(total=len(self.word_vector)) for word in self.word_vector: if word[0] in self.vocab and word[1] in self.vocab: idx0 = self.vocab.index(word[0]) idx1 = self.vocab.index(word[1]) vector0 = self.result[idx0] vector1 = self.result[idx1] norm0 = np.linalg.norm(vector0) norm1 = np.linalg.norm(vector1) frac0 = np.dot(vector0, vector1) frac1 = norm0 * norm1 if frac1 != 0: sim = np.around(frac0 / frac1, 1) else: sim = 0 self.sim_svd.append(sim) else: self.sim_svd.append(0) tbar.update(1) tbar.close() # print(self.sim_svd) f = open('sim_svd', 'wb') pickle.dump(self.sim_svd, f) f.close()
这段代码看起来是在计算两个词语在词向量空间中的相似度,并将结果保存到了一个文件中。具体来说,代码首先创建了一个空的列表 self.sim_svd,然后通过遍历词向量列表 self.word_vector,计算每个词语与其他词语的相似度,并将结果添加到 self.sim_svd 中。计算相似度的公式使用的是余弦相似度,即两个向量的点积除以它们的模长之积。如果两个词语都在词汇表 self.vocab 中,就可以通过它们在词汇表中的索引找到它们在词向量矩阵 self.result 中对应的向量,并计算它们的点积和模长,从而得到它们的相似度;如果两个词语中有任何一个不在词汇表中,则将它们的相似度设为 0。最后,代码将计算得到的相似度列表 self.sim_svd 保存到一个名为 'sim_svd' 的二进制文件中,使用 pickle.dump() 函数实现。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)