Skip to content

CDM指标计算在某些场景上存在bug #95

Description

@myhz0606

场景1: 某些包含中文的公式上指标异常
例子:
gt:
\begin{matrix}\mathrm{SEAF}&=&\frac{\sum(各串联补偿装置的额定补偿容量\times该串联补偿装置的可用时间)} { 该串联补偿系统的额定补偿容量\times统计期间}\&=&\mathrm {\frac {\sum(Q_N\times AH)}{Q_N\times PH}\times100%} \end{matrix}
pred:
\begin{matrix}\mathrm{SEAF}&=&\frac{\sum(各串联补偿装置的额定补偿容量\times该串联补偿装置的可用时间)} { 该串联补偿系统的额定补偿容量\times统计期间}\&=&\mathrm {\frac {\sum(Q_N\times AH)}{Q_N\times PH}\times100%} \end{matrix}
正常的CDM为1,但是实际上代码会报错。

问题定位: https://github.com/opendatalab/UniMERNet/blob/main/cdm/modules/latex2bbox_color.py#L206
这里会将检测有中文的公式讲所有的\mathrm替换为\text。问题来了,\mathrm里面包括了latex,换成\text 语法就错了

场景2: 某些latex公式会因为分词失败,导致指标计算有异常
例子:
gt: \sum_{\begin{array}{c}m,n>0\end{array}}x^{m}y^{n}=\frac{xy}{(1-x)(1-y)}.
pred: \sum_{\begin{subarray}{c}m,n>0\end{subarray}}x^{m}y^{n}=\frac{xy}{(1-x)(1-y)}.

问题定位:https://github.com/opendatalab/UniMERNet/blob/main/cdm/modules/tokenize_latex/tokenize_latex.py#L40
CDM采用了katex AST来做tokenize,而katex的parser不支持subarray

场景3: 若latex不含显示多行环境,如array/matrix,会自动将多行降级为单行
例子:
gt: \begin{array}{r}
\displaystyle \int_{0}^{\infty} \left( x - \frac{x^3}{2} + \frac{x^5}{2 \cdot 4} - \frac{x^7}{2 \cdot 4 \cdot 6} + \cdots \right) \
\left( 1 + \frac{x^2}{2^2} + \frac{x^4}{2^2 \cdot 4^2} + \frac{x^6}{2^2 \cdot 4^2 \cdot 6^2} + \cdots \right) dx.
\end{array}
pred: \int_0^\infty\left(x-\frac{x^3}2+\frac{x^5}{2\cdot4}+\cdots\right)\\left(1+\frac{x^2}{2^2}+\frac{x^4}{2^2\cdot4^2}+\frac{x^6}{2^2\cdot4^2\cdot6^2}+\cdots\right)dx.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions