3
d                 @   s   d dl mZmZ d dlmZ d dlmZmZ d dlm	Z	m
Z
mZmZmZmZ d dlmZ d dlmZ deeee eee ef dd	d
Zdeeeee eee ef dddZdeeee eeeeee ee ed
ddZdS )    )OptionalList)Floats2d)Modelwith_cpu)IDORTHPREFIXSUFFIXSHAPELOWER)registry)DocN)tok2vecexclusive_classesnOreturnc             C   s   t jdd}t jdd}t jdd}t jdd}t jdd}t jdd}tjd|in | | ? | ? }	|r||| jd	d
}
|	|
? }|jd|
 n,||| jd	d
}|	|? | ? }|jd| W dQ R X |jd|  |jd	| | |jd< |S )a1  
    Build a simple CNN text classifier, given a token-to-vector model as inputs.
    If exclusive_classes=True, a softmax non-linearity is applied, so that the
    outputs sum to 1. If exclusive_classes=False, a logistic non-linearity
    is applied instead, so that outputs are in the range [0, 1].
    layerszchain.v1zreduce_mean.v1zLogistic.v1z
Softmax.v1z	Linear.v1zlist2ragged.v1z>>r   )r   nIoutput_layerNr   multi_label)r   getr   define_operatorsZmaybe_get_dimset_refset_dimattrs)r   r   r   chainZreduce_meanLogisticSoftmaxLinearlist2raggedZcnnr   modelZlinear_layer r"   T/var/www/html/virt/lib/python3.6/site-packages/spacy_legacy/architectures/textcat.pyTextCatCNN_v1	   s&    	r$   )r   
ngram_sizeno_output_layerr   r   c             C   s   t jdd}t jdd}t jdd}t jdd}t jdd}tjd|iN ||}	||td|	? }
t|
|
j}
|s| r~| n| }|
t||j? }
W d Q R X |
jd	|	 |  |
jd
< |
S )Nr   zchain.v1zLogistic.v1zSparseLinear.v1zsoftmax_activation.v1zspacy.extract_ngrams.v1z>>)attrr   r   )	r   r   r   r   r   r   opsr   r   )r   r%   r&   r   r   r   ZSparseLinearZsoftmax_activationZextract_ngramsZsparse_linearr!   r   r"   r"   r#   TextCatBOW_v1)   s    r)   )
width
embed_sizepretrained_vectorsr   r%   window_size
conv_depthdropoutr   r   c	       ,      C   s"  t jdd}	t jdd}
t jdd}t jdd}t jdd}t jdd}t jdd}t jdd	}t jdd
}t jdd}t jdd}t jdd}t jdd}t jdd}t jdd}t jdd}t jdd}t jdd}t jdd}ttttttg}tj	|||d |	| ||j
t|dd}|	| d ||j
t|dd}|	| d ||j
t|dd}|	| d ||j
t|dd} tdd |||| gD }!|
|||||B |B | B || |!dd ? |j
td!? }"|r|| }#|"|#B }$| d }%n|"}$| }%|$||| |%dd"|||d#|| | |d d$  dd ? | ? |d%? }&|&| ? || ? | ? ||| | d&? ||| d&? |d'? }'||||d(d)}(|r|d nd })|r|||)d&}*n|||)d&|d'? | ? }*|(|'B |*? }+|+jd*|& W d Q R X |+jd+d(k	r |+jd+| |+jd,|(jd, | |+jd-< |+S ).Nr   zHashEmbed.v1zspacy.FeatureExtractor.v1z	Maxout.v1zspacy.StaticVectors.v1z
Softmax.v1z	Linear.v1zParametricAttention.v1z
Dropout.v1zLogistic.v1Zarchitectureszspacy.TextCatBOW.v1zlist2ragged.v1zchain.v1zconcatenate.v1zclone.v1zreduce_sum.v1zwith_array.v1z
uniqued.v1zresidual.v1zexpand_window.v1)z>>|z**
   )r   ZnVcolumnr/   seed            c             s   s   | ]}|j d V  qdS )r   N)Zget_dim).0Zlayerr"   r"   r#   	<genexpr>{   s    z%TextCatEnsemble_v1.<locals>.<genexpr>T)r   r   	normalize)r2   )r:   )r-      )pad)r   r   g        F)r   r%   r   r&   r   r   r   r   )r   r   r   r   r	   r
   r   r   r   r   indexsumr   Zhas_dimr   Zget_refr   ),r*   r+   r,   r   r%   r-   r.   r/   r   Z	HashEmbedZFeatureExtractorZMaxoutZStaticVectorsr   r   ZParametricAttentionZDropoutr   Zbuild_bow_text_classifierr    r   ZconcatenatecloneZ
reduce_sumZ
with_arrayZuniquedZresidualZexpand_windowcolslowerprefixsuffixshapeZwidth_nIZtrained_vectorsZstatic_vectorsZvector_layerZvectors_widthr   Z	cnn_modelZlinear_modelZ	nO_doubler   r!   r"   r"   r#   TextCatEnsemble_v1A   s    

	<rE   )N)N)N)typingr   r   Zthinc.typesr   Z	thinc.apir   r   Zspacy.attrsr   r   r	   r
   r   r   Z
spacy.utilr   Zspacy.tokensr   boolintr$   r)   floatrE   r"   r"   r"   r#   <module>   s    " 