├── README.md ├── bert ├── cate_dict.txt ├── finetune_bert.py ├── finetune_test_data_sample.txt └── finetune_train_data_sample.txt └── gpt2 ├── finetune_gpt2.py ├── test_raw_data.txt └── train_raw_data.txt /README.md: -------------------------------------------------------------------------------- 1 | ## gpt2 2 | + finetune_gpt2.py 加载预训练模型并微调 3 | + train_raw_data.txt 微调GPT2使用的训练数据抽样 4 | + test_raw_data.txt 微调GPT2使用的测试数据抽样 5 | 6 | ## Bert 7 | + finetune_bert.py 加载预训练模型并微调分类任务 8 | + finetune_test_data_sample.txt 类目预测任务采样训练数据 9 | + finetune_train_data_sample.txt 类目预测任务采样验证数据 10 | + cate_dict.txt 类目id映射数据 11 | -------------------------------------------------------------------------------- /bert/cate_dict.txt: -------------------------------------------------------------------------------- 1 | 鞋靴>时尚女鞋>布鞋/绣花鞋 0 2 | 鞋靴>时尚女鞋>松糕鞋 1 3 | 母婴>营养辅食>宝宝零食 2 4 | 母婴>洗护用品>日常护理 3 5 | 母婴>童车童床>婴儿推车 4 6 | 母婴>奶粉>婴幼奶粉 5 7 | 母婴>尿裤湿巾>婴儿湿巾 6 8 | 母婴>奶粉>孕妈奶粉 7 9 | 母婴>营养辅食>果泥/果汁 8 10 | 鞋靴>时尚女鞋>马丁靴 9 11 | 母婴>营养辅食>DHA 10 12 | 母婴>尿裤湿巾>婴儿尿裤 11 13 | 母婴>尿裤湿巾>拉拉裤 12 14 | 鞋靴>时尚女鞋>坡跟鞋 13 15 | 母婴>尿裤湿巾>成人尿裤 14 16 | 母婴>喂养用品>奶瓶奶嘴 15 17 | 母婴>喂养用品>吸奶器 16 18 | 母婴>喂养用品>暖奶消毒 17 19 | 母婴>营养辅食>米粉/菜粉 18 20 | 母婴>喂养用品>儿童餐具 19 21 | 母婴>喂养用品>水壶/水杯 20 22 | 鞋靴>时尚女鞋>内增高 21 23 | 母婴>喂养用品>牙胶安抚 22 24 | 母婴>喂养用品>围兜/防溅衣 23 25 | 母婴>喂养用品>食物存储 24 26 | 母婴>洗护用品>宝宝护肤 25 27 | 母婴>洗护用品>洗发沐浴 26 28 | 母婴>洗护用品>奶瓶清洗 27 29 | 母婴>洗护用品>驱蚊防晒 28 30 | 鞋靴>时尚女鞋>防水台 29 31 | 母婴>营养辅食>钙铁锌/维生素 30 32 | 母婴>洗护用品>理发器 31 33 | 母婴>洗护用品>洗澡用具 32 34 | 母婴>洗护用品>婴儿口腔清洁 33 35 | 母婴>洗护用品>洗衣液/皂 34 36 | 母婴>营养辅食>清火/开胃 35 37 | 母婴>洗护用品>座便器 36 38 | 母婴>营养辅食>面条/粥 37 39 | 母婴>喂养用品>辅食料理机 38 40 | 母婴>童车童床>餐椅摇椅 39 41 | 母婴>童车童床>扭扭车 40 42 | 母婴>童车童床>婴儿床垫 41 43 | 母婴>寝居服饰>家居床品 42 44 | 母婴>妈妈专区>产后塑身 43 45 | 母婴>妈妈专区>防辐射服 44 46 | 母婴>妈妈专区>孕妇护肤 45 47 | 母婴>童车童床>婴儿床 46 48 | 母婴>妈妈专区>待产护理 47 49 | 母婴>妈妈专区>防溢乳垫 48 50 | 母婴>童车童床>学步车 49 51 | 母婴>童装童鞋>套装 50 52 | 母婴>童装童鞋>上衣 51 53 | 母婴>童装童鞋>裤子 52 54 | 母婴>童装童鞋>裙子 53 55 | 母婴>童装童鞋>羽绒服/棉服 54 56 | 母婴>童车童床>三轮车 55 57 | 母婴>童车童床>自行车 56 58 | 母婴>童车童床>电动车 57 59 | 母婴>童车童床>滑板车 58 60 | 母婴>妈妈专区>文胸/内裤 59 61 | 母婴>寝居服饰>婴儿外出服 60 62 | 母婴>寝居服饰>婴儿内衣 61 63 | 母婴>寝居服饰>婴儿鞋帽袜 62 64 | 母婴>寝居服饰>安全防护 63 65 | 母婴>寝居服饰>睡袋/抱被 64 66 | 母婴>寝居服饰>爬行垫 65 67 | 母婴>妈妈专区>妈咪包/背婴带 66 68 | 母婴>妈妈专区>孕妈装 67 69 | 母婴>妈妈专区>孕期营养 68 70 | 母婴>妈妈专区>月子装 69 71 | 母婴>安全座椅>安全座椅 70 72 | 母婴>童装童鞋>内衣/家居服 71 73 | 母婴>童装童鞋>亲子装 72 74 | 母婴>童装童鞋>儿童配饰 73 75 | 母婴>安全座椅>提篮式 74 76 | 礼品箱包>潮流女包>钱包 75 77 | 礼品箱包>功能箱包>电脑包 76 78 | 礼品箱包>功能箱包>旅行包 77 79 | 礼品箱包>功能箱包>休闲运动包 78 80 | 礼品箱包>功能箱包>登山包 79 81 | 礼品箱包>功能箱包>妈咪包 80 82 | 礼品箱包>功能箱包>相机包 81 83 | 母婴>童装童鞋>礼服/演出服 82 84 | 礼品箱包>礼品>火机烟具 83 85 | 礼品箱包>礼品>收藏品 84 86 | 礼品箱包>礼品>工艺礼品 85 87 | 礼品箱包>礼品>创意礼品 86 88 | 母婴>童装童鞋>户外/运动服 87 89 | 礼品箱包>礼品>美妆礼品 88 90 | 母婴>安全座椅>增高垫 89 91 | 礼品箱包>潮流女包>手拿包 90 92 | 礼品箱包>潮流女包>单肩包 91 93 | 礼品箱包>潮流女包>斜挎包 92 94 | 礼品箱包>功能箱包>书包 93 95 | 礼品箱包>潮流女包>双肩包 94 96 | 礼品箱包>潮流女包>手提包 95 97 | 礼品箱包>潮流女包>钥匙包 96 98 | 礼品箱包>潮流女包>卡包/零钱包 97 99 | 礼品箱包>功能箱包>拉杆箱 98 100 | 礼品箱包>功能箱包>旅行配件 99 101 | 礼品箱包>功能箱包>拉杆包 100 102 | 礼品箱包>功能箱包>腰包/胸包 101 103 | 礼品箱包>礼品>礼品文具 102 104 | 礼品箱包>礼品>军刀军具 103 105 | 礼品箱包>礼品>礼盒礼券 104 106 | 礼品箱包>奢侈品>钱包 105 107 | 礼品箱包>礼品>婚庆节庆 106 108 | 礼品箱包>奢侈品>太阳镜/眼镜框 107 109 | 礼品箱包>奢侈品>配件 108 110 | 礼品箱包>礼品>礼品定制 109 111 | 礼品箱包>礼品>古董文玩 110 112 | 礼品箱包>奢侈品>箱包 111 113 | 礼品箱包>奢侈品>服饰 112 114 | 礼品箱包>奢侈品>腰带 113 115 | 礼品箱包>奢侈品>饰品 114 116 | 礼品箱包>奢侈品>鞋靴 115 117 | 礼品箱包>奢侈品>名品腕表 116 118 | 食品饮料、保健食品>进口食品>冲调饮品 117 119 | 食品饮料、保健食品>进口食品>粮油调味 118 120 | 礼品箱包>奢侈品>高档化妆品 119 121 | 食品饮料、保健食品>地方特产>其他特产 120 122 | 礼品箱包>婚庆>婚嫁首饰 121 123 | 食品饮料、保健食品>地方特产>新疆 122 124 | 食品饮料、保健食品>地方特产>福建 123 125 | 食品饮料、保健食品>地方特产>湖南 124 126 | 食品饮料、保健食品>地方特产>四川 125 127 | 食品饮料、保健食品>休闲食品>休闲零食 126 128 | 食品饮料、保健食品>休闲食品>糖果/巧克力 127 129 | 礼品箱包>婚庆>婚纱礼服 128 130 | 食品饮料、保健食品>进口食品>饼干蛋糕 129 131 | 礼品箱包>婚庆>婚庆礼品/用品 130 132 | 食品饮料、保健食品>进口食品>糖果/巧克力 131 133 | 食品饮料、保健食品>地方特产>北京 132 134 | 食品饮料、保健食品>地方特产>内蒙古 133 135 | 食品饮料、保健食品>地方特产>云南 134 136 | 食品饮料、保健食品>进口食品>休闲零食 135 137 | 食品饮料、保健食品>地方特产>东北 136 138 | 食品饮料、保健食品>休闲食品>坚果炒货 137 139 | 食品饮料、保健食品>进口食品>牛奶 138 140 | 食品饮料、保健食品>地方特产>山西 139 141 | 食品饮料、保健食品>休闲食品>肉干肉脯 140 142 | 食品饮料、保健食品>休闲食品>蜜饯果干 141 143 | 食品饮料、保健食品>休闲食品>饼干蛋糕 142 144 | 食品饮料、保健食品>粮油调味>米面杂粮 143 145 | 食品饮料、保健食品>粮油调味>食用油 144 146 | 食品饮料、保健食品>粮油调味>调味品 145 147 | 食品饮料、保健食品>茗茶>花草茶 146 148 | 食品饮料、保健食品>粮油调味>南北干货 147 149 | 食品饮料、保健食品>粮油调味>方便食品 148 150 | 食品饮料、保健食品>饮料冲调>饮用水 149 151 | 食品饮料、保健食品>饮料冲调>饮料 150 152 | 食品饮料、保健食品>饮料冲调>牛奶乳品 151 153 | 食品饮料、保健食品>饮料冲调>咖啡/奶茶 152 154 | 食品饮料、保健食品>饮料冲调>冲饮谷物 153 155 | 食品饮料、保健食品>饮料冲调>蜂蜜/柚子茶 154 156 | 食品饮料、保健食品>食品礼券>卡券 155 157 | 食品饮料、保健食品>茗茶>铁观音 156 158 | 食品饮料、保健食品>茗茶>龙井 157 159 | 食品饮料、保健食品>粮油调味>有机食品 158 160 | 食品饮料、保健食品>茗茶>绿茶 159 161 | 食品饮料、保健食品>茗茶>乌龙茶 160 162 | 食品饮料、保健食品>茗茶>花果茶 161 163 | 食品饮料、保健食品>茗茶>养生茶 162 164 | 食品饮料、保健食品>茗茶>黑茶 163 165 | 食品饮料、保健食品>茗茶>其它茶 164 166 | 珠宝>时尚饰品>手链/脚链 165 167 | 珠宝>时尚饰品>耳饰 166 168 | 食品饮料、保健食品>饮料冲调>成人奶粉 167 169 | 珠宝>时尚饰品>毛衣链 168 170 | 食品饮料、保健食品>食品礼券>月饼 169 171 | 食品饮料、保健食品>食品礼券>粽子 170 172 | 食品饮料、保健食品>茗茶>普洱 171 173 | 食品饮料、保健食品>茗茶>红茶 172 174 | 食品饮料、保健食品>茗茶>白茶 173 175 | 珠宝>时尚饰品>发饰/发卡 174 176 | 珠宝>时尚饰品>饰品配件 175 177 | 珠宝>黄金>黄金吊坠 176 178 | 珠宝>时尚饰品>项链 177 179 | 珠宝>时尚饰品>戒指 178 180 | 珠宝>黄金>黄金项链 179 181 | 珠宝>时尚饰品>胸针 180 182 | 珠宝>金银投资>投资金 181 183 | 珠宝>黄金>黄金转运珠 182 184 | 珠宝>黄金>黄金手镯/手链/脚链 183 185 | 珠宝>黄金>黄金耳饰 184 186 | 珠宝>彩宝>珊瑚 185 187 | 珠宝>黄金>黄金戒指 186 188 | 珠宝>时尚饰品>婚庆饰品 187 189 | 珠宝>K金饰品>K金吊坠 188 190 | 珠宝>K金饰品>K金项链 189 191 | 珠宝>K金饰品>K金手镯/手链/脚链 190 192 | 珠宝>K金饰品>K金戒指 191 193 | 珠宝>K金饰品>K金耳饰 192 194 | 珠宝>彩宝>琥珀/蜜蜡 193 195 | 珠宝>彩宝>碧玺 194 196 | 珠宝>彩宝>红宝石/蓝宝石 195 197 | 珠宝>金银投资>投资银 196 198 | 珠宝>彩宝>坦桑石 197 199 | 珠宝>彩宝>祖母绿 198 200 | 珠宝>金银投资>投资收藏 199 201 | 珠宝>彩宝>其他天然宝石 200 202 | 珠宝>彩宝>项链/吊坠 201 203 | 珠宝>彩宝>耳饰 202 204 | 珠宝>彩宝>戒指 203 205 | 珠宝>彩宝>手镯/手链 204 206 | 珠宝>铂金>铂金戒指 205 207 | 珠宝>铂金>铂金耳饰 206 208 | 珠宝>木手串/把件>小叶紫檀 207 209 | 珠宝>木手串/把件>黄花梨 208 210 | 珠宝>木手串/把件>沉香木 209 211 | 珠宝>彩宝>葡萄石 210 212 | 珠宝>木手串/把件>金丝楠 211 213 | 珠宝>木手串/把件>其他 212 214 | 珠宝>木手串/把件>檀香 213 215 | 珠宝>珍珠>珍珠项链 214 216 | 珠宝>珍珠>珍珠耳饰 215 217 | 珠宝>珍珠>珍珠戒指 216 218 | 珠宝>铂金>铂金项链/吊坠 217 219 | 珠宝>铂金>铂金手镯/手链/脚链 218 220 | 珠宝>木手串/把件>菩提 219 221 | 珠宝>珍珠>珍珠吊坠 220 222 | 珠宝>珍珠>珍珠手链 221 223 | 珠宝>珍珠>珍珠胸针 222 224 | 汽车用品>维修保养>机油 223 225 | 珠宝>木手串/把件>橄榄核/核桃 224 226 | 汽车用品>维修保养>正时皮带 225 227 | 汽车用品>维修保养>添加剂 226 228 | 汽车用品>维修保养>汽车喇叭 227 229 | 汽车用品>维修保养>防冻液 228 230 | 汽车用品>维修保养>火花塞 229 231 | 汽车用品>维修保养>滤清器 230 232 | 汽车用品>维修保养>汽车玻璃 231 233 | 汽车用品>维修保养>减震器 232 234 | 汽车用品>维修保养>柴机油/辅助油 233 235 | 汽车用品>维修保养>雨刷 234 236 | 汽车用品>维修保养>车灯 235 237 | 汽车用品>维修保养>轮胎 236 238 | 汽车用品>维修保养>后视镜 237 239 | 汽车用品>维修保养>刹车片/盘 238 240 | 汽车用品>维修保养>维修配件 239 241 | 汽车用品>维修保养>轮毂 240 242 | 汽车用品>维修保养>底盘装甲/护板 241 243 | 汽车用品>维修保养>蓄电池 242 244 | 汽车用品>维修保养>改装配件 243 245 | 汽车用品>车载电器>安全预警仪 244 246 | 汽车用品>车载电器>车载影音 245 247 | 汽车用品>车载电器>净化器 246 248 | 汽车用品>车载电器>车载电台 247 249 | 汽车用品>车载电器>车载电器配件 248 250 | 汽车用品>车载电器>智能车机 249 251 | 汽车用品>车载电器>冰箱 250 252 | 汽车用品>维修保养>贴膜 251 253 | 汽车用品>维修保养>汽修工具 252 254 | 汽车用品>车载电器>导航仪 253 255 | 汽车用品>车载电器>蓝牙设备 254 256 | 汽车用品>车载电器>吸尘器 255 257 | 汽车用品>美容清洗>车蜡 256 258 | 汽车用品>美容清洗>补漆笔 257 259 | 汽车用品>美容清洗>玻璃水 258 260 | 汽车用品>美容清洗>清洁剂 259 261 | 汽车用品>美容清洗>洗车水枪 260 262 | 汽车用品>车载电器>行车记录仪 261 263 | 汽车用品>车载电器>倒车雷达 262 264 | 汽车用品>车载电器>电源 263 265 | 汽车用品>车载电器>智能驾驶 264 266 | 汽车用品>车载电器>汽车音响 265 267 | 汽车用品>车载电器>车载生活电器 266 268 | 汽车用品>美容清洗>洗车工具 267 269 | 汽车用品>汽车装饰>后备箱垫 268 270 | 汽车用品>汽车装饰>头枕腰靠 269 271 | 汽车用品>美容清洗>镀晶镀膜 270 272 | 汽车用品>美容清洗>打蜡机 271 273 | 汽车用品>美容清洗>洗车配件 272 274 | 汽车用品>美容清洗>洗车机 273 275 | 汽车用品>美容清洗>毛巾掸子 274 276 | 汽车用品>汽车装饰>脚垫 275 277 | 汽车用品>汽车装饰>座垫 276 278 | 汽车用品>汽车装饰>座套 277 279 | 汽车用品>汽车装饰>车身装饰件 278 280 | 汽车用品>安全自驾>胎压监测 279 281 | 汽车用品>安全自驾>应急救援 280 282 | 汽车用品>安全自驾>保温箱 281 283 | 汽车用品>安全自驾>储物箱 282 284 | 汽车用品>安全自驾>自驾野营 283 285 | 汽车用品>汽车服务>清洗美容 284 286 | 汽车用品>汽车服务>功能升级 285 287 | 汽车用品>汽车服务>保养维修 286 288 | 汽车用品>汽车服务>驾驶培训 287 289 | 汽车用品>赛事改装>悬挂系统 288 290 | 汽车用品>赛事改装>排气系统 289 291 | 汽车用品>汽车装饰>方向盘套 290 292 | 汽车用品>汽车装饰>香水 291 293 | 汽车用品>安全自驾>安全座椅 292 294 | 汽车用品>安全自驾>地锁 293 295 | 汽车用品>汽车装饰>空气净化 294 296 | 汽车用品>汽车装饰>挂件摆件 295 297 | 汽车用品>汽车装饰>功能小件 296 298 | 汽车用品>汽车装饰>车衣 297 299 | 汽车用品>安全自驾>防盗设备 298 300 | 汽车用品>安全自驾>摩托车 299 301 | 汽车用品>安全自驾>充气泵 300 302 | 汽车用品>安全自驾>摩托车装备 301 303 | 汽车用品>赛事改装>赛事服装 302 304 | 汽车用品>赛事改装>赛事用品 303 305 | 汽车用品>赛事改装>制动系统 304 306 | 汽车用品>赛事改装>进气系统 305 307 | 汽车用品>赛事改装>电子管理 306 308 | 汽车用品>赛事改装>车身强化 307 309 | 运动健康>运动鞋包>板鞋 308 310 | 运动健康>运动鞋包>足球鞋 309 311 | 运动健康>运动鞋包>专项运动鞋 310 312 | 运动健康>运动鞋包>训练鞋 311 313 | 运动健康>运动鞋包>拖鞋 312 314 | 运动健康>运动鞋包>运动包 313 315 | 运动健康>运动服饰>羽绒服 314 316 | 运动健康>运动服饰>棉服 315 317 | 运动健康>运动服饰>运动裤 316 318 | 运动健康>运动服饰>夹克/风衣 317 319 | 运动健康>运动服饰>卫衣/套头衫 318 320 | 运动健康>运动服饰>T恤 319 321 | 运动健康>运动服饰>健身服 320 322 | 运动健康>运动服饰>运动背心 321 323 | 运动健康>骑行运动>电动车 322 324 | 汽车用品>赛事改装>赛事座椅 323 325 | 玩具乐器>健身玩具>炫舞毯 324 326 | 玩具乐器>健身玩具>户外玩具 325 327 | 玩具乐器>健身玩具>戏水玩具 326 328 | 运动健康>运动鞋包>跑步鞋 327 329 | 玩具乐器>健身玩具>爬行垫/毯 328 330 | 运动健康>运动鞋包>休闲鞋 329 331 | 运动健康>运动鞋包>篮球鞋 330 332 | 运动健康>运动鞋包>帆布鞋 331 333 | 运动健康>运动鞋包>乒羽网鞋 332 334 | 运动健康>运动服饰>乒羽网服 333 335 | 运动健康>运动服饰>运动配饰 334 336 | 运动健康>运动服饰>套装 335 337 | 运动健康>运动服饰>毛衫/线衫 336 338 | 运动健康>骑行运动>折叠车 337 339 | 运动健康>骑行运动>山地车/公路车 338 340 | 运动健康>骑行运动>平衡车 339 341 | 运动健康>骑行运动>其他整车 340 342 | 运动健康>垂钓用品>鱼竿鱼线 341 343 | 运动健康>垂钓用品>浮漂鱼饵 342 344 | 运动健康>游泳用品>泳帽 343 345 | 运动健康>游泳用品>男士泳衣 344 346 | 运动健康>游泳用品>泳镜 345 347 | 运动健康>游泳用品>比基尼 346 348 | 运动健康>游泳用品>其它 347 349 | 运动健康>户外鞋服>速干衣裤 348 350 | 运动健康>户外鞋服>休闲衣裤 349 351 | 运动健康>骑行运动>骑行服 350 352 | 运动健康>户外鞋服>软壳衣裤 351 353 | 运动健康>户外鞋服>T恤 352 354 | 运动健康>户外鞋服>功能内衣 353 355 | 运动健康>骑行运动>骑行装备 354 356 | 运动健康>垂钓用品>钓鱼桌椅 355 357 | 运动健康>垂钓用品>钓鱼配件 356 358 | 运动健康>垂钓用品>钓箱鱼包 357 359 | 运动健康>垂钓用品>其它 358 360 | 运动健康>游泳用品>游泳包防水包 359 361 | 运动健康>游泳用品>女士泳衣 360 362 | 运动健康>户外鞋服>冲锋衣裤 361 363 | 运动健康>户外鞋服>徒步鞋 362 364 | 运动健康>户外鞋服>滑雪服 363 365 | 运动健康>户外鞋服>羽绒服/棉服 364 366 | 运动健康>户外鞋服>抓绒衣裤 365 367 | 运动健康>户外鞋服>户外风衣 366 368 | 运动健康>户外鞋服>军迷服饰 367 369 | 运动健康>户外鞋服>登山鞋 368 370 | 运动健康>户外鞋服>雪地靴 369 371 | 运动健康>户外装备>望远镜 370 372 | 运动健康>户外鞋服>休闲鞋 371 373 | 运动健康>户外装备>睡袋/吊床 372 374 | 运动健康>户外装备>登山攀岩 373 375 | 运动健康>户外装备>户外配饰 374 376 | 运动健康>户外装备>户外照明 375 377 | 运动健康>户外装备>户外工具 376 378 | 运动健康>健身训练>哑铃 377 379 | 运动健康>健身训练>踏步机 378 380 | 运动健康>户外鞋服>越野跑鞋 379 381 | 运动健康>户外装备>便携桌椅床 380 382 | 运动健康>户外装备>军迷用品 381 383 | 运动健康>户外装备>滑雪装备 382 384 | 运动健康>户外装备>极限户外 383 385 | 运动健康>户外装备>冲浪潜水 384 386 | 运动健康>健身训练>综合训练器 385 387 | 运动健康>健身训练>其他大型器械 386 388 | 运动健康>健身训练>其他中小型器材 387 389 | 运动健康>体育用品>轮滑滑板 388 390 | 运动健康>户外鞋服>工装鞋 389 391 | 运动健康>户外鞋服>溯溪鞋 390 392 | 运动健康>户外鞋服>沙滩/凉拖 391 393 | 运动健康>户外鞋服>户外袜 392 394 | 运动健康>户外装备>帐篷/垫子 393 395 | 运动健康>户外装备>背包 394 396 | 运动健康>户外装备>户外仪表 395 397 | 运动健康>户外装备>旅游用品 396 398 | 运动健康>户外装备>野餐烧烤 397 399 | 运动健康>户外装备>救援装备 398 400 | 运动健康>健身训练>瑜伽舞蹈 399 401 | 运动健康>健身训练>仰卧板/收腹机 400 402 | 运动健康>健身训练>跑步机 401 403 | 运动健康>健身训练>运动护具 402 404 | 运动健康>体育用品>羽毛球 403 405 | 运动健康>体育用品>足球 404 406 | 运动健康>体育用品>网球 405 407 | 运动健康>体育用品>排球 406 408 | 运动健康>体育用品>台球 407 409 | 运动健康>体育用品>高尔夫 408 410 | 运动健康>体育用品>棋牌麻将 409 411 | 运动健康>健身训练>甩脂机 410 412 | 运动健康>健身训练>健身车/动感单车 411 413 | 运动健康>体育用品>其他 412 414 | 运动健康>健身训练>武术搏击 413 415 | 运动健康>体育用品>乒乓球 414 416 | 运动健康>体育用品>篮球 415 417 | 玩具乐器>适用年龄>0-6个月 416 418 | 玩具乐器>适用年龄>6-12个月 417 419 | 玩具乐器>适用年龄>3-6岁 418 420 | 玩具乐器>适用年龄>6-14岁 419 421 | 玩具乐器>适用年龄>14岁以上 420 422 | 玩具乐器>适用年龄>1-3岁 421 423 | 玩具乐器>毛绒布艺>毛绒/布艺 422 424 | 玩具乐器>娃娃玩具>智能娃娃 423 425 | 玩具乐器>创意减压>减压玩具 424 426 | 玩具乐器>遥控/电动>遥控车 425 427 | 玩具乐器>遥控/电动>遥控船 426 428 | 玩具乐器>遥控/电动>机器人 427 429 | 玩具乐器>遥控/电动>轨道/助力 428 430 | 玩具乐器>遥控/电动>遥控飞机 429 431 | 玩具乐器>毛绒布艺>靠垫/抱枕 430 432 | 玩具乐器>娃娃玩具>芭比娃娃 431 433 | 玩具乐器>娃娃玩具>卡通娃娃 432 434 | 玩具乐器>创意减压>创意玩具 433 435 | 生鲜>水果>香蕉 434 436 | 生鲜>水果>梨 435 437 | 玩具乐器>乐器>钢琴 436 438 | 生鲜>水果>桔/橘 437 439 | 生鲜>水果>柠檬 438 440 | 玩具乐器>乐器>电子琴/电钢琴 439 441 | 玩具乐器>乐器>吉他/尤克里里 440 442 | 生鲜>水果>桃/李/杏 441 443 | 玩具乐器>乐器>西洋管弦 442 444 | 生鲜>海鲜水产>海参 443 445 | 生鲜>饮品甜品>冷藏果蔬汁 444 446 | 生鲜>蔬菜>叶菜类 445 447 | 玩具乐器>乐器>民族管弦乐器 446 448 | 医药保健>中西药品>补肾壮阳 447 449 | 玩具乐器>乐器>乐器配件 448 450 | 玩具乐器>乐器>电脑音乐 449 451 | 医药保健>中西药品>维矿物质 450 452 | 玩具乐器>乐器>工艺礼品乐器 451 453 | 玩具乐器>乐器>口琴/口风琴/竖笛 452 454 | 玩具乐器>乐器>手风琴 453 455 | 生鲜>水果>苹果 454 456 | 玩具乐器>乐器>打击乐器 455 457 | 生鲜>水果>橙子 456 458 | 生鲜>水果>奇异果/猕猴桃 457 459 | 生鲜>水果>芒果 458 460 | 生鲜>水果>火龙果 459 461 | 生鲜>水果>葡萄/提子 460 462 | 生鲜>水果>柚子 461 463 | 生鲜>水果>牛油果 462 464 | 生鲜>水果>菠萝/凤梨 463 465 | 生鲜>海鲜水产>鱼类 464 466 | 生鲜>水果>更多水果 465 467 | 生鲜>海鲜水产>贝类 466 468 | 整车>全新整车>微型车 467 469 | 生鲜>水果>水果礼盒/券 468 470 | 生鲜>猪牛羊肉>牛肉 469 471 | 生鲜>海鲜水产>虾类 470 472 | 生鲜>海鲜水产>蟹类 471 473 | 生鲜>海鲜水产>海产干货 472 474 | 生鲜>海鲜水产>其他水产 473 475 | 生鲜>海鲜水产>海产礼盒 474 476 | 生鲜>禽肉蛋品>鸡肉 475 477 | 生鲜>冷冻食品>水饺/馄饨 476 478 | 医药保健>中西药品>风湿骨外伤 477 479 | 医药保健>中西药品>安神助眠 478 480 | 医药保健>中西药品>补气养血 479 481 | 医药保健>中西药品>耳鼻喉用药 480 482 | 医药保健>中西药品>皮肤用药 481 483 | 医药保健>中西药品>止痛镇痛 482 484 | 医药保健>中西药品>心脑血管 483 485 | 医药保健>中西药品>肠胃消化 484 486 | 医药保健>中西药品>感冒咳嗽 485 487 | 医药保健>中西药品>脾肾亏损 486 488 | 医药保健>中西药品>阳痿不育 487 489 | 医药保健>中西药品>前列腺增生 488 490 | 医药保健>中西药品>妇科炎症 489 491 | 医药保健>中西药品>更年期 490 492 | 医药保健>中西药品>眼科用药 491 493 | 医药保健>中西药品>孕产期 492 494 | 医药保健>中西药品>阴道炎 493 495 | 医药保健>中西药品>月经不调 494 496 | 医药保健>中西药品>尿路感染 495 497 | 医药保健>营养保健>调节免疫 496 498 | 医药保健>中西药品>避孕用药 497 499 | 医药保健>营养保健>美体塑身 498 500 | 医药保健>营养保健>骨骼健康 499 501 | 医药保健>营养保健>美容养颜 500 502 | 医药保健>营养保健>肠胃养护 501 503 | 医药保健>营养保健>明目益智 502 504 | 医药保健>营养保健>缓解疲劳 503 505 | 医药保健>营养保健>清咽利喉 504 506 | 医药保健>滋补品>人参/西洋参 505 507 | 医药保健>滋补品>药食同源 506 508 | 医药保健>营养成分>氨糖/钙片 507 509 | 医药保健>营养成分>胶原蛋白 508 510 | 医药保健>营养成分>益生菌 509 511 | 医药保健>滋补品>蜂产品 510 512 | 医药保健>营养成分>叶酸 511 513 | 医药保健>营养成分>左旋肉碱 512 514 | 医药保健>营养成分>鱼油/磷脂 513 515 | 医药保健>滋补品>阿胶 514 516 | 医药保健>滋补品>燕窝 515 517 | 医药保健>滋补品>冬虫夏草 516 518 | 医药保健>滋补品>三七 517 519 | 珠宝>银饰>银吊坠/项链 518 520 | 珠宝>银饰>银手镯/手链/脚链 519 521 | 珠宝>银饰>银戒指 520 522 | 家居家装>家纺>毯子 521 523 | 电脑办公>电脑配件>硬盘 522 524 | 珠宝>银饰>银耳饰 523 525 | 珠宝>银饰>足银手镯 524 526 | 珠宝>钻石>裸钻 525 527 | 珠宝>钻石>钻戒 526 528 | 珠宝>钻石>钻石耳饰 527 529 | 珠宝>银饰>宝宝银饰 528 530 | 珠宝>钻石>钻石手镯/手链 529 531 | 珠宝>翡翠玉石>项链/吊坠 530 532 | 珠宝>翡翠玉石>戒指 531 533 | 珠宝>翡翠玉石>耳饰 532 534 | 珠宝>翡翠玉石>挂件/摆件/把件 533 535 | 珠宝>翡翠玉石>玉石孤品 534 536 | 珠宝>水晶玛瑙>项链/吊坠 535 537 | 珠宝>水晶玛瑙>耳饰 536 538 | 家居家装>宠物生活>出行装备 537 539 | 家居家装>宠物生活>洗护美容 538 540 | 珠宝>翡翠玉石>手镯/手串 539 541 | 珠宝>钻石>钻石项链/吊坠 540 542 | 珠宝>水晶玛瑙>手镯/手链/脚链 541 543 | 珠宝>水晶玛瑙>戒指 542 544 | 珠宝>水晶玛瑙>头饰/胸针 543 545 | 图书、音像、电子书刊>英文原版>少儿 544 546 | 珠宝>水晶玛瑙>摆件/挂件 545 547 | 图书、音像、电子书刊>英文原版>文学 546 548 | 图书、音像、电子书刊>人文社科>哲学 547 549 | 玩具乐器>积木拼插>磁力棒 548 550 | 图书、音像、电子书刊>人文社科>文化 549 551 | 玩具乐器>动漫玩具>电影周边 550 552 | 图书、音像、电子书刊>人文社科>社会科学 551 553 | 图书、音像、电子书刊>生活>烹饪美食 552 554 | 玩具乐器>动漫玩具>卡通周边 553 555 | 图书、音像、电子书刊>科技>电子通信 554 556 | 图书、音像、电子书刊>港台图书>文化/学术 555 557 | 电脑办公>电脑配件>SSD固态硬盘 556 558 | 图书、音像、电子书刊>英文原版>商务投资 557 559 | 电脑办公>电脑配件>显示器 558 560 | 图书、音像、电子书刊>港台图书>少儿 559 561 | 玩具乐器>动漫玩具>网游周边 560 562 | 玩具乐器>益智玩具>摇铃/床铃 561 563 | 图书、音像、电子书刊>其他>套装书 562 564 | 玩具乐器>益智玩具>健身架 563 565 | 玩具乐器>益智玩具>早教启智 564 566 | 玩具乐器>益智玩具>拖拉玩具 565 567 | 玩具乐器>积木拼插>积木 566 568 | 玩具乐器>积木拼插>拼图 567 569 | 玩具乐器>积木拼插>立体拼插 568 570 | 玩具乐器>DIY玩具>手工彩泥 569 571 | 玩具乐器>DIY玩具>绘画工具 570 572 | 玩具乐器>DIY玩具>情景玩具 571 573 | 图书、音像、电子书刊>英文原版>英语学习与考试 572 574 | 图书、音像、电子书刊>英文原版>传记 573 575 | 图书、音像、电子书刊>英文原版>励志 574 576 | 图书、音像、电子书刊>人文社科>国学 575 577 | 图书、音像、电子书刊>港台图书>艺术/设计/收藏 576 578 | 图书、音像、电子书刊>港台图书>经济管理 577 579 | 手机>手机通讯>手机 578 580 | 手机>手机通讯>对讲机 579 581 | 手机>运营商>合约机 580 582 | 手机>运营商>办套餐 581 583 | 手机>运营商>装宽带 582 584 | 手机>手机配件>手机耳机 583 585 | 手机>手机配件>手机贴膜 584 586 | 手机>手机配件>手机存储卡 585 587 | 手机>手机配件>手机电池 586 588 | 手机>手机配件>手机饰品 587 589 | 手机>手机配件>移动电源 588 590 | 手机>手机配件>蓝牙耳机 589 591 | 手机>手机配件>拍照配件 590 592 | 家居家装>生活日用>缝纫/针织用品 591 593 | 家居家装>生活日用>洗晒/熨烫 592 594 | 家居家装>生活日用>浴室用品 593 595 | 家用电器>厨房小电>榨汁机 594 596 | 家用电器>大 家 电>家电配件 595 597 | 家居家装>生活日用>保暖防护 596 598 | 家居家装>生活日用>雨伞雨具 597 599 | 家用电器>大 家 电>酒柜 598 600 | 手机>手机配件>创意配件 599 601 | 家居家装>家纺>布艺软饰 600 602 | 手机>手机配件>苹果周边 601 603 | 电脑办公>电脑整机>平板电脑 602 604 | 手机>手机配件>充电器 603 605 | 手机>手机配件>数据线 604 606 | 手机>手机配件>手机保护套 605 607 | 手机>手机配件>车载配件 606 608 | 电脑办公>电脑整机>平板电脑配件 607 609 | 电脑办公>电脑整机>笔记本 608 610 | 手机>手机配件>手机支架 609 611 | 家用电器>大 家 电>平板电视 610 612 | 电脑办公>电脑整机>游戏本 611 613 | 家用电器>大 家 电>空调 612 614 | 家用电器>大 家 电>冰箱 613 615 | 家用电器>大 家 电>洗衣机 614 616 | 家用电器>大 家 电>家庭影院 615 617 | 电脑办公>电脑配件>CPU 616 618 | 家用电器>大 家 电>DVD/电视盒子 617 619 | 家用电器>大 家 电>迷你音响 618 620 | 家用电器>厨卫大电>油烟机 619 621 | 家用电器>厨卫大电>燃气灶 620 622 | 玩具乐器>模型玩具>仿真模型 621 623 | 玩具乐器>模型玩具>拼插模型 622 624 | 玩具乐器>模型玩具>收藏爱好 623 625 | 家用电器>厨房小电>料理机 624 626 | 家用电器>大 家 电>冷柜/冰吧 625 627 | 家用电器>厨房小电>电压力锅 626 628 | 家用电器>厨房小电>豆浆机 627 629 | 家用电器>厨房小电>咖啡机 628 630 | 家用电器>大 家 电>功放 629 631 | 家用电器>大 家 电>回音壁/Soundbar 630 632 | 家用电器>厨卫大电>消毒柜 631 633 | 电脑办公>电脑整机>笔记本配件 632 634 | 电脑办公>电脑配件>声卡/扩展卡 633 635 | 电脑办公>电脑整机>服务器/工作站 634 636 | 家居家装>生活日用>净化除味 635 637 | 家用电器>厨房小电>电烤箱 636 638 | 家用电器>厨房小电>电磁炉 637 639 | 电脑办公>电脑配件>主板 638 640 | 家用电器>厨房小电>电炖锅 639 641 | 家用电器>厨房小电>电水壶/热水瓶 640 642 | 家用电器>厨房小电>多用途锅 641 643 | 家用电器>厨房小电>其它厨房电器 642 644 | 家用电器>生活电器>净化器 643 645 | 家用电器>厨卫大电>洗碗机 644 646 | 家用电器>生活电器>吸尘器 645 647 | 家用电器>生活电器>挂烫机/熨斗 646 648 | 家用电器>生活电器>插座 647 649 | 家用电器>生活电器>除湿机 648 650 | 家用电器>个护健康>剃须刀 649 651 | 电脑办公>电脑整机>一体机 650 652 | 家用电器>厨房小电>电饭煲 651 653 | 家用电器>厨房小电>微波炉 652 654 | 家居家装>家装软饰>相框/照片墙 653 655 | 家居家装>家装软饰>装饰字画 654 656 | 家居家装>家装软饰>节庆饰品 655 657 | 家居家装>家装软饰>手工/十字绣 656 658 | 家用电器>厨房小电>面包机 657 659 | 家用电器>厨房小电>煮蛋器 658 660 | 家用电器>厨房小电>酸奶机 659 661 | 家用电器>厨房小电>电饼铛 660 662 | 家用电器>厨房小电>电烧烤炉 661 663 | 家用电器>生活电器>加湿器 662 664 | 家用电器>厨房小电>养生壶/煎药壶 663 665 | 家用电器>生活电器>取暖电器 664 666 | 家用电器>厨房小电>电热饭盒 665 667 | 家用电器>生活电器>扫地机器人 666 668 | 电脑办公>电脑配件>装机配件 667 669 | 家用电器>生活电器>电话机 668 670 | 家用电器>生活电器>清洁机 669 671 | 家用电器>生活电器>干衣机 670 672 | 电脑办公>电脑配件>组装电脑 671 673 | 家居家装>家装软饰>帘艺隔断 672 674 | 家居家装>家装软饰>装饰摆件 673 675 | 家用电器>生活电器>净水器 674 676 | 家用电器>生活电器>电风扇 675 677 | 家用电器>生活电器>生活电器配件 676 678 | 家用电器>生活电器>收录/音机 677 679 | 家用电器>个护健康>剃/脱毛器 678 680 | 家用电器>个护健康>口腔护理 679 681 | 家用电器>个护健康>电吹风 680 682 | 家用电器>个护健康>美容器 681 683 | 家用电器>生活电器>饮水机 682 684 | 家用电器>个护健康>理发器 683 685 | 家用电器>个护健康>卷/直发器 684 686 | 家用电器>个护健康>按摩椅 685 687 | 家用电器>个护健康>按摩器 686 688 | 数码>摄影摄像>数码相机 687 689 | 家用电器>个护健康>其它健康电器 688 690 | 家用电器>生活电器>冷风扇 689 691 | 家用电器>个护健康>足浴盆 690 692 | 家用电器>生活电器>其它生活电器 691 693 | 电脑办公>外设产品>鼠标 692 694 | 数码>摄影摄像>单电/微单相机 693 695 | 数码>摄影摄像>单反相机 694 696 | 数码>摄影摄像>摄像机 695 697 | 数码>摄影摄像>拍立得 696 698 | 数码>摄影摄像>运动相机 697 699 | 数码>摄影摄像>镜头 698 700 | 家用电器>个护健康>电子秤/厨房秤 699 701 | 数码>摄影摄像>户外器材 700 702 | 数码>摄影摄像>冲印服务 701 703 | 数码>数码配件>存储卡 702 704 | 数码>数码配件>读卡器 703 705 | 数码>数码配件>滤镜 704 706 | 数码>摄影摄像>影棚器材 705 707 | 电脑办公>电脑配件>显卡 706 708 | 家居家装>家装软饰>墙贴/装饰贴 707 709 | 家居家装>家装软饰>钟饰 708 710 | 家居家装>家装软饰>花瓶花艺 709 711 | 数码>数码配件>相机包 710 712 | 数码>数码配件>三脚架/云台 711 713 | 数码>摄影摄像>数码相框 712 714 | 数码>数码配件>机身附件 713 715 | 数码>数码配件>闪光灯/手柄 714 716 | 数码>数码配件>镜头附件 715 717 | 数码>数码配件>相机清洁/贴膜 716 718 | 电脑办公>外设产品>键盘 717 719 | 数码>智能设备>智能眼镜 718 720 | 数码>虚拟商品>延保服务 719 721 | 数码>数码配件>电池/充电器 720 722 | 家居家装>宠物生活>宠物零食 721 723 | 家居家装>宠物生活>宠物主粮 722 724 | 数码>智能设备>健康监测 723 725 | 数码>智能设备>智能配饰 724 726 | 数码>智能设备>智能手环 725 727 | 数码>智能设备>体感车 726 728 | 数码>智能设备>其他配件 727 729 | 数码>智能设备>智能机器人 728 730 | 数码>智能设备>智能手表 729 731 | 数码>影音娱乐>MP3/MP4 730 732 | 数码>影音娱乐>便携/无线音箱 731 733 | 数码>影音娱乐>麦克风 732 734 | 数码>影音娱乐>专业音频 733 735 | 数码>影音娱乐>苹果配件 734 736 | 家居家装>家装软饰>创意家居 735 737 | 家居家装>家装软饰>香薰蜡烛 736 738 | 数码>电子教育>点读机/笔 737 739 | 家居家装>宠物生活>猫狗玩具 738 740 | 家居家装>宠物生活>医疗保健 739 741 | 数码>智能设备>无人机 740 742 | 数码>智能设备>智能家居 741 743 | 电脑办公>外设产品>鼠标垫 742 744 | 数码>影音娱乐>耳机/耳麦 743 745 | 数码>影音娱乐>音箱/音响 744 746 | 数码>影音娱乐>收音机 745 747 | 数码>电子教育>学生平板 746 748 | 数码>电子教育>早教益智 747 749 | 数码>电子教育>录音笔 748 750 | 数码>电子教育>电纸书 749 751 | 电脑办公>外设产品>手写板 750 752 | 数码>电子教育>复读机 751 753 | 家居家装>宠物生活>家居日用 752 754 | 家居家装>家纺>沙发垫套/椅垫 753 755 | 电脑办公>外设产品>UPS电源 754 756 | 电脑办公>外设产品>电脑工具 755 757 | 电脑办公>电脑配件>内存 756 758 | 电脑办公>电脑整机>台式机 757 759 | 电脑办公>电脑配件>机箱 758 760 | 电脑办公>电脑配件>电源 759 761 | 电脑办公>电脑配件>散热器 760 762 | 电脑办公>外设产品>移动硬盘 761 763 | 电脑办公>外设产品>U盘 762 764 | 电脑办公>外设产品>插座 763 765 | 电脑办公>外设产品>网络仪表仪器 764 766 | 电脑办公>电脑配件>刻录机/光驱 765 767 | 电脑办公>外设产品>摄像头 766 768 | 电脑办公>外设产品>硬盘盒 767 769 | 电脑办公>外设产品>线缆 768 770 | 电脑办公>外设产品>游戏设备 769 771 | 电脑办公>外设产品>电脑清洁 770 772 | 电脑办公>游戏设备>游戏机 771 773 | 电脑办公>游戏设备>游戏周边 772 774 | 电脑办公>游戏设备>游戏耳机 773 775 | 电脑办公>游戏设备>游戏软件 774 776 | 电脑办公>网络产品>交换机 775 777 | 电脑办公>网络产品>路由器 776 778 | 电脑办公>网络产品>网卡 777 779 | 电脑办公>游戏设备>手柄/方向盘 778 780 | 电脑办公>网络产品>网络存储 779 781 | 电脑办公>网络产品>网络配件 780 782 | 电脑办公>办公设备>投影配件 781 783 | 电脑办公>办公设备>打印机 782 784 | 电脑办公>办公设备>传真设备 783 785 | 电脑办公>办公设备>扫描设备 784 786 | 电脑办公>办公设备>碎纸机 785 787 | 电脑办公>网络产品>4G/3G上网 786 788 | 电脑办公>办公设备>考勤机 787 789 | 电脑办公>办公设备>收款/POS机 788 790 | 电脑办公>办公设备>白板 789 791 | 电脑办公>文具/耗材>硒鼓/墨粉 790 792 | 电脑办公>文具/耗材>墨盒 791 793 | 电脑办公>网络产品>网络盒子 792 794 | 电脑办公>文具/耗材>色带 793 795 | 电脑办公>办公设备>投影机 794 796 | 电脑办公>办公设备>多功能一体机 795 797 | 电脑办公>文具/耗材>纸类 796 798 | 电脑办公>文具/耗材>学生文具 797 799 | 电脑办公>文具/耗材>财会用品 798 800 | 电脑办公>办公设备>验钞/点钞机 799 801 | 电脑办公>办公设备>复合机 800 802 | 电脑办公>办公设备>保险柜 801 803 | 电脑办公>办公设备>办公家具 802 804 | 电脑办公>办公设备>会议音频视频 803 805 | 电脑办公>办公设备>装订/封装机 804 806 | 电脑办公>办公设备>安防监控 805 807 | 电脑办公>文具/耗材>办公文具 806 808 | 电脑办公>文具/耗材>文件管理 807 809 | 电脑办公>文具/耗材>计算器 808 810 | 电脑办公>文具/耗材>笔类 809 811 | 电脑办公>服务产品>延保服务 810 812 | 厨具>烹饪锅具>煎锅 811 813 | 厨具>烹饪锅具>奶锅 812 814 | 电脑办公>文具/耗材>画具画材 813 815 | 电脑办公>文具/耗材>本册/便签 814 816 | 电脑办公>文具/耗材>刻录碟片/附件 815 817 | 电脑办公>服务产品>电脑软件 816 818 | 厨具>烹饪锅具>炒锅 817 819 | 厨具>烹饪锅具>压力锅 818 820 | 厨具>烹饪锅具>蒸锅 819 821 | 厨具>烹饪锅具>汤锅 820 822 | 厨具>烹饪锅具>锅具套装 821 823 | 厨具>烹饪锅具>煲类 822 824 | 厨具>烹饪锅具>水壶 823 825 | 厨具>水具酒具>玻璃杯 824 826 | 厨具>烹饪锅具>火锅 825 827 | 厨具>刀剪菜板>菜刀 826 828 | 厨具>刀剪菜板>剪刀 827 829 | 厨具>刀剪菜板>刀具套装 828 830 | 厨具>刀剪菜板>瓜果刀/刨 829 831 | 厨具>刀剪菜板>砧板 830 832 | 厨具>刀剪菜板>多功能刀 831 833 | 厨具>厨房配件>保鲜盒 832 834 | 厨具>厨房配件>饭盒/提锅 833 835 | 厨具>水具酒具>塑料杯 834 836 | 厨具>水具酒具>运动水壶 835 837 | 厨具>厨房配件>烘焙/烧烤 836 838 | 厨具>厨房配件>厨房DIY/小工具 837 839 | 厨具>水具酒具>陶瓷/马克杯 838 840 | 厨具>厨房配件>储物/置物架 839 841 | 厨具>餐具>一次性用品 840 842 | 厨具>水具酒具>保温壶 841 843 | 厨具>餐具>餐具套装 842 844 | 厨具>水具酒具>保温杯 843 845 | 厨具>餐具>筷勺/刀叉 844 846 | 厨具>水具酒具>酒杯/酒具 845 847 | 厨具>餐具>碗/碟/盘 846 848 | 厨具>水具酒具>杯具套装 847 849 | 厨具>餐具>果盘/果篮 848 850 | 厨具>茶具/咖啡具>茶杯 849 851 | 厨具>茶具/咖啡具>茶叶罐 850 852 | 厨具>茶具/咖啡具>茶宠摆件 851 853 | 厨具>茶具/咖啡具>其他 852 854 | 个护化妆>清洁用品>清洁工具 853 855 | 个护化妆>面部护肤>乳液面霜 854 856 | 个护化妆>清洁用品>驱虫用品 855 857 | 个护化妆>清洁用品>家庭清洁 856 858 | 厨具>茶具/咖啡具>茶壶 857 859 | 厨具>茶具/咖啡具>咖啡具 858 860 | 个护化妆>清洁用品>一次性用品 859 861 | 个护化妆>面部护肤>眼霜 860 862 | 个护化妆>面部护肤>剃须 861 863 | 个护化妆>面部护肤>精华 862 864 | 厨具>酒店用品>自助餐炉 863 865 | 个护化妆>面部护肤>卸妆 864 866 | 厨具>酒店用品>酒店餐具 865 867 | 厨具>酒店用品>酒店水具 866 868 | 个护化妆>面部护肤>防晒 867 869 | 厨具>茶具/咖啡具>整套茶具 868 870 | 厨具>茶具/咖啡具>茶盘茶托 869 871 | 厨具>茶具/咖啡具>茶具配件 870 872 | 个护化妆>面部护肤>洁面 871 873 | 个护化妆>清洁用品>衣物清洁 872 874 | 个护化妆>面部护肤>面膜 873 875 | 个护化妆>面部护肤>套装 874 876 | 个护化妆>清洁用品>皮具护理 875 877 | 个护化妆>面部护肤>爽肤水 876 878 | 个护化妆>身体护理>精油 877 879 | 个护化妆>身体护理>沐浴 878 880 | 个护化妆>身体护理>润肤 879 881 | 个护化妆>身体护理>手足 880 882 | 个护化妆>口腔护理>牙膏/牙粉 881 883 | 个护化妆>口腔护理>牙刷/牙线 882 884 | 个护化妆>洗发护发>染发 883 885 | 个护化妆>洗发护发>洗发 884 886 | 个护化妆>洗发护发>造型 885 887 | 个护化妆>洗发护发>护发 886 888 | 个护化妆>香水彩妆>香水 887 889 | 个护化妆>香水彩妆>底妆 888 890 | 个护化妆>香水彩妆>腮红 889 891 | 个护化妆>香水彩妆>眼影 890 892 | 个护化妆>洗发护发>假发 891 893 | 个护化妆>香水彩妆>唇部 892 894 | 个护化妆>香水彩妆>美甲 893 895 | 个护化妆>香水彩妆>眼线 894 896 | 个护化妆>洗发护发>美发工具 895 897 | 个护化妆>香水彩妆>美妆工具 896 898 | 个护化妆>香水彩妆>套装 897 899 | 个护化妆>香水彩妆>防晒隔离 898 900 | 个护化妆>香水彩妆>眉笔 899 901 | 个护化妆>香水彩妆>睫毛膏 900 902 | 服饰内衣>女装>T恤 901 903 | 服饰内衣>女装>半身裙 902 904 | 服饰内衣>女装>衬衫 903 905 | 服饰内衣>女装>针织衫 904 906 | 服饰内衣>女装>雪纺衫 905 907 | 服饰内衣>女装>卫衣 906 908 | 服饰内衣>女装>连衣裙 907 909 | 服饰内衣>女装>打底裤 908 910 | 服饰内衣>女装>短外套 909 911 | 服饰内衣>女装>风衣 910 912 | 服饰内衣>女装>牛仔裤 911 913 | 服饰内衣>女装>马甲 912 914 | 服饰内衣>女装>休闲裤 913 915 | 服饰内衣>女装>正装裤 914 916 | 服饰内衣>女装>小西装 915 917 | 服饰内衣>女装>毛呢大衣 916 918 | 服饰内衣>女装>真皮皮衣 917 919 | 服饰内衣>女装>棉服 918 920 | 服饰内衣>女装>羽绒服 919 921 | 服饰内衣>女装>羊绒衫 920 922 | 服饰内衣>女装>仿皮皮衣 921 923 | 服饰内衣>女装>羊毛衫 922 924 | 服饰内衣>男装>T恤 923 925 | 服饰内衣>女装>大码女装 924 926 | 服饰内衣>女装>短裤 925 927 | 服饰内衣>女装>设计师/潮牌 926 928 | 服饰内衣>男装>POLO衫 927 929 | 服饰内衣>男装>针织衫 928 930 | 服饰内衣>女装>中老年女装 929 931 | 服饰内衣>女装>婚纱 930 932 | 服饰内衣>男装>羊绒衫 931 933 | 服饰内衣>男装>棉服 932 934 | 服饰内衣>男装>羽绒服 933 935 | 服饰内衣>男装>牛仔裤 934 936 | 服饰内衣>男装>休闲裤 935 937 | 服饰内衣>男装>西裤 936 938 | 服饰内衣>女装>打底衫 937 939 | 服饰内衣>女装>旗袍/唐装 938 940 | 服饰内衣>女装>加绒裤 939 941 | 服饰内衣>女装>吊带/背心 940 942 | 服饰内衣>女装>皮草 941 943 | 服饰内衣>女装>礼服 942 944 | 服饰内衣>男装>衬衫 943 945 | 服饰内衣>男装>夹克 944 946 | 服饰内衣>男装>风衣 945 947 | 服饰内衣>男装>卫衣 946 948 | 服饰内衣>男装>马甲/背心 947 949 | 服饰内衣>男装>毛呢大衣 948 950 | 服饰内衣>男装>仿皮皮衣 949 951 | 服饰内衣>男装>西服 950 952 | 服饰内衣>男装>西服套装 951 953 | 服饰内衣>男装>设计师/潮牌 952 954 | 服饰内衣>内衣>文胸 953 955 | 服饰内衣>男装>大码男装 954 956 | 服饰内衣>内衣>女式内裤 955 957 | 服饰内衣>内衣>男式内裤 956 958 | 服饰内衣>内衣>塑身美体 957 959 | 服饰内衣>内衣>泳衣 958 960 | 服饰内衣>内衣>吊带/背心 959 961 | 服饰内衣>内衣>抹胸 960 962 | 服饰内衣>男装>中老年男装 961 963 | 服饰内衣>内衣>商务男袜 962 964 | 服饰内衣>男装>工装 963 965 | 服饰内衣>内衣>休闲棉袜 964 966 | 服饰内衣>内衣>内衣配件 965 967 | 服饰内衣>内衣>打底裤袜 966 968 | 服饰内衣>男装>真皮皮衣 967 969 | 服饰内衣>男装>唐装/中山装 968 970 | 服饰内衣>男装>加绒裤 969 971 | 服饰内衣>内衣>美腿袜 970 972 | 服饰内衣>男装>卫裤/运动裤 971 973 | 服饰内衣>男装>短裤 972 974 | 服饰内衣>男装>羊毛衫 973 975 | 服饰内衣>内衣>睡衣/家居服 974 976 | 服饰内衣>内衣>连裤袜/丝袜 975 977 | 服饰内衣>内衣>保暖内衣 976 978 | 服饰内衣>内衣>情侣睡衣 977 979 | 服饰内衣>内衣>文胸套装 978 980 | 服饰内衣>内衣>少女文胸 979 981 | 服饰内衣>内衣>秋衣秋裤 980 982 | 服饰内衣>服饰配件>太阳镜 981 983 | 服饰内衣>服饰配件>游泳镜 982 984 | 服饰内衣>服饰配件>女士丝巾/围巾/披肩 983 985 | 服饰内衣>内衣>大码内衣 984 986 | 服饰内衣>内衣>打底衫 985 987 | 服饰内衣>服饰配件>袖扣 986 988 | 服饰内衣>内衣>情趣内衣 987 989 | 服饰内衣>服饰配件>贝雷帽 988 990 | 服饰内衣>服饰配件>口罩 989 991 | 服饰内衣>服饰配件>耳罩/耳包 990 992 | 服饰内衣>服饰配件>光学镜架/镜片 991 993 | 服饰内衣>服饰配件>围巾/手套/帽子套装 992 994 | 服饰内衣>服饰配件>棒球帽 993 995 | 服饰内衣>服饰配件>毛线帽 994 996 | 服饰内衣>服饰配件>遮阳帽 995 997 | 服饰内衣>服饰配件>老花镜 996 998 | 服饰内衣>服饰配件>装饰眼镜 997 999 | 服饰内衣>服饰配件>防辐射眼镜 998 1000 | 服饰内衣>服饰配件>男士丝巾/围巾 999 1001 | 服饰内衣>服饰配件>假领 1000 1002 | 钟表>钟表>男表 1001 1003 | 钟表>钟表>瑞表 1002 1004 | 服饰内衣>服饰配件>鸭舌帽 1003 1005 | 钟表>钟表>女表 1004 1006 | 服饰内衣>服饰配件>礼帽 1005 1007 | 服饰内衣>服饰配件>真皮手套 1006 1008 | 服饰内衣>服饰配件>毛线手套 1007 1009 | 服饰内衣>服饰配件>防晒手套 1008 1010 | 服饰内衣>服饰配件>男士腰带/礼盒 1009 1011 | 服饰内衣>服饰配件>钥匙扣 1010 1012 | 服饰内衣>服饰配件>女士腰带/礼盒 1011 1013 | 服饰内衣>服饰配件>遮阳伞/雨伞 1012 1014 | 服饰内衣>服饰配件>毛线/布面料 1013 1015 | 服饰内衣>服饰配件>领带/领结/领带夹 1014 1016 | 钟表>钟表>国表 1015 1017 | 钟表>钟表>日韩表 1016 1018 | 钟表>钟表>欧美表 1017 1019 | 钟表>钟表>德表 1018 1020 | 钟表>钟表>儿童手表 1019 1021 | 钟表>钟表>智能手表 1020 1022 | 钟表>钟表>钟表配件 1021 1023 | 鞋靴>流行男鞋>休闲鞋 1022 1024 | 鞋靴>流行男鞋>功能鞋 1023 1025 | 鞋靴>流行男鞋>拖鞋/人字拖 1024 1026 | 鞋靴>流行男鞋>传统布鞋 1025 1027 | 鞋靴>流行男鞋>帆布鞋 1026 1028 | 鞋靴>流行男鞋>商务休闲鞋 1027 1029 | 鞋靴>流行男鞋>正装鞋 1028 1030 | 鞋靴>流行男鞋>凉鞋/沙滩鞋 1029 1031 | 鞋靴>流行男鞋>男靴 1030 1032 | 钟表>钟表>闹钟 1031 1033 | 钟表>钟表>座钟挂钟 1032 1034 | 鞋靴>流行男鞋>雨鞋/雨靴 1033 1035 | 鞋靴>流行男鞋>鞋配件 1034 1036 | 鞋靴>流行男鞋>增高鞋 1035 1037 | 鞋靴>流行男鞋>工装鞋 1036 1038 | 鞋靴>时尚女鞋>单鞋 1037 1039 | 鞋靴>时尚女鞋>休闲鞋 1038 1040 | 鞋靴>时尚女鞋>凉鞋 1039 1041 | 鞋靴>时尚女鞋>女靴 1040 1042 | 鞋靴>时尚女鞋>雪地靴 1041 1043 | 鞋靴>时尚女鞋>高跟鞋 1042 1044 | 鞋靴>时尚女鞋>鞋配件 1043 1045 | 鞋靴>流行男鞋>定制鞋 1044 1046 | 鞋靴>时尚女鞋>拖鞋/人字拖 1045 1047 | 鞋靴>时尚女鞋>踝靴 1046 1048 | 鞋靴>时尚女鞋>筒靴 1047 1049 | 鞋靴>时尚女鞋>帆布鞋 1048 1050 | 鞋靴>时尚女鞋>雨鞋/雨靴 1049 1051 | 鞋靴>时尚女鞋>妈妈鞋 1050 1052 | 鞋靴>时尚女鞋>特色鞋 1051 1053 | 鞋靴>时尚女鞋>鱼嘴鞋 1052 1054 | -------------------------------------------------------------------------------- /bert/finetune_bert.py: -------------------------------------------------------------------------------- 1 | import time 2 | import torch 3 | import argparse 4 | import numpy as np 5 | from tqdm.auto import tqdm 6 | from torch.optim import Adam 7 | from transformers import get_scheduler 8 | from torch.utils.data import Dataset, DataLoader 9 | from transformers import BertTokenizer, BertForSequenceClassification 10 | 11 | 12 | def setup_args(): 13 | parser = argparse.ArgumentParser() 14 | parser.add_argument('--pretrain_model_path', default="bert_pretrain_model", type=str, help='') 15 | parser.add_argument('--vocab_path', default="bert_pretrain_model/vocab.txt", type=str, help='') 16 | parser.add_argument('--save_model_path', default="save_model", type=str, help='') 17 | parser.add_argument('--label_data_path', default="cate_dict.txt", type=str, help='') 18 | parser.add_argument('--final_model_path', default="final_model", type=str, help='') 19 | parser.add_argument('--train_data_path', default='train_data.txt', type=str, help='') 20 | parser.add_argument('--eval_data_path', default='test_data.txt', type=str, help='') 21 | parser.add_argument('--max_sequence_length', default=60, type=int, required=False, help='') 22 | parser.add_argument('--batch_size', default=256, type=int, required=False, help='batch size') 23 | parser.add_argument('--epochs', default=3, type=int, required=False, help='epochs') 24 | parser.add_argument('--warmup_steps', default=2000, type=int, required=False, help='warm up steps') 25 | parser.add_argument('--lr', default=3e-5, type=float, required=False, help='learn rate') 26 | parser.add_argument('--max_grad_norm', default=1.0, type=float, required=False) 27 | parser.add_argument('--log_step', default=100, type=int, required=False, help='print log steps') 28 | return parser.parse_args() 29 | 30 | 31 | class MyDataset(Dataset): 32 | def __init__(self, text_list, label_list, tokenizer, max_sequence_len, device): 33 | self.input_ids = [] 34 | self.token_type_ids = [] 35 | self.attention_mask = [] 36 | self.label_list = label_list 37 | self.len = len(label_list) 38 | for text in tqdm(text_list): 39 | text = text[:max_sequence_len - 2] 40 | title_ids = tokenizer.encode_plus(text, padding='max_length', max_length=max_sequence_len) 41 | self.input_ids.append(title_ids['input_ids']) 42 | self.token_type_ids.append(title_ids["token_type_ids"]) 43 | self.attention_mask.append(title_ids["attention_mask"]) 44 | 45 | def __getitem__(self, index): 46 | tmp_input_ids = self.input_ids[index] 47 | tmp_token_type_ids = self.token_type_ids[index] 48 | tmp_attention_mask = self.attention_mask[index] 49 | tmp_label = self.label_list[index] 50 | output = {"input_ids": torch.tensor(tmp_input_ids).to(device), 51 | "token_type_ids": torch.tensor(tmp_token_type_ids).to(device), 52 | "attention_mask": torch.tensor(tmp_attention_mask).to(device)} 53 | return output, tmp_label 54 | 55 | def __len__(self): 56 | return self.len 57 | 58 | 59 | def load_label(data_path): 60 | label_id_name = {} 61 | label_name_id = {} 62 | with open(data_path, "r") as f: 63 | for line in f: 64 | line_split = line.strip().split("\t") 65 | cate_name, cate_id = line_split 66 | label_id_name[int(cate_id)] = cate_name 67 | label_name_id[cate_name] = int(cate_id) 68 | return label_name_id, label_id_name 69 | 70 | 71 | def data_loader(data_path, tokenizer, label_name_id, max_sequence_len, batch_size, shuffle, device): 72 | text_list = [] 73 | label_list = [] 74 | cnt = 0 75 | with open(data_path, 'rb') as f: 76 | data = f.read().decode("utf-8") 77 | train_data = data.split("\n") 78 | print("数据总行数:{}".format(len(train_data))) 79 | for text in train_data: 80 | text_split = text.split("\t") 81 | if len(text_split) != 2 and len(text_split) <= 5: 82 | continue 83 | cate, title = text_split 84 | text_list.append(title) 85 | label_list.append(label_name_id[cate]) 86 | cnt += 1 87 | # if cnt == 500000: 88 | # break 89 | dataset = MyDataset(text_list, label_list, tokenizer, max_sequence_len, device) 90 | dataloader = DataLoader(dataset=dataset, 91 | batch_size=batch_size, 92 | shuffle=shuffle) 93 | 94 | return dataloader 95 | 96 | 97 | def load_model(args, num_labels): 98 | model = BertForSequenceClassification.from_pretrained(args.pretrain_model_path, 99 | num_labels=num_labels) 100 | tokenizer = BertTokenizer(args.vocab_path) 101 | return model, tokenizer 102 | 103 | 104 | def compute_acc(logits, label): 105 | predicted_class_id = torch.tensor([w.argmax().item() for w in logits]) 106 | return float((predicted_class_id == label).float().sum()) / label.shape[0] 107 | 108 | 109 | def train(args, model, dataloader, device): 110 | num_training_steps = args.epochs * len(dataloader) 111 | optimizer = Adam(model.parameters(), lr=args.lr) 112 | lr_scheduler = get_scheduler( 113 | name="linear", 114 | optimizer=optimizer, 115 | num_warmup_steps=args.warmup_steps, 116 | num_training_steps=num_training_steps 117 | ) 118 | model.to(device) 119 | model.train() 120 | batch_steps = 0 121 | for epoch in range(args.epochs): 122 | for batch, label in dataloader: 123 | batch_steps += 1 124 | outputs = model(**batch, labels=label.to(device)) 125 | loss = outputs.loss 126 | logits = outputs.logits 127 | acc = compute_acc(logits, label) 128 | loss.backward() 129 | torch.nn.utils.clip_grad_norm_(model.parameters(), args.max_grad_norm) 130 | optimizer.step() 131 | lr_scheduler.step() 132 | optimizer.zero_grad() 133 | if batch_steps % args.log_step == 0: 134 | print("train epoch {}/{}, batch {}/{}, loss {}, acc {}".format( 135 | epoch + 1, args.epochs, 136 | batch_steps, 137 | num_training_steps, 138 | loss, 139 | acc)) 140 | 141 | model_to_save = model.module if hasattr(model, 'module') else model 142 | model_to_save.save_pretrained(args.save_model_path) 143 | 144 | 145 | def evaluate(args, dataloader, num_labels, device): 146 | model = BertForSequenceClassification.from_pretrained(args.save_model_path, num_labels=num_labels) 147 | model.to(device) 148 | model.eval() 149 | loss_list = [] 150 | acc_list = [] 151 | with torch.no_grad(): 152 | for batch, label in dataloader: 153 | outputs = model(**batch, labels=label.to(device)) 154 | loss = outputs.loss 155 | logits = outputs.logits 156 | acc = compute_acc(logits, label) 157 | loss_list.append(float(loss)) 158 | acc_list.append(float(acc)) 159 | print("loss: {},".format(np.mean(loss_list)), 160 | "accuracy: {}.".format(np.mean(acc_list))) 161 | 162 | 163 | def predict(args, device, text, tokenizer, label_dict): 164 | model = BertForSequenceClassification.from_pretrained(args.save_model_path, num_labels=len(label_dict.keys())) 165 | model.to(device) 166 | model.eval() 167 | time_start = time.time() 168 | with torch.no_grad(): 169 | text = text[:args.max_sequence_length - 2] 170 | inputs = tokenizer.encode_plus(text, 171 | padding='max_length', 172 | max_length=args.max_sequence_length, 173 | return_tensors="pt") 174 | inputs = {key: torch.tensor(value).to(device) for key, value in inputs.items()} 175 | outputs = model(**inputs) 176 | print("predict time cost {}".format(time.time() - time_start)) 177 | logits = outputs.logits 178 | predicted_class_id = logits.argmax().item() 179 | predicted_class_name = label_dict[predicted_class_id] 180 | print("title {}".format(text)) 181 | print("predict category {}".format(predicted_class_name)) 182 | 183 | 184 | def get_parameter_number(model): 185 | total_num = sum(p.numel() for p in model.parameters()) 186 | trainable_num = sum(p.numel() for p in model.parameters() if p.requires_grad) 187 | return {'Total': total_num, 'Trainable': trainable_num} 188 | 189 | 190 | if __name__ == '__main__': 191 | args = setup_args() 192 | device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu") 193 | label_name_id, label_id_name = load_label(args.label_data_path) 194 | model, tokenizer = load_model(args, num_labels=len(label_name_id.keys())) 195 | print(get_parameter_number(model)) 196 | train_dataloader = data_loader(args.train_data_path, 197 | tokenizer, 198 | label_name_id, 199 | args.max_sequence_length, 200 | args.batch_size, 201 | True, 202 | device) 203 | time_start = time.time() 204 | train(args, model, train_dataloader, device) 205 | print("train time cost {}".format(time.time() - time_start)) 206 | eval_dataloader = data_loader(args.eval_data_path, 207 | tokenizer, 208 | label_name_id, 209 | args.max_sequence_length, 210 | args.batch_size, 211 | False, 212 | device) 213 | time_start = time.time() 214 | evaluate(args, eval_dataloader, num_labels=len(label_name_id.keys()), device=device) 215 | print("eval time cost {}".format(time.time() - time_start)) 216 | 217 | text = "DICIHOZZ9小白鞋女2018秋季新品韩版百搭休闲时尚复古帆布鞋女 墨绿 36" 218 | predict(args, device, text, tokenizer, label_id_name) 219 | -------------------------------------------------------------------------------- /bert/finetune_test_data_sample.txt: -------------------------------------------------------------------------------- 1 | 鞋靴>时尚女鞋>鱼嘴鞋 女凉靴2018春夏季真皮网纱鱼嘴鞋中低跟女鞋网鞋镂空网面平底凉鞋 黑色 A618 磨砂款 35 2 | 鞋靴>时尚女鞋>鱼嘴鞋 女凉靴2018春夏季真皮网纱鱼嘴鞋中低跟女鞋网鞋镂空网面平底凉鞋 黑色 A618-1 皮料款 35 3 | 鞋靴>时尚女鞋>鱼嘴鞋 2018夏季新款水钻鱼嘴鞋真皮性感网纱粗跟凉鞋女中跟中年妈妈女鞋 黑色 35 4 | 鞋靴>时尚女鞋>鱼嘴鞋 感言 春夏舒适简约纯色女靴子镂空网靴凉靴单靴平底大码妈妈鞋中老年短靴41-43 黑色包头款 39 5 | 鞋靴>时尚女鞋>鱼嘴鞋 2018春夏季新款真皮女凉鞋大码粗跟露趾性感鱼嘴鞋中跟一字凉拖鞋 黑色 38 6 | 鞋靴>时尚女鞋>鱼嘴鞋 凉鞋女松糕鞋2018夏季新品白色坡跟凉拖鱼嘴鞋高跟鞋厚底韩版潮 9021凉拖款黑色 鞋子偏小半码 7 | 鞋靴>时尚女鞋>鱼嘴鞋 凉鞋女鱼嘴鞋2018新款韩版百搭休闲中跟粗跟一字带大码水钻女鞋夏 白色 39 8 | 鞋靴>时尚女鞋>鱼嘴鞋 2018夏季新品罗马高跟鱼嘴鞋夏防水台学生韩版百搭女鞋粗跟凉鞋 8015白色 37 9 | 鞋靴>时尚女鞋>鱼嘴鞋 ?秋冬新品???2018春秋高跟鞋夜场防水台性感细跟职业少女小码鱼嘴单鞋潮 黑色 37 10 | 鞋靴>时尚女鞋>鱼嘴鞋 ≡?????妈妈凉鞋女夏2018新款粗跟真皮中老年中跟鞋子软底舒适中年鱼嘴鞋? 杏色8602 38 11 | -------------------------------------------------------------------------------- /bert/finetune_train_data_sample.txt: -------------------------------------------------------------------------------- 1 | 鞋靴>时尚女鞋>布鞋/绣花鞋 老北京布鞋女2018秋季黑色懒人鞋软底豆豆鞋平底休闲中老年妈妈鞋 01黑色(单里)防滑 35 2 | 鞋靴>时尚女鞋>布鞋/绣花鞋 高帮鞋女鞋子秋季黑色皮面帆布鞋韩版百搭学生平底休闲板鞋潮 全黑色 35 3 | 鞋靴>时尚女鞋>布鞋/绣花鞋 BANGDE高帮帆布鞋女秋季2018新品韩版百搭饼干鞋原宿bf风女鞋潮 黑红 36 4 | 鞋靴>时尚女鞋>布鞋/绣花鞋 BANGDE加绒帆布鞋女学生韩版原宿ulzzang百搭棉鞋女2018新品冬季棉鞋 黑黄 35 5 | 鞋靴>时尚女鞋>布鞋/绣花鞋 BANGDE超火丑鞋女2018冬季新品帆布鞋女学生韩版一脚蹬百搭加绒棉鞋 灰色 36 6 | 鞋靴>时尚女鞋>布鞋/绣花鞋 DICIHOZZ秋季韩版百搭低帮平跟女学生涂鸦帆布鞋休闲平底布鞋一脚蹬 白色 淘气猫 34 7 | 鞋靴>时尚女鞋>布鞋/绣花鞋 DICIHOZZ9小白鞋女2018秋季新品韩版百搭休闲时尚复古帆布鞋女 墨绿 36 8 | 鞋靴>时尚女鞋>布鞋/绣花鞋 DICIHOZZ小白鞋女2018秋季新品街拍帆布鞋韩版百搭原宿ulzzang板鞋 白兰 35 9 | 鞋靴>时尚女鞋>布鞋/绣花鞋 新款汉服鞋子布鞋古风民族风配裙的古装学生女单绣花鞋zh 淡雅牡丹 白 38 10 | 鞋靴>时尚女鞋>布鞋/绣花鞋 2018古风鞋纯白汉服鞋子老北京布鞋民族风内增高系带平底坡跟绣花鞋女dl 五厘米仙鹤白系带 38 11 | -------------------------------------------------------------------------------- /gpt2/finetune_gpt2.py: -------------------------------------------------------------------------------- 1 | import os 2 | import time 3 | import torch 4 | import argparse 5 | import numpy as np 6 | from rouge import Rouge 7 | from tqdm.auto import tqdm 8 | from torch.optim import AdamW 9 | from transformers import get_scheduler 10 | from torch.utils.data import Dataset, DataLoader 11 | from transformers.models.gpt2 import GPT2LMHeadModel 12 | from transformers import BertTokenizer 13 | from torch.nn import CrossEntropyLoss 14 | 15 | 16 | class MyDataset(Dataset): 17 | def __init__(self, data_list): 18 | self.data_list = data_list 19 | 20 | def __getitem__(self, index): 21 | input_ids = self.data_list[index] 22 | return input_ids 23 | 24 | def __len__(self): 25 | return len(self.data_list) 26 | 27 | 28 | def setup_args(): 29 | parser = argparse.ArgumentParser() 30 | parser.add_argument('--model_path', default="gpt2通用中文模型", type=str, help='') 31 | parser.add_argument('--vocab_path', default="gpt2通用中文模型/vocab.txt", type=str, help='') 32 | parser.add_argument('--save_model_path', default="save_model", type=str, help='') 33 | parser.add_argument('--final_model_path', default="final_model", type=str, help='') 34 | parser.add_argument('--train_raw_path', default='train_raw_data.txt', type=str, help='') 35 | parser.add_argument('--eval_raw_path', default='test_raw_data.txt', type=str, help='') 36 | parser.add_argument('--batch_size', default=64, type=int, required=False, help='batch size') 37 | parser.add_argument('--epochs', default=3, type=int, required=False, help='epochs') 38 | parser.add_argument('--warmup_steps', default=2000, type=int, required=False, help='warm up steps') 39 | parser.add_argument('--lr', default=1.5e-4, type=float, required=False, help='learn rate') 40 | parser.add_argument('--max_grad_norm', default=1.0, type=float, required=False) 41 | parser.add_argument('--log_step', default=10, type=int, required=False, help='print log steps') 42 | return parser.parse_args() 43 | 44 | 45 | def load_model(model_path, vocab_path): 46 | model = GPT2LMHeadModel.from_pretrained(model_path) 47 | tokenizer = BertTokenizer(vocab_file=vocab_path) 48 | return model, tokenizer 49 | 50 | 51 | def rouge(not_ignore, shift_labels, preds): 52 | main_rouge = Rouge() 53 | true_length = [w.sum() for w in not_ignore.float()] 54 | rouge_labels = [] 55 | rouge_predicts = [] 56 | for idx, tmp_len in enumerate(true_length): 57 | tmp_labels = shift_labels[idx][:int(tmp_len)] 58 | rouge_labels.append(" ".join([str(w) for w in tmp_labels.tolist()])) 59 | tmp_pred = preds[idx][:int(tmp_len)] 60 | rouge_predicts.append(" ".join([str(w) for w in tmp_pred.tolist()])) 61 | rouge_score = main_rouge.get_scores(rouge_predicts, rouge_labels, avg=True) 62 | return rouge_score 63 | 64 | 65 | def calculate_loss_and_accuracy(outputs, labels, device): 66 | logits = outputs.logits 67 | # Shift so that tokens < n predict n 68 | shift_logits = logits[..., :-1, :].contiguous() 69 | shift_labels = labels[..., 1:].contiguous().to(device) 70 | 71 | # Flatten the tokens 72 | loss_fct = CrossEntropyLoss(ignore_index=tokenizer.pad_token_id, reduction='sum') 73 | loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), shift_labels.view(-1)) 74 | 75 | _, preds = shift_logits.max(dim=-1) 76 | not_ignore = shift_labels.ne(tokenizer.pad_token_id) 77 | num_targets = not_ignore.long().sum().item() 78 | 79 | correct = (shift_labels == preds) & not_ignore 80 | correct = correct.float().sum() 81 | 82 | accuracy = correct / num_targets 83 | loss = loss / num_targets 84 | 85 | rouge_score = rouge(not_ignore, shift_labels, preds) 86 | return loss, accuracy, rouge_score 87 | 88 | 89 | def collate_fn(batch): 90 | input_ids = [] 91 | input_lens_list = [len(w) for w in batch] 92 | max_input_len = max(input_lens_list) 93 | for btc_idx in range(len(batch)): 94 | input_len = len(batch[btc_idx]) 95 | input_ids.append(batch[btc_idx]) 96 | input_ids[btc_idx].extend([tokenizer.pad_token_id] * (max_input_len - input_len)) 97 | return torch.tensor(input_ids, dtype=torch.long) 98 | 99 | 100 | def data_loader(args, train_data_path, tokenizer, shuffle): 101 | data_list = [] 102 | with open(train_data_path, 'rb') as f: 103 | data = f.read().decode("utf-8") 104 | train_data = data.split("\n") 105 | print("数据总行数:{}".format(len(train_data))) 106 | for text in tqdm(train_data): 107 | text_split = text.split("\t") 108 | if len(text_split) != 3: 109 | continue 110 | product_word, title, wenan = text_split 111 | title_ids = tokenizer.encode(title) 112 | wenan_ids = tokenizer.encode(wenan) 113 | inputs_ids = title_ids + wenan_ids[1:] 114 | data_list.append(inputs_ids) 115 | dataset = MyDataset(data_list) 116 | dataloader = DataLoader(dataset=dataset, 117 | batch_size=args.batch_size, 118 | shuffle=shuffle, 119 | collate_fn=collate_fn) 120 | 121 | return dataloader 122 | 123 | 124 | def train(args, model, dataloader): 125 | num_training_steps = args.epochs * len(dataloader) 126 | optimizer = AdamW(model.parameters(), lr=args.lr) 127 | lr_scheduler = get_scheduler( 128 | name="linear", 129 | optimizer=optimizer, 130 | num_warmup_steps=args.warmup_steps, 131 | num_training_steps=num_training_steps 132 | ) 133 | device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu") 134 | model.to(device) 135 | model.train() 136 | batch_steps = 0 137 | for epoch in range(args.epochs): 138 | for batch in dataloader: 139 | batch_steps += 1 140 | inputs = {"input_ids": batch.to(device)} 141 | outputs = model(**inputs, labels=batch.to(device)) 142 | # loss = outputs.loss 143 | loss, acc, rouge_score = calculate_loss_and_accuracy(outputs, batch.to(device), device) 144 | loss.backward() 145 | torch.nn.utils.clip_grad_norm_(model.parameters(), args.max_grad_norm) 146 | optimizer.step() 147 | lr_scheduler.step() 148 | optimizer.zero_grad() 149 | if batch_steps % args.log_step == 0: 150 | print("train epoch {}/{}, batch {}/{}, loss {}, accuracy {}, rouge-1 {}, rouge-2 {}, rouge-l {}".format( 151 | epoch, args.epochs, 152 | batch_steps, 153 | num_training_steps, 154 | loss, acc, 155 | rouge_score["rouge-1"]['f'], 156 | rouge_score["rouge-2"]["f"], 157 | rouge_score["rouge-l"]["f"])) 158 | 159 | model_to_save = model.module if hasattr(model, 'module') else model 160 | model_to_save.save_pretrained(args.save_model_path) 161 | # torch.save(model, os.path.join(args.final_model_path, 'gpt2_WenAn.pth')) 162 | 163 | 164 | def evaluate(dataloader, args): 165 | device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu") 166 | model, _ = load_model(args.save_model_path, args.vocab_path) 167 | model.to(device) 168 | model.eval() 169 | loss_list, acc_list, rouge_1_list, rouge_2_list, rouge_l_list = [], [], [], [], [] 170 | batch_steps = 0 171 | with torch.no_grad(): 172 | for batch in dataloader: 173 | batch_steps += 1 174 | inputs = {"input_ids": batch.to(device)} 175 | outputs = model(**inputs, labels=batch.to(device)) 176 | loss, acc, rouge_score = calculate_loss_and_accuracy(outputs, batch.to(device), device) 177 | loss_list.append(float(loss)) 178 | acc_list.append(float(acc)) 179 | rouge_1_list.append(float(rouge_score["rouge-1"]['f'])) 180 | rouge_2_list.append(float(rouge_score["rouge-2"]['f'])) 181 | rouge_l_list.append(float(rouge_score["rouge-l"]['f'])) 182 | print("eval batch {}/{}, loss {}, accuracy {}, rouge-1 {}, rouge-2 {}, rouge-l {}".format( 183 | batch_steps, 184 | len(dataloader), 185 | loss, acc, 186 | rouge_score["rouge-1"]['f'], 187 | rouge_score["rouge-2"]["f"], 188 | rouge_score["rouge-l"]["f"])) 189 | print("loss: {},".format(np.mean(loss_list)), 190 | "accuracy: {}.".format(np.mean(acc_list)), 191 | "rouge-1: {},".format(np.mean(rouge_1_list)), 192 | "rouge-2: {},".format(np.mean(rouge_2_list)), 193 | "rouge-l: {}".format(np.mean(rouge_l_list))) 194 | 195 | 196 | 197 | def predict(args, text="美丽时分雪绒花美白面膜美白提亮,均匀肤色贴片面膜"): 198 | device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu") 199 | model, _ = load_model(args.save_model_path, args.vocab_path) 200 | model.to(device) 201 | model.eval() 202 | time1 = time.time() 203 | max_length = 30 204 | input_ids = [] 205 | input_ids.extend(tokenizer.encode(text)) 206 | wenan = "" 207 | for i in range(max_length): 208 | input_tensor = torch.tensor([input_ids]) 209 | inputs = {"input_ids": input_tensor.to(device)} 210 | outputs = model(**inputs) 211 | logits = outputs.logits 212 | last_token_id = int(np.argmax(logits[0][-1].detach().to('cpu').numpy())) 213 | if last_token_id == tokenizer.sep_token_id: 214 | break 215 | last_token = tokenizer.convert_ids_to_tokens(last_token_id) 216 | input_ids.append(last_token_id) 217 | wenan += last_token 218 | print("time cost: {}".format(time.time()-time1)) 219 | print(text) 220 | print(wenan) 221 | 222 | 223 | def get_parameter_number(model): 224 | total_num = sum(p.numel() for p in model.parameters()) 225 | trainable_num = sum(p.numel() for p in model.parameters() if p.requires_grad) 226 | return {'Total': total_num, 'Trainable': trainable_num} 227 | 228 | 229 | if __name__ == '__main__': 230 | args = setup_args() 231 | model, tokenizer = load_model(args.model_path, args.vocab_path) 232 | train_dataloader = data_loader(args, args.train_raw_path, tokenizer=tokenizer, shuffle=True) 233 | eval_dataloader = data_loader(args, args.eval_raw_path, tokenizer=tokenizer, shuffle=False) 234 | train(args, model, train_dataloader) 235 | evaluate(eval_dataloader, args=args) 236 | 237 | 238 | -------------------------------------------------------------------------------- /gpt2/test_raw_data.txt: -------------------------------------------------------------------------------- 1 | 打底衫 样衣清仓春夏季新款修身显瘦打底衫带垫肩 时尚打底衫,单穿都能很修身 2 | 精华 雅诗兰黛白金级黑钻奢华眼部精华 紧致抗皱眼部精华让眼肌肤焕发光彩 3 | 精油皂 蔓朵儿手工皂薄荷控油祛痘祛痘印洁面皂纯天然植物精油皂特价 纯天然精油皂,带给您无暇肌肤 4 | 眼霜 欧珀莱臻粹抗皱精华眼霜通州店 抗皱滋润眼霜塑造年轻明眸 5 | 小脚裤 中年女士秋冬加绒加厚打底裤女妈妈装外穿黑色高腰冬季保暖小脚裤 冬季加绒小脚裤,保暖又显瘦 6 | 炒锅 锐奥皇冠蜂窝不粘炒锅 不粘铸铁炒锅,美味随心翻炒不炒 7 | 连衣裙 乔万尼秋装年修身气质显瘦印花七分袖欧货连衣裙女中长款 七分袖连衣裙,恰如其分的显瘦 8 | 连衣裙 胖修身显瘦气质改良旗袍连衣裙女 旗袍连衣裙,尽显端庄优雅的气质 9 | 衬衫 新品卓多姿清爽轻熟风天丝短款衬衫 衬衫连衣裙让多姿曼妙随行 10 | 睡袍 亲肤人棉花卉印花睡袍 亲肤睡袍,为你带来舒适的睡眠 11 | -------------------------------------------------------------------------------- /gpt2/train_raw_data.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 衬衫 新款植绒波点飘带灯笼袖衬衫 灯笼袖衬衫,浪漫斐然显优雅 4 | 精华液 菲之冉六胜肽紧致次抛精华液 紧致精华液,唤醒熟龄肌的沉睡弹力 5 | 休闲裤 沫晗衣美春季新品宽松显瘦百搭松紧腰保暖毛呢休闲裤 保暖又显瘦,冬季休闲裤来救场 6 | 粉底液 阿玛尼蓝标大师设计师粉底液遮瑕柔亮保湿 遮瑕保湿修容粉底液,水嘟嘟小脸底妆 7 | 精华液 素萃小蓝鲸面部胶囊精华液神经酰胺收毛孔富勒烯提亮肤色提拉紧致 抗皱紧致精华液,唤醒青春活力 8 | 毛衫 雪貂雪花时尚休闲毛衫 时尚羊毛衫,让你冬季美到惊讶 9 | 面膜 美丽时分雪绒花美白面膜美白提亮,均匀肤色贴片面膜 美白面膜,灰姑娘逆袭白美人 10 | 文胸 曼妮芬抹胸式无钢圈模杯围文胸性感蕾丝百搭 透视蕾丝文胸,若隐若现的性感 11 | 内衣 歆觅带胸垫一体式吊带背心女形美背半截领内衣无钢圈内搭外穿 无钢圈内衣,给胸部一个温暖的家 12 | 吊带 苏珊芬妮优雅气质冰丝吊带均码 优雅吊带裙穿出你的妩媚气质 13 | --------------------------------------------------------------------------------