o
    e                     @   s`   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlZd dl	Z	dd Z
dd ZdS )    N)OrderedDictc           	      C   s   t j| dd}t }ddddddd	d
dddddd}| D ]H\}}|dd dkr=d|vr=d|vr=|jdkr=|dd}| D ]
\}}|||}qAd|vr\d|vr\d|vr\d| }t|j	
 ||< q|S )z
    Args:
    weight_path (str): HF weight file path
    class_name (str): The class name used by the user
    Return:
    paddle_state_dict (dict): PaddleNLP state_dict
    cpu)Zmap_locationzembeddings.layer_normzencoder.layerszself_attn.q_projzself_attn.k_projzself_attn.v_projzself_attn.out_projZlinear1Zlinear2Znorm1Znorm2zpredictions.decoder_zpredictions.transformzpredictions.layer_norm)zembeddings.LayerNormzencoder.layerzattention.self.queryzattention.self.keyzattention.self.valuezattention.output.densezintermediate.densezoutput.densezattention.output.LayerNormzoutput.LayerNormzpredictions.decoder.zpredictions.transform.densezpredictions.transform.LayerNormiNz.weightz.embeddings.z.LayerNorm.   r      zbert.zcls.Z
classifier)torchloadr   itemsndimZ	transposereplacepaddleZ	to_tensordatanumpy)	Zweight_path
class_nameZpytorch_state_dictZpaddle_state_dictZhf_to_paddlekvZhf_nameZpaddle_name r   HD:\Projects\ConvertPro\env\Lib\site-packages\x2paddle/paddlenlp/utils.pyconvert_weight_from_hf   s6   
r   c           
      C   s&  ddddddddddd	d
dd}t j| dd}t|}W d   n1 s'w   Y  |}| D ]\}}||v r>|||< q2|dkrE|S |g|d}	| D ]\}}|dks[|dkr\qO|j|	|< qO| D ]\}}||	v rr||	|< qfd|v rd|	v rt|d |	d< |	S d|	v rt|d |	d< |	S )a  
    Args:
    config_path (str): HF config file path
    derived_parameters_dict (dict): The parameter dict required by the init function to initialize
    class_name (str): The class name used by the user
    Return:
    derived_config (dict): PaddleNLP config
    iDq  i      i   Zgelug?i   r   g{Gz?r   Z	BertModel)Z
vocab_sizeZhidden_sizeZnum_hidden_layersZnum_attention_headsZintermediate_sizeZ
hidden_actZhidden_dropout_probZattention_probs_dropout_probZmax_position_embeddingsZtype_vocab_sizeZinitializer_rangeZpad_token_id
init_classzutf-8)encodingN)Z	init_argsr   selfZbertZid2labelZnum_classesZnum_choices)ioopenjsonr   r   defaultlen)
Zconfig_pathZderived_parameters_dictr   Zdefault_configfZinit_kwargsZbase_configr   r   Zderived_configr   r   r   convert_config_from_hfC   sP   
r   )copyr   r   ossixinspectcollectionsr   r   r   r   r   r   r   r   r   <module>   s   (