工作中遇到nlp相关的问题,从接手到今天有了一点眉目差不多三周时间。由于之前只是在理论上知道有nlp这一回事,这次的实践遇到很多坑,过程磕磕碰碰经历得很痛苦,在此记录下,以便有与我相似需求的同学有一点参考资料。
首先我的工作环境是Windows7 64+Anaconda+Python 3.6,明确自己的工作环境很重要,因为在网上查找资料时很多解决方案都不适用于我这个环境,如果用的是linux/os的系统应该会轻松很多。
1、中文分词--结巴
在Anacona Prompt(Anacona的cmd)中执行
conda install jieba
正常情况下会自动下载jieba及其依赖的包,这里需要注意的是在使用Anaconda时优先考虑使用conda install 命令,而不是pip install(虽然我用pip安装好像也没什么问题)
关于结巴分词的详情参考官网:
https://github.com/fxsjy/jieba
2、直观展示--词云
初步展示分词的结果,词云是最直观的方式,这里我参考了
https://blog.csdn.net/FontThrone/article/details/72782971
3、fastText安装--坑、坑、坑
fastText安装过程真可谓摔得我鼻青脸肿,曾因为不同版本的fastText而遇到各种问题,在csdn、github、stack overflow、zhihu上迷失了自我,这里我对各个版本作一个汇总。
先说两个我没走通的:
1、https://pypi.org/project/fasttext/
pypi官网上的这个fasttext,安装方法是
pip install fasttext
分类方法的调用方式:
classifier = fasttext.supervised('data.train.txt', 'model', label_prefix='__label__')
其中data.train.txt 为训练数据集,model是它的输出,包括model.bin和model.vec,label_prefix默认的类别前缀\\
测试及结果查看的方法:
result = classifier.test('test.txt')
print 'P@1:', result.precision
print 'R@1:', result.recall
print 'Number of examples:', result.nexamples
最后一行输出分类出错的例子。
2、第二个没走通的是博客园
https://www.cnblogs.com/gaofighting/p/9552821.html
里文末最后提到的gensim.models.fasttext 版本
安装的命令:
pip install --upgrade gensim
以上两个我走不通好像是因为安装时报Microsoft Visual C++ 14.0 is required,还是在调用fasttext.supervised时一直报 supervised方法不存在我忘记了,总之找了很多方法都没成功后来就放弃了,如果报Microsoft Visual C++ 14.0 is required的error,务必确保自己的电脑确实安装了Visual Studio 2017及以上版本,这里可以在官网上下载社区免费版
https://visualstudio.microsoft.com/zh-hans/downloads/
具体的安装可以参考
https://github.com/benfred/implicit/issues/76
链接中temannin的回答
Here's what I did:
Downloaded Microsoft Visual C++ Build Tools from this link:https://visualstudio.microsoft.com/downloads/
Run the installer
Select: Workloads → Visual C++ build tools.
Install options: select only the “Windows 10 SDK” (assuming the computer is Windows 10)
最后一步因人而异,我的是win7,Windows 10 SDK这个选项是默认勾选的,后面证明也没问题
我成功安装的是
https://github.com/facebookresearch/fastText
facebook的github官网上的这个
不论是conda install 还是 pip install 都受阻,最后采用离线安装,安装包是在
https://www.lfd.uci.edu/~gohlke/pythonlibs/
找到相应的版本,文件以.whl结尾
另外,anaconda官网上也有提供第三方包
https://anaconda.org/conda-forge/jieba/files
安装时打开Anacona Prompt,cd到.whl文件所在位置
pip install 文件名.whl
即可
安装成功之后用
import fastText.FastText as ff
的方式导入包,调用方法如下:
classifier = ff.train_supervised("data/try_fasttext_train.txt",label='__label__')
其中try_fasttext_train.txt是训练数据集,类别前缀依然是__label__.
这里try_fasttext_train.txt里面的数据存放格式没有明确指出,导致最后我在调用classifier.test方法时结果都是(0,nan,nan),这其中我受到一个解决方案的影响很大,链接我忘记了,他说的是fasttext在windows上就是出不来结果的,推荐使用上述我走不通的两个版本中的一个解决了,这里我被误导的很严重。其实出现(0,nan,nan)很大可能是你的训练集没有符合ff.train_supervise的要求,费尽力气终于在官网的
https://github.com/facebookresearch/fastText/blob/master/classification-example.sh
里的
https://github.com/le-scientifique/torchDatasets/raw/master/dbpedia_csv.tar.gz
找到了例子,格式为
__label__1 你好 再见
__label__0 我 爱 北京 天安门
这里我又犯了一个错误,把__label__错写成__lable__,导致又又又一次出现(0,nan,nan)的结果
参考的是这里
https://github.com/facebookresearch/fastText/issues/192
所以官网的东西很重要,要仔细看,上面都会有数据的,同时遇到的问题大部分都已经有人遇到过了,所以Issues板块也很重要
之后如果有时间我会尝试走不通的那两种方法,个人猜测gensim里的fasttext和facebook的fasttext应该是一样的,上次报错主要是因为没安装Visual Studio 2019