载入数据集的时候报could not convert string to float错及解决方法

突然想记录学习期间遇到的问题,大部分是网上没有找到答案自己摸索出的解决方案,就拿这一篇当做开头啦~

一、utf/gbk报错 :

在处理SICK数据集的时候,为了方便实验我切分成了train集和test集。特别坑!

针对数据集是txt的,我转换成了csv格式(用python转的,代码csdn上特别多),并且特别注意了encoding用的utf-8,但有时候你一用记事本或者notepad++打开它就变成了ANSI编码,如果你把ANSI格式的读进去,会直接报utf-8的错。

处理方法:

1、用记事本或者notepad++转换为utf-8(是转换,不是使用,不然下次打开还是ANSI)

2、用windows自带的csv文件保存,注意:另存为的时候格式选择CSV UTF-8,但是这里保存后是“带有BOM的utf-8”,还是需要转一次成纯utf-8,不然一些数据会读不进去。

二、could not convert string to float报错:

在上述方法处理好后运行程序,词嵌入完成了,在训练第一个epoch的时候,有数据读不进去,报could not convert string to float错误。我上网查了资料,无非一个方法:检查数据里面是否有非法字符,也就是\n,\t。

所以无脑先尝试第一种方法,打开notepad++:

1、Ctrl F替换掉所有的\n、\t

2、清掉所有的行尾空字符

3、把所有的tab转换成空格(步骤2、3:编辑--空白字符操作--2/3)

有些网友遇到这个问题后,用以上三个步骤能解决问题,但我还是报错,并且报错抛出的例句真的一点问题都没有。我做了个实验:

我找到我之前跑通的数据集A,成功运行;用excel打开A,删掉了一列不影响实验的数据,相同格式保存再运行,结果:报错!!! 错误原因也是could not convert string to float。后面抛出的句子也是一点问题都没有的。这里真的给我戴上了痛苦面具,折磨了我许久,我觉得可能是你用csv文件编辑后,特别是行列操作后,分隔符等会发生变化。

解决方法:用notepad++编辑目标数据集,复制文本粘贴到可用数据集上面,别用windows自带的word、excel之类的。这次50个epoch跑完啦!

你可能感兴趣的:(python,机器学习,自然语言处理)