我使用 sklearn 进行语言识别的数据集有问题吗?
Posted
技术标签:
【中文标题】我使用 sklearn 进行语言识别的数据集有问题吗?【英文标题】:Is there a problem with my data set for language identification using sklearn? 【发布时间】:2019-06-08 03:04:13 【问题描述】:我已经根据 53 种语言的庞大训练数据集训练了我的语言识别模型。对于某些语言来说,精确度是正确的,但有些语言的表现很差,英语就是其中之一。这让我认为数据集仍然一团糟。
我将数据采样不足 500 条记录,从文本中删除了特殊字符、多余的空格和不同的标点符号,并将文本字段的长度限制为 140 个字符。清理后的英语数据集如下所示: https://drive.google.com/file/d/1lv4ZqTPUCRV2s4G9-LWlXXVxtpW2s9Hb/view
遗憾的是,精度仅为 0.5。有些行仍然包含不同的语言文本,但是,我不确定如何处理。
此外,我正在使用 ngram_range 为 1 到 3 的 TFIidfVectorizer 来规范化文本特征和逻辑回归分类器。我也尝试过 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
【问题讨论】:
【参考方案1】:其实你的结果很好。你的问题可能性很大。我指的是其中的一些。
machine learning
中的型号选择没有golden rule
。您可以尝试不同的模型并查找原因why one is working and other not?
。有哪些构建经验,要选择这些模型。
The prediction of these model depend on features
。在undersampling
时,您可能会丢失很多有用的信息(即使是英语),即使some-times special characters, punctualtions
也有有价值的信息。你也可以试试。
但是,你的结果还是不错的。但您也可以尝试其他型号,然后选择最适合的型号。
【讨论】:
【参考方案2】:我能想到的最简单的方法是允许一定数量的最常见特殊字符,例如 40 个。他们中的一些人立即放弃了语言
【讨论】:
以上是关于我使用 sklearn 进行语言识别的数据集有问题吗?的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用caret包中的createResample函数进行机器学习数据集采样数据集有放回的采样(bootstrapping)