Вызывает ли мысль о том, что робот вроде всемирно известной Софии с вами разговаривает, волнует или пугает? Делает ли перерыв более расслабляющим от мысли о поездке в отпуск и возможности общаться с местными жителями хоть через приложение? Как насчет отслеживания печально известного твита нынешнего POTUS Трампа, чтобы измерить его настроения в реальном времени? Или еще лучше, если POTUS проявляет признаки болезни Альцгеймера?

Все это включает в себя мышление из области, называемой обработкой естественного языка. Мне нравится думать о НЛП как о том, как учить компьютер говорить. Конечно, в языке есть нюансы, но количественная оценка текста - это один из подходов к его пониманию, первый подход для компьютера. В этом сообщении в блоге я объясню основные концепции, лежащие в основе НЛП в контексте Предиктора цен Mercari, который я создаю на веб-сайте Kaggle. Это абсолютно маленькие шаги в очень сложную и увлекательную область!

Mercari - это приложение для покупателей и продавцов секонд-хенда. Кто угодно может выставить на продажу товар, и кто угодно может просматривать и покупать. Данные из набора Kaggle содержат некоторые числовые и категориальные данные, которые вы можете изучить в моем последнем сообщении в блоге, но основная масса данных - это текст. Есть определенные поля, которые необходимо заполнить перед публикацией объявления, которые можно увидеть здесь слева. Название предмета - это своего рода заголовок для листинга и единственное обязательное поле для его создания. При желании вы можете перейти к более подробной информации под описанием.

Пример названия предмета выглядит так:

«Роза, покрытая ЗОЛОТОМ 24 карат»

для которого поле описания выглядит так:

«В комплекте с сертификатом подлинности»

В компьютерном программировании данные могут принимать множество различных форм. У вас могут быть целые числа, временные метки, числа с плавающей точкой (или с плавающей запятой, десятичное для математически наклоненных), логические (истина или ложь), а также есть тип данных, называемый строкой, обычно состоящий из текста. В Python он заключен в кавычки, поэтому «кошка» распознается как строковый тип данных. «У меня 5 кошек, но я могу усыновить и больше» - тоже строка, хотя в ней есть числа и пробелы. «Кошка» также является сложением строк «C» + «a» + «t».

Поскольку мы пытаемся предсказать цену, мы хотим использовать текст таким образом, чтобы помочь нам понять, к какой цифре мы должны прийти. Например, если в названии будет слово «новый», логично предположить, что цена будет немного выше. Возможно, «сертификат подлинности» в описании тоже повысит цену. «Леггинсы», очевидно, будут продаваться меньше, чем «украшения». Мы можем присвоить этим словам вес, чтобы, когда они появляются вместе, например, «украшения с сертификатом подлинности» стоят дороже, чем «новые леггинсы».

Отправной точкой является набор слов, в котором только само слово превращается в то, что мы называем токеном. Строка разбита на компоненты, поэтому я, иметь, 5, коты, но, мог бы, усыновить, еще - все это токены. Общие слова, такие как the, a, и и т. Д., Можно исключить, установив stopwords = ‘english’ (вот ссылка на то, что входит и не входит в различные библиотеки Python). Обратите внимание, что в этом примере также отбрасываются грамматика, порядок, пунктуация и все, что может придать больше контекста слову. Смотри может быть как словом, так и существительным, но набор слов не учитывает это. Он просто считает количество вхождений. Лучше всего это показать в облаке слов, где чем больше слово, тем больше оно имеет значения!

Подсчета слов может быть недостаточно для некоторых целей, например для поисковых систем. В этом случае вероятность того, что вы найдете нужный веб-сайт, во многом зависит от контекста, а не только от слов, которые в нем встречаются. Вы можете сказать, что я женщина-кошка, так как я уже 4 раза использовал множественное число от слова «кошка» в этой статье, но в конечном итоге этот пост не о кошках (теперь 5, не отставайте!). Мы можем оценить слова в статье, используя tf-idf (частота термина - обратная частота документа). Термин частота по-прежнему считается счетчиком, но на этот раз мы утяжеляем термин с помощью idf, определенного как:

где t означает термин, D - все документы (также называемые корпусом), а N - количество. Таким образом, общие слова в корпусе наказываются - если у нас есть десять предложений в нашем корпусе, и каждое содержит слово «кошка» (не во множественном числе, все равно 5, компьютеры так педантичны), тогда термин idf выпадает.

А как насчет комбинации букв или слов в предложении? Совершенно новый вызывает нечто отличное от нового бренда. Эти пары называются н-граммы, грамм происходит от греческого γράμμα, что означает буква. N-граммы можно разбить на отдельные буквы или группы слов по мере их появления в предложении. Давайте разберем мое предложение о сумасшедшей кошачьей девушке на биграммы (n = 2):

у меня есть

иметь 5

5 кошек

кошки, но

но мог

мог бы принять

принять больше

В нашем простом предложении 7 биграмм. Пары слов дадут нам больше информации о контексте фразы. Для практики триграммы или n = 3 будут выглядеть так:

У меня 5

иметь 5 кошек

5 кошек, но

кошки, но мог

но мог бы принять

мог бы принять больше

Это только царапина на поверхности с использованием простого подсчета, взвешивания и сопряжения. Мы также могли бы принять во внимание пунктуацию (см. Сегментацию), части речи (см. POS-теги), выделение слов (например, ученый и наука могут быть сведены к науке) или некоторые их комбинации ( см. лемматизация). И мы говорили только об английском! В целях прогнозирования цен мы сосредоточимся на концепциях, о которых я упоминал выше. Помните об этом в следующем сообщении в блоге, где я объясню, как они используются в нашем моделировании. Будьте на связи!