问题标签 [squad]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - 在 haskell 中实现通道——解决尴尬的小队
在解决尴尬的小队的论文中,西蒙·佩顿·琼斯提供了一个“可能的实现” Channel
。
现在,他实现了putChan :: Channel a -> a -> IO ()
这样的功能
上面的函数从写入中取出一个 MVar,然后将一个空的 MVar 放入其中。
然后它写入从 write 中提取的 old_hole。
问题是,它为什么要写入 old_hole?它已经从 write 中取出,并且它的范围仅限于当前块,那么它有什么区别呢?
question-answering - BERT 在 SQuAD 的 QA 答案中出现的特殊字符是什么意思?
我正在运行一个微调的 BERT 和 ALBERT 模型来进行问答。而且,我正在评估这些模型在SQuAD v2.0的一部分问题上的表现。我使用SQuAD 的官方评估脚本进行评估。
我使用 Huggingface transformers
,在下面您可以找到我正在运行的实际代码和示例(可能对一些尝试在 SQuAD v2.0 上运行 ALBERT 微调模型的人也有帮助):
输出如下:
如您所见,答案中有 BERT 的特殊标记,包括[CLS]
和[SEP]
。
我知道在答案只是[CLS]
(有两个tensor(0)
forstart_scores
和end_scores
)的情况下,这基本上意味着模型认为在上下文中没有对问题的答案是有意义的。在这些情况下,我只是在运行评估脚本时将该问题的答案设置为空字符串。
但我想知道在上面的例子中,我是否应该再次假设模型找不到答案并将答案设置为空字符串?或者我应该在评估模型性能时留下这样的答案?
我问这个问题是因为据我了解,如果我有这样的案例作为答案,使用评估脚本计算的性能可能会发生变化(如果我错了,请纠正我)并且我可能无法真正了解这些模型。
tensorflow - KeyError:使用 Huggingface Transformers 使用 BioASQ 数据集时出现“答案”错误
我正在使用 Huggingface Transformers 的 run_squad.py https://github.com/huggingface/transformers/blob/master/examples/run_squad.py对 BioASQ 问答数据集进行微调。
我已将 BioBERT https://github.com/dmis-lab/bioasq-biobert的作者提供的张量流权重转换为 Pytorch ,如此处讨论的https://github.com/huggingface/transformers/issues/312。
此外,我正在使用 BioASQ https://github.com/dmis-lab/bioasq-biobert的预处理数据,该数据已转换为 SQuAD 形式。但是,当我使用以下参数运行 run_squad.py 脚本时
非常感谢您的帮助。
非常感谢您的指导。
评估数据集如下所示:
python - 使用 ALBERT (huggingface-transformers) 运行 SQuAD 脚本
我有一个关于将 ALBERT 与 SQuAD 2.0 huggingface-transformers 脚本一起使用的问题。
在 github 页面中,没有关于如何使用 ALBERT 运行脚本的具体说明,因此我使用了与使用 BERT 运行脚本相同的规范。然而,最终获得的结果是 (exact_match = 30.632527583593028, f1 = 36.36948708435092),与 BERT 实现的 (f1 = 88.52, exact_match = 81.22) 相去甚远,并且报告在 github 页面上。所以我认为我可能做错了什么。
这是我在命令行中运行的代码:
这个和变形金刚页面上的唯一区别是model_name,他们使用'bert_base_uncased',而per_gpu_train_batch_size是12,但由于我的GPU内存限制,我不得不使用5。
我是在运行脚本时忘记了某些选项,还是因为 per_gpu_train_batch_size 设置为 5 而不是 12 而获得了结果?
谢谢!
pre-trained-model - 了解拥抱脸变形金刚
我是变形金刚概念的新手,我正在阅读一些教程并编写自己的代码来理解使用变形金刚模型的 Squad 2.0 数据集问答。在拥抱脸网站上,我遇到了 2 个不同的链接
我想知道这两个网站的区别。一个链接是否只有一个预训练的模型,而另一个链接有一个预训练和微调的模型?
现在,如果我想使用,假设一个 Albert 问答模型,并在上面使用我的 Squad 2.0 训练数据集进行训练并评估该模型,我应该进一步连接到哪个链接?
python - 上下文中的多个答案跨度,BERT 问答
BERT
我正在编写一个使用线性层和softmax
顶部层进行预训练的问答系统。当遵循网上可用的模板时,一个示例的标签通常只包含一个answer_start_index
和一个answer_end_index
。例如,从Huggingface
实例化SQUADFeatures
对象时开始:
但是,在我自己的数据集中,我有一些示例,其中在上下文中的多个位置找到了答案词,即可能有几个正确的跨度构成了答案。
我的问题是我不知道如何管理这样的例子?在网络上可用的模板中,标签通常位于列表中,例如:
- [start_example1,start_example2,start_example3]
- [end_example1,end_example2,end_example3]
就我而言,这可能看起来像:
- [start_example1, [start_example2_1, start_example2_2], start_example3]
- 当然也一样
换句话说,我没有每个示例包含一个标签的列表,而是包含单个标签或示例“标签”列表的列表,即由列表组成的列表。
遵循其他模板时,该过程的下一步是:
但是,这当然(?)会引发错误,因为我的 span_start 列表和 span_end 列表不仅包含单个项目,而且有时包含列表中的列表。
任何人都知道如何解决这个问题?我应该只使用只有一个跨度构成上下文中答案的示例吗?
如果我解决了火炬错误,那么损失的反向传播/评估/计算仍然有效吗?
谢谢你!/乙
tensorflow - 使用拥抱脸变压器运行 trainer.train() 失败
我正在尝试为问答项目设置 TensorFlow 微调框架。以拥抱脸/变形金刚为原型,但无法通过训练器运行。
实验在 Databricks 进行,加载的预训练模型是 base-bert,训练和开发集是从拥抱人脸示例 SQUAD 2.0 https://github.com/huggingface/transformers/tree/master/examples/question下载的- 回答
错误日志抱怨意外的关键字参数“ is_impossible ”,这是 SQUAD 2 数据格式功能。
错误日志如下:
----> 1 trainer.train() 中的 TypeError Traceback (last last call last)
/databricks/python/lib/python3.7/site-packages/transformers/trainer_tf.py in train(self) 410 if self.args.past_index >= 0: 411 self._past = None --> 412 for step, training_loss in enumerate(self._training_steps(train_ds, optimizer)): 413 self.global_step = iterations.numpy() 414 self.epoch_logging = epoch_iter - 1 + (step + 1) / steps_per_epoch
/databricks/python/lib/python3.7/site-packages/transformers/trainer_tf.py in _training_steps(self, ds, optimizer) 457 在训练步骤上返回生成器(即参数更新)。458 """ --> 459 for i, loss in enumerate(self._accumulate_next_gradients(ds)): 460 if i % self.args.gradient_accumulation_steps == 0: 461 self._apply_gradients(optimizer)
/databricks/python/lib/python3.7/site-packages/transformers/trainer_tf.py in _accumulate_next_gradients(self, ds) 490 while True: 491 try: --> 492 yield _accumulate_next() 493 tf.errors.OutOfRangeError 除外: 494 休息
/local_disk0/pythonVirtualEnvDirs/virtualEnv-f56565e5-e45b-447a-b7df-50daf9109495/lib/python3.7/site-packages/tensorflow_core/python/eager/def_function.py in call (self, *args, **kwds) 566 xla_context .Exit() 567 else: --> 568 result = self._call(*args, **kwds) 569 570 if tracking_count == self._get_tracing_count():
/local_disk0/pythonVirtualEnvDirs/virtualEnv-f56565e5-e45b-447a-b7df-50daf9109495/lib/python3.7/site-packages/tensorflow_core/python/eager/def_function.py in _call(self, *args, **kwds) 613 #这是 call 的第一次调用,所以我们必须初始化。614 initializers = [] --> 615 self._initialize(args, kwds, add_initializers_to=initializers) 616 finally: 617 #此时我们知道初始化完成(或更少
/local_disk0/pythonVirtualEnvDirs/virtualEnv-f56565e5-e45b-447a-b7df-50daf9109495/lib/python3.7/site-packages/tensorflow_core/python/eager/def_function.py in _initialize(self, args, kwds, add_initializers_to) 495 self. _concrete_stateful_fn = ( 496 self._stateful_fn._get_concrete_function_internal_garbage_collected(
pylint:禁用=受保护的访问
--> 497 *args, **kwds)) 498 499 def invalid_creator_scope(*unused_args, **unused_kwds):
/local_disk0/pythonVirtualEnvDirs/virtualEnv-f56565e5-e45b-447a-b7df-50daf9109495/lib/python3.7/site-packages/tensorflow_core/python/eager/function.py in _get_concrete_function_internal_garbage_collected(self, *args, **kwargs) 2387 args , kwargs = None, None 2388 with self._lock: -> 2389 graph_function, _, _ = self._maybe_define_function(args, kwargs) 2390 return graph_function 2391
/local_disk0/pythonVirtualEnvDirs/virtualEnv-f56565e5-e45b-447a-b7df-50daf9109495/lib/python3.7/site-packages/tensorflow_core/python/eager/function.py in _maybe_define_function(self, args, kwargs) 2701 2702 self._function_cache .missed.add(call_context_key) -> 2703 graph_function = self._create_graph_function(args, kwargs) 2704 self._function_cache.primary[cache_key] = graph_function 2705 return graph_function, args, kwargs
/local_disk0/pythonVirtualEnvDirs/virtualEnv-f56565e5-e45b-447a-b7df-50daf9109495/lib/python3.7/site-packages/tensorflow_core/python/eager/function.py in _create_graph_function(self, args, kwargs, override_flat_arg_shapes) 2591 arg_names= arg_names, 2592 override_flat_arg_shapes=override_flat_arg_shapes, -> 2593 capture_by_value=self._capture_by_value), 2594 self._function_attributes, 2595 # 告诉 ConcreteFunction 一旦它退出就清理它的图
/local_disk0/pythonVirtualEnvDirs/virtualEnv-f56565e5-e45b-447a-b7df-50daf9109495/lib/python3.7/site-packages/tensorflow_core/python/framework/func_graph.py in func_graph_from_py_func(名称,python_func,args,kwargs,签名,func_graph , autograph, autograph_options, add_control_dependencies, arg_names, op_return_value, collections, capture_by_value, override_flat_arg_shapes) 976 convert_func) 977 --> 978 func_outputs = python_func(*func_args, **func_kwargs) 979 980 # invariant:
func_outputs
只包含张量,复合张量,/local_disk0/pythonVirtualEnvDirs/virtualEnv-f56565e5-e45b-447a-b7df-50daf9109495/lib/python3.7/site-packages/tensorflow_core/python/eager/def_function.py in Wrapped_fn(*args, **kwds) 437 # Wrapped允许AutoGraph 以交换转换后的函数。我们给 438 # 函数一个对自身的弱引用以避免引用循环。--> 439 返回weak_wrapped_fn()。包装(*args,**kwds)440 weak_wrapped_fn = weakref.ref(wrapped_fn)441
/local_disk0/pythonVirtualEnvDirs/virtualEnv-f56565e5-e45b-447a-b7df-50daf9109495/lib/python3.7/site-packages/tensorflow_core/python/framework/func_graph.py in wrapper(*args, **kwargs) 966 例外为e: # pylint:disable=broad-except 967 if hasattr(e, "ag_error_metadata"): --> 968 raise e.ag_error_metadata.to_exception(e) 969 else: 970 raise
TypeError:在转换后的代码中:
_accumulate_next * return self._accumulate_gradients(per_replica_features, per_replica_labels) /databricks/python/lib/python3.7/site-packages/transformers/trainer_tf.py:498 _accumulate_gradients * per_replica_loss = self.args.strategy.experimental_run_v2( /local_disk0/pythonVirtualEnvDirs/ virtualEnv-f56565e5-e45b-447a-b7df-50daf9109495/lib/python3.7/site-packages/tensorflow_core/python/distribute/one_device_strategy.py:180experimental_run_v2 return super(OneDeviceStrategy, self).experimental_run_v2(fn, args, kwargs) /databricks/python/lib/python3.7/site-packages/transformers/trainer_tf.py:511 _forward * per_example_loss, _ = self._run_model(features, labels, True) /databricks/python/lib/python3.7/site -packages/transformers/trainer_tf.py:532 _run_model * 输出 = self.model(features, training=training, **labels)[:2] /local_disk0/pythonVirtualEnvDirs/virtualEnv-f56565e5-e45b-447a-b7df-50daf9109495/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/base_layer.py:778 调用 输出 = call_fn(cast_inputs, *args, **kwargs)
nlp - deeppavlov 模型火车没有找到模块
我正在尝试在 GoogleColab 上开始 deeppavlov 模型训练:
并得到错误:
我的代码基于http://docs.deeppavlov.ai/en/master/features/models/squad.html。
请帮我解决这个问题
bert-language-model - 如何将 SQuAD 数据中的标记索引映射到 BERT 标记器中的标记?
我正在使用 SQuaD 数据集来选择答案范围。使用 对BertTokenizer
段落进行标记后,对于某些样本,答案的开始和结束索引不再与段落标记中的真实答案跨度位置匹配。如何解决这个问题呢?一种方法是相应地修改答案指数(也是训练目标)?但是怎么做呢?