Я пытаюсь вычислить вероятности слов в списке токенизированных слов в соответствии с языковой моделью, и мне нужна необычная индексация.
Мои входные данные проиллюстрированы игрушечным примером ниже :
token_list: n_words x max_tokenization_length (например, три слова, где максимальная длина токенизации равна 3)
pxhs: n_words x (max_tokenization_length + 1) x |vocabulary|, (например, три слова, четыре набора логитов для токенов 3+1 и словарь размером 1000)
next_word_token_ids: список токенов, которые составляют новое слово (например, все токены, начинающиеся с пробела).
На практике я хочу индексировать, заменяя первый Pad_token_id новыми идентификаторами токенов слов, а затем ничего (это не работает как индекс, просто иллюстрирую):
Я пытаюсь вычислить вероятности слов в списке токенизированных слов в соответствии с языковой моделью, и мне нужна необычная индексация. Мои входные данные проиллюстрированы игрушечным примером ниже : [list] [*]token_list: n_words x max_tokenization_length (например, три слова, где максимальная длина токенизации равна 3) [*]pxhs: n_words x (max_tokenization_length + 1) x |vocabulary|, (например, три слова, четыре набора логитов для токенов 3+1 и словарь размером 1000) [*]next_word_token_ids: список токенов, которые составляют новое слово (например, все токены, начинающиеся с пробела). [/list] [code]pxhs = torch.rand((3,4,1000))
new_word_token_ids = [0,1,2,3,5] [/code] Желаемый результат — это список вероятностей слов длиной 3, рассчитанный следующим образом: [code]word 1: pxhs[0, 0, 120] * pxhs[0, 1, new_word_token_ids].sum() word 2: pxhs[1, 0, 131] * pxhs[1, 1, 132] * pxhs[1, 2, new_word_token_ids].sum() word 3: pxhs[2, 0, 140] * pxhs[2, 1, 141] * pxhs[2, 2, 142] * pxhs[2, 3, new_word_token_ids].sum() [/code] На практике я хочу индексировать, заменяя первый Pad_token_id новыми идентификаторами токенов слов, а затем ничего (это не работает как индекс, просто иллюстрирую): [code]actual_idx = [ [[120], new_word_token_ids, [None], [None]], [[131], [132], new_word_token_ids, [None]], [[140], [142], [143], new_word_token_ids], ] [/code] Я написал очень медленную функцию, которая делает это: [code]all_word_probs = [] for word_tokens, word_probs in zip(token_list, pxhs): counter=0 p_word=1 while (counter < len(word_tokens) and word_tokens[counter] != tokenizer.pad_token_id): p_word = p_word * word_probs[counter, word_tokens[counter]] counter+=1 new_word_prob = word_probs[counter, new_word_tokens].sum() p_word = p_word * new_word_prob all_word_probs.append(p_word) [/code] Мне нужно что-то побыстрее, заранее спасибо за помощь!
Я пытаюсь запустить скрипт Python в кластере, для которого требуется следующее:
torch==1.7.1
torch-sparse== 0.6.8
Проблема в том, что когда я устанавливаю оба из них, torch поставляется с версией cuda 10.2, а torch-sparse использует доступную...
Я получаю сообщение об ошибке сегментации, когда пытаюсь скопировать память из буфера GST в тензор факела. Вот код. Я отмечу, откуда происходит ошибка:
static GstPadProbeReturn on_probe(
GstPad *pad, GstPadProbeInfo *info, gpointer user_data
) {...