контролируемая классификация текстов | Кодементор
Классификация текстов
Модели классификации текста используются для разделения текста на организованные группы. Текст анализируется моделью, а затем в зависимости от содержимого применяются соответствующие теги. Модели машинного обучения, которые могут автоматически применять теги для классификации, известны как классификаторы.
Классификаторы не могут просто работать автоматически, их нужно обучить, чтобы они могли делать конкретные прогнозы для текстов. Обучение классификатора осуществляется:
1)определение набора тегов, с которыми будет работать модель
2) создание ассоциаций между фрагментами текста и соответствующим тегом или тегами
После того, как будет помечено достаточное количество текстов, классификатор может извлечь уроки из этих ассоциаций и начать делать прогнозы с новыми текстами.
Контролируемое обучение для классификации текстов.
ЧАСТЬ-I: Обучение
- Во время обучения экстрактор признаков используется для преобразования каждого входного значения в набор признаков.
- Эти наборы функций, которые фиксируют основную информацию о каждом входе, должны использоваться для его классификации.
- Пары наборов функций и меток вводятся в алгоритм машинного обучения для создания модели.
ЧАСТЬ-II: Прогноз
- Во время прогнозирования тот же экстрактор признаков используется для преобразования ненаблюдаемых входных данных в наборы признаков. Эти наборы функций затем передаются в модель, которая создает прогнозируемые метки.
загрузить набор данных:
Чтобы подготовить набор данных, загрузите загруженные данные в кадр данных pandas, содержащий два столбца — текст и метку.
load_data = dataset_load();
trainDF = load_data.load_cvs_dataset("../corpus.csv")
txt_label = trainDF['label']
txt_text = trainDF['text']
этот сегмент кода находится в trainmodel_write.py
def load_cvs_dataset(self,dataset_path):
#Set Random seed
np.random.seed(500)
# Add the Data using pandas
Corpus = pd.read_csv(dataset_path,encoding='latin-1',error_bad_lines=False)
return Corpus
этот сегмент кода находится в dataset_load.py
Разработка текстовых функций:
Следующим шагом является этап проектирования функций. На этом этапе необработанные текстовые данные будут преобразованы в векторы объектов, а новые объекты будут созданы с использованием существующего набора данных. Мы будем реализовывать следующие различные идеи, чтобы получить соответствующие функции из нашего набора данных.
Считать векторы как функции
Векторы TF-IDF как признаки
Уровень слова
Уровень N-грамм
Уровень персонажа
Рассмотрим реализацию этих идей подробнее.
Считайте векторы как функции:
Вектор счетчика — это матричное представление набора данных, в котором каждая строка представляет документ из корпуса, каждый столбец представляет термин из корпуса, а каждая ячейка представляет частоту встречаемости определенного термина в конкретном документе.
Train_X, Test_X, Train_Y, Test_Y = model_selection.train_test_split(txt_text,txt_label)
count_vect = CountVectorizer(analyzer="word")
count_vect.fit(txt_text)
# transform the training and validation data using count vectorizer object
Train_X_count = count_vect.transform(Train_X)
Test_X_count = count_vect.transform(Test_X)
этот сегмент кода находится в count_vectorizer.py
Векторы TF-IDF как функции:
Оценка TF-IDF представляет относительную важность термина в документе и во всем корпусе. Оценка TF-IDF состоит из двух слагаемых: первое вычисляет нормализованную частоту терминов (TF), второе слагаемое — это обратная частота документов (IDF), вычисляемая как логарифм количества документов в корпусе, деленный на число документов, в которых встречается конкретный термин.
TF
Векторы TF-IDF могут генерироваться на разных уровнях входных токенов (слова, символы, n-граммы)
а. Word Level TF-IDF: матрица, представляющая оценки tf-idf каждого термина в разных документах.
б. Уровень N-грамм TF-IDF: N-граммы представляют собой комбинацию N терминов вместе. Эта матрица, представляющая оценки tf-idf N-грамм
в. Уровень символов TF-IDF: матрица, представляющая оценки tf-idf n-грамм уровня символов в корпусе.
Уровень слова TF-IDF:
Train_X, Test_X, Train_Y, Test_Y = model_selection.train_test_split(txt_text, txt_label)
encoder = preprocessing.LabelEncoder()
Train_Y = encoder.fit_transform(Train_Y)
Test_Y = encoder.fit_transform(Test_Y)
tfidf_vect = TfidfVectorizer(analyzer="word",max_features=5000)
tfidf_vect.fit(txt_text)
Train_X_Tfidf = tfidf_vect.transform(Train_X)
Test_X_Tfidf = tfidf_vect.transform(Test_X)
Этот сегмент кода находится в word_tf_idf.py
Уровень N-грамм TF-IDF:
Train_X, Test_X, Train_Y, Test_Y = model_selection.train_test_split(txt_text, txt_label)
tfidf_vect_ngram = TfidfVectorizer(analyzer="word", ngram_range=(2, 3), max_features=5000)
tfidf_vect_ngram.fit(txt_text)
Train_X_ngram = tfidf_vect_ngram.transform(Train_X)
Test_X_ngram = tfidf_vect_ngram.transform(Test_X)
Этот сегмент кода находится в ngram_tf_idf.py
Уровень персонажа TF-IDF:
Train_X, Test_X, Train_Y, Test_Y = model_selection.train_test_split(txt_text, txt_label)
tfidf_vect_ngram_chars = TfidfVectorizer(analyzer="char", token_pattern=r'\w{1,}', ngram_range=(2,3), max_features=5000)
tfidf_vect_ngram_chars.fit(txt_text)
Train_X_ngram_chars = tfidf_vect_ngram_chars.transform(Train_X)
Test_X_ngram_chars = tfidf_vect_ngram_chars.transform(Test_X)
Этот сегмент кода находится в char_tf_idf.py
Обучение модели и оценка производительности модели:
Последним шагом в структуре классификации текста является обучение классификатора с использованием функций, созданных на предыдущем шаге. Существует множество различных вариантов моделей машинного обучения, которые можно использовать для обучения окончательной модели. Для этой цели мы реализуем следующие различные классификаторы:
Наивный байесовский классификатор
Линейный классификатор
Машина опорных векторов
Модели мешков
Давайте реализуем эти модели и разберемся в их деталях. Следующая функция представляет собой функцию полезности, которую можно использовать для обучения модели. Он принимает классификатор, feature_vector обучающих данных, метки обучающих данных и вектора признаков действительных данных в качестве входных данных. Используя эти входные данные, модель обучается и вычисляется показатель точности.
def train_model(self,classifier, train_input,test_input, train_target, test_target, is_neural_net=False):
classifier.fit(train_input, train_target)
predictions = classifier.predict(test_input)
if is_neural_net:
predictions = predictions.argmax(axis=-1)
return accuracy_score(predictions, test_target)
Наивный Байес:
Реализация наивной байесовской модели с использованием реализации sklearn с различными функциями
Наивный байесовский метод — это метод классификации, основанный на теореме Байеса с предположением о независимости предикторов. Наивный байесовский классификатор предполагает, что наличие определенного признака в классе не связано с наличием какого-либо другого признака.
model_input = char_tf_idf().convert_feature(txt_text, txt_label)
naive = naive_bayes.MultinomialNB()
accuracy = Classifier().train_model(naive, model_input.get_train_input(), model_input.get_test_input(),
model_input.get_train_target(),
model_input.get_test_target())
print ("NB, char_tf_idf accuracy is : ", accuracy * 100)
model_input = count_vectorizer().convert_feature(txt_text, txt_label)
naive = naive_bayes.MultinomialNB()
accuracy = Classifier().train_model(naive, model_input.get_train_input(), model_input.get_test_input(), model_input.get_train_target(), model_input.get_test_target())
print ("NB, count_vectorizer accuracy is : ", accuracy * 100)
model_input = ngram_tf_idf().convert_feature(txt_text, txt_label)
naive = naive_bayes.MultinomialNB()
accuracy = Classifier().train_model(naive, model_input.get_train_input(), model_input.get_test_input(), model_input.get_train_target(), model_input.get_test_target())
print ("NB, ngram_tf_idf accuracy is : ", accuracy * 100)
model_input = word_tf_idf().convert_feature(txt_text, txt_label)
naive = naive_bayes.MultinomialNB()
accuracy = Classifier().train_model(naive, model_input.get_train_input(), model_input.get_test_input(), model_input.get_train_target(), model_input.get_test_target())
print ("NB, word_tf_idf accuracy is : ", accuracy * 100)
этот сегмент кода находится в Naive_Bay_Clf.py
NB, точность char_tf_idf: 81,28
NB, точность count_vectorizer: 82,96
NB, точность ngram_tf_idf: 81,92
NB, точность word_tf_idf: 85,96000000000001
Линейный классификатор:
Логистическая регрессия измеряет взаимосвязь между категориальной зависимой переменной и одной или несколькими независимыми переменными путем оценки вероятностей с использованием логистической/сигмоидной функции.
#Build Text Classification Model and Evaluating the Model
naive = linear_model.LogisticRegression()
accuracy = Classifier().train_model(naive, model_input.get_train_input(), model_input.get_test_input(), model_input.get_train_target(), model_input.get_test_target())
print ("Linear_Clf, count_vectorizer accuracy is : ", accuracy * 100)
# Text feature engineering
model_input = ngram_tf_idf().convert_feature(txt_text, txt_label)
# Text feature engineering
# Build Text Classification Model and Evaluating the Model
naive = linear_model.LogisticRegression()
accuracy = Classifier().train_model(naive, model_input.get_train_input(), model_input.get_test_input(), model_input.get_train_target(), model_input.get_test_target())
print ("Linear_Clf, ngram_tf_idf accuracy is : ", accuracy * 100)
# Text feature engineering
model_input = word_tf_idf().convert_feature(txt_text, txt_label)
# Text feature engineering
Build Text Classification Model and Evaluating the Model
naive = linear_model.LogisticRegression()
accuracy = Classifier().train_model(naive, model_input.get_train_input(), model_input.get_test_input(), model_input.get_train_target(), model_input.get_test_target())
print ("Linear_Clf, word_tf_idf accuracy is : ", accuracy * 100)
Точность Linear_Clf, char_tf_idf: 84,36
Linear_Clf, точность count_vectorizer: 85,92
Точность Linear_Clf, ngram_tf_idf: 82,64
Точность Linear_Clf, word_tf_idf: 87,4
этот сегмент кода находится в Linear_Clf.py
Модель SVM:
Машина опорных векторов (SVM) — это контролируемый алгоритм машинного обучения, который можно использовать как для задач классификации, так и для регрессии. Модель извлекает наилучшую возможную гиперплоскость/линию, которая разделяет два класса.
#Build Text Classification Model and Evaluating the Model
naive=svm.SVC()
accuracy = Classifier().train_model(naive,model_input.get_train_input(),model_input.get_test_input(), model_input.get_train_target(), model_input.get_test_target())
print ("Svm_clf, ngram_tf_idf accuracy is : ", accuracy*100)
Точность Svm_clf, ngram_tf_idf: 51,76
этот сегмент кода находится в Svm_clf.py
Модель случайного леса:
Модели случайного леса — это разновидность ансамблевых моделей, в частности, моделей бэггинга. Они являются частью семейства моделей на основе дерева.
#Build Text Classification Model and Evaluating the Model
naive=ensemble.RandomForestClassifier()
accuracy = Classifier().train_model(naive,model_input.get_train_input(),model_input.get_test_input(), model_input.get_train_target(), model_input.get_test_target())
print ("RandomForest_Clf, count_vectorizer accuracy is : ", accuracy*100)
#Text feature engineering
model_input=word_tf_idf().convert_feature(clear_txt,txt_label)
#Text feature engineering
#Build Text Classification Model and Evaluating the Model
naive=ensemble.RandomForestClassifier()
accuracy = Classifier().train_model(naive,model_input.get_train_input(),model_input.get_test_input(), model_input.get_train_target(), model_input.get_test_target())
print ("RandomForest_Clf, word_tf_idf accuracy is : ", accuracy*100)
RandomForest_Clf, точность count_vectorizer: 77,84
RandomForest_Clf, точность word_tf_idf: 78,52
этот сегмент кода находится в RandomForest_Clf.py