在Windows下安装fasttext,并对中文文本进行Text classification

工作中遇到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

你可能感兴趣的:(机器学习及统计学习,python)