حل مهام التعرف على الكيانات المسماة المعقدة (والمهمة الفرعية Nested NER) استنادًا إلى نماذج اللغات الكبيرة الحديثة (LLMs).
يجب عليك تكوين قواميس بايثون لكل نص وتسميات. دعونا نلقي نظرة على مثال مبسط من مجموعة التفاعلات الدوائية الروسية (RuDReC).
Это старый-добрый Римантадин, только в сиропе.
Римантадин - Drugname, сиропе - Drugform
Instruction
- وصف المهمة لـ LLMإنجليزي:
أنت تحل مشكلة NER. استخرج من الكلمات النصية المتعلقة بكل من الكيانات التالية: اسم الدواء، فئة الدواء، DI، ADR، البحث.
إنجليزي:
أنت تحل مشكلة NER. استخرج من الكلمات النصية المتعلقة بكل من الكيانات التالية: اسم الدواء، فئة الدواء، DI، ADR، البحث.
dictionary with labels
.يمكنك استخدام أحد الإصدارين المعتمدين.
raw_entities = {
'Drugname' : [ 'Римантадин' ],
'Drugclass' : [],
'Drugform' : [ 'сиропе' ],
'DI' : [],
'ADR' : [],
'Finding' : []
}
short_form_output = True ( available with Nerel - BIO and MultiCoNER )
raw_entities = {
'Drugname' : [ 'Римантадин' ],
'Drugform' : [ 'сиропе' ]
}
MODEL_INPUT_TEMPLATE
. MODEL_INPUT_TEMPLATE = {
'prompts_input' : "### Задание: {instruction} n ### Вход: {inp} n ### Ответ: " ,
'output_separator' : "Ответ: "
}
أو النسخة الإنجليزية
MODEL_INPUT_TEMPLATE = {
'prompts_input' : "### Task: {instruction} n ### Input: {inp} n ### Answer: " ,
'output_separator' : "Answer: "
}
Instruction
تلقائيًا instruction_ner/utils/instruct_dataset.py
class Instruction ( TypedDict ):
instruction : str
input : str
output : str
source : str
raw_entities : dict [ str , list [ str ]]
id : str
{ 'instruction' : 'Ты решаешь задачу NER. Извлеки из текста слова, относящиеся к каждой из следующих сущностей: Drugname, Drugclass, DI, ADR, Finding.' ,
'input' : 'Это старый-добрый Римантадин, только в сиропе. n ' ,
'output' : 'Drugname: Римантадин n Drugclass: n Drugform: сиропе n DI: n ADR: n Finding: n ' ,
'source' : '### Задание: Ты решаешь задачу NER. Извлеки из текста слова, относящиеся к каждой из следующих сущностей: Drugname, Drugclass, DI, ADR, Finding. n ### Вход: Это старый-добрый Римантадин, только в сиропе. n ### Ответ: ' ,
'raw_entities' : { 'Drugname' : [ 'Римантадин' ],
'Drugclass' : [],
'Drugform' : [ 'сиропе' ],
'DI' : [],
'ADR' : [],
'Finding' : []},
'id' : '1_2555494.tsv' }
instruction_ner/utils/
instructions
python medner / instruction_ner / train_instruct . py
- - config_file medner / instruction_ner / configs / mistral_7b . json
- - model_type mistral
- - dataset_name conll2003
- - max_instances - 1
- - push_to_hub True
- - hf_name_postfix _extended_instruction
instructions
إنشاء prediction.json
python medner / instruction_ner / inference_instruct . py
- - batch_size 16
- - dataset_name conll2003
- - model_type mistral
- - model_name poteminr / mistral - conll2003_extended_instruction
- - max_instances - 1
instruction_ner/metric.py
يمكنك استخدام الوظائف المنفذة مع مخرجات حساب المقاييس inference_instruct.
import pandas as pd
from utils . rudrec . rudrec_utis import ENTITY_TYPES
from metric import calculate_metrics_from_dataframe
prediction = pd . read_json ( 'prediction.json' )
prediction . head ( 3 )
بطاقة تعريف | مستخرج | هدف | |
---|---|---|---|
0 | 8_1443820.tsv | {'اسم الدواء': []، 'فئة الدواء': []، 'شكل الدواء': ['أقراص']، 'DI': []، 'ADR': []، 'العثور': []} | {'اسم الدواء': []، 'فئة الدواء': []، 'شكل الدواء': ['أقراص']، 'DI': []، 'ADR': []، 'العثور': []} |
1 | 1_2555494.tsv | {'اسم الدواء': ['ريمانتادين']، 'فئة الدواء': []، 'شكل الدواء': ['شراب']، 'DI': []، 'ADR': []، 'العثور': []} | {'اسم الدواء': ['ريمانتادين']، 'فئة الدواء': []، 'شكل الدواء': ['شراب']، 'DI': []، 'ADR': []، 'العثور': []} |
2 | 1_618967.tsv | {'اسم الدواء': []، 'فئة الدواء': []، 'شكل الدواء': []، 'DI': []، 'ADR': []، 'العثور': []} | {'اسم الدواء': []، 'فئة الدواء': []، 'شكل الدواء': []، 'DI': []، 'ADR': []، 'العثور': []} |
from metric import calculate_metrics_from_dataframe
metrics = calculate_metrics_from_dataframe ( prediction , ENTITY_TYPES )
{ 'Drugname' : { 'precision' : 0.9670250896057347 ,
'recall' : 0.9195637355146558 ,
'f1' : 0.9426974143955277 }, ...}
يمكنك استكشاف 5 أنواع من أخطاء النموذج:
مصفوفة الارتباك للاعترافات الخاطئة متاحة.
يعمل Instruction LLM for NER بشكل جيد على الكيانات المسطحة، ولكنه يعمل بشكل سيئ على مجموعات البيانات التي تحتوي على مجموعة علامات كبيرة وكيانات متداخلة.
وبالتالي، فإن LLM ونموذج التشفير ينتجان نتائج قابلة للمقارنة على مجموعات البيانات المسطحة مع أوقات تدريب واستدلال مختلفة بشكل لا يصدق.
ونماذج أخرى على التردد العالي مثل T5، Llama، Mistral:poteminr