Create README.md
Browse files
README.md
ADDED
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
language:
|
3 |
+
- de
|
4 |
+
datasets:
|
5 |
+
- unicamp-dl/mmarco
|
6 |
+
- deepset/germanquad
|
7 |
+
widget:
|
8 |
+
- text: "Python ist eine universelle, üblicherweise interpretierte, höhere Programmiersprache. Sie hat den Anspruch, einen gut lesbaren, knappen Programmierstil zu fördern. So werden beispielsweise Blöcke nicht durch geschweifte Klammern, sondern durch Einrückungen strukturiert."
|
9 |
+
|
10 |
+
# svalabs/mt5-large-german-query-gen-v1
|
11 |
+
This is a german [doc2query](https://arxiv.org/abs/1904.08375) model usable for document expansion to further boost search results by generating queries.
|
12 |
+
## Usage (code from doc2query/msmarco-14langs-mt5-base-v1)
|
13 |
+
```python
|
14 |
+
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
|
15 |
+
import torch
|
16 |
+
|
17 |
+
model_name = 'svalabs/mt5-large-german-query-gen-v1'
|
18 |
+
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
19 |
+
model = AutoModelForSeq2SeqLM.from_pretrained(model_name).to('cuda:0')
|
20 |
+
|
21 |
+
text = "qgen: Python ist eine universelle, üblicherweise interpretierte, höhere Programmiersprache. Sie hat den Anspruch, einen gut lesbaren, knappen Programmierstil zu fördern. So werden beispielsweise Blöcke nicht durch geschweifte Klammern, sondern durch Einrückungen strukturiert."
|
22 |
+
|
23 |
+
|
24 |
+
def create_queries(para):
|
25 |
+
input_ids = tokenizer.encode(para, return_tensors='pt').to('cuda:0')
|
26 |
+
with torch.no_grad():
|
27 |
+
# Here we use top_k / top_k random sampling. It generates more diverse queries, but of lower quality
|
28 |
+
sampling_outputs = model.generate(
|
29 |
+
input_ids=input_ids,
|
30 |
+
max_length=64,
|
31 |
+
do_sample=True,
|
32 |
+
top_p=0.95,
|
33 |
+
top_k=20,
|
34 |
+
num_return_sequences=10
|
35 |
+
)
|
36 |
+
|
37 |
+
# Here we use Beam-search. It generates better quality queries, but with less diversity
|
38 |
+
beam_outputs = model.generate(
|
39 |
+
input_ids=input_ids,
|
40 |
+
max_length=64,
|
41 |
+
num_beams=10,
|
42 |
+
no_repeat_ngram_size=2,
|
43 |
+
num_return_sequences=10,
|
44 |
+
early_stopping=False
|
45 |
+
)
|
46 |
+
|
47 |
+
print("Paragraph:")
|
48 |
+
print(para)
|
49 |
+
|
50 |
+
print("\nBeam Outputs:")
|
51 |
+
for i in range(len(beam_outputs)):
|
52 |
+
query = tokenizer.decode(beam_outputs[i], skip_special_tokens=True)
|
53 |
+
print(f'{i + 1}: {query}')
|
54 |
+
|
55 |
+
print("\nSampling Outputs:")
|
56 |
+
for i in range(len(sampling_outputs)):
|
57 |
+
query = tokenizer.decode(sampling_outputs[i], skip_special_tokens=True)
|
58 |
+
print(f'{i + 1}: {query}')
|
59 |
+
|
60 |
+
create_queries(text)
|
61 |
+
```
|
62 |
+
|
63 |
+
**Console Output**:
|
64 |
+
```
|
65 |
+
Paragraph:
|
66 |
+
qgen: Python ist eine universelle,
|
67 |
+
üblicherweise interpretierte,
|
68 |
+
höhere Programmiersprache.
|
69 |
+
Sie hat den Anspruch, einen gut lesbaren,
|
70 |
+
knappen Programmierstil zu fördern.
|
71 |
+
So werden beispielsweise Blöcke nicht durch geschweifte Klammern,
|
72 |
+
sondern durch Einrückungen strukturiert.
|
73 |
+
|
74 |
+
Beam Outputs:
|
75 |
+
1: ist Python eine universelle Programmiersprache
|
76 |
+
2: Welche Art von Programmiersprache ist Python?
|
77 |
+
3: Welche Programmiersprache ist Python?
|
78 |
+
4: Was ist Python-Programmierung?
|
79 |
+
5: welche sprache ist python
|
80 |
+
6: Was ist der Unterschied zwischen Python und Perl?
|
81 |
+
7: Was ist der Unterschied zwischen Python und Ruby?
|
82 |
+
8: Was ist der Unterschied zwischen Python und Java?
|
83 |
+
9: was ist python
|
84 |
+
10: was ist der unterschied zwischen c++ und python?
|
85 |
+
|
86 |
+
Sampling Outputs:
|
87 |
+
1: ist Python eine universelle Programmiersprache
|
88 |
+
2: Was ist der Zweck der Python-Sprache?
|
89 |
+
3: Was ist der Unterschied zwischen Python und Java?
|
90 |
+
4: welche sprache ist python
|
91 |
+
5: Was ist Python-Programmierung?
|
92 |
+
6: welcher teil der sprache ist python
|
93 |
+
7: Welche Art von Programmiersprache ist Python?
|
94 |
+
8: ist Python eine universelle Programmiersprache
|
95 |
+
9: warum Python eine universelle Programmiersprache ist
|
96 |
+
10: ist Python-Programmierung universell
|
97 |
+
```
|
98 |
+
|
99 |
+
### References
|
100 |
+
['Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks'](https://arxiv.org/abs/1908.10084).
|
101 |
+
['MS MARCO: A Human Generated MAchine Reading COmprehension Dataset'](https://arxiv.org/abs/1611.09268).
|
102 |
+
['GermanQuAD and GermanDPR: Improving Non-English Question Answering and Passage Retrieval'](https://arxiv.org/abs/2104.12741).
|
103 |
+
[google/mt5-large](https://huggingface.co/google/mt5-large)
|
104 |
+
[mMARCO dataset](https://github.com/unicamp-dl/mMARCO)
|
105 |
+
[doc2query](https://arxiv.org/abs/1904.08375)
|