Как начать работу с Word2Vec — а затем как заставить его работать

1656674297 kak nachat rabotu s word2vec — a zatem kak zastavit

Кавита Ганнессон

1*h4xBoeeDRdRkiPLGuQxUgQ

Идея Word2Vec достаточно проста. Мы делаем предположение значение слова можно определить по поддерживаемой им компанией. Это аналогично поговорке.покажи мне своих друзей и я скажу, кто ты.»

Если у вас есть два слова, которые имеют очень похожих соседей (что означает: контекст, в котором они используются, примерно одинаковый), то эти слова, вероятно, достаточно схожи по значению или, по крайней мере, связаны. Например, слова шокирован, ошеломленный, и удивлен обычно используются в схожем контексте.

Используя это базовое предположение, можно использовать Word2Vec для выявления подобных понятий, поиска несвязанных понятий, вычисления сходства между двумя словами и т.д.

К делу

В этом учебнике вы узнаете, как использовать реализацию Word2Vec в Gensim и заставить ее работать. Я давно слышал жалобы на плохую производительность в целом, но на самом деле это сочетание двух вещей: (1) ваши входящие данные и (2) ваши настройки параметров.

Обратите внимание, что обучающие алгоритмы в пакете Gensim фактически были перенесены Google по оригинальной реализации Word2Vec и расширены дополнительными функциями.

Импорт и лесозаготовка

Сначала мы начинаем с нашего импорта и налаживаем журнал:

# imports needed and loggingimport gzipimport gensim import logging
logging.basicConfig(format=’%(asctime)s : %(levelname)s : %(message)s’, level=logging.INFO)

Набор данных

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

Для этого учебника я собираюсь использовать данные по набору данных OpinRank из некоторых своих докторских работ. Этот набор данных содержит полные отзывы пользователей об автомобилях и гостиницах. Я специально собрал все отзывы об отелях в один большой файл 97 Мб сжатый и 229 Мб несжат. Мы будем использовать сжатый файл для этого учебника. Каждая строка в этом файле представляет отзыв об отеле.

Теперь давайте внимательнее рассмотрим эти данные, напечатав первую строчку.

Вы должны увидеть следующее:

b"Oct 12 2009 \tNice trendy hotel location not too bad.\tI stayed in this hotel for one night. As this is a fairly new place some of the taxi drivers did not know where it was and/or did not want to drive there. Once I have eventually arrived at the hotel, I was very pleasantly surprised with the decor of the lobby/ground floor area. It was very stylish and modern. I found the reception's staff geeting me with 'Aloha' a bit out of place, but I guess they are briefed to say that to keep up the coroporate image.As I have a Starwood Preferred Guest member, I was given a small gift upon-check in. It was only a couple of fridge magnets in a gift box, but nevertheless a nice gesture.My room was nice and roomy, there are tea and coffee facilities in each room and you get two complimentary bottles of water plus some toiletries by 'bliss'.The location is not great. It is at the last metro stop and you then need to take a taxi, but if you are not planning on going to see the historic sites in Beijing, then you will be ok.I chose to have some breakfast in the hotel, which was really tasty and there was a good selection of dishes. There are a couple of computers to use in the communal area, as well as a pool table. There is also a small swimming pool and a gym area.I would definitely stay in this hotel again, but only if I did not plan to travel to central Beijing, as it can take a long time. The location is ok if you plan to do a lot of shopping, as there is a big shopping centre just few minutes away from the hotel and there are plenty of eating options around, including restaurants that serve a dog meat!\t\r\n"

Вы видите, что это достаточно хороший, полный обзор с большим количеством слов, и это то, что мы хотим. У нас есть примерно 255 000 таких обзоров в этом наборе данных.

Чтобы избежать неразберихи, в учебнике Gensim’s Word2Vec сказано, что вам нужно передать последовательность предложений как входные данные для Word2Vec. Однако вы можете фактически передать весь обзор как предложение (т.е. гораздо больший размер текста), если у вас много данных, и это не должно иметь большого значения. В конце концов все, для чего мы используем набор данных, это получить все соседние слова для данного целевого слова.

Чтение файлов в списке

Теперь, когда у нас был короткий пик нашего набора данных, мы можем прочитать его в список, чтобы мы могли передать это в модель Word2Vec. Обратите внимание на код ниже, который я непосредственно читаю сжатый файл. Я также делаю мягкую предварительную обработку отзывов с помощью gensim.utils.simple_preprocess (line). Это выполняет базовую предварительную обработку, такую ​​как токенизация, нижний регистр и т.д., и возвращает список токенов (слов). Документацию по этому методу предварительной обработки можно найти на официальном сайте документации Gensim.

Обучение модели Word2Vec

Обучение модели достаточно простое. Вы просто создаете экземпляр Word2Vec и проходите обзоры, которые мы прочли на предыдущем шаге. Таким образом, мы, в сущности, передаем список списков, где каждый список в основном списке содержит набор токенов с учетом пользователя. Word2Vec использует все эти маркеры для создания словаря. А под лексикой я подразумеваю набор уникальных слов.

После создания словарного запаса нам просто нужно позвать train(...) чтобы начать обучение модели Word2Vec. За кулисами мы фактически учим простую нейронную сеть с одним скрытым слоем. Но мы не собираемся использовать нейронную сеть после обучения. Цель же заключается в том, чтобы узнать весы скрытого слоя. Эти весы, по сути, являются векторами слов, которые мы пытаемся изучить.

Обучение набору данных Word2Vec OpinRank занимает около 10-15 минут. поэтому, пожалуйста, будьте терпеливы при запуске кода на этом наборе данных

Самое интересное – некоторые результаты!

1*s55bWApJm-OM6nWa9YZRQw

Давайте уж к интересному! Поскольку мы тренировались на отзывах пользователей, было бы приятно увидеть сходство в некоторых прилагательных. Этот первый пример показывает простой поиск слов, похожих на слово «грязный». Все, что нам нужно сделать, это позвонить most_similar и приведите слово «грязный» как положительный пример. Это возвращает 10 самых популярных подобных слов.

1*mhFUguFBoAng8x1_AFqAzw
Слова, похожие на «грязный»

Ой, это выглядит довольно хорошо. Давайте рассмотрим больше.

Похож на вежливый:

1*hDry7c8gyLVLX1GqXe9Ejw
Слова, похожие на «вежливый»

Похож на Франция:

1*m9AZmudvSoCy3m251JqNUQ
Слова, похожие на «Франция»

Похож на шокирован:

1*kc1hgr4oT1vLvvhmmNOGpQ
Слова, похожие на «шокированный»

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

Теперь вы даже можете использовать Word2Vec для вычисления сходства между двумя словами в словаре, вызвав similarity(...) функцию и переход в ответных словах.

1*f8WbL9IBegLzrVBtIgQ9TA
Вычислите сходство между двумя словами в словаре

Под капотом приведенные три фрагмента вычисляют косинусное сходство между двумя указанными словами, используя векторы слов каждого. Из приведенных выше баллов это понятно dirty очень похож на smelly но dirty не похож на clean. Если вы обнаружите сходство между двумя идентичными словами, оценка будет 1,0, поскольку диапазон косинусной оценки подобия всегда будет между [0.0-1.0]. Вы можете прочитать больше о косинусном сходстве здесь.

Вы найдете больше примеров того, как можно использовать Word2Vec в моем блокноте Jupyter.

Подробнее о настройке параметров

1*3tAxNGPEol7rW4IhhA2GAA

Чтобы обучить модель раньше, нам нужно установить некоторые параметры. А теперь давайте попробуем понять, что означают некоторые из них. Для справки это команда, которую мы использовали для обучения модели.

model = gensim.models.Word2Vec (documents, size=150, window=10, min_count=2, workers=10)

size

Размер плотного вектора, представляющего каждую лексему или слово. Если у вас очень ограниченные данные, размер должен быть намного меньше. Если у вас много данных, хорошо поэкспериментировать с разными размерами. Значение 100-150 хорошо сработало для меня для поиска подобия.

window

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

min_count

Минимальное количество слов. Модель будет игнорировать слова, не удовлетворяющие min_count. Чрезвычайно редкие слова обычно неважны, поэтому лучше от них избавиться. Если ваш набор данных не очень крохотный, это не влияет на модель.

workers

Сколько потоков использовать за кулисами?

Когда следует использовать Word2Vec?

Существует множество сценариев приложения Word2Vec. Представьте, что нужно создать лексикон чувств. Обучение модели Word2Vec на большом количестве отзывов пользователей поможет вам добиться этого. У вас есть лексикон не только для настроений, но и для большинства слов в словаре.

Кроме необработанных неструктурированных текстовых данных, вы можете использовать Word2Vec для более структурированных данных. Например, если бы у вас были метки для миллиона вопросов и ответов StackOverflow, вы могли бы найти связанные теги и порекомендовать их для изучения. Вы можете сделать это, рассматривая каждый набор тегов, встречающихся вместе, как «предложение» и обучая модель Word2Vec на этих данных. Конечно, вам все равно нужно большое количество примеров, чтобы это сработало.

Исходный код

Чтобы использовать этот учебник Jupyter Notebook, перейдите к моему репозиторию GitHub и следуйте инструкциям по локальному запуску блокнота. Я планирую загрузить предварительно подготовленные векторы, которые можно использовать для вашей работы.

Чтобы следить за статьей Кавиты по электронной почте, подпишитесь на ее блог.
Эта статья была первоначально опубликована на kavita-ganesan.com

Добавить комментарий

Ваш адрес email не будет опубликован.