Использование обработки естественного языка для поддержки малого бизнеса.
Семейный магазин итальянских деликатесов Altomonte’s Italian Market предлагает традиционные итальянские деликатесы в районе Большой Филадельфии с тех пор, как владельцы иммигрировали в США более 50 лет назад. Начав с небольшой мясной лавки с одной комнатой в Джермантауне, Altomonte’s превратился в бизнес с двумя магазинами, обслуживающими тысячи покупателей в неделю. Владельцы, Фрэнсис и покойный Микеле, соединили итальянские и американские традиции с идеями 21-го века, особенно с помощью их сына Винсента и дочери Марии. Altomonte’s по-прежнему проводит большую часть своего анализа по традиции, в том числе отбирает бычков для своего мясного отдела, интуитивно зная, сколько мяса покупатели купят в зависимости от времени года. Перейдя в 21 век, они внедрили технологические достижения, такие как киоски с сенсорным экраном для заказов сэндвичей, а также другие средства инноваций в операции своего бизнеса. Эти достижения, направленные на обеспечение одновременной работы, также включают создание присутствия в Интернете, где их платформы социальных сетей добились огромного успеха. Итак, где же Альтомонте может расти дальше? Может ли использование машинного обучения (ML) в их повседневных операциях по-прежнему способствовать развитию итальянского рынка и деликатесов Altomonte? Ответ положительный. Семейный итальянский рынок, а не крупная технологическая компания из Кремниевой долины, может извлечь выгоду из анализа машинного обучения.
Обработка естественного языка
Обработка естественного языка (NLP) - это сфера деятельности машинного обучения, которая анализирует человеческую речь и текст для экстраполяции скрытых идей документа. Text Mining в НЛП - это идея, что мы можем получить дополнительные знания из основной части текста или корпуса, используя различные преобразования слов и алгоритмы НЛП. Чтобы лучше понять тему основного текста, можно использовать различные подходы. Анализ тематической модели позволяет аналитику извлекать информацию и предлагать темы или резюме всего текста. Модели анализа настроений вместо того, чтобы искать разные темы и заголовки для описания данных, смотрят на скрытые эмоции в данных. В обоих подходах используются различные алгоритмы, от Скрытой модели распределения Дирихле до Биграммных моделей и Нейронных сетей. Хотя я не планирую показывать вам, как я создал искусственную нейронную сеть (ИНС), которая может преобразовывать английский сленговый текст в итальянский и обнаруживать ваш сарказм, я могу показать вам, как методы НЛП помогли поддержать и дать понимание Традиционный итальянский рынок.
Анализ настроений
Я мог бы вдаваться в более мелкие детали и статистические выводы из анализа, который я провел для Altomonte, вместо этого я подумал, что сделаю его интересным и объясню, как я обучал сверточную нейронную сеть (CNN) делать прогнозы настроений в обзорах рынка Facebook. Так что расслабьтесь, наслаждайтесь хорошей тарелкой спагетти и фрикадельками (или давайте перейдем к десерту и канноли) и наслаждайтесь!
Что такое анализ настроений?
Анализ настроений - это процесс расшифровки скрытых установок, чувств или эмоций в тексте. Настроение определяется как отношение, мысль или суждение, вызванное чувством. Анализ настроений позволяет нам прикрепить чувство к словам, которые мы пытаемся передать из-за экрана.
Сверточные нейронные сети
В целом Сверточные нейронные сети (CNN) показали многообещающие результаты в области обнаружения объектов и классификации изображений. CNN могут использоваться для анализа текста, если их входная размерность изменяется с двух измерений (высота и ширина изображения) на одно измерение для последовательности текста. В сверточном слое ядро скользит по образцу, выполняя вычисления в каждой точке остановки по строке данных. Шаг ядра определяет, на сколько шагов или единиц ядро должно пройти по выборке. Например, одномерная CNN с шагом 2 будет перемещать 2 единицы по последовательности предложений для выполнения вычислений, CNN являются линейными по своей природе, поэтому к линейному выходу применяется функция активации для создания нелинейного компонента, который затем можно использовать. для классификации образцов.
Анализ настроений: онлайн-обзоры итальянского рынка Altomonte
Для анализа использовались следующие библиотеки Python:
import keras from keras.layers import Input, Conv1D, Embedding , MaxPooling1D, GlobalMaxPooling1D, Dense from keras.models import Model from keras.preprocessing.text import Tokenizer from keras.optimizers import Adam from keras.preprocessing.sequence import pad_sequences import pandas as pd import numpy as np from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt
Данные
Обучающие данные представляли собой корпус, в который вошли онлайн-обзоры из Yelp, TripAdvisor и Google Reviews. Обзоры охватывают последние 10 лет работы Altomonte’s. Каждому обзору в обучающей выборке соответствует оценка от 1 до 5, где 1 считается плохим, а 5 - отличным. У обзоров Facebook нет рейтинга, что подтверждает их использование в качестве тестовых данных для предсказания их скрытого значения.
df = pd.read_csv('Altomontes_reviews.csv') df.head()
Как показано выше, данные представляют собой список обзоров с функциями «Месяц», «Год», «Рейтинг» и «Платформа» для каждого обзора.
Обработка данных
После того, как данные были загружены в виде фрейма данных, они были преобразованы в два столбца, один из которых содержал отзывы, а другой - мнение, основанное на соответствующей оценке отзыва. Сначала отбрасывались столбцы, которые не использовались в процессе построения модели.
df = df.drop(['Month','Year','Platform'],axis=1) df2 = df
Затем был создан новый двоичный столбец под названием «Метка», в котором было указано 1, если отзыв был признан положительным, и 0, если отзыв был признан отрицательным. Было решено, что отзывы с оценкой 3 или выше будут положительными, а отзывы 2 или ниже - отрицательными.
df['Label'] = [1 if x >=3 else 0 for x in df['Rating']]
Следующая часть предварительной обработки включает превращение слов, известных как «токены» в предложениях, в последовательность чисел.
MAX_VOCAB_SIZE = 10000 tokenizer = Tokenizer(num_words=MAX_VOCAB_SIZE) tokenizer.fit_on_texts(X_train) sequences_train = tokenizer.texts_to_sequences(X_train) sequences_test = tokenizer.texts_to_sequences(X_test)
Был установлен максимальный размер словаря 10000, чтобы последовательности не становились слишком большими. Сначала был создан токенизатор, и отзывы были токенизированы. Подробнее о том, как работает токенизатор, можно прочитать здесь. Затем токенизированные обзоры были преобразованы в последовательности для чтения CNN. После токенизации слов их необходимо сопоставить с индексом. Это гарантирует, что каждое слово имеет свои уникальные числовые последовательности.
word2idx = tokenizer.word_index V = len(word2idx)
В этих данных было 3248 уникальных токенов (намного меньше произвольного максимума в 10 000). Теперь, когда текст проиндексирован и преобразован в последовательности, его нужно заполнить нулями. Заполнение гарантирует, что каждый ввод данных, проходящих через нейронную сеть, имеет одинаковую форму по размеру. Используя заполнение записей, в конец каждой последовательности добавляются 0, чтобы все они были того же размера, что и самая длинная последовательность.
data_train = pad_sequences(sequences_train,padding='post') data_test = pad_sequences(sequences_test,maxlen=T,padding='post')
Обработка данных завершена, и CNN можно обучить на онлайн-обзорах итальянского рынка Альтомонте.
Модель
Для модели была сформулирована CNN с тремя одномерными слоями. Первоначальный ввод был вектором формы (T,), где T - длина каждой из последовательностей. Слой встраивания превращает каждую из проиндексированных переменных в векторы размером 20.
D = 20 i = Input(shape = (T,)) x = Embedding(V +1 , D)(i) x = Conv1D(16,2,activation='relu',)(x) x = MaxPooling1D(2)(x) x = Conv1D(32,2,activation='relu')(x) x = GlobalMaxPooling1D()(x) x = Dense(1,activation='sigmoid')(x) model = Model(i,x)
Как только модель была создана, она была скомпилирована с использованием двоичной кросс-энтропии в качестве функции потерь. Использовалась бинарная кросс-энтропия, поскольку оцениваемые критерии заключались в том, был ли обзор правильно идентифицирован как 1 (положительный) или 0 (отрицательный).
model.compile(loss='binary_crossentropy',optimizer = 'adam',metrics = ['accuracy'])
После того, как модель скомпилирована, ее можно сопоставить с данными обучения и тестирования, созданными ранее.
r = model.fit(data_train,y_train,epochs=5,validation_data=(data_test,y_test))
Достигнутая точность составила 87,8% после 5 эпох, что неплохо. Одна проблема, которая возникла при обучении, заключалась в том, что набор данных был небольшим, и поэтому переоснащение было серьезной проблемой. Уменьшение параметров (меньше слоев) и некоторый отсев были полезны в преодолении переобучения. Altomonte’s следует подумать о том, чтобы собирать больше обзоров в будущем, чтобы получить более обобщаемую модель для прогнозов.
Прогнозы
Пример обзора со страницы Итальянского рынка Альтомонте в Facebook (эй, зацените!):
«Очень рекомендую !!! Я никогда не знал об Альтомонтесе, пока друг недавно не принес мне обед. Мы с мужем решили пойти и проверить это, и пока мы были там, мы встретили владелицу, и она была самым милым человеком на свете! По сути, она устроила нам экскурсию. Мы купили курицу марсалу на ужин, и это было замечательно! Мы также купили бруклинскую пиццу на обед, и она была восхитительной! Мы попробовали их кофе, и они дали нам попробовать канноли, бискотти и печенье. Очень хороший! Мы купили ракушки, соус маринара, бутылку вина, немного сыра и т. Д. Все выглядело хорошо, вкусно, и мы могли проводить там часы! Мы вернемся!! Может быть, сегодня? »
Читая этот обзор, мы можем интуитивно увидеть, что это положительно, однако что предсказывает модель?
review = tokenizer.texts_to_sequences(instance) pred_list = [] for sublist in review: for item in sublist: pred_list.append(item) predict_list = [predict_list] review = pad_sequences(flat_list, padding='post', maxlen=T) prediction = model.predict(review).round()
Преобразуя код в дополненную последовательность, можно сделать прогноз на основе его тональности. Прогноз округляется до 0 или 1.
array([[1.]], dtype=float32)
Как видите, отзыв был получен как 1 или положительный (с точностью примерно 88%)! И точно так же у нас есть модель прогнозирования CNN, которую Альтомонте может использовать для оценки отношения и чувства клиентов к их бизнес-операциям на основе обзоров без рейтинга!
Вывод
Есть много методов машинного обучения, которые малые предприятия могут включить в структуру своей деятельности, чтобы помочь лучше понять производительность и эффективность бизнеса. Обработка естественного языка удобна для предприятий пищевой промышленности, чтобы получить более глубокое представление о том, что думает клиент, а не просто смотреть отзывы и делать обоснованные предположения. Что касается итальянского рынка Alomonte, существует множество других не обсуждаемых техник НЛП, которые можно применить. Тематическая модель Анализ отзывов может дать обратную связь о том, что клиенты замечают и что им нравится, когда они гуляют по предприятиям Altomonte. Один вывод и рекомендация для малых предприятий, чтобы получить наилучшие результаты от анализа машинного обучения, - это начать сбор и хранение огромных объемов данных и начать использовать модели НЛП. Спасибо за чтение!
Источники
- Жерон, А .: Практическое машинное обучение с помощью Scikit-Learn и TensorFlow: концепции, инструменты и методы для создания интеллектуальных систем. O’Reilly Media, Севастополь, Калифорния (2017).
- Васильев Юлий. Обработка естественного языка с помощью Python и Spacy: практическое введение. Сан-Франциско: без крахмала, 2020. Печать.
- Использование изображения было одобрено компанией Altomonte’s Italian Market Inc.