IndexError: индекс выходит за пределы диапазона при обучении модели динамического встраивания слов (DWB)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 IndexError: индекс выходит за пределы диапазона при обучении модели динамического встраивания слов (DWB)

Сообщение Anonymous »

Я новичок в анализе текста и в настоящее время изучаю методы динамического встраивания слов (DWB). При запуске кодов репликации из этого блокнота Kaggle во время обучения я столкнулся со следующей ошибкой:

Код: Выделить всё

IndexError: index out of range in self
Я использую набор данных общих дебатов Организации Объединенных Наций, доступный здесь.
Ниже приведен код, который я запустил:

Код: Выделить всё

pip install git+https://github.com/llefebure/dynamic_bernoulli_embeddings.git

Код: Выделить всё

import pickle

import re

import numpy as np
import pandas as pd
from dynamic_bernoulli_embeddings.analysis import DynamicEmbeddingAnalysis
from dynamic_bernoulli_embeddings.training import train_model
from nltk import word_tokenize as nltk_word_tokenize
from gensim.corpora import Dictionary
from tqdm.notebook import tqdm
tqdm.pandas()

Код: Выделить всё

def _bad_word(word):
if len(word) < 2:
return True
if any(c.isdigit() for c in word):
return True
if "/" in word:
return True
return False

def word_tokenize(text):
text = re.sub(r"co-operation", "cooperation", text)
text = re.sub(r"-", " ", text)
words = [w.lower().strip("'.") for w in nltk_word_tokenize(text)]
words = [w for w in words if not _bad_word(w)]
return words

Код: Выделить всё

dataset = pd.read_csv(".../un-general-debates.csv")
dataset["bow"] = dataset.text.progress_apply(word_tokenize)
dataset["time"] = dataset.year - dataset.year.min()

Код: Выделить всё

dictionary = Dictionary(dataset.bow)
dictionary.filter_extremes(no_below=10, no_above=1.)
dictionary.compactify()
print(len(dictionary))

Код: Выделить всё

model, loss_history = train_model(
dataset, dictionary.token2id, validation=0.1, num_epochs=6, k=100, notebook=True)
полная ошибка выглядела следующим образом!:

Код: Выделить всё

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
Cell In[93], line 1
----> 1 model, loss_history = train_model(
2     dataset2, dictionary.token2id, validation=.1, num_epochs=3, k=25, notebook=True)

File ~/anaconda3/lib/python3.11/site-packages/dynamic_bernoulli_embeddings/training.py:96, in train_model(dataset, dictionary, validation, notebook, m, num_epochs, lr, validate_after, **kwargs)
94 if i == 0:
95     times = torch.zeros_like(times)
---> 96 loss, L_pos, L_neg, L_prior = model(targets, times, contexts, dynamic=i > 0)
97 loss.backward()
98 optimizer.step()

File ~/anaconda3/lib/python3.11/site-packages/torch/nn/modules/module.py:1501, in Module._call_impl(self, *args, **kwargs)
1496 # If we don't have any hooks, we want to skip the rest of the logic in
1497 # this function, and just call forward.
1498 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks
1499         or _global_backward_pre_hooks or _global_backward_hooks
1500         or _global_forward_hooks or _global_forward_pre_hooks):
-> 1501     return forward_call(*args, **kwargs)
1502 # Do not call functions when jit is used
1503 full_backward_hooks, non_full_backward_hooks = [], []

File ~/anaconda3/lib/python3.11/site-packages/dynamic_bernoulli_embeddings/embeddings.py:112, in DynamicBernoulliEmbeddingModel.forward(self, targets, times, contexts, validate, dynamic)
110 contexts[context_mask] = 0
111 contexts_summed = contexts.sum(axis=1)
--> 112 eta = (self.rho(targets_adjusted) * contexts_summed).sum(axis=1)
114 # Loss
115 loss, L_pos, L_neg, L_prior = None, None, None, None

File ~/anaconda3/lib/python3.11/site-packages/torch/nn/modules/module.py:1501, in Module._call_impl(self, *args, **kwargs)
1496 # If we don't have any hooks, we want to skip the rest of the logic in
1497 # this function, and just call forward.
1498 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks
1499         or _global_backward_pre_hooks or _global_backward_hooks
1500         or _global_forward_hooks or _global_forward_pre_hooks):
-> 1501     return forward_call(*args, **kwargs)
1502 # Do not call functions when jit is used
1503 full_backward_hooks, non_full_backward_hooks = [], []

File ~/anaconda3/lib/python3.11/site-packages/torch/nn/modules/sparse.py:162, in Embedding.forward(self, input)
161 def forward(self, input: Tensor) -> Tensor:
-->  162     return F.embedding(
163         input, self.weight, self.padding_idx, self.max_norm,
164         self.norm_type, self.scale_grad_by_freq, self.sparse)

File ~/anaconda3/lib/python3.11/site-packages/torch/nn/functional.py:2210, in embedding(input, weight, padding_idx, max_norm, norm_type, scale_grad_by_freq, sparse)
2204     # Note [embedding_renorm set_grad_enabled]
2205     # XXX: equivalent to
2206     # with torch.no_grad():
2207     #   torch.embedding_renorm_
2208     # remove once script supports set_grad_enabled
2209     _no_grad_embedding_renorm_(weight, input, max_norm, norm_type)
-> 2210 return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse)

IndexError: index out of range in self
Что я пробовал:
  • Проверил, что набор данных загружен правильно и токенизирован, как предполагалось.
    Проверил, что объект Dictionary создан правильно.
  • Искал похожие проблемы, связанные с «индексом вне диапазона», но не смог найти конкретного решения к динамическому внедрению слов (DWB).
Вопросы:
Что вызывает ошибку IndexError: индекс выходит за пределы диапазона самостоятельно во время обучения?
Как устранить эту проблему ?
Будем очень признательны за любую помощь или предложения. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/792 ... dding-mode
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»