一、背景
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的存在。