Return feature names.
        This is a best-effort function which tries to reconstruct feature
        names based on what it has seen so far.

        HashingVectorizer uses a signed hash function. If always_signed is True,
        each term in feature names is prepended with its sign. If it is False,
        signs are only shown in case of possible collisions of different sign.

        You probably want always_signed=True if you're checking
        unprocessed classifier coefficients, and always_signed=False
        if you've taken care of :attr:`column_signs_`.

def get_feature_names(self, always_signed=True):
        # type: (bool) -> FeatureNames
        """
        Return feature names.
        This is a best-effort function which tries to reconstruct feature
        names based on what it has seen so far.

        HashingVectorizer uses a signed hash function. If always_signed is True,
        each term in feature names is prepended with its sign. If it is False,
        signs are only shown in case of possible collisions of different sign.

        You probably want always_signed=True if you're checking
        unprocessed classifier coefficients, and always_signed=False
        if you've taken care of :attr:`column_signs_`.
        """
        return self.unhasher.get_feature_names(
            always_signed=always_signed,
            always_positive=self._always_positive(),
        )