python - “输入无效。应该是字符串、字符串列表/元组或整数列表/元组。” ValueError:输入无效
问题描述
我正在为法语使用 Bert tokenizer,我收到了这个错误,但我似乎没有解决它。如果你有建议。
Traceback (most recent call last):
File "training_cross_data_2.py", line 240, in <module>
training_data(f, root, testdir, dict_unc)
File "training_cross_data_2.py", line 107, in training_data
Xtrain_emb, mdlname = get_flaubert_layer(data)
File "training_cross_data_2.py", line 40, in get_flaubert_layer
tokenized = texte.apply((lambda x: flaubert_tokenizer.encode(x, add_special_tokens=True, max_length=512, truncation=True)))
File "/home/getalp/kelodjoe/anaconda3/envs/env/lib/python3.6/site-packages/pandas/core/series.py", line 3848, in apply
mapped = lib.map_infer(values, f, convert=convert_dtype)
File "pandas/_libs/lib.pyx", line 2329, in pandas._libs.lib.map_infer
File "training_cross_data_2.py", line 40, in <lambda>
tokenized = texte.apply((lambda x: flaubert_tokenizer.encode(x, add_special_tokens=True, max_length=512, truncation=True)))
File "/home/anaconda3/envs/env/lib/python3.6/site-packages/transformers/tokenization_utils.py", line 907, in encode
**kwargs,
File "/home/anaconda3/envs/env/lib/python3.6/site-packages/transformers/tokenization_utils.py", line 1021, in encode_plus
first_ids = get_input_ids(text)
File "/home/anaconda3/envs/env/lib/python3.6/site-packages/transformers/tokenization_utils.py", line 1003, in get_input_ids
"Input is not valid. Should be a string, a list/tuple of strings or a list/tuple of integers."
ValueError: Input is not valid. Should be a string, a list/tuple of strings or a list/tuple of integers.
我环顾四周寻找喜欢的答案,但无论提出什么建议似乎都不起作用。Texte 是数据框。
这里的代码:
def get_flaubert_layer(texte): # teste is dataframe which I take from an excel file
language_model_dir= os.path.expanduser(args.language_model_dir)
lge_size = language_model_dir[16:-1] # modify when on jean zay 27:-1
print(lge_size)
flaubert = FlaubertModel.from_pretrained(language_model_dir)
flaubert_tokenizer = FlaubertTokenizer.from_pretrained(language_model_dir)
tokenized = texte.apply((lambda x: flaubert_tokenizer.encode(x, add_special_tokens=True, max_length=512, truncation=True)))
max_len = 0
for i in tokenized.values:
if len(i) > max_len:
max_len = len(i)
padded = np.array([i + [0] * (max_len - len(i)) for i in tokenized.values])
attention_mask = np.where(padded != 0, 1, 0)
我有另一个相同结构的文件,但它正在工作,但对于这种情况,我不知道为什么会出现这个错误,我应该重新下载模型吗?
文件 kook 是这样的:
解决方案
您可能想要更改此行:
tokenized = texte.apply((lambda x: flaubert_tokenizer.encode(x, add_special_tokens=True, max_length=512, truncation=True)))
至
tokenized = flaubert_tokenizer.encode(texte["verbatim"],
add_special_tokens=True,
max_length=512,
truncation=True)`
这有两个优点:
- 您没有将 pandas 行传递给标记化函数(我猜这是导致您的错误的原因)。
- 您不是
encode
每行调用一次该函数。这可能会加速标记化。
推荐阅读
- python - 为键和项目编写类型提示的正确方法
- javascript - 'this' 关键字即使在绑定时也没有分配适当的范围
- cassandra - 添加数据中心现有集群
- java - 不知道为什么我会收到这个“找不到符号”错误
- outlook - 邮件正文的 Outlook Web App Html 标记:新 OWA 与旧 OWA
- spring - 解决此错误 404:源服务器没有找到目标资源的当前表示或不愿意透露存在的表示
- ruby-on-rails - Rails通过迭代器改变Hash,hash中的值都是一样的
- android - 如何在分离的模块上实现存储库模式?
- r - R - 为什么 str_detect 在以破折号结尾的“单词”上使用单词边界时返回与 grepl 不同的结果
- c++ - std::make_unique 和 std::unique_ptr 内部有 new 的区别