我正在尝试使用fasttext python包在Windows中训练fasttext分类器。我有一个utf8文件,其中包含以下行
__label__type1 sample sentence 1
__label__type2 sample sentence 2
__label__type1 sample sentence 3
当我奔跑
##label_prefix=__label__, dim=300,Epoch=50,min_count=1,ws=3,minn=4,pretrained_vectors=wiki.简单.vec
我得到了以下错误
File "fasttext\fasttext.pyx", line 256, in fasttext.fasttext.supervised (fasttext/fasttext.cpp:7265)
File "fasttext\fasttext.pyx", line 182, in fasttext.fasttext.train_wrapper (fasttext/fasttext.cpp:5279)
ValueError: fastText: cannot load data.train.txt
当我检查目录中的文件类型时,我得到了
__pycache__: directory
data.train.txt: UTF-8 Unicode text, with very long lines, with CRLF line terminators
train.py: Python script, ASCII text executable, with CRLF line terminators
wiki.simple.vec: UTF-8 Unicode text, with very long lines, with CRLF line terminators
此外,当我尝试在MacO中使用相同的训练文件训练相同的分类器时,它可以正常工作。我试图理解为什么无法读取该txt文件。
谢谢!
太长别读:使用os模块安全地构造路径,尤其是在Python2中
该错误表示无法加载文件。由于您的环境之间的唯一区别是操作系统,那么线索是您没有正确定位文件,因为每个OS处理路径的方式不同。我觉得这是大多数python程序员至少犯过一次的错误,因为这是意想不到的。
你可以硬编码路径,但是如果你跨平台使用东西,你会在未来遇到问题。就我而言,有时我会在Windows中快速开发一些东西,然后在*nix平台上大规模部署。
我建议改用os模块,因为它可以跨平台工作。在评论中说,他们有一个路径“my文件夹\n文件夹\t文件夹”;通过尝试为路径构建自己的字符串,而不是使用os模块…在Windows上,即使文件夹没有以换行符\n和制表符\t开头,它仍然不起作用,因为Windows路径需要转义斜杠(\)。使用os,你不必知道。
>>> import os
>>> os.getcwd()
'C:\\Python27'
>>> os.path.abspath(os.sep)
'C:\\'
>>> os.chdir(os.path.join(os.path.abspath(os.sep, "Users", "Jeff"))
>>> os.getcwd()
'C:\\Users\\Jeff'
通常,您将使用项目根的相对路径,而不是绝对路径。这些更容易,当前OS的根有点棘手(你可以在这里找到答案)
(我提供了我们从评论中得出的完整答案)
编辑:也许python 3有一些这个链接说比os、path lib更好的东西。我从未使用过python 3,所以我不能说。
我花了一点时间来创建一个环境来测试你的代码。但是我在Windows中所做的和为我工作的是在Cygwin中安装fastText。我希望这个答案对有类似问题的人有用。
环境
>
Winwdows 10
CYGWIN_NT-10.0 DESKTOP-RR909JI 2.10.0(0.325/5/3)2018-02-02 15:16x86_64
gcc-g: 7.3|gcc-core 7.3
Python2.7|Python2-Cython 0.25.2|python2pip|Python2-devel
pip安装fastText
文件
user@DESKTOP-RR909JI ~/projects
$ file *
data.txt: ASCII text
data.train.txt: Big-endian UTF-16 Unicode text
fasttext_ie.py: Python script, ASCII text executable
model.bin: data
wiki.simple.vec: UTF-8 Unicode text, with very long lines
fastest_ie.py
#!/usr/bin/python
import fasttext
fasttext.supervised('data.txt','model', label_prefix='__label__', dim=300, epoch=50, min_count=1, ws=3, minn=4, pretrained_vectors='wiki.simple.vec')
我已经从这里下载了预训练的词向量(wiki.简单. vec)。我已经在data.txt
中复制了您的输入示例,并使用UTF-16data.train.txt
制作了一个版本
执行代码片段后,花了一段时间但生成了一个文件,但它只发生在ASCII文本文件中:
user@DESKTOP-RR909JI ~/projects
$ ls -ltrh model.bin
-rw-r--r-- 1 user user 129M jun. 28 00:56 model.bin
它有很多字符串:
qateel
olympiques
lesothosaurus
delillo
satrapi
conferencing
numan
echinodermata
haast
tangerines
duat
vesey
rotaviruses
velox
chepstow
capitale
rock/pop
belasco
sardanapalus
jadis
macintyre
当尝试与UTF-16
它没有生成文件,也没有完成该过程,它只是继续运行而没有完成。
所以我们可以说,它失败了。
尽管fastText说UTF-8,它的支持:
其中data. txt是一个包含UTF-8编码文本的训练文件。默认情况下,单词向量将考虑3到6个字符的字符n-gram。在优化结束时,程序将保存两个文件:model.bin和model.vec。model.vec是一个包含单词向量的文本文件,每行一个。model.bin是一个包含模型参数以及字典和所有超参数的二进制文件。该二进制文件稍后可用于计算单词向量或重新启动优化。
我通过Cygwin安装的版本可能会有所不同。
在stackoverflow中阅读了这个问题后,我想问:您是否尝试过将文件更改为ASCII并测试会发生什么?
我所有的文件都在同一个根目录中。
我不知道fastText,但我想执行你的代码,这是可行的。我在gcc库方面遇到了问题,我必须为g和core安装相同的版本。