In your code, notice that the
precision_score(y_test, y_pred)
is equivalent to
precision_score(y_test, y_pred, pos_label=1, average='binary').
'binary':
There report results for the class are specified by pos_label. This is applicable only if targets (y_{true,pred}) are binary.
Here labels are not binary, but probably one-hot encoded. There are other options which should work with your data:
For example:
precision_score(y_test, y_pred, average=None)
will return the precision scores for each class, while
precision_score(y_test, y_pred, average='micro')
will return the total ratio of tp/(tp + fp)
The pos_label argument will be ignored if you choose another average option than binary.