【问题标题】:AllenNLP - dataset_reader config for transformersAllenNLP - 用于变压器的 dataset_reader 配置
【发布时间】:2021-07-22 04:48:17
【问题描述】:

我想使用 bert 进行标记化并为 seq2seq 模型建立索引,这就是我的配置文件到目前为止的样子:

{
"dataset_reader": {
    "type": "seq2seq",
    "end_symbol": "[SEP]",
    "quoting": 3,
    "source_token_indexers": {
        "tokens": {
            "type": "pretrained_transformer",
            "model_name": "bert-base-german-cased"
        }
    },
    "source_tokenizer": {
        "type": "pretrained_transformer",
        "model_name": "bert-base-german-cased"
    },
    "start_symbol": "[CLS]",
    "target_token_indexers": {
        "tokens": {
            "namespace": "tokens"
        }
    },
    "target_tokenizer": {
        "type": "pretrained_transformer",
        "add_special_tokens": true,
        "model_name": "bert-base-german-cased"
    }
},

稍后当我加载模型并使用predictor.predict_json 预测句子时,输出如下所示。

'predicted_tokens': ['[CLS]', 'Die', 'meisten', 'Universitäts', '##abs'、'##ch'、'##lüsse'、'sind'、'nicht'、'p'、'##raxis'、 '##orient','##iert','und','bereit','##en','die','Studenten', 'nicht','auf','die','wirklich','##e','Welt','vor','.','[SEP]', '[SEP]'、'[SEP]'、'[SEP]'、'[SEP]'、'[SEP]'、'[SEP]'、'[SEP]'、 '[SEP]'、'[SEP]'、'[SEP]'、'[SEP]'、'[SEP]'、'[SEP]']

我有两个问题:

  1. 这是一个正常的输出吗(考虑到最后所有的“[SEP]”标记)?还是我在配置文件中做错了什么?
  2. 是否有任何函数可以将这些标记转换为人类可读的句子?

谢谢

【问题讨论】:

    标签: allennlp


    【解决方案1】:
    1. 请设置add_special_tokens = False
    2. 使用tokenizer.convert_tokens_to_string(将子词标记列表作为输入),其中tokenizer 指的是DatasetReader 使用的标记器。

    如果您还有其他问题,请告诉我们!

    【讨论】:

    • @arjuns...另一个跟进:使用 make_output_human_readable 函数时出现错误:prediction_data = predictor.predict_json({"source": source}) sent = predictor._model.make_output_human_readable(prediction_data) 我收到以下错误:文件“/python3.7/site-packages/allennlp_models/ generation/modules/seq_decoders/auto_regressive.py",第 459 行,indices_to_tokens batch_indeces = batch_indeces.detach().cpu().numpy() AttributeError: 'list' object has no attribute 'detach'
    • 这是因为predict_json 已经在内部调用了make_output_human_readable。对不起,我没有仔细阅读你的问题。让我问几个人,我会回复你的。
    • @Droplet 让我知道这是否适合您:tokenizer.convert_tokens_to_string(['[CLS]', 'Die', 'meisten', 'Universitäts', '##abs', '##ch', '##lüsse', 'sind', 'nicht', 'p', '##raxis', '##orient', '##iert', 'und', 'bereit', '##en', 'die', 'Studenten', 'nicht', 'auf', 'die', 'wirklich', '##e', 'Welt', 'vor', '.', '[SEP]', '[SEP]', '[SEP]', '[SEP]', '[SEP]', '[SEP]', '[SEP]', '[SEP]', '[SEP]', '[SEP]', '[SEP]', '[SEP]', '[SEP]', '[SEP]'])
    • tokenizer 指的是 DatasetReader 使用的分词器。另外,请设置add_special_tokens = False
    • 谢谢,@arjnus !所以这就是我所做的:predictor._dataset_reader._target_tokenizer.convert_tokens_to_string(toks) 然而,我得到了这个错误:AttributeError: 'PretrainedTransformerTokenizer' object has no attribute 'convert_tokens_to_string'
    猜你喜欢
    • 2021-01-23
    • 1970-01-01
    • 2020-10-17
    • 2022-01-20
    • 2019-10-10
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    相关资源
    最近更新 更多