实际应用中的词向量维度使用注意
nlp业务中,无可避免地要使用词向量做特征构建,维度过大导致计算量复杂,在百万级数据处理中速度非常慢,为了权衡工程需要,我们要根据实际情况做选取。我对比了不同纬度在使用上的效果,确定一个合理的范围,供大家根据自己的业务操作。
wv.most_similar(['主管'], topn=30)
dim=10
[('部', 0.9898655414581299), ('人员', 0.9882362484931946), ('副', 0.9846471548080444), ('兼', 0.9810933470726013), ('总', 0.9808691143989563), ('督导', 0.9800705909729004), ('及', 0.9787922501564026), ('助理', 0.978703498840332), ('和', 0.9768193960189819), ('组', 0.9762864112854004), ('主任', 0.9733006358146667), ('经理', 0.9703651666641235), ('副经理', 0.9689823985099792), ('文员', 0.9678162932395935), ('实习', 0.967551052570343), ('运行', 0.9675098061561584), ('驻店', 0.9662008881568909), ('类', 0.966163158416748), ('见习', 0.9655701518058777), ('现场', 0.9648318886756897), ('日常', 0.9646518230438232), ('外派', 0.9643538594245911), ('岗', 0.9629733562469482), ('储备', 0.9622340202331543), ('干部', 0.9614977240562439), ('部长', 0.9574716091156006), ('维护员', 0.9573255181312561), ('讲解员', 0.9559121131896973), ('副总', 0.9538909196853638), ('协助', 0.9534264802932739)]
dim=100
[('高级专员', 0.7589221596717834), ('经理', 0.7558820247650146), ('人员', 0.7198249101638794), ('内勤', 0.7181121110916138), ('总监', 0.7111504077911377), ('业务主管', 0.7099388837814331), ('主管', 0.7039210796356201), ('老客户', 0.6933689117431641), ('调研', 0.6911988258361816), ('客服', 0.690113365650177), ('文员', 0.6886807084083557), ('对接', 0.6857904195785522), ('话务', 0.6799235343933105), ('外联', 0.6787949800491333), ('顾问', 0.6785675287246704), ('宣传员', 0.6771835088729858), ('运营部', 0.6687096357345581), ('职员', 0.6678380370140076), ('副经理', 0.6664285659790039), ('营销员', 0.6653130650520325), ('商务代表', 0.6643666625022888), ('稽查', 0.6642056703567505), ('副总', 0.6620935201644897), ('运营', 0.6619923114776611), ('订单', 0.6611194014549255), ('信息员', 0.6592134833335876), ('文职', 0.6564882397651672), ('部长', 0.6559721231460571), ('推广', 0.6552845239639282), ('运营商', 0.6543294787406921)]
dim=45
[('文员', 0.8804426193237305), ('经理', 0.868613600730896), ('人员', 0.862251341342926), ('内勤', 0.8554402589797974), ('业务主管', 0.8453125953674316), ('总监', 0.8363998532295227), ('客服', 0.827606201171875), ('高级专员', 0.8149360418319702), ('主管', 0.8101118803024292), ('副总', 0.7973485589027405), ('职员', 0.7962808012962341), ('支持', 0.7902414202690125), ('实习生', 0.7901945114135742), ('对接', 0.7889500856399536), ('业务员', 0.7869356870651245), ('顾问', 0.785954475402832), ('推广员', 0.7852128744125366), ('业务经理', 0.7840945720672607), ('员', 0.781104564666748), ('运营', 0.7787041068077087), ('负责人', 0.7733438014984131), ('老客户', 0.7725980877876282), ('推广', 0.7715122699737549), ('文职', 0.7711169719696045), ('调研', 0.7709962129592896), ('订单', 0.7706228494644165), ('渠道', 0.7694729566574097), ('业务', 0.7682620286941528), ('总助', 0.7671991586685181), ('信息员', 0.7657262086868286)]
由上可知,dim=10参数空间不足,查找时存在相关性不足现象,在实际使用中也发现了很多问题,这是客观存在的。
当dim=45,整体表现还是很好的,维度空间也不是那么大;dim=100时,当然表现还是很好的。
个人认为,在工程中使用40-60维度的词向量基本可满足需求,计算量也不是很大。
时刻记着自己要成为什么样的人!