Перейти к основному содержанию
EDU-MMCS
Вы используете гостевой доступ (Вход)

Научно-исследовательский семинар: нейронные сети и глубокое обучение

  1. В начало
  2. Курсы
  3. Осенний семестр
  4. Магистратура
  5. НИСНейрСети
  6. Раздел 2. Глубокое обучение
  7. Практическое задание №3

Практическое задание №3

Требуемые условия завершения
Открыто с: среда, 9 сентября 2020, 00:00
Срок сдачи: среда, 16 сентября 2020, 00:00

1.      Решение задачи NER (Named Entity Recognition) – выделения непрерывных сущностей в тексте. Запустите jupyter notebook, создайте тетрадку и импортируйте модули аналогичные практическому заданию №1. Сущностями в задании послужат имена людей, наименование организаций и местоположения. Иными словами алгоритм должен понять, что участок текста “Нью Джерси” является местоположением, “Кофи Аннан” – персоной, а “ООН” – организацией.

2.      Получите данные по ссылке: https://github.com/EuropeanaNewspapers/ner-corpora
Пример получения данных с помощью библиотеки urllib:

import urllib

urllib.request.urlretrieve("https://raw.githubusercontent.com/EuropeanaNewspapers/ner-corpora/master/enp_FR.bnf.bio/enp_FR.bnf.bio", "enp_FR.bnf.bio")

with open("enp_FR.bnf.bio") as f:

    text = f.read()

3.      Разбейте слова и их тип при помощи метода split по символам переноса на новую строку '\n':

            words = []

types = []

for item in text.split('\n'):

    item = item.strip()

    if len(item) == 0:

        continue

    [w, t] = item.split(' ')

    words.append(w)

    types.append(t)

4.      Выделите уникальные типы используя и пронумеруйте их для идентификации:

unique_types = list(set(types))

type2id = {x:index for index, x in enumerate(unique_types)}

print(type2id)

5.      Подготовьте данные для обучения:

a.      Подсчитайте количество наиболее встречающихся слов

from collections import Counter

word2count = Counter(words)

MAX_WORD_COUNT = 30000

top_words = [x[0] for x in sorted(word2count.items(), key=lambda x: x[1], reverse=True)][:MAX_WORD_COUNT]

word2id = {x:index+1 for index, x in enumerate(top_words)}

b.     Разбейте полученный набор данных на тренировочный и тестовый наборы

train_dataset, test_dataset = train_test_split(list(zip(words, types)), train_size=0.7)

c.      Напишите функции нахождения id слова

def getWordId(w):

return 0 if not w in word2id else word2id[w]

d.     Реализуйте функцию gen_batches(dataset, batch_size=64, seq_size=32, batch_count=100):

e.      Закодируйте полученные предложения

 def encode_text(sentence):

    words = sentence.split()

    result = np.zeros((len(words),))

    for i,w in enumerate(words):

        result[i] = getWordId(w)

    return result

6.      Импортируйте модуль для демонстрации процесса обучения TensorBoard и фрэймворк tensorflow. Реализуйте функцию по созданию логов.

def write_log(callback, names, logs, batch_no):

    for name, value in zip(names, logs):

        summary = tf.Summary()

        summary_value = summary.value.add()

        summary_value.simple_value = value

        summary_value.tag = name

        callback.writer.add_summary(summary, batch_no)

        callback.writer.flush()

logs_dir = './logs'

callback = TensorBoard(logs_dir)

callback.set_model(model)

 

7.      Инициируйте процесс обучения нейронной сети.

a.      Реализуйте код для вычисления тренировочного loss:

Создайте пустой массив и итеративно добавляйте полученные значения методом train_on_batch

for epoch in range(100):

    losses = []

    for x,y in gen_batches(train_dataset, batch_count=32):

        loss = model.train_on_batch(x, y)

        losses.append(loss)

    train_loss = np.mean(losses)

b.     Задайте параметры для генерации батчей и записывайте полученные результаты:

losses = []

    for x,y in gen_batches(test_dataset, batch_count=32):

        loss = model.test_on_batch(x, y)

        losses.append(loss)

    test_loss = np.mean(losses)

    write_log(callback, ['train', 'test'], [train_loss, test_loss], epoch)

8.      Протестируйте получившуюся модель:

query = test_dataset[160:260]

query_words = [x[0] for x in query]

query_types = [x[1] for x in query]

result = model.predict_on_batch(encode_text(" ".join(query_words)).reshape((1, -1)))[0]

for index in range(result.shape[0]):

    w = query_words[index]

    true_type = query_types[index]

    pred_type = unique_types[np.argmax(result[index,:])]

    print("{}:\t{}\t{}".format(w, pred_type, true_type))

1.     Задачи для самостоятельной работы:

a.      Увеличить точность полученной модели. Для этого, воспользуйтесь продвинутыми техниками и нахождением подходящих гиперпараметров: таких как изменение размера последовательности, количества слоев сети.

b.     Реализуйте модель со слоем CRF(https://github.com/Hironsan/keras-crf-layer)


◄ Практическое задание №2
Практическое задание №4 ►
Пропустить Навигация
Навигация
  • В начало

    • Страницы сайта

      • Мои курсы

      • Теги

    • Мои курсы

    • Курсы

      • Осенний семестр

        • Прикладная математика и информатика

        • Фундаментальная информатика и ИТ

        • Математика, механика

        • Педагогическое образование

        • Магистратура

          • Разработка мобильных приложений и компьютерных игр

          • ТОИ маг

          • Modern computer technology

          • Математика и её приложения в науке и инженерии

          • MUDP

          • ОНС-Н

          • RL

          • ИИ_НС

          • КрПр

          • КЗ

          • АДС

          • РПП

          • НИСНейрСети

            • Раздел 1. Введение в нейронные сети

            • Раздел 2. Глубокое обучение

              • ЗаданиеПрактическое задание №3

              • ЗаданиеПрактическое задание №4

            • Раздел 3. Глубокое обучение в NLP

        • Аспирантура

        • Вечернее отделение

        • Другое

      • Весенний семестр

        • Прикладная математика и информатика

        • Фундаментальная информатика и ИТ

        • Математика, механика

        • Педагогическое образование

        • Магистратура

          • Разработка мобильных приложений и компьютерных игр

        • Аспирантура

        • Вечернее отделение

        • Другое

      • Воскресная компьютерная школа

        • Пользователь компьютера плюс

        • Пользователь прикладных программ

        • Программирование I ступень

        • Программирование II ступень

        • Программирование III ступень

        • Архив

      • Воскресная математическая школа

        • Открытое тестирование РНОМЦ и мехмата ЮФУ - 2025

        • Олимпиадная математическая школа

        • Повышение квалификации

        • Доступная математика

        • Лаборатория математического онлайн-образования мех...

        • Осенняя универсиада

        • Научно-практическая конференция

        • ВМШ

          • ВМШ - 24

        • Летняя олимпиадная математическая школа РНОМЦ и ме...

      • Государственная итоговая аттестация

      • Дополнительное образование

      • Олимпиады

      • Видеолекции

      • Разное

      • Архив курсов

      • Заочная школа мехмата ЮФУ

Служба поддержки сайта
Вы используете гостевой доступ (Вход)
НИСНейрСети
Сводка хранения данных
Скачать мобильное приложение Яндекс.Метрика