[БЕЗ_ЗВУКА] В этом видео мы обсудим некоторые особенности обучения моделей машинного обучения на текстовых данных. Как вы уже знаете, прежде чем обучать какие-то модели, нужно тексты подготовить, нужно сформировать выборку и вычислить признаки. Для этого, как правило, сначала из текстов удаляются слишком редкие и слишком популярные слова, или стоп-слова, как их еще называют. И после этого вычисляют признаки. Это могут быть n-граммы, skip-граммы, на которых вычисляются счетчики, количество их вхождений или TF-IDF, например. После того как вы найдете таким образом признаковое пространство, как правило, его размерность окажется довольно большой. После вычисления, например, униграмм, вы можете получить тысячи и десятки тысяч признаков. Если вы добавите биграммы и триграммы, количество признаков может достигать миллионов и десятков миллионов, если корпус довольно большой. Понятно, что это очень много. Поэтому можно, например, пробовать делать отбор признаков, находить только те униграммы, биграммы и так далее, которые важны, которые как-то коррелируют с целевой переменной. Или, например, можно пытаться понижать размерность, например, применить метод главных компонент и найти некоторое подпространство, в которое вы можете спроецировать данные и все еще иметь хорошее признаковое описание. Тем не менее, даже если вы попытаетесь понизить размерность, вряд ли у вас получится радикально ее уменьшить. Все равно признаков будет очень много. Давайте подумаем, насколько хорошо подойдут различные методы машинного обучения в такой ситуации. Если вы попробуете применять случайный лес, то в нем, как вы помните, используются деревья большой глубины. Деревья, которые строятся до тех пор, пока в каждом листе не окажется очень мало объектов. Этот подход не очень хорошо работает, если признаков очень много. Вы будете строить очень глубокие деревья. Это будет занимать очень много времени и из-за этого может оказаться, что вы просто не можете дождаться построения случайного леса достаточного размера. Если вы решите применять градиентный бустинг, там деревья имеют гораздо более маленькую глубину. Но в этом тоже их проблема. Каждое отдельное дерево может учесть лишь очень небольшое подмножество признаков, в то время как зачастую ответ зависит от комбинации большого количества слов в документе. И поэтому, чтобы градиентный бустинг работал хорошо, вам может понадобиться очень и очень много деревьев. Но даже в этом случае не факт, что вы получите приемлемое качество. Байесовские методы, в частности, наивный байесовский классификатор, обычно довольно хорошо показывают себя на текстах. Вы даже уже знаете о примере его применения для задачи фильтрации спама. А чаще всего, на текстовых данных используются линейные модели. Они очень хорошо масштабируются. Они могут работать с огромным количеством признаков и на очень больших выборках. И поэтому часто именно их выбирают, чтобы делать предсказания на выборках с текстовыми данными. Более того, как вы помните, линейные модели позволяют считывать объекты с диска по одному и для каждого отдельного объекта делать градиентный шаг. Это то, что называется стохастическим градиентным спуском. Более того, если вы используете хеширование, такой подход запрограммировать совсем просто. Вы просто читаете все тексты по одному с диска, для каждого текста идете по словам и вычисляете хеши этих слов. После того как хеш слова вычислен, вы знаете, какому признаку он соответствует, и просто именно по этому признаку делаете градиентный шаг. Это очень простая процедура и она очень хорошо и быстро работает на текстовых выборках. Итак, мы обсудили, что признаки для текстов, как правило, вычисляются с помощью n-грамм, после чего на них вычисляются TF-IDF или счетчики. А затем, как правило, используются линейные модели, потому что они довольно простые. И они легко масштабируются как по количеству признаков, так и по количеству объектов.