Dict [str, Any] или Dict [str, Field] в pytext - PullRequest
1 голос
/ 07 апреля 2019

Я читаю документ pytext (фреймворк моделирования NLP, построенный на PyTorch), и этот простой метод from_config, фабричный метод для создания компонента из конфигурации, имеет строки типа Dict[str, Field] = {ExtraField.TOKEN_RANGE: RawField()}.

@classmethod
def from_config(cls, config: Config, model_input_config, target_config, **kwargs):
    model_input_fields: Dict[str, Field] = create_fields(
      model_input_config,
        {
            ModelInput.WORD_FEAT: TextFeatureField,
            ModelInput.DICT_FEAT: DictFeatureField,
            ModelInput.CHAR_FEAT: CharFeatureField,
        },
    )
    target_fields: Dict[str, Field] = {WordLabelConfig._name: WordLabelField.from_config(target_config)}
    extra_fields: Dict[str, Field] = {ExtraField.TOKEN_RANGE: RawField()}
    kwargs.update(config.items())
    return cls(
        raw_columns=config.columns_to_read,
        targets=target_fields,
        features=model_input_fields,
        extra_fields=extra_fields,
        **kwargs,
    )

и

    def preprocess(self, data: List[Dict[str, Any]]):
        tokens = []
        for row in data:
            tokens.extend(self.preprocess_row(row))
        return [{"text": tokens}]

Как в словаре могут быть ключи с 2 элементами? Что именно это?

Буду признателен за любую указку!

1 Ответ

1 голос
/ 07 апреля 2019

То, что вы видите, это аннотации типа Python. Вы можете прочитать о синтаксисе, дизайне и обосновании здесь и о фактической реализации (возможные типы, как создавать собственные и т. Д.) здесь . Обратите внимание, что здесь List и Dict в верхнем регистре - Dict[str, Any] предназначен для создания типа «словаря со строковыми ключами и любыми значениями», а не для доступа к экземпляру этого типа.

Они являются необязательными и по умолчанию не используются ни для чего (поэтому вы можете просто игнорировать их при чтении кода, потому что Python также делает это). Однако есть такие инструменты, как mypy , которые могут интерпретировать аннотации этих типов и проверять, являются ли они согласованными.

Я не знаю наверняка, как они используются в torchtext - Я сам не пользуюсь им, и я не нашел ничего быстрого поиска в документации - но они, вероятно, полезны для разработчиков, которые используют некоторые специальные инструментов. Но они также могут быть полезны для вас! С вашей точки зрения, они лучше всего воспринимаются как комментарии , а не как код. Читая подпись preprocess, вы знаете, что data должно быть list из dict с ключами str и любым типом значения. Если в вашем коде есть ошибки и вы обнаружите, что data - это str, вы точно знаете, что это ошибка (возможно, не единственная).

...