Как я могу определить функцию маски на основе значений списка в Pytorch

#pytorch #huggingface-transformers

#пыторч #обнимашки-трансформеры

Вопрос:

Я хочу замаскировать тензор на основе его значений. В следующей функции, если я передаю диапазон (вторая часть), это работает, но я хочу иметь список с различными значениями prompt_ids (3, 8, 9, 30). Но это не работает и выдает ошибку.

 RuntimeError: Boolean value of Tensor with more than one value is ambiguous  

Функция:

 def get_prompt_token_fn(self):  if self.prompt_ids:  return lambda x: x in self.prompt_ids  else:  return lambda x: (xgt;=self.id_offset)amp;(xlt;self.id_offset self.length)  

В чем проблема и как я могу ее решить?

Ответ №1:

Внутри pytorch 1.10 есть isin функция, которая возвращает логический массив, основанный на условии, что элементы первого массива находятся во втором массиве. Для версий ниже, чем it, вы можете реализовать его следующим образом:

 def isin(ar1, ar2):  return (ar1[..., None] == ar2).any(-1)