Coder Social home page Coder Social logo

sic-rus-ai / stepik-dl-nlp Goto Github PK

View Code? Open in Web Editor NEW
165.0 10.0 128.0 42.3 MB

Материалы курса на Stepik "Нейронные сети и обработка текста"

License: MIT License

Python 4.02% Jupyter Notebook 95.96% Shell 0.02%

stepik-dl-nlp's Introduction

stepik-dl-nlp

Материалы курса на Stepik "Нейронные сети и обработка текста"

Описание курса

Современные методы автоматической обработки текста -- это поиск по смыслу, машинный перевод, чат-боты, построение баз знаний... Как к этому подступиться? Больше практики! Авторы курса, эксперты Центра ИИ Samsung, доступным языком рассказывают, как начать работать с текстами при помощи нейросетей.

Мы рекомендуем наш курс всем, кто уже имеет базовые знания в машинном обучении и хочет научиться применять нейронные сети для решения задач обработки текстов на естественном языке (NLP, Natural Language Processing).

Авторы курса "Нейронные сети и обработка текста" — эксперты московского Центра искусственного интеллекта Samsung, специалисты в области машинного обучения — преподносят свои знания в доступной форме и в таком объёме, который позволит ориентироваться в современных технологиях в области NLP.

Этот онлайн-курс является частью трека по искусственному интеллекту социально-образовательной программы для ВУЗов "Samsung Innovation Campus". Подробнее о программе вы можете узнать, перейдя по ссылке https://innovationcampus.ru/

Как построен наш курс? Мы начнём с разговора о языке: почему он такой удобный для людей и сложный для машин. Затем мы сформируем высокоуровневую картину предметной области, расскажем об основных понятиях и задачах. После введения мы разберём классические методы, подходящие, например, для определения тематики документа.

А затем начнутся нейросети! Мы расскажем, как подготавливать данные, извлекать "смыслы" слов из текстов, генерировать тексты, разбирать их структуру, выделять наименования объектов, и даже обучать нейросеть искать ответы на вопросы!

Кроме лекций Вас ждут практические семинары. В завершение мы предложим Вам решить сложную прикладную задачу в области NLP.

Инструкция по запуску

Чтобы запустить ноутбук с семинара на своем ноутбуке:

  1. Cклонируйте репозиторий курса:

git clone https://github.com/sic-rus-ai/stepik-dl-nlp.git

  1. В терминале выполните команду:

pip install -r requirements.txt

  1. Запустите ноутбук:

ipython notebook

Чтобы запустить ноутбук на Google Colab:

  1. Скачайте ноутбук (вкладка Github, затем прописываете адрес репозитория.

  2. Запустите ноутбук.

  3. Чтобы выкачать на colab библиотеку dlnlputils, не забудьте выполнить команду в первой ячейке:

!git clone https://github.com/sic-rus-ai/stepik-dl-nlp.git && pip install -r stepik-dl-nlp/requirements.txt
import sys; sys.path.append('./stepik-dl-nlp')
  1. Не забудьте настроить device='cpu' или device='cuda', а также выбрать подходящий Runtime в Google Colab (CPU/TPU/GPU).

А также следуйте комментариям касательно путей внутри ноутбуков.

Ноутбуки также работают и на Kaggle Notebooks.

Датасеты

New York Times

https://github.com/nytimes/ingredient-phrase-tagger

Copyright (c) 2016 The New York Times Company Licensed under the Apache License, Version 2.0

stepik-dl-nlp's People

Contributors

ashkow avatar cohimame avatar georgygospodinov avatar nikulin avatar ptyshevs avatar windj007 avatar yanina-anastasia avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

stepik-dl-nlp's Issues

Неверные аннотации размерностей в my_multihead_attention в пятом семинаре

Я считаю, что в пятом семинаре в функции my_multihead_attention следует заменить ValuesLen на QueriesLen абсолютно везде. Насколько я понимаю, в общем случае (не self-attention) количество запросов не обязательно равно количеству значений. Количество значений обязательно равно количеству ключей (не количеству запросов). Соответственно, вторая размерность resulting_features и attention_map тоже будет = QueriesLen

После исправления функция будет выглядеть так:

def my_multihead_attention(queries, keys, values,
                           keys_padding_mask, dependency_mask,
                           is_training,
                           weights_dropout):
    """
    queries - BatchSize x QueriesLen x HeadN x KeySize
    keys - BatchSize x KeysLen x HeadN x KeySize
    values - BatchSize x KeysLen x HeadN x ValueSize
    keys_padding_mask - BatchSize x KeysLen
    dependency_mask - ValuesLen x KeysLen
    is_training - bool
    weights_dropout - float
    
    result - tuple of two:
        - BatchSize x QueriesLen x HeadN x ValueSize - resulting features
        - BatchSize x QueriesLen x KeysLen x HeadN - attention map
    """

    # BatchSize x QueriesLen x KeysLen x HeadN
    relevances = torch.einsum('bqhs,bkhs->bqkh', (queries, keys))
    
    # замаскировать элементы, выходящие за длины последовательностей ключей
    padding_mask_expanded = keys_padding_mask[:, None, :, None].expand_as(relevances)
    relevances.masked_fill_(padding_mask_expanded, float('-inf'))
    
    # замаскировать пары <выходная позиция, входная позиция>
    relevances = relevances + dependency_mask[None, :, :, None].expand_as(relevances)
    
    normed_rels = F.softmax(relevances, dim=2)    
    normed_rels = F.dropout(normed_rels, weights_dropout, is_training)
    
    # BatchSize x QueriesLen x KeysLen x HeadN x 1
    normed_rels_expanded = normed_rels.unsqueeze(-1)
    
    # BatchSize x 1 x KeysLen x HeadN x ValueSize
    values_expanded = values.unsqueeze(1)
    
    # BatchSize x QueriesLen x KeysLen x HeadN x ValueSize
    weighted_values = normed_rels_expanded * values_expanded
    result = weighted_values.sum(2)  # BatchSize x QueriesLen x HeadN x ValueSize
    
    return result, normed_rels

И на всякий случай визуальное пояснение. Для простоты рассмотрен случай с одной головой и batch_size = 1
визуализация

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.