[БЕЗ_ЗВУКА] В этом видео мы поговорим об извлечении признаков из предобработанного текста. Как мы уже отмечали, очень неплохо на текстах работает подход, называемый «мешок слов», в котором мы не обращаем внимания на то, в каком порядке идут слова, и рассматриваем текст как лишь неупорядоченный набор каких-то слов. Если говорить более формально, мы извлекаем признаки следующим образом. Допустим, в нашей выборке всего имеется N различных слов, которые мы обозначаем как w1, w2, ..., wN. В этом случае мы кодируем каждый текст с помощью N признаков. При этом j-й признак из этих N показывает долю вхождения слова wj среди всех вхождений слов в данном тексте. Давайте разберем это на примере. Допустим, наша выборка состоит из двух предложений, из двух текстов. Первый — это «текст состоит из слов», второй — «вхождения данного слова среди всех слов». Сразу замечу, что мы выбросим отсюда не очень важные слова, в частности «из» и «среди». Это так называемые стоп-слова, о которых мы поговорим чуть позже. Получаем, что первый текст состоит из трех слов, и в этом случае мы кодируем его вектором признаков, которые показаны в этой таблице. Первый признак, второй и третий будут иметь значение по 0,33. В сумме это как раз единица. Следующий текст состоит из слов «вхождения», «данный», «слово», «все» и еще раз «слово». Всего в нем пять слов, при этом «слово» входит два раза, поэтому значение признака для него будет равно 0,4. Все остальные слова входят по одному разу, поэтому для них значения признаков равны 0,2. При таком подходе имеет смысл обращать внимание на два нюанса. Первой — это стоп-слова, популярные слова, которые встречаются в каждом тексте, например, какие-то предлоги или союзы, и которые не несут в себе никакой информации, а лишь засоряют наши признаки. Такие слова имеет смысл удалять еще на этапе предобработки, например, на этапе токенизации. Также имеет смысл удалять редкие слова. Если у нас есть какое-то слово, которое входит всего в один или в два текста, то, скорее всего, мы просто не сможем значимо учесть его в модели, мы не сможем значимо оценить, какой вклад это слово имеет в целевой переменной. Поэтому такие редкие слова обычно тоже удаляют. Есть чуть более сложный подход к формированию вектора признаков, который называется TF-IDF. Его идея состоит в следующем. Безусловно, как мы это уже делали в предыдущем подходе, если слово часто упоминается в данном тексте и если это не стоп-слово, то, скорее всего, оно важно. Скорее всего, раз его часто используют, оно играет большую роль в этом тексте. Но также есть и вторая тонкость. Если какое-то слово редко упоминается в остальных документах, а в данном документе оно встречается, то оно, скорее всего, тоже важно для данного документа, потому что по этому слову можно отличить данный текст от всех остальных. Если учитывать эти два соображения, то как раз и получится подход, который называется TF-IDF. Идея в следующем. Признак для слова w и текста x вычисляется по следующей формуле. Она состоит из двух частей. Первое слагаемое показывает как раз-таки долю вхождений данного слова w среди всех вхождений слов в данном тексте. Если это слово много раз входит в текст, то оно важно для данного документа, значение признака будет выше. Второй множитель — это как раз то, что называется IDF, inverse document frequency, обратная документная частота. Она вычисляется как отношение общего количества документов l к количеству документов в нашей выборке, в которых слово w встречается хотя бы раз. Если это отношение большое, то есть данное слово редко встречается в других документах, числитель в этой дроби константный, знаменатель чем меньше, тем больше будет дробь. Если слово редко встречается в других документах, этот множитель будет большим, и, по сути, значение признаков у данного слова будет большим. Если же данное слово встречается в каждом документе, то мы получим логарифм единицы — это ноль, и значение признака будет нулевым. Если слово встречается в каждом документе, скорее всего, оно не очень важно при решении задачи. Итак, мы обсудили подход, который называется «мешок слов», и, по сути, поговорили о двух его вариациях: счетчиках слов — это подход, в котором каждое слово кодируется его частотой в документе, и TF-IDG, который также учитывает, как часто это слово встречается в других документах выборки. А также поговорили о том, что имеет смысл удалять стоп-слова и удалять редкие слова из выборки. В следующем видео мы поговорим о некоторых расширениях этого подхода, в частности, об N-граммах и Skip-граммах, которые позволяют учитывать не только слова, но и словосочетания.