一、背景

allennlp是一个对nlp攻击进行封装的工具包,基于pytorch写的,总体来说还可以,但是前后的api和设计差距较大,这里记录一下使用时遇到的下面的问题。

二、问题
2.1 错误

在使用Vocabulary.from_files的时候,从文件读取数据出现了下面的问题

AssertionError: OOV token not found!
2.2 解决

这个问题是由于系统文件差异引起的,在Unix系统中是使用LF(\n)作为换行符,在Mac系统是使用CR(\r)作为换行符,在Windows中使用的是CRLF,而在allennlp的源码中只对\n做处理,源码如下所示:

token = line.replace('@@NEWLINE@@', '\n')
if is_padded:
    assert self._oov_token in self._token_to_index[namespace], "OOV token not found!"

因此就会出现上述的问题,所以解决的办法就是将CRLF转化成LF的就可以。可以使用notepad++直接在编辑-->文档格式转换-->Unix的就可以了。

三、总结

虽然allennlp的工具包不错,不过早期的版本资源较少,除了参考别人的代码以外,最重要的就是阅读源码,通过阅读源码发现bug的存在。

posted on 2022-03-21 21:04  蔚蓝色の天空  阅读(156)  评论(0编辑  收藏  举报