词向量评价

1. 实验目的

通过内部及外部评价,客观比较不同词向量的质量,以及不同词语初始化对NLP任务的影响,理解神经网络模型用于NLP的第一步。

2. 实验平台

操作系统:Windows 2000/ XP/7/8/10/11 或者 Linux

框架:keras/tensorflow/ pytorch

3. 实验内容

【词向量】

(1)给定的100维glove词向量(glove100)

(2)给定的100维腾讯英文词向量(tenct100)

或者其他的预训练词向量,维度建议100以上

注:两份词向量的词表规模可能不同,会影响测试效果

【实验内容】

一、类比推理任务

    测试三份不同的词向量,根据词向量的线性加减,回答:least-little+many=? went-go+drink =?

请给出每一个问题的top 5回答。

词向量

least-little+many =

went-go+drink =

glove100

tenct100

二、词语相关度计算

    给定数据集wordsim353(实际包含348个词对),每一条数据包含两个词语以及人工打出的平均相关度得分。使用2个词语向量的余弦相似度计算得到相关性得分,与人工打分相比较,使用Spearman秩相关系数作为评价指标,计算方法见课件。

词向量

ρs

glove100

tenct100

随机取10个词对,展示glove100计算的相关度得分和真实得分。

词对

真实相关度

计算相关度

三、文本主题分类

  • 数据集:AG_NEWS新闻主题分类数据集(部分),包含4类,分别为World、Sports、Business、Sci/Tech,在文件中分别以0、1、2、3作为类别label。训练集train.csv,每类各1000条。测试集test.csv。第一列是类别label,第二列是新闻文本。
reader = csv.reader(open(f_path, 'r'))
for line in in reader:
    # read data

   

可以对数据进行一些预处理,比如忽略无意义的“\\”、“<”、“>”等片段,大小写转换、删除多余的空格、忽略“NEW YORK (Reuters)”、“LONDON (Reuters)”、“Canadian Press - TORONTO (CP)”等新闻出版社名称。

  • 模型:单隐藏层的前馈神经网络。

模型定义为一个继承nn.Module的类(同实验二)。

输入层是文本的预训练词向量的拼接,由于模型要求对所有样本输入层神经元数量相等,选择一个最大长度maxlen,如果文本长度(词语个数)小于maxlen,则在拼接向量后补零,否则进行截断,可以自行选择取前maxlen个或者后maxlen个,即输入层的输入维度=maxlen*100(词向量维度)。输入层的输出维度=hidden_size。

隐藏层激活函数选择tanh,输入维度和输出维度=hidden size。

输出层输入维度= hidden size,使用softmax输出单元,输出维度=4(类别数)。

损失函数使用交叉熵。

使用两种不同的词向量进行实验,并使hidden_size、maxlen、dim、batch_size、epoch、优化器、学习率等参数相同。

每次训练可以随机打乱(shuffle)训练数据。

(1)请说明所有实验中的以上具体参数设置,并选择glovefasttext词向量。另外,通过正态分布生成100维词向量(random100)e.g. 使用numpy产生正态分布数组 w = np.random.normal(0, 0.1, 100)

(2)统计每次实验的准确率(accuracy)、精确率(precision)、召回率(recall)、宏F1值,均使用百分数,如0.823写成82.3。

词向量

accuracy

precision

recall

F1

glove/tenct100

random100

4. 要求

(1)独立完成,严禁抄袭(抄袭和被抄袭均判为0分)。

(2)实验报告排版合理,内容详实,必要时配过程截图。

(3)在规定时间范围内提交,否则判为0分。

一、实验环境

操作系统:Windows 10

深度学习框架:pytorch

二、实验内容及详细的完成情况

2.1 实验一

类比推理任务

    测试三份不同的词向量,根据词向量的线性加减,回答:least-little+many=? went-go+drink =?

请给出每一个问题的top 5回答。

词向量

least-little+many =

went-go+drink =

glove100

tenct100

least-little+many =

went-go+drink =

2.2 实验二

词语相关度计算

    给定数据集wordsim353(实际包含348个词对),每一条数据包含两个词语以及人工打出的平均相关度得分。使用2个词语向量的余弦相似度计算得到相关性得分,与人工打分相比较,使用Spearman秩相关系数作为评价指标,计算方法见课件。

词向量

ρs

glove100

tenct100

随机取10个词对,展示glove100计算的相关度得分和真实得分

2.3 实验三

(1)数据预处理

定义了一个 preprocess_text 函数来进行文本预处理。在这个函数中,我们首先使用 replace 方法来忽略了无意义的片段,然后使用 lower 方法将文本转换为小写,接着使用 split 和 join 方法删除多余空格,最后使用 replace 方法忽略了特定的新闻出版社名称。

  1. 定义需要忽略的无意义片段和特定新闻出版社名称  
  2. meaningless_fragments = ['\\', '<', '>']  
  3. ignore_publishers = ['NEW YORK (Reuters)''LONDON (Reuters)''Canadian Press - TORONTO (CP)']  
  4.   
  5.   
  6. 定义文本预处理函数  
  7. def preprocess_text(text):  
  8.     忽略无意义的片段  
  9.     for fragment in meaningless_fragments:  
  10.         text = text.replace(fragment, '')  
  11.   
  12.     大小写转换  
  13.     text = text.lower()  
  14.   
  15.     删除多余空格  
  16.     text = ' '.join(text.split())  
  17.   
  18.     忽略特定新闻出版社名称  
  19.     for publisher in ignore_publishers:  
  20.         text = text.replace(publisher, '')  
  21.   
  22.     return text  

(2)参数设置

# 定义训练参数

hidden_size = 128

maxlen = 100

dim = 100  # 假设使用100维词向量

batch_size = 64

epochs = 10

learning_rate = 0.001

(3)

统计每次实验的准确率(accuracy)、精确率(precision)、召回率(recall)、宏F1值

  1. X_train = np.zeros((len(train_data), maxlen * dim))  
  2. y_train = train_data['label'].values  
  3. for i, text in enumerate(train_data['text']):  
  4.     for j, word in enumerate(text.split()):  
  5.         if j >= maxlen:  
  6.             break  
  7.         # if word in word_embeddings:  
  8.         #     X_train[i, j*dim:(j+1)*dim] = word_embeddings[word]  
  9.         X_train[i, j*dim:(j+1)*dim] = np.random.normal(0, 0.1, 100)  

glove词向量:                                                         fasttext词向量:

           

random100:

三、实验总结

(可以总结实验中出现的问题以及解决的思路,也可以列出没有解决的问题)

  1. GloVe词向量文件必须是以以下形式,才能被gensim.models 中的KeyedVectors函数处理,然而en_glove_100d.txt文件开头并没有显示VOCAB_SIZE VECTOR_SIZE

已知该txt文件是100维向量,并且算得其大小为400000,于是手动添加,使其可以正常调用库函数运行。

  1. tencent-ailab-embedding-en-d100-v0.1.0-s文件中有许多%+xxx的word,不知道什么意思怎么处理,导致类比推理任务也出现这些乱码。

3. 正态分布生成100维词向量效果十分差,体现了一个好的词向量的重要性。

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值