iT邦幫忙

0

加速巢狀for迴圈

我想請問有什麼方法在python語法之下可以加速巢狀for迴圈的

def Compute(testdata,FAQ):
    scoreboard=[]
    for i in tqdm(range(1035)):
        encoded_dict1=tokenizer.encode_plus(
                    testdata[i][1],                    
                    add_special_tokens = True, 
                    max_length = 100,          
                    pad_to_max_length = True,
                    return_attention_mask = True,   
                    return_tensors = 'pt', 
                    truncation=True    
            )
        invector=model(encoded_dict1['input_ids'],encoded_dict1['attention_mask'],'cls')
    
        faq_score=[]
        for j in tqdm(range(5821)):
            encoded_dict2=tokenizer.encode_plus(
                        FAQ[j][2],                    
                        add_special_tokens = True, 
                        max_length = 100,          
                        pad_to_max_length = True,
                        return_attention_mask = True,   
                        return_tensors = 'pt',  
                        truncation=True   
                    )
            faqvector=model(encoded_dict2['input_ids'],encoded_dict2['attention_mask'],'cls')
            score=float(torch.cosine_similarity(faqvector,invector))
            faq_score.append([FAQ[j][1],score]) 
            #print(i,j) 
        scoreboard.append(faq_score)
    return scoreboard
看更多先前的討論...收起先前的討論...
淺水員 iT邦大師 6 級 ‧ 2021-04-09 01:14:57 檢舉
先給程式碼會比較好討論
通常速度太慢多半是演算法的問題
把 f(n) 優化成 f(1)的方法吧,或是用遞迴
程式碼我放上去了
現在的問題就是兩層for迴圈他會做1035*5821次
https://medium.com/%E7%A8%8B%E5%BC%8F%E4%B9%BE%E8%B2%A8/python-%E4%B8%A6%E8%A1%8C%E8%88%87%E5%B9%B3%E8%A1%8C-%E5%BD%B1%E5%88%86%E8%BA%AB%E4%B9%8B%E8%A1%93-2b8238916297
我有查到python for loop平行化,但是他舉的例子都是單獨的迴圈
淺水員 iT邦大師 6 級 ‧ 2021-04-09 11:16:01 檢舉
先預存每個 faqvector 的值到陣列中
之後計算時直接從這個陣列取值就好
這樣可以省下5821*1035個 tokenizer.encode_plus 跟 model 的運算
好的,我再嘗試看看,謝謝你
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
黃彥儒
iT邦高手 1 級 ‧ 2021-04-08 22:14:38

parallel

1
japhenchen
iT邦超人 1 級 ‧ 2021-04-09 10:52:59

.恕改

我要發表回答

立即登入回答