outputs = self.model(**inputs)中的 ** 是什么作用?

定义模型的输入参数 字典形式

inputs = {‘input_ids’: batch[0],# 第一行
‘attention_mask’: batch[1],# 第二行
‘intent_label_ids’: batch[3],
‘slot_labels_ids’: batch[4]}
if self.args.model_type != ‘distilbert’:
inputs[‘token_type_ids’] = batch[2]

得到模型输出

outputs = self.model(**inputs)

Python中的list(列表)和dict(字典)变量前加星号(*)的作用

list:变量名前加一个星号(*)

作用1:将列表解开成为几个独立的参数,传入函数。
举例:

list1 = [1, 2, 3] 
print(*list1)

# 输出结果
1 2 3

作用2:作用与二位列表,按行拆解二位列表。
举例:

#作用于二维列表
array = [[1, 2, 3],
         [4, 5, 6]
         ]
print(array)
print(*array)
print(type(array))
print(type(*array))
 
输出结果:
[[1, 2, 3], [4, 5, 6]]
[1, 2, 3] [4, 5, 6]
<class 'list'>
 
print(type(*array))
TypeError: type() takes 1 or 3 arguments

dict:变量名前加两个星号(**)

作用:** 会把接收到的参数存入一个字典。
举例:

def print_1(input_ids, attention_mask, token_type_ids, intent_label_ids, slot_labels_ids):
    print("input_ids:",input_ids)
    print("attention_mask:", attention_mask)
    print("token_type_ids:", token_type_ids)
    print("intent_label_ids:", intent_label_ids)
    print("slot_labels_ids:", slot_labels_ids)
 
if __name__ == '__main__':
 
    batch = [ [ [11],
                [22]],
              [ [33],
                [44]],
              [ [55],
                [66]],
              [ [77],
                [88]],
              [ [99],
                [00]]       ]
    inputs = {'input_ids': batch[0],  # 第一行
              'attention_mask': batch[1],  # 第二行
              'token_type_ids': batch[2],
              'intent_label_ids': batch[3],
              'slot_labels_ids': batch[4]   }
    print_1(**inputs)
    print(inputs)

输出结果:

input_ids: [[11], [22]]
attention_mask: [[33], [44]]
token_type_ids: [[55], [66]]
intent_label_ids: [[77], [88]]
slot_labels_ids: [[99], [0]]
{'input_ids': [[11], [22]], 
'attention_mask': [[33], [44]], 
'token_type_ids': [[55], [66]], 
'intent_label_ids': [[77], [88]], 
'slot_labels_ids': [[99], [0]]}

参考链接:https://blog.csdn.net/weixin_51130521/article/details/124191097

你可能感兴趣的:(python,NLP,python,开发语言)