code: def from_bytes(self, string):
          
          msg = srsly.msgpack_loads(gzip.decompress(string))
          self.attrs = msg["attrs"]
          self.strings = set(msg["strings"])
          lengths = numpy.fromstring(msg["lengths"], dtype="int32")
          flat_spaces = numpy.fromstring(msg["spaces"], dtype=bool)
          flat_tokens = numpy.fromstring(msg["tokens"], dtype="uint64")
          shape = (flat_tokens.size // len(self.attrs), len(self.attrs))
          flat_tokens = flat_tokens.reshape(shape)
          flat_spaces = flat_spaces.reshape((flat_spaces.size, 1))
          self.tokens = NumpyOps().unflatten(flat_tokens, lengths)
          self.spaces = NumpyOps().unflatten(flat_spaces, lengths)
          for tokens in self.tokens:
              assert len(tokens.shape) == 2, tokens.shape
          return self
docs: Deserialize the binder's annotations from a byte string.