使用GridSearchCV调优word2vec模型缺y_true参数报错如何解决
你的判断完全正确。
报错原因
你使用的accuracy_score是有监督分类任务的评价指标,计算时必须传入真实标签y_true和预测结果y_pred。而你当前用GridSearchCV训练无监督的Word2Vec模型,未传入标注数据y,scorer调用时缺少必要参数,因此触发该报错。
解决方案
Word2Vec作为无监督词向量预训练模型,不存在脱离使用场景的绝对最优参数,调参需要结合你的业务目标选择对应方案:
方案1:绑定下游任务调参(最常用)
如果训练Word2Vec是为了给后续分类、聚类等任务提供特征,直接把Word2Vec和下游模型串成Pipeline,用下游任务的标注数据调参即可,示例代码如下:
from sklearn.pipeline import Pipeline from sklearn.linear_model import LogisticRegression from sklearn.model_selection import GridSearchCV from gensim.sklearn_api import W2VTransformer from sklearn.metrics import accuracy_score, make_scorer # 定义流水线:先做词向量转换,再执行下游分类任务 pipe = Pipeline([ ('w2v', W2VTransformer()), ('clf', LogisticRegression()) ]) # 参数网格可同时包含Word2Vec和下游模型的参数 params_grid = { 'w2v__size': [100,200,300], 'w2v__window':[10,15,20], 'w2v__min_count': [1,2,3], 'w2v__sg':[0,1], 'clf__C': [1, 10] } # 传入标注好的文本数据X和标签y即可正常运行 s_model = GridSearchCV(pipe, params_grid, cv=3, scoring=make_scorer(accuracy_score)) s_model.fit(X, y) print(s_model.best_params_)
方案2:自定义无监督指标独立调参
如果没有下游任务,只需要评估词向量本身的质量,可以选择词相似度相关性、词类比准确率等无监督指标作为评价标准:
- 可以自己编写循环遍历所有参数组合,训练每个模型后计算自定义指标得分,保留得分最高的参数即可。
- 也可以用Optuna等支持自定义目标函数的调参库完成,相比网格搜索效率更高,不需要传入标注标签,仅需在目标函数中返回对应参数下的评估得分即可。
内容的提问来源于stack exchange,提问作者codex
相关产品推荐
相关产品推荐

