Двоичная классификация текста

Рейтинг: 1Ответов: 1Опубликовано: 18.05.2023

Помогите разобраться или направьте в нужное русло.

Есть 100.000 строк со словом вилка.

Вилка разная бывает.

  1. Столовый прибор
  2. Вилка в спортивных ставках
  3. Велосипедная вилка
  4. Вилка цен
  5. Вилка в розетку
  6. и т.д.

Вот я хочу выуживать только что связанно с вилкой цен и ничего другого.

Мне нужно пройти 100.000 строк в ручную и отметить 0 и 1, что я считаю нужным или есть разумные способы ускорить процесс для подготовки данных чтобы обучить модель ?

И на какой длинне строк обучать ?

Так как есть короткие / средние / длинные / очень длинные

Спасибо!

Ответы

▲ 0

Могу предложить 3 подхода к упрощению задачи:

  1. Очевидный. Использовать ключевые слова и шаблон поиска. Ключевыми словами могут быть: "вилка цен", "ценовая вилка", "вилка для цен", и т.д. Ключевые слова для пометки неценовых вилок: "Вилка в спортивных ставках", "Велосипедная вилка" и т.д. Здесь нужно не забывать о регистре;
  2. Странный. Использовать регулярные выражения. Например, отфильтровать все строки, где есть часть строки "цен". Здесь возможны ложные срабатывания "Столовая вилка - ценный прибор";
  3. ML-подход. Разметить часть выборки, написать модель, обучить её и разметить ей всё остальное.

Пример кода для ML-модели на python:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.svm import LinearSVC

corpus = ["Столовый прибор", "Вилка в спортивных ставках", "Велосипедная вилка", "Вилка цен", "Вилка в розетку"]
labels = [0, 1, 0, 1, 0]  # 0 - не связано с вилкой цен, 1 - связано с вилкой цен

X_train, X_test, y_train, y_test = train_test_split(corpus, labels, test_size=0.2, random_state=42)

vectorizer = TfidfVectorizer()

X_train_vectors = vectorizer.fit_transform(X_train)
X_test_vectors = vectorizer.transform(X_test)

classifier = LinearSVC()
classifier.fit(X_train_vectors, y_train)

accuracy = classifier.score(X_test_vectors, y_test)

new_text = "Вилка для цен"
new_text_vector = vectorizer.transform([new_text])
predicted_label = classifier.predict(new_text_vector)

print("Predicted label:", predicted_label)
print("Accuracy:", accuracy)