Я обучил свою модель идентификации языка на огромном наборе данных для обучения на 53 языках. Для некоторых языков точность точна, но некоторые языки терпят неудачу довольно плохо, английский является одним из них. Это заставляет меня думать, что набор данных все еще не работает.
Я недостаточно отобрал данные до 500 записей, удалил специальные символы, лишние пробелы и другие знаки препинания из текста и ограничил длину текстового поля до 140 символов. Набор данных для английского после очистки выглядит так:
https://drive.google.com/file/d/1lv4ZqTPUCRV2s4G9-LWlXXVxtpW2s9Hb/view
К сожалению, точность едва ли .5. Некоторые строки все еще содержат тексты на разных языках, однако я не уверен, как об этом позаботиться.
Кроме того, я использую TFIidfVectorizer с ngram_range от 1 до 3, чтобы нормализовать функцию текста и классификатор логистической регрессии. Я также попробовал MultinomilaNB, но тщетно. Ниже мой код:
y_resampled , x_resampled = under_sample(x, y)
x_train, x_val, y_train, y_val = model_selection.train_test_split(x_resampled, y_resampled, test_size=0.2, random_state=42)
vectorizer = feature_extraction.text.TfidfVectorizer(ngram_range=(1, 3), analyzer='char')
pipe = pipeline.Pipeline([
('vectorizer', vectorizer),
('clf', linear_model.LogisticRegression())])
# pipe = pipeline.Pipeline([
# ('vectorizer', vectorizer),
# ('clf', SGDClassifier())
# ])
pipe.fit(x_train, y_train)
y_predicted = pipe.predict(x_val)
print(metrics.classification_report(y_val, y_predicted, target_names=label_names))
Вот отчет о классификации:
precision recall f1-score support
ar 0.96 0.95 0.95 209
az 0.95 0.77 0.85 189
be 0.88 0.85 0.86 235
bg 0.77 0.79 0.78 199
ca 0.65 0.62 0.63 199
ce 0.85 0.76 0.80 109
ceb 0.73 0.47 0.57 51
cs 0.84 0.72 0.78 210
da 0.55 0.56 0.56 202
de 0.67 0.79 0.73 214
el 0.96 0.92 0.94 203
en 0.44 0.68 0.53 208
eo 0.71 0.70 0.71 181
es 0.66 0.54 0.60 204
et 0.73 0.84 0.78 150
eu 0.77 0.84 0.81 195
fa 0.92 0.88 0.90 212
fi 0.79 0.83 0.81 212
fr 0.65 0.74 0.69 212
gl 0.51 0.60 0.55 178
he 1.00 0.97 0.98 220
hi 1.00 0.89 0.94 186
hr 0.41 0.38 0.39 199
hu 0.86 0.88 0.87 204
hy 0.99 0.91 0.95 211
id 0.46 0.40 0.43 211
it 0.58 0.75 0.65 185
ja 0.97 0.87 0.92 215
ka 0.99 0.94 0.97 198
kk 0.93 0.82 0.87 208
ko 0.98 0.94 0.96 207
la 0.54 0.70 0.61 185
lorem 0.88 0.94 0.91 192
lt 0.81 0.88 0.84 184
ms 0.42 0.49 0.45 181
nl 0.69 0.76 0.72 202
nn 0.59 0.54 0.56 209
no 0.49 0.46 0.47 197
pl 0.70 0.78 0.74 196
pt 0.57 0.52 0.54 185
ro 0.77 0.81 0.79 219
ru 0.67 0.74 0.70 180
sh 0.54 0.39 0.45 205
sk 0.73 0.68 0.70 179
sl 0.55 0.58 0.57 173
sr 0.84 0.88 0.86 192
sv 0.63 0.59 0.61 211
th 1.00 0.88 0.94 216
tr 0.74 0.67 0.70 196
uk 0.86 0.74 0.80 210
ur 0.95 0.87 0.91 159
uz 0.75 0.79 0.77 162
vi 0.84 0.83 0.83 186
vo 1.00 0.51 0.68 70
war 0.73 0.69 0.71 100
zh 0.75 0.91 0.82 197
micro avg 0.74 0.74 0.74 10602
macro avg 0.75 0.74 0.74 10602
weighted avg 0.75 0.74 0.75 10602