向量化¶
此部分提供了简便的接口,可以直接将传入的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)