BERT — это нейронная сеть от Google, показавшая результаты на целом ряде задач. С помощью BERT можно создавать программы для обработки языка: отвечать на вопросы, заданные в произвольной форме, создавать чат-ботов, автоматические переводчики, анализировать текст и так далее. BERT — это в первую очередь языковая модель, а не чат-бот.
Google представила предобученные модели BERT, но как это обычно и бывает в Machine Learning, их надо дообучать. Самый простой вариант — составить
словарь со всеми существующими словами, и присваивать номер слова в этом словаре. Например, если слово "собака" стоит в этом словаре на 1678 месте, то на вход
нейросети для этого слова подаем число 1678.
Вот только в естественном языке при слове "собака" у человека всплывает сразу множество ассоциаций: "пушистая", "злая", "друг человека". Нельзя ли как-то закодировать эту особенность нашего мышления в представлении для нейросети? Оказывается, можно. Для этого достаточно так пересортировать номера слов, чтобы близкие по смыслу слова стояли рядом.
На практике, каждому слову назначают не одно число, а несколько — вектор, скажем, из 32 чисел. И расстояния измеряют как расстояния между точками, на которые указывают эти вектора в пространстве соответствующей размерности. Это позволяет сопоставлять одному слову сразу несколько близких по смыслу слов. Более того, с векторами можно производить арифметические операции. Классический пример: если из вектора, обозначающего слово "король", вычесть
вектор "мужчина" и прибавить вектор для слова "женщина", то получится некий вектор-результат. И он чудесным образом будет соответствовать слову "королева".
Учитывая, что нейронные сети хорошо приспособлены для математических преобразований, видимо, это и обеспечивает такую высокую эффективность этого метода. Существует несколько способов представлять слова векторами, они постепенно эволюционировали. Об этом читайте
в продолжении.