提问者:小点点

fasttext无法加载训练txt文件


我正在尝试使用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文件。

谢谢!


共2个答案

匿名用户

太长别读:使用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安装相同的版本。