Nlp Gensim doc2vec,如何在每个步骤中获得损失函数的值 从gensim.models.doc2vec导入doc2vec,TaggedDocument 从随机导入洗牌 导入日志记录 logging.basicConfig(格式='%(asctime)s:%(levelname)s:%(message)s',level=logging.INFO) 标记的_数据=[] clas=['type1','type2','type3'] 对于clas中的cla: 将open(f'../data/jieba/{cla}train.txt',r',encoding='UTF-8')作为f: i=0 行=f.读行() 对于行中的行: taged_data.append(TaggedDocument(words=line.split('')[:-1],tags=[cla+str(i)]) i+=1 num\u doc=len(标记的\u数据) 洗牌(标记的数据) 模型=Doc2Vec(dm=1,向量大小=128,窗口=5,α=0.01,最小α=0.0001,最大声音大小=100000,样本=1e-5,工人=4,时代=3,hs=1,平均数=1) model.build\u vocab(标记的\u数据) model.train(文档=标记的数据,历元=model.历元,总例数=num\u文档) model.save(“d2v.model”)

Nlp Gensim doc2vec,如何在每个步骤中获得损失函数的值 从gensim.models.doc2vec导入doc2vec,TaggedDocument 从随机导入洗牌 导入日志记录 logging.basicConfig(格式='%(asctime)s:%(levelname)s:%(message)s',level=logging.INFO) 标记的_数据=[] clas=['type1','type2','type3'] 对于clas中的cla: 将open(f'../data/jieba/{cla}train.txt',r',encoding='UTF-8')作为f: i=0 行=f.读行() 对于行中的行: taged_data.append(TaggedDocument(words=line.split('')[:-1],tags=[cla+str(i)]) i+=1 num\u doc=len(标记的\u数据) 洗牌(标记的数据) 模型=Doc2Vec(dm=1,向量大小=128,窗口=5,α=0.01,最小α=0.0001,最大声音大小=100000,样本=1e-5,工人=4,时代=3,hs=1,平均数=1) model.build\u vocab(标记的\u数据) model.train(文档=标记的数据,历元=model.历元,总例数=num\u文档) model.save(“d2v.model”),nlp,gensim,doc2vec,Nlp,Gensim,Doc2vec,上面是我的代码,输出如下 2019-05-11 01:11:48,177 : INFO : EPOCH 1 - PROGRESS: at 3.64% examples, 307751 words/s, in_qsize 7, out_qsize 0 2019-05-11 01:11:49,195 : INFO : EPOCH 1 - PROGRESS: at 7.63% examples, 316010 words/s, in_qsize 7, out_qsize 0 2019-05-11 01

上面是我的代码,输出如下

2019-05-11 01:11:48,177 : INFO : EPOCH 1 - PROGRESS: at 3.64% examples, 307751 words/s, in_qsize 7, out_qsize 0
2019-05-11 01:11:49,195 : INFO : EPOCH 1 - PROGRESS: at 7.63% examples, 316010 words/s, in_qsize 7, out_qsize 0
2019-05-11 01:11:50,196 : INFO : EPOCH 1 - PROGRESS: at 11.44% examples, 316465 words/s, in_qsize 8, out_qsize 0

如何在每个步骤中获得损失函数的值,以便我可以将其可视化?

Gensims的
Doc2Vec
,至少在版本3.8.3(以及2020年5月)中,没有为
Word2Vec
提供的
compute\u loss
功能(但总是有点缺陷和不完整)。

(Gensim的
Word2Vec
包括一个初始化参数
compute_loss
,如果
True
,该参数将使模型在训练期间保持运行的总损失,然后可通过
get_training_loss()
请求。请参阅:

但是,这种培训损失报告是一项新功能,它还没有像大多数人预期的那样发挥作用

例如,至少通过gensim 3.8.3(2020年5月),您可以检索自上次调用
train()
(跨越多个时代)以来的总损失。而且,在较长的训练中,所选内部表示的精度问题会导致计数丢失最终停止。有些人可能最终会修复这一问题,这只是一个训练阶段的丢失

如果要重复对丢失进行采样,则需要多次调用
train()
(手动管理每次调用的epoch/alpha),这非常容易出错,或者利用此功能在培训中的某些点运行指定的函数。)


(另外:您可能不想使用如此小的
max_vocab_size=100000
来限制模型的最终词汇量。该设置将阻止初始词汇量调查跟踪超过100000个单词–在达到该阈值时丢弃许多计数,从而导致最终词汇量可能远小于100000,不一定包括100000个最常见的单词。如果在最初的调查期间内存使用是一个问题,那么使用大量的
max\u vocab\u size
,比您想要的最终计数大得多,这会阻止计数使用所有内存。使用
max\u final\u vocab
和/或
min\u count
将请在调查结束时限制词汇量,不要过早放弃。)

get_training_loss()方法是否适用于Doc2Vec?据我在上所看到的,该方法仅适用于Word2Vec。我不确定
get_training_loss()
Doc2Vec
上的
,但是类共享了足够多的代码,它可能会工作。尝试时会发生什么?我得到的“Doc2Vec”对象没有“get\u training\u loss”属性。快速查看Doc2Vec.py可以验证该方法没有在那里实现。您找到解决方案了吗?我现在正在研究相同的问题您可以在该函数中查看:.Howev呃,对我来说不起作用