Чуть более двух лет назад я узнал об этом явлении, о создании рабочих мест, которое мы все называем машинным обучением. По мере того, как я проводил дополнительные исследования в этой области, я обнаружил, что машинное обучение более разнообразно, чем говорят вам обычные люди. У него много ответвлений, и НЛП - одно из них. Обработка естественного языка настолько широко используется, что люди даже не подозревают об этом. Например, виртуальные помощники, такие как Siri, Cortana, используют NLP, чтобы понимать, что им говорят через микрофон. Сейчас, хотя НЛП кажется новым направлением развития, его корни уходят корнями во вторую мировую войну. Помните этого парня-

Кто изображал этого парня-

На самом деле НЛП уходит своими корнями в «бомбу», созданную Аланом Тьюрингом и его командой. Он использовался для обработки кодов (или электрических сигналов) и преобразования их в естественный язык, точно так же, как работают современные преобразователи речи в текст. Теперь, прежде чем мы начнем НЛП и запачкаем руки, нам нужно выучить немного терминологии.

Документ - документ - это набор текстов. Он содержит все абзацы, фразы и информацию

Корпус- Корпус - это простой набор документов.

TF- TF, сокращение от текстовой частоты, - это количество раз, когда слово появляется в документе. Это говорит нам о том, насколько важно слово в документе.

IDF- IDF означает обратную частоту документа - это соотношение, которое говорит нам о важности слова во всем корпусе.

TFIDF- Оценка TFIDF - это значение, которое мы получаем, умножая значения TF и ​​IDF.

BOW- Мешок слов - это способ представления предложений. Например-

Наклейка с красной бутылкой = [1,0,1,1]

Наклейка с зеленой бутылкой = [0,1,1,1]

Красно-зеленая наклейка на бутылку = [1,1,1,1]

Теперь, когда это не проблема, давайте создадим наш самый первый детектор SMS-спама. Используемый набор данных можно найти здесь. Начнем с импорта всех необходимых библиотек. Теперь я использую Gogle colabs только потому, что все предустановлено, и мне не о чем беспокоиться, кроме своего кода. Если вы не используете Google colabs (я рекомендую вам это сделать), убедитесь, что у вас установлен NLTK.

#Importing the libraries
import nltk
import pandas as pd
import numpy as np
import string
from sklearn.feature_extraction.text import CountVectorizer

Теперь, когда у нас это есть, пора запустить оболочку загрузки NLTK.

nltk.download_shell()

Если вы запустите это, вы должны увидеть что-то вроде этого

Введите команды в том же порядке. Теперь начинается самое интересное. Начнем с импорта нашего набора данных.

from google.colab import files
uploaded=files.upload()
sms=[line for line in open('SMSSpamCollection')]
#storing the dataset onto a dataframe
df=pd.read_csv('SMSSpamCollection', sep='\t', names=['target','sms'])
df.head()
df.describe()

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

df['length']=df['sms'].apply(len)
df.head()

Если вы до сих пор все сделали правильно, вы должны увидеть что-то вроде этого:

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

s="this is a sample message. Please remove the punctuations ? ! Please ! !"
npunc=[char for char in s if char not in string.punctuation]
npunc=''.join(npunc)
npunc

Ваш результат должен выглядеть примерно так:

Следующим шагом будет удаление стоп-слов из предложения. Стоп-слова - это такие слова, как «a», «is», «this», «that», слова, которые часто используются, чтобы убедиться, что предложение «имеет» смысл. Давайте удалим из этого предложения стоп-слова -

from nltk.corpus import stopwords 
clean_sent=[word for word in npunc.split()if word.lower() not in stopwords.words('english')] 
clean_sent

Ваш результат должен быть-

Теперь это было для одного предложения, нам нужно делать это для каждого SMS. Теперь ввод этих команд снова и снова для более чем 5000 записей является избыточным. Чтобы решить эту проблему, мы используем одно из первых вещей, которые мы узнали в наших классах программирования. Пишем функцию!

def process_text(raw_text):  
    #check for punctuations  
    remove_punc=[char for char in raw_text if char not in           
    string.punctuation]
   #form a sentence again  
   remove_punc=''.join(remove_punc) 
  
   #removing stopwords  
   return [word for word in remove_punc.split()   if word.lower()
   not in stopwords.words('english')]
   
df['sms'].apply(process_text)

Следующий шаг - преобразовать эти предложения в пакеты слов или BOW, а затем преобразовать их в TFID,

bow_transformer=CountVectorizer(analyzer=process_text).fit(df['sms']) 
df_bow=bow_transformer.transform(df['sms']) 
from sklearn.feature_extraction.text import TfidfTransformer 
tfidf_trans=TfidfTransformer() 
tfidf_trans.fit(df_bow) 
df_tfidf=tfidf_trans.transform(df_bow)

Теперь осталось пропустить это через классификатор. Согласно исследованиям, наивный байесовский классификатор - лучший алгоритм для этой работы. А почему это так, я расскажу об этом в другой статье. Давайте пропустим это через классификатор и посмотрим на его точность.

from sklearn.naive_bayes import MultinomialNB
spam_ham_detector=MultinomialNB()
from sklearn.model_selection import train_test_split
x=df_tfidf
y=df['target']
x_train, x_test, y_train, y_test=train_test_split(x,y, test_size=0.3, random_state=42)
spam_ham_detector.fit(x_train, y_train)
accuracy=spam_ham_detector.score(x_test, y_test)
print(accuracy*100)

Похвалите себя за создание своего первого детектора SMS-спама. 96%. Сейчас мой индийский ум сразу приходит в голову, почему не на сто процентов, и именно в этот день я понял, что старею. Люди, имеющие опыт машинного обучения, подтвердят, что никакая модель не может точно предсказать что-либо со 100% точностью. Несмотря на то, что мы можем настроить его, чтобы он был почти идеальным, порог все еще находится на уровне 99,99%.

НЛП - это технология, которую удобно иметь в своем наборе инструментов. Он используется в повседневных приложениях и программном обеспечении для улучшения взаимодействия с пользователем. Я надеюсь, что с помощью этой статьи я смог вооружить вас знаниями о мельчайших деталях концепции НЛП. Если у вас есть какие-либо вопросы или вы хотите связаться, вы можете связаться со мной по адресу:

Linkdin- https://www.linkedin.com/in/swastik-ghosh-a7467a180/

Надеюсь, вам понравилось! Продолжайте учиться, продолжайте расти!