Разметка части речи (Part-of-speech tagging, POS) — это процесс присвоения части речи каждому слову в тексте.
Слова неоднозначны — могут иметь более одной возможной части речи. Цель состоит в том, чтобы правильно отметить часть речи, в зависимости от контекста.
Например, слово есть может быть глаголом (есть завтрак в кафе) или междометием (у нас есть завтрак).
Почему эта задача важна и для чего нам нужны части речи? Потому что семантика слова (значение слова) может измениться при изменении части речи слова с глагола на междометие, как мы видели выше.
#терминология #pos #типы_задач
Слова неоднозначны — могут иметь более одной возможной части речи. Цель состоит в том, чтобы правильно отметить часть речи, в зависимости от контекста.
Например, слово есть может быть глаголом (есть завтрак в кафе) или междометием (у нас есть завтрак).
Почему эта задача важна и для чего нам нужны части речи? Потому что семантика слова (значение слова) может измениться при изменении части речи слова с глагола на междометие, как мы видели выше.
#терминология #pos #типы_задач
Получение датасетов из nltk
Установите необходимый пакет (в вашей локальной среде).
Теперь нужно скачать и уже можно использовать датасет.
#dataset #pos #tutorial
Установите необходимый пакет (в вашей локальной среде).
pip install nltk
Теперь нужно скачать и уже можно использовать датасет.
import nltk
from nltk.corpus import treebank
nltk.download('treebank') # Скачайте датасет
# Теперь можно посмотреть на примеры данных в датасете
for word, tag in treebank.tagged_words()[:10]:
print('Word: ', word, 'Tag: ', tag)
#dataset #pos #tutorial
Получение датасетов из huggingface
Установите необходимые пакеты (в вашей локальной среде).
Некоторые датасеты могут требовать дополнительные пакеты, как например в случае UD датасета. Для этого датасета нужно еще установить пакет 'conllu'. Обычно его устанавливать не нужно и будет достаточно установить только 'datasets'.
Теперь нужно скачать и уже можно использовать датасет.
#dataset #pos #tutorial
Установите необходимые пакеты (в вашей локальной среде).
pip install datasets conllu
Некоторые датасеты могут требовать дополнительные пакеты, как например в случае UD датасета. Для этого датасета нужно еще установить пакет 'conllu'. Обычно его устанавливать не нужно и будет достаточно установить только 'datasets'.
Теперь нужно скачать и уже можно использовать датасет.
from datasets import load_dataset
dataset = load_dataset('universal_dependencies', 'ru_gsd', split='train') # Скачайте датасет
# Теперь можно посмотреть на примеры данных в датасете
dataset.to_pandas().head(5) # NB! эта команда требует предустановленный пакет pandas
#dataset #pos #tutorial
Смотря на state-of-the-art точности для задачи разметки частей речи (POS), может показаться, что задача проста и уже завершена. На самом деле вам всегда нужно сравнивать результаты с базовым показателем, например, наиболее часто встречающийся класс (most frequent class baseline).
Что это за базовый показатель? Представьте, что вы всегда назначаете наиболее часто встречающийся класс для входных данных. В конце концов, вы получите некоторую точность. Это и есть ваш базовый показатель самого часто встречающегося класса. Позже вам нужно будет сравнивать вашу модель с этим показателем. Если ваша модель выдаёт результат который хуже, чем этот базовый показатель, то модель вообще не приносит никакой пользы.
Для задачи маркировки POS для набора данных Penn Treebank (только английский язык) базовый показатель составляет около 92 %. State-of-the-art результат отличается от базового показателя всего на 6%. Задача представляет собой классический пример решения задачи с перекошенным набором данных.
#терминология #pos #руководство
Что это за базовый показатель? Представьте, что вы всегда назначаете наиболее часто встречающийся класс для входных данных. В конце концов, вы получите некоторую точность. Это и есть ваш базовый показатель самого часто встречающегося класса. Позже вам нужно будет сравнивать вашу модель с этим показателем. Если ваша модель выдаёт результат который хуже, чем этот базовый показатель, то модель вообще не приносит никакой пользы.
Для задачи маркировки POS для набора данных Penn Treebank (только английский язык) базовый показатель составляет около 92 %. State-of-the-art результат отличается от базового показателя всего на 6%. Задача представляет собой классический пример решения задачи с перекошенным набором данных.
#терминология #pos #руководство
Хотите знать, как начать использовать адаптеры? Очень просто! Просто добавьте несколько строк кода в существующий обучающий код HuggingFace:
```
from transformers import ParallelConfig
# Загрузите модель из HuggingFace.
model = AutoModelForTokenClassification.from_pretrained(model_checkpoint)
# Выберите тип адаптера. Больше конфигураций адаптеров можно найти здесь
# Не уверен в чем разница между адаптерами? Можешь использовать тег #adapters для поиска по каналу и найти особенности многих типов адаптеров.
adapter_config = ParallelConfig()
model.add_adapter("any_name_of_the_task", config=adapter_config)
model.set_active_adapters("any_name_of_the_task")
model.train_adapter("any_name_of_the_task")
# Дальше тренируй модель HuggingFace как обычно.
```
Полностью работающий пример использования адаптера можно найти здесь. В примере используется задание Part-of-speach tagging (#pos)
#adapters #tutorial
```
from transformers import ParallelConfig
# Загрузите модель из HuggingFace.
model = AutoModelForTokenClassification.from_pretrained(model_checkpoint)
# Выберите тип адаптера. Больше конфигураций адаптеров можно найти здесь
# Не уверен в чем разница между адаптерами? Можешь использовать тег #adapters для поиска по каналу и найти особенности многих типов адаптеров.
adapter_config = ParallelConfig()
model.add_adapter("any_name_of_the_task", config=adapter_config)
model.set_active_adapters("any_name_of_the_task")
model.train_adapter("any_name_of_the_task")
# Дальше тренируй модель HuggingFace как обычно.
```
Полностью работающий пример использования адаптера можно найти здесь. В примере используется задание Part-of-speach tagging (#pos)
#adapters #tutorial
Telegram
Deep learning for NLP
Part-of-speech (POS) tagging is the process of assigning a part-of-speech to each word in a text.
Words are ambiguous — have more than one possible part-of-speech. The goal is to find the correct tag depending on the context.
For example, book can be a verb…
Words are ambiguous — have more than one possible part-of-speech. The goal is to find the correct tag depending on the context.
For example, book can be a verb…
Не уверены, как использовать адаптеры в ваших экспериментах? Основное преимущество заключается в вычислениях с малым объемом вычислительных ресурсов, т. е. когда у вас ограниченны физические ресурсы или бюджет.
Вот некоторые варианты использования модулей-адапреров, которые вы можете применить на практике:
- Проводить несколько экспериментов параллельно;
- Fine-tune более крупной модели с использованием того же количества ресурсов;
- Обучать адаптеры для конкретных задач, а затем комбинировать их в многозадачных приложениях.
На изображении результаты экспериментов с использованием адаптеров для определения частей речи.
Примечание: Эксперименты проводились с использованием Tesla V100, 16 ГБ.
Вывод: Не меняя ничего в методе тренировки, а просто взяв большую модель и используя адаптеры, на тех же ресурсах можно достичь лучших результатов.
#adapters #pos #experiments
Вот некоторые варианты использования модулей-адапреров, которые вы можете применить на практике:
- Проводить несколько экспериментов параллельно;
- Fine-tune более крупной модели с использованием того же количества ресурсов;
- Обучать адаптеры для конкретных задач, а затем комбинировать их в многозадачных приложениях.
На изображении результаты экспериментов с использованием адаптеров для определения частей речи.
Примечание: Эксперименты проводились с использованием Tesla V100, 16 ГБ.
Вывод: Не меняя ничего в методе тренировки, а просто взяв большую модель и используя адаптеры, на тех же ресурсах можно достичь лучших результатов.
#adapters #pos #experiments
HMM маркировка
📷 Изображение
Цепь Маркова — это модель, которая работает с последовательностью случайных состояний и зависит от вероятностей этих состояний. Модель полезна, когда нам нужно вычислить вероятность последовательности наблюдаемых событий. Однако большинство интересующих нас событий скрыто: мы не наблюдаем их напрямую. Например, мы обычно не наблюдаем частей речи в тексте.
Предположим, что у нас есть ненаблюдаемые (скрытые) состояния X, это то, что нас интересует. Для построения модели скрытой модели Маркова (HMM) нам нужны наблюдаемые события Y, на которые влияет X. Следовательно, HMM позволяет работать с обоими: с наблюдаемыми и скрытыми событиями.
На рисунке изображен HMM для маркировки частей речи (POS),
а - вероятность перехода из одного состояния в другое,
Q - состояния, теги POS,
P(o|Q) - вероятности распространения, насколько вероятно слово будет иметь соответствующий тег.
HMM реализует следующие предположения:
1. Текущее состояние зависит только от предыдущего состояния;
2. Выходная вероятность наблюдения зависит только от состояния, которое породило наблюдение P(o|Q).
#основы #pos #markov
📷 Изображение
Цепь Маркова — это модель, которая работает с последовательностью случайных состояний и зависит от вероятностей этих состояний. Модель полезна, когда нам нужно вычислить вероятность последовательности наблюдаемых событий. Однако большинство интересующих нас событий скрыто: мы не наблюдаем их напрямую. Например, мы обычно не наблюдаем частей речи в тексте.
Предположим, что у нас есть ненаблюдаемые (скрытые) состояния X, это то, что нас интересует. Для построения модели скрытой модели Маркова (HMM) нам нужны наблюдаемые события Y, на которые влияет X. Следовательно, HMM позволяет работать с обоими: с наблюдаемыми и скрытыми событиями.
На рисунке изображен HMM для маркировки частей речи (POS),
а - вероятность перехода из одного состояния в другое,
Q - состояния, теги POS,
P(o|Q) - вероятности распространения, насколько вероятно слово будет иметь соответствующий тег.
HMM реализует следующие предположения:
1. Текущее состояние зависит только от предыдущего состояния;
2. Выходная вероятность наблюдения зависит только от состояния, которое породило наблюдение P(o|Q).
#основы #pos #markov
Telegram
Deep learning for NLP (RU)
Обновил изображение для HMM, для упрощения понимания.
Conditional Random Fields (CRFs)
📷 Изображение
Во многих задачах обработки естественного языка очень часто приходится иметь дело с неизвестными словами. Например: имена собственные и аббревиатуры. Также знание контекста может быть полезно для понимания языка и маркировки. К сожалению, HMM плохо работает с новыми или редкими словами, так как перед началом обучения необходимо рассчитать вероятности этих слов и переходов. Но есть различительная модель для последовательностей, основанная на логарифмически-линейных моделях, и схожа с HMM. Модель называется — условные случайные поля (Conditional random fields, CRF).
CRF не вычисляет вероятность для каждого тега на каждом шаге. Вместо этого на каждом шаге CRF вычисляет логарифмически-линейные функции для набора соответствующих признаков, и эти локальные признаки агрегируются и нормализуются для получения глобальной вероятности для всей последовательности.
В CRF входные данные являются последовательными и учитывают предыдущий контекст при предсказывании результата. Чтобы смоделировать такое поведение, CRF используют функции признаков (feature function), которые возвращают 0 или 1. Цель функции — выразить некоторую характеристику последовательности, которую представляет точка данных. Для обучения модели каждой функции признаков назначается обучаемый вес. На рисунке есть два типа функций признаков: функции состояния (fs1..n) и функции перехода (ft1..n).
Примером функции признаков для маркировки частей речи (POS tagging) может быть:
- если предыдущая метка является существительным, а текущая - глаголом, то вернуть 1, а не 0.
- если предыдущая метка является глаголом, а текущая - наречием, то вернуть 1, а не 0.
#основы #pos #markov #crf
📷 Изображение
Во многих задачах обработки естественного языка очень часто приходится иметь дело с неизвестными словами. Например: имена собственные и аббревиатуры. Также знание контекста может быть полезно для понимания языка и маркировки. К сожалению, HMM плохо работает с новыми или редкими словами, так как перед началом обучения необходимо рассчитать вероятности этих слов и переходов. Но есть различительная модель для последовательностей, основанная на логарифмически-линейных моделях, и схожа с HMM. Модель называется — условные случайные поля (Conditional random fields, CRF).
CRF не вычисляет вероятность для каждого тега на каждом шаге. Вместо этого на каждом шаге CRF вычисляет логарифмически-линейные функции для набора соответствующих признаков, и эти локальные признаки агрегируются и нормализуются для получения глобальной вероятности для всей последовательности.
В CRF входные данные являются последовательными и учитывают предыдущий контекст при предсказывании результата. Чтобы смоделировать такое поведение, CRF используют функции признаков (feature function), которые возвращают 0 или 1. Цель функции — выразить некоторую характеристику последовательности, которую представляет точка данных. Для обучения модели каждой функции признаков назначается обучаемый вес. На рисунке есть два типа функций признаков: функции состояния (fs1..n) и функции перехода (ft1..n).
Примером функции признаков для маркировки частей речи (POS tagging) может быть:
- если предыдущая метка является существительным, а текущая - глаголом, то вернуть 1, а не 0.
- если предыдущая метка является глаголом, а текущая - наречием, то вернуть 1, а не 0.
#основы #pos #markov #crf
Telegram
Deep learning for NLP (RU)
CRF модель