Dict[str, Любой] или Dict[str, поле] в pytext

#python #pytorch #pytext

#python #pytorch #pytext

Вопрос:

Я читаю документ 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:

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

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

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

Комментарии:

1. Отличный ответ. Спасибо!