三重嵌入和基于CNN的序列标记,用于提取和情感分析
介绍
这是基于方面的情感分析的示例。对评论的细粒情感分析的一项导入任务是提取用户表达意见的方面或功能。
该模型利用两种类型的预训练的嵌入式和词性词具 + CNN模型用于提取方面。
目前,它在餐厅评论中效果很好,但是您也可以在其他产品评论上训练自己的域嵌入和方面提取模型!
型号
该代码基于本文的“双嵌入式和CNN基于CNN的序列标签,用于提取方面提取”,Xu,H.,Liu,B.,Shu,L。,&Yu,ps(2018)。
它的原始代码可以在github/ howardhsu/中找到,并在上面显示了模型的插图。
两个嵌入是:
- 通用手套嵌入
- 域特异性嵌入(可以使用Gensim-Word2Vec创建)
在我的“三重嵌入”模型中,从CONC层的特征映射输出与单词的域嵌入域以及其词性词汇量及其词性标记器(Stanford)串联,然后将其馈送到一个完全连接的神经网络中,其中一个大小50的隐藏层。
如何使用代码
必需的Python模块:Numpy,Pytorch(有或不带CUDA),KERAS,NLTK,ETC
如果您想使用预训练的模型来评估评论文本文件,则可以跳过步骤5/6/7。
步骤1:
下载常规嵌入式(手套:http://nlp.stanford.edu/data/glove.840b.300d.zip)。将其重命名为“ gen.vec”,并将其保存在文件夹中:数据/嵌入/
步骤2:
下载餐厅域嵌入式(您可以在https://www.**cs.*uic.edu/~hxu/中找到本文标题下的链接,将它们保存在文件夹中:data/embedding/
此文件夹中的文件列表是:
- gen.vec
- restaurant_emb.vec
- restaurant_emb.vec.bin
如果您想创建自己的域嵌入,则可以使用Gensim-Word2Vec来做到这一点。可以在我的回购中找到演示代码:github -yafangy/word2vec_yelp_review_embedding
步骤3:
下载并安装FastText(https://gi*thu*b.c*om/facebookresearch/fastText)。
为Python构建快速文本:
$ git clone https://gi*thub.c**om/facebookresearch/fastText.git
$ cd fastText
$ pip install .
现在,您应该能够在Python代码中import fastText 。
这是为了嵌入量量表的单词(单词不在特定于域的嵌入中)。
步骤4:
从斯坦福大学自然语言处理组中下载斯坦福log-linear的语音贴标签,以将其重命名为:Stanford-posttagger-full/
步骤5:
您可以跳过此步骤。包括数据集。
将官方数据集下载到文件夹:数据/官方_data/
数据来自Semeval 2016餐厅(http://alt.**q*cri.org/semeval2016/task5/)。
我认为名称如下:
- absa16_restaurants_train_sb1_v2.xml(用于培训)
- en_rest_sb1_test_a.xml(用于测试)
- en_rest_sb1_test_gold.xml(给定最佳测试结果)
步骤6:
Semeval 2016餐厅的原始数据集以.xml格式编写。
运行脚本/step1_prep.py以构建词汇字典,用于通用嵌入和域嵌入的numpy文件,并为火车/测试准备数据集。
python3 script/Step1_prep.py
运行此脚本后,您应该期望在文件夹中生成以下文件:data/prep_data
- word_idx.json(单词的字典出现在数据集中,将单词映射到ID号)
- gen.vec.npy,餐厅
- RestaurantTrain.npz,餐厅test.npz(从.xml文件中提取准备的培训/文本数据集)
- 其他.json文件(来自.xml文件的原始文本/意见)
这些文件包含在此存储库中,因此,如果您想直接跳入培训,则可以跳过此步骤。
步骤7:
运行脚本/step2_train.py训练餐厅模型。
python3 script/Step2_train.py
这是用户可以调整的关键参数的列表:
- – valid:int(定义验证数据大小)
- – epochs:int(时代数)
- -lr:双重(学习率)
- – Dropout:double(辍学率)
- -crf:bool(是否使用条件随机字段)
- – postag:bool(是否包括词性词性标签)
- – 运行:int(默认= 5,生成5个模型文件)
模型/餐厅0中包含了预训练的模型,因此,如果您想直接跳跃以评估您的评论文本,则可以跳过此步骤。
步骤8:
然后,您可以通过GitHub中提供的代码来评估模型-Howardhsu/Double-Embeddings and CNN基于基于Aspect-Aspect-Aspect-traction的代码。这是出于测试目的,您将在“ data/ofical_data”文件夹中生成一个“ pred.xml”。要测试模型的准确性,您需要从Semeval 2016餐厅(http://alt.*q*cr*i.org/semeval2016/task5/)下载官方评估脚本,并将其保存到脚本/a.jar
在文件夹“演示/”中,有一个文件,其中包含从Kaggle数据集(Yelp DataSet | Kaggle)提取的一些Yelp评论。欢迎您输入您感兴趣的任何评论。
python3 script/Step3_evaluation_from_input.py --demo_fn \'test.txt\' --runs 2
“ – 运行”设置为2,因为我只在此处上传了2个运行的模型。请等待几秒钟准备文本嵌入。然后,您可以从终端中的评论中查看提取的方面(彩色文本):
