调用ArabertPreprocessor提示do_farasa_tokenization意外参数报错如何解决
报错原因
- 核心触发点是你当前使用的AraBERT库版本已移除
do_farasa_tokenization参数,该参数仅在较早的v0.x版本中可用,新版本重构了预处理逻辑,把这个参数从ArabertPreprocessor类的构造函数中删除了,传入不存在的参数就会触发该类型错误。 - 另外你的代码存在逻辑错误:
ArabertPreprocessor是预处理工具类,第一个构造参数需要传入你使用的AraBERT预训练模型名称,不能直接把待处理的推特文本当做构造参数传入,也不应该在apply的lambda中重复实例化该类,会严重降低处理效率。
解决方法
- 移除代码中不存在的
do_farasa_tokenization参数 - 调整
ArabertPreprocessor的使用逻辑,先全局实例化预处理工具,再调用preprocess方法处理单条文本,参考代码如下:
from arabert.preprocess import ArabertPreprocessor, never_split_tokens from farasa.stemmer import FarasaStemmer # 全局实例化依赖工具,避免重复初始化 stemmer = FarasaStemmer(interactive=True) # 第一个参数替换为你实际使用的AraBERT预训练模型名 arabert_preprocessor = ArabertPreprocessor( model_name="bert-base-arabertv2", farasa=stemmer, use_farasapy = True ) # 调用preprocess方法处理文本 train_df['tweet'] = train_df['tweet'].apply(lambda x: arabert_preprocessor.preprocess(x))
如果你的业务逻辑必须保留Farasa分词功能,确认当前AraBERT版本的对应参数即可,不需要额外调整其他逻辑。
内容的提问来源于stack exchange,提问作者Gehad
相关产品推荐
相关产品推荐

