Doc2Vec的negative、sample参数含义及vector_size取值方法咨询
你提供的是Gensim库中Doc2Vec的初始化参数:Doc2Vec(dm=0, vector_size=300, negative=5, hs=0, sample = 0, seed=0),以下是针对你疑问的解答:
1. vector_size参数的取值逻辑
你对该参数和过拟合的关联理解是对的:向量维度越高,能容纳的语义细节越丰富,但如果训练语料规模不足,模型会学到很多偶然出现的噪声特征,反而容易过拟合。
没有可以直接套用的严格计算公式,行业内常用的经验参考规则如下:
- 语料为几万十几万篇短文本(如评论、微博):100200维即可
- 语料为几十万百万级中长文本:300500维是常用区间
- 语料规模达到千万级以上:可尝试提升到800~1000维
如果想要更贴合你的业务场景,可以用下游任务效果验证:如果训练集效果远好于测试集,就适当降低维度;如果训练集拟合效果都很差,可以适当提升维度,同时兼顾你的算力承受范围即可。
2. 噪声词的定义
噪声词是Doc2Vec用负采样(Negative Sampling)机制训练时产生的负样本:
模型训练的核心目标是学会区分“和当前上下文/文档匹配的正确目标词”以及“不匹配的错误词”,如果只喂给模型正样本,模型很容易出现过拟合或者偷懒走捷径。所以每处理一个正确的正样本,都会随机抽取若干个和当前上下文完全不相关的词作为负样本让模型识别,这些随机抽取的负样本就是噪声词。
你贴的参数里negative=5,意思是每处理1个正样本,同步抽取5个噪声词参与训练,这个参数常规取值区间是210,小语料可以取偏高值,大语料取23即可。
3. sample=0的含义
sample参数是高频词随机下采样的阈值:默认逻辑下,出现频次越高的词(比如中文里的“的”“了”,英文里的“the”“a”)携带的有效语义信息越少,所以会按设定的阈值概率随机丢弃这些高频词,既可以减少无效计算,也能避免高频词过度主导向量的训练效果。
sample值越高,高频词被丢弃的概率越大;sample=0则代表完全关闭下采样功能,所有词无论出现频次多高,都会全部保留参与训练,一般只有你提前已经完成了词过滤操作(比如已经把所有停用词、无意义高频词清理完毕)的时候才会这么设置。
内容的提问来源于stack exchange,提问作者123456

