From a2cc32872d97203a2ef56b41b54a09c789c874ee Mon Sep 17 00:00:00 2001 From: BAOOOOOM <82091145+BAOOOOOM@users.noreply.github.com> Date: Fri, 13 Aug 2021 17:12:08 +0800 Subject: [PATCH 01/13] Create conf.py --- docs/source/conf.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 1605600f..b867da47 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -46,7 +46,8 @@ def copy_tree(src, tar): 'sphinx.ext.mathjax', 'sphinx_toggleprompt', 'nbsphinx', - 'sphinx_gallery.load_style' + 'sphinx_gallery.load_style', + 'm2r2' ] # extension variables setting From 4c829b1ef078731fae26ae122d7a098410ab8b21 Mon Sep 17 00:00:00 2001 From: BAOOOOOM <82091145+BAOOOOOM@users.noreply.github.com> Date: Fri, 13 Aug 2021 17:12:30 +0800 Subject: [PATCH 02/13] Create requirements.txt --- docs/requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 7f8b9b23..5a185c62 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -2,4 +2,5 @@ sphinx sphinx_rtd_theme sphinx_toggleprompt sphinx-gallery>=0.6 -nbsphinx \ No newline at end of file +nbsphinx +m2r2 From 58401a93b4265ef78f472efb352ecad145922ebe Mon Sep 17 00:00:00 2001 From: BAOOOOOM <82091145+BAOOOOOM@users.noreply.github.com> Date: Fri, 13 Aug 2021 17:14:11 +0800 Subject: [PATCH 03/13] Create sif.rst --- docs/source/tutorial/zh/sif.rst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/source/tutorial/zh/sif.rst b/docs/source/tutorial/zh/sif.rst index d838a59a..e80e31d5 100644 --- a/docs/source/tutorial/zh/sif.rst +++ b/docs/source/tutorial/zh/sif.rst @@ -1,2 +1 @@ -标准项目格式 -=============== \ No newline at end of file +.. mdinclude:: ../../../SIF4TI_CH.md From 4c5b5b8404e851f8b5fc2a4f590f1b888c0c5b37 Mon Sep 17 00:00:00 2001 From: BAOOOOOM <82091145+BAOOOOOM@users.noreply.github.com> Date: Fri, 13 Aug 2021 17:14:49 +0800 Subject: [PATCH 04/13] Create parse.rst --- docs/source/tutorial/zh/parse.rst | 43 +++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/docs/source/tutorial/zh/parse.rst b/docs/source/tutorial/zh/parse.rst index 380d3f4c..388eb8fe 100644 --- a/docs/source/tutorial/zh/parse.rst +++ b/docs/source/tutorial/zh/parse.rst @@ -6,5 +6,48 @@ * 文本语法结构解析 * 公式语法结构解析 +其目的是: + + +1、将选择题中的括号,填空题中的下划线用特殊标识替换掉,并将字符、公式用$$包裹起来,使item能通过$符号准确的按照类型切割开; + +2、判断当前item是否合法,并报出错误类型。 + +具体处理内容包括: +-------------------- + +1.匹配公式之外的英文字母、数字,只对两个汉字之间的字母、数字做修正,其余匹配到的情况视为不合 latex 语法录入的公式 + +2.匹配“( )”型括号(包含英文格式和中文格式),即括号内无内容或为空格的括号,将括号替换$\\SIFChoice$ + +3.匹配下划线,替换连续的下划线或下划线中夹杂空格的情况,将其替换为$\\SIFBlank$ + +4.匹配latex公式,主要检查latex公式的完整性和可解析性,对latex 中出现中文字符发出警告 + +文本语法结构解析 +-------------------- + + +将文本中的字母、数字等进行提取,将其转换为标准格式。 + +:: + + >>> text = '生产某种零件的A工厂25名工人的日加工零件数_ _' + >>> text_parser = Parser(text) + >>> text_parser.description_list() + >>> text_parser.text + >>> '生产某种零件的$A$工厂$25$名工人的日加工零件数$\\SIFBlank$' + + 公式语法结构解析 -------------------- + +可以检查公式是否合法。 + +:: + + >>> text = '支持公式如$\\frac{y}{x}$,$\\SIFBlank$,$\\FigureID{1}$,不支持公式如$\\frac{ \\dddot y}{x}$' + >>> text_parser = Parser(text) + >>> text_parser.description_list() + >>> text_parser.fomula_illegal_flag + >>> 1 From 9850e99525cfaca9de0fea7450d2072213adb515 Mon Sep 17 00:00:00 2001 From: BAOOOOOM <82091145+BAOOOOOM@users.noreply.github.com> Date: Fri, 13 Aug 2021 17:15:12 +0800 Subject: [PATCH 05/13] Create pretrain.rst --- docs/source/tutorial/zh/pretrain.rst | 34 ++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/docs/source/tutorial/zh/pretrain.rst b/docs/source/tutorial/zh/pretrain.rst index 0dbee20a..5306afe9 100644 --- a/docs/source/tutorial/zh/pretrain.rst +++ b/docs/source/tutorial/zh/pretrain.rst @@ -12,8 +12,42 @@ 训练模型 --------- +基本步骤: +######### + +1.确定模型的类型,选择适合的Tokenizer(GensimWordTokenizer、 GensimSegTokenizer),使之令牌化; + +2.调用train_vector函数,即可得到所需的预训练模型。 + +Examples +:: + >>> tokenizer = GensimWordTokenizer(symbol="gmas", general=True) + >>> token_item = tokenizer("有公式$\\FormFigureID{wrong1?}$,如图$\\FigureID{088f15ea-xxx}$,\ + ... 若$x,y$满足约束条件公式$\\FormFigureBase64{wrong2?}$,$\\SIFSep$,则$z=x+7 y$的最大值为$\\SIFBlank$") + >>> print(token_item.tokens[:10]) + ['公式', '[FORMULA]', '如图', '[FIGURE]', 'x', ',', 'y', '约束条件', '公式', '[FORMULA]'] + + # 10 dimension with fasstext method + train_vector(sif_items, "../../../data/w2v/gensim_luna_stem_tf_", 10, method="d2v") + 装载模型 -------- +将所得到的模型传入I2V模块即可装载模型 + +Examples +:: + >>> model_path = "../test_model/test_gensim_luna_stem_tf_d2v_256.bin" + >>> i2v = D2V("text","d2v",filepath=model_path, pretrained_t2v = False) + 公开模型一览 ------------ + +模型训练数据说明: +######### + +* 当前【词向量w2v】【句向量d2v】模型所用的数据均为 【高中学段】 的题目 +* 测试数据:[`OpenLUNA.json`_] + +当前提供以下模型,更多分学科、分题型模型正在训练中,敬请期待 + "d2v_all_256"(全科),"d2v_sci_256"(理科),"d2v_eng_256"(文科),"d2v_lit_256"(英语) From 16bf75067f088a2d17c4752e74fb18329fdca298 Mon Sep 17 00:00:00 2001 From: BAOOOOOM <82091145+BAOOOOOM@users.noreply.github.com> Date: Fri, 13 Aug 2021 17:15:38 +0800 Subject: [PATCH 06/13] Create seg.rst --- docs/source/tutorial/zh/seg.rst | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/docs/source/tutorial/zh/seg.rst b/docs/source/tutorial/zh/seg.rst index c3bc9439..74a4abb9 100644 --- a/docs/source/tutorial/zh/seg.rst +++ b/docs/source/tutorial/zh/seg.rst @@ -10,9 +10,38 @@ 语义成分分解 ------------ +特别的,由于选择题是以字典的形式给出,故需要进行特殊处理,这里可以调用./Utils/data中的dict2str4sif函数,将选择题形式的item转换为字符格式,并将题干和选项、各选项之间分割开来。 +Example: +:: + + >>> item = { + + ... "stem": r"若复数$z=1+2 i+i^{3}$,则$|z|=$", + + ... "options": ['0', '1', r'$\sqrt{2}$', '2'], + + ... } + + >>> item + + {'stem': '若复数$z=1+2 i+i^{3}$,则$|z|=$', 'options': ['0', '1', '$\\sqrt{2}$', '2']} + + >>> dict2str4sif(item, key_as_tag=False) + + '若复数$z=1+2 i+i^{3}$,则$|z|=$0$\\SIFSep$1$\\SIFSep$$\\sqrt{2}$$\\SIFSep$2' + + 结构成分分解 ------------ +对切片后的item中的各个元素进行分词,提供深度选项,可以按照需求选择所有地方切分或者在部分标签处切分(比如\SIFSep、\SIFTag处);对标签添加的位置也可以进行选择,可以在头尾处添加或仅在头或尾处添加。 +具有两种模式,一种是linear模式,用于对文本进行处理(使用jieba库进行分词);一种是ast模式,用于对公式进行解析。 +Examples: +:: - +>>> test_item = r"如图所示,则$\bigtriangleup ABC$的面积是$\SIFBlank$。$\FigureID{1}$" +>>> seg(test_item) +>>> ['如图所示,则', '\\bigtriangleup ABC', '的面积是', '\\SIFBlank', '。', \FigureID{1}] +>>> seg(test_item, symbol="fgm") +>>> ['如图所示,则', '[FORMULA]', '的面积是', '[MARK]', '。', '[FIGURE]'] From e2eb325ca8977087c1bcaaf61349e56d989e6fd1 Mon Sep 17 00:00:00 2001 From: BAOOOOOM <82091145+BAOOOOOM@users.noreply.github.com> Date: Fri, 13 Aug 2021 17:16:09 +0800 Subject: [PATCH 07/13] Create tokenize.rst --- docs/source/tutorial/zh/tokenize.rst | 32 ++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/docs/source/tutorial/zh/tokenize.rst b/docs/source/tutorial/zh/tokenize.rst index 12855778..103da585 100644 --- a/docs/source/tutorial/zh/tokenize.rst +++ b/docs/source/tutorial/zh/tokenize.rst @@ -5,19 +5,47 @@ 在EduNLP中我们将令牌化分为不同的粒度,为避免歧义,我们定义如下: * 词/字级别:分词 + * 句级别:分句 + * 资源级别:令牌化 分词 ------- +对切片后的item中的各个元素进行分词,提供深度选项,可以按照需求选择所有地方切分或者在部分标签处切分(比如\SIFSep、\SIFTag处);对标签添加的位置也可以进行选择,可以在头尾处添加或仅在头或尾处添加。 + +具有两种模式,一种是linear模式,用于对文本进行处理(使用jieba库进行分词);一种是ast模式,用于对公式进行解析。 分句 ------- +将较长的文档切分成若干句子的过程称为“分句”。每个句子为一个“令牌”(token)(待实现)。 + + 令牌化 ------- +即综合解析,将带公式的句子切分为若干标记的过程。每个标记为一个“令牌”(token)。 +我们提供了多种已经封装好的令牌化器供用户便捷调用,下面是一个示例: + + + Examples + -------- + >>> items = ["已知集合$A=\\left\\{x \\mid x^{2}-3 x-4<0\\right\\}, \\quad B=\\{-4,1,3,5\\}, \\quad$ 则 $A \\cap B=$"] + >>> tokenizer = TextTokenizer() + >>> tokens = tokenizer(items) + >>> next(tokens) # doctest: +NORMALIZE_WHITESPACE + ['已知', '集合', 'A', '=', '\\left', '\\{', 'x', '\\mid', 'x', '^', '{', '2', '}', '-', '3', 'x', '-', '4', '<', + '0', '\\right', '\\}', ',', '\\quad', 'B', '=', '\\{', '-', '4', ',', '1', ',', '3', ',', '5', '\\}', ',', + '\\quad', 'A', '\\cap', 'B', '='] + + + + + +通过查看"./EduNLP/Tokenizer/tokenizer.py"及"./EduNLP/Pretrain/gensim_vec.py"可以查看更多令牌化器,下面是一个完整的令牌化器列表 -我们提供了多种已经封装好的令牌化器供用户便捷调用,下面是一个示例 +* TextTokenizer +* GensimSegTokenizer -通过 可以查看更多令牌化器,下面是一个完整的令牌化器列表 +* GensimWordTokenizer From 9357183d6fc5ec30e7615a608dc9c47be3754328 Mon Sep 17 00:00:00 2001 From: BAOOOOOM <82091145+BAOOOOOM@users.noreply.github.com> Date: Fri, 13 Aug 2021 17:16:37 +0800 Subject: [PATCH 08/13] Create vectorization.rst --- docs/source/tutorial/zh/vectorization.rst | 90 ++++++++++++++++++++++- 1 file changed, 89 insertions(+), 1 deletion(-) diff --git a/docs/source/tutorial/zh/vectorization.rst b/docs/source/tutorial/zh/vectorization.rst index c4be7cd1..6d6e810b 100644 --- a/docs/source/tutorial/zh/vectorization.rst +++ b/docs/source/tutorial/zh/vectorization.rst @@ -1,2 +1,90 @@ 向量化 -======== +========= + +此部分提供了简便的接口,可以直接将传入的items经过转化得到向量。当前提供了是否使用预训练模型的选项,可根据需要进行选择,如不使用预训练模型则可直接调用D2V函数,使用预训练模型则调用get_pretrained_i2v函数。 + + +总体流程 +--------- + +1.对传入的item进行解析,得到SIF格式; + + +2.对sif_item进行成分分解; + + +3.对经过成分分解的item进行令牌化; + + +4.使用已有或者使用提供的预训练模型,将令牌化后的item转换为向量。 + + +不使用预训练模型:直接调用D2V +--------- + +使用自己提供的任一预训练模型(给出模型存放路径即可)将给定的题目文本转成向量。 + + +* 优点:可以使用自己的模型,另可调整训练参数,灵活性强。 + + +处理的具体流程 + + +1.调用get_tokenizer函数,得到经过分词后的结果; + + +2.调用T2V模块,根据需要选择是否使用预训练的t2v模型 + +Example +:: + >>> model_path = "../test_model/test_gensim_luna_stem_tf_d2v_256.bin" + >>> i2v = D2V("text","d2v",filepath=model_path, pretrained_t2v = False) + >>> i2v(item) + +使用预训练模型:直接调用get_pretrained_i2v +--------- + +使用 EduNLP 项目组给定的预训练模型将给定的题目文本转成向量。 + + +* 优点:简单方便。 + + +* 缺点:只能使用项目中给定的模型,局限性较大。 + + +* 调用此函数即可获得相应的预训练模型,目前提供以下的预训练模型:d2v_all_256、d2v_sci_256、d2v_eng_256、d2v_lit_256 + +模型选择与使用 +######### + +根据题目所属学科选择预训练模型:(表格问题待解决) + + + ++--------------------+------------------------+ +| 预训练模型名称 | 模型训练数据的所属学科 | ++====================+========================+ +| d2v_all_256 | 全学科 | ++--------------------+------------------------+ +| d2v_sci_256 | 理科 | ++--------------------+------------------------+ +| d2v_lit_256 | 文科 | ++--------------------+------------------------+ +| d2v_eng_256 | 英语 | ++--------------------+------------------------+ + + +处理的具体流程: + +1.下载相应的预处理模型 + + +2.将所得到的模型传入D2V,使用D2V进行处理 + +Example +:: + >>> i2v = get_pretrained_i2v("d2v_sci_256") + >>> i2v(item) + From aebc06b0e5dac030e2545b087c5910af17ef9345 Mon Sep 17 00:00:00 2001 From: BAOOOOOM <82091145+BAOOOOOM@users.noreply.github.com> Date: Fri, 13 Aug 2021 17:24:24 +0800 Subject: [PATCH 09/13] Create seg.rst --- docs/source/tutorial/zh/seg.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/source/tutorial/zh/seg.rst b/docs/source/tutorial/zh/seg.rst index 74a4abb9..7058a60c 100644 --- a/docs/source/tutorial/zh/seg.rst +++ b/docs/source/tutorial/zh/seg.rst @@ -11,7 +11,8 @@ ------------ 特别的,由于选择题是以字典的形式给出,故需要进行特殊处理,这里可以调用./Utils/data中的dict2str4sif函数,将选择题形式的item转换为字符格式,并将题干和选项、各选项之间分割开来。 -Example: + +Examples: :: >>> item = { @@ -37,6 +38,7 @@ Example: 对切片后的item中的各个元素进行分词,提供深度选项,可以按照需求选择所有地方切分或者在部分标签处切分(比如\SIFSep、\SIFTag处);对标签添加的位置也可以进行选择,可以在头尾处添加或仅在头或尾处添加。 具有两种模式,一种是linear模式,用于对文本进行处理(使用jieba库进行分词);一种是ast模式,用于对公式进行解析。 + Examples: :: From 1d87c6374ea68fb56a62e07b435303c458d9fb5d Mon Sep 17 00:00:00 2001 From: BAOOOOOM <82091145+BAOOOOOM@users.noreply.github.com> Date: Fri, 13 Aug 2021 17:24:55 +0800 Subject: [PATCH 10/13] Create parse.rst --- docs/source/tutorial/zh/parse.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/source/tutorial/zh/parse.rst b/docs/source/tutorial/zh/parse.rst index 388eb8fe..b1c8e965 100644 --- a/docs/source/tutorial/zh/parse.rst +++ b/docs/source/tutorial/zh/parse.rst @@ -30,6 +30,7 @@ 将文本中的字母、数字等进行提取,将其转换为标准格式。 +Examples: :: >>> text = '生产某种零件的A工厂25名工人的日加工零件数_ _' @@ -44,6 +45,7 @@ 可以检查公式是否合法。 +Examples: :: >>> text = '支持公式如$\\frac{y}{x}$,$\\SIFBlank$,$\\FigureID{1}$,不支持公式如$\\frac{ \\dddot y}{x}$' From 2d3ff98b3c9892de30030e4626e799b782f81e71 Mon Sep 17 00:00:00 2001 From: BAOOOOOM <82091145+BAOOOOOM@users.noreply.github.com> Date: Fri, 13 Aug 2021 17:25:22 +0800 Subject: [PATCH 11/13] Create pretrain.rst --- docs/source/tutorial/zh/pretrain.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/tutorial/zh/pretrain.rst b/docs/source/tutorial/zh/pretrain.rst index 5306afe9..4520fc82 100644 --- a/docs/source/tutorial/zh/pretrain.rst +++ b/docs/source/tutorial/zh/pretrain.rst @@ -19,7 +19,7 @@ 2.调用train_vector函数,即可得到所需的预训练模型。 -Examples +Examples: :: >>> tokenizer = GensimWordTokenizer(symbol="gmas", general=True) >>> token_item = tokenizer("有公式$\\FormFigureID{wrong1?}$,如图$\\FigureID{088f15ea-xxx}$,\ @@ -34,7 +34,7 @@ Examples -------- 将所得到的模型传入I2V模块即可装载模型 -Examples +Examples: :: >>> model_path = "../test_model/test_gensim_luna_stem_tf_d2v_256.bin" >>> i2v = D2V("text","d2v",filepath=model_path, pretrained_t2v = False) From b9753bfd5e9eab664c50d68c6112f9bb4f32ca3c Mon Sep 17 00:00:00 2001 From: BAOOOOOM <82091145+BAOOOOOM@users.noreply.github.com> Date: Fri, 13 Aug 2021 17:25:44 +0800 Subject: [PATCH 12/13] Create tokenize.rst --- docs/source/tutorial/zh/tokenize.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/tutorial/zh/tokenize.rst b/docs/source/tutorial/zh/tokenize.rst index 103da585..039dd1bf 100644 --- a/docs/source/tutorial/zh/tokenize.rst +++ b/docs/source/tutorial/zh/tokenize.rst @@ -28,7 +28,7 @@ 我们提供了多种已经封装好的令牌化器供用户便捷调用,下面是一个示例: - Examples + Examples: -------- >>> items = ["已知集合$A=\\left\\{x \\mid x^{2}-3 x-4<0\\right\\}, \\quad B=\\{-4,1,3,5\\}, \\quad$ 则 $A \\cap B=$"] >>> tokenizer = TextTokenizer() From f4cc298477f82c6205706cedc806651e31628941 Mon Sep 17 00:00:00 2001 From: BAOOOOOM <82091145+BAOOOOOM@users.noreply.github.com> Date: Fri, 13 Aug 2021 17:26:16 +0800 Subject: [PATCH 13/13] Create vectorization.rst --- docs/source/tutorial/zh/vectorization.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/tutorial/zh/vectorization.rst b/docs/source/tutorial/zh/vectorization.rst index 6d6e810b..fac4c60c 100644 --- a/docs/source/tutorial/zh/vectorization.rst +++ b/docs/source/tutorial/zh/vectorization.rst @@ -36,7 +36,7 @@ 2.调用T2V模块,根据需要选择是否使用预训练的t2v模型 -Example +Examples: :: >>> model_path = "../test_model/test_gensim_luna_stem_tf_d2v_256.bin" >>> i2v = D2V("text","d2v",filepath=model_path, pretrained_t2v = False) @@ -83,7 +83,7 @@ Example 2.将所得到的模型传入D2V,使用D2V进行处理 -Example +Examples: :: >>> i2v = get_pretrained_i2v("d2v_sci_256") >>> i2v(item)