mirror of
				https://github.com/explosion/spaCy.git
				synced 2025-11-04 09:57:26 +03:00 
			
		
		
		
	* Use isort with Black profile * isort all the things * Fix import cycles as a result of import sorting * Add DOCBIN_ALL_ATTRS type definition * Add isort to requirements * Remove isort from build dependencies check * Typo
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from typing import List, Tuple, cast
 | 
						|
 | 
						|
from thinc.api import (
 | 
						|
    Linear,
 | 
						|
    Logistic,
 | 
						|
    Maxout,
 | 
						|
    Model,
 | 
						|
    chain,
 | 
						|
    concatenate,
 | 
						|
    glorot_uniform_init,
 | 
						|
    list2ragged,
 | 
						|
    reduce_first,
 | 
						|
    reduce_last,
 | 
						|
    reduce_max,
 | 
						|
    reduce_mean,
 | 
						|
    with_getitem,
 | 
						|
)
 | 
						|
from thinc.types import Floats2d, Ragged
 | 
						|
 | 
						|
from ...tokens import Doc
 | 
						|
from ...util import registry
 | 
						|
from ..extract_spans import extract_spans
 | 
						|
 | 
						|
 | 
						|
@registry.layers("spacy.LinearLogistic.v1")
 | 
						|
def build_linear_logistic(nO=None, nI=None) -> Model[Floats2d, Floats2d]:
 | 
						|
    """An output layer for multi-label classification. It uses a linear layer
 | 
						|
    followed by a logistic activation.
 | 
						|
    """
 | 
						|
    return chain(Linear(nO=nO, nI=nI, init_W=glorot_uniform_init), Logistic())
 | 
						|
 | 
						|
 | 
						|
@registry.layers("spacy.mean_max_reducer.v1")
 | 
						|
def build_mean_max_reducer(hidden_size: int) -> Model[Ragged, Floats2d]:
 | 
						|
    """Reduce sequences by concatenating their mean and max pooled vectors,
 | 
						|
    and then combine the concatenated vectors with a hidden layer.
 | 
						|
    """
 | 
						|
    return chain(
 | 
						|
        concatenate(
 | 
						|
            cast(Model[Ragged, Floats2d], reduce_last()),
 | 
						|
            cast(Model[Ragged, Floats2d], reduce_first()),
 | 
						|
            reduce_mean(),
 | 
						|
            reduce_max(),
 | 
						|
        ),
 | 
						|
        Maxout(nO=hidden_size, normalize=True, dropout=0.0),
 | 
						|
    )
 | 
						|
 | 
						|
 | 
						|
@registry.architectures("spacy.SpanCategorizer.v1")
 | 
						|
def build_spancat_model(
 | 
						|
    tok2vec: Model[List[Doc], List[Floats2d]],
 | 
						|
    reducer: Model[Ragged, Floats2d],
 | 
						|
    scorer: Model[Floats2d, Floats2d],
 | 
						|
) -> Model[Tuple[List[Doc], Ragged], Floats2d]:
 | 
						|
    """Build a span categorizer model, given a token-to-vector model, a
 | 
						|
    reducer model to map the sequence of vectors for each span down to a single
 | 
						|
    vector, and a scorer model to map the vectors to probabilities.
 | 
						|
 | 
						|
    tok2vec (Model[List[Doc], List[Floats2d]]): The tok2vec model.
 | 
						|
    reducer (Model[Ragged, Floats2d]): The reducer model.
 | 
						|
    scorer (Model[Floats2d, Floats2d]): The scorer model.
 | 
						|
    """
 | 
						|
    model = chain(
 | 
						|
        cast(
 | 
						|
            Model[Tuple[List[Doc], Ragged], Tuple[Ragged, Ragged]],
 | 
						|
            with_getitem(
 | 
						|
                0, chain(tok2vec, cast(Model[List[Floats2d], Ragged], list2ragged()))
 | 
						|
            ),
 | 
						|
        ),
 | 
						|
        extract_spans(),
 | 
						|
        reducer,
 | 
						|
        scorer,
 | 
						|
    )
 | 
						|
    model.set_ref("tok2vec", tok2vec)
 | 
						|
    model.set_ref("reducer", reducer)
 | 
						|
    model.set_ref("scorer", scorer)
 | 
						|
    return model
 |