Instructions to use nvidia/dragon-multiturn-query-encoder with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use nvidia/dragon-multiturn-query-encoder with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("feature-extraction", model="nvidia/dragon-multiturn-query-encoder")# Load model directly from transformers import AutoTokenizer, AutoModel tokenizer = AutoTokenizer.from_pretrained("nvidia/dragon-multiturn-query-encoder") model = AutoModel.from_pretrained("nvidia/dragon-multiturn-query-encoder", device_map="auto") - Notebooks
- Google Colab
- Kaggle
| import json | |
| def get_query(messages, num_turns=5): | |
| ## convert query into a format as follows: | |
| ## user: {user}\nagent: {agent}\nuser: {user} | |
| query = "" | |
| for item in messages[-num_turns:]: | |
| item['role'] = item['role'].replace("assistant", "agent") | |
| query += "{}: {}\n".format(item['role'], item['content']) | |
| query = query.strip() | |
| return query | |
| def get_query_with_topic(messages, topic, num_turns=3): | |
| ## convert query into a format as follows: | |
| ## user: this is a question about {topic}. {user}\nagent: {agent}\nuser: this is a question about {topic}. {user} | |
| query = "" | |
| for item in messages[-num_turns:]: | |
| item['role'] = item['role'].replace("assistant", "agent") | |
| if item['role'] == 'user': | |
| query += "{}: this is a question about {}. {}\n".format(item['role'], topic, item['content']) | |
| else: | |
| query += "{}: {}\n".format(item['role'], item['content']) | |
| query = query.strip() | |
| return query | |
| def get_data_for_evaluation(input_datapath, document_datapath, dataset_name): | |
| print('reading evaluation data from %s' % input_datapath) | |
| with open(input_datapath, "r") as f: | |
| input_list = json.load(f) | |
| print('reading documents from %s' % document_datapath) | |
| with open(document_datapath, "r") as f: | |
| documents = json.load(f) | |
| eval_data = {} | |
| for item in input_list: | |
| """ | |
| We incorporate topic information for topiocqa and inscit datasets: | |
| query = get_query_with_topic(item['messages'], item['topic']) | |
| """ | |
| query = get_query(item['messages']) | |
| doc_id = item['document'] | |
| gold_idx = item['ground_truth_ctx']['index'] | |
| if dataset_name == 'qrecc': | |
| """ | |
| The 'gold context' for the qrecc dataset is obtained based on the word | |
| overlaps between gold answer and each context in the document, which might | |
| not be the real gold context. | |
| To improve the evaluation quality of this dataset, | |
| we further add the answer of the query into the 'gold context' | |
| to ensure the 'gold context' is the most relevant chunk to the query. | |
| Note that this is just for the retrieval evaluation purpose, we do not | |
| add answer to the context for the ChatRAG evaluation. | |
| """ | |
| answer = item['answers'][0] | |
| documents[doc_id][gold_idx] += " || " + answer | |
| if doc_id not in eval_data: | |
| eval_data[doc_id] = [{"query": query, "gold_idx": gold_idx}] | |
| else: | |
| eval_data[doc_id].append({"query": query, "gold_idx": gold_idx}) | |
| return eval_data, documents | |