sense2vec---基于语境的词向量(Contextually-keyed word vectors)

1 引言

自然语言处理的重大突破发生在大约2007年,以Google公司为代表的研究提出了一种以词矢量来表示语义相关的方法Word2Vec。建立在Word2Vec的基础之上,使用N-gram技术,可以构造出语义相关的词组,<语义相似模型(Doc2Vec)在双语教学中的应用>显示了这样的改进,这种改进对英语教学和双语教学具有非常重要的意义。当原始数据集比较“干净”,这种方法能够产生出很好的结果。不过,word2vec没有考虑词性的特征,于是Trask等人(2015)提出了sense2vec增强了词汇的语义表达与关联,通过引入词性,NER等特征来区分词汇之间的差别。大量的实践证明,sense2vec产生的结果比word2vec产生的结果好。本文讨论了构造sense2vec模型的过程。 


2 sense2vec测试

sense2vec的最新版本是2.0.0,自带了两个预训练模型:s2v_reddit_2019_lg(4G)和s2v_reddit_2015_md(573M)。测试使用了前者的大模型。

(1) 查询natural language processing得出的结果

machine_learning; NLP; 

computer_vision; text_mining; 

deep_learning; 

Machine_Learning; 

speech_recognition; 

image_generation; 

machine_learning_algorithms; 

deep_reinforcement_learning

(2) 查询mining engineering得出的结果:

geological_engineering;

chemical_engineering;

minor_or_double_major;

engineering_geology;

BME_degree;

显然第二个试验的结果没有第一个试验的结果好,这是因为这个数据集中没有包含我们专业方面的话题,因此需要训练我们自己的数据集。


3 训练sense2vec模型

首先试验了一个5M的小数据集来训练,使用en_core_web_trf模型分词。命令行的操作非常诡异,因此把这个过程记录下来。

(1) 使用spaCy解析原始文本并输出Doc对象[01_parse.py];

python 01_parse.py set1.txt 01

其中set1.txt是原始文本文件名,01是产生Doc的目录, 产生出文件set1-1.spacy。


(2) 加载(1)产生的经过解析的Doc对象集合,并以sense2vec格式输出文本文件(每行一个句子,合并具有意义的短语) [02_preprocess.py];

python 02_preprocess.py ./01/set1-1.spacy 02

其中./01/set1-1.spacy是(1) 产生的文件,02是输出文本的目录, 产生出文件set1-1.s2v。


(3) 使用FastText训练矢量[04_fasttext_train_vectors.py];

python 04_fasttext_train_vectors.py 04 ./02

其中./02是上一步骤产生的目录,作为本步骤的输入, 04是新产生的目录,产生出两个文件: vectors.txt和vocab.txt。


(4) 加载向量和频率,输出sense2vec分量,它通过Sense2Vec.from_disk加载[05_export.py]。

python 05_export.py ./04/vectors.txt ./04/vocab.txt out

其中out是新产生的目录,保存着最后产生出来的模型,如下图所示。

sense2vec---基于语境的词向量(Contextually-keyed word vectors)的图1

至此训练过程完成。步骤(1)最耗时,用了23分钟。训练结果如下:

(1) fracture的语义相似:

network; DFN; discrete;

aperture; hydraulic; length; 

connectivity; fluid;

heterogeneous; voronoi;

(2) PFC3D的语义相似:

code; particle; Itasca;

BPM; PFC; assembly; PFC2D;

Pierce; UDEC; SJM; bonded;

Cundall; 3DEC

可能是数据量太小或者是数据不干净,本次试验没有产生出太多词组,doc.noun_chunks的作用没有显现出来,没有生成预期的结果。改en_core_web_lg模型分词的效果相对较好:

(1) Discrete_Fracture_Network:

pathways; DFN;

BPM; algorithm; SRM

(2) Monte_Carlo:

reliability; probabilistic;

stochastic; simulation; DFN


4 结束语

通过训练sense2vec可以构造出我们专业的词矢量。不过要得到最好的效果,需要高质量的大型数据集。

(1条)
默认 最新
学习了
评论 点赞
点赞 1 评论 1 收藏
关注