o
    *j                     @   s   d dl mZmZmZ d dlZd dlmZmZ d dlm	Z	 d dl
mZmZ d dlmZ d dlmZ d dlmZ d d	lmZmZ ejejejd
G dd deZdS )    )AnyDictUnionN)	PipelinesPreprocessors)Model)!MachineReadingComprehensionOutput
OutputKeys)Pipeline)	PIPELINES)Preprocessor)FieldsTasks)module_namec                	       s   e Zd ZdZ				ddeeef dededef fd	d
Zdee	ee
f ef fddZdee	ee
f ef de	ee
f fddZ  ZS ))MachineReadingComprehensionForNERPipelinea  
    Pipeline for Pretrained Machine Reader (PMR) finetuned on Named Entity Recognition (NER)

    Examples:

    >>> from modelscope.pipelines import pipeline
    >>> pipeline_ins = pipeline(
    >>>        task=Tasks.machine_reading_comprehension,
    >>>        model='damo/nlp_roberta_machine-reading-comprehension_for-ner')
    >>> pipeline_ins('Soccer - Japan get lucky win , China in surprise defeat .')
    >>> {'ORG': [], 'PER': [], 'LOC': [' Japan', ' China'], 'MISC': []}
    NgpuTmodelpreprocessorconfig_filedevicec                    st   t  j|||||d t| jtsJ dtj |d u r)tj| jj	fi || _
dd | j
jD | _| j  d S )N)r   r   r   r   auto_collatez,please check whether model config exists in c                 S   s   g | ]}|qS  r   .0labelr   r   /var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/pipelines/nlp/machine_reading_comprehension_pipeline.py
<listcomp>3   s    zFMachineReadingComprehensionForNERPipeline.__init__.<locals>.<listcomp>)super__init__
isinstancer   r   Z	ModelFileZCONFIGURATIONr   Zfrom_pretrainedZ	model_dirr   Zlabel2querylabelseval)selfr   r   r   r   r   kwargs	__class__r   r   r      s$   
z2MachineReadingComprehensionForNERPipeline.__init__returnc                 K   sP   t   | jdi |}W d    n1 sw   Y  |d }t||d dS )Nspan_logits	input_ids)r'   r(   r   )torchZno_gradr   r   )r"   inputsZforward_paramsZoutputsr'   r   r   r   forward7   s   
z1MachineReadingComprehensionForNERPipeline.forwardr*   c                 C   s   |d dk}t | }dd | jD }|D ]-}| j|d  }|d }|d d }|d |d ||f }	| jj|	}
|| |
 q|S )Nr'   r   c                 S   s   i | ]}|g qS r   r   r   r   r   r   
<dictcomp>J   s    zIMachineReadingComprehensionForNERPipeline.postprocess.<locals>.<dictcomp>      r(   )r)   Znonzerolongr    r   	tokenizerdecodeappend)r"   r*   Z
span_predsZextracted_indicesresultindexr   startendZidsentityr   r   r   postprocessC   s   z5MachineReadingComprehensionForNERPipeline.postprocess)NNr   T)__name__
__module____qualname____doc__r   r   strr   r   r   r   r   r+   r8   __classcell__r   r   r$   r   r      s.    


r   )typingr   r   r   r)   Zmodelscope.metainfor   r   Zmodelscope.models.baser   Zmodelscope.outputsr   r	   Zmodelscope.pipelines.baser
   Zmodelscope.pipelines.builderr   Zmodelscope.preprocessorsr   Zmodelscope.utils.constantr   r   Zregister_moduleZmachine_reading_comprehensionZ%machine_reading_comprehension_for_nerr   r   r   r   r   <module>   s    