我使用 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 进行语言识别的数据集有问题吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用机器学习进行人脸识别的灰色还是 RGB?

R语言使用caret包中的createResample函数进行机器学习数据集采样数据集有放回的采样(bootstrapping)

无法识别的名称:使用 bigquery 标准 sql 进行嵌套查询时出错

使用 TensorFlow 进行端到端语音识别的 RNN

使用分类器进行面部识别的迁移学习

使用阈值进行面部识别的理解困难