【发布时间】:2021-03-16 10:37:56
【问题描述】:
我正在尝试构建一个分类器,以根据这些文件的名称将一些文件分为 150 个类别。以下是我的数据集中的一些文件名示例(约 700k 个文件):
104932489 - urgent - contract validation for xyz limited.msg
treatment - an I l - contract n°4934283 received by partner.pdf
- invoice_8843238_1_europe services_business 8592342sid paris.xls
140159498736656.txt
140159498736843.txt
fsk_000000001090296_sdiselacrusefeyre_2000912.xls
fsk_000000001091293_lidlsnd1753mdeas_2009316.xls
您可以看到文件名实际上可以是任何东西,但是对于相同的类别,总会有一些模式受到尊重。它可以是数字(有时很接近)、特殊字符(空格、-、°),有时是长度等。
因为我有大约 700k 文档,所以逐个提取所有这些模式需要很长时间。另外,我对 100% 的准确率不感兴趣,70% 就足够了。
真正的问题是我不知道如何编码这些数据。我尝试了很多方法:
- 逐个字符标记并将它们提供给具有嵌入层的 LSTM 模型。但是,我无法实现它并出现尺寸错误。
- 调整 Word2Vec 以将字符转换为向量。但是,这会自动删除所有标点符号和空格字符,而且我会丢失数字数据。另一个问题是它创建了更多无用的维度:如果大小为 20,我将拥有 20 个维度的数据,但如果我仔细观察,在这 20 个维度中总是有相同的 150 个向量,所以它真的没用。我可以使用二维大小,但我仍然需要数字数据和特殊字符。
- 从每个路径生成 n-gram,范围为 1-4,然后使用 CountVectorizer 计算频率。我检查并没有丢弃特殊字符,但它给了我大约 400,000 个特征!我正在使用 UMAP (n_components=5, metric='hellinger') 运行降维,但降维运行了 2 小时,然后内核崩溃。
有什么想法吗?
【问题讨论】:
标签: machine-learning classification nltk data-science embedding