Понимание того, как определять релевантные слова

TF-IDF, что означает термин частота - обратная частота документов, является показателем оценки, широко используемым при поиске информации (IR) или резюмировании. TF-IDF предназначен для отражения релевантности термина в данном документе.

За этим стоит интуиция: если слово встречается несколько раз в документе, мы должны повысить его релевантность, так как оно должно быть более значимым, чем другие слова, которые встречаются реже (TF). В то же время, если слово встречается много раз в документе, но также во многих других документах, возможно, это потому, что это слово - просто частое слово; не потому, что это было актуально или значимо (IDF).

Определение значения «релевантного слова»

Мы можем придумать более или менее субъективное определение, основанное на нашей интуиции: релевантность слова пропорциональна количеству информации, которую оно дает о его контексте (предложение, документ или полный набор данных). То есть наиболее подходящими словами являются те, которые помогут нам, людям, лучше понять весь документ, не читая его целиком.

Как уже указывалось, релевантные слова не обязательно являются наиболее часто встречающимися словами, поскольку такие запрещающие слова, как «the», «of» или «a», как правило, очень часто встречаются во многих документах.

Есть еще одно предостережение: если мы хотим резюмировать документ по сравнению со всем набором данных по определенной теме (скажем, обзорами фильмов), в нем будут слова (кроме стоп-слов, например character или plot), что может встречаться много раз в документе, а также во многих других документах. Эти слова бесполезны для резюмирования документа, потому что они не обладают отличительной способностью; они очень мало говорят о содержании документа по сравнению с другими документами.

Давайте рассмотрим несколько примеров, чтобы лучше проиллюстрировать, как работает TF-IDF.

Пример поисковой системы

Предположим, у нас есть база данных с тысячами описаний кошек, и пользователь хочет найти пушистых кошек, поэтому он вводит запрос «пушистый кот». Как поисковая система, мы должны решить, какие документы следует вернуть из нашей базы данных.

Если у нас есть документы, которые соответствуют точному запросу, нет никаких сомнений, но… что, если нам придется выбирать между частичными совпадениями? Для простоты предположим, что нам нужно выбрать между этими двумя описаниями:

1) «милый котик»
2) «пушистый котенок»

Первое описание содержит 2 из 3 слов в запросе, а второе соответствует только 1 из 3, тогда мы выберем первое описание. Как TF-IDF может помочь нам выбрать второе описание вместо первого?

TF одинаков для каждого слова, здесь нет никакой разницы. Однако можно ожидать, что термины «кошка» и «котенок» будут появляться во многих документах (большая частота документов означает низкий IDF), в то время как термин «пушистый» будет встречаться в меньшем количестве документов. (больший IDF). Таким образом, TF-IDF для кошек и котят имеет низкое значение, тогда как TF-IDF больше для «пушистый», то есть в нашей базе данных слово «пушистый» имеет большую силу различения, чем «кошка» или «котенок».

Заключение

Если мы воспользуемся TF-IDF для взвешивания различных слов, соответствующих запросу, «пушистый» будет более релевантным, чем «кот», и, в конечном итоге, мы сможем выбрать «пушистый котенок» как лучшее соответствие.

Пример резюмирования

Теперь представьте, что мы хотели бы автоматически резюмировать некоторые фильмы, используя их страницы в Википедии. Мы планируем создать облако тегов, которое поможет нам понять, о чем каждый фильм, поэтому наша задача - решить, какие слова вставить в него (и их размеры).

Учитывая, что месяц назад моя семья взяла новую собаку по имени Мави (названа в честь персонажа Моаны Мауи), мы будем использовать страницу википедии Моаны для этого примера.

Первая идея - составить список из наиболее часто встречающихся слов:

Моана
Чаще всего: ['фильм', 'моана', 'тот', 'миллион', 'дисней', 'мауи', 'день' , 'релиз', 'те', 'анимация', 'выходные', 'сердце', 'океан', 'оно', 'история', 'остров', 'фити', 'версия', 'в', ' оживить ']

Мы видим, что некоторые слова могут быть полезны для понимания сюжета фильма: моана, мауи, океан, остров… но они по-прежнему предоставляют очень мало информации. Более того, они смешаны с другими словами, которые не имеют отношения к делу и просто добавляют шума (например, фильм, миллион, день, выпуск или выходные).

Если мы проведем тот же эксперимент с другими фильмами, мы увидим, что результаты в отношении нерелевантных и шумных слов в чем-то схожи. Страницы Википедии содержат информацию, которая является общей для всех или имеет схожую структуру: это анимированные фильмы, которые принесли миллионы долларов с момента первого день их релиза… но это то, что мы уже знали, или, по крайней мере, это не имеет отношения к нам, чтобы понять сюжет.

Преодоление проблемы

Чтобы исключить то, что является общим для всех фильмов, и извлечь то, что индивидуально идентифицирует каждый, TF-IDF должен быть очень удобным инструментом. С наиболее часто встречающимися словами (TF) мы получили первое приближение, но IDF должен помочь нам уточнить предыдущий список и получить лучшие результаты. Принимая во внимание частоту документов, мы можем попытаться наказать общие слова (которые появляются на многих страницах википедии), уменьшив их релевантность.

Моана
TF-IDF: ['maui', 'te', 'moana', 'fiti', 'cravalho', 'богиня', 'tui ',' полинезийский ',' тала ',' ка ',' маори ',' аули'и ',' клемент ',' рыболовный крючок ',' таматоа ',' джемейн ',' тату ',' дубляж ',' маскер ', 'clements']

Благодаря TF-IDF такие слова, как фильм, миллион или релиз, исчезли из верхней части списка, и мы получили несколько новых, более значимых слов, таких как полинезийский или тату.

Мы также можем провести тот же анализ с другими обзорами и получить следующие результаты, в которых, опять же, общие слова исчезли в пользу слов, относящихся к конкретным фильмам:

Для справки это отсортированные списки с большим количеством слов:

Моана
Наиболее часто :
['фильм', 'моана', 'тот', 'миллион', 'дисней', 'мауи', 'день' , 'релиз', 'те', 'анимация', 'выходные', 'сердце', 'океан', 'оно', 'история', 'остров', 'фити', 'версия', 'в', ' оживить ']

TF-IDF: ['maui', 'te', 'moana', 'fiti', 'cravalho', 'богиня', 'tui', 'полинезийский', 'tala', 'kā ',' māori ',' auliʻi ',' clement ',' рыболовный крючок ',' tamatoa ',' jemaine ',' tattoo ',' dubbing ',' musker ',' clements ']

Суперсемейка
Чаще всего: ['фильм', 'невероятное', 'птица', 'пиксар' , 'релиз', 'боб', 'джек', 'я', 'награда', 'хорошо', 'оживить', 'особенность', 'это', 'синдром', 'персонаж', 'семья', ' работа ',' супергерой ',' анимация ']
TF-IDF: [' паррс ',' синдром ',' фиолетовый ',' омнидроид ', parr, mirage, nomanisan, helen, bird, edna, superhero, frozone, underminer, iron, wallin, suburban, metroville. ',' тире ',' суперсемейка ',' невероятно ']

Monsters, Inc
Наиболее часто:
['film', 'sulley', 'monsters', 'the', 'mike', 'monster', ' pixar ',' история ',' ребенок ',' randall ',' boo ',' disney ',' character ',' work ',' good ',' in ',' release ',' he ',' docter ' , 'мех']
TF-IDF: ['sulley', 'waternoose', 'boo', 'cda', 'randall', 'scarer ',' fizt ',' celia ',' kahrs ',' sullivan ',' мех ',' фабрика ',' scare ',' монстр ',' wazowski ',' mike ',' щупальце ',' madrid ', «голубь», «смех»]

Как мы это сделали

Вот код, который мы использовали для получения списков релевантных слов, используемых в этой статье:

Следующие шаги

В качестве базового набора документов мы использовали коллекцию из 65 отобранных вручную фильмов. Это было только для демонстрационных целей, но для получения лучших результатов с TF-IDF мы должны использовать гораздо большую базу документов.

Вот некоторые другие эксперименты, которые мы могли бы легко попробовать, используя этот код в качестве отправной точки:

a) Попробуйте разные весовые баллы для частоты запросов или документов. Как они влияют на список?

б) Используйте другую базу документов. Что бы произошло, если бы мы выбрали какие-то фильмы вместо того, чтобы сосредоточиться на одном жанре?

в) Каковы результаты, если мы попробуем другой домен, например музыкальные группы?

Ознакомьтесь с другими статьями в нашей публикации Building Lang.ai. Мы пишем о Машинном обучении, Разработка программного обеспечения и о нашей Корпоративной культуре.