Я следую учебному пособию, указанному по ссылке ниже:
https://towardsdatascience.com/bert-for-dummies-step-by-step-tutorial-fb90890ffe03
В учебном пособии используется набор данных Atis, доступный по следующей ссылке:
https://www.kaggle.com/siddhadev/ms-cntk-atis
Этот набор данных содержит 4978 поездных и 893 тестовых речевых высказывания (текст), классифицированных в одно из 26 намерений. Каждый токен в высказывании запроса выравнивается по метке IOB, заполняющей слот
В соответствии с руководством, код для загрузки набора данных ATIS в записную книжку Google Colab:
DATA_DIR="."
# load Pickle file
def load_ds(fname, verbose=True):
with open(fname, 'rb') as stream:
ds,dicts = pickle.load(stream)
if verbose:
print('Done loading: ', fname)
print(' samples: {:4d}'.format(len(ds['query'])))
print(' vocab_size: {:4d}'.format(len(dicts['token_ids'])))
print(' slot count: {:4d}'.format(len(dicts['slot_ids'])))
print(' intent count: {:4d}'.format(len(dicts['intent_ids'])))
return ds,dicts
# convert Pickle file to arrays
def load_atis(filename, add_start_end_token=False, verbose=True):
train_ds, dicts = load_ds(os.path.join(DATA_DIR,filename), verbose)
t2i, s2i, in2i = map(dicts.get, ['token_ids', 'slot_ids','intent_ids'])
i2t, i2s, i2in = map(lambda d: {d[k]:k for k in d.keys()}, [t2i,s2i,in2i])
query, slots, intent = map(train_ds.get, ['query', 'slot_labels', 'intent_labels'])
if add_start_end_token:
i2s[178] = 'BOS'
i2s[179] = 'EOS'
s2i['BOS'] = 178
s2i['EOS'] = 179
input_tensor = []
target_tensor = []
query_data = []
intent_data = []
slot_data = []
to_show = np.random.randint(0, len(query)-1, 5)
for i in range(len(query)):
input_tensor.append(query[i])
slot_text = []
slot_vector = []
for j in range(len(query[i])):
slot_text.append(i2s[slots[i][j]])
slot_vector.append(slots[i][j])
if add_start_end_token:
slot_text[0] = 'BOS'
slot_vector[0] = 178
slot_text[-1] = 'EOS'
slot_vector[-1]= 179
target_tensor.append(slot_vector)
q = ' '.join(map(i2t.get, query[i]))
query_data.append(q.replace('BOS', '').replace('EOS',''))
intent_data.append(i2in[intent[i][0]])
slot = ' '.join(slot_text)
slot_data.append(slot[1:-1])
if i in to_show and verbose:
print('Query text:', q)
print('Query vector: ', query[i])
print('Intent label: ', i2in[intent[i][0]])
print('Slot text: ', slot)
print('Slot vector: ', slot_vector)
print('*'*74)
query_data = np.array(query_data)
intent_data = np.array(intent_data)
slot_data = np.array(slot_data)
intent_data_label = np.array(intent).flatten()
return t2i, s2i, in2i, i2t, i2s, i2in, input_tensor, target_tensor, query_data, intent_data, intent_data_label, slot_data
# load ATIS training dataset
t2i_train, s2i_train, in2i_train, i2t_train, i2s_train, i2in_train, input_tensor_train, target_tensor_train, query_data_train, intent_data_train, intent_data_label_train, slot_data_train = load_atis('atis.train.pkl')
# load ATIS testing dataset
t2i_test, s2i_test, in2i_test, i2t_test, i2s_test, i2in_test, input_tensor_test, target_tensor_test, query_data_test, intent_data_test, intent_data_label_test, slot_data_test = load_atis('atis.test.pkl')
Я хочу заменить ' atis.training.pkl 'и' atis.test.pkl 'с моим набором обучающих и тестовых данных. Теперь проблема заключается в том, чтобы отформатировать мои данные аналогично «atis.test.pkl» и «atis.train.pkl»
. Я использовал следующий код для чтения содержимого atis.test.pkl:
import pickle
pickle_in = open("atis.test.pkl","rb")
example = pickle.load(pickle_in)
print(example)
Я не мог понять вывод. Как отформатировать мои данные как набор данных ATIS? Несколько образцов из моего набора данных:
@ FansMotorola Когда выйдет обновление moto g4 plus oreo?
@ FansMotorola Не видели Обновить. Уже февраль
@ FansMotorola Получено и сегодня в Moto G6.