File size: 4,153 Bytes
886800d
 
 
 
 
 
 
d4d9982
ce78d29
674da47
4dcea13
2bf7408
438f7c9
 
 
 
 
 
 
 
 
 
 
4dcea13
438f7c9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4dcea13
438f7c9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3649e3b
0c5fc46
3649e3b
 
 
 
 
 
 
 
 
 
 
0c5fc46
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4cee226
0c5fc46
 
 
 
 
 
 
 
 
 
 
 
 
 
2519c95
 
323990f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
---
license: unlicense
language:
- ru
tags:
- PyTorch
- e-commerce
- transformers.js
pipeline_tag: fill-mask
widget:
- text: электроника зарядка [MASK] USB
library_name: transformers
---

A model for solving the problem of missing words in search queries. The model uses the context of the query to generate possible words that could be missing.


```python

## don't forget
# pip install protobuf sentencepiece

from transformers import pipeline
unmasker = pipeline("fill-mask", model="fkrasnov2/COLD2", device="cuda")
unmasker("электроника зарядка [MASK] USB")

[{'score': 0.3712620437145233,
  'token': 1131,
  'token_str': 'автомобильная',
  'sequence': 'электроника зарядка автомобильная usb'},
 {'score': 0.12239563465118408,
  'token': 7436,
  'token_str': 'быстрая',
  'sequence': 'электроника зарядка быстрая usb'},
 {'score': 0.046715956181287766,
  'token': 5819,
  'token_str': 'проводная',
  'sequence': 'электроника зарядка проводная usb'},
 {'score': 0.031308457255363464,
  'token': 635,
  'token_str': 'универсальная',
  'sequence': 'электроника зарядка универсальная usb'},
 {'score': 0.02941182069480419,
  'token': 2371,
  'token_str': 'адаптер',
  'sequence': 'электроника зарядка адаптер usb'}]

```

Coupled prepositions can be used to improve tokenization.


```python
unmasker("одежда женское [MASK] для_праздника")

[{'score': 0.9355553984642029,
  'token': 503,
  'token_str': 'платье',
  'sequence': 'одежда женское платье для_праздника'},
 {'score': 0.011321154423058033,
  'token': 615,
  'token_str': 'кольцо',
  'sequence': 'одежда женское кольцо для_праздника'},
 {'score': 0.008672593161463737,
  'token': 993,
  'token_str': 'украшение',
  'sequence': 'одежда женское украшение для_праздника'},
 {'score': 0.0038903721142560244,
  'token': 27100,
  'token_str': 'пончо',
  'sequence': 'одежда женское пончо для_праздника'},
 {'score': 0.003703165566548705,
  'token': 453,
  'token_str': 'белье',
  'sequence': 'одежда женское белье для_праздника'}]

```

## For transformers.js, it turned out that the ONNX version of the model was required.


```python 

from transformers import AutoTokenizer
from optimum.onnxruntime import ORTModelForMaskedLM

tokenizer = AutoTokenizer.from_pretrained("fkrasnov2/COLD2") 
model = ORTModelForMaskedLM.from_pretrained("fkrasnov2/COLD2", file_name='model.onnx') 

```
## You can also run and use the model straight from your browser.

```
index.html
```

```html
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Mask fill</title>
    <link rel="stylesheet" href="styles.css">
    <script src="main.js" type="module" defer></script>
</head>
<body>
    <div class="container">
        <textarea id="long-text-input" placeholder="Enter search query with [MASK]"></textarea>
        <button id="generate-button">
            Заполнить маску
        </button>
        <div id="output-div"></div>
    </div>
</body>
</html>
```


```
main.js
```

```javascript
import { pipeline } from 'https://cdn.jsdelivr.net/npm/@huggingface/[email protected]';

const longTextInput = document.getElementById('long-text-input');
const output = document.getElementById('output-div');
const generateButton = document.getElementById('generate-button');

const pipe = await pipeline(
    'fill-mask', // task
    'fkrasnov2/COLD2' // model 
);

generateButton.addEventListener('click', async () => {

    const input = longTextInput.value;
    const result = await pipe(input);

    output.innerHTML = result[0].sequence;
    output.style.display = 'block';
});
```

![Browser page](https://huggingface.co./fkrasnov2/COLD2/resolve/main/browserv4.png)