|
|
|
@ -45,9 +45,10 @@ class ChunkEvalOp : public framework::OperatorWithKernel {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
framework::DataType IndicateDataType(
|
|
|
|
|
framework::OpKernelType GetKernelType(
|
|
|
|
|
const framework::ExecutionContext &ctx) const override {
|
|
|
|
|
return framework::DataType::FP32;
|
|
|
|
|
return framework::OpKernelType(framework::DataType::FP32,
|
|
|
|
|
ctx.device_context());
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
@ -82,12 +83,12 @@ class ChunkEvalOpMaker : public framework::OpProtoAndCheckerMaker {
|
|
|
|
|
"See below for details.")
|
|
|
|
|
.SetDefault(std::vector<int>{});
|
|
|
|
|
AddComment(R"DOC(
|
|
|
|
|
For some basics of chunking, please refer to
|
|
|
|
|
For some basics of chunking, please refer to
|
|
|
|
|
‘Chunking with Support Vector Mechines <https://aclanthology.info/pdf/N/N01/N01-1025.pdf>’.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CheckEvalOp computes the precision, recall, and F1-score of chunk detection,
|
|
|
|
|
and supports IOB, IOE, IOBES and IO (also known as plain) tagging schemes.
|
|
|
|
|
CheckEvalOp computes the precision, recall, and F1-score of chunk detection,
|
|
|
|
|
and supports IOB, IOE, IOBES and IO (also known as plain) tagging schemes.
|
|
|
|
|
Here is a NER example of labeling for these tagging schemes:
|
|
|
|
|
|
|
|
|
|
Li Ming works at Agricultural Bank of China in Beijing.
|
|
|
|
@ -96,17 +97,17 @@ Here is a NER example of labeling for these tagging schemes:
|
|
|
|
|
IOE: I-PER E-PER O O I-ORG I-ORG I-ORG E-ORG O E-LOC
|
|
|
|
|
IOBES: B-PER E-PER O O I-ORG I-ORG I-ORG E-ORG O S-LOC
|
|
|
|
|
|
|
|
|
|
There are three chunk types(named entity types) including PER(person), ORG(orgnazation)
|
|
|
|
|
There are three chunk types(named entity types) including PER(person), ORG(orgnazation)
|
|
|
|
|
and LOC(LOCATION), and we can see that the labels have the form <tag type>-<chunk type>.
|
|
|
|
|
|
|
|
|
|
Since the calculations actually use label ids rather than labels, extra attention
|
|
|
|
|
should be paid when mapping labels to ids to make CheckEvalOp work. The key point
|
|
|
|
|
is that the listed equations are satisfied by ids.
|
|
|
|
|
Since the calculations actually use label ids rather than labels, extra attention
|
|
|
|
|
should be paid when mapping labels to ids to make CheckEvalOp work. The key point
|
|
|
|
|
is that the listed equations are satisfied by ids.
|
|
|
|
|
|
|
|
|
|
tag_type = label % num_tag_type
|
|
|
|
|
chunk_type = label / num_tag_type
|
|
|
|
|
|
|
|
|
|
where `num_tag_type` is the num of tag types in the tagging scheme, `num_chunk_type`
|
|
|
|
|
where `num_tag_type` is the num of tag types in the tagging scheme, `num_chunk_type`
|
|
|
|
|
is the num of chunk types, and `tag_type` get its value from the following table.
|
|
|
|
|
|
|
|
|
|
Scheme Begin Inside End Single
|
|
|
|
@ -115,7 +116,7 @@ is the num of chunk types, and `tag_type` get its value from the following table
|
|
|
|
|
IOE - 0 1 -
|
|
|
|
|
IOBES 0 1 2 3
|
|
|
|
|
|
|
|
|
|
Still use NER as example, assuming the tagging scheme is IOB while chunk types are ORG,
|
|
|
|
|
Still use NER as example, assuming the tagging scheme is IOB while chunk types are ORG,
|
|
|
|
|
PER and LOC. To satisfy the above equations, the label map can be like this:
|
|
|
|
|
|
|
|
|
|
B-ORG 0
|
|
|
|
@ -126,9 +127,9 @@ PER and LOC. To satisfy the above equations, the label map can be like this:
|
|
|
|
|
I-LOC 5
|
|
|
|
|
O 6
|
|
|
|
|
|
|
|
|
|
It’s not hard to verify the equations noting that the num of chunk types
|
|
|
|
|
is 3 and the num of tag types in IOB scheme is 2. For example, the label
|
|
|
|
|
id of I-LOC is 5, the tag type id of I-LOC is 1, and the chunk type id of
|
|
|
|
|
It’s not hard to verify the equations noting that the num of chunk types
|
|
|
|
|
is 3 and the num of tag types in IOB scheme is 2. For example, the label
|
|
|
|
|
id of I-LOC is 5, the tag type id of I-LOC is 1, and the chunk type id of
|
|
|
|
|
I-LOC is 2, which consistent with the results from the equations.
|
|
|
|
|
)DOC");
|
|
|
|
|
}
|
|
|
|
|