Что такое N-грамма (N-gram) в NLP?

«Что такое N-грамма (N-gram) в NLP?» — вопрос из категории NLP и трансформеры, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

N-грамма — это непрерывная последовательность из N элементов (токенов) в тексте. Элементами обычно являются слова или символы. N-граммы — фундаментальная концепция в статистическом анализе языка.

Типы N-грамм:

  • Униграмма (1-gram): Отдельные слова. ["Я", "изучаю", "NLP"]
  • Биграмма (2-gram): Пары последовательных слов. ["Я изучаю", "изучаю NLP"]
  • Триграмма (3-gram): Тройки слов. ["Я изучаю NLP"]

Применение:

  • Языковое моделирование: Предсказание следующего слова на основе предыдущих N-1 слов.
  • Определение темы/жанра текста.
  • Поиск и исправление опечаток.
  • Построение простых чат-ботов.

Пример кода на Python с использованием NLTK:

from nltk import ngrams
from nltk.tokenize import word_tokenize

text = "Я изучаю обработку естественного языка."
tokens = word_tokenize(text, language='russian')

# Генерация биграмм
bigrams = list(ngrams(tokens, 2))
print(bigrams)
# Вывод: [('Я', 'изучаю'), ('изучаю', 'обработку'), ('обработку', 'естественного'), ...]

# Частотный анализ
from nltk.probability import FreqDist
freq_dist = FreqDist(bigrams)
print(freq_dist.most_common(3))

Ограничения: С ростом N резко увеличивается размер модели (проклятие размерности), а также падает вероятность встретить конкретную N-грамму в новых данных.