Двоичная классификация текста
Помогите разобраться или направьте в нужное русло.
Есть 100.000 строк со словом вилка.
Вилка разная бывает.
- Столовый прибор
- Вилка в спортивных ставках
- Велосипедная вилка
- Вилка цен
- Вилка в розетку
- и т.д.
Вот я хочу выуживать только что связанно с вилкой цен и ничего другого.
Мне нужно пройти 100.000 строк в ручную и отметить 0 и 1, что я считаю нужным или есть разумные способы ускорить процесс для подготовки данных чтобы обучить модель ?
И на какой длинне строк обучать ?
Так как есть короткие / средние / длинные / очень длинные
Спасибо!
Ответы (1 шт):
Автор решения: Dmitrii Malygin
→ Ссылка
Могу предложить 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)