|
--- |
|
language: vi |
|
widget: |
|
- text: >- |
|
Chiến tranh Lạnh (1947-1991, tiếng Anh: Cold War) là chỉ đến sự căng thẳng địa chính trị |
|
và xung đột ý thức hệ đỉnh điểm giữa hai siêu cường (đứng đầu và đại diện hai khối đối lập) |
|
: Hoa Kỳ (chủ nghĩa tư bản) và Liên Xô (chủ nghĩa xã hội). |
|
license: apache-2.0 |
|
pipeline_tag: text2text-generation |
|
--- |
|
|
|
# doc2query-viT5 |
|
|
|
This is a [doc2query](https://arxiv.org/abs/1904.08375) model based on [viT5](https://huggingface.co/VietAI/vit5-base) |
|
|
|
It can be used for: |
|
- **Document expansion**: You generate for your paragraphs 20-40 queries and index the paragraphs and the generates queries in a standard BM25 index like Elasticsearch, OpenSearch, or Lucene. The generated queries help to close the lexical gap of lexical search, as the generate queries contain synonyms. Further, it re-weights words giving important words a higher weight even if they appear seldomn in a paragraph. |
|
- **Domain Specific Training Data Generation**: It can be used to generate training data to learn an embedding model. |
|
|
|
## Usage |
|
```python |
|
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM |
|
import torch |
|
|
|
model_name = 'r1ck/doc2query-viT5' |
|
tokenizer = AutoTokenizer.from_pretrained(model_name) |
|
model = AutoModelForSeq2SeqLM.from_pretrained(model_name) |
|
|
|
text = "Chiến tranh Lạnh (1947-1991, tiếng Anh: Cold War) là chỉ đến sự căng thẳng địa chính trị và xung đột ý thức hệ đỉnh điểm giữa hai siêu cường (đứng đầu và đại diện hai khối đối lập): Hoa Kỳ (chủ nghĩa tư bản) và Liên Xô (chủ nghĩa xã hội)." |
|
|
|
|
|
def create_queries(para): |
|
input_ids = tokenizer.encode(para, return_tensors='pt') |
|
with torch.no_grad(): |
|
# Here we use top_k / top_k random sampling. It generates more diverse queries, but of lower quality |
|
sampling_outputs = model.generate( |
|
input_ids=input_ids, |
|
max_length=64, |
|
do_sample=True, |
|
top_p=0.95, |
|
top_k=10, |
|
num_return_sequences=5 |
|
) |
|
|
|
# Here we use Beam-search. It generates better quality queries, but with less diversity |
|
beam_outputs = model.generate( |
|
input_ids=input_ids, |
|
max_length=64, |
|
num_beams=5, |
|
no_repeat_ngram_size=2, |
|
num_return_sequences=5, |
|
early_stopping=True |
|
) |
|
|
|
|
|
print("Paragraph:") |
|
print(para) |
|
|
|
print("\nBeam Outputs:") |
|
for i in range(len(beam_outputs)): |
|
query = tokenizer.decode(beam_outputs[i], skip_special_tokens=True) |
|
print(f'{i + 1}: {query}') |
|
|
|
print("\nSampling Outputs:") |
|
for i in range(len(sampling_outputs)): |
|
query = tokenizer.decode(sampling_outputs[i], skip_special_tokens=True) |
|
print(f'{i + 1}: {query}') |
|
|
|
create_queries(text) |
|
|
|
``` |
|
|
|
**Note:** `model.generate()` is non-deterministic for top_k/top_n sampling. It produces different queries each time you run it. |
|
|
|
## Training |
|
This model fine-tuned [VietAI/vit5-base](https://huggingface.co/VietAI/vit5-base) on 30k vietnamese passage-question pairs |
|
|