向量化

此部分提供了简便的接口,可以直接将传入的items经过转化得到向量。当前提供了是否使用预训练模型的选项,可根据需要进行选择,如不使用预训练模型则可直接调用D2V函数,使用预训练模型则调用get_pretrained_i2v函数。

  • 不使用预训练模型

  • 使用预训练模型

总体流程

1.对传入的item进行 语法解析 ,得到SIF格式;

2.对sif_item进行 成分分解

3.对经过成分分解的item进行 令牌化

4.使用已有或者使用提供的预训练模型,将令牌化后的item转换为向量。

不使用预训练模型:直接调用已有模型

使用自己提供的任一预训练模型(给出模型存放路径即可)将给定的题目文本转成向量。

  • 优点:可以使用自己的模型,另可调整训练参数,灵活性强。

导入模块

from EduNLP.I2V import D2V,W2V,get_pretrained_i2v
from EduNLP.Vector import T2V,get_pretrained_t2v

提供的模型类型

  • W2V

  • D2V

  • T2V

W2V

此模型方法直接使用gensim库中的相关模型方法,将传入的word转换为vector,当前提供一下四种方法:

  • FastText

  • Word2Vec

  • KeyedVectors

>>> i2v = get_pretrained_i2v("test_w2v", "examples/test_model/data/w2v") 
>>> item_vector, token_vector = i2v(["有学者认为:‘学习’,必须适应实际"])
>>> item_vector 
array([[...]], dtype=float32)

D2V

此模型方法可以将item转换为vector,是一个综合性的处理方法,当前提供以下方法:

  • d2v:调用gensim库中的Doc2Vec,来使item转换为vector

  • BowLoader:调用gensim库中的corpora模块将doc转化为bow

  • TfidfLoader:调用gensim库中的TfidfModel模块将doc转化为bow

>>> item = {"如图来自古希腊数学家希波克拉底所研究的几何图形.此图由三个半圆构成,三个半圆的直径分别为直角三角形$ABC$的斜边$BC$, 直角边$AB$, $AC$.$\bigtriangleup ABC$的三边所围成的区域记为$I$,黑色部分记为$II$, 其余部分记为$III$.在整个图形中随机取一点,此点取自$I,II,III$的概率分别记为$p_1,p_2,p_3$,则$\SIFChoice$$\FigureID{1}$"}
>>> model_path = "../test_model/test_gensim_luna_stem_tf_d2v_256.bin"
>>> i2v = D2V("text","d2v",filepath=model_path, pretrained_t2v = False)
>>> i2v(item)
([array([ 4.76559885e-02, -1.60574958e-01,  1.94614579e-03,  2.40295693e-01,
2.24517003e-01, -3.24351490e-02,  4.35789041e-02, -1.65670961e-02,...

T2V

使用自己提供的任一预训练模型(给出模型存放路径即可)将一组题目的切分序列表征为向量。

  • 优点:模型及其参数可自主调整,灵活性强。

输入

类型:list 内容:一个题组中每个题目切分序列的组合。 > 使用 GensimWordTokenizer 模型即可将题目文本(str 类型)转换成 tokens。

>>> token_items=['公式','[FORMULA]','公式','[FORMULA]','如图','[FIGURE]','x',',','y','约束条件','[SEP]','z','=','x','+','7','y','最大值','[MARK]']
>>> path = "../test_model/test_gensim_luna_stem_tf_d2v_256.bin"
>>> t2v = T2V('d2v',filepath=path)
>>> t2v(token_items)
[array([ 0.0256574 ,  0.06061139, -0.00121044, -0.0167674 , -0.0111706 ,
0.05325712, -0.02097339, -0.01613594,  0.02904145,  0.0185046 ,...

处理的具体流程

1.调用get_tokenizer函数,得到经过分词后的结果;

2.根据使用的模型,选择提供的模型类型,进行向量化处理。

使用预训练模型:直接调用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进行处理

Examples:

>>> i2v = get_pretrained_i2v("d2v_sci_256")
>>> i2v(item)