Практические шаги по предварительной обработке данных, которым нужно следовать при работе с текстовыми данными для моделирования НЛП.
Обзор
Предварительная обработка текста традиционно является важным этапом в задачах обработки естественного языка (NLP). Он преобразует текст в более удобоваримую форму, чтобы алгоритмы машинного обучения могли работать лучше.
Предварительная обработка данных - важный этап подготовки данных для формирования модели машинного обучения, которую можно понять. В предварительной обработке данных есть много важных шагов, таких как очистка данных, преобразование данных и выбор функций. Очистка и преобразование данных - это методы, используемые для удаления выбросов и стандартизации данных, чтобы они принимали форму, которую можно легко использовать для создания модели.
Зачем нужна предварительная обработка данных?
К настоящему времени вы наверняка поняли, почему предварительная обработка данных так важна. Поскольку ошибки, дублирование, пропущенные значения и несоответствия ставят под угрозу целостность набора, вам необходимо исправить все эти проблемы для более точного результата. Представьте, что вы обучаете алгоритм машинного обучения, чтобы иметь дело с покупками ваших клиентов с ошибочным набором данных. Скорее всего, в системе возникнут предубеждения и отклонения, которые ухудшат пользовательский опыт.
Таким образом, прежде чем использовать эти данные по назначению, вам необходимо, чтобы они были как можно более организованными и «чистыми». Это можно сделать несколькими способами, в зависимости от того, какую проблему вы решаете. В идеале вы должны использовать все следующие методы, чтобы получить более точный набор данных.
Шаги для предварительной обработки данных
В этом разделе мы запрограммируем общие шаги, связанные с предварительной обработкой текста.
1) нижний регистр
Преобразование текста в строчные буквы.
sent_0 =sent_0.lower()
2) Удаление всех URL-адресов из данных
мы удаляем URL-адреса («http \») из текста, используя регулярное выражение Python.
sent_0 = re.sub(r"http\S+", "", sent_1000)
3) Удаление всех тегов из данных
Для удаления тегов мы используем пакет Python Beautiful Soup.
soup = BeautifulSoup(sent_0, 'lxml') text = soup.get_text()
4) Удаление слов с цифрами из данных
мы удаляем слова, содержащие числа, из текста, используя регулярное выражение Python.
sent_0 = re.sub("\S*\d\S*", "", sent_0).strip()
5) Удаление специального символа из данных
мы удаляем из текста все специальные символы («*, &, #, @…»).
sent_0 = re.sub('[^A-Za-z0-9]+', ' ', sent_0)
6) Удаление слов
На этом этапе мы расширяем англоязычные сокращения с помощью python.
def decontracted(phrase): phrase = re.sub(r"won't", "will not", phrase) phrase = re.sub(r"can\'t", "can not", phrase) phrase = re.sub(r"n\'t", " not", phrase) phrase = re.sub(r"\'re", " are", phrase) phrase = re.sub(r"\'s", " is", phrase) phrase = re.sub(r"\'d", " would", phrase) phrase = re.sub(r"\'ll", " will", phrase) phrase = re.sub(r"\'t", " not", phrase) phrase = re.sub(r"\'ve", " have", phrase) phrase = re.sub(r"\'m", " am", phrase) return phrase
7) Удаление стоп-слов
стоп-слова - это слова, которые отфильтровываются до или после обработки данных естественного языка. Хотя «стоп-слова» обычно относятся к наиболее распространенным словам в языке, не существует единого универсального списка стоп-слов, используемого всеми инструментами обработки естественного языка.
nltk.download('stopwords') eng_stopwords = set(stopwords.words('english'))
8) Основание
Построение - это процесс сокращения слова до его основы, которая присоединяется к суффиксам и префиксам или к корням слов, известная как лемма. Построение важно для понимания естественного языка (NLU) и обработки естественного языка (NLP).
def stemmer(data): review_clean_ps = [] ps = PorterStemmer() for sentance in tqdm(data['review'].values): ps_stems = [] for w in sentance.split(): if w == 'oed': continue ps_stems.append(ps.stem(w)) review_clean_ps.append(' '.join(ps_stems)) data['review']=review_clean_ps return data
9) Лемматизация
Лемматизация - это процесс объединения различных флективных форм слова, чтобы их можно было анализировать как единый элемент. Лемматизация похожа на выделение корней, но придает словам контекст. Таким образом, он связывает слова с одинаковым значением в одно слово.
def get_wordnet_pos(treebank_tag): if treebank_tag.startswith('J'): return wordnet.ADJ elif treebank_tag.startswith('V'): return wordnet.VERB elif treebank_tag.startswith('N'): return wordnet.NOUN elif treebank_tag.startswith('R'): return wordnet.ADV else: return 'n' nltk.download('averaged_perceptron_tagger') nltk.download('wordnet') def lemmatization(data): review_clean_wnl = [] wnl = WordNetLemmatizer() for sentance in tqdm(data['review'].values): wnl_stems = [] token_tag = pos_tag(sentance.split()) for pair in token_tag: res = wnl.lemmatize(pair[0],pos=get_wordnet_pos(pair[1])) wnl_stems.append(res) review_clean_wnl.append(' '.join(wnl_stems)) data['review']=review_clean_wnl return data
10) Векторизация
Вложения слов или векторизация слов - это методология в НЛП для сопоставления слов или фраз из словаря с соответствующим вектором действительных чисел, который используется для поиска предсказаний слов, сходства / семантики слов.
Существуют разные методы векторизации, в основном речь идет о сумке слов и векторизаторе tfidf.
#bag of words vectorizer_bow = CountVectorizer(min_df=10,ngram_range=(1,4), max_features=5000) vectorizer_bow.fit(X_train.values) #fitting x_train_bow= vectorizer_bow.transform(X_train.values) x_test_bow= vectorizer_bow.transform(X_test.values) #tfidf tfidfvectorizer = TfidfVectorizer(min_df=10,max_features=5000) text_tfidf = tfidfvectorizer.fit(X_train.values) #fitting X_train_tfidf =tfidfvectorizer.transform(X_train.values) X_test_tfidf =tfidfvectorizer.transform(X_test.values)
Вы можете найти мое полное решение в моем репозитории Github, и если у вас есть какие-либо предложения, свяжитесь со мной через Linkedin