├── .gitignore
├── README.md
├── config
└── mate_v1.json
├── data
└── raw
│ ├── celebrity_distribution.json
│ └── styletips_synset.txt
├── evaluation
└── test.py
├── generate_data.py
├── requirement.txt
├── train.py
├── translate.py
└── widget
├── __init__.py
├── data.py
├── model.py
├── module.py
├── utils.py
└── vis.py
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea/
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## MATE: Multimodal Dialogue Systems via Capturing Context-aware Dependencies of Semantic Elements
2 |
3 |
4 |
5 |
6 | This is the PyTorch implementation of the paper:
7 | **Multimodal Dialogue Systems via Capturing Context-aware Dependencies of Semantic Elements**. Weidong He, Zhi Li, Dongcai Lu, Enhong Chen, Tong Xu, Baoxing Huai, Nicholas Jing Yuan. ***ACM MM 2020***.
8 | [[PDF]](https://dl.acm.org/doi/abs/10.1145/3394171.3413679?casa_token=NAfGkcF9aD4AAAAA:RycuI3YzktrxbcAiq10TPiJ3VseRsO_b7VhvTZM_5XZQX3k9Kqrqv8x1_BM3fKBJvC9XWK_tXvY)
9 |
10 | If you use any source codes or datasets included in this toolkit in your work, please cite the following paper. The bibtex is listed below:
11 |
12 |
13 | @inproceedings{he2020multimodal,
14 | title={Multimodal Dialogue Systems via Capturing Context-aware Dependencies of Semantic Elements},
15 | author={He, Weidong and Li, Zhi and Lu, Dongcai and Chen, Enhong and Xu, Tong and Huai, Baoxing and Yuan, Jing},
16 | booktitle={Proceedings of the 28th ACM International Conference on Multimedia},
17 | pages={2755--2764},
18 | year={2020}
19 | }
20 |
21 |
22 | ## Abstract
23 |
24 | Recently, multimodal dialogue systems have engaged increasing attention in several domains such as retail, travel, etc. In spite of the promising performance of pioneer works, existing studies usually focus on utterance-level semantic representations with hierarchical structures, which ignore the context-aware dependencies of multimodal semantic elements, i.e., words and images. Moreover, when integrating the visual content, they only consider images of the current turn, leaving out ones of previous turns as well as their ordinal information. To address these issues, we propose a Multimodal diAlogue systems with semanTic Elements, MATE for short. Specifically, we unfold the multimodal inputs and devise a Multimodal Element-level Encoder to obtain the semantic representation at element-level. Besides, we take into consideration all images that might be relevant to the current turn and inject the sequential characteristics of images through position encoding. Finally, we make comprehensive experiments on a public multimodal dialogue dataset in the retail domain, and improve the BLUE-4 score by 9.49, and NIST score by 1.8469 compared with state-of-the-art methods.
25 |
26 | ## Model Architecture
27 |
28 |
29 |
30 |
31 | The architecture of the proposed MATE model, which includes two main components:
32 |
33 | **Multimodal Element-level Encoder**: In this component, all images from the dialog history and the user query are organized as dialog image memory. Then, we allocate related images to each turn and obtain image-enhanced text embeddings through an attention mechanism. Meanwhile, all images are integrated with a user query to get a query-enhanced image embeddings. Finally, all embeddings are concatenated as multimodal semantic element embeddings.
34 |
35 | **Knowledge-aware Two-Stage Decoder**: It is a variant of a transformer decoder for generating better responses. The first-stage decoder focuses on the multimodal conversation context from the encoder, while the second-stage decoder takes domain knowledge and results from the first decoder to further refine the responses.
36 |
37 | ## Dependency
38 |
39 | Check the packages needed or simply run the command, with python 3.7.
40 |
41 | ```console
42 | ❱❱❱ pip install -r requirement.txt
43 | ```
44 |
45 | ## Preparing Data
46 |
47 |
48 |
49 |
50 |
51 | 1. Download the [MMD dataset](https://amritasaha1812.github.io/MMD/download/) and unzip it. Note that we only use the **dataset.zip** and **image_annoy_index.zip**. The data directory is like this.
52 |
53 | ```console
54 | data
55 | ├── annoy.ann
56 | ├── ImageUrlToIndex.pkl
57 | ├── FileNameMapToIndex.pkl
58 | ├── styletips_synset.txt
59 | ├── celebrity_distribution.json
60 | ├── v1
61 | │ ├── train
62 | │ │ ├── *.json
63 | │ │ └── ...
64 | │ ├── valid
65 | │ └── test
66 | └── v2
67 | ├── train
68 | ├── valid
69 | └── test
70 | ```
71 |
72 | 2. Process with the following command or just download processed data from [Google Driver](https://drive.google.com/drive/folders/1h-caRW06n7oxD1ARKMXm1CLyY14rRhHq?usp=sharing)
73 |
74 | ```console
75 | ❱❱❱ python3 generate_data.py --input_dir data/raw --out_dir data/processed
76 | ```
77 |
78 | The final data directory is like this.
79 |
80 | ```console
81 | data
82 | ├── raw
83 | │ ├── annoy.ann
84 | │ ├── ImageUrlToIndex.pkl
85 | │ ├── FileNameMapToIndex.pkl
86 | │ ├── styletips_synset.txt
87 | │ ├── celebrity_distribution.json
88 | │ ├── v1
89 | │ │ ├── train
90 | │ │ │ ├── *.json
91 | │ │ │ └── ...
92 | │ │ ├── valid
93 | │ │ └── test
94 | │ └── v2
95 | │ ├── train
96 | │ ├── valid
97 | │ └── test
98 | └── processed
99 | ├── knowledge.json
100 | ├── v1
101 | │ ├── train.pkl
102 | │ ├── valid.pkl
103 | │ └── test.pkl
104 | └── v2
105 | ├── train.pkl
106 | ├── valid.pkl
107 | └── test.pkl
108 | ```
109 |
110 | ## Train and test
111 |
112 | Training
113 |
114 | ```console
115 | ❱❱❱ python3 train.py -g 0 --config_file_path config/mate_v1.json --model_path work_path/ --task text --version 1 --context_size 2 --batch_size 32
116 | ```
117 |
118 | Note that at the first time it will generate train data file to config\["work_path"\], so maybe slow.
119 |
120 | Testing
121 |
122 | ```console
123 | ❱❱❱ python3 translate.py -g 0 --config_file_path config/mate_v1.json --model_path work_path/ --checkpoint_file --out_file save_path/
124 | ```
125 |
126 | ## Explanation for config file
127 |
128 | We provide an example config file [mate_v1.json](config/mate_v1.json), which consists of three fields: "training", "data" and "model". The meaning of parameters is as follows:
129 |
130 | training: the parameters in this domain are related to the train process.
131 |
132 | 1. "seed": random seed
133 | 2. "lr": learning rate
134 | 3. "lr_decay": weight decay (L2 penalty)
135 | 4. "max_gradient_norm": max norm of the gradients for clip
136 | 5. "num_epochs": total epochs
137 | 6. "log_batch": logging interval (num of batches)
138 | 7. "evaluate_epoch": evaluation interval (num of epochs)
139 | 8. "patience": patience for early stop
140 | 9. "label_smoothing": if use label smoothing
141 |
142 | data: the parameters in this domain are about data processing.
143 |
144 | 1. "annoy_file": file path for "annoy.ann"
145 | 2. "annoy_pkl": file path for "ImageUrlToIndex.pkl"
146 | 3. "source_path": data source directory
147 | 4. "work_path": work directory
148 | 5. "knowledge_path": knowledge file path
149 | 6. "context_text_cutoff": min word frequency
150 | 7. "text_length": max text length
151 | 8. "image_length": max image num
152 | 9. "num_pos_images": max positive images num
153 | 10. "num_neg_images": max negative images num
154 |
155 | model: the parameters in this domain are related to the model structure and do not need to be adjusted in most cases.
156 |
--------------------------------------------------------------------------------
/config/mate_v1.json:
--------------------------------------------------------------------------------
1 | {
2 | "training": {
3 | "seed": 100,
4 | "lr": 1e-5,
5 | "lr_decay": 0,
6 | "max_gradient_norm": 0.1,
7 | "num_epochs": 50,
8 | "log_batch": 100,
9 | "evaluate_epoch": 1,
10 | "patience": 3,
11 | "label_smoothing": 0
12 | },
13 | "data": {
14 | "annoy_file": "data/raw/annoy.ann",
15 | "annoy_pkl": "data/raw/ImageUrlToIndex.pkl",
16 | "source_path": "data/processed",
17 | "work_path": "data/work_path",
18 | "knowledge_path": "data/processed/knowledge.json",
19 | "context_text_cutoff": 4,
20 | "text_length": 30,
21 | "image_length": 12,
22 | "num_pos_images": 1,
23 | "num_neg_images": 4
24 | },
25 | "model": {
26 | "word_embedding_size": 512,
27 | "image_size": 4096,
28 | "text_n_layers": 6,
29 | "text_n_head": 8,
30 | "text_d_k": 64,
31 | "text_d_v": 64,
32 | "text_d_model": 512,
33 | "text_d_inner": 2048,
34 | "co_n_layers": 6,
35 | "co_n_head": 8,
36 | "co_d_k": 64,
37 | "co_d_v": 64,
38 | "co_d_model": 512,
39 | "co_d_inner": 2048,
40 | "de_n_layers": 6,
41 | "de_n_head": 8,
42 | "de_d_k": 64,
43 | "de_d_v": 64,
44 | "de_d_model": 512,
45 | "de_d_inner": 2048,
46 | "dropout_rate": 0.1,
47 | "use_knowledge": true
48 | }
49 | }
--------------------------------------------------------------------------------
/data/raw/styletips_synset.txt:
--------------------------------------------------------------------------------
1 | footwear , jacket , 718
2 | trouser , v-neck , 44
3 | coat , romper , 71
4 | tote , watch , 31
5 | beanies , sweater , 5
6 | leggings , sandals , 727
7 | casual trousers , winter jacket , 26
8 | leggings , slippers , 304
9 | sunglasses , sweatshirt , 314
10 | bikini , sunglasses , 83
11 | clogs , jeans , 167
12 | running shoes , top , 43
13 | kimono , leggings , 6
14 | bag , card case , 338
15 | dupatta , necklace , 398
16 | henley , sweater , 18
17 | formal trousers , slip ons , 2
18 | palazzo , scarf , 138
19 | shape wear , vest , 20
20 | leggings , wedges , 606
21 | accessories , push-up bra , 6
22 | ring , saree , 24
23 | belly shoes , bottoms , 17
24 | satchel , suit , 29
25 | belt , trousers , 763
26 | bottoms , shrug , 134
27 | apparel , winter jacket , 40
28 | flipflops , t-shirt , 533
29 | hand bag , top , 840
30 | derby , sweatshirt , 34
31 | kurta , trouser , 823
32 | messenger bag , polo , 27
33 | bag , night slip , 17
34 | boots , clutch , 24
35 | bag , fedora , 12
36 | casual jacket , sling bag , 4
37 | accessories , ballerinas , 618
38 | t-shirt , vest , 394
39 | card case , jewelry , 12
40 | blouse , casual trousers , 281
41 | bottoms , suspender , 16
42 | cardigan , glasses , 59
43 | slippers , tunic , 4
44 | accessories , cufflinks , 99
45 | ring , sweatshirt , 35
46 | trousers , v-neck , 2
47 | formal shirt , necktie , 341
48 | layer_1_lower_body , slip ons , 78
49 | leather jacket , maxi dress , 7
50 | card case , suit , 79
51 | cardigan , trousers , 299
52 | bottoms , hand bag , 165
53 | platform heels , trouser , 86
54 | boots , shirt , 517
55 | shorts , suspender , 15
56 | laptop bag , panties , 29
57 | pyjama , sandals , 58
58 | flipflops , leggings , 27
59 | bow tie , card case , 108
60 | satchel , shirt , 15
61 | camisole , palazzo , 8
62 | top , trench coat , 12
63 | loafers , skirt , 150
64 | cape , suit , 12
65 | casual trousers , messenger bag , 18
66 | earrings , sandals , 533
67 | beanies , belt , 12
68 | ballerinas , travel bag , 2
69 | gloves , wedding dress , 354
70 | bag , suit , 62
71 | bottoms , fedora , 92
72 | t-shirt , wallet , 3
73 | high tops , trouser , 28
74 | necklace , sweater , 14
75 | denim jacket , lifestyle shoes , 27
76 | joggers , polo , 111
77 | bottoms , tuxedo , 31
78 | jewelry , lapel pin , 29
79 | cap , dress material , 4
80 | jeans , watch , 436
81 | bag , blouse , 22
82 | bag , sweatshirt , 307
83 | accessories , trackwear , 7
84 | clutch , watch , 17
85 | slip ons , waistcoat , 1
86 | flipflops , purse , 9
87 | kurta , palazzo , 785
88 | pajama , satchel , 32
89 | sandals , v-neck , 665
90 | leather jacket , sweatshirt , 1
91 | slip ons , trench coat , 1
92 | bottoms , brogues , 6
93 | jewelry , top , 96
94 | apparel , outerwear , 66
95 | bracelet , dupatta , 182
96 | bottoms , flipflops , 743
97 | brogues , maxi dress , 2
98 | boots , sweater , 45
99 | t-shirt , training shoes , 55
100 | belt , layer_1_lower_body , 1
101 | maxi dress , platform heels , 266
102 | accessories , backpack , 69
103 | sports shoes , t-shirt , 794
104 | ballerinas , bikini , 189
105 | brogues , cardigan , 30
106 | jumpsuit , pumps , 768
107 | lifestyle shoes , trousers , 489
108 | casual shoes , v-neck , 188
109 | jacket , spectators , 7
110 | cardigan , joggers , 9
111 | hoodie , loafers , 1
112 | footwear , trackpants , 118
113 | sports bra , vest , 50
114 | casual shoes , trousers , 695
115 | handkerchief , maxi dress , 2
116 | cardigan , derby , 7
117 | bottoms , fitness band , 34
118 | glasses , jewelry , 176
119 | joggers , loafers , 107
120 | floaters , trackpants , 6
121 | lapel pin , suit , 37
122 | glasses , top , 142
123 | cardigan , party dress , 16
124 | jeans , pumps , 603
125 | dress socks , footwear , 212
126 | loafers , stockings , 25
127 | hipsters , padded bra , 7
128 | apparel , lapel pin , 11
129 | peeptoes , skirt , 536
130 | pumps , romper , 6
131 | belt , chinos , 457
132 | scarf , tunic , 89
133 | blouse , leggings , 58
134 | sunglasses , wallet , 126
135 | apparel , bag , 689
136 | blouse , jeans , 875
137 | sandals , trackwear , 141
138 | flipflops , glasses , 13
139 | footwear , sports bra , 5
140 | necktie , tights , 1
141 | accessories , ring , 129
142 | layer_1_upper_body , slippers , 416
143 | travel bag , trousers , 3
144 | cardigan , suspender , 45
145 | ballerinas , laptop bag , 5
146 | denim shorts , lifestyle shoes , 20
147 | pyjama , suit , 62
148 | camisole , necktie , 27
149 | jacket , scarf , 52
150 | coat , suit , 14
151 | cape , jewelry , 6
152 | chinos , henley , 303
153 | casual trousers , flipflops , 36
154 | accessories , palazzo , 3
155 | scarf , suitcase , 66
156 | boxer briefs , suit , 1
157 | leggings , peeptoes , 93
158 | camisole , high tops , 23
159 | bracelet , vest , 122
160 | ballerinas , party dress , 63
161 | espadrilles , suit , 41
162 | accessories , sports bra , 35
163 | canvas shoes , denim jacket , 2
164 | belt , slippers , 1
165 | glasses , shirt , 57
166 | pumps , sling bag , 93
167 | casual shirt , sports sandals , 4
168 | espadrilles , kurti , 16
169 | apparel , apparel , 438
170 | coat , mittens , 3
171 | running shoes , trackpants , 101
172 | goggles , suit , 31
173 | bag , laptop sleeve , 11
174 | denim jacket , suit , 8
175 | sweatshirt , waistcoat , 6
176 | belly shoes , jacket , 23
177 | belt , t-shirt , 145
178 | jumper , wedges , 30
179 | apparel , stilettos , 534
180 | messenger bag , trousers , 257
181 | sling bag , trouser , 55
182 | formal shirt , slip ons , 19
183 | belly shoes , palazzo , 272
184 | loafers , trackwear , 27
185 | footwear , shrug , 451
186 | denim jacket , scarf , 16
187 | socks , trousers , 33
188 | loafers , suspender , 4
189 | trackpants , vest , 16
190 | clutch , kurta , 702
191 | ballerinas , shorts , 677
192 | formal shoes , glasses , 44
193 | hand bag , maxi dress , 98
194 | backpack , card case , 37
195 | cape , jeans , 74
196 | bag , jumpsuit , 171
197 | accessories , saree , 9
198 | oxfords shoe , suit , 1
199 | kurta , thermal , 173
200 | flipflops , sleepwear , 139
201 | cardigan , thermal , 6
202 | suspender , wallet , 35
203 | shrug , trousers , 157
204 | t-shirt , trousers , 564
205 | footwear , hipsters , 3
206 | casual shoes , jewelry , 1
207 | sandals , sports bra , 24
208 | ballerinas , turtleneck , 22
209 | loafers , night slip , 30
210 | accessories , down jacket , 8
211 | goggles , tote , 6
212 | loafers , shirt dress , 15
213 | scarf , sweatshirt , 215
214 | goggles , trackwear , 1
215 | glasses , layer_1_upper_body , 6
216 | scarf , sleepwear , 62
217 | derby , messenger bag , 84
218 | blouse , necklace , 67
219 | footwear , thongs , 128
220 | accessories , jacket , 560
221 | coat , dungaree , 44
222 | casual shirt , jeans , 876
223 | loafers , scarf , 9
224 | bag , briefs , 6
225 | laptop bag , ring , 4
226 | derby , shorts , 4
227 | formal shirt , pumps , 43
228 | bottoms , stilettos , 397
229 | dupatta , stilettos , 2
230 | jacket , necklace , 35
231 | jeans , scarf , 11
232 | accessories , cap , 357
233 | jeans , oxfords shoe , 20
234 | apparel , sports shoes , 825
235 | canvas shoes , casual jacket , 2
236 | messenger bag , panties , 64
237 | belly shoes , maxi dress , 442
238 | apparel , polo , 67
239 | bodysuit , corset , 101
240 | chinos , vest , 76
241 | running shorts , sports shoes , 4
242 | accessories , cape , 119
243 | footwear , joggers , 557
244 | flipflops , thongs , 498
245 | messenger bag , wing tips , 1
246 | brogues , suit , 134
247 | chinos , derby , 50
248 | layer_1_upper_body , socks , 1
249 | brogues , formal shirt , 64
250 | shorts , training shoes , 21
251 | v-neck , winter jacket , 19
252 | dungaree , necklace , 7
253 | cap , night slip , 5
254 | earrings , kurti , 349
255 | shirt dress , sports shoes , 22
256 | accessories , running shoes , 519
257 | casual shoes , top , 587
258 | canvas shoes , sunglasses , 49
259 | jeans , leather jacket , 313
260 | coat , jeans , 203
261 | henley , purse , 44
262 | costume , wedges , 55
263 | ballerinas , trackpants , 48
264 | coat , stilettos , 15
265 | cardigan , formal trousers , 38
266 | stilettos , trackpants , 2
267 | boots , cardigan , 51
268 | casual trousers , floaters , 1
269 | sling bag , stilettos , 36
270 | casual trousers , shrug , 1
271 | ring , slippers , 4
272 | jeans , jumper , 179
273 | jeans , monk straps , 1
274 | ballerinas , rugby , 50
275 | bottoms , bracelet , 19
276 | crewneck , tunic , 14
277 | bottoms , boxers , 68
278 | cap , high tops , 22
279 | goggles , trouser , 107
280 | accessories , loafers , 11
281 | pyjama , sports shoes , 4
282 | peeptoes , sunglasses , 20
283 | espadrilles , trouser , 115
284 | formal shirt , oxfords shoe , 19
285 | belt , sports sandals , 19
286 | cardigan , jeans , 68
287 | bag , lifestyle shoes , 173
288 | flipflops , kurti , 14
289 | clutch , dupatta , 155
290 | belly shoes , trouser , 661
291 | crewneck , leggings , 2
292 | joggers , wallet , 15
293 | apparel , cufflinks , 116
294 | jeggings , platform heels , 24
295 | coat , maxi dress , 43
296 | dress , winter jacket , 16
297 | jewelry , maxi dress , 7
298 | boots , casual shirt , 95
299 | pumps , sweater , 150
300 | glasses , training shoes , 5
301 | earrings , jumpsuit , 247
302 | saree , watch , 29
303 | gloves , purse , 9
304 | floaters , trouser , 2
305 | belly shoes , trousers , 370
306 | scarf , skirt , 135
307 | derby , waistcoat , 19
308 | dress , purse , 679
309 | footwear , jeggings , 134
310 | espadrilles , tote , 4
311 | ballerinas , cargo shorts , 358
312 | henley , messenger bag , 34
313 | sports sandals , vest , 24
314 | chinos , trunk , 102
315 | necktie , pumps , 101
316 | cap , swimsuit , 31
317 | henley , joggers , 26
318 | cargo shorts , loafers , 43
319 | belly shoes , footwear , 23
320 | blazer , footwear , 391
321 | cardigan , goggles , 36
322 | cufflinks , necktie , 640
323 | jacket , sports sandals , 23
324 | kurta , shrug , 86
325 | bag , bow tie , 72
326 | cudidar , dupatta , 130
327 | stockings , sweater , 9
328 | apparel , sling bag , 242
329 | denim shorts , loafers , 8
330 | gloves , leather jacket , 1
331 | casual shoes , dungaree , 59
332 | blazer , top , 285
333 | shrug , tights , 13
334 | clutch , palazzo , 6
335 | watch , winter jacket , 34
336 | bottoms , robe , 12
337 | blouse , espadrilles , 20
338 | clogs , polo , 24
339 | backpack , espadrilles , 5
340 | boots , fedora , 14
341 | backpack , trouser , 44
342 | bag , scarf , 4
343 | cufflinks , tuxedo , 4
344 | slip ons , thermal , 6
345 | cap , sweater , 20
346 | slip ons , suitcase , 61
347 | boots , sweatshirt , 283
348 | bottoms , padded bra , 4
349 | necktie , suit , 685
350 | accessories , bomber jacket , 5
351 | leggings , socks , 167
352 | jumpsuit , necklace , 97
353 | denim shorts , slip ons , 4
354 | slippers , trousers , 258
355 | cap , slip ons , 50
356 | night slip , thongs , 16
357 | bag , dupatta , 28
358 | dress , flipflops , 271
359 | chinos , clogs , 8
360 | bag , kurta , 5
361 | ring , trouser , 11
362 | blouse , sandals , 853
363 | belt , formal shoes , 167
364 | cap , watch , 86
365 | hand bag , ring , 20
366 | ballerinas , socks , 289
367 | shrug , trouser , 254
368 | lifestyle shoes , tote , 7
369 | footwear , maxi dress , 776
370 | dress socks , jeans , 15
371 | cape , footwear , 142
372 | dress , platform heels , 127
373 | belt , swimsuit , 62
374 | boots , short dress , 28
375 | earrings , pumps , 76
376 | necklace , trousers , 22
377 | bomber jacket , cap , 5
378 | cap , flipflops , 173
379 | dupatta , satchel , 1
380 | camisole , swimsuit , 10
381 | accessories , wedding dress , 104
382 | palazzo , sweatshirt , 23
383 | backpack , layer_1_upper_body , 8
384 | polo , sweater , 143
385 | hipsters , trousers , 31
386 | leggings , shrug , 21
387 | gloves , sunglasses , 20
388 | socks , thongs , 1
389 | dress , slippers , 132
390 | bottoms , skirt , 13
391 | pajama , purse , 14
392 | suit , trench coat , 8
393 | bag , sweater , 88
394 | apparel , shirt dress , 203
395 | bag , training shoes , 69
396 | bag , joggers , 70
397 | accessories , pyjama , 124
398 | goggles , sweatshirt , 234
399 | ballerinas , jacket , 532
400 | footwear , training shoes , 114
401 | ballerinas , jumper , 32
402 | bag , jewelry , 80
403 | bag , blazer , 7
404 | bracelet , gloves , 12
405 | formal shirt , trousers , 48
406 | necklace , saree , 649
407 | bow tie , jacket , 56
408 | derby , shirt , 705
409 | bodysuit , cap , 28
410 | apparel , tuxedo , 83
411 | bomber jacket , sandals , 13
412 | bracelet , shorts , 6
413 | footwear , layer_1_lower_body , 8
414 | boots , messenger bag , 168
415 | boots , footwear , 548
416 | boots , gloves , 41
417 | casual trousers , sweater , 18
418 | accessories , pajama , 315
419 | casual shoes , polo , 729
420 | boots , mittens , 15
421 | flipflops , palazzo , 5
422 | apparel , night slip , 72
423 | casual trousers , sunglasses , 14
424 | casual trousers , wedges , 2
425 | dungaree , shrug , 2
426 | boxer briefs , polo , 1
427 | purse , suit , 189
428 | ballerinas , sweatshirt , 153
429 | accessories , messenger bag , 43
430 | jumpsuit , panties , 17
431 | dress socks , suit , 16
432 | belt , belt , 11
433 | jacket , satchel , 14
434 | cap , satchel , 17
435 | cardigan , kurta , 61
436 | polo , stilettos , 22
437 | loafers , tuxedo , 22
438 | accessories , sling bag , 78
439 | casual trousers , sports shoes , 91
440 | cardigan , swimsuit , 8
441 | dress , necklace , 468
442 | high tops , shirt , 134
443 | suit , vest , 26
444 | tote , wedges , 18
445 | cap , wedges , 142
446 | palazzo , satchel , 6
447 | goggles , loafers , 168
448 | corset , shrug , 16
449 | thongs , wedges , 259
450 | churidar set , glasses , 6
451 | athletic socks , slip ons , 4
452 | accessories , swim trunks , 11
453 | bikini , kimono , 36
454 | brogues , goggles , 6
455 | goggles , skirt , 68
456 | bottoms , leggings , 47
457 | leggings , loafers , 12
458 | flipflops , shirt , 243
459 | bottoms , churidar set , 330
460 | ballerinas , stockings , 58
461 | blouse , bracelet , 139
462 | trouser , winter jacket , 327
463 | casual trousers , pumps , 7
464 | belt , tote , 93
465 | scarf , sunglasses , 15
466 | suspender , vest , 161
467 | ankle boots , jeans , 137
468 | apparel , windcheater , 39
469 | espadrilles , jumpsuit , 8
470 | footwear , swimsuit , 10
471 | bikini , goggles , 38
472 | formal shoes , goggles , 9
473 | bag , shorts , 323
474 | bag , sling bag , 540
475 | sandals , saree , 223
476 | sports shoes , trackpants , 409
477 | bottoms , joggers , 9
478 | boots , trench coat , 66
479 | purse , skirt , 188
480 | costume , leather jacket , 3
481 | ballerinas , robe , 9
482 | sleepwear , slip ons , 37
483 | footwear , suit , 644
484 | crewneck , trouser , 3
485 | blouse , outerwear , 1
486 | mini skirt , tunic , 3
487 | espadrilles , formal trousers , 156
488 | bag , henley , 19
489 | jewelry , thongs , 10
490 | backpack , necktie , 21
491 | accessories , bottoms , 186
492 | sports shoes , watch , 158
493 | espadrilles , skirt , 5
494 | accessories , mini skirt , 43
495 | blazer , casual trousers , 5
496 | bikini , sandals , 1
497 | footwear , high tops , 111
498 | boots , kurta , 11
499 | espadrilles , maxi dress , 48
500 | briefs , polo , 21
501 | accessories , bracelet , 191
502 | peeptoes , shirt , 485
503 | top , travel bag , 363
504 | cardigan , tights , 56
505 | casual shirt , palazzo , 1
506 | ballerinas , footwear , 869
507 | ankle boots , socks , 4
508 | sports shoes , trackwear , 602
509 | boots , shorts , 6
510 | shrug , stilettos , 28
511 | apparel , swimwear , 26
512 | cardigan , casual trousers , 18
513 | thermal , trouser , 79
514 | ballerinas , trench coat , 1
515 | scarf , top , 678
516 | wallet , wing tips , 1
517 | coat , short dress , 1
518 | bikini , vest , 14
519 | bottoms , trench coat , 5
520 | accessories , clogs , 28
521 | chinos , loafers , 764
522 | ballerinas , corset , 2
523 | earrings , skirt , 211
524 | boots , denim shorts , 11
525 | scarf , shrug , 72
526 | apparel , running shoes , 654
527 | polo , trousers , 15
528 | accessories , casual shirt , 7
529 | accessories , stockings , 9
530 | formal shoes , wallet , 11
531 | jacket , platform heels , 5
532 | dungaree , pumps , 86
533 | jacket , mittens , 17
534 | belt , casual shoes , 4
535 | apparel , t-shirt , 504
536 | ballerinas , cap , 449
537 | belt , loafers , 128
538 | joggers , slippers , 9
539 | bottoms , waistcoat , 3
540 | belt , joggers , 7
541 | formal trousers , tuxedo , 3
542 | casual shoes , wallet , 68
543 | lifestyle shoes , watch , 220
544 | glasses , jeans , 138
545 | hipsters , sports bra , 3
546 | shirt , slippers , 298
547 | churidar set , footwear , 719
548 | leather jacket , short dress , 1
549 | bodysuit , tote , 8
550 | jeans , running shoes , 343
551 | backpack , running shoes , 29
552 | coat , swimsuit , 1
553 | apparel , pajama , 632
554 | watch , watch , 18
555 | coat , high tops , 8
556 | trench coat , wallet , 1
557 | sunglasses , travel bag , 108
558 | bag , hipsters , 25
559 | card case , sunglasses , 11
560 | bottoms , satchel , 22
561 | necktie , sandals , 309
562 | slip ons , trackwear , 112
563 | belt , watch , 115
564 | bracelet , sling bag , 59
565 | bracelet , sunglasses , 5
566 | necktie , shirt , 752
567 | belly shoes , formal trousers , 1
568 | romper , stockings , 2
569 | cap , dress , 374
570 | leggings , necklace , 52
571 | footwear , tunic , 648
572 | hand bag , necklace , 33
573 | boxers , vest , 3
574 | chinos , jumper , 3
575 | dungaree , loafers , 17
576 | top , wedges , 803
577 | costume , espadrilles , 8
578 | belt , cape , 7
579 | purse , shrug , 9
580 | casual jacket , polo , 23
581 | bag , ring , 124
582 | necklace , tunic , 69
583 | hipsters , sunglasses , 28
584 | accessories , dress socks , 92
585 | bottoms , socks , 36
586 | canvas shoes , watch , 10
587 | espadrilles , shorts , 11
588 | cape , t-shirt , 29
589 | bow tie , cap , 70
590 | boots , necktie , 2
591 | tunic , watch , 173
592 | palazzo , platform heels , 147
593 | hand bag , palazzo , 1
594 | thongs , trouser , 83
595 | handkerchief , jeans , 6
596 | bracelet , churidar set , 305
597 | casual shirt , hand bag , 18
598 | apparel , top , 873
599 | belt , sweater , 5
600 | cap , sports bra , 8
601 | rugby , socks , 1
602 | formal shoes , formal trousers , 247
603 | boots , sleepwear , 1
604 | gloves , wedges , 10
605 | clutch , sandals , 143
606 | cardigan , formal shoes , 11
607 | cardigan , peeptoes , 5
608 | peeptoes , saree , 4
609 | dress , stilettos , 342
610 | shorts , slip ons , 292
611 | cufflinks , cufflinks , 26
612 | sweater , v-neck , 151
613 | bag , loafers , 592
614 | bottoms , swimsuit , 19
615 | camisole , romper , 7
616 | ballerinas , hipsters , 38
617 | accessories , sweatshirt , 199
618 | ring , trackwear , 250
619 | blouse , satchel , 8
620 | jumpsuit , vest , 26
621 | apparel , backpack , 21
622 | camisole , slippers , 1
623 | necktie , shirt dress , 20
624 | suit , tote , 99
625 | fedora , flipflops , 34
626 | blouse , high tops , 1
627 | jeans , suspender , 318
628 | accessories , shorts , 108
629 | pyjama , t-shirt , 238
630 | glasses , sleepwear , 27
631 | kurti , waistcoat , 1
632 | casual shirt , sling bag , 1
633 | backpack , loafers , 25
634 | fedora , lifestyle shoes , 9
635 | boots , hand bag , 251
636 | casual jacket , joggers , 27
637 | card case , vest , 1
638 | jeans , thermal , 50
639 | footwear , night slip , 106
640 | pyjama , sweatshirt , 23
641 | earrings , shorts , 73
642 | ankle boots , bottoms , 13
643 | accessories , waistcoat , 52
644 | bikini , thongs , 15
645 | jeans , sunglasses , 455
646 | bra , pumps , 149
647 | jumpsuit , sling bag , 12
648 | blouse , formal trousers , 37
649 | dupatta , sling bag , 6
650 | jeggings , jumper , 24
651 | apparel , panties , 698
652 | brogues , necktie , 50
653 | espadrilles , palazzo , 6
654 | henley , oxfords shoe , 6
655 | bracelet , chinos , 20
656 | hipsters , suit , 14
657 | canvas shoes , polo , 45
658 | casual shirt , pumps , 45
659 | necktie , oxfords shoe , 44
660 | dress , sports shoes , 419
661 | sweatshirt , windcheater , 10
662 | accessories , peacoat , 1
663 | bra , sports shoes , 87
664 | bottoms , loafers , 565
665 | canvas shoes , trousers , 66
666 | accessories , sleepwear , 16
667 | ballerinas , pajama , 28
668 | cufflinks , jacket , 214
669 | apparel , hand bag , 822
670 | shirt dress , stilettos , 9
671 | boxers , casual shoes , 6
672 | card case , gloves , 5
673 | jumpsuit , socks , 39
674 | coat , pumps , 33
675 | pumps , satchel , 68
676 | casual shoes , jeans , 821
677 | jumper , short dress , 12
678 | backpack , footwear , 274
679 | cap , pumps , 13
680 | bottoms , scarf , 12
681 | jeans , vest , 470
682 | glasses , glasses , 301
683 | bottoms , espadrilles , 11
684 | chinos , winter jacket , 8
685 | bottoms , clogs , 30
686 | henley , loafers , 694
687 | jacket , jewelry , 11
688 | scarf , sweater , 59
689 | brogues , sweater , 30
690 | backpack , cardigan , 18
691 | chinos , espadrilles , 8
692 | bikini , bottoms , 2
693 | boots , vest , 7
694 | layer_1_upper_body , necktie , 172
695 | boots , sling bag , 53
696 | bra , ring , 37
697 | dress socks , wing tips , 4
698 | shirt dress , watch , 26
699 | apparel , denim jacket , 46
700 | high tops , trench coat , 1
701 | costume , pumps , 14
702 | bag , trunk , 93
703 | cap , thongs , 55
704 | cap , trouser , 114
705 | casual jacket , sunglasses , 16
706 | henley , stilettos , 5
707 | belt , corset , 43
708 | bottoms , lifestyle shoes , 7
709 | handkerchief , necktie , 238
710 | cardigan , laptop bag , 12
711 | fedora , shorts , 68
712 | blouse , coat , 54
713 | casual shoes , maxi dress , 26
714 | jeans , sweater , 796
715 | beanies , sweatshirt , 7
716 | cardigan , watch , 45
717 | sandals , shape wear , 43
718 | henley , watch , 16
719 | cap , loafers , 16
720 | belt , purse , 341
721 | backpack , costume , 11
722 | flipflops , sunglasses , 54
723 | socks , trouser , 78
724 | sunglasses , waistcoat , 14
725 | dress , mittens , 5
726 | pumps , suit , 61
727 | ballerinas , jumpsuit , 744
728 | boots , stockings , 14
729 | necklace , scarf , 43
730 | apparel , briefs , 49
731 | bag , hand bag , 836
732 | high tops , jeans , 230
733 | dupatta , earrings , 356
734 | sweatshirt , winter jacket , 52
735 | bracelet , cardigan , 10
736 | bag , cargo shorts , 6
737 | monk straps , skirt , 1
738 | bag , boxers , 27
739 | sandals , waistcoat , 18
740 | footwear , windcheater , 15
741 | ballerinas , handkerchief , 2
742 | outerwear , pumps , 4
743 | swimwear , t-shirt , 6
744 | bracelet , jeans , 55
745 | clutch , lehenga , 18
746 | bag , casual jacket , 31
747 | purse , shirt , 213
748 | cargo shorts , necktie , 15
749 | apparel , goggles , 89
750 | bag , layer_1_upper_body , 17
751 | clutch , jacket , 17
752 | stockings , wedding dress , 9
753 | jeggings , winter jacket , 813
754 | cardigan , sweatshirt , 647
755 | watch , wedding dress , 4
756 | boots , tote , 16
757 | palazzo , watch , 107
758 | earrings , vest , 14
759 | camisole , jumpsuit , 3
760 | camisole , cap , 45
761 | apparel , espadrilles , 58
762 | camisole , glasses , 13
763 | backpack , sweatshirt , 67
764 | belt , boxer briefs , 20
765 | purse , wedges , 126
766 | sweatshirt , trousers , 112
767 | dress , watch , 361
768 | kimono , suit , 9
769 | casual shoes , tunic , 69
770 | socks , trunk , 2
771 | bodysuit , push-up bra , 4
772 | sandals , vest , 8
773 | footwear , gloves , 8
774 | panties , socks , 14
775 | hand bag , watch , 20
776 | derby , t-shirt , 92
777 | cap , romper , 71
778 | henley , leggings , 27
779 | peeptoes , top , 734
780 | polo , swim trunks , 3
781 | glasses , layer_1_lower_body , 5
782 | footwear , running shorts , 6
783 | pyjama , thermal , 4
784 | jumpsuit , slippers , 1
785 | sandals , swimwear , 75
786 | sports shoes , suit , 49
787 | sweater , top , 531
788 | party dress , ring , 2
789 | shape wear , thermal , 58
790 | jewelry , tote , 17
791 | belt , jacket , 15
792 | bomber jacket , formal shirt , 26
793 | layer_1_lower_body , thermal , 12
794 | earrings , flipflops , 4
795 | ring , satchel , 97
796 | belt , gloves , 20
797 | jeans , sweatshirt , 867
798 | cap , leather jacket , 9
799 | formal trousers , necktie , 184
800 | flipflops , jeans , 474
801 | ring , suit , 13
802 | coat , travel bag , 12
803 | slip ons , swimwear , 12
804 | bracelet , wallet , 92
805 | canvas shoes , sweater , 54
806 | footwear , goggles , 377
807 | espadrilles , sweatshirt , 13
808 | peeptoes , shrug , 5
809 | casual trousers , top , 59
810 | joggers , sports bra , 6
811 | bracelet , tuxedo , 34
812 | saree , sling bag , 120
813 | sports shoes , v-neck , 583
814 | apparel , rugby , 4
815 | bra , satchel , 2
816 | dungaree , goggles , 12
817 | flipflops , layer_1_upper_body , 183
818 | bomber jacket , henley , 12
819 | dress , spectators , 2
820 | glasses , pajama , 18
821 | scarf , trouser , 62
822 | hand bag , henley , 31
823 | hoodie , necktie , 20
824 | casual jacket , pyjama , 11
825 | footwear , sports shoes , 675
826 | bow tie , waistcoat , 12
827 | belt , romper , 74
828 | casual shirt , necklace , 3
829 | necklace , tuxedo , 34
830 | jeans , training shoes , 5
831 | running shoes , sling bag , 7
832 | blazer , necklace , 23
833 | coat , scarf , 306
834 | accessories , trench coat , 5
835 | chinos , travel bag , 67
836 | goggles , wallet , 43
837 | card case , suitcase , 1
838 | cap , pyjama , 7
839 | shrug , sweatshirt , 110
840 | footwear , layer_1_upper_body , 12
841 | high tops , leggings , 34
842 | bottoms , goggles , 204
843 | high tops , maxi dress , 26
844 | formal trousers , top , 110
845 | jeans , wing tips , 31
846 | ring , swimwear , 9
847 | chinos , suitcase , 6
848 | goggles , winter jacket , 12
849 | hand bag , high tops , 16
850 | bracelet , kurta , 39
851 | jacket , sandals , 22
852 | goggles , satchel , 17
853 | accessories , top , 656
854 | handkerchief , scarf , 154
855 | stilettos , tote , 29
856 | accessories , kurta , 40
857 | sweater , t-shirt , 630
858 | dress socks , gloves , 22
859 | boots , outerwear , 20
860 | messenger bag , running shoes , 44
861 | goggles , messenger bag , 4
862 | shorts , sling bag , 110
863 | slip ons , trunk , 15
864 | camisole , joggers , 10
865 | ring , tunic , 6
866 | scarf , trousers , 28
867 | jewelry , sweatshirt , 9
868 | canvas shoes , jeans , 213
869 | chinos , pumps , 159
870 | apparel , formal shoes , 811
871 | bag , bodysuit , 144
872 | earrings , t-shirt , 433
873 | athletic socks , footwear , 104
874 | cap , robe , 14
875 | socks , sweater , 2
876 | sports shoes , track suit , 3
877 | accessories , derby , 1
878 | apparel , bomber jacket , 240
879 | flipflops , trousers , 128
880 | camisole , tights , 11
881 | footwear , leather jacket , 155
882 | apparel , belly shoes , 453
883 | canvas shoes , formal trousers , 36
884 | kurti , shrug , 13
885 | costume , purse , 9
886 | gloves , panties , 26
887 | footwear , oxfords shoe , 80
888 | suit , thongs , 35
889 | corset , sandals , 18
890 | sleepwear , vest , 147
891 | belt , shrug , 21
892 | leather jacket , trouser , 10
893 | accessories , kimono , 73
894 | cape , sandals , 49
895 | backpack , top , 242
896 | balconette bra , glasses , 2
897 | purse , trouser , 329
898 | backpack , gloves , 24
899 | bag , slip ons , 169
900 | bra , scarf , 7
901 | apparel , loafers , 806
902 | clutch , jewelry , 23
903 | crewneck , v-neck , 2
904 | beanies , watch , 2
905 | goggles , sports sandals , 80
906 | gloves , winter jacket , 1
907 | casual jacket , top , 141
908 | bottoms , trunk , 81
909 | boots , leather jacket , 30
910 | apparel , boxers , 167
911 | formal trousers , sweater , 38
912 | hand bag , kimono , 12
913 | jeggings , stilettos , 42
914 | goggles , wedges , 66
915 | v-neck , wedges , 5
916 | sandals , watch , 196
917 | earrings , lehenga , 76
918 | coat , footwear , 153
919 | necktie , v-neck , 15
920 | bag , chinos , 97
921 | glasses , sweatshirt , 161
922 | blazer , sunglasses , 6
923 | cape , pumps , 10
924 | bikini , footwear , 68
925 | boots , wedding dress , 15
926 | handkerchief , suit , 251
927 | pumps , sweatshirt , 111
928 | bra , cap , 46
929 | footwear , formal shirt , 506
930 | blouse , footwear , 799
931 | ankle boots , blouse , 1
932 | purse , watch , 198
933 | clogs , watch , 2
934 | suspender , tuxedo , 187
935 | layer_1_lower_body , wallet , 7
936 | party dress , sandals , 68
937 | bottoms , cardigan , 33
938 | churidar set , peeptoes , 100
939 | footwear , kimono , 25
940 | bottoms , jumper , 37
941 | slippers , tote , 15
942 | satchel , tunic , 18
943 | coat , necktie , 33
944 | sling bag , tunic , 86
945 | cardigan , hand bag , 40
946 | bow tie , jeans , 1
947 | cap , coat , 68
948 | bow tie , vest , 14
949 | gloves , sandals , 6
950 | pyjama , vest , 21
951 | bodysuit , scarf , 25
952 | churidar set , platform heels , 58
953 | slippers , trackwear , 12
954 | accessories , leather jacket , 63
955 | hoodie , jewelry , 6
956 | formal shoes , necktie , 12
957 | shirt , sling bag , 22
958 | accessories , brogues , 1
959 | bottoms , floaters , 95
960 | card case , sling bag , 80
961 | cape , sports shoes , 2
962 | cap , kimono , 3
963 | leggings , scarf , 47
964 | bracelet , necktie , 622
965 | bow tie , slip ons , 6
966 | training shoes , trousers , 59
967 | cardigan , vest , 26
968 | waistcoat , watch , 8
969 | sports shoes , vest , 216
970 | jewelry , kurti , 113
971 | bra , glasses , 144
972 | apparel , romper , 703
973 | jacket , necktie , 469
974 | accessories , casual shoes , 365
975 | accessories , hipsters , 39
976 | bottoms , corset , 16
977 | belt , scarf , 136
978 | bracelet , handkerchief , 159
979 | jeans , windcheater , 162
980 | espadrilles , footwear , 11
981 | bag , clutch , 395
982 | casual shoes , earrings , 51
983 | bag , cap , 180
984 | bag , kimono , 3
985 | messenger bag , trench coat , 8
986 | hand bag , slippers , 2
987 | training shoes , watch , 9
988 | shorts , sports sandals , 225
989 | footwear , laptop bag , 64
990 | belt , bracelet , 6
991 | bottoms , jeans , 47
992 | corset , gloves , 1
993 | sweater , sweatshirt , 623
994 | sleepwear , tote , 1
995 | panties , scarf , 19
996 | formal shoes , jeggings , 12
997 | formal shoes , socks , 716
998 | sunglasses , wedding dress , 1
999 | bag , swimwear , 1
1000 | belt , wing tips , 7
1001 | cape , costume , 49
1002 | backpack , blouse , 9
1003 | bottoms , thermal , 6
1004 | stilettos , tunic , 269
1005 | bow tie , suspender , 481
1006 | jacket , suspender , 32
1007 | slippers , socks , 10
1008 | necktie , sunglasses , 3
1009 | mittens , shorts , 2
1010 | joggers , sweatshirt , 90
1011 | bottoms , glasses , 244
1012 | sports shoes , stockings , 22
1013 | chinos , oxfords shoe , 19
1014 | fedora , footwear , 82
1015 | crewneck , footwear , 19
1016 | glasses , swimwear , 1
1017 | cap , cargo shorts , 6
1018 | fedora , suit , 12
1019 | messenger bag , shrug , 6
1020 | cardigan , dungaree , 14
1021 | apparel , track suit , 2
1022 | churidar set , sandals , 494
1023 | denim shorts , sweatshirt , 11
1024 | card case , footwear , 38
1025 | footwear , tuxedo , 84
1026 | messenger bag , shirt , 73
1027 | maxi dress , thongs , 48
1028 | necktie , winter jacket , 8
1029 | apparel , boxer briefs , 281
1030 | suit , sunglasses , 158
1031 | jeggings , t-shirt , 780
1032 | fitness band , sweatshirt , 10
1033 | accessories , shirt , 697
1034 | clutch , pumps , 163
1035 | accessories , bodysuit , 218
1036 | earrings , footwear , 4
1037 | shorts , tote , 32
1038 | hand bag , scarf , 278
1039 | apparel , blazer , 356
1040 | cap , top , 577
1041 | hand bag , trousers , 29
1042 | flipflops , scarf , 14
1043 | suitcase , tights , 4
1044 | jumper , t-shirt , 3
1045 | bottoms , suitcase , 237
1046 | bag , derby , 64
1047 | coat , satchel , 8
1048 | messenger bag , watch , 4
1049 | stilettos , v-neck , 12
1050 | hand bag , trackwear , 19
1051 | sweatshirt , trackpants , 135
1052 | cargo shorts , espadrilles , 9
1053 | clutch , necklace , 11
1054 | bag , romper , 197
1055 | handkerchief , trouser , 49
1056 | cape , wedding dress , 1
1057 | jeans , tunic , 739
1058 | handkerchief , kimono , 17
1059 | kurta , trackpants , 10
1060 | boots , peacoat , 2
1061 | trousers , vest , 39
1062 | briefs , handkerchief , 1
1063 | card case , costume , 1
1064 | socks , watch , 1
1065 | camisole , shrug , 54
1066 | jumpsuit , scarf , 26
1067 | bottoms , briefs , 49
1068 | suit , wedges , 473
1069 | bodysuit , necktie , 57
1070 | canvas shoes , casual shirt , 526
1071 | belt , cap , 102
1072 | footwear , kurti , 733
1073 | glasses , stockings , 3
1074 | handkerchief , purse , 25
1075 | denim jacket , footwear , 83
1076 | floaters , skirt , 1
1077 | flipflops , travel bag , 6
1078 | espadrilles , glasses , 29
1079 | churidar set , purse , 14
1080 | shorts , watch , 197
1081 | cardigan , romper , 48
1082 | bottoms , hoodie , 19
1083 | casual shirt , flipflops , 35
1084 | sandals , swimsuit , 56
1085 | derby , fedora , 4
1086 | cap , t-shirt , 386
1087 | top , trouser , 874
1088 | belt , travel bag , 252
1089 | flipflops , jacket , 36
1090 | joggers , t-shirt , 681
1091 | backpack , cap , 8
1092 | casual shoes , joggers , 282
1093 | boots , cap , 317
1094 | bag , coat , 76
1095 | cufflinks , suit , 229
1096 | jewelry , slip ons , 2
1097 | high tops , t-shirt , 36
1098 | accessories , crewneck , 59
1099 | cufflinks , sling bag , 2
1100 | bow tie , trousers , 81
1101 | bow tie , necklace , 459
1102 | necktie , romper , 221
1103 | outerwear , scarf , 16
1104 | camisole , henley , 4
1105 | bottoms , dress socks , 7
1106 | bag , casual shirt , 7
1107 | apparel , casual shoes , 770
1108 | glasses , necktie , 16
1109 | belt , casual trousers , 25
1110 | saree , tote , 14
1111 | belt , leggings , 168
1112 | accessories , pumps , 322
1113 | clogs , vest , 1
1114 | layer_1_lower_body , sleepwear , 231
1115 | backpack , sports shoes , 43
1116 | apparel , bow tie , 195
1117 | apparel , sunglasses , 671
1118 | slip ons , suit , 132
1119 | camisole , necklace , 18
1120 | leggings , purse , 31
1121 | shorts , travel bag , 60
1122 | bag , skirt , 391
1123 | belly shoes , clutch , 22
1124 | necklace , vest , 128
1125 | ballerinas , bomber jacket , 8
1126 | casual shoes , fedora , 61
1127 | bottoms , suit , 75
1128 | bottoms , handkerchief , 32
1129 | goggles , necktie , 1
1130 | lifestyle shoes , sweatshirt , 5
1131 | footwear , palazzo , 713
1132 | leather jacket , loafers , 9
1133 | mini skirt , ring , 8
1134 | bracelet , trousers , 28
1135 | sleepwear , suit , 10
1136 | cargo shorts , running shoes , 9
1137 | brogues , dress , 24
1138 | push-up bra , swimsuit , 19
1139 | accessories , travel bag , 24
1140 | camisole , tunic , 72
1141 | purse , stilettos , 94
1142 | jeans , shrug , 717
1143 | accessories , dress material , 15
1144 | bracelet , messenger bag , 43
1145 | jeggings , running shoes , 18
1146 | cap , clogs , 6
1147 | party dress , scarf , 25
1148 | ballerinas , night slip , 23
1149 | bow tie , ring , 1
1150 | glasses , jacket , 24
1151 | ballerinas , mini skirt , 40
1152 | formal trousers , t-shirt , 207
1153 | bow tie , derby , 9
1154 | formal shirt , lifestyle shoes , 1
1155 | flipflops , pajama , 30
1156 | boxers , costume , 1
1157 | palazzo , vest , 1
1158 | footwear , handkerchief , 26
1159 | henley , sunglasses , 42
1160 | top , winter jacket , 664
1161 | glasses , messenger bag , 20
1162 | jeggings , vest , 15
1163 | blazer , blouse , 16
1164 | dress , espadrilles , 83
1165 | apparel , trackpants , 43
1166 | corset , wedges , 14
1167 | boots , casual trousers , 19
1168 | brogues , shrug , 6
1169 | cape , necktie , 13
1170 | ring , sandals , 3
1171 | casual shoes , denim jacket , 60
1172 | kimono , pajama , 1
1173 | flipflops , satchel , 13
1174 | bracelet , flipflops , 9
1175 | glasses , skirt , 17
1176 | boots , henley , 40
1177 | bottoms , laptop sleeve , 15
1178 | jeans , stilettos , 550
1179 | costume , necklace , 62
1180 | shirt , tote , 1
1181 | boxer briefs , handkerchief , 1
1182 | boots , hoodie , 139
1183 | romper , sandals , 265
1184 | clutch , maxi dress , 121
1185 | leather jacket , stockings , 1
1186 | blazer , trousers , 28
1187 | apparel , dupatta , 402
1188 | footwear , peeptoes , 332
1189 | apparel , suspender , 199
1190 | jewelry , sports shoes , 45
1191 | joggers , messenger bag , 78
1192 | apparel , sandals , 784
1193 | clogs , hand bag , 2
1194 | vest , watch , 1
1195 | bracelet , maxi dress , 555
1196 | clutch , wedding dress , 18
1197 | sunglasses , trench coat , 9
1198 | ankle boots , shirt dress , 12
1199 | belly shoes , shirt , 518
1200 | accessories , maxi dress , 12
1201 | fitness band , lifestyle shoes , 9
1202 | cap , handkerchief , 15
1203 | jewelry , messenger bag , 1
1204 | stilettos , suit , 280
1205 | flipflops , socks , 8
1206 | apparel , necktie , 575
1207 | earrings , short dress , 9
1208 | earrings , necktie , 1
1209 | clogs , dungaree , 16
1210 | blouse , jewelry , 455
1211 | casual shoes , chinos , 826
1212 | belt , shirt dress , 144
1213 | dungaree , sunglasses , 28
1214 | pumps , winter jacket , 80
1215 | bottoms , ring , 155
1216 | dupatta , peeptoes , 86
1217 | cardigan , jeggings , 7
1218 | high tops , shrug , 2
1219 | joggers , watch , 40
1220 | shirt , winter jacket , 9
1221 | casual trousers , lifestyle shoes , 43
1222 | fitness band , leggings , 10
1223 | casual shirt , scarf , 3
1224 | jumpsuit , pyjama , 42
1225 | dungaree , laptop bag , 19
1226 | churidar set , stilettos , 263
1227 | lifestyle shoes , v-neck , 5
1228 | hand bag , jewelry , 19
1229 | slip ons , watch , 32
1230 | goggles , slip ons , 4
1231 | monk straps , shorts , 1
1232 | earrings , watch , 1
1233 | cap , tote , 13
1234 | skirt , wedges , 684
1235 | bag , casual trousers , 8
1236 | gloves , vest , 2
1237 | boots , wallet , 11
1238 | sandals , turtleneck , 22
1239 | casual jacket , glasses , 6
1240 | apparel , hipsters , 382
1241 | hand bag , lifestyle shoes , 4
1242 | casual shirt , vest , 6
1243 | chinos , sports shoes , 411
1244 | boxers , loungewear , 2
1245 | footwear , messenger bag , 561
1246 | formal shoes , jacket , 538
1247 | dress , hand bag , 479
1248 | necktie , socks , 4
1249 | ankle boots , jumpsuit , 85
1250 | boots , jewelry , 38
1251 | necklace , sling bag , 5
1252 | boots , suit , 53
1253 | bottoms , tote , 79
1254 | cargo shorts , vest , 24
1255 | apparel , watch , 711
1256 | cap , denim shorts , 2
1257 | cap , sleepwear , 3
1258 | blazer , chinos , 1
1259 | apparel , casual jacket , 207
1260 | hand bag , shirt dress , 5
1261 | polo , waistcoat , 9
1262 | jacket , stilettos , 62
1263 | accessories , trousers , 570
1264 | card case , ring , 34
1265 | apparel , layer_1_lower_body , 472
1266 | goggles , jewelry , 42
1267 | canvas shoes , cap , 21
1268 | cardigan , wedges , 13
1269 | jumpsuit , tote , 69
1270 | loafers , watch , 15
1271 | bottoms , mittens , 4
1272 | shorts , suitcase , 12
1273 | earrings , shrug , 57
1274 | mittens , socks , 5
1275 | cardigan , sandals , 11
1276 | jeans , purse , 613
1277 | tights , vest , 6
1278 | casual shoes , casual trousers , 130
1279 | sandals , skirt , 818
1280 | belt , bow tie , 8
1281 | earrings , palazzo , 380
1282 | pajama , socks , 12
1283 | cardigan , stockings , 9
1284 | sandals , sling bag , 1
1285 | socks , t-shirt , 27
1286 | casual shoes , palazzo , 12
1287 | fitness band , footwear , 114
1288 | bracelet , iphone case , 18
1289 | bag , suitcase , 634
1290 | short dress , wedges , 5
1291 | sandals , shirt dress , 114
1292 | boots , tunic , 187
1293 | jumpsuit , shrug , 61
1294 | apparel , purse , 740
1295 | casual shirt , satchel , 2
1296 | apparel , mittens , 20
1297 | lifestyle shoes , top , 638
1298 | ballerinas , panties , 113
1299 | bag , laptop bag , 310
1300 | backpack , polo , 72
1301 | scarf , tote , 1
1302 | sandals , trench coat , 1
1303 | bottoms , clutch , 146
1304 | casual shirt , wing tips , 8
1305 | jumpsuit , peeptoes , 315
1306 | dupatta , kurta , 169
1307 | shrug , t-shirt , 274
1308 | mittens , wedding dress , 18
1309 | dungaree , necktie , 12
1310 | trousers , waistcoat , 1
1311 | bottoms , jacket , 32
1312 | sweater , trackwear , 1
1313 | kurta , patiala , 169
1314 | bag , thermal , 7
1315 | sandals , scarf , 4
1316 | blazer , hoodie , 29
1317 | flipflops , hipsters , 1
1318 | leggings , waistcoat , 8
1319 | kurta , tuxedo , 22
1320 | belly shoes , sling bag , 8
1321 | boots , jacket , 551
1322 | necklace , t-shirt , 78
1323 | bag , denim jacket , 6
1324 | blazer , wedges , 32
1325 | ankle boots , top , 40
1326 | footwear , swim trunks , 3
1327 | formal shoes , laptop bag , 19
1328 | polo , slip ons , 38
1329 | backpack , shorts , 39
1330 | palazzo , purse , 39
1331 | sling bag , trousers , 8
1332 | boots , casual jacket , 225
1333 | derby , suspender , 13
1334 | messenger bag , slip ons , 67
1335 | flipflops , swimsuit , 1
1336 | bomber jacket , shorts , 1
1337 | goggles , sling bag , 35
1338 | camisole , sandals , 399
1339 | bomber jacket , lifestyle shoes , 54
1340 | bracelet , lifestyle shoes , 4
1341 | driving shoes , tuxedo , 1
1342 | glasses , winter jacket , 22
1343 | footwear , satchel , 187
1344 | brogues , v-neck , 6
1345 | belt , necktie , 15
1346 | layer_1_lower_body , v-neck , 5
1347 | cap , sports sandals , 79
1348 | chinos , polo , 802
1349 | jumpsuit , wedges , 471
1350 | apparel , cap , 699
1351 | glasses , hand bag , 290
1352 | shrug , wedges , 121
1353 | sweater , thermal , 1
1354 | ballerinas , kimono , 13
1355 | palazzo , pumps , 211
1356 | glasses , suitcase , 114
1357 | apparel , chinos , 394
1358 | bottoms , boxer briefs , 3
1359 | kurti , thongs , 4
1360 | kurti , wedges , 484
1361 | ballerinas , tote , 156
1362 | brogues , hoodie , 1
1363 | ballerinas , dress , 795
1364 | mini skirt , winter jacket , 13
1365 | bracelet , slippers , 1
1366 | bag , wing tips , 14
1367 | shorts , wedges , 324
1368 | cape , trouser , 15
1369 | brogues , leggings , 1
1370 | costume , sunglasses , 160
1371 | cap , layer_1_lower_body , 9
1372 | laptop bag , sandals , 5
1373 | belt , pyjama , 6
1374 | bottoms , swimwear , 4
1375 | footwear , panties , 25
1376 | derby , top , 28
1377 | casual shirt , lifestyle shoes , 95
1378 | blazer , loafers , 45
1379 | dress , oxfords shoe , 107
1380 | bag , shrug , 138
1381 | boxers , sleepwear , 130
1382 | denim shorts , slippers , 4
1383 | dress , scarf , 542
1384 | ballerinas , ring , 69
1385 | apparel , wedges , 696
1386 | purse , top , 808
1387 | footwear , thermal , 19
1388 | denim jacket , wedges , 1
1389 | hoodie , running shoes , 14
1390 | bottoms , leather jacket , 18
1391 | sandals , sweater , 11
1392 | sunglasses , trackwear , 7
1393 | espadrilles , sunglasses , 5
1394 | bag , boots , 201
1395 | jacket , thermal , 12
1396 | churidar set , shrug , 23
1397 | floaters , footwear , 28
1398 | jeggings , messenger bag , 6
1399 | brogues , formal trousers , 30
1400 | handkerchief , sandals , 34
1401 | mini skirt , sweatshirt , 12
1402 | trouser , windcheater , 3
1403 | accessories , short dress , 347
1404 | clutch , flipflops , 4
1405 | dupatta , pumps , 329
1406 | night slip , sandals , 138
1407 | chinos , goggles , 126
1408 | accessories , footwear , 724
1409 | derby , gloves , 6
1410 | coat , watch , 10
1411 | tights , waistcoat , 1
1412 | glasses , vest , 1
1413 | bottoms , palazzo , 12
1414 | belly shoes , lehenga , 9
1415 | footwear , trousers , 856
1416 | kimono , night slip , 8
1417 | formal shoes , polo , 116
1418 | necktie , swimwear , 12
1419 | platform heels , t-shirt , 6
1420 | trousers , wallet , 14
1421 | stilettos , vest , 6
1422 | bracelet , camisole , 18
1423 | apparel , trackwear , 133
1424 | sunglasses , top , 326
1425 | jewelry , kurta , 15
1426 | belt , wallet , 106
1427 | bag , camisole , 61
1428 | kurti , loafers , 274
1429 | casual shoes , trackpants , 18
1430 | palazzo , top , 594
1431 | accessories , sweater , 74
1432 | henley , sports shoes , 331
1433 | belt , outerwear , 1
1434 | canvas shoes , joggers , 10
1435 | chinos , driving shoes , 2
1436 | casual shirt , suspender , 22
1437 | cap , sling bag , 29
1438 | bag , bikini , 156
1439 | gloves , stockings , 8
1440 | casual shoes , jumpsuit , 162
1441 | bracelet , stilettos , 120
1442 | earrings , sling bag , 5
1443 | accessories , coat , 110
1444 | shape wear , stilettos , 4
1445 | belt , cargo shorts , 107
1446 | coat , peeptoes , 18
1447 | sports bra , tights , 26
1448 | suit , sweater , 9
1449 | bracelet , sweatshirt , 36
1450 | handkerchief , sweater , 1
1451 | backpack , necklace , 23
1452 | hand bag , mini skirt , 22
1453 | necklace , wedges , 40
1454 | loafers , vest , 39
1455 | bomber jacket , sports shoes , 84
1456 | dungaree , sweater , 14
1457 | apparel , shape wear , 559
1458 | ballerinas , bracelet , 639
1459 | casual shirt , laptop bag , 16
1460 | casual shoes , formal shirt , 1
1461 | ring , swimsuit , 16
1462 | party dress , vest , 9
1463 | bracelet , cap , 7
1464 | flipflops , polo , 177
1465 | backpack , swimsuit , 4
1466 | apparel , dress , 852
1467 | lehenga , pumps , 2
1468 | necklace , top , 369
1469 | purse , swimsuit , 19
1470 | necklace , shrug , 24
1471 | bow tie , cufflinks , 418
1472 | palazzo , slippers , 130
1473 | cufflinks , ring , 19
1474 | camisole , trouser , 25
1475 | footwear , spectators , 1
1476 | joggers , slip ons , 143
1477 | joggers , lifestyle shoes , 249
1478 | maxi dress , stilettos , 392
1479 | bracelet , satchel , 123
1480 | belt , wedding dress , 181
1481 | glasses , slip ons , 80
1482 | cardigan , casual shirt , 12
1483 | sports shoes , wallet , 13
1484 | bottoms , layer_1_upper_body , 10
1485 | bag , flipflops , 291
1486 | bow tie , tuxedo , 106
1487 | camisole , purse , 6
1488 | casual shoes , shrug , 123
1489 | apparel , slip ons , 595
1490 | bottoms , sweatshirt , 593
1491 | dress , running shoes , 21
1492 | ballerinas , hoodie , 142
1493 | bag , boxer briefs , 282
1494 | boots , maxi dress , 18
1495 | cargo shorts , lifestyle shoes , 15
1496 | footwear , robe , 4
1497 | accessories , jeans , 250
1498 | loafers , satchel , 1
1499 | apparel , peacoat , 1
1500 | jeans , slippers , 721
1501 | accessories , peeptoes , 67
1502 | casual jacket , footwear , 108
1503 | ballerinas , henley , 3
1504 | cape , high tops , 5
1505 | bracelet , party dress , 1
1506 | accessories , formal shirt , 128
1507 | ballerinas , thongs , 403
1508 | shrug , stockings , 6
1509 | handkerchief , shirt , 185
1510 | joggers , training shoes , 16
1511 | belt , bikini , 20
1512 | accessories , tights , 1
1513 | henley , pyjama , 1
1514 | necktie , purse , 63
1515 | hipsters , scarf , 1
1516 | cargo shorts , sunglasses , 12
1517 | jumper , sports shoes , 36
1518 | casual trousers , glasses , 18
1519 | messenger bag , tunic , 2
1520 | corset , scarf , 14
1521 | bag , pajama , 226
1522 | bracelet , top , 659
1523 | jacket , running shoes , 41
1524 | casual jacket , lifestyle shoes , 42
1525 | kurta , pyjama , 454
1526 | blouse , shrug , 2
1527 | sandals , thermal , 18
1528 | backpack , sweater , 3
1529 | formal shoes , watch , 177
1530 | bag , t-shirt , 150
1531 | joggers , sandals , 25
1532 | brogues , leather jacket , 4
1533 | glasses , necklace , 6
1534 | henley , lifestyle shoes , 10
1535 | cap , footwear , 651
1536 | loafers , sweatshirt , 737
1537 | earrings , trouser , 3
1538 | cap , scarf , 38
1539 | costume , suit , 39
1540 | necklace , waistcoat , 26
1541 | casual jacket , jeans , 750
1542 | glasses , sunglasses , 189
1543 | churidar set , necklace , 287
1544 | apparel , padded bra , 76
1545 | jacket , wing tips , 29
1546 | cardigan , sports shoes , 11
1547 | brogues , t-shirt , 26
1548 | hipsters , jeans , 57
1549 | kurta , sandals , 660
1550 | casual trousers , suspender , 4
1551 | apparel , earrings , 9
1552 | lifestyle shoes , skirt , 83
1553 | card case , thermal , 1
1554 | ankle boots , skirt , 5
1555 | accessories , layer_1_upper_body , 3
1556 | pyjama , running shoes , 28
1557 | gloves , tights , 100
1558 | ring , vest , 12
1559 | cap , running shoes , 3
1560 | goggles , swimwear , 2
1561 | denim jacket , top , 11
1562 | bomber jacket , trouser , 5
1563 | cargo shorts , clogs , 8
1564 | goggles , vest , 4
1565 | ballerinas , casual shirt , 31
1566 | bikini , ring , 54
1567 | bikini , push-up bra , 46
1568 | jacket , travel bag , 145
1569 | kurta , tights , 19
1570 | glasses , pyjama , 16
1571 | belt , costume , 8
1572 | casual jacket , earrings , 10
1573 | floaters , top , 68
1574 | apparel , casual trousers , 11
1575 | jeans , loafers , 833
1576 | bag , messenger bag , 641
1577 | night slip , sports shoes , 13
1578 | churidar set , tote , 40
1579 | t-shirt , tights , 218
1580 | goggles , trench coat , 2
1581 | apparel , leggings , 667
1582 | suit , suspender , 55
1583 | shirt , suitcase , 36
1584 | brogues , cap , 32
1585 | layer_1_upper_body , ring , 22
1586 | leggings , sweatshirt , 657
1587 | handkerchief , top , 10
1588 | backpack , flipflops , 1
1589 | coat , goggles , 5
1590 | messenger bag , trouser , 7
1591 | boxers , sweatshirt , 127
1592 | costume , earrings , 23
1593 | apparel , socks , 409
1594 | panties , sandals , 116
1595 | loafers , winter jacket , 4
1596 | top , tote , 330
1597 | bracelet , dungaree , 42
1598 | cape , scarf , 85
1599 | bracelet , card case , 108
1600 | gloves , running shoes , 4
1601 | tunic , winter jacket , 7
1602 | accessories , chinos , 34
1603 | bottoms , polo , 797
1604 | jewelry , shrug , 7
1605 | ballerinas , trousers , 790
1606 | dupatta , platform heels , 102
1607 | bottoms , sunglasses , 421
1608 | accessories , dungaree , 62
1609 | maxi dress , tote , 61
1610 | leggings , running shoes , 18
1611 | bracelet , loafers , 26
1612 | bottoms , top , 870
1613 | corset , t-shirt , 7
1614 | gloves , mittens , 15
1615 | shorts , sports shoes , 805
1616 | cargo shorts , goggles , 6
1617 | glasses , loafers , 188
1618 | polo , trunk , 1
1619 | denim jacket , jeans , 193
1620 | formal shoes , top , 41
1621 | accessories , thermal , 2
1622 | jeans , sports shoes , 832
1623 | gloves , maxi dress , 4
1624 | bra , jewelry , 3
1625 | jewelry , watch , 130
1626 | shrug , suit , 29
1627 | clutch , swimsuit , 8
1628 | padded bra , t-shirt , 68
1629 | jewelry , wedding dress , 38
1630 | crewneck , maxi dress , 13
1631 | flipflops , night slip , 127
1632 | sports shoes , winter jacket , 9
1633 | palazzo , stilettos , 297
1634 | necktie , wing tips , 18
1635 | hoodie , purse , 13
1636 | belt , hand bag , 80
1637 | bracelet , tote , 96
1638 | high tops , jumpsuit , 96
1639 | cap , wallet , 13
1640 | ankle boots , jacket , 6
1641 | bodysuit , cardigan , 17
1642 | blouse , sunglasses , 22
1643 | accessories , bra , 385
1644 | leggings , suitcase , 1
1645 | chinos , suit , 7
1646 | bag , wallet , 524
1647 | costume , mittens , 17
1648 | apparel , leather jacket , 47
1649 | necklace , wedding dress , 11
1650 | apparel , sweatshirt , 850
1651 | dupatta , ring , 17
1652 | jeggings , sandals , 348
1653 | jewelry , wedges , 9
1654 | accessories , apparel , 614
1655 | ballerinas , gloves , 24
1656 | loafers , tunic , 66
1657 | canvas shoes , wallet , 14
1658 | shorts , sunglasses , 90
1659 | formal trousers , loafers , 21
1660 | jacket , watch , 102
1661 | stockings , tights , 134
1662 | churidar , dupatta , 130
1663 | peacoat , scarf , 12
1664 | card case , travel bag , 15
1665 | jeans , thongs , 126
1666 | boots , jeans , 788
1667 | footwear , jumpsuit , 731
1668 | kurta , necklace , 2
1669 | kimono , v-neck , 7
1670 | sandals , suit , 24
1671 | bag , floaters , 4
1672 | apparel , robe , 537
1673 | accessories , layer_1_lower_body , 22
1674 | leggings , vest , 45
1675 | kurti , necktie , 33
1676 | bag , bomber jacket , 25
1677 | sandals , shrug , 326
1678 | bag , ballerinas , 600
1679 | messenger bag , sandals , 161
1680 | hoodie , pumps , 40
1681 | skirt , tote , 20
1682 | layer_1_lower_body , necktie , 1
1683 | casual shoes , trackwear , 73
1684 | costume , scarf , 2
1685 | formal shirt , jeans , 13
1686 | stockings , winter jacket , 21
1687 | boots , watch , 153
1688 | sunglasses , sweater , 60
1689 | accessories , belt , 303
1690 | oxfords shoe , sunglasses , 1
1691 | footwear , leggings , 745
1692 | apparel , mini skirt , 109
1693 | cape , glasses , 2
1694 | maxi dress , sandals , 837
1695 | belly shoes , earrings , 29
1696 | canvas shoes , glasses , 4
1697 | ballerinas , vest , 23
1698 | casual shirt , purse , 22
1699 | chinos , thermal , 1
1700 | leggings , top , 857
1701 | ankle boots , hand bag , 15
1702 | jeans , polo , 872
1703 | cap , sports shoes , 292
1704 | clogs , trouser , 11
1705 | belt , casual shirt , 25
1706 | wedges , winter jacket , 136
1707 | purse , tights , 1
1708 | bomber jacket , sunglasses , 2
1709 | card case , jacket , 78
1710 | goggles , polo , 283
1711 | glasses , wallet , 81
1712 | hand bag , polo , 5
1713 | accessories , hand bag , 100
1714 | glasses , v-neck , 2
1715 | slip ons , sweater , 16
1716 | cap , suitcase , 30
1717 | cufflinks , wallet , 2
1718 | footwear , watch , 634
1719 | outerwear , wedges , 20
1720 | sweatshirt , vest , 145
1721 | accessories , laptop bag , 339
1722 | shirt , wing tips , 50
1723 | footwear , running shoes , 412
1724 | formal trousers , messenger bag , 82
1725 | clutch , glasses , 157
1726 | crewneck , romper , 6
1727 | purse , sports shoes , 139
1728 | glasses , maxi dress , 32
1729 | goggles , running shoes , 79
1730 | earrings , romper , 8
1731 | sandals , tote , 333
1732 | running shoes , shirt , 9
1733 | casual shirt , suit , 646
1734 | slip ons , tuxedo , 40
1735 | ankle boots , footwear , 194
1736 | bottoms , costume , 9
1737 | polo , wedges , 17
1738 | ballerinas , shirt , 817
1739 | flipflops , maxi dress , 59
1740 | cargo shorts , v-neck , 2
1741 | dress , monk straps , 15
1742 | bottoms , shirt , 24
1743 | gloves , parka , 1
1744 | bracelet , waistcoat , 26
1745 | backpack , sports sandals , 9
1746 | bag , tote , 507
1747 | earrings , tunic , 372
1748 | handkerchief , vest , 59
1749 | accessories , shrug , 100
1750 | bag , goggles , 34
1751 | loafers , top , 771
1752 | cap , short dress , 35
1753 | maxi dress , turtleneck , 9
1754 | bag , socks , 56
1755 | t-shirt , tuxedo , 72
1756 | peeptoes , sling bag , 3
1757 | blouse , formal shoes , 36
1758 | footwear , scarf , 17
1759 | necktie , suitcase , 27
1760 | platform heels , short dress , 6
1761 | cape , v-neck , 15
1762 | glasses , tote , 120
1763 | belt , panties , 60
1764 | socks , wing tips , 14
1765 | layer_1_upper_body , pumps , 15
1766 | corset , sports shoes , 4
1767 | brogues , sunglasses , 14
1768 | shirt , socks , 12
1769 | ballerinas , suitcase , 61
1770 | casual jacket , running shoes , 9
1771 | cardigan , slip ons , 36
1772 | canvas shoes , messenger bag , 94
1773 | party dress , pumps , 3
1774 | accessories , bow tie , 514
1775 | casual jacket , watch , 16
1776 | corset , glasses , 1
1777 | espadrilles , sling bag , 5
1778 | leather jacket , polo , 13
1779 | blazer , costume , 8
1780 | apparel , card case , 109
1781 | backpack , henley , 4
1782 | high tops , swimsuit , 2
1783 | apparel , dungaree , 161
1784 | sandals , shirt , 552
1785 | casual shoes , windcheater , 6
1786 | lifestyle shoes , sling bag , 4
1787 | t-shirt , wedges , 108
1788 | belt , suit , 145
1789 | clogs , top , 147
1790 | bottoms , necktie , 150
1791 | accessories , slip ons , 53
1792 | bottoms , earrings , 260
1793 | belt , wedges , 74
1794 | cargo shorts , wallet , 1
1795 | apparel , crewneck , 460
1796 | casual shirt , derby , 66
1797 | dungaree , socks , 5
1798 | sunglasses , winter jacket , 34
1799 | apparel , athletic socks , 26
1800 | blouse , scarf , 18
1801 | jacket , slip ons , 156
1802 | cap , layer_1_upper_body , 174
1803 | belt , dupatta , 7
1804 | tights , wedges , 7
1805 | pumps , shrug , 149
1806 | backpack , bracelet , 4
1807 | ballerinas , saree , 60
1808 | hoodie , sandals , 239
1809 | sandals , sunglasses , 7
1810 | apparel , dress socks , 88
1811 | bag , down jacket , 2
1812 | t-shirt , watch , 416
1813 | bracelet , wedges , 104
1814 | cap , shirt , 161
1815 | chinos , footwear , 800
1816 | formal trousers , glasses , 30
1817 | sports bra , top , 261
1818 | floaters , trackwear , 6
1819 | cap , jeans , 514
1820 | accessories , scarf , 231
1821 | cap , casual trousers , 2
1822 | cargo shorts , slip ons , 8
1823 | cardigan , purse , 45
1824 | ballerinas , watch , 255
1825 | polo , ring , 233
1826 | sports shoes , windcheater , 2
1827 | dupatta , hand bag , 24
1828 | denim shorts , flipflops , 44
1829 | necktie , thermal , 2
1830 | bag , belly shoes , 1
1831 | joggers , vest , 75
1832 | shrug , swimsuit , 12
1833 | party dress , stockings , 6
1834 | belt , tights , 14
1835 | backpack , ballerinas , 54
1836 | push-up bra , top , 24
1837 | jewelry , saree , 7
1838 | kurta , pumps , 728
1839 | sports sandals , sunglasses , 120
1840 | hand bag , loafers , 20
1841 | brogues , sweatshirt , 1
1842 | jumpsuit , necktie , 184
1843 | kurta , ring , 242
1844 | formal shirt , formal shoes , 249
1845 | bracelet , costume , 141
1846 | satchel , winter jacket , 6
1847 | glasses , hoodie , 18
1848 | corset , jeans , 3
1849 | shrug , watch , 65
1850 | fitness band , messenger bag , 4
1851 | lifestyle shoes , messenger bag , 215
1852 | dungaree , mittens , 2
1853 | top , turtleneck , 22
1854 | fedora , travel bag , 14
1855 | scarf , thermal , 1
1856 | canvas shoes , suit , 7
1857 | boots , winter jacket , 428
1858 | hoodie , jeans , 652
1859 | dress , lifestyle shoes , 85
1860 | dress , peeptoes , 511
1861 | kurta , watch , 39
1862 | trouser , waistcoat , 15
1863 | earrings , scarf , 4
1864 | blazer , sandals , 427
1865 | fitness band , top , 6
1866 | accessories , suitcase , 205
1867 | necklace , satchel , 58
1868 | henley , slip ons , 39
1869 | ballerinas , leggings , 545
1870 | cardigan , kurti , 7
1871 | clutch , loafers , 17
1872 | trackwear , training shoes , 69
1873 | accessories , bikini , 499
1874 | messenger bag , winter jacket , 18
1875 | dress , floaters , 2
1876 | slippers , watch , 18
1877 | brogues , hand bag , 11
1878 | messenger bag , necktie , 1
1879 | casual jacket , messenger bag , 27
1880 | casual trousers , derby , 2
1881 | purse , sandals , 562
1882 | sling bag , swimsuit , 1
1883 | cap , gloves , 13
1884 | backpack , v-neck , 1
1885 | glasses , sports shoes , 121
1886 | leggings , satchel , 10
1887 | goggles , tunic , 59
1888 | denim shorts , footwear , 36
1889 | cape , lifestyle shoes , 1
1890 | shrug , top , 781
1891 | formal shoes , jeans , 738
1892 | casual shoes , watch , 421
1893 | dress , sling bag , 354
1894 | polo , suit , 6
1895 | costume , gloves , 37
1896 | bag , jeans , 246
1897 | hoodie , thermal , 14
1898 | palazzo , polo , 11
1899 | shorts , socks , 47
1900 | fedora , shirt , 71
1901 | casual jacket , mini skirt , 7
1902 | bow tie , bracelet , 459
1903 | derby , hand bag , 5
1904 | necklace , pumps , 26
1905 | athletic socks , sports shoes , 3
1906 | suit , swimwear , 5
1907 | flipflops , trackpants , 13
1908 | palazzo , peeptoes , 321
1909 | tights , top , 400
1910 | bow tie , fedora , 4
1911 | jeans , suit , 170
1912 | lehenga , stilettos , 2
1913 | bracelet , jacket , 41
1914 | apparel , peeptoes , 463
1915 | chinos , running shoes , 48
1916 | cardigan , mini skirt , 6
1917 | ring , top , 413
1918 | night slip , pyjama , 371
1919 | cap , sunglasses , 28
1920 | bag , turtleneck , 5
1921 | accessories , fedora , 5
1922 | handkerchief , slip ons , 6
1923 | accessories , lehenga , 207
1924 | fitness band , t-shirt , 26
1925 | jeans , jewelry , 1
1926 | casual shoes , skirt , 229
1927 | blazer , scarf , 9
1928 | accessories , earrings , 9
1929 | coat , polo , 1
1930 | jeans , wedges , 712
1931 | ballerinas , sunglasses , 280
1932 | blouse , glasses , 157
1933 | bomber jacket , casual shirt , 281
1934 | night slip , slippers , 138
1935 | apparel , turtleneck , 21
1936 | apparel , hoodie , 708
1937 | cardigan , tote , 10
1938 | mittens , trouser , 9
1939 | bag , canvas shoes , 44
1940 | canvas shoes , goggles , 14
1941 | jeggings , trench coat , 12
1942 | polo , tote , 3
1943 | sweatshirt , wedges , 33
1944 | driving shoes , trousers , 3
1945 | chinos , suspender , 24
1946 | dress , pumps , 775
1947 | ring , skirt , 19
1948 | clogs , swimsuit , 29
1949 | bracelet , shirt , 137
1950 | dungaree , flipflops , 92
1951 | suit , winter jacket , 6
1952 | gloves , trouser , 2
1953 | bracelet , jumpsuit , 515
1954 | jewelry , sling bag , 4
1955 | ballerinas , skirt , 827
1956 | casual shoes , sweater , 195
1957 | espadrilles , jeggings , 6
1958 | casual jacket , t-shirt , 628
1959 | necktie , shrug , 64
1960 | maxi dress , waistcoat , 8
1961 | footwear , hand bag , 477
1962 | bag , costume , 46
1963 | casual shoes , henley , 220
1964 | running shoes , v-neck , 23
1965 | footwear , trackwear , 172
1966 | pumps , top , 864
1967 | footwear , wedges , 610
1968 | corset , mini skirt , 15
1969 | camisole , thongs , 3
1970 | bracelet , cufflinks , 87
1971 | beanies , cardigan , 3
1972 | card case , laptop bag , 1
1973 | sweater , swimsuit , 67
1974 | casual jacket , kurta , 11
1975 | formal shoes , trouser , 41
1976 | maxi dress , wedges , 597
1977 | flipflops , laptop bag , 1
1978 | cargo shorts , sports shoes , 31
1979 | bag , necktie , 254
1980 | cardigan , night slip , 7
1981 | dungaree , kimono , 1
1982 | espadrilles , messenger bag , 34
1983 | ballerinas , sweater , 22
1984 | brogues , jacket , 134
1985 | flipflops , sling bag , 29
1986 | goggles , trackpants , 1
1987 | oxfords shoe , polo , 60
1988 | coat , trouser , 63
1989 | wedding dress , wedges , 3
1990 | blouse , peeptoes , 517
1991 | handkerchief , tunic , 99
1992 | bottoms , monk straps , 1
1993 | briefs , jeans , 31
1994 | goggles , sports shoes , 33
1995 | sports shoes , sweatshirt , 862
1996 | peacoat , t-shirt , 2
1997 | training shoes , vest , 14
1998 | backpack , hoodie , 2
1999 | casual shirt , trousers , 109
2000 | accessories , glasses , 264
2001 | kurta , slip ons , 179
2002 | maxi dress , satchel , 48
2003 | ring , wedding dress , 1
2004 | belt , earrings , 15
2005 | pajama , sweater , 7
2006 | chinos , hoodie , 5
2007 | espadrilles , goggles , 4
2008 | flipflops , kurta , 6
2009 | denim shorts , t-shirt , 87
2010 | formal trousers , suit , 135
2011 | bottoms , platform heels , 9
2012 | lifestyle shoes , palazzo , 1
2013 | casual shoes , shorts , 461
2014 | cap , henley , 34
2015 | accessories , accessories , 36
2016 | party dress , stilettos , 18
2017 | belt , denim shorts , 41
2018 | bracelet , sandals , 32
2019 | belt , camisole , 19
2020 | chinos , slippers , 362
2021 | belt , shape wear , 15
2022 | dungaree , wedges , 53
2023 | scarf , thongs , 29
2024 | backpack , socks , 5
2025 | accessories , suit , 578
2026 | thongs , trousers , 1
2027 | blazer , bottoms , 40
2028 | shirt dress , wedges , 26
2029 | glasses , satchel , 44
2030 | cardigan , henley , 18
2031 | gloves , suit , 5
2032 | hoodie , jumper , 21
2033 | gloves , scarf , 2
2034 | belt , suspender , 23
2035 | bag , belt , 273
2036 | cufflinks , footwear , 29
2037 | monk straps , t-shirt , 1
2038 | bottoms , casual shirt , 204
2039 | rugby , sandals , 50
2040 | running shoes , skirt , 9
2041 | briefs , messenger bag , 85
2042 | belt , pumps , 101
2043 | accessories , party dress , 181
2044 | floaters , trousers , 14
2045 | apparel , tote , 631
2046 | slip ons , travel bag , 5
2047 | casual shirt , footwear , 276
2048 | footwear , pajama , 173
2049 | clutch , top , 556
2050 | casual shirt , formal trousers , 128
2051 | bracelet , trouser , 471
2052 | cardigan , handkerchief , 7
2053 | belt , platform heels , 5
2054 | jewelry , short dress , 13
2055 | footwear , tote , 124
2056 | footwear , party dress , 341
2057 | palazzo , wedges , 465
2058 | oxfords shoe , top , 18
2059 | glasses , henley , 45
2060 | suit , watch , 300
2061 | casual shirt , messenger bag , 7
2062 | leggings , mittens , 6
2063 | apparel , saree , 801
2064 | accessories , kurti , 22
2065 | clutch , shrug , 26
2066 | cap , maxi dress , 27
2067 | necktie , trunk , 39
2068 | bottoms , formal shirt , 7
2069 | chinos , necktie , 23
2070 | bottoms , layer_1_lower_body , 90
2071 | jewelry , suit , 65
2072 | loafers , trackpants , 6
2073 | clogs , skirt , 8
2074 | fitness band , sports sandals , 4
2075 | churidar set , wedges , 203
2076 | glasses , scarf , 18
2077 | slippers , sweater , 1
2078 | footwear , stockings , 33
2079 | ankle boots , apparel , 58
2080 | footwear , mini skirt , 15
2081 | casual jacket , casual trousers , 37
2082 | ballerinas , wedding dress , 37
2083 | bag , cufflinks , 13
2084 | footwear , glasses , 33
2085 | socks , top , 376
2086 | sunglasses , tote , 145
2087 | necktie , running shoes , 26
2088 | kurta , trackwear , 10
2089 | jeans , sling bag , 61
2090 | henley , leather jacket , 4
2091 | accessories , espadrilles , 24
2092 | costume , waistcoat , 7
2093 | apparel , shorts , 580
2094 | laptop bag , trousers , 4
2095 | pumps , wedding dress , 14
2096 | layer_1_upper_body , travel bag , 5
2097 | jewelry , sunglasses , 69
2098 | apparel , oxfords shoe , 19
2099 | belt , tunic , 139
2100 | joggers , sunglasses , 28
2101 | boots , palazzo , 1
2102 | chinos , kurta , 186
2103 | high tops , skirt , 37
2104 | costume , ring , 17
2105 | ballerinas , t-shirt , 656
2106 | accessories , boxer briefs , 5
2107 | hand bag , monk straps , 1
2108 | ballerinas , shirt dress , 59
2109 | boots , jumper , 4
2110 | goggles , palazzo , 28
2111 | corset , stilettos , 1
2112 | accessories , hoodie , 295
2113 | blouse , sling bag , 1
2114 | jumpsuit , stockings , 6
2115 | earrings , leggings , 248
2116 | sports bra , trouser , 5
2117 | jumper , sweatshirt , 508
2118 | belly shoes , t-shirt , 34
2119 | running shoes , vest , 249
2120 | bag , formal shoes , 293
2121 | pyjama , trousers , 6
2122 | ballerinas , romper , 212
2123 | jewelry , tunic , 43
2124 | glasses , tights , 3
2125 | jeggings , sports shoes , 64
2126 | gloves , hoodie , 4
2127 | bottoms , pyjama , 94
2128 | sling bag , suit , 3
2129 | canvas shoes , shorts , 34
2130 | necktie , scarf , 45
2131 | casual shirt , goggles , 371
2132 | belly shoes , joggers , 1
2133 | necktie , swim trunks , 30
2134 | crewneck , jeans , 9
2135 | leggings , pumps , 174
2136 | churidar set , scarf , 590
2137 | apparel , messenger bag , 241
2138 | hand bag , stilettos , 9
2139 | chinos , sports sandals , 78
2140 | casual shirt , cufflinks , 5
2141 | leggings , thermal , 81
2142 | sandals , winter jacket , 46
2143 | jumpsuit , sandals , 765
2144 | casual trousers , footwear , 89
2145 | goggles , shorts , 145
2146 | cardigan , high tops , 22
2147 | goggles , jeans , 79
2148 | coat , costume , 213
2149 | accessories , shape wear , 14
2150 | swimsuit , thongs , 16
2151 | belt , skirt , 510
2152 | casual jacket , shorts , 13
2153 | flipflops , jeggings , 5
2154 | sweatshirt , thongs , 4
2155 | henley , trouser , 9
2156 | blouse , cap , 431
2157 | bottoms , jewelry , 53
2158 | shrug , sling bag , 36
2159 | boxers , footwear , 41
2160 | bag , v-neck , 5
2161 | boots , romper , 1
2162 | blouse , crewneck , 39
2163 | belt , laptop bag , 10
2164 | lifestyle shoes , shorts , 7
2165 | dupatta , handkerchief , 3
2166 | derby , necktie , 6
2167 | chinos , tote , 19
2168 | belt , peeptoes , 10
2169 | skirt , stilettos , 401
2170 | floaters , jeans , 29
2171 | necktie , top , 722
2172 | dress socks , leggings , 6
2173 | t-shirt , trench coat , 32
2174 | accessories , joggers , 3
2175 | gloves , sports shoes , 1
2176 | bomber jacket , chinos , 6
2177 | bottoms , sleepwear , 13
2178 | palazzo , sandals , 820
2179 | cap , party dress , 68
2180 | espadrilles , polo , 67
2181 | bottoms , casual shoes , 543
2182 | vest , wedges , 3
2183 | costume , lapel pin , 10
2184 | bow tie , t-shirt , 5
2185 | coat , wedges , 39
2186 | blouse , slippers , 8
2187 | casual trousers , formal shirt , 1
2188 | backpack , high tops , 1
2189 | belt , boots , 22
2190 | monk straps , trousers , 15
2191 | footwear , polo , 747
2192 | dress , travel bag , 12
2193 | cap , cape , 39
2194 | accessories , socks , 174
2195 | costume , vest , 3
2196 | scarf , wedges , 5
2197 | bag , slippers , 235
2198 | formal shirt , formal trousers , 10
2199 | lapel pin , tuxedo , 2
2200 | necklace , panties , 1
2201 | ballerinas , jeans , 841
2202 | chinos , slip ons , 175
2203 | boxers , pyjama , 54
2204 | bottoms , camisole , 114
2205 | sweatshirt , thermal , 16
2206 | suspender , sweater , 45
2207 | cap , tights , 15
2208 | boots , shrug , 323
2209 | casual shirt , casual shoes , 278
2210 | corset , costume , 38
2211 | belt , flipflops , 2
2212 | hipsters , shape wear , 13
2213 | blouse , platform heels , 62
2214 | apparel , high tops , 92
2215 | backpack , t-shirt , 464
2216 | travel bag , watch , 35
2217 | briefs , necktie , 15
2218 | leggings , stilettos , 105
2219 | casual shirt , peeptoes , 1
2220 | cardigan , sling bag , 1
2221 | sweatshirt , training shoes , 10
2222 | cardigan , scarf , 75
2223 | apparel , clogs , 138
2224 | apparel , derby , 437
2225 | belt , vest , 20
2226 | cardigan , leggings , 168
2227 | high tops , suit , 1
2228 | belly shoes , dress , 45
2229 | formal trousers , polo , 144
2230 | necktie , peeptoes , 7
2231 | cap , parka , 1
2232 | accessories , henley , 16
2233 | jacket , lifestyle shoes , 402
2234 | flipflops , shorts , 742
2235 | ankle boots , cap , 6
2236 | earrings , jewelry , 240
2237 | bow tie , jewelry , 7
2238 | ballerinas , sports bra , 24
2239 | running shoes , trouser , 9
2240 | jeans , messenger bag , 191
2241 | messenger bag , oxfords shoe , 9
2242 | hand bag , tunic , 63
2243 | bottoms , wedges , 807
2244 | cardigan , jumpsuit , 30
2245 | running shoes , trousers , 148
2246 | ballerinas , coat , 40
2247 | bag , hoodie , 89
2248 | kurta , suit , 22
2249 | ballerinas , trackwear , 32
2250 | bottoms , t-shirt , 855
2251 | cape , leggings , 16
2252 | bottoms , shape wear , 3
2253 | palazzo , ring , 6
2254 | tote , trousers , 3
2255 | espadrilles , shirt , 65
2256 | bikini , flipflops , 46
2257 | palazzo , thongs , 6
2258 | churidar set , pumps , 268
2259 | t-shirt , thongs , 3
2260 | belly shoes , cap , 8
2261 | shorts , slippers , 41
2262 | dungaree , sports shoes , 188
2263 | footwear , suitcase , 152
2264 | bag , leggings , 353
2265 | jeggings , lifestyle shoes , 16
2266 | flipflops , jumpsuit , 63
2267 | stockings , sweatshirt , 1
2268 | cufflinks , vest , 128
2269 | cap , formal shoes , 66
2270 | jeans , sandals , 769
2271 | oxfords shoe , watch , 9
2272 | jumpsuit , sweater , 24
2273 | formal shirt , sandals , 18
2274 | coat , necklace , 1
2275 | layer_1_upper_body , satchel , 9
2276 | sunglasses , trouser , 5
2277 | oxfords shoe , skirt , 12
2278 | beanies , leggings , 2
2279 | bag , thongs , 60
2280 | sports sandals , t-shirt , 341
2281 | goggles , trousers , 163
2282 | glasses , stilettos , 15
2283 | lifestyle shoes , sunglasses , 14
2284 | hand bag , jeggings , 1
2285 | ring , sweater , 2
2286 | camisole , trousers , 76
2287 | boxer briefs , slip ons , 75
2288 | bracelet , glasses , 21
2289 | clogs , gloves , 1
2290 | costume , tuxedo , 4
2291 | high tops , top , 254
2292 | casual shirt , denim shorts , 53
2293 | kurta , sunglasses , 35
2294 | jeggings , sling bag , 23
2295 | pajama , push-up bra , 6
2296 | backpack , wedges , 6
2297 | necklace , sweatshirt , 11
2298 | apparel , shirt , 710
2299 | bottoms , tights , 2
2300 | apparel , jeans , 405
2301 | swimwear , tote , 1
2302 | casual shoes , romper , 11
2303 | necklace , peeptoes , 12
2304 | bag , robe , 237
2305 | sweatshirt , tuxedo , 13
2306 | fitness band , joggers , 10
2307 | corset , satchel , 6
2308 | earrings , wedding dress , 44
2309 | bow tie , sunglasses , 11
2310 | boots , skirt , 327
2311 | churidar set , slippers , 350
2312 | peeptoes , t-shirt , 34
2313 | pumps , skirt , 360
2314 | cap , polo , 102
2315 | formal shoes , kurti , 22
2316 | oxfords shoe , trouser , 23
2317 | jumpsuit , lifestyle shoes , 15
2318 | loafers , sling bag , 67
2319 | hoodie , lifestyle shoes , 15
2320 | formal shoes , t-shirt , 111
2321 | pumps , tights , 6
2322 | high tops , sweater , 22
2323 | hoodie , vest , 12
2324 | suit , suitcase , 81
2325 | monk straps , trouser , 1
2326 | jacket , pumps , 154
2327 | bottoms , trouser , 236
2328 | belt , formal shirt , 7
2329 | slippers , trackpants , 5
2330 | high tops , sweatshirt , 4
2331 | kimono , swimsuit , 8
2332 | loafers , rugby , 22
2333 | cape , shorts , 17
2334 | fedora , jeans , 16
2335 | cap , casual shirt , 219
2336 | pumps , tote , 5
2337 | sling bag , sunglasses , 2
2338 | apparel , fedora , 96
2339 | scarf , travel bag , 4
2340 | footwear , wedding dress , 819
2341 | hand bag , swimsuit , 54
2342 | goggles , kurta , 27
2343 | costume , jumper , 1
2344 | flipflops , pyjama , 26
2345 | suitcase , wallet , 8
2346 | ring , suitcase , 2
2347 | casual shirt , slippers , 1
2348 | trench coat , trouser , 24
2349 | derby , tuxedo , 4
2350 | outerwear , wallet , 26
2351 | casual shirt , chinos , 553
2352 | pumps , shirt dress , 14
2353 | flipflops , tunic , 2
2354 | cardigan , casual shoes , 195
2355 | accessories , handkerchief , 388
2356 | blazer , tights , 1
2357 | camisole , v-neck , 12
2358 | t-shirt , trackwear , 576
2359 | clutch , hipsters , 1
2360 | ballerinas , cape , 23
2361 | earrings , loafers , 24
2362 | thermal , v-neck , 1
2363 | sunglasses , swimwear , 1
2364 | kurta , leggings , 778
2365 | sandals , top , 877
2366 | boots , jumpsuit , 257
2367 | gloves , slippers , 3
2368 | bottoms , outerwear , 3
2369 | footwear , monk straps , 14
2370 | purse , romper , 3
2371 | cardigan , costume , 11
2372 | loafers , necktie , 51
2373 | necklace , suit , 4
2374 | bikini , socks , 4
2375 | hand bag , shorts , 39
2376 | bow tie , footwear , 18
2377 | jewelry , sandals , 13
2378 | cufflinks , wing tips , 4
2379 | blazer , suit , 9
2380 | bottoms , denim jacket , 6
2381 | socks , suspender , 9
2382 | ballerinas , goggles , 207
2383 | ballerinas , kurti , 755
2384 | hand bag , sweater , 40
2385 | bottoms , chinos , 33
2386 | kurti , peeptoes , 407
2387 | stilettos , trousers , 352
2388 | dupatta , slippers , 3
2389 | tunic , wedges , 352
2390 | cap , windcheater , 6
2391 | necktie , party dress , 46
2392 | ballerinas , v-neck , 15
2393 | thongs , wedding dress , 1
2394 | cardigan , shirt dress , 1
2395 | oxfords shoe , shorts , 11
2396 | blouse , stilettos , 483
2397 | mini skirt , top , 240
2398 | running shoes , shorts , 89
2399 | earrings , glasses , 4
2400 | t-shirt , trunk , 89
2401 | sports bra , swimsuit , 22
2402 | dress socks , sandals , 6
2403 | belt , sweatshirt , 15
2404 | skirt , travel bag , 8
2405 | apparel , henley , 312
2406 | costume , shrug , 18
2407 | belly shoes , bracelet , 69
2408 | sling bag , sports shoes , 59
2409 | bottoms , bra , 41
2410 | vest , wallet , 1
2411 | ballerinas , swimwear , 70
2412 | socks , wedding dress , 8
2413 | hoodie , satchel , 612
2414 | bikini , camisole , 10
2415 | shrug , wedding dress , 9
2416 | suspender , watch , 22
2417 | costume , socks , 17
2418 | shirt , suspender , 281
2419 | laptop bag , sports shoes , 1
2420 | sunglasses , suspender , 1
2421 | earrings , satchel , 35
2422 | padded bra , swimsuit , 20
2423 | trouser , tunic , 686
2424 | thermal , trousers , 6
2425 | romper , wedges , 10
2426 | card case , glasses , 38
2427 | necktie , polo , 16
2428 | romper , socks , 77
2429 | blouse , floaters , 8
2430 | accessories , thongs , 92
2431 | kurti , trousers , 334
2432 | cap , hipsters , 12
2433 | glasses , laptop bag , 1
2434 | belt , sports shoes , 85
2435 | laptop sleeve , suit , 22
2436 | bag , maxi dress , 247
2437 | slip ons , swim trunks , 13
2438 | shirt , travel bag , 161
2439 | bag , earrings , 31
2440 | cap , hoodie , 64
2441 | bodysuit , thongs , 45
2442 | glasses , t-shirt , 87
2443 | scarf , suit , 71
2444 | watch , wedges , 46
2445 | jumpsuit , kimono , 1
2446 | top , trousers , 701
2447 | bottoms , footwear , 786
2448 | card case , trousers , 97
2449 | purse , saree , 15
2450 | dress , goggles , 4
2451 | necktie , palazzo , 2
2452 | leggings , sunglasses , 44
2453 | peeptoes , shorts , 32
2454 | ballerinas , waistcoat , 5
2455 | camisole , stilettos , 12
2456 | bottoms , swim trunks , 15
2457 | gloves , slip ons , 59
2458 | hand bag , sunglasses , 120
2459 | hoodie , tights , 28
2460 | skirt , winter jacket , 164
2461 | glasses , sweater , 59
2462 | necktie , trousers , 182
2463 | espadrilles , jacket , 7
2464 | robe , sandals , 19
2465 | platform heels , tunic , 10
2466 | bottoms , short dress , 18
2467 | skirt , sunglasses , 19
2468 | kurta , loafers , 352
2469 | casual shoes , clutch , 17
2470 | fedora , necktie , 1
2471 | cap , espadrilles , 4
2472 | leggings , winter jacket , 42
2473 | apparel , denim shorts , 52
2474 | bottoms , jumpsuit , 116
2475 | clutch , trousers , 5
2476 | boots , earrings , 24
2477 | handkerchief , layer_1_lower_body , 1
2478 | briefs , ring , 18
2479 | blouse , chinos , 124
2480 | clutch , romper , 8
2481 | formal shoes , suit , 568
2482 | footwear , trunk , 11
2483 | bag , shirt dress , 17
2484 | casual shirt , formal shoes , 403
2485 | apparel , sleepwear , 387
2486 | gloves , thermal , 2
2487 | bag , trackwear , 6
2488 | dupatta , salwaar , 130
2489 | trouser , watch , 54
2490 | flipflops , joggers , 10
2491 | blazer , jeans , 155
2492 | canvas shoes , jacket , 50
2493 | ring , watch , 54
2494 | blouse , watch , 142
2495 | apparel , sweater , 452
2496 | cargo shorts , casual shoes , 16
2497 | boots , mini skirt , 12
2498 | casual shoes , satchel , 5
2499 | bag , tunic , 241
2500 | denim shorts , henley , 4
2501 | maxi dress , shrug , 88
2502 | sports shoes , travel bag , 22
2503 | casual trousers , espadrilles , 1
2504 | suit , trackwear , 456
2505 | slip ons , v-neck , 69
2506 | bag , wedding dress , 94
2507 | camisole , sports shoes , 31
2508 | camisole , suit , 15
2509 | palazzo , waistcoat , 1
2510 | belt , dungaree , 27
2511 | bottoms , romper , 69
2512 | crewneck , sandals , 22
2513 | kurti , trouser , 572
2514 | high tops , tunic , 11
2515 | clutch , stilettos , 158
2516 | cap , peeptoes , 12
2517 | accessories , clutch , 680
2518 | necklace , shirt , 10
2519 | briefs , sleepwear , 431
2520 | accessories , sunglasses , 754
2521 | bag , cape , 14
2522 | hand bag , thermal , 1
2523 | bra , footwear , 9
2524 | driving shoes , jeans , 21
2525 | camisole , mini skirt , 5
2526 | ring , t-shirt , 17
2527 | belt , bra , 92
2528 | shirt , sunglasses , 312
2529 | ballerinas , maxi dress , 787
2530 | scarf , winter jacket , 28
2531 | loafers , necklace , 9
2532 | accessories , necktie , 676
2533 | mini skirt , sweater , 6
2534 | polo , socks , 4
2535 | sunglasses , wedges , 18
2536 | necklace , sunglasses , 1
2537 | belly shoes , party dress , 10
2538 | gloves , satchel , 1
2539 | cap , casual jacket , 18
2540 | sandals , socks , 35
2541 | padded bra , top , 74
2542 | goggles , jumpsuit , 146
2543 | accessories , card case , 310
2544 | backpack , bra , 1
2545 | derby , laptop bag , 14
2546 | peacoat , top , 9
2547 | cargo shorts , sweatshirt , 16
2548 | lifestyle shoes , socks , 8
2549 | jewelry , shorts , 5
2550 | accessories , belly shoes , 67
2551 | hand bag , suit , 173
2552 | loafers , shirt , 809
2553 | coat , sling bag , 6
2554 | ballerinas , outerwear , 11
2555 | floaters , shirt , 21
2556 | chinos , messenger bag , 122
2557 | flipflops , henley , 10
2558 | palazzo , pyjama , 2
2559 | sports bra , stockings , 6
2560 | jewelry , t-shirt , 2
2561 | apparel , formal shirt , 27
2562 | ballerinas , formal shirt , 13
2563 | blouse , ring , 60
2564 | stilettos , t-shirt , 9
2565 | kurta , necktie , 11
2566 | clutch , goggles , 34
2567 | bracelet , coat , 6
2568 | socks , sweatshirt , 7
2569 | clutch , dungaree , 6
2570 | ballerinas , casual jacket , 17
2571 | jeans , sports sandals , 164
2572 | clutch , layer_1_upper_body , 12
2573 | glasses , running shoes , 71
2574 | bikini , hipsters , 124
2575 | apparel , shrug , 503
2576 | canvas shoes , henley , 28
2577 | high tops , necktie , 1
2578 | socks , tights , 153
2579 | slippers , top , 173
2580 | clutch , earrings , 43
2581 | sports bra , v-neck , 24
2582 | casual jacket , sandals , 51
2583 | kurti , stilettos , 200
2584 | joggers , top , 286
2585 | hoodie , leather jacket , 5
2586 | casual shoes , sling bag , 4
2587 | cap , monk straps , 1
2588 | cardigan , chinos , 36
2589 | belt , hipsters , 4
2590 | apparel , satchel , 512
2591 | cap , thermal , 5
2592 | camisole , leggings , 69
2593 | boots , satchel , 18
2594 | jewelry , necklace , 337
2595 | pumps , watch , 125
2596 | ankle boots , sweater , 2
2597 | apparel , bracelet , 145
2598 | palazzo , sunglasses , 60
2599 | jewelry , palazzo , 106
2600 | necktie , sports shoes , 16
2601 | bikini , necktie , 668
2602 | socks , thermal , 6
2603 | slip ons , suspender , 22
2604 | clutch , jeggings , 5
2605 | espadrilles , necktie , 1
2606 | cape , stilettos , 22
2607 | cape , kurta , 35
2608 | accessories , t-shirt , 49
2609 | churidar set , handkerchief , 3
2610 | corset , v-neck , 2
2611 | apparel , suitcase , 579
2612 | glasses , gloves , 3
2613 | gloves , layer_1_upper_body , 35
2614 | accessories , floaters , 7
2615 | hipsters , hoodie , 27
2616 | henley , suit , 5
2617 | costume , necktie , 143
2618 | casual shoes , tights , 16
2619 | footwear , trench coat , 24
2620 | monk straps , top , 1
2621 | lifestyle shoes , shirt , 627
2622 | boots , tuxedo , 2
2623 | boxer briefs , necktie , 1
2624 | footwear , shirt dress , 42
2625 | trousers , tunic , 569
2626 | short dress , shrug , 6
2627 | boxer briefs , sweatshirt , 23
2628 | polo , winter jacket , 35
2629 | ballerinas , tunic , 546
2630 | belt , ring , 38
2631 | fedora , suitcase , 12
2632 | ballerinas , palazzo , 749
2633 | cape , maxi dress , 4
2634 | footwear , sleepwear , 116
2635 | short dress , turtleneck , 4
2636 | blouse , cardigan , 156
2637 | casual shirt , floaters , 10
2638 | glasses , hipsters , 3
2639 | brogues , purse , 10
2640 | necktie , pyjama , 6
2641 | casual shoes , t-shirt , 791
2642 | lehenga , sandals , 28
2643 | spectators , t-shirt , 2
2644 | bag , satchel , 688
2645 | backpack , suit , 1
2646 | sling bag , sweatshirt , 2
2647 | driving shoes , socks , 22
2648 | dress , wedges , 725
2649 | sling bag , t-shirt , 20
2650 | formal shirt , wing tips , 16
2651 | bag , jacket , 448
2652 | casual trousers , formal shoes , 6
2653 | satchel , trouser , 37
2654 | belt , bomber jacket , 34
2655 | sunglasses , wing tips , 11
2656 | sunglasses , t-shirt , 216
2657 | goggles , layer_1_upper_body , 65
2658 | peeptoes , trouser , 673
2659 | ring , suspender , 19
2660 | churidar set , jewelry , 108
2661 | cardigan , gloves , 3
2662 | jacket , monk straps , 1
2663 | jeans , socks , 38
2664 | corset , necktie , 76
2665 | briefs , laptop bag , 29
2666 | belt , messenger bag , 162
2667 | denim shorts , polo , 7
2668 | card case , cufflinks , 103
2669 | top , training shoes , 88
2670 | clogs , shirt , 8
2671 | suit , trunk , 3
2672 | bracelet , casual shoes , 30
2673 | necktie , thongs , 3
2674 | apparel , push-up bra , 11
2675 | belt , layer_1_upper_body , 197
2676 | backpack , lifestyle shoes , 66
2677 | apparel , cargo shorts , 91
2678 | backpack , watch , 23
2679 | loafers , sleepwear , 33
2680 | accessories , wallet , 102
2681 | ballerinas , casual trousers , 6
2682 | cardigan , trouser , 78
2683 | cardigan , pumps , 20
2684 | t-shirt , travel bag , 33
2685 | jewelry , loafers , 11
2686 | jacket , sling bag , 2
2687 | platform heels , wedding dress , 9
2688 | necktie , suspender , 633
2689 | boots , kurti , 11
2690 | accessories , stilettos , 19
2691 | maxi dress , necktie , 351
2692 | cardigan , t-shirt , 621
2693 | accessories , dupatta , 49
2694 | kurta , stilettos , 709
2695 | formal shoes , waist coat , 30
2696 | cardigan , maxi dress , 130
2697 | jacket , ring , 11
2698 | bracelet , saree , 727
2699 | dungaree , stilettos , 12
2700 | accessories , leggings , 444
2701 | camisole , pajama , 8
2702 | maxi dress , purse , 352
2703 | chinos , flipflops , 207
2704 | ballerinas , thermal , 12
2705 | blouse , corset , 94
2706 | cap , winter jacket , 6
2707 | formal trousers , lifestyle shoes , 8
2708 | bag , kurti , 7
2709 | footwear , ring , 30
2710 | belt , boxers , 6
2711 | bag , churidar set , 15
2712 | sweater , wedges , 8
2713 | card case , t-shirt , 1
2714 | accessories , tunic , 447
2715 | apparel , down jacket , 8
2716 | formal trousers , sunglasses , 10
2717 | high tops , joggers , 3
2718 | cap , trench coat , 6
2719 | palazzo , suitcase , 6
2720 | jacket , tote , 41
2721 | camisole , pumps , 55
2722 | jeggings , tunic , 302
2723 | ballerinas , shape wear , 43
2724 | ballerinas , denim jacket , 5
2725 | casual jacket , purse , 23
2726 | denim jacket , t-shirt , 174
2727 | derby , suit , 287
2728 | blouse , clutch , 130
2729 | polo , wing tips , 4
2730 | dress socks , socks , 107
2731 | saree , wedges , 28
2732 | mini skirt , satchel , 1
2733 | belt , slip ons , 37
2734 | bottoms , dupatta , 488
2735 | belt , oxfords shoe , 2
2736 | kurti , scarf , 54
2737 | palazzo , shrug , 14
2738 | earrings , shirt dress , 14
2739 | loafers , messenger bag , 217
2740 | espadrilles , trousers , 18
2741 | accessories , trackpants , 8
2742 | bottoms , maxi dress , 33
2743 | bag , purse , 829
2744 | derby , formal trousers , 122
2745 | jeggings , sweatshirt , 262
2746 | athletic socks , boots , 5
2747 | clutch , v-neck , 5
2748 | belly shoes , belt , 2
2749 | sports bra , trackwear , 37
2750 | slippers , sweatshirt , 6
2751 | chinos , sweater , 33
2752 | blazer , t-shirt , 24
2753 | pumps , sunglasses , 210
2754 | cap , goggles , 6
2755 | bra , bracelet , 12
2756 | satchel , sweatshirt , 1
2757 | slip ons , t-shirt , 222
2758 | apparel , parka , 35
2759 | casual shoes , winter jacket , 87
2760 | belt , jeans , 541
2761 | vest , waistcoat , 15
2762 | belt , sports bra , 18
2763 | hand bag , necktie , 36
2764 | cardigan , v-neck , 182
2765 | polo , sports shoes , 475
2766 | kurta , trousers , 599
2767 | accessories , corset , 1
2768 | belt , trackpants , 6
2769 | bag , dress , 648
2770 | handkerchief , t-shirt , 64
2771 | backpack , jewelry , 17
2772 | footwear , platform heels , 66
2773 | bikini , cap , 63
2774 | sandals , sleepwear , 18
2775 | peeptoes , suit , 246
2776 | scarf , sports shoes , 4
2777 | chinos , kurti , 1
2778 | layer_1_lower_body , travel bag , 1
2779 | pumps , shirt , 860
2780 | dress , gloves , 77
2781 | purse , t-shirt , 379
2782 | blouse , socks , 1
2783 | glasses , sandals , 98
2784 | gloves , pumps , 13
2785 | hand bag , skirt , 17
2786 | polo , purse , 3
2787 | jeggings , purse , 48
2788 | t-shirt , turtleneck , 5
2789 | palazzo , t-shirt , 315
2790 | accessories , flipflops , 284
2791 | espadrilles , joggers , 17
2792 | clogs , footwear , 682
2793 | blouse , bottoms , 276
2794 | accessories , bag , 426
2795 | cap , travel bag , 30
2796 | bodysuit , thermal , 29
2797 | layer_1_upper_body , sandals , 123
2798 | thermal , travel bag , 1
2799 | ankle boots , shorts , 13
2800 | mini skirt , sports shoes , 4
2801 | coat , oxfords shoe , 11
2802 | jumper , sunglasses , 4
2803 | cap , v-neck , 7
2804 | necklace , romper , 28
2805 | brogues , jeans , 176
2806 | accessories , lifestyle shoes , 8
2807 | ballerinas , costume , 72
2808 | blazer , v-neck , 22
2809 | sports sandals , sweatshirt , 38
2810 | maxi dress , vest , 31
2811 | footwear , sweater , 37
2812 | backpack , jumpsuit , 33
2813 | dungaree , waistcoat , 11
2814 | costume , hand bag , 7
2815 | formal shoes , shirt , 844
2816 | ankle boots , blazer , 1
2817 | sandals , trackpants , 10
2818 | bottoms , panties , 51
2819 | goggles , ring , 6
2820 | messenger bag , tights , 10
2821 | loafers , shorts , 525
2822 | jacket , suitcase , 21
2823 | bag , tuxedo , 7
2824 | footwear , t-shirt , 828
2825 | peacoat , sports shoes , 1
2826 | peeptoes , shirt dress , 2
2827 | bracelet , travel bag , 5
2828 | bag , corset , 2
2829 | jumpsuit , satchel , 5
2830 | flipflops , shirt dress , 14
2831 | goggles , socks , 5
2832 | goggles , hipsters , 5
2833 | blouse , tote , 1
2834 | leggings , watch , 47
2835 | swimsuit , wedges , 3
2836 | suit , waistcoat , 6
2837 | bottoms , formal shoes , 3
2838 | pyjama , waistcoat , 393
2839 | pajama , sandals , 77
2840 | casual shoes , sunglasses , 398
2841 | casual trousers , goggles , 6
2842 | kimono , wedges , 6
2843 | sweater , watch , 44
2844 | belt , sunglasses , 33
2845 | accessories , churidar set , 586
2846 | churidar set , clutch , 75
2847 | sports bra , t-shirt , 46
2848 | denim jacket , palazzo , 6
2849 | goggles , jumper , 4
2850 | mittens , sports shoes , 20
2851 | costume , high tops , 2
2852 | formal shoes , sweater , 11
2853 | canvas shoes , cargo shorts , 6
2854 | chinos , sandals , 15
2855 | earrings , jacket , 73
2856 | belt , suitcase , 64
2857 | socks , sports shoes , 466
2858 | peeptoes , watch , 57
2859 | scarf , stilettos , 24
2860 | sports sandals , watch , 94
2861 | shorts , thermal , 7
2862 | backpack , casual shoes , 51
2863 | casual trousers , loafers , 172
2864 | backpack , dress , 95
2865 | hand bag , wedding dress , 7
2866 | sling bag , sweater , 1
2867 | bottoms , stockings , 54
2868 | clutch , lifestyle shoes , 1
2869 | skirt , slippers , 37
2870 | tunic , vest , 39
2871 | casual jacket , loafers , 46
2872 | necktie , wallet , 6
2873 | kurti , thermal , 173
2874 | jewelry , shirt , 19
2875 | t-shirt , winter jacket , 114
2876 | bag , glasses , 208
2877 | hoodie , sweater , 614
2878 | travel bag , trouser , 98
2879 | bag , bracelet , 159
2880 | coat , leggings , 17
2881 | casual shoes , scarf , 5
2882 | purse , sweatshirt , 15
2883 | bomber jacket , sweatshirt , 24
2884 | socks , stockings , 78
2885 | suit , wing tips , 31
2886 | loafers , palazzo , 225
2887 | t-shirt , wing tips , 12
2888 | pyjama , romper , 4
2889 | chinos , top , 669
2890 | ballerinas , winter jacket , 22
2891 | backpack , denim shorts , 1
2892 | joggers , socks , 7
2893 | derby , sunglasses , 35
2894 | footwear , lehenga , 95
2895 | chinos , wallet , 6
2896 | backpack , slip ons , 179
2897 | derby , jacket , 359
2898 | denim shorts , vest , 10
2899 | leather jacket , lifestyle shoes , 71
2900 | hoodie , trackwear , 13
2901 | accessories , robe , 205
2902 | slippers , thermal , 5
2903 | pyjama , v-neck , 6
2904 | earrings , stilettos , 28
2905 | sunglasses , thongs , 2
2906 | driving shoes , footwear , 3
2907 | party dress , sweater , 17
2908 | pyjama , trunk , 17
2909 | derby , polo , 73
2910 | running shoes , t-shirt , 153
2911 | messenger bag , t-shirt , 160
2912 | footwear , winter jacket , 187
2913 | accessories , tote , 620
2914 | purse , vest , 8
2915 | scarf , watch , 4
2916 | flipflops , watch , 112
2917 | lapel pin , necktie , 34
2918 | necklace , palazzo , 42
2919 | satchel , sports shoes , 6
2920 | pumps , saree , 79
2921 | ankle boots , dress , 106
2922 | kurta , waistcoat , 1
2923 | necklace , shirt dress , 10
2924 | jeans , ring , 2
2925 | costume , loafers , 8
2926 | blouse , palazzo , 137
2927 | cardigan , formal shirt , 80
2928 | tights , tunic , 29
2929 | camisole , costume , 2
2930 | hipsters , trouser , 152
2931 | footwear , pyjama , 74
2932 | pumps , thongs , 10
2933 | bag , windcheater , 17
2934 | jewelry , suitcase , 6
2935 | footwear , sunglasses , 67
2936 | briefs , sweatshirt , 7
2937 | maxi dress , watch , 6
2938 | earrings , sunglasses , 8
2939 | dress , sunglasses , 19
2940 | fitness band , trousers , 20
2941 | high tops , leather jacket , 29
2942 | denim shorts , watch , 4
2943 | hand bag , jacket , 16
2944 | bottoms , oxfords shoe , 1
2945 | apparel , maxi dress , 34
2946 | footwear , skirt , 824
2947 | necktie , watch , 36
2948 | bottoms , bottoms , 22
2949 | maxi dress , ring , 38
2950 | maxi dress , sunglasses , 21
2951 | jeggings , shrug , 176
2952 | dress , glasses , 429
2953 | cardigan , socks , 2
2954 | socks , wedges , 111
2955 | bomber jacket , t-shirt , 333
2956 | briefs , vest , 25
2957 | cardigan , top , 596
2958 | bottoms , henley , 46
2959 | blazer , leggings , 64
2960 | loafers , trousers , 458
2961 | laptop bag , shirt , 46
2962 | monk straps , suit , 7
2963 | coat , hoodie , 54
2964 | fedora , sweater , 18
2965 | short dress , stilettos , 2
2966 | short dress , vest , 11
2967 | jacket , messenger bag , 55
2968 | kurta , scarf , 527
2969 | blazer , goggles , 6
2970 | lifestyle shoes , trouser , 328
2971 | pumps , t-shirt , 95
2972 | boots , formal shirt , 6
2973 | casual shoes , shirt dress , 12
2974 | camisole , wedges , 2
2975 | necklace , necktie , 625
2976 | bottoms , cap , 465
2977 | casual shirt , casual trousers , 35
2978 | glasses , shrug , 11
2979 | boots , trunk , 8
2980 | apparel , footwear , 843
2981 | corset , wedding dress , 81
2982 | accessories , laptop sleeve , 15
2983 | bag , trouser , 278
2984 | casual shoes , dress , 203
2985 | slippers , suit , 5
2986 | formal trousers , waistcoat , 12
2987 | dupatta , footwear , 27
2988 | socks , travel bag , 109
2989 | chinos , high tops , 56
2990 | necklace , robe , 4
2991 | jeggings , slippers , 232
2992 | cap , sweatshirt , 434
2993 | accessories , goggles , 171
2994 | polo , vest , 16
2995 | kurti , necklace , 186
2996 | casual jacket , scarf , 18
2997 | bracelet , layer_1_upper_body , 14
2998 | purse , trousers , 82
2999 | accessories , vest , 217
3000 | clutch , wedges , 122
3001 | cardigan , footwear , 38
3002 | cap , lifestyle shoes , 273
3003 | corset , trouser , 80
3004 | ankle boots , cape , 5
3005 | chinos , waistcoat , 15
3006 | bottoms , gloves , 9
3007 | fedora , loafers , 35
3008 | goggles , swimsuit , 99
3009 | cap , kurta , 441
3010 | satchel , top , 522
3011 | travel bag , wallet , 445
3012 | cardigan , messenger bag , 74
3013 | sandals , trouser , 871
3014 | briefs , slip ons , 38
3015 | espadrilles , top , 396
3016 | apparel , blouse , 772
3017 | slippers , stockings , 7
3018 | formal shirt , suit , 29
3019 | handkerchief , necklace , 159
3020 | casual shirt , fedora , 89
3021 | sweatshirt , trackwear , 125
3022 | blouse , trouser , 863
3023 | trouser , wedges , 758
3024 | chinos , wedges , 107
3025 | backpack , windcheater , 33
3026 | bottoms , pumps , 373
3027 | belly shoes , skirt , 52
3028 | flipflops , footwear , 6
3029 | formal shirt , loafers , 1
3030 | slippers , v-neck , 8
3031 | pyjama , slip ons , 26
3032 | satchel , wedges , 35
3033 | beanies , top , 21
3034 | pumps , shorts , 270
3035 | cape , palazzo , 22
3036 | cape , top , 122
3037 | bottoms , coat , 11
3038 | blouse , earrings , 282
3039 | bag , sleepwear , 242
3040 | hipsters , leggings , 8
3041 | goggles , lifestyle shoes , 110
3042 | earrings , wedges , 67
3043 | v-neck , waistcoat , 2
3044 | joggers , necktie , 2
3045 | polo , travel bag , 6
3046 | casual shirt , sweater , 34
3047 | bag , footwear , 753
3048 | footwear , trouser , 849
3049 | costume , swimwear , 5
3050 | camisole , jeggings , 12
3051 | cardigan , flipflops , 9
3052 | cufflinks , waistcoat , 26
3053 | clutch , t-shirt , 29
3054 | espadrilles , t-shirt , 219
3055 | high tops , jeggings , 1
3056 | boots , waistcoat , 5
3057 | crewneck , slip ons , 35
3058 | apparel , bodysuit , 757
3059 | derby , formal shirt , 283
3060 | v-neck , wallet , 5
3061 | scarf , slip ons , 18
3062 | apparel , jumpsuit , 611
3063 | loafers , wallet , 41
3064 | necktie , vest , 152
3065 | costume , jewelry , 10
3066 | blouse , sweater , 189
3067 | formal shoes , sunglasses , 39
3068 | belt , party dress , 64
3069 | corset , messenger bag , 8
3070 | ring , wallet , 11
3071 | camisole , maxi dress , 25
3072 | bottoms , travel bag , 522
3073 | apparel , sports bra , 217
3074 | necktie , satchel , 12
3075 | palazzo , sports shoes , 9
3076 | goggles , joggers , 10
3077 | coat , top , 194
3078 | bottoms , sports sandals , 230
3079 | hand bag , shirt , 164
3080 | crewneck , shirt dress , 2
3081 | leggings , sports bra , 34
3082 | corset , shape wear , 120
3083 | apparel , flipflops , 556
3084 | ballerinas , messenger bag , 25
3085 | athletic socks , bottoms , 9
3086 | sleepwear , sports shoes , 215
3087 | high tops , winter jacket , 54
3088 | denim shorts , sunglasses , 8
3089 | satchel , shorts , 18
3090 | bag , stilettos , 401
3091 | bomber jacket , formal shoes , 2
3092 | ballerinas , tights , 14
3093 | bikini , cardigan , 36
3094 | belt , blazer , 2
3095 | slippers , t-shirt , 591
3096 | peeptoes , short dress , 4
3097 | goggles , top , 59
3098 | belt , waistcoat , 1
3099 | dungaree , pyjama , 56
3100 | bodysuit , mittens , 10
3101 | goggles , pumps , 12
3102 | sleepwear , slippers , 424
3103 | camisole , night slip , 40
3104 | clutch , sweatshirt , 50
3105 | ankle boots , sunglasses , 2
3106 | ballerinas , blazer , 392
3107 | cap , skirt , 198
3108 | belt , card case , 33
3109 | footwear , sling bag , 99
3110 | casual trousers , earrings , 2
3111 | blouse , loafers , 430
3112 | accessories , formal shoes , 220
3113 | bow tie , wing tips , 3
3114 | shirt dress , sunglasses , 22
3115 | gloves , shorts , 2
3116 | leather jacket , sandals , 91
3117 | canvas shoes , leather jacket , 24
3118 | necktie , pajama , 28
3119 | jeggings , pumps , 109
3120 | jumper , jumpsuit , 49
3121 | necktie , skirt , 234
3122 | cap , slippers , 20
3123 | layer_1_lower_body , ring , 4
3124 | kurti , slippers , 3
3125 | lehenga , wedges , 27
3126 | jacket , purse , 210
3127 | scarf , sling bag , 5
3128 | loafers , polo , 687
3129 | loafers , socks , 59
3130 | necktie , travel bag , 1
3131 | jacket , loafers , 368
3132 | cufflinks , scarf , 10
3133 | panties , purse , 2
3134 | necktie , short dress , 40
3135 | ring , socks , 47
3136 | casual trousers , running shoes , 1
3137 | running shoes , wallet , 2
3138 | sports shoes , swim trunks , 1
3139 | belt , cufflinks , 24
3140 | layer_1_upper_body , wedges , 3
3141 | polo , trackwear , 62
3142 | accessories , swimsuit , 383
3143 | messenger bag , shorts , 140
3144 | apparel , skirt , 720
3145 | jeggings , sweater , 1
3146 | cap , casual shoes , 295
3147 | suspender , waistcoat , 42
3148 | casual trousers , polo , 415
3149 | jewelry , purse , 213
3150 | necktie , shorts , 84
3151 | accessories , romper , 390
3152 | blazer , hand bag , 4
3153 | jeans , turtleneck , 11
3154 | glasses , sling bag , 8
3155 | messenger bag , sports sandals , 67
3156 | bag , trousers , 319
3157 | high tops , purse , 18
3158 | lapel pin , scarf , 35
3159 | dress socks , tights , 1
3160 | scarf , v-neck , 1
3161 | apparel , stockings , 11
3162 | jumpsuit , platform heels , 629
3163 | accessories , beanies , 18
3164 | formal shoes , shorts , 2
3165 | apparel , trench coat , 17
3166 | sports shoes , waistcoat , 1
3167 | camisole , scarf , 5
3168 | mittens , sandals , 48
3169 | purse , sweater , 45
3170 | apparel , gloves , 46
3171 | sandals , suitcase , 61
3172 | kurta , sweater , 18
3173 | ring , slip ons , 1
3174 | churidar set , watch , 15
3175 | casual shirt , necktie , 46
3176 | tunic , turtleneck , 5
3177 | belt , clutch , 57
3178 | boots , jeggings , 30
3179 | necktie , swimsuit , 509
3180 | casual shoes , leggings , 70
3181 | cardigan , ring , 2
3182 | footwear , socks , 783
3183 | loafers , sunglasses , 324
3184 | ballerinas , trouser , 854
3185 | cap , cardigan , 55
3186 | belt , satchel , 127
3187 | sports shoes , sunglasses , 9
3188 | casual jacket , trouser , 24
3189 | dress , ring , 80
3190 | training shoes , trouser , 15
3191 | stockings , t-shirt , 2
3192 | jumper , pumps , 10
3193 | belt , top , 500
3194 | bracelet , formal shirt , 13
3195 | bottoms , pajama , 124
3196 | glasses , slippers , 29
3197 | boots , t-shirt , 692
3198 | apparel , party dress , 435
3199 | accessories , costume , 422
3200 | derby , glasses , 49
3201 | bracelet , suit , 33
3202 | shirt , wallet , 190
3203 | messenger bag , sweater , 74
3204 | ballerinas , pyjama , 8
3205 | suitcase , trouser , 6
3206 | pyjama , trouser , 20
3207 | glasses , suspender , 25
3208 | backpack , sandals , 9
3209 | costume , wallet , 1
3210 | dungaree , scarf , 28
3211 | suitcase , top , 3
3212 | ballerinas , lehenga , 2
3213 | ring , tote , 59
3214 | handkerchief , suspender , 159
3215 | hand bag , pumps , 277
3216 | casual jacket , sweatshirt , 95
3217 | bomber jacket , top , 3
3218 | accessories , v-neck , 8
3219 | bottoms , tunic , 372
3220 | formal trousers , winter jacket , 1
3221 | maxi dress , slippers , 23
3222 | apparel , layer_1_upper_body , 726
3223 | sweatshirt , watch , 244
3224 | belt , derby , 143
3225 | hoodie , travel bag , 4
3226 | derby , trousers , 710
3227 | hand bag , pajama , 6
3228 | short dress , socks , 2
3229 | blouse , cape , 10
3230 | accessories , camisole , 314
3231 | dungaree , sling bag , 42
3232 | casual jacket , high tops , 8
3233 | blouse , casual shoes , 251
3234 | glasses , kurti , 20
3235 | bracelet , pumps , 158
3236 | layer_1_lower_body , trunk , 88
3237 | bracelet , peeptoes , 131
3238 | ballerinas , leather jacket , 68
3239 | blouse , handkerchief , 28
3240 | churidar set , earrings , 601
3241 | jumpsuit , sunglasses , 234
3242 | scarf , vest , 29
3243 | sandals , wedding dress , 134
3244 | cape , party dress , 11
3245 | clogs , trousers , 9
3246 | apparel , casual shirt , 3
3247 | casual shirt , sandals , 74
3248 | henley , thermal , 5
3249 | layer_1_upper_body , stilettos , 10
3250 | athletic socks , socks , 63
3251 | belt , trench coat , 5
3252 | leather jacket , t-shirt , 327
3253 | jumper , top , 25
3254 | backpack , glasses , 7
3255 | scarf , shirt , 61
3256 | churidar set , ring , 16
3257 | bag , running shoes , 2
3258 | apparel , handkerchief , 101
3259 | footwear , kurta , 141
3260 | satchel , watch , 42
3261 | flipflops , trackwear , 151
3262 | cape , hand bag , 1
3263 | bottoms , crewneck , 8
3264 | boots , thongs , 16
3265 | blouse , flipflops , 10
3266 | bra , sandals , 79
3267 | apparel , cardigan , 57
3268 | cap , leggings , 63
3269 | flipflops , short dress , 1
3270 | henley , trousers , 6
3271 | lifestyle shoes , maxi dress , 17
3272 | cufflinks , trousers , 1
3273 | blazer , high tops , 31
3274 | dress , necktie , 642
3275 | footwear , jewelry , 7
3276 | casual shirt , wedges , 46
3277 | necktie , sweatshirt , 12
3278 | card case , shirt , 47
3279 | fedora , trousers , 34
3280 | footwear , necklace , 96
3281 | card case , suspender , 104
3282 | backpack , ring , 9
3283 | monk straps , shirt , 15
3284 | gloves , socks , 3
3285 | bodysuit , sandals , 5
3286 | cap , swimwear , 44
3287 | costume , glasses , 86
3288 | mini skirt , pumps , 4
3289 | apparel , trouser , 484
3290 | blouse , pumps , 859
3291 | stockings , trouser , 5
3292 | leggings , platform heels , 6
3293 | coat , loafers , 14
3294 | jumper , v-neck , 3
3295 | dress socks , ring , 6
3296 | dress , handkerchief , 69
3297 | polo , sunglasses , 21
3298 | apparel , canvas shoes , 87
3299 | maxi dress , peeptoes , 310
3300 | shirt , stilettos , 502
3301 | jewelry , necktie , 66
3302 | apparel , pumps , 608
3303 | chinos , sweatshirt , 741
3304 | maxi dress , sling bag , 69
3305 | ring , shirt , 21
3306 | sandals , stockings , 58
3307 | scarf , wallet , 12
3308 | card case , necklace , 108
3309 | bodysuit , vest , 8
3310 | belt , shirt , 717
3311 | glasses , ring , 27
3312 | canvas shoes , casual trousers , 14
3313 | bag , saree , 209
3314 | bracelet , watch , 176
3315 | shrug , sports shoes , 88
3316 | bottoms , thongs , 21
3317 | dungaree , peeptoes , 5
3318 | necktie , slip ons , 19
3319 | costume , slippers , 9
3320 | briefs , travel bag , 51
3321 | bracelet , hipsters , 1
3322 | necklace , sandals , 239
3323 | blazer , watch , 25
3324 | maxi dress , sports shoes , 106
3325 | jeggings , watch , 10
3326 | messenger bag , wallet , 389
3327 | flipflops , panties , 18
3328 | cape , hoodie , 13
3329 | polo , tights , 33
3330 | lapel pin , shirt , 12
3331 | bottoms , winter jacket , 414
3332 | clutch , suit , 176
3333 | ballerinas , top , 865
3334 | blouse , kimono , 23
3335 | polo , training shoes , 2
3336 | necktie , necktie , 1
3337 | backpack , goggles , 98
3338 | leggings , turtleneck , 5
3339 | camisole , shape wear , 17
3340 | kurti , sandals , 793
3341 | dress , jewelry , 20
3342 | jeans , slip ons , 492
3343 | suspender , t-shirt , 30
3344 | running shorts , t-shirt , 12
3345 | dupatta , jewelry , 18
3346 | cap , dungaree , 75
3347 | sweatshirt , travel bag , 4
3348 | bottoms , windcheater , 7
3349 | necktie , trouser , 289
3350 | messenger bag , suit , 2
3351 | loafers , t-shirt , 816
3352 | earrings , saree , 588
3353 | blouse , sports shoes , 861
3354 | fedora , polo , 94
3355 | jeans , rugby , 1
3356 | ballerinas , necklace , 48
3357 | lehenga , ring , 13
3358 | bottoms , cape , 42
3359 | apparel , tunic , 736
3360 | scarf , swimwear , 38
3361 | kurta , sports shoes , 4
3362 | satchel , sweater , 23
3363 | sling bag , wing tips , 8
3364 | flipflops , top , 439
3365 | jeans , tote , 407
3366 | necklace , party dress , 16
3367 | formal shoes , waistcoat , 9
3368 | henley , jeans , 804
3369 | casual trousers , kurti , 6
3370 | cargo shorts , casual shirt , 1
3371 | necklace , trouser , 93
3372 | card case , necktie , 130
3373 | trackwear , watch , 2
3374 | casual trousers , kurta , 6
3375 | belt , lifestyle shoes , 19
3376 | ankle boots , maxi dress , 26
3377 | bomber jacket , glasses , 11
3378 | crewneck , short dress , 3
3379 | sunglasses , vest , 5
3380 | polo , sports sandals , 125
3381 | cardigan , slippers , 4
3382 | handkerchief , skirt , 3
3383 | costume , layer_1_lower_body , 8
3384 | trouser , turtleneck , 15
3385 | blouse , jumper , 5
3386 | sandals , tunic , 834
3387 | casual jacket , tote , 5
3388 | gloves , messenger bag , 1
3389 | kurti , watch , 93
3390 | hoodie , joggers , 5
3391 | sweater , travel bag , 1
3392 | trackpants , tunic , 18
3393 | belt , jumpsuit , 487
3394 | belt , leather jacket , 3
3395 | accessories , shirt dress , 121
3396 | hand bag , jumpsuit , 159
3397 | accessories , athletic socks , 2
3398 | apparel , bottoms , 653
3399 | cape , jeggings , 10
3400 | necklace , swimsuit , 18
3401 | footwear , jeans , 842
3402 | costume , travel bag , 13
3403 | backpack , casual jacket , 10
3404 | necktie , trench coat , 25
3405 | coat , monk straps , 1
3406 | gloves , loafers , 13
3407 | boots , dress socks , 6
3408 | belt , goggles , 4
3409 | layer_1_lower_body , trousers , 17
3410 | crewneck , t-shirt , 756
3411 | gloves , skirt , 5
3412 | accessories , wing tips , 15
3413 | earrings , party dress , 28
3414 | boots , dungaree , 14
3415 | loafers , tights , 17
3416 | bomber jacket , bottoms , 21
3417 | blazer , palazzo , 7
3418 | pyjama , slippers , 60
3419 | top , waistcoat , 5
3420 | bag , sports bra , 15
3421 | brogues , chinos , 160
3422 | jewelry , leggings , 85
3423 | gloves , wallet , 1
3424 | denim jacket , loafers , 11
3425 | cap , corset , 24
3426 | bottoms , laptop bag , 26
3427 | earrings , peeptoes , 44
3428 | derby , scarf , 1
3429 | accessories , sandals , 496
3430 | belt , dress , 746
3431 | coat , gloves , 30
3432 | henley , high tops , 18
3433 | leggings , polo , 36
3434 | belt , formal trousers , 279
3435 | t-shirt , tote , 115
3436 | apparel , tights , 332
3437 | sandals , t-shirt , 693
3438 | oxfords shoe , shirt , 102
3439 | formal shoes , messenger bag , 114
3440 | footwear , sandals , 352
3441 | leggings , t-shirt , 777
3442 | jeggings , necklace , 1
3443 | bra , necktie , 96
3444 | camisole , top , 535
3445 | accessories , trouser , 243
3446 | bodysuit , jewelry , 3
3447 | leggings , oxfords shoe , 18
3448 | clutch , saree , 163
3449 | footwear , footwear , 848
3450 | running shoes , sports bra , 4
3451 | backpack , shirt , 59
3452 | accessories , cardigan , 206
3453 | leather jacket , sports shoes , 6
3454 | belly shoes , kurta , 473
3455 | earrings , espadrilles , 10
3456 | henley , sandals , 427
3457 | swimsuit , tote , 3
3458 | camisole , short dress , 10
3459 | cape , sweatshirt , 1
3460 | cap , crewneck , 1
3461 | earrings , sweater , 36
3462 | casual shoes , sleepwear , 18
3463 | footwear , stilettos , 410
3464 | casual shirt , watch , 33
3465 | footwear , purse , 173
3466 | blouse , camisole , 147
3467 | canvas shoes , shirt , 58
3468 | canvas shoes , v-neck , 18
3469 | ballerinas , blouse , 814
3470 | cap , jumpsuit , 278
3471 | maxi dress , pumps , 349
3472 | jeans , necklace , 66
3473 | joggers , v-neck , 23
3474 | cardigan , jewelry , 8
3475 | earrings , swimsuit , 19
3476 | stilettos , top , 730
3477 | accessories , suspender , 18
3478 | costume , sandals , 1
3479 | kurti , sling bag , 31
3480 | brogues , tuxedo , 4
3481 | casual trousers , leather jacket , 7
3482 | bodysuit , boots , 26
3483 | belly shoes , dungaree , 22
3484 | boots , top , 642
3485 | cap , socks , 17
3486 | bottoms , night slip , 3
3487 | scarf , slippers , 4
3488 | denim shorts , espadrilles , 1
3489 | derby , watch , 177
3490 | belt , jeggings , 10
3491 | belt , kurti , 49
3492 | cardigan , sunglasses , 60
3493 | accessories , training shoes , 65
3494 | stilettos , sweatshirt , 34
3495 | glasses , polo , 9
3496 | cape , espadrilles , 1
3497 | bag , sunglasses , 782
3498 | cardigan , necklace , 36
3499 | sandals , trousers , 547
3500 | camisole , ring , 635
3501 | ankle boots , purse , 18
3502 | accessories , jumpsuit , 9
3503 | apparel , vest , 491
3504 | bag , sports sandals , 58
3505 | boots , sunglasses , 8
3506 | jacket , slippers , 7
3507 | ballerinas , formal trousers , 9
3508 | polo , slippers , 519
3509 | trousers , watch , 378
3510 | belt , cardigan , 5
3511 | socks , socks , 26
3512 | briefs , tuxedo , 8
3513 | bracelet , shrug , 78
3514 | boots , ring , 3
3515 | cap , jumper , 1
3516 | peeptoes , tote , 22
3517 | clutch , skirt , 159
3518 | bodysuit , high tops , 12
3519 | sports shoes , top , 868
3520 | blouse , purse , 4
3521 | briefs , glasses , 1
3522 | backpack , bottoms , 77
3523 | bracelet , leggings , 255
3524 | cardigan , polo , 9
3525 | apparel , bikini , 5
3526 | ankle boots , tunic , 6
3527 | jewelry , scarf , 2
3528 | gloves , pajama , 6
3529 | lifestyle shoes , vest , 94
3530 | sandals , travel bag , 17
3531 | dupatta , sandals , 109
3532 | camisole , jeans , 443
3533 | jewelry , wallet , 17
3534 | apparel , corset , 1
3535 | accessories , skirt , 650
3536 | lehenga , necklace , 26
3537 | shorts , stilettos , 369
3538 | accessories , blazer , 100
3539 | saree , stilettos , 706
3540 | chinos , leather jacket , 12
3541 | necktie , t-shirt , 58
3542 | sweater , tote , 1
3543 | polo , pumps , 33
3544 | bag , rugby , 4
3545 | blouse , jeggings , 13
3546 | footwear , v-neck , 337
3547 | ankle boots , bodysuit , 12
3548 | apparel , thongs , 462
3549 | bag , handkerchief , 5
3550 | ankle boots , winter jacket , 40
3551 | gloves , ring , 1
3552 | brogues , messenger bag , 39
3553 | necktie , tuxedo , 253
3554 | dress , high tops , 226
3555 | gloves , sleepwear , 55
3556 | coat , wedding dress , 6
3557 | slip ons , sweatshirt , 175
3558 | high tops , jacket , 50
3559 | bracelet , jewelry , 294
3560 | lifestyle shoes , suit , 16
3561 | ring , thongs , 10
3562 | tote , tunic , 25
3563 | belt , footwear , 406
3564 | bomber jacket , loafers , 10
3565 | accessories , slippers , 92
3566 | necklace , stilettos , 1
3567 | pumps , trousers , 113
3568 | pumps , travel bag , 1
3569 | goggles , purse , 173
3570 | sandals , short dress , 24
3571 | bottoms , dungaree , 15
3572 | sports bra , tunic , 9
3573 | sling bag , wedges , 68
3574 | party dress , peeptoes , 8
3575 | boots , shirt dress , 6
3576 | glasses , joggers , 10
3577 | blouse , mini skirt , 55
3578 | backpack , belt , 5
3579 | ring , wedges , 48
3580 | purse , sunglasses , 72
3581 | sweater , trousers , 220
3582 | ring , travel bag , 91
3583 | backpack , maxi dress , 11
3584 | ballerinas , jewelry , 134
3585 | casual shoes , hand bag , 60
3586 | glasses , swimsuit , 21
3587 | coat , thermal , 7
3588 | cap , track suit , 3
3589 | cap , costume , 341
3590 | backpack , panties , 17
3591 | necktie , night slip , 2
3592 | bottoms , running shoes , 136
3593 | casual jacket , casual shirt , 604
3594 | bracelet , sports shoes , 4
3595 | earrings , jeggings , 4
3596 | casual shoes , shirt , 779
3597 | bra , necklace , 43
3598 | bow tie , glasses , 4
3599 | jumper , trouser , 66
3600 | bracelet , t-shirt , 249
3601 | bodysuit , footwear , 8
3602 | apparel , kimono , 367
3603 | hand bag , leggings , 34
3604 | leggings , stockings , 87
3605 | jewelry , jumpsuit , 35
3606 | corset , footwear , 15
3607 | blazer , camisole , 3
3608 | flipflops , messenger bag , 116
3609 | ballerinas , churidar set , 337
3610 | suit , v-neck , 25
3611 | footwear , romper , 252
3612 | earrings , sweatshirt , 98
3613 | clutch , costume , 82
3614 | lehenga , purse , 4
3615 | casual trousers , vest , 6
3616 | cape , pajama , 6
3617 | sweater , trouser , 446
3618 | canvas shoes , cardigan , 54
3619 | footwear , pumps , 482
3620 | leggings , thongs , 9
3621 | belt , pajama , 34
3622 | casual shoes , coat , 13
3623 | bomber jacket , footwear , 78
3624 | pumps , purse , 345
3625 | backpack , coat , 11
3626 | accessories , denim jacket , 73
3627 | flipflops , shrug , 7
3628 | t-shirt , trouser , 691
3629 | lifestyle shoes , trackpants , 9
3630 | clutch , leggings , 88
3631 | bag , casual shoes , 523
3632 | bikini , sports bra , 36
3633 | apparel , suit , 643
3634 | hoodie , scarf , 96
3635 | derby , footwear , 69
3636 | clutch , shirt , 22
3637 | accessories , polo , 73
3638 | t-shirt , waistcoat , 63
3639 | casual jacket , leggings , 1
3640 | hipsters , t-shirt , 63
3641 | blouse , turtleneck , 12
3642 | boots , coat , 23
3643 | casual shoes , messenger bag , 344
3644 | dress , earrings , 617
3645 | cap , earrings , 19
3646 | belly shoes , formal shirt , 1
3647 | cargo shorts , footwear , 61
3648 | slip ons , trousers , 234
3649 | belt , brogues , 14
3650 | espadrilles , jeans , 177
3651 | backpack , jacket , 42
3652 | ring , trackpants , 259
3653 | bracelet , clutch , 242
3654 | dupatta , scarf , 118
3655 | necklace , watch , 15
3656 | cape , dress material , 16
3657 | peeptoes , sweatshirt , 19
3658 | sling bag , wallet , 77
3659 | boots , dress , 539
3660 | cardigan , earrings , 39
3661 | shrug , suitcase , 4
3662 | belt , hoodie , 23
3663 | clutch , jeans , 325
3664 | bracelet , tunic , 340
3665 | satchel , slippers , 12
3666 | glasses , jumpsuit , 39
3667 | slippers , sunglasses , 9
3668 | ballerinas , dungaree , 50
3669 | jeans , satchel , 164
3670 | costume , thongs , 2
3671 | bottoms , slippers , 46
3672 | dress , sandals , 838
3673 | cap , chinos , 171
3674 | cap , trackpants , 4
3675 | casual shirt , trouser , 139
3676 | belt , swimwear , 1
3677 | hand bag , trouser , 135
3678 | backpack , boots , 10
3679 | brogues , skirt , 7
3680 | jewelry , socks , 1
3681 | scarf , short dress , 30
3682 | sweater , vest , 26
3683 | apparel , joggers , 114
3684 | clogs , jumpsuit , 2
3685 | high tops , shirt dress , 12
3686 | casual shirt , tuxedo , 1
3687 | sleepwear , socks , 8
3688 | costume , fedora , 20
3689 | kimono , robe , 152
3690 | cargo shorts , sports sandals , 24
3691 | jeggings , peeptoes , 5
3692 | casual shoes , suit , 28
3693 | clutch , scarf , 38
3694 | kurta , slippers , 47
3695 | sports bra , trackpants , 49
3696 | backpack , bag , 364
3697 | loafers , outerwear , 1
3698 | t-shirt , trackpants , 122
3699 | ankle boots , cardigan , 2
3700 | derby , sweater , 7
3701 | coat , glasses , 4
3702 | jewelry , satchel , 40
3703 | hand bag , t-shirt , 311
3704 | apparel , training shoes , 69
3705 | camisole , footwear , 346
3706 | costume , sweater , 8
3707 | corset , saree , 202
3708 | slip ons , vest , 112
3709 | fitness band , shorts , 34
3710 | bikini , watch , 28
3711 | boxers , cap , 2
3712 | blouse , wedges , 605
3713 | ballerinas , layer_1_upper_body , 15
3714 | sling bag , wedding dress , 6
3715 | slip ons , socks , 70
3716 | blazer , trouser , 106
3717 | casual shirt , gloves , 6
3718 | messenger bag , ring , 18
3719 | footwear , outerwear , 2
3720 | leggings , necktie , 4
3721 | boxer briefs , jeans , 6
3722 | slip ons , sunglasses , 88
3723 | palazzo , tunic , 245
3724 | polo , sandals , 544
3725 | casual shoes , waistcoat , 38
3726 | chinos , swim trunks , 102
3727 | skirt , sports shoes , 481
3728 | laptop bag , slip ons , 9
3729 | casual shoes , denim shorts , 11
3730 | bag , travel bag , 294
3731 | pajama , scarf , 51
3732 | backpack , jeans , 497
3733 | accessories , purse , 815
3734 | polo , running shoes , 229
3735 | necktie , slippers , 19
3736 | cardigan , trackwear , 1
3737 | denim jacket , sports shoes , 3
3738 | card case , scarf , 19
3739 | accessories , windcheater , 33
3740 | socks , sunglasses , 12
3741 | gloves , top , 42
3742 | belt , thermal , 6
3743 | casual shirt , slip ons , 9
3744 | sleepwear , thermal , 9
3745 | backpack , pumps , 9
3746 | bottoms , vest , 563
3747 | leggings , messenger bag , 10
3748 | mittens , thermal , 4
3749 | palazzo , sling bag , 1
3750 | hoodie , trousers , 62
3751 | bag , pumps , 442
3752 | cardigan , fedora , 18
3753 | jumpsuit , stilettos , 690
3754 | laptop bag , sweater , 12
3755 | pumps , stockings , 9
3756 | apparel , jumper , 168
3757 | boots , goggles , 89
3758 | apparel , coat , 495
3759 | costume , stockings , 145
3760 | cape , wedges , 11
3761 | cap , purse , 91
3762 | goggles , sweater , 36
3763 | dress , wing tips , 8
3764 | bag , formal trousers , 52
3765 | coat , hand bag , 55
3766 | chinos , watch , 204
3767 | cap , derby , 23
3768 | bomber jacket , derby , 1
3769 | blazer , pumps , 41
3770 | satchel , t-shirt , 58
3771 | bag , espadrilles , 24
3772 | formal trousers , watch , 2
3773 | bikini , shrug , 4
3774 | bottoms , watch , 287
3775 | camisole , handkerchief , 12
3776 | coat , t-shirt , 97
3777 | boots , v-neck , 96
3778 | footwear , shorts , 714
3779 | accessories , turtleneck , 6
3780 | boots , denim jacket , 13
3781 | canvas shoes , t-shirt , 237
3782 | suit , wallet , 117
3783 | bottoms , rugby , 13
3784 | push-up bra , t-shirt , 10
3785 | outerwear , sandals , 46
3786 | bottoms , derby , 13
3787 | goggles , maxi dress , 1
3788 | purse , scarf , 133
3789 | formal shirt , sweater , 80
3790 | peeptoes , purse , 35
3791 | bracelet , casual shirt , 79
3792 | outerwear , sports shoes , 11
3793 | costume , kimono , 38
3794 | kurta , satchel , 41
3795 | camisole , kimono , 4
3796 | romper , sweater , 45
3797 | jeggings , leather jacket , 18
3798 | cap , sandals , 119
3799 | cardigan , necktie , 27
3800 | blazer , stilettos , 1
3801 | sweatshirt , tights , 14
3802 | sweatshirt , turtleneck , 1
3803 | jeggings , satchel , 7
3804 | dungaree , vest , 107
3805 | corset , top , 46
3806 | bikini , satchel , 48
3807 | apparel , slippers , 719
3808 | pyjama , top , 96
3809 | ring , shorts , 47
3810 | clutch , short dress , 26
3811 | polo , trouser , 172
3812 | layer_1_upper_body , saree , 7
3813 | glasses , suit , 62
3814 | gloves , leggings , 57
3815 | hipsters , top , 130
3816 | sweatshirt , tote , 10
3817 | footwear , top , 866
3818 | casual shoes , purse , 125
3819 | formal shoes , tuxedo , 61
3820 | tuxedo , wing tips , 11
3821 | sports shoes , tote , 24
3822 | bra , trackpants , 43
3823 | flipflops , suit , 31
3824 | belt , bodysuit , 9
3825 | bodysuit , turtleneck , 3
3826 | camisole , vest , 60
3827 | party dress , watch , 2
3828 | jumpsuit , sports shoes , 318
3829 | apparel , wing tips , 8
3830 | cap , joggers , 72
3831 | platform heels , shirt , 30
3832 | kurti , purse , 12
3833 | bow tie , costume , 96
3834 | kimono , sandals , 29
3835 | tote , trouser , 51
3836 | belt , polo , 133
3837 | bag , watch , 209
3838 | kurta , messenger bag , 2
3839 | messenger bag , skirt , 8
3840 | trackwear , vest , 163
3841 | accessories , boots , 404
3842 | belt , short dress , 48
3843 | casual shirt , oxfords shoe , 69
3844 | jeans , kurti , 682
3845 | apparel , bra , 766
3846 | accessories , watch , 132
3847 | beanies , mittens , 2
3848 | bottoms , kimono , 86
3849 | cap , wing tips , 1
3850 | tuxedo , vest , 96
3851 | bomber jacket , boots , 132
3852 | formal shoes , suspender , 18
3853 | joggers , sweater , 9
3854 | casual trousers , henley , 666
3855 | gloves , watch , 2
3856 | beanies , bottoms , 6
3857 | top , watch , 294
3858 | jacket , oxfords shoe , 8
3859 | bag , gloves , 14
3860 | trousers , winter jacket , 256
3861 | dress , footwear , 831
3862 | coat , jeggings , 113
3863 | accessories , oxfords shoe , 4
3864 | jeans , lifestyle shoes , 773
3865 | footwear , rugby , 22
3866 | footwear , formal shoes , 662
3867 | pajama , thermal , 26
3868 | briefs , cap , 4
3869 | bottoms , training shoes , 25
3870 | brogues , trousers , 514
3871 | shirt dress , sling bag , 10
3872 | gloves , t-shirt , 40
3873 | flipflops , vest , 138
3874 | belt , kimono , 160
3875 | belt , stilettos , 50
3876 | brogues , watch , 45
3877 | ballerinas , glasses , 161
3878 | boots , costume , 2
3879 | clutch , espadrilles , 9
3880 | cap , jacket , 99
3881 | messenger bag , sunglasses , 2
3882 | hipsters , sweatshirt , 25
3883 | cap , mittens , 48
3884 | bottoms , turtleneck , 1
3885 | camisole , hoodie , 37
3886 | bottoms , sandals , 573
3887 | bodysuit , crewneck , 13
3888 | slippers , thongs , 27
3889 | belt , kurta , 227
3890 | accessories , outerwear , 2
3891 | romper , vest , 32
3892 | bottoms , cufflinks , 18
3893 | kurta , purse , 3
3894 | leggings , lifestyle shoes , 6
3895 | costume , watch , 7
3896 | casual shoes , necklace , 9
3897 | espadrilles , shrug , 5
3898 | apparel , waistcoat , 319
3899 | sandals , shorts , 534
3900 | blouse , boots , 26
3901 | belt , mini skirt , 28
3902 | glasses , sports sandals , 29
3903 | bag , lehenga , 6
3904 | footwear , swimwear , 8
3905 | hand bag , sports shoes , 102
3906 | sandals , thongs , 670
3907 | cardigan , robe , 6
3908 | slippers , vest , 30
3909 | belly shoes , suit , 315
3910 | jumper , trousers , 66
3911 | purse , shorts , 280
3912 | sandals , tights , 186
3913 | boots , thermal , 47
3914 | sling bag , winter jacket , 18
3915 | bikini , purse , 9
3916 | cargo shorts , polo , 95
3917 | formal shoes , leggings , 4
3918 | jeans , top , 878
3919 | belt , shorts , 481
3920 | costume , sports shoes , 9
3921 | bow tie , briefs , 8
3922 | bottoms , card case , 102
3923 | clogs , dress , 54
3924 | jeans , peeptoes , 571
3925 | running shoes , watch , 290
3926 | handkerchief , socks , 36
3927 | running shoes , trackwear , 253
3928 | casual jacket , sports shoes , 175
3929 | apparel , costume , 615
3930 | ballerinas , crewneck , 22
3931 | bra , gloves , 9
3932 | chinos , t-shirt , 846
3933 | clutch , ring , 40
3934 | casual trousers , sweatshirt , 474
3935 | glasses , tunic , 1
3936 | blouse , trousers , 76
3937 | jacket , lapel pin , 134
3938 | apparel , ballerinas , 830
3939 | necklace , short dress , 10
3940 | bottoms , wallet , 20
3941 | flipflops , goggles , 81
3942 | bottoms , purse , 6
3943 | tuxedo , watch , 13
3944 | blazer , formal shoes , 30
3945 | cap , pajama , 22
3946 | pyjama , wedding dress , 1
3947 | casual shoes , socks , 15
3948 | top , trackwear , 487
3949 | apparel , jacket , 774
3950 | chinos , stilettos , 118
3951 | bottoms , high tops , 2
3952 | henley , running shoes , 4
3953 | footwear , jumper , 33
3954 | jeans , winter jacket , 257
3955 | glasses , kurta , 2
3956 | handkerchief , jacket , 77
3957 | thermal , winter jacket , 2
3958 | leggings , sling bag , 134
3959 | boots , trackwear , 4
3960 | card case , outerwear , 10
3961 | briefs , running shorts , 6
3962 | brogues , footwear , 93
3963 | goggles , watch , 15
3964 | cardigan , loafers , 36
3965 | sling bag , watch , 28
3966 | parka , vest , 1
3967 | bottoms , sweater , 8
3968 | boots , trackpants , 4
3969 | shirt , sports shoes , 584
3970 | sweater , tunic , 258
3971 | push-up bra , wedding dress , 6
3972 | coat , kurta , 18
3973 | footwear , waistcoat , 669
3974 | espadrilles , kurta , 38
3975 | card case , jeans , 25
3976 | casual shirt , earrings , 14
3977 | sports sandals , top , 14
3978 | sweatshirt , trunk , 5
3979 | oxfords shoe , socks , 3
3980 | jewelry , trouser , 2
3981 | ankle boots , t-shirt , 1
3982 | jeggings , top , 835
3983 | cargo shorts , slippers , 4
3984 | cape , satchel , 1
3985 | boots , trousers , 290
3986 | clutch , shorts , 71
3987 | bag , necklace , 155
3988 | denim jacket , trouser , 24
3989 | bottoms , hipsters , 59
3990 | jeggings , wedges , 28
3991 | down jacket , thermal , 5
3992 | bomber jacket , casual shoes , 64
3993 | purse , ring , 417
3994 | jewelry , layer_1_upper_body , 71
3995 | cardigan , suit , 3
3996 | apparel , thermal , 114
3997 | jeans , trunk , 103
3998 | corset , leggings , 4
3999 | belt , socks , 3
4000 | bracelet , purse , 528
4001 | short dress , sweater , 120
4002 | footwear , slippers , 222
4003 | casual shirt , leggings , 5
4004 | earrings , hand bag , 7
4005 | dress socks , trousers , 40
4006 | hipsters , necktie , 29
4007 | bag , cardigan , 34
4008 | gloves , party dress , 14
4009 | backpack , trousers , 36
4010 | apparel , boots , 748
4011 | bag , winter jacket , 6
4012 | jewelry , swimsuit , 16
4013 | goggles , shrug , 76
4014 | layer_1_upper_body , watch , 16
4015 | belt , maxi dress , 493
4016 | satchel , skirt , 37
4017 | necktie , waistcoat , 20
4018 | jeans , platform heels , 28
4019 | sling bag , slip ons , 85
4020 | card case , messenger bag , 49
4021 | clutch , sports shoes , 5
4022 | cardigan , travel bag , 48
4023 | bag , bottoms , 454
4024 | blouse , travel bag , 1
4025 | ballerinas , camisole , 375
4026 | accessories , canvas shoes , 6
4027 | boxer briefs , pyjama , 13
4028 | bag , mini skirt , 1
4029 | accessories , mittens , 11
4030 | bracelet , skirt , 341
4031 | bag , trench coat , 1
4032 | chinos , coat , 1
4033 | bag , oxfords shoe , 10
4034 | backpack , leggings , 3
4035 | blazer , sweatshirt , 9
4036 | bikini , stilettos , 5
4037 | clogs , socks , 22
4038 | jeans , kurta , 248
4039 | robe , scarf , 84
4040 | fitness band , trouser , 6
4041 | accessories , wedges , 296
4042 | backpack , joggers , 4
4043 | boots , travel bag , 32
4044 | hand bag , sweatshirt , 29
4045 | polo , trackpants , 68
4046 | necktie , ring , 20
4047 | jeans , t-shirt , 879
4048 | jumper , romper , 49
4049 | glasses , purse , 410
4050 | footwear , short dress , 19
4051 | blazer , sling bag , 4
4052 | ballerinas , sling bag , 200
4053 | coat , purse , 49
4054 | ballerinas , suit , 759
4055 | bottoms , messenger bag , 295
4056 | earrings , suit , 115
4057 | thermal , top , 83
4058 | kimono , maxi dress , 9
4059 | dress , satchel , 212
4060 | sunglasses , watch , 73
4061 | apparel , belt , 672
4062 | footwear , mittens , 19
4063 | bow tie , suit , 191
4064 | accessories , dress , 391
4065 | bag , top , 851
4066 | blazer , maxi dress , 3
4067 | trousers , wedges , 549
4068 | beanies , scarf , 13
4069 | suit , t-shirt , 194
4070 | casual jacket , chinos , 38
4071 | sandals , satchel , 283
4072 | formal shirt , tuxedo , 9
4073 | thermal , wallet , 8
4074 | dress material , ring , 1
4075 | blouse , lifestyle shoes , 27
4076 | camisole , turtleneck , 2
4077 | casual trousers , t-shirt , 695
4078 | bottoms , kurta , 43
4079 | hoodie , leggings , 220
4080 | socks , sports bra , 14
4081 | hipsters , purse , 2
4082 | apparel , trunk , 232
4083 | trackwear , tunic , 14
4084 | bag , party dress , 62
4085 | lifestyle shoes , polo , 700
4086 | briefs , watch , 20
4087 | footwear , suspender , 34
4088 | laptop bag , wallet , 1
4089 | sunglasses , trousers , 24
4090 | backpack , winter jacket , 3
4091 | accessories , briefs , 51
4092 | shorts , winter jacket , 36
4093 | cape , ring , 2
4094 | fitness band , running shoes , 79
4095 | chinos , fedora , 22
4096 | bag , dungaree , 70
4097 | sweater , tights , 27
4098 | bikini , sweater , 1
4099 | casual shoes , footwear , 333
4100 | bomber jacket , scarf , 45
4101 | coat , tunic , 25
4102 | denim shorts , necktie , 3
4103 | bracelet , hand bag , 353
4104 | bottoms , peeptoes , 146
4105 | hand bag , kurti , 18
4106 | sweatshirt , wallet , 35
4107 | hand bag , saree , 8
4108 | loafers , suit , 116
4109 | pyjama , sweater , 1
4110 | oxfords shoe , trousers , 2
4111 | apparel , monk straps , 2
4112 | pyjama , robe , 30
4113 | goggles , hand bag , 31
4114 | necktie , sling bag , 16
4115 | backpack , wallet , 103
4116 | jeggings , sunglasses , 20
4117 | ankle boots , shirt , 83
4118 | goggles , jacket , 133
4119 | apparel , trousers , 761
4120 | camisole , sweatshirt , 24
4121 | jacket , wallet , 23
4122 | belt , v-neck , 15
4123 | dress , loafers , 188
4124 | dungaree , sandals , 281
4125 | apparel , laptop bag , 67
4126 | belly shoes , jeans , 609
4127 | costume , layer_1_upper_body , 3
4128 | bracelet , kurti , 231
4129 | dress , tote , 165
4130 | chinos , ring , 22
4131 | messenger bag , sports shoes , 108
4132 | belly shoes , blouse , 521
4133 | satchel , trousers , 5
4134 | bodysuit , wedges , 5
4135 | leather jacket , leggings , 6
4136 | apparel , glasses , 467
4137 | slippers , swimsuit , 12
4138 | ballerinas , cardigan , 67
4139 | sleepwear , trunk , 10
4140 | apparel , palazzo , 15
4141 | bikini , scarf , 14
4142 | loafers , maxi dress , 346
4143 | layer_1_upper_body , purse , 6
4144 | blouse , necktie , 286
4145 | camisole , kurta , 1
4146 | cap , trackwear , 57
4147 | formal shirt , ring , 1
4148 | bomber jacket , messenger bag , 2
4149 | robe , slippers , 11
4150 | jeans , v-neck , 845
4151 | bag , high tops , 4
4152 | cap , suit , 324
4153 | apparel , short dress , 574
4154 | crewneck , top , 723
4155 | casual shirt , glasses , 551
4156 | espadrilles , watch , 45
4157 | bottoms , dress , 9
4158 | flipflops , skirt , 212
4159 | camisole , crewneck , 308
4160 | messenger bag , mini skirt , 8
4161 | bag , bag , 425
4162 | leather jacket , top , 89
4163 | clutch , necktie , 3
4164 | footwear , henley , 36
4165 | peacoat , sling bag , 6
4166 | pyjama , wallet , 2
4167 | stilettos , watch , 134
4168 | footwear , track suit , 6
4169 | glasses , socks , 14
4170 | cargo shorts , t-shirt , 381
4171 | monk straps , tuxedo , 16
4172 | leggings , v-neck , 24
4173 | accessories , satchel , 573
4174 | glasses , travel bag , 8
4175 | blazer , cap , 2
4176 | accessories , swimwear , 15
4177 | casual shirt , wallet , 29
4178 | goggles , sandals , 156
4179 | ballerinas , bottoms , 616
4180 | crewneck , sweatshirt , 450
4181 | joggers , purse , 10
4182 | gloves , sweatshirt , 17
4183 | apparel , camisole , 23
4184 | layer_1_lower_body , socks , 4
4185 | high tops , trousers , 13
4186 | necklace , purse , 137
4187 | accessories , casual trousers , 9
4188 | footwear , wallet , 89
4189 | lifestyle shoes , t-shirt , 767
4190 | boots , bottoms , 25
4191 | bracelet , goggles , 13
4192 | kimono , scarf , 7
4193 | brogues , casual shirt , 504
4194 | brogues , shirt , 505
4195 | casual shoes , sweatshirt , 585
4196 | cap , hand bag , 33
4197 | night slip , sports bra , 10
4198 | flipflops , v-neck , 751
4199 | t-shirt , thermal , 20
4200 | fedora , sports shoes , 30
4201 | jeans , travel bag , 51
4202 | footwear , travel bag , 166
4203 | stockings , top , 27
4204 | gloves , shirt , 3
4205 | fedora , sandals , 44
4206 | oxfords shoe , t-shirt , 5
4207 | kurti , tote , 62
4208 | palazzo , tote , 14
4209 | bag , layer_1_lower_body , 276
4210 | mittens , t-shirt , 4
4211 | espadrilles , hand bag , 1
4212 | platform heels , suit , 1
4213 | shirt , watch , 476
4214 | leather jacket , pumps , 4
4215 | pajama , slippers , 55
4216 | casual jacket , goggles , 10
4217 | blazer , boots , 337
4218 | jeans , trench coat , 24
4219 | hoodie , winter jacket , 111
4220 | dupatta , wedges , 5
4221 | formal shirt , watch , 236
4222 | backpack , chinos , 5
4223 | sports shoes , sweater , 10
4224 | sports shoes , trousers , 681
4225 | casual jacket , casual shoes , 148
4226 | jeggings , necktie , 12
4227 | polo , pyjama , 17
4228 | belly shoes , top , 732
4229 | ballerinas , shrug , 153
4230 | ballerinas , belt , 150
4231 | cap , glasses , 13
4232 | clutch , trouser , 16
4233 | ballerinas , swimsuit , 46
4234 | belly shoes , wedding dress , 21
4235 | clutch , peeptoes , 77
4236 | bag , sports shoes , 636
4237 | casual shirt , loafers , 122
4238 | bracelet , sweater , 10
4239 | canvas shoes , kurta , 7
4240 | bottoms , slip ons , 320
4241 | apparel , scarf , 154
4242 | jacket , peeptoes , 34
4243 | athletic socks , trousers , 6
4244 | hoodie , sports shoes , 488
4245 | stockings , wedges , 4
4246 | hand bag , peeptoes , 31
4247 | footwear , loafers , 326
4248 | camisole , cardigan , 257
4249 | sleepwear , watch , 1
4250 | bomber jacket , high tops , 8
4251 | wallet , watch , 106
4252 | bag , bra , 293
4253 | chinos , sunglasses , 7
4254 | bow tie , formal shoes , 4
4255 | apparel , v-neck , 253
4256 | messenger bag , sweatshirt , 366
4257 | hoodie , trouser , 221
4258 | messenger bag , windcheater , 2
4259 | ring , scarf , 23
4260 | shirt , sports sandals , 70
4261 | glasses , lifestyle shoes , 145
4262 | denim jacket , purse , 9
4263 | bomber jacket , jeans , 598
4264 | footwear , vest , 384
4265 | saree , satchel , 5
4266 | bottoms , trousers , 34
4267 | v-neck , vest , 11
4268 | crewneck , glasses , 5
4269 | casual shoes , kurti , 3
4270 | bottoms , sports bra , 51
4271 | jumpsuit , laptop bag , 19
4272 | suit , sweatshirt , 102
4273 | cardigan , clutch , 11
4274 | chinos , v-neck , 275
4275 | clogs , t-shirt , 147
4276 | slippers , trouser , 37
4277 | cape , goggles , 1
4278 | apparel , kurti , 715
4279 | skirt , socks , 61
4280 | corset , thongs , 14
4281 | cape , thongs , 6
4282 | satchel , stilettos , 12
4283 | clutch , jumper , 5
4284 | handkerchief , tuxedo , 19
4285 | casual trousers , watch , 12
4286 | loafers , shrug , 24
4287 | camisole , kurti , 1
4288 | sports sandals , trousers , 64
4289 | boots , chinos , 122
4290 | satchel , swimsuit , 22
4291 | kimono , t-shirt , 3
4292 | backpack , casual shirt , 64
4293 | lifestyle shoes , trackwear , 14
4294 | coat , v-neck , 16
4295 | belt , winter jacket , 2
4296 | joggers , running shoes , 28
4297 | gloves , jeggings , 5
4298 | handkerchief , shorts , 6
4299 | layer_1_upper_body , scarf , 1
4300 | platform heels , top , 69
4301 | footwear , sweatshirt , 513
4302 | cap , trousers , 273
4303 | necktie , wedges , 31
4304 | jumpsuit , loafers , 42
4305 | bracelet , shirt dress , 32
4306 | party dress , shrug , 2
4307 | cargo shorts , sandals , 63
4308 | cap , suspender , 17
4309 | costume , suspender , 24
4310 | jewelry , skirt , 16
4311 | pumps , socks , 17
4312 | dress , socks , 53
4313 | accessories , jewelry , 113
4314 | belt , glasses , 29
4315 | boots , camisole , 355
4316 | flipflops , sweatshirt , 224
4317 | casual shoes , trouser , 137
4318 | casual shoes , glasses , 277
4319 | coat , jumpsuit , 27
4320 | jewelry , trousers , 1
4321 | bottoms , sports shoes , 810
4322 | apparel , brogues , 280
4323 | trouser , vest , 139
4324 | belt , jewelry , 63
4325 | shrug , v-neck , 42
4326 | ballerinas , satchel , 51
4327 | bracelet , lehenga , 7
4328 | costume , derby , 4
4329 | belly shoes , kurti , 288
4330 | chinos , peeptoes , 9
4331 | earrings , top , 626
4332 | cargo shorts , flipflops , 85
4333 | cufflinks , handkerchief , 143
4334 | skirt , watch , 117
4335 | purse , shirt dress , 42
4336 | blazer , jeggings , 2
4337 | necktie , tote , 31
4338 | ballerinas , hand bag , 420
4339 | jeans , wallet , 490
4340 | casual jacket , wallet , 6
4341 | dungaree , hand bag , 10
4342 | boots , glasses , 237
4343 | top , trackpants , 567
4344 | jeans , laptop bag , 6
4345 | polo , wallet , 50
4346 | jumper , leggings , 5
4347 | apparel , dress material , 17
4348 | ballerinas , mittens , 17
4349 | casual shoes , kurta , 10
4350 | clutch , jumpsuit , 735
4351 | ballerinas , polo , 324
4352 | spectators , vest , 1
4353 | satchel , sunglasses , 316
4354 | jacket , sports shoes , 624
4355 | ballerinas , dupatta , 21
4356 | hand bag , sandals , 632
4357 | sports shoes , tunic , 219
4358 | polo , watch , 95
4359 | ballerinas , bra , 75
4360 | hoodie , trackpants , 2
4361 | cape , tunic , 15
4362 | chinos , glasses , 151
4363 | flipflops , trouser , 124
4364 | boots , windcheater , 17
4365 | glasses , thongs , 2
4366 | apparel , cape , 223
4367 | casual shoes , jeggings , 17
4368 | casual jacket , jeggings , 10
4369 | apparel , swim trunks , 133
4370 | accessories , high tops , 14
4371 | bottoms , v-neck , 31
4372 | watch , wing tips , 9
4373 | dungaree , floaters , 11
4374 | hand bag , kurta , 501
4375 | shrug , sunglasses , 109
4376 | ballerinas , purse , 177
4377 | jumpsuit , ring , 4
4378 | bow tie , handkerchief , 241
4379 | churidar set , hand bag , 33
4380 | casual shoes , leather jacket , 88
4381 | kurta , wedges , 798
4382 | briefs , wallet , 3
4383 | flipflops , swimwear , 9
4384 | footwear , shirt , 858
4385 | swimwear , travel bag , 1
4386 | costume , goggles , 20
4387 | sports bra , sweatshirt , 5
4388 | suit , travel bag , 213
4389 | kurta , peeptoes , 581
4390 | ring , sling bag , 23
4391 | boots , trouser , 218
4392 | jeggings , kurta , 284
4393 | ballerinas , kurta , 789
4394 | balconette bra , top , 8
4395 | clutch , sunglasses , 62
4396 | apparel , jeggings , 89
4397 | apparel , wedding dress , 511
4398 | loafers , purse , 61
4399 | cap , stilettos , 41
4400 | goggles , henley , 8
4401 | apparel , churidar set , 674
4402 | cardigan , palazzo , 2
4403 | bottoms , shorts , 21
4404 | shorts , wallet , 15
4405 | belt , necklace , 25
4406 | sandals , sweatshirt , 192
4407 | fedora , t-shirt , 338
4408 | bottoms , dress material , 76
4409 | kurti , sweater , 1
4410 | derby , dress , 4
4411 | boots , scarf , 81
4412 | belt , blouse , 72
4413 | formal trousers , oxfords shoe , 15
4414 | travel bag , vest , 1
4415 | costume , crewneck , 6
4416 | running shoes , suit , 45
4417 | accessories , gloves , 49
4418 | coat , kurti , 4
4419 | mini skirt , stilettos , 28
4420 | boxers , sandals , 14
4421 | bag , stockings , 14
4422 | backpack , belly shoes , 15
4423 | ankle boots , camisole , 5
4424 | formal trousers , monk straps , 8
4425 | slippers , travel bag , 15
4426 | bracelet , swimsuit , 34
4427 | running shoes , socks , 46
4428 | coat , sandals , 94
4429 | apparel , floaters , 104
4430 | trackpants , training shoes , 64
4431 | goggles , sunglasses , 440
4432 | jeggings , kurti , 148
4433 | jeans , waistcoat , 219
4434 | dress , messenger bag , 15
4435 | flipflops , hand bag , 68
4436 | scarf , swimsuit , 11
4437 | jewelry , suspender , 22
4438 | apparel , kurta , 715
4439 | kurti , leggings , 406
4440 | loafers , waistcoat , 26
4441 | hipsters , sandals , 44
4442 | high tops , shorts , 29
4443 | cardigan , corset , 8
4444 | bow tie , shirt , 233
4445 | boots , socks , 84
4446 | belt , palazzo , 137
4447 | formal trousers , sandals , 22
4448 | bodysuit , bottoms , 126
4449 | henley , vest , 4
4450 | casual jacket , pumps , 26
4451 | running shoes , satchel , 14
4452 | goggles , waistcoat , 8
4453 | jumper , sandals , 51
4454 | driving shoes , shorts , 2
4455 | hand bag , joggers , 5
4456 | jewelry , travel bag , 64
4457 | beanies , cap , 191
4458 | kurta , tote , 319
4459 | skirt , sling bag , 27
4460 | maxi dress , sweater , 26
4461 | leggings , sports shoes , 246
4462 | glasses , trousers , 29
4463 | bow tie , lapel pin , 4
4464 | accessories , ankle boots , 8
4465 | bag , polo , 39
4466 | brogues , jeggings , 1
4467 | loafers , trouser , 658
4468 | bag , vest , 22
4469 | oxfords shoe , tights , 6
4470 | satchel , stockings , 1
4471 | cardigan , satchel , 16
4472 | mittens , scarf , 6
4473 | travel bag , trunk , 26
4474 | kurta , platform heels , 383
4475 | apparel , lifestyle shoes , 480
4476 | footwear , slip ons , 520
4477 | gloves , trousers , 1
4478 | cufflinks , formal shoes , 4
4479 | slip ons , wallet , 25
4480 | ballerinas , joggers , 21
4481 | card case , slip ons , 60
4482 | joggers , sports shoes , 341
4483 | backpack , derby , 3
4484 | pumps , swimsuit , 7
4485 | short dress , sunglasses , 3
4486 | derby , jeans , 336
4487 | cap , necklace , 19
4488 | cufflinks , jewelry , 53
4489 | fitness band , tights , 2
4490 | sweatshirt , trouser , 582
4491 | sports sandals , trouser , 14
4492 | night slip , ring , 8
4493 | gloves , necktie , 23
4494 | romper , sports shoes , 24
4495 | blazer , purse , 33
4496 | mini skirt , wedges , 3
4497 | casual jacket , clutch , 1
4498 | brogues , laptop bag , 4
4499 | bracelet , scarf , 56
4500 | leggings , tote , 17
4501 | cap , palazzo , 41
4502 | denim shorts , sports shoes , 14
4503 | costume , slip ons , 3
4504 | bracelet , dress , 704
4505 | top , vest , 267
4506 | casual trousers , tunic , 26
4507 | handkerchief , leggings , 29
4508 | cape , kurti , 15
4509 | stilettos , wedding dress , 177
4510 | brogues , top , 29
4511 | dungaree , earrings , 26
4512 | casual jacket , hand bag , 7
4513 | loafers , pyjama , 10
4514 | joggers , suspender , 4
4515 | accessories , jumper , 24
4516 | bottoms , necklace , 75
4517 | clutch , kurti , 102
4518 | blazer , tunic , 13
4519 | jeggings , loafers , 2
4520 | outerwear , slip ons , 3
4521 | denim shorts , goggles , 4
4522 | cap , shirt dress , 23
4523 | stilettos , trouser , 655
4524 | ring , shrug , 7
4525 | boots , tights , 33
4526 | apparel , jewelry , 8
4527 | glasses , goggles , 7
4528 | ballerinas , jeggings , 166
4529 | bracelet , wedding dress , 107
4530 | hipsters , swimsuit , 45
4531 | cap , ring , 113
4532 | hand bag , wedges , 238
4533 | bag , palazzo , 13
4534 | casual jacket , trousers , 1
4535 | blazer , sports shoes , 59
4536 | loafers , v-neck , 762
4537 | earrings , kurta , 35
4538 | casual shoes , jacket , 516
4539 | crewneck , thermal , 5
4540 | clutch , footwear , 426
4541 | camisole , sweater , 50
4542 | purse , socks , 4
4543 | denim shorts , sports sandals , 25
4544 | bomber jacket , jeggings , 11
4545 | canvas shoes , chinos , 76
4546 | bracelet , suspender , 72
4547 | chinos , tunic , 123
4548 | jacket , socks , 4
4549 | boots , polo , 181
4550 | earrings , shirt , 220
4551 | necklace , slip ons , 1
4552 | accessories , jeggings , 14
4553 | high tops , polo , 38
4554 | bracelet , polo , 81
4555 | boxer briefs , loungewear , 8
4556 | formal shirt , suspender , 1
4557 | high tops , socks , 9
4558 | casual jacket , v-neck , 6
4559 | blouse , brogues , 1
4560 | goggles , peeptoes , 14
4561 | accessories , sports shoes , 609
4562 | bag , peeptoes , 45
4563 | cargo shorts , henley , 24
4564 | camisole , flipflops , 39
4565 | footwear , saree , 37
4566 | kurti , platform heels , 42
4567 | jumpsuit , watch , 103
4568 | boots , bracelet , 4
4569 | cap , vest , 17
4570 | fitness band , skirt , 2
4571 | apparel , ring , 113
4572 | casual shirt , high tops , 36
4573 | jacket , wedges , 167
4574 | shirt dress , thermal , 1
4575 | dungaree , footwear , 478
4576 | mini skirt , t-shirt , 5
4577 | coat , messenger bag , 1
4578 | thermal , vest , 52
4579 | high tops , sunglasses , 2
4580 | bracelet , espadrilles , 5
4581 | backpack , briefs , 17
4582 | bag , swimsuit , 21
4583 | formal shirt , trouser , 48
4584 | jewelry , romper , 14
4585 | belt , stockings , 26
4586 | footwear , wing tips , 95
4587 | corset , vest , 21
4588 | bra , running shoes , 4
4589 | pumps , vest , 20
4590 | casual shoes , trench coat , 12
4591 | casual shirt , waistcoat , 663
4592 | belly shoes , shirt dress , 2
4593 | necktie , sweater , 27
4594 | earrings , purse , 66
4595 | belly shoes , chinos , 42
4596 | earrings , trousers , 13
4597 | ballerinas , clutch , 323
4598 | purse , tunic , 2
4599 | cardigan , short dress , 126
4600 | cap , kurti , 236
4601 | coat , tote , 1
4602 | glasses , watch , 35
4603 | boxers , flipflops , 49
4604 | bra , travel bag , 12
4605 | mini skirt , sandals , 102
4606 | peeptoes , trousers , 426
4607 | gloves , travel bag , 14
4608 | floaters , polo , 21
4609 | coat , tights , 1
4610 | casual jacket , palazzo , 6
4611 | pumps , tunic , 486
4612 | trousers , wing tips , 37
4613 | glasses , leggings , 8
4614 | boxers , t-shirt , 162
4615 | scarf , socks , 5
4616 | clogs , shorts , 134
4617 | layer_1_upper_body , sports shoes , 43
4618 | cap , tunic , 121
4619 | apparel , clutch , 645
4620 | goggles , t-shirt , 30
4621 | cap , necktie , 58
4622 | scarf , shorts , 6
4623 | bag , tights , 171
4624 | jumpsuit , mittens , 7
4625 | belt , sandals , 6
4626 | jeans , necktie , 100
4627 | casual shirt , stilettos , 2
4628 | casual shoes , tote , 24
4629 | cardigan , tunic , 138
4630 | blouse , tights , 4
4631 | belt , sling bag , 29
4632 | sunglasses , tunic , 56
4633 | apparel , formal trousers , 228
4634 | cape , sunglasses , 50
4635 | jacket , sunglasses , 32
4636 | glasses , shorts , 178
4637 | beanies , boots , 2
4638 | camisole , t-shirt , 51
4639 | ballerinas , necktie , 186
4640 | gloves , jewelry , 2
4641 | casual shirt , leather jacket , 106
4642 | backpack , sunglasses , 18
4643 | accessories , lapel pin , 26
4644 | boxers , slip ons , 38
4645 | casual shoes , necktie , 34
4646 | casual shoes , formal trousers , 29
4647 | accessories , necklace , 50
4648 | belly shoes , jumpsuit , 350
4649 | scarf , shirt dress , 11
4650 | gloves , sling bag , 6
4651 | cap , jewelry , 9
4652 | cap , shrug , 36
4653 | shirt , wedges , 659
4654 | joggers , winter jacket , 12
4655 | loafers , sweater , 36
4656 | scarf , wedding dress , 18
4657 | leggings , tunic , 839
4658 | cufflinks , derby , 4
4659 | mittens , top , 3
4660 | bracelet , palazzo , 408
4661 | blouse , vest , 18
4662 | apparel , wallet , 63
4663 | canvas shoes , footwear , 213
4664 | glasses , trouser , 3
4665 | hand bag , wing tips , 6
4666 | cardigan , hoodie , 145
4667 | cufflinks , shirt , 349
4668 | flipflops , ring , 6
4669 | footwear , formal trousers , 335
4670 | canvas shoes , sweatshirt , 95
4671 | churidar set , sling bag , 9
4672 | casual shoes , goggles , 167
4673 | kurta , sling bag , 2
4674 | jewelry , sweater , 1
4675 | bikini , corset , 15
4676 | blazer , clutch , 12
4677 | kimono , top , 86
4678 | peacoat , sweatshirt , 4
4679 | socks , suit , 104
4680 | leggings , sweater , 148
4681 | casual shirt , sunglasses , 554
4682 | apparel , necklace , 93
4683 | gloves , jacket , 8
4684 | brogues , trouser , 5
4685 | joggers , sports sandals , 73
4686 | bag , pyjama , 173
4687 | earrings , maxi dress , 4
4688 | belt , sleepwear , 208
4689 | boots , joggers , 12
4690 | bag , sandals , 589
4691 | footwear , necktie , 423
4692 | bottoms , driving shoes , 8
4693 | boots , cape , 74
4694 | apparel , swimsuit , 8
4695 | costume , footwear , 283
4696 | ankle boots , trouser , 15
4697 | footwear , hoodie , 440
4698 | gloves , kurta , 792
4699 | necklace , skirt , 163
4700 | belt , trouser , 487
4701 | goggles , shirt , 49
4702 | cufflinks , necklace , 88
4703 | coat , sunglasses , 20
4704 | casual shoes , vest , 34
4705 | footwear , tights , 34
4706 | casual trousers , suit , 25
4707 | padded bra , vest , 1
4708 | shrug , tote , 6
4709 | maxi dress , necklace , 66
4710 | boxer briefs , sleepwear , 45
4711 | purse , stockings , 1
4712 | maxi dress , scarf , 20
4713 | kurti , ring , 14
4714 | denim jacket , maxi dress , 82
4715 | clutch , shirt dress , 6
4716 | pajama , vest , 11
4717 | bomber jacket , brogues , 1
4718 | casual shirt , joggers , 26
4719 | floaters , t-shirt , 37
4720 | sling bag , top , 529
4721 | romper , watch , 12
4722 | hand bag , jeans , 812
4723 | trench coat , wedges , 6
4724 | belt , thongs , 11
4725 | sports bra , sweater , 114
4726 | hoodie , jeggings , 85
4727 | chinos , lifestyle shoes , 530
4728 | kurti , palazzo , 384
4729 | bottoms , casual jacket , 9
4730 | boots , suspender , 3
4731 | canvas shoes , vest , 4
4732 | bag , shirt , 178
4733 | cap , tuxedo , 12
4734 | brogues , polo , 30
4735 | cap , messenger bag , 4
4736 | bag , panties , 15
4737 | clutch , tunic , 157
4738 | jumpsuit , purse , 27
4739 | pumps , trouser , 619
4740 | thongs , top , 135
4741 | bag , jeggings , 60
4742 | casual shirt , sports shoes , 112
4743 | ballerinas , earrings , 244
4744 | ballerinas , short dress , 3
4745 | t-shirt , windcheater , 24
4746 | earrings , tote , 6
4747 | ballerinas , chinos , 432
4748 | corset , short dress , 16
4749 | blazer , casual shoes , 5
4750 | sunglasses , swimsuit , 23
4751 | hand bag , shrug , 38
4752 | bodysuit , gloves , 1
4753 | kimono , necktie , 85
4754 | formal shoes , trousers , 847
4755 | floaters , shorts , 83
4756 | belly shoes , sweatshirt , 1
4757 | hoodie , sunglasses , 3
4758 | briefs , t-shirt , 13
4759 | coat , trousers , 17
4760 | leggings , ring , 123
4761 | sports shoes , tights , 76
4762 | apparel , beanies , 18
4763 | running shoes , sweatshirt , 51
4764 | bottoms , kurti , 342
4765 | dungaree , watch , 16
4766 | casual trousers , sandals , 22
4767 | backpack , skirt , 17
4768 | goggles , leggings , 51
4769 | kurti , pumps , 282
4770 | kimono , trouser , 6
4771 | accessories , blouse , 683
4772 | cargo shorts , watch , 7
4773 | jewelry , ring , 301
4774 | crewneck , hoodie , 155
4775 | boots , leggings , 187
4776 | accessories , tuxedo , 42
4777 | apparel , travel bag , 707
4778 | bag , short dress , 90
4779 | sports shoes , trouser , 566
4780 | coat , robe , 51
4781 | casual shirt , espadrilles , 6
4782 | chinos , formal shoes , 34
4783 | bow tie , kurta , 4
4784 | scarf , t-shirt , 1
4785 | corset , maxi dress , 2
4786 | denim jacket , trousers , 5
4787 | belly shoes , shorts , 17
4788 | clutch , dress , 637
4789 | denim jacket , sandals , 2
4790 | bracelet , footwear , 110
4791 | casual shoes , hoodie , 19
4792 | suspender , trousers , 79
4793 | apparel , pyjama , 760
4794 | coat , sweatshirt , 25
4795 | running shoes , sunglasses , 125
4796 | trunk , watch , 5
4797 | flipflops , tote , 31
4798 | rugby , sports shoes , 36
4799 | cap , clutch , 24
4800 | boots , purse , 166
4801 | belt , churidar set , 42
4802 | hand bag , handkerchief , 24
4803 | belt , bottoms , 558
4804 | costume , satchel , 34
4805 | peeptoes , tunic , 42
4806 | cap , shorts , 412
4807 | dupatta , watch , 28
4808 | boots , rugby , 1
4809 | bottoms , canvas shoes , 185
4810 | casual jacket , flipflops , 4
4811 | footwear , lifestyle shoes , 98
4812 | bag , brogues , 42
4813 | shirt , slip ons , 309
4814 | bag , wedges , 277
4815 | messenger bag , top , 322
4816 | coat , trackwear , 10
4817 | bottoms , sling bag , 3
4818 | earrings , jeans , 2
4819 | ankle boots , leggings , 16
4820 | ballerinas , scarf , 57
4821 | thermal , tunic , 7
4822 | chinos , formal shirt , 12
4823 | hand bag , layer_1_upper_body , 12
4824 | belt , coat , 92
4825 | ballerinas , bodysuit , 5
4826 | casual trousers , v-neck , 607
4827 | cufflinks , suspender , 77
--------------------------------------------------------------------------------
/evaluation/test.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @Author: winton
4 | @File: test.py
5 | @Time: 2019/7/29 10:49 AM
6 | @Description:
7 | """
8 | from nlgeval import compute_metrics, compute_individual_metrics
9 | from nltk.translate import bleu_score
10 |
11 | reference = [
12 | ['The', 'new', 'translator', 'will', 'stand', 'on', 'the', 'exhibition', 'on', 'behalf', 'of', 'the', 'four',
13 | 'times', 'group', 'at', 'the', 'exhibition', 'We', 'will', 'introduce', 'the', 'new', 'star`s', 'business', 'the',
14 | 'advantages', 'and', 'the', 'successful', 'cases', 'so', 'that', 'you', 'can', 'understand', 'the', 'new',
15 | 'translator', 'more', 'comprehensively', 'We', 'have', 'a', 'stable', 'full-time', 'international', 'team', 'that',
16 | 'ensures', 'punctual', 'efficient', 'translation', 'and', 'dubbing', 'and', 'provides', 'a', 'full', 'range', 'of',
17 | 'control', 'through', 'the', 'perfect', 'quality', 'control', 'and', 'project', 'management', 'system',
18 | 'providing', 'a', 'one-stop', 'service', 'for', 'translation', 'dubbing', 'subtitle', 'production', 'post',
19 | 'production', 'broadcasting', 'and', 'ratings', 'surveys'],
20 | ['The', 'new', 'translator', 'star', 'will', 'represent', 'sida', 'times', 'group', 'in', 'the', 'exhibition',
21 | 'when', 'we', 'will', 'introduce', 'the', 'new', 'translator', 'star`s', 'business', 'advantages', 'successful',
22 | 'cases', 'and', 'other', 'dimensions', 'so', 'that', 'you', 'can', 'have', 'a', 'more', 'comprehensive',
23 | 'understanding', 'of', 'the', 'new', 'translator', 'star', 'We', 'have', 'a', 'stable', 'full-time',
24 | 'international', 'team', 'which', 'can', 'ensure', 'timely', 'and', 'efficient', 'translation', 'and', 'dubbing',
25 | 'Through', 'perfect', 'quality', 'control', 'and', 'project', 'management', 'system', 'we', 'provide',
26 | 'translation', 'dubbing', 'subtitle', 'production', 'post-production', 'broadcasting', 'and', 'rating', 'survey']]
27 | candidate = ['New', 'Transtar', 'will', 'present', 'itself', 'at', 'the', 'Exhibition', 'on', 'behalf', 'of',
28 | 'StarTimes', 'and', 'we', 'will', 'give', 'a', 'comprehensive', 'introduction', 'of', 'ourselves',
29 | 'including', 'the', 'current', 'services', 'we', 'offer', 'the', 'advantages', 'we', 'hold', 'and', 'the',
30 | 'projects', 'we', 'have', 'completed', 'to', 'help', 'you', 'understand', 'us', 'more', 'New', 'Transtar',
31 | 'boasts', 'of', 'an', 'international', 'team', 'of', 'professionals', 'and', 'is', 'capable', 'of',
32 | 'providing', 'fast', 'and', 'quality-guaranteed', 'services', 'including', 'translating', 'dubbing',
33 | 'subtitle', 'making', 'post-production', 'broadcasting', 'and', 'collecting', 'of', 'viewership',
34 | 'ratings', 'thanks', 'to', 'our', 'strict', 'streamlined', 'and', 'developed', 'quality', 'control', 'and',
35 | 'project', 'management', 'system']
36 | metrics_dict = compute_individual_metrics([' '.join(ref) for ref in reference], ' '.join(candidate))
37 | sentence_bleu = bleu_score.sentence_bleu(reference, candidate)
38 | print(metrics_dict)
39 | print(sentence_bleu)
40 | hypothesis_path = '/home/hwd/project/mmkbds/widget/baseline/cmmd/result/cmmd_v4/pred_10.txt'
41 | references_path = '/home/hwd/dataset/cmmd/data/dataset/v2/dialogue_data/context_2_20/test_target_text.txt'
42 | metrics_dict = compute_metrics(hypothesis=hypothesis_path, references=[references_path])
43 | with open(hypothesis_path, 'r') as f:
44 | hypothesis = [x.strip().split() for x in f.readlines()]
45 | references = []
46 | for reference in references_path:
47 | with open(reference, 'r') as f:
48 | references.append([x.strip().split() for x in f.readlines()])
49 | references = list(zip(*references))
50 | corpus_bleu = bleu_score.corpus_bleu(references, hypothesis)
51 | print(metrics_dict)
52 | print(corpus_bleu)
--------------------------------------------------------------------------------
/generate_data.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @Author: winton
4 | @File: generate_data.py
5 | @Time: 2019/7/9 11:12 AM
6 | @Description:
7 | """
8 | import argparse
9 | import json
10 | import os
11 |
12 | from nltk import word_tokenize
13 | from tqdm import tqdm
14 |
15 | from widget.utils import save_to_pkl
16 |
17 |
18 | def norm_sentence(sentence):
19 | # remove quotation marks and spaces at begin and end
20 | ret = sentence.lstrip('‘').rstrip('’').strip()
21 | # lower characters
22 | ret = ret.lower()
23 | # tokenize
24 | ret = ' '.join(word_tokenize(ret))
25 | return ret
26 |
27 |
28 | def main(args):
29 | # process knowledge data
30 | knowledge_pairs = []
31 | with open(os.path.join(args.input_dir, 'styletips_synset.txt')) as file:
32 | for line in file:
33 | products = [None] * 2
34 | products[0], products[1], score = map(lambda x: x.strip(), line.split(','))
35 | products = list(map(lambda x: x.lower(), products))
36 | knowledge_pairs.append(products)
37 | with open(os.path.join(args.input_dir, 'celebrity_distribution.json')) as file:
38 | celebrity_json = json.load(file)
39 | for celebrity, products in celebrity_json.items():
40 | celebrity = celebrity.lower()
41 | for product in products.keys():
42 | product = product.lower()
43 | knowledge_pairs.append([celebrity, product])
44 | with open(os.path.join(args.out_dir, 'knowledge.json'), 'w', encoding='utf8') as file:
45 | json.dump(knowledge_pairs, file, indent=2, ensure_ascii=False)
46 | # process dialog data
47 | versions = ['v1', 'v2']
48 | splits = ['train', 'valid', 'test']
49 | for version in versions:
50 | for split in splits:
51 | path = os.path.join(args.input_dir, version, split)
52 | dialogs = []
53 | for file in tqdm(os.listdir(path), desc='Dump {} {}'.format(version, split)):
54 | with open(os.path.join(path, file), 'r') as f:
55 | data = json.load(f)
56 | dialog = []
57 | for utterance in data:
58 | # get utter attributes
59 | speaker = utterance.get('speaker')
60 | if 'question-subtype' in utterance:
61 | utter_type = f"{utterance.get('type')}:{utterance.get('question-type')}:" \
62 | f"{utterance.get('question-subtype')}"
63 | elif 'question-type' in utterance:
64 | utter_type = f"{utterance.get('type')}:{utterance.get('question-type')}"
65 | else:
66 | utter_type = f"{utterance.get('type')}"
67 | utter = utterance.get('utterance')
68 | text = utter.get('nlg')
69 | images = utter.get('images')
70 | false_images = utter.get('false images')
71 | # some attributes may be empty
72 | if text is None:
73 | text = ""
74 | if images is None:
75 | images = []
76 | if false_images is None:
77 | false_images = []
78 | dialog.append((speaker, norm_sentence(text), images, false_images, utter_type))
79 | dialogs.append(dialog)
80 | out_path = os.path.join(args.out_dir, version)
81 | if not os.path.exists(out_path):
82 | os.makedirs(out_path)
83 | out_file = os.path.join(out_path, f'{split}.pkl')
84 | save_to_pkl(dialogs, out_file)
85 |
86 |
87 | if __name__ == '__main__':
88 | _parser = argparse.ArgumentParser()
89 | # path
90 | _parser.add_argument('--input_dir', help='original data directory', required=True)
91 | _parser.add_argument('--out_dir', type=str, help='path for saving processed data', required=True)
92 | _args = _parser.parse_args()
93 | exit(main(_args))
94 |
--------------------------------------------------------------------------------
/requirement.txt:
--------------------------------------------------------------------------------
1 | annoy==1.17.0
2 | certifi==2020.12.5
3 | click==7.1.2
4 | joblib==1.0.1
5 | mkl-fft==1.3.0
6 | mkl-random==1.1.1
7 | mkl-service==2.3.0
8 | nltk==3.5
9 | nose==1.3.7
10 | numpy==1.19.2
11 | regex==2021.4.4
12 | six==1.15.0
13 | torch==1.8.1
14 | tqdm==4.59.0
15 | typing-extensions==3.7.4.3
16 | wheel==0.36.2
17 |
18 |
--------------------------------------------------------------------------------
/train.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @Author: winton
4 | @File: training.py
5 | @Time: 2021/4/9 9:22 AM
6 | @Description:
7 | """
8 | import argparse
9 | import json
10 | import logging
11 | import os
12 |
13 | import torch
14 | from torch import nn, optim
15 | from torch.nn.functional import cross_entropy
16 | from torch.optim import lr_scheduler
17 | from torch.utils.data import DataLoader
18 | import numpy as np
19 |
20 | from widget.data import DataSource, PAD_ID
21 | from widget.model import Model
22 |
23 |
24 | def cal_performance(pred, gold, padding_id, smoothing=False):
25 | """ Apply label smoothing if needed """
26 |
27 | loss = cal_loss(pred, gold, smoothing, padding_id)
28 |
29 | pred = pred.max(1)[1]
30 | gold = gold.contiguous().view(-1)
31 | non_pad_mask = gold.ne(padding_id)
32 | n_correct = pred.eq(gold)
33 | n_correct = n_correct.masked_select(non_pad_mask).sum().item()
34 |
35 | return loss, n_correct
36 |
37 |
38 | def cal_loss(pred, gold, smoothing, padding_id):
39 | """ Calculate cross entropy loss, apply label smoothing if needed. """
40 |
41 | gold = gold.contiguous().view(-1)
42 |
43 | if smoothing:
44 | eps = 0.1
45 | n_class = pred.size(1)
46 |
47 | one_hot = torch.zeros_like(pred).scatter(1, gold.view(-1, 1), 1)
48 | one_hot = one_hot * (1 - eps) + (1 - one_hot) * eps / (n_class - 1)
49 | log_prb = torch.log_softmax(pred, dim=1)
50 |
51 | non_pad_mask = gold.ne(padding_id)
52 | loss = -(one_hot * log_prb).sum(dim=1)
53 | loss = loss.masked_select(non_pad_mask).sum() # average later
54 | else:
55 | loss = cross_entropy(pred, gold, ignore_index=padding_id, reduction='sum')
56 |
57 | return loss
58 |
59 |
60 | def main(args):
61 | torch.set_default_tensor_type(torch.FloatTensor)
62 | if not os.path.exists(args.model_path):
63 | os.makedirs(args.model_path)
64 | # Load config
65 | config = json.load(open(args.config_file_path, 'r'))
66 | if config['training']['label_smoothing'] == 1:
67 | label_smoothing = True
68 | else:
69 | label_smoothing = False
70 | # Set logger (console and file)
71 | logger_format = logging.Formatter('%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
72 | logger = logging.getLogger('transformer')
73 | sh = logging.StreamHandler()
74 | sh.setFormatter(logger_format)
75 | sh.setLevel(logging.DEBUG)
76 | logger.addHandler(sh)
77 | fh = logging.FileHandler(os.path.join(args.model_path, f'training_{args.task}.log'), 'a', encoding='utf-8')
78 | fh.setLevel(logging.INFO)
79 | fh.setFormatter(logger_format)
80 | logger.addHandler(fh)
81 | logger.setLevel(logging.INFO)
82 | logger.info(json.dumps(config, indent=2))
83 | # Set device and seed
84 | device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
85 | torch.manual_seed(config['training']['seed']) # Seed for reproducing
86 | # load data
87 | train_dataset = DataSource(args.config_file_path, args.task, 'train',
88 | args.version, args.context_size)
89 | valid_dataset = DataSource(args.config_file_path, args.task, 'valid',
90 | args.version, args.context_size)
91 | train_loader = DataLoader(train_dataset,
92 | batch_size=args.batch_size,
93 | shuffle=True,
94 | num_workers=3)
95 | valid_loader = DataLoader(valid_dataset,
96 | batch_size=args.batch_size,
97 | shuffle=False,
98 | num_workers=3)
99 | knowledge_data = train_dataset.encode_knowledge_pair(config['data']['knowledge_path']).to(device)
100 | vocab_size = len(train_dataset.vocab)
101 | logger.info(f"Total batches={len(train_dataset) // args.batch_size}")
102 | # Define widget
103 | model = Model(task=args.task,
104 | vocab_size=vocab_size,
105 | max_text_len=config['data']['text_length'],
106 | image_size=config['model']['image_size'],
107 | embedding_size=config['model']['word_embedding_size'],
108 | text_n_layers=config['model']['text_n_layers'],
109 | text_n_head=config['model']['text_n_head'],
110 | text_d_k=config['model']['text_d_k'],
111 | text_d_v=config['model']['text_d_v'],
112 | text_d_model=config['model']['text_d_model'],
113 | text_d_inner=config['model']['text_d_inner'],
114 | co_n_layers=config['model']['co_n_layers'],
115 | co_n_head=config['model']['co_n_head'],
116 | co_d_k=config['model']['co_d_k'],
117 | co_d_v=config['model']['co_d_v'],
118 | co_d_model=config['model']['co_d_model'],
119 | co_d_inner=config['model']['co_d_inner'],
120 | de_n_layers=config['model']['de_n_layers'],
121 | de_n_head=config['model']['de_n_head'],
122 | de_d_k=config['model']['de_d_k'],
123 | de_d_v=config['model']['de_d_v'],
124 | de_d_model=config['model']['de_d_model'],
125 | de_d_inner=config['model']['de_d_inner'],
126 | dropout_rate=config['model']['dropout_rate'],
127 | padding_id=PAD_ID,
128 | tgt_emb_prj_weight_sharing=True,
129 | use_knowledge=config['model']['use_knowledge'],
130 | knowledge_data=knowledge_data
131 | )
132 | model.to(device)
133 | # model = nn.DataParallel(model)
134 | # logger.info(model)
135 | # Define optimizer
136 | optimizer = optim.Adam(model.parameters(),
137 | lr=config['training']['lr'],
138 | weight_decay=config['training']['lr_decay'])
139 | # Define learning rate scheduler
140 | # scheduler = lr_scheduler.ReduceLROnPlateau(optimizer, mode='min',
141 | # factor=0.5, patience=1,
142 | # threshold=0.1, threshold_mode='rel',
143 | # cooldown=0, min_lr=1e-8,
144 | # verbose=True)
145 | # optimizer = ScheduledOptim(
146 | # optim.Adam(
147 | # filter(lambda x: x.requires_grad, widget.parameters()),
148 | # betas=(0.9, 0.98), eps=1e-09),
149 | # config['widget']['text_d_model'], config['training']['warmup_steps'])
150 | # Train
151 | total_batch = 0
152 | min_val_loss = None
153 | bad_loss_cnt = 0
154 | for epoch in range(config['training']['num_epochs']):
155 | total_losses = [0, 0]
156 | n_word_total_list = [0, 0]
157 | n_word_correct_list = [0, 0]
158 | # scheduler.step(sum(valid_losses))
159 | for train_batch in train_loader:
160 | total_batch += 1
161 | if args.task == 'text':
162 | text_input, text_pos, text_turn, text_speaker, \
163 | image_input, image_pos, image_turn, image_speaker, \
164 | query_input, query_pos = map(lambda x: x.to(device), train_batch)
165 | gold = query_input[:, 1:]
166 | optimizer.zero_grad()
167 | dec_output_probs = model((text_input, text_pos, text_turn, text_speaker,
168 | image_input, image_pos, image_turn, image_speaker),
169 | (query_input[:, :-1], query_pos[:, :-1]))
170 | backward_loss = []
171 | for idx, dec_output_prob in enumerate(dec_output_probs):
172 | loss, n_correct = cal_performance(dec_output_prob, gold, PAD_ID,
173 | smoothing=label_smoothing)
174 | backward_loss.append(loss)
175 | batch_loss = loss.item()
176 | total_losses[idx] += batch_loss
177 | non_pad_mask = gold.ne(PAD_ID)
178 | n_word = non_pad_mask.sum().item()
179 | n_word_total_list[idx] += n_word
180 | n_word_correct_list[idx] += n_correct
181 | if total_batch % config['training']['log_batch'] == 0 or total_batch < config['training'][
182 | 'log_batch']:
183 | logger.info(f'Epoch [{epoch + 1}], Batch [{total_batch}], '
184 | f'Loss {idx + 1}: {batch_loss / n_word:.6}, '
185 | f'Accuracy {idx + 1}: {100 * n_correct / n_word:.3f} %')
186 | backward_loss = sum(backward_loss)
187 | backward_loss.backward()
188 | optimizer.step()
189 | # optimizer.step_and_update_lr()
190 | # Gradient clipping to avoid exploding gradients
191 | nn.utils.clip_grad_norm_(model.parameters(), config['training']['max_gradient_norm'])
192 | else:
193 | pass
194 | if args.task == 'text':
195 | for idx, (total_loss, n_word_total, n_word_correct) in enumerate(
196 | zip(total_losses, n_word_total_list, n_word_correct_list)):
197 | train_loss = total_loss / n_word_total
198 | train_accu = n_word_correct / n_word_total
199 | logger.info(f'Epoch [{epoch + 1}], '
200 | f'Train Loss {idx + 1}: {train_loss:.6}, '
201 | f'Train Accuracy {idx + 1}: {100 * train_accu:.3f} %')
202 | # Evaluate
203 | valid_losses = [0, 0]
204 | n_word_total_list = [0, 0]
205 | n_word_correct_list = [0, 0]
206 | if epoch % config['training']['evaluate_epoch'] == 0:
207 | model.eval()
208 | if args.task == 'text':
209 | for valid_batch in valid_loader:
210 | text_input, text_pos, text_turn, text_speaker, \
211 | image_input, image_pos, image_turn, image_speaker, \
212 | query_input, query_pos = map(lambda x: x.to(device), valid_batch)
213 | gold = query_input[:, 1:]
214 | dec_output_probs = model((text_input, text_pos, text_turn, text_speaker,
215 | image_input, image_pos, image_turn, image_speaker),
216 | (query_input[:, :-1], query_pos[:, :-1]))
217 | for idx, dec_output_prob in enumerate(dec_output_probs):
218 | loss_val, n_correct = cal_performance(dec_output_prob, gold, PAD_ID,
219 | smoothing=label_smoothing)
220 | valid_losses[idx] += loss_val.item()
221 | non_pad_mask = gold.ne(PAD_ID)
222 | n_word = non_pad_mask.sum().item()
223 | n_word_total_list[idx] += n_word
224 | n_word_correct_list[idx] += n_correct
225 | for idx, (valid_loss, n_word_total, n_word_correct) in enumerate(
226 | zip(valid_losses, n_word_total_list, n_word_correct_list)):
227 | logger.info(f'Epoch [{epoch + 1}] '
228 | f'Valid Loss {idx + 1}: {valid_loss / n_word_total:.6}, '
229 | f'Valid Accuracy {idx + 1}: {100 * n_word_correct / n_word_total:.3f} %, '
230 | f'Patience: {bad_loss_cnt}')
231 | valid_loss = sum(valid_losses)
232 | model.train()
233 | # Save widget each epoch
234 | save_dict = {
235 | 'task': args.task,
236 | 'epoch': epoch,
237 | 'iteration': total_batch,
238 | 'valid_loss': valid_loss,
239 | 'widget': model.state_dict(),
240 | 'optimizer': optimizer.state_dict()
241 | }
242 | torch.save(save_dict,
243 | os.path.join(args.model_path, f'{args.task}_model_{epoch + 1}.pth'))
244 | if min_val_loss is None or valid_loss < min_val_loss:
245 | min_val_loss = valid_loss
246 | bad_loss_cnt = 0
247 | # Save the best widget
248 | torch.save(save_dict,
249 | os.path.join(args.model_path, f'best_{args.task}_model.pth'))
250 | else:
251 | bad_loss_cnt += 1
252 | if bad_loss_cnt >= config['training']['patience']:
253 | return 0
254 | else:
255 | pass
256 | return 0
257 |
258 |
259 | if __name__ == '__main__':
260 | _parser = argparse.ArgumentParser()
261 | # cuda device
262 | _parser.add_argument('-g', '--gpu', default='0', help='choose which GPU to use')
263 | # path
264 | _parser.add_argument('--config_file_path', help='path to json config', required=True)
265 | _parser.add_argument('--model_path', type=str, default='./models/', help='path for saving trained models')
266 | # widget
267 | _parser.add_argument('--task', type=str, default='text', help='task type(only support text now).')
268 | _parser.add_argument('--version', type=int, choices=[1, 2], help='dataset version.', required=True)
269 | _parser.add_argument('--context_size', type=int, help='context size.', required=True)
270 | _parser.add_argument('--batch_size', type=int, help='batch size.', required=True)
271 | _args = _parser.parse_args()
272 | os.environ['CUDA_VISIBLE_DEVICES'] = _args.gpu
273 | exit(main(_args))
274 |
--------------------------------------------------------------------------------
/translate.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @Author: winton
4 | @File: test.py
5 | @Time: 2019/8/8 6:54 PM
6 | @Description:
7 | """
8 | import argparse
9 | import json
10 | import logging
11 | import os
12 | import pickle
13 |
14 | import torch
15 | from torch.utils.data import DataLoader
16 | from tqdm import tqdm
17 |
18 | from widget.data import DataSource
19 | from widget.model import Model
20 |
21 |
22 | def index2word(seq, vocab, end_id):
23 | words = []
24 | for word_id in seq:
25 | if word_id == end_id:
26 | break
27 | word = vocab[word_id]
28 | words.append(word)
29 | return ' '.join(words)
30 |
31 |
32 | def main(args):
33 | torch.set_default_tensor_type(torch.FloatTensor)
34 | # Load config
35 | config = json.load(open(args.config_file_path, 'r'))
36 | # load save dict
37 | save_dict = torch.load(os.path.join(args.model_path, args.checkpoint_file), map_location=f'cuda:0')
38 | task = save_dict['task']
39 | # Set logger (console and file)
40 | logger_format = logging.Formatter('%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
41 | logger = logging.getLogger('saha')
42 | sh = logging.StreamHandler()
43 | sh.setFormatter(logger_format)
44 | sh.setLevel(logging.INFO)
45 | logger.addHandler(sh)
46 | fh = logging.FileHandler(os.path.join(args.model_path, f'test_{task}.log'), 'a', encoding='utf-8')
47 | fh.setLevel(logging.INFO)
48 | fh.setFormatter(logger_format)
49 | logger.addHandler(fh)
50 | logger.setLevel(logging.INFO)
51 | logger.info(json.dumps(config, indent=2))
52 | # Set device and seed
53 | device = torch.device(f'cuda:0' if torch.cuda.is_available() else 'cpu')
54 | # load data
55 | logger.info('reading vocab pkl...')
56 | vocab = pickle.load(open(config['data']['vocab_file'], 'rb'))
57 | test_dataset = DataSource(args.config_file_path, task, 'test',
58 | args.version, args.context_size)
59 | test_loader = DataLoader(test_dataset,
60 | batch_size=config['training']['valid_batch_size'],
61 | shuffle=False,
62 | num_workers=4)
63 | vocab_size = len(vocab)
64 | i2w = {v: k for (k, v) in vocab.items()}
65 | knowledge_data = test_dataset.encode_knowledge_pair(config['data']['knowledge_path']).to(device)
66 | # Define widget
67 | model = Model(task=task,
68 | vocab_size=vocab_size,
69 | max_text_len=config['data']['text_length'],
70 | image_size=config['widget']['image_size'],
71 | embedding_size=config['widget']['word_embedding_size'],
72 | text_n_layers=config['widget']['text_n_layers'],
73 | text_n_head=config['widget']['text_n_head'],
74 | text_d_k=config['widget']['text_d_k'],
75 | text_d_v=config['widget']['text_d_v'],
76 | text_d_model=config['widget']['text_d_model'],
77 | text_d_inner=config['widget']['text_d_inner'],
78 | co_n_layers=config['widget']['co_n_layers'],
79 | co_n_head=config['widget']['co_n_head'],
80 | co_d_k=config['widget']['co_d_k'],
81 | co_d_v=config['widget']['co_d_v'],
82 | co_d_model=config['widget']['co_d_model'],
83 | co_d_inner=config['widget']['co_d_inner'],
84 | de_n_layers=config['widget']['de_n_layers'],
85 | de_n_head=config['widget']['de_n_head'],
86 | de_d_k=config['widget']['de_d_k'],
87 | de_d_v=config['widget']['de_d_v'],
88 | de_d_model=config['widget']['de_d_model'],
89 | de_d_inner=config['widget']['de_d_inner'],
90 | dropout_rate=config['widget']['dropout_rate'],
91 | padding_id=config['data']['pad_id'],
92 | tgt_emb_prj_weight_sharing=True,
93 | use_knowledge=config['model']['use_knowledge'],
94 | knowledge_data=knowledge_data
95 | )
96 | model.load_state_dict(save_dict['widget'])
97 | # widget = nn.DataParallel(widget)
98 | model.to(device)
99 | model.eval()
100 | logger.info(model)
101 | true_sequences = []
102 | pred_sequences = []
103 | prog = tqdm(total=len(test_dataset) // config['training']['valid_batch_size'])
104 | with torch.no_grad():
105 | if task == 'text':
106 | for batch_data in test_loader:
107 | text_input, text_pos, text_turn, text_speaker, \
108 | image_input, image_seq, image_turn, image_speaker, \
109 | query_input, query_pos = map(lambda x: x.to(device), batch_data)
110 | for sequence in query_input.cpu().numpy():
111 | true_sequences.append(index2word(sequence, i2w, config['data']['end_id']))
112 | context_embs, context_seq = model.context_encode((text_input, text_pos, text_turn, text_speaker,
113 | image_input, image_seq, image_turn, image_speaker))
114 | pred_text = query_input[:, :1]
115 | for len_dec_seq in range(1, config['data']['text_length'] + 1):
116 | if config['model']['use_knowledge']:
117 | dec_output_prob = model.knowledge_text_decode((pred_text, query_pos[:, :len_dec_seq]),
118 | context_embs, context_seq)
119 | else:
120 | dec_output_prob = model.text_decode((pred_text, query_pos[:, :len_dec_seq]),
121 | context_embs, context_seq)
122 | dec_output_prob = dec_output_prob.view(-1, len_dec_seq, vocab_size)
123 | _, max_text = torch.max(torch.softmax(dec_output_prob, dim=2), dim=2)
124 | current_text = max_text[:, -1].view(-1, 1)
125 | pred_text = torch.cat((pred_text, current_text), dim=1)
126 | for sequence in pred_text.cpu().numpy():
127 | pred_sequences.append(index2word(sequence, i2w, config['data']['end_id']))
128 | prog.update()
129 | prog.close()
130 | with open(os.path.join(args.model_path, args.out_file), 'w') as f:
131 | for item in pred_sequences:
132 | f.write(f"{item}\n")
133 | if not os.path.isfile(os.path.join(args.model_path, 'gt_text.txt')):
134 | with open(os.path.join(args.model_path, 'gt_text.txt'), 'w') as f:
135 | for item in true_sequences:
136 | f.write(f"{item}\n")
137 |
138 |
139 | if __name__ == '__main__':
140 | _parser = argparse.ArgumentParser()
141 | # cuda device
142 | _parser.add_argument('-g', '--gpu', default='0', help='choose which GPU to use')
143 | # path
144 | _parser.add_argument('--config_file_path', help='path to json config', required=True)
145 | _parser.add_argument('--model_path', type=str, default='./models/', help='path for trained models')
146 | _parser.add_argument('--checkpoint_file', help='checkpoint file', required=True)
147 | _parser.add_argument('--out_file', type=str, help='path for saving result', required=True)
148 | _args = _parser.parse_args()
149 | os.environ['CUDA_VISIBLE_DEVICES'] = _args.gpu
150 | exit(main(_args))
151 |
--------------------------------------------------------------------------------
/widget/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @Author: winton
4 | @File: __init__.py.py
5 | @Time: 2019/8/30 11:31 AM
6 | @Description:
7 | """
8 | from . import data
9 | from . import model
10 | from . import module
11 | from . import utils
12 |
--------------------------------------------------------------------------------
/widget/data.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @Author: winton
4 | @File: data.py
5 | @Time: 2021/4/9 3:59 PM
6 | @Description:
7 | """
8 | import json
9 | import os
10 | from os.path import isfile
11 | from collections import Counter
12 |
13 | import pickle as pkl
14 |
15 | import numpy as np
16 | import torch
17 | from nltk import word_tokenize
18 | from torch.utils.data import Dataset
19 | from annoy import AnnoyIndex
20 | from tqdm import tqdm
21 |
22 | from widget.utils import save_to_pkl
23 |
24 | PAD_ID = 0
25 | UNK_ID = 1
26 | START_ID = 2
27 | END_ID = 3
28 |
29 |
30 | def pad_text(vocab, length, text):
31 | text = list(map(lambda w: vocab.get(w.lower(), UNK_ID), word_tokenize(text)))
32 | if len(text) > length - 1:
33 | text = text[:length - 1]
34 | text.append(END_ID)
35 | text_length = length
36 | else:
37 | text_length = len(text) + 1
38 | text.append(END_ID)
39 | text.extend([PAD_ID for _ in range(length - len(text))])
40 | return text, text_length
41 |
42 |
43 | def pad_img(length, imgs):
44 | if len(imgs) > length:
45 | imgs = imgs[:length]
46 | imgs_length = length
47 | else:
48 | imgs_length = len(imgs)
49 | imgs.extend(['' for _ in range(length - len(imgs))])
50 | return imgs, imgs_length
51 |
52 |
53 | def save_to_txt(texts, file):
54 | with open(file, 'w') as f:
55 | for text in texts:
56 | f.write(text + '\n')
57 |
58 |
59 | class DataSource(Dataset):
60 | def __init__(self, config_path, task, mode, version, context_size):
61 | assert task in ['text', 'image']
62 | assert mode in ['train', 'valid', 'test']
63 | # Load config
64 | self.config = json.load(open(config_path, 'r'))
65 | self.task = task
66 | self.mode = mode
67 | self.context_size = context_size
68 | self.dialogs = None
69 | self.source_file = os.path.join(self.config['data']['source_path'], f'v{version}', f'{mode}.pkl')
70 | work_path = os.path.join(self.config['data']['work_path'], f'v{version}_c{context_size}')
71 | if not os.path.exists(work_path):
72 | os.makedirs(work_path)
73 | item_file = os.path.join(work_path, f'{task}_{mode}_item.pkl')
74 | gt_file = os.path.join(work_path, f'gt_text.txt')
75 | type_file = os.path.join(work_path, f'dialog_type.txt')
76 | self.vocab_file = os.path.join(work_path, f'vocab.pkl')
77 | if not isfile(self.vocab_file) or not isfile(item_file):
78 | print('loading dialog pkl...')
79 | self.dialogs = pkl.load(open(self.source_file, 'rb'))
80 | self.image_pos = ['1st', '2nd', '3rd', '4th', '5th', '6th',
81 | '7th', '8th', '9th', '10th', '11th', '12th'][:self.config['data']['image_length']]
82 | self.vocab = self.create_or_load_vocab()
83 | if 'annoy_file' in self.config['data']:
84 | # use pre-train VGG image vector
85 | self.annoy = AnnoyIndex(self.config['model']['image_size'], metric='euclidean')
86 | self.annoy.load(self.config['data']['annoy_file'])
87 | self.annoy_index = pkl.load(open(self.config['data']['annoy_pkl'], 'rb'))
88 | if not isfile(item_file):
89 | self.items, gt_texts, dialog_types = self.get_items_from_dialogs()
90 | save_to_pkl(self.items, item_file)
91 | if task == 'text' and mode == 'test':
92 | save_to_txt(gt_texts, gt_file)
93 | save_to_txt(dialog_types, type_file)
94 | else:
95 | print(f'loading {task} {mode} item pkl...')
96 | self.items = pkl.load(open(item_file, 'rb'))
97 | print(f'{task} {mode} item pkl read complete')
98 |
99 | def create_or_load_vocab(self):
100 | if not isfile(self.vocab_file):
101 | if self.mode == 'train':
102 | # get vocab
103 | print('get vocab...')
104 | word_freq = Counter()
105 | for dialog in self.dialogs:
106 | for utterance in dialog:
107 | # (speaker, text, images, false_images, utter_type)
108 | word_freq.update([word for word in word_tokenize(utterance[1])])
109 | words = [word for word, freq in word_freq.most_common()
110 | if freq >= self.config['data']['context_text_cutoff']]
111 | vocab = {word: wid for wid, word in enumerate(words, 4)}
112 | vocab[''] = PAD_ID
113 | vocab[''] = UNK_ID
114 | vocab[''] = START_ID
115 | vocab[''] = END_ID
116 | # update speaker, turn
117 | assert '@user' not in vocab, '@user already exist!'
118 | vocab['@user'] = len(vocab)
119 | assert '@system' not in vocab, '@user already exist!'
120 | vocab['@system'] = len(vocab)
121 | for i in range(self.context_size):
122 | assert f'#{i}' not in vocab, f'#{i} already exist!'
123 | vocab[f'#{i}'] = len(vocab)
124 | for pos_i in self.image_pos:
125 | if pos_i not in vocab:
126 | print(f'{pos_i} not in vocabulary')
127 | vocab[pos_i] = len(vocab)
128 | save_to_pkl(vocab, self.vocab_file)
129 | else:
130 | raise Exception('Vocabulary is not exist!')
131 | else:
132 | print('loading vocab pkl...')
133 | vocab = pkl.load(open(self.vocab_file, 'rb'))
134 | print('vocab pkl load complete')
135 | return vocab
136 |
137 | def get_items_from_dialogs(self):
138 | empty_text = [END_ID] + [PAD_ID] * (self.config['data']['text_length'] - 1)
139 | prog = tqdm(total=len(self.dialogs), desc='get items from dialogs')
140 | items = []
141 | gt_texts = []
142 | dialog_types = []
143 | for dialog in self.dialogs:
144 | history = [(empty_text, 1, [''] * self.config['data']['image_length'], 0, '', '')] * self.context_size
145 | for utter in dialog:
146 | # (speaker, text, images, false_images, utter_type)
147 | text, text_length = pad_text(self.vocab, self.config['data']['text_length'], utter[1])
148 | img, img_length = pad_img(self.config['data']['image_length'], utter[2])
149 | if utter[0] == 'user':
150 | history.append((text, text_length, img, img_length, '@user', utter[4]))
151 | else:
152 | context = history[-self.context_size:]
153 | if self.task == 'text':
154 | if len(utter[1]) > 0:
155 | items.append((context, (text, text_length)))
156 | gt_texts.append(utter[1])
157 | dialog_types.append(history[-1][5])
158 | else:
159 | # true_images = self.get_img_urls(utter.images)
160 | # false_images = self.get_img_urls(utter.false_images)
161 | # # ensure images number enough
162 | # if len(true_images) < 1 or len(false_images) < 1:
163 | # continue
164 | # true_images, true_images_num = pad_img(self.config['data']['num_pos_images'], true_images)
165 | # false_images, false_images_num = pad_img(self.config['data']['num_neg_images'], false_images)
166 | # self.items.append((context, (true_images, true_images_num, false_images, false_images_num)))
167 | pass
168 | history.append((text, text_length, img, img_length, '@system', utter[4]))
169 | prog.update()
170 | prog.close()
171 | return items, gt_texts, dialog_types
172 |
173 | def __getitem__(self, index):
174 | item = self.items[index % len(self.items)]
175 | # (text, text_length, img, img_length, speaker, dialog_type)
176 | texts, text_lengths, imgs, img_lengths, speakers, _ = map(list, zip(*item[0]))
177 | text_input = []
178 | text_pos = []
179 | text_turn = []
180 | text_speaker = []
181 | for turn, (text, length, speaker) in enumerate(zip(texts, text_lengths, speakers)):
182 | text_input.extend(text)
183 | text_pos.extend(list(range(1, length + 1)) + [0] * (self.config['data']['text_length'] - length))
184 | text_turn.extend([self.vocab[f'#{turn}']] * length + [0] * (self.config['data']['text_length'] - length))
185 | text_speaker.extend([self.vocab[speaker]] * length + [0] * (self.config['data']['text_length'] - length))
186 | image_input = []
187 | image_pos = []
188 | image_turn = []
189 | image_speaker = []
190 | for turn, (img, img_length, speaker) in enumerate(zip(imgs, img_lengths, speakers)):
191 | image_input.extend(self.get_imgs(img))
192 | image_pos.extend([self.vocab[x] for x in self.image_pos[:img_length]] +
193 | [0] * (self.config['data']['image_length'] - img_length))
194 | image_turn.extend([self.vocab[f'#{turn}']] * img_length +
195 | [0] * (self.config['data']['image_length'] - img_length))
196 | image_speaker.extend([self.vocab[speaker]] * img_length +
197 | [0] * (self.config['data']['image_length'] - img_length))
198 | query_input, query_len = item[1]
199 | query_pos = list(range(1, query_len + 1)) + [0] * (self.config['data']['text_length'] - query_len)
200 | return np.array(text_input), np.array(text_pos), np.array(text_turn), np.array(text_speaker), \
201 | np.array(image_input, dtype=np.float32), np.array(image_pos), np.array(image_turn), np.array(
202 | image_speaker), np.array(query_input), np.array(query_pos)
203 |
204 | def __len__(self):
205 | return len(self.items)
206 |
207 | def get_img_urls(self, urls):
208 | ret = []
209 | for url in urls:
210 | if url in self.annoy_index:
211 | ret.append(url)
212 | return ret
213 |
214 | def get_imgs(self, urls):
215 | ret = []
216 | for url in urls:
217 | try:
218 | vector = self.annoy.get_item_vector(self.annoy_index[url])
219 | except:
220 | vector = [0.] * self.config['model']['image_size']
221 | ret.append(vector)
222 | return ret
223 |
224 | def encode_knowledge_pair(self, path):
225 | if os.path.exists(path):
226 | with open(path, 'r', encoding='utf8') as file:
227 | knowledge_pairs = json.load(file)
228 | result = []
229 | for knowledge_pair in knowledge_pairs:
230 | result.append([
231 | self.vocab.get(knowledge_pair[0], UNK_ID),
232 | self.vocab.get(knowledge_pair[1], UNK_ID)
233 | ])
234 | return torch.tensor(result)
235 | else:
236 | return None
237 |
238 |
--------------------------------------------------------------------------------
/widget/model.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @Author: winton
4 | @File: widget.py
5 | @Time: 2019/8/6 9:13 AM
6 | @Description:
7 | """
8 | import torch
9 | from torch import nn
10 |
11 | from .module import Emb, Encoder, Decoder, KnowledgeDecoder
12 |
13 |
14 | def get_non_pad_mask(seq, padding_id):
15 | assert seq.dim() == 2
16 | return seq.ne(padding_id).type(torch.float).unsqueeze(-1)
17 |
18 |
19 | def get_attn_key_pad_mask(seq_k, seq_q, padding_id):
20 | """ For masking out the padding part of key sequence. """
21 |
22 | # Expand to fit the shape of key query attention matrix.
23 | len_q = seq_q.size(1)
24 | padding_mask = seq_k.eq(padding_id)
25 | padding_mask = padding_mask.unsqueeze(1).expand(-1, len_q, -1) # b x lq x lk
26 |
27 | return padding_mask
28 |
29 |
30 | def get_subsequent_mask(seq):
31 | """ For masking out the subsequent info. """
32 |
33 | sz_b, len_s = seq.size()
34 | subsequent_mask = torch.triu(
35 | torch.ones((len_s, len_s), device=seq.device, dtype=torch.uint8), diagonal=1)
36 | subsequent_mask = subsequent_mask.unsqueeze(0).expand(sz_b, -1, -1) # b x ls x ls
37 |
38 | return subsequent_mask
39 |
40 |
41 | class Model(nn.Module):
42 | def __init__(self,
43 | task,
44 | vocab_size,
45 | max_text_len,
46 | image_size,
47 | embedding_size,
48 | text_n_layers, text_n_head, text_d_k, text_d_v, text_d_model, text_d_inner,
49 | co_n_layers, co_n_head, co_d_k, co_d_v, co_d_model, co_d_inner,
50 | de_n_layers, de_n_head, de_d_k, de_d_v, de_d_model, de_d_inner,
51 | dropout_rate,
52 | padding_id,
53 | tgt_emb_prj_weight_sharing=True,
54 | use_knowledge=False,
55 | knowledge_data=None):
56 | super().__init__()
57 | self.task = task
58 | self.vocab_size = vocab_size
59 | self.padding_id = padding_id
60 | self.use_knowledge = use_knowledge
61 | self.emb = Emb(max_text_len, image_size, vocab_size, embedding_size, padding_id)
62 | self.text_encoder = Encoder(text_n_layers, text_n_head, text_d_k, text_d_v,
63 | text_d_model, text_d_inner, dropout_rate)
64 | self.text_co_encoder = Encoder(co_n_layers, co_n_head, co_d_k, co_d_v,
65 | co_d_model, co_d_inner, dropout_rate)
66 | self.image_co_encoder = Encoder(co_n_layers, co_n_head, co_d_k, co_d_v,
67 | co_d_model, co_d_inner, dropout_rate)
68 | if self.task == 'text':
69 | self.decoder = Decoder(de_n_layers, de_n_head, de_d_k, de_d_v,
70 | de_d_model, de_d_inner, dropout_rate)
71 | self.tgt_word_prj_1 = nn.Linear(de_d_model, vocab_size, bias=False)
72 | if tgt_emb_prj_weight_sharing:
73 | # Share the weight matrix between target word embedding & the final logit dense layer
74 | self.tgt_word_prj_1.weight = self.emb.tgt_token_emb.weight
75 | self.x_logit_scale = (de_d_model ** -0.5)
76 | else:
77 | nn.init.xavier_normal_(self.tgt_word_prj_1.weight)
78 | self.x_logit_scale = 1.
79 | if use_knowledge:
80 | self.knowledge_data = knowledge_data
81 | self.knowledge_linear = nn.Linear(2 * embedding_size, embedding_size)
82 | self.knowledge_decoder = KnowledgeDecoder(de_n_layers, de_n_head, de_d_k, de_d_v,
83 | de_d_model, de_d_inner, dropout_rate)
84 | self.tgt_word_prj_2 = nn.Linear(de_d_model, vocab_size, bias=False)
85 | if tgt_emb_prj_weight_sharing:
86 | # Share the weight matrix between target word embedding & the final logit dense layer
87 | self.tgt_word_prj_2.weight = self.emb.tgt_token_emb.weight
88 | else:
89 | nn.init.xavier_normal_(self.tgt_word_prj_2.weight)
90 |
91 | def forward(self, context, query):
92 | if self.task == 'text':
93 | context_embs, context_seq = self.context_encode(context)
94 | output_1 = self.text_decode(query, context_embs, context_seq)
95 | seq_logit_1 = self.tgt_word_prj_1(output_1) * self.x_logit_scale
96 | seq_logit_1 = seq_logit_1.view(-1, seq_logit_1.size(2))
97 | if self.use_knowledge:
98 | output_2 = self.knowledge_text_decode(query, context_embs, context_seq)
99 | seq_logit_2 = self.tgt_word_prj_2(output_2) * self.x_logit_scale
100 | seq_logit_2 = seq_logit_2.view(-1, seq_logit_2.size(2))
101 | return seq_logit_1, seq_logit_2
102 | else:
103 | return seq_logit_1
104 |
105 | def context_encode(self, context):
106 | text_input, text_pos, text_turn, text_speaker, image_input, image_pos, image_turn, image_speaker = context
107 | text_embs, image_embs = self.emb(text_input, text_pos, text_turn, text_speaker,
108 | image_input, image_pos, image_turn, image_speaker)
109 | # text_embs = (bs, text_len, embedding_size)
110 | # image_embs = (bs, image_len, embedding_size)
111 | # -- text transformer encoder
112 | attn_mask = get_attn_key_pad_mask(seq_k=text_input, seq_q=text_input, padding_id=self.padding_id)
113 | non_pad_mask = get_non_pad_mask(text_input, self.padding_id)
114 | text_embs, = self.text_encoder(text_embs, text_embs, non_pad_mask, attn_mask) # (bs, text_len, embedding_size)
115 | # -- co-attention encoder
116 | attn_mask = get_attn_key_pad_mask(seq_k=image_pos, seq_q=text_input, padding_id=self.padding_id)
117 | non_pad_mask = get_non_pad_mask(text_input, self.padding_id)
118 | text_co_embs, = self.text_co_encoder(image_embs, text_embs, non_pad_mask, attn_mask)
119 | # text_co_embs = (bs, text_len, embedding_size)
120 | attn_mask = get_attn_key_pad_mask(seq_k=text_input, seq_q=image_pos, padding_id=self.padding_id)
121 | non_pad_mask = get_non_pad_mask(image_pos, self.padding_id)
122 | image_co_embs, = self.image_co_encoder(text_embs, image_embs, non_pad_mask, attn_mask)
123 | # image_co_embs = (bs, image_len, embedding_size)
124 | context_embs = torch.cat((text_co_embs, image_co_embs), dim=1)
125 | # context_embs = (bs, text_len + image_len, embedding_size)
126 | context_seq = torch.cat((text_input, image_pos), dim=1)
127 | return context_embs, context_seq
128 |
129 | def text_decode(self, query, context_embs, context_seq):
130 | query_input, query_pos = query
131 | query_embs = self.emb.tgt_token_emb(query_input) + self.emb.position_enc(query_pos)
132 | # query_embs = (bs, text_len, embedding_size)
133 | # -- query transformer decoder
134 | non_pad_mask = get_non_pad_mask(query_input, self.padding_id)
135 | slf_attn_mask_subseq = get_subsequent_mask(query_input)
136 | slf_attn_mask_keypad = get_attn_key_pad_mask(seq_k=query_input, seq_q=query_input,
137 | padding_id=self.padding_id)
138 | slf_attn_mask = (slf_attn_mask_keypad + slf_attn_mask_subseq).gt(0)
139 | dec_enc_attn_mask = get_attn_key_pad_mask(seq_k=context_seq, seq_q=query_input, padding_id=self.padding_id)
140 | dec_output, = self.decoder(context_embs, query_embs, non_pad_mask, slf_attn_mask, dec_enc_attn_mask)
141 | # dec_output = (bs, query_len, embedding_size)
142 | # seq_logit = self.tgt_word_prj_1(dec_output) * self.x_logit_scale
143 | # seq_logit = (bs, query_len, vocab_size)
144 | return dec_output
145 |
146 | def knowledge_text_decode(self, query, context_embs, context_seq):
147 | query_input, query_pos = query
148 | query_embs = self.emb.tgt_token_emb(query_input) + self.emb.position_enc(query_pos)
149 | knowledge = self.emb.tgt_token_emb(self.knowledge_data)
150 | knowledge = self.knowledge_linear(torch.reshape(knowledge, [-1, 2 * knowledge.shape[2]]))
151 | knowledge = knowledge.unsqueeze(0).expand(context_embs.shape[0], knowledge.shape[0], knowledge.shape[1])
152 | # query_embs = (bs, text_len, embedding_size)
153 | # -- query transformer decoder
154 | non_pad_mask = get_non_pad_mask(query_input, self.padding_id)
155 | slf_attn_mask_subseq = get_subsequent_mask(query_input)
156 | slf_attn_mask_keypad = get_attn_key_pad_mask(seq_k=query_input, seq_q=query_input,
157 | padding_id=self.padding_id)
158 | slf_attn_mask = (slf_attn_mask_keypad + slf_attn_mask_subseq).gt(0)
159 | dec_enc_attn_mask = get_attn_key_pad_mask(seq_k=context_seq, seq_q=query_input, padding_id=self.padding_id)
160 | dec_output, = self.knowledge_decoder(context_embs, query_embs, knowledge,
161 | non_pad_mask, slf_attn_mask, dec_enc_attn_mask)
162 | # dec_output = (bs, query_len, embedding_size)
163 | # seq_logit = self.tgt_word_prj_2(dec_output) * self.x_logit_scale
164 | # seq_logit = (bs, query_len, vocab_size)
165 | return dec_output
166 |
167 |
168 | if __name__ == '__main__':
169 | pass
170 |
--------------------------------------------------------------------------------
/widget/module.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @Author: winton
4 | @File: module.py
5 | @Time: 2021/4/9 4:21 PM
6 | @Description:
7 | """
8 | import torch
9 | from torch import nn
10 | import numpy as np
11 |
12 |
13 | def get_position_encoding_table(n_position, d_hid, padding_idx=None):
14 | """ Sinusoid position encoding table"""
15 |
16 | def cal_angle(position, hid_idx):
17 | return position / np.power(10000, 2 * (hid_idx // 2) / d_hid)
18 |
19 | def get_position_angle_vec(position):
20 | return [cal_angle(position, hid_j) for hid_j in range(d_hid)]
21 |
22 | sinusoid_table = np.array([get_position_angle_vec(pos_i) for pos_i in range(n_position)])
23 |
24 | sinusoid_table[:, 0::2] = np.sin(sinusoid_table[:, 0::2]) # dim 2i
25 | sinusoid_table[:, 1::2] = np.cos(sinusoid_table[:, 1::2]) # dim 2i+1
26 |
27 | if padding_idx is not None:
28 | # zero vector for padding dimension
29 | sinusoid_table[padding_idx] = 0.
30 |
31 | return torch.tensor(sinusoid_table, dtype=torch.float32)
32 |
33 |
34 | class Emb(nn.Module):
35 | def __init__(self,
36 | max_text_len,
37 | image_in_size,
38 | vocab_size,
39 | embedding_size,
40 | padding_id,
41 | emb_src_tgt_weight_sharing=True):
42 | super().__init__()
43 | self.position_enc = nn.Embedding.from_pretrained(
44 | get_position_encoding_table(max_text_len + 1, embedding_size, padding_idx=0),
45 | freeze=True)
46 | self.src_token_emb = nn.Embedding(vocab_size, embedding_size, padding_idx=padding_id)
47 | if emb_src_tgt_weight_sharing:
48 | self.tgt_token_emb = self.src_token_emb
49 | else:
50 | self.tgt_token_emb = nn.Embedding(vocab_size, embedding_size, padding_idx=padding_id)
51 | self.image_layer = nn.Linear(image_in_size, embedding_size, bias=False)
52 |
53 | def forward(self, src_input, src_pos, src_turn, src_speaker,
54 | image_input, image_pos, image_turn, image_speaker):
55 | # text_input, text_pos, text_turn, text_speaker, image_turn, image_speaker = (bs, text_len)
56 | # image_input = (bs, image_len, image_in_size)
57 | text_outputs = self.src_token_emb(src_input) + self.src_token_emb(src_turn) + \
58 | self.src_token_emb(src_speaker) + self.position_enc(src_pos)
59 | # (bs, text_len, embedding_size)
60 | image_outputs = self.image_layer(image_input) + self.src_token_emb(image_turn) + \
61 | self.src_token_emb(image_speaker) + self.src_token_emb(image_pos)
62 | # (bs, image_len, embedding_size)
63 | return text_outputs, image_outputs
64 |
65 |
66 | class Encoder(nn.Module):
67 | """ A encoder widget with attention mechanism. """
68 |
69 | def __init__(
70 | self,
71 | n_layers, n_head, d_k, d_v,
72 | d_model, d_inner, dropout=0.1):
73 | super().__init__()
74 | self.layer_stack = nn.ModuleList([
75 | SingleEncoderLayer(d_model, d_inner, n_head, d_k, d_v, dropout=dropout)
76 | for _ in range(n_layers)])
77 |
78 | def forward(self, src_seq, tgt_seq, non_pad_mask, attn_mask, return_attns=False):
79 | enc_slf_attn_list = []
80 | enc_output = tgt_seq
81 | for enc_layer in self.layer_stack:
82 | enc_output, enc_slf_attn = enc_layer(
83 | enc_output,
84 | src_seq,
85 | non_pad_mask=non_pad_mask,
86 | attn_mask=attn_mask)
87 | if return_attns:
88 | enc_slf_attn_list += [enc_slf_attn]
89 | if return_attns:
90 | return enc_output, enc_slf_attn_list
91 | return enc_output,
92 |
93 |
94 | class Decoder(nn.Module):
95 | """ A decoder widget with self attention mechanism. """
96 |
97 | def __init__(
98 | self,
99 | n_layers, n_head, d_k, d_v,
100 | d_model, d_inner, dropout=0.1):
101 |
102 | super().__init__()
103 | self.layer_stack = nn.ModuleList([
104 | SingleDecoderLayer(d_model, d_inner, n_head, d_k, d_v, dropout=dropout)
105 | for _ in range(n_layers)])
106 |
107 | def forward(self, src_seq, tgt_seq, non_pad_mask, slf_attn_mask, dec_enc_attn_mask, return_attns=False):
108 | dec_slf_attn_list, dec_enc_attn_list = [], []
109 | dec_output = tgt_seq
110 | for dec_layer in self.layer_stack:
111 | dec_output, dec_slf_attn, dec_enc_attn = dec_layer(
112 | dec_output, src_seq,
113 | non_pad_mask=non_pad_mask,
114 | slf_attn_mask=slf_attn_mask,
115 | dec_enc_attn_mask=dec_enc_attn_mask)
116 |
117 | if return_attns:
118 | dec_slf_attn_list += [dec_slf_attn]
119 | dec_enc_attn_list += [dec_enc_attn]
120 |
121 | if return_attns:
122 | return dec_output, dec_slf_attn_list, dec_enc_attn_list
123 | return dec_output,
124 |
125 |
126 | class KnowledgeDecoder(nn.Module):
127 | """ A decoder widget with domain knowledge. """
128 |
129 | def __init__(
130 | self,
131 | n_layers, n_head, d_k, d_v,
132 | d_model, d_inner, dropout=0.1):
133 |
134 | super().__init__()
135 | self.layer_stack = nn.ModuleList([
136 | KnowledgeDecoderLayer(d_model, d_inner, n_head, d_k, d_v, dropout=dropout)
137 | for _ in range(n_layers)])
138 |
139 | def forward(self, src_seq, tgt_seq, knowledge, non_pad_mask, slf_attn_mask, dec_enc_attn_mask, return_attns=False):
140 | dec_slf_attn_list, dec_enc_attn_list = [], []
141 | dec_output = tgt_seq
142 | for dec_layer in self.layer_stack:
143 | dec_output, dec_slf_attn, dec_enc_attn = dec_layer(
144 | dec_output, src_seq, knowledge,
145 | non_pad_mask=non_pad_mask,
146 | slf_attn_mask=slf_attn_mask,
147 | dec_enc_attn_mask=dec_enc_attn_mask)
148 |
149 | if return_attns:
150 | dec_slf_attn_list += [dec_slf_attn]
151 | dec_enc_attn_list += [dec_enc_attn]
152 |
153 | if return_attns:
154 | return dec_output, dec_slf_attn_list, dec_enc_attn_list
155 | return dec_output,
156 |
157 |
158 | class SingleEncoderLayer(nn.Module):
159 | """ Compose with two layers """
160 |
161 | def __init__(self, d_model, d_inner, n_head, d_k, d_v, dropout=0.1):
162 | super(SingleEncoderLayer, self).__init__()
163 | self.multi_attn = MultiHeadAttention(
164 | n_head, d_model, d_k, d_v, dropout=dropout)
165 | self.pos_ffn = PositionWiseFeedForward(d_model, d_inner, dropout=dropout)
166 |
167 | def forward(self, query, kv, non_pad_mask=None, attn_mask=None):
168 | enc_output, enc_slf_attn = self.multi_attn(query, kv, kv, mask=attn_mask)
169 | enc_output *= non_pad_mask
170 |
171 | enc_output = self.pos_ffn(enc_output)
172 | enc_output *= non_pad_mask
173 | return enc_output, enc_slf_attn
174 |
175 |
176 | class SingleDecoderLayer(nn.Module):
177 | """ Compose with three layers """
178 |
179 | def __init__(self, d_model, d_inner, n_head, d_k, d_v, dropout=0.1):
180 | super(SingleDecoderLayer, self).__init__()
181 | self.slf_attn = MultiHeadAttention(n_head, d_model, d_k, d_v, dropout=dropout)
182 | self.enc_attn = MultiHeadAttention(n_head, d_model, d_k, d_v, dropout=dropout)
183 | self.pos_ffn = PositionWiseFeedForward(d_model, d_inner, dropout=dropout)
184 |
185 | def forward(self, dec_input, enc_output, non_pad_mask=None, slf_attn_mask=None, dec_enc_attn_mask=None):
186 | dec_output, dec_slf_attn = self.slf_attn(
187 | dec_input, dec_input, dec_input, mask=slf_attn_mask)
188 | dec_output *= non_pad_mask
189 |
190 | dec_output, dec_enc_attn = self.enc_attn(
191 | dec_output, enc_output, enc_output, mask=dec_enc_attn_mask)
192 | dec_output *= non_pad_mask
193 |
194 | dec_output = self.pos_ffn(dec_output)
195 | dec_output *= non_pad_mask
196 |
197 | return dec_output, dec_slf_attn, dec_enc_attn
198 |
199 |
200 | class KnowledgeDecoderLayer(nn.Module):
201 | def __init__(self, d_model, d_inner, n_head, d_k, d_v, dropout=0.1):
202 | super(KnowledgeDecoderLayer, self).__init__()
203 | self.slf_attn = MultiHeadAttention(n_head, d_model, d_k, d_v, dropout=dropout)
204 | self.knowledge_attn = MultiHeadAttention(n_head, d_model, d_k, d_v, dropout=dropout)
205 | self.enc_attn = MultiHeadAttention(n_head, d_model, d_k, d_v, dropout=dropout)
206 | self.pos_ffn = PositionWiseFeedForward(d_model, d_inner, dropout=dropout)
207 |
208 | def forward(self, dec_input, enc_output, knowledge, non_pad_mask=None, slf_attn_mask=None, dec_enc_attn_mask=None):
209 | dec_output, dec_slf_attn = self.slf_attn(
210 | dec_input, dec_input, dec_input, mask=slf_attn_mask)
211 | dec_output *= non_pad_mask
212 |
213 | dec_output, dec_knowledge_attn = self.knowledge_attn(
214 | dec_output, knowledge, knowledge)
215 | dec_output *= non_pad_mask
216 |
217 | dec_output, dec_enc_attn = self.enc_attn(
218 | dec_output, enc_output, enc_output, mask=dec_enc_attn_mask)
219 | dec_output *= non_pad_mask
220 |
221 | dec_output = self.pos_ffn(dec_output)
222 | dec_output *= non_pad_mask
223 |
224 | return dec_output, dec_slf_attn, dec_enc_attn
225 |
226 |
227 | class MultiHeadAttention(nn.Module):
228 | """ Multi-Head Attention module """
229 |
230 | def __init__(self, n_head, d_model, d_k, d_v, dropout=0.1):
231 | super().__init__()
232 | self.n_head = n_head
233 | self.d_model = d_model
234 | self.d_k = d_k
235 | self.d_v = d_v
236 | self.w_qs = nn.Linear(d_model, n_head * d_k)
237 | self.w_ks = nn.Linear(d_model, n_head * d_k)
238 | self.w_vs = nn.Linear(d_model, n_head * d_v)
239 |
240 | self.attention = ScaledDotProductAttention(temperature=np.power(d_k, 0.5))
241 | self.layer_norm = nn.LayerNorm(d_model)
242 |
243 | self.fc = nn.Linear(n_head * d_v, d_model)
244 |
245 | self.dropout = nn.Dropout(dropout)
246 |
247 | self.init_param()
248 |
249 | def init_param(self):
250 | nn.init.normal_(self.w_qs.weight, mean=0, std=np.sqrt(2.0 / (self.d_model + self.d_k)))
251 | nn.init.normal_(self.w_ks.weight, mean=0, std=np.sqrt(2.0 / (self.d_model + self.d_k)))
252 | nn.init.normal_(self.w_vs.weight, mean=0, std=np.sqrt(2.0 / (self.d_model + self.d_v)))
253 | nn.init.xavier_normal_(self.fc.weight)
254 |
255 | def forward(self, q, k, v, mask=None):
256 | d_k, d_v, n_head = self.d_k, self.d_v, self.n_head
257 |
258 | sz_b, len_q, _ = q.size()
259 | sz_b, len_k, _ = k.size()
260 | sz_b, len_v, _ = v.size()
261 |
262 | residual = q
263 |
264 | q = self.w_qs(q).view(sz_b, len_q, n_head, d_k)
265 | k = self.w_ks(k).view(sz_b, len_k, n_head, d_k)
266 | v = self.w_vs(v).view(sz_b, len_v, n_head, d_v)
267 |
268 | q = q.permute(2, 0, 1, 3).contiguous().view(-1, len_q, d_k) # (n*b) x lq x dk
269 | k = k.permute(2, 0, 1, 3).contiguous().view(-1, len_k, d_k) # (n*b) x lk x dk
270 | v = v.permute(2, 0, 1, 3).contiguous().view(-1, len_v, d_v) # (n*b) x lv x dv
271 |
272 | if mask is not None:
273 | mask = mask.repeat(n_head, 1, 1) # (n*b) x .. x ..
274 |
275 | output, attn = self.attention(q, k, v, mask=mask)
276 |
277 | output = output.view(n_head, sz_b, len_q, d_v)
278 | output = output.permute(1, 2, 0, 3).contiguous().view(sz_b, len_q, -1) # b x lq x (n*dv)
279 |
280 | output = self.dropout(self.fc(output))
281 | output = self.layer_norm(output + residual)
282 |
283 | return output, attn
284 |
285 |
286 | class PositionWiseFeedForward(nn.Module):
287 | """ A two-feed-forward-layer module """
288 |
289 | def __init__(self, d_in, d_hid, dropout=0.1):
290 | super().__init__()
291 | self.w_1 = nn.Conv1d(d_in, d_hid, 1) # position-wise
292 | self.w_2 = nn.Conv1d(d_hid, d_in, 1) # position-wise
293 | # self.w_1 = nn.Linear(d_in, d_hid)
294 | # self.w_2 = nn.Linear(d_hid, d_in)
295 | self.layer_norm = nn.LayerNorm(d_in)
296 | self.dropout = nn.Dropout(dropout)
297 |
298 | def forward(self, x):
299 | residual = x
300 | output = x.transpose(1, 2)
301 | output = self.w_2(torch.relu(self.w_1(output)))
302 | output = output.transpose(1, 2)
303 | output = self.dropout(output)
304 | output = self.layer_norm(output + residual)
305 | return output
306 |
307 |
308 | class ScaledDotProductAttention(nn.Module):
309 | """ Scaled Dot-Product Attention
310 | Attention(Q, K, V)=Softmax(\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right)V)
311 | """
312 |
313 | def __init__(self, temperature, attn_dropout=0.1):
314 | super().__init__()
315 | self.temperature = temperature
316 | self.dropout = nn.Dropout(attn_dropout)
317 | self.softmax = nn.Softmax(dim=2)
318 |
319 | def forward(self, q, k, v, mask=None):
320 | attn = torch.bmm(q, k.transpose(1, 2))
321 | attn = attn / self.temperature
322 |
323 | if mask is not None:
324 | # attn = attn.masked_fill(mask, -np.inf)
325 | attn = attn.masked_fill(mask, -1e10)
326 |
327 | attn = self.softmax(attn)
328 | attn = self.dropout(attn)
329 | output = torch.bmm(attn, v)
330 |
331 | return output, attn
332 |
--------------------------------------------------------------------------------
/widget/utils.py:
--------------------------------------------------------------------------------
1 | # -*- encoding: utf-8 -*-
2 | """
3 | @File : utils.py
4 | @Time : 2021/4/9 10:39
5 | @Author : Winton He
6 | @Email : hwd@mail.ustc.edu.cn
7 | @Software: PyCharm
8 | @Description:
9 | """
10 | import pickle as pkl
11 |
12 |
13 | def save_to_pkl(obj, pkl_file):
14 | # save to pkl_file
15 | print('save to {}...'.format(pkl_file))
16 | with open(pkl_file, 'wb') as f:
17 | pkl.dump(obj, f)
18 |
--------------------------------------------------------------------------------
/widget/vis.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @Author: winton
4 | @File: vis.py
5 | @Time: 2019/9/16 10:09 AM
6 | @Description:
7 | """
8 | import argparse
9 | import re
10 | import matplotlib.pyplot as plt
11 |
12 |
13 | def main(args):
14 | train_pattern = re.compile(r'INFO: Epoch \[\d*\] Train Loss: (\d*\.\d*), '
15 | r'Train Perplexity: (\d*\.\d*), Train Accuracy: (\d*\.\d*) %')
16 | valid_pattern = re.compile(r'INFO: Epoch \[\d*\] Valid Loss: (\d*\.\d*), '
17 | r'Valid Perplexity: (\d*\.\d*), Valid Accuracy: (\d*\.\d*) %')
18 | train_loss = []
19 | train_perplexity = []
20 | train_accuracy = []
21 | valid_loss = []
22 | valid_perplexity = []
23 | valid_accuracy = []
24 | with open(args.file, 'r') as f:
25 | for line in f.readlines():
26 | match = train_pattern.search(line.strip())
27 | if match:
28 | groups = match.groups()
29 | train_loss.append(float(groups[0]))
30 | train_perplexity.append(float(groups[1]))
31 | train_accuracy.append(float(groups[2]))
32 | match = valid_pattern.search(line.strip())
33 | if match:
34 | groups = match.groups()
35 | valid_loss.append(float(groups[0]))
36 | valid_perplexity.append(float(groups[1]))
37 | valid_accuracy.append(float(groups[2]))
38 | epoch = list(range(1, len(train_loss) + 1))
39 | # print(epoch)
40 | # print(train_loss)
41 | # print(valid_loss)
42 | # exit()
43 | fig = plt.figure()
44 | plt.subplots_adjust(wspace=0.4, hspace=0.4)
45 | ax1 = fig.add_subplot(2, 2, 1)
46 | ax2 = fig.add_subplot(2, 2, 2)
47 | ax3 = fig.add_subplot(2, 2, 3)
48 | ax1.plot(epoch, train_loss, marker='o', c='red', label='train')
49 | ax1.plot(epoch, valid_loss, marker='o', c='blue', label='valid')
50 | ax1.set_title('Loss')
51 | ax1.set_xlabel('Epoch')
52 | ax1.set_ylabel('Loss')
53 | ax1.legend(loc='best')
54 | ax2.plot(epoch, train_perplexity, marker='o', c='red', label='train')
55 | ax2.plot(epoch, valid_perplexity, marker='o', c='blue', label='valid')
56 | ax2.set_title('Perplexity')
57 | ax2.set_xlabel('Epoch')
58 | ax2.set_ylabel('Perplexity')
59 | ax2.legend(loc='best')
60 | ax3.plot(epoch, train_accuracy, marker='o', c='red', label='train')
61 | ax3.plot(epoch, valid_accuracy, marker='o', c='blue', label='valid')
62 | ax3.set_title('Accuracy')
63 | ax3.set_xlabel('Epoch')
64 | ax3.set_ylabel('Accuracy')
65 | ax3.legend(loc='best')
66 | plt.show()
67 |
68 |
69 | if __name__ == '__main__':
70 | _parser = argparse.ArgumentParser()
71 | _parser.add_argument('--file', required=True)
72 | _args = _parser.parse_args()
73 | exit(main(_args))
74 |
--------------------------------------------------------------------------------