日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

NLP-信息抽取-关系抽取-2016:Attention-BiLSTM实体关系分类器【基于双向LSTM及注意力机制的关系分类】【数据集:SemEval-2010 Task 8】

發(fā)布時間:2024/3/24 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NLP-信息抽取-关系抽取-2016:Attention-BiLSTM实体关系分类器【基于双向LSTM及注意力机制的关系分类】【数据集:SemEval-2010 Task 8】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

《原始論文:Attention-based bidirectional long short-term memory networks for relation classification》

一、概述

1、本文idea提出原因

傳統(tǒng)的方法中,大多數(shù)研究依賴于一些現(xiàn)有的詞匯資源(例如WordNet)、NLP系 統(tǒng)或一些手工提取的特征。這樣的方法可能導致計算復雜度的增加,并且特征提取工作本身會耗費大量的時間和精力,特征提取質(zhì)量的對于實驗的結(jié)果也有很大的影響。

提出了 ATT-BLSTM的網(wǎng)絡結(jié)構(gòu)解決關系端對端識別問題

這篇論文從這一角度出發(fā),提出一個基于Attention機制的雙向 LSTM神經(jīng)網(wǎng)絡模型進行關系抽取研究,Attention機制能夠自動 發(fā)現(xiàn)那些對于分類起到關鍵作用的詞,使得這個模型可以從每個句子中捕獲最重要的語義信息,它不依賴于任何外部的知識或者NLP系統(tǒng)

2、本論文歷史意義

巧妙地在雙向LSTM模型中加入Attention機制,用于關系抽取任務,避免了傳統(tǒng)的 任務中復雜的特征工程,大大簡化了實驗過程并得到相當不錯的結(jié)果,也為相關的研究提供了可操作性的思路

這篇論文的整體的邏輯十分清晰,緊緊圍繞研究動機.整篇論文的思路十分簡單,模型也一目了然,但是結(jié)果表現(xiàn)優(yōu)秀

3、摘要核心

  • 目前關系識別依賴于Mp工具提取特征;
  • 提出一種不需要復雜預處理的關系識別方法att-blstm;
  • 實驗結(jié)果表明該方法是有效的,達到the state-of-the-art的效果
  • 二、Attention-BiLSTM模型結(jié)構(gòu)

    1、模型結(jié)構(gòu)


    ATT-BLSTM網(wǎng)絡結(jié)構(gòu)以word embeding為基礎,加入實體標識位,通過ATT-BLSTM的結(jié)構(gòu)讓模型動態(tài)區(qū)分關系分類的重要詞匯。
    As shown in Figure 1, the model proposed in this paper contains ?ve components:

  • 輸入句子:Input layer: input sentence to this model;
  • Embedding layer: map each word into a low dimension vector;
  • BiLSTM:LSTM layer: utilize BLSTM to get high level features from step (2);
  • Attention layer: produce a weight vector, and merge word-level features from each time step into a sentence-level feature vector, by multiplying the weight vector;
  • Output layer: the sentence-level feature vec- tor is ?nally used for relation classi?cation.
  • 2、Attention 原理

    Attention 原理:Attention Mechanism可以幫助模型對輸入的X每個部分賦予不同的權(quán)重,抽取出更加關鍵及重要的信息,使模型做出更加準確的判斷,同時不會對模型的計算和存儲帶來更大的開銷。


    根據(jù)Attention的計算區(qū)域,可以分成以下幾種:

  • Soft-Attention/Global Attention:這是比較常見的Attention方式,對所有key求權(quán)重概率,每個key都有一個對應的權(quán)重,是一種全局的計算方式(也可以叫Global Attention).
  • Hard-Attention:這種方式是直接精準定位到某個key,其余key就都不管了,相當于這個key的 概率是1 ,其余key的概率全部是0。因此這種對齊方式要求很高,要求一步到位,如果沒有正確對齊, 會帶來很大的影響。另一方面,因為不可導,一般需要用強化學習的方法進行訓練
  • Local-Attention:這種方式其實是以上兩種方式的一個折中,對一個窗口區(qū)域進行計算。先用 Hard方式定位到某個地方,以這個點為中心可以得到一個窗口區(qū)域,在這個小區(qū)域內(nèi)用Soft方式來
    算 Attention。
  • 3、小技巧

    對實體前后添加特定標識符標明實體位置

    采用帶約束的正則損失

    三、實驗結(jié)果

    compare various model configurations on the SemEval-2010 Task 8 dataset

    四、論文結(jié)論

    1、關鍵點

    不依賴任何其他NLP工具

    2、創(chuàng)新點

    引入Attention-BiLSTM結(jié)構(gòu)

    3、啟發(fā)點

    網(wǎng)格結(jié)構(gòu)完全不依何nlp工具或詞法資源,只需要帶位置標識的原始文本作為輸入。

    This model does not rely on NLP tools or lexical resources to get, it uses raw text with position indicators as input.

    五、論文代碼

    1、數(shù)據(jù)集

    1.1 原始數(shù)據(jù)集

    train_file.txt【樣本1-8000】

    1 "The system as described above has its greatest application in an arrayed <e1>configuration</e1> of antenna <e2>elements</e2>." Component-Whole(e2,e1) Comment: Not a collection: there is structure here, organisation.2 "The <e1>child</e1> was carefully wrapped and bound into the <e2>cradle</e2> by means of a cord." Other Comment:3 "The <e1>author</e1> of a keygen uses a <e2>disassembler</e2> to look at the raw assembly code." Instrument-Agency(e2,e1) Comment:4 "A misty <e1>ridge</e1> uprises from the <e2>surge</e2>." Other Comment:5 "The <e1>student</e1> <e2>association</e2> is the voice of the undergraduate student population of the State University of New York at Buffalo." Member-Collection(e1,e2) Comment:6 "This is the sprawling <e1>complex</e1> that is Peru's largest <e2>producer</e2> of silver." Other Comment:7 "The current view is that the chronic <e1>inflammation</e1> in the distal part of the stomach caused by Helicobacter pylori <e2>infection</e2> results in an increased acid production from the non-infected upper corpus region of the stomach." Cause-Effect(e2,e1) Comment:8 "<e1>People</e1> have been moving back into <e2>downtown</e2>." Entity-Destination(e1,e2) Comment:9 "The <e1>lawsonite</e1> was contained in a <e2>platinum crucible</e2> and the counter-weight was a plastic crucible with metal pieces." Content-Container(e1,e2) Comment: prototypical example10 "The solute was placed inside a beaker and 5 mL of the <e1>solvent</e1> was pipetted into a 25 mL glass <e2>flask</e2> for each trial." Entity-Destination(e1,e2) Comment: ......

    test_file.txt【樣本8001-10717】

    8001 "The most common <e1>audits</e1> were about <e2>waste</e2> and recycling." Message-Topic(e1,e2) Comment: Assuming an audit = an audit document.8002 "The <e1>company</e1> fabricates plastic <e2>chairs</e2>." Product-Producer(e2,e1) Comment: (a) is satisfied8003 "The school <e1>master</e1> teaches the lesson with a <e2>stick</e2>." Instrument-Agency(e2,e1) Comment:8004 "The suspect dumped the dead <e1>body</e1> into a local <e2>reservoir</e2>." Entity-Destination(e1,e2) Comment:8005 "Avian <e1>influenza</e1> is an infectious disease of birds caused by type A strains of the influenza <e2>virus</e2>." Cause-Effect(e2,e1) Comment:8006 "The <e1>ear</e1> of the African <e2>elephant</e2> is significantly larger--measuring 183 cm by 114 cm in the bush elephant." Component-Whole(e1,e2) Comment:8007 "A child is told a <e1>lie</e1> for several years by their <e2>parents</e2> before he/she realizes that a Santa Claus does not exist." Product-Producer(e1,e2) Comment: (a) is satisfied; negation is outside8008 "Skype, a free software, allows a <e1>hookup</e1> of multiple computer <e2>users</e2> to join in an online conference call without incurring any telephone costs." Member-Collection(e2,e1) Comment:8009 "The disgusting scene was retaliation against her brother Philip who rents the <e1>room</e1> inside this apartment <e2>house</e2> on Lombard street." Component-Whole(e1,e2) Comment:8010 "This <e1>thesis</e1> defines the <e2>clinical characteristics</e2> of amyloid disease." Message-Topic(e1,e2) Comment: may be we could leave clinical out of e2.

    1.2 處理后的數(shù)據(jù)

    preprocess.py

    #!/usr/bin/env python # -*- encoding: utf-8 -*- # @Version : Python 3.6import json import re from nltk.tokenize import word_tokenizedef search_entity(sentence):e1 = re.findall(r'<e1>(.*)</e1>', sentence)[0]e2 = re.findall(r'<e2>(.*)</e2>', sentence)[0]sentence = sentence.replace('<e1>' + e1 + '</e1>', ' <e1> ' + e1 + ' </e1> ', 1)sentence = sentence.replace('<e2>' + e2 + '</e2>', ' <e2> ' + e2 + ' </e2> ', 1)sentence = word_tokenize(sentence)sentence = ' '.join(sentence)sentence = sentence.replace('< e1 >', '<e1>')sentence = sentence.replace('< e2 >', '<e2>')sentence = sentence.replace('< /e1 >', '</e1>')sentence = sentence.replace('< /e2 >', '</e2>')sentence = sentence.split()assert '<e1>' in sentenceassert '<e2>' in sentenceassert '</e1>' in sentenceassert '</e2>' in sentencereturn sentencedef convert(path_src, path_des):with open(path_src, 'r', encoding='utf-8') as fr:data = fr.readlines()with open(path_des, 'w', encoding='utf-8') as fw:for i in range(0, len(data), 4):id_s, sentence = data[i].strip().split('\t')sentence = sentence[1:-1]sentence = search_entity(sentence)meta = dict(id=id_s,relation=data[i+1].strip(),sentence=sentence,comment=data[i+2].strip()[8:])json.dump(meta, fw, ensure_ascii=False)fw.write('\n')if __name__ == '__main__':path_train = './SemEval2010_task8_all_data/SemEval2010_task8_training/TRAIN_FILE.TXT'path_test = './SemEval2010_task8_all_data/SemEval2010_task8_testing_keys/TEST_FILE_FULL.TXT'convert(path_train, 'train.json')convert(path_test, 'test.json')

    train.json

    {"id": "1", "relation": "Component-Whole(e2,e1)", "sentence": ["The", "system", "as", "described", "above", "has", "its", "greatest", "application", "in", "an", "arrayed", "<e1>", "configuration", "</e1>", "of", "antenna", "<e2>", "elements", "</e2>", "."], "comment": " Not a collection: there is structure here, organisation."} {"id": "2", "relation": "Other", "sentence": ["The", "<e1>", "child", "</e1>", "was", "carefully", "wrapped", "and", "bound", "into", "the", "<e2>", "cradle", "</e2>", "by", "means", "of", "a", "cord", "."], "comment": ""} {"id": "3", "relation": "Instrument-Agency(e2,e1)", "sentence": ["The", "<e1>", "author", "</e1>", "of", "a", "keygen", "uses", "a", "<e2>", "disassembler", "</e2>", "to", "look", "at", "the", "raw", "assembly", "code", "."], "comment": ""} {"id": "4", "relation": "Other", "sentence": ["A", "misty", "<e1>", "ridge", "</e1>", "uprises", "from", "the", "<e2>", "surge", "</e2>", "."], "comment": ""} {"id": "5", "relation": "Member-Collection(e1,e2)", "sentence": ["The", "<e1>", "student", "</e1>", "<e2>", "association", "</e2>", "is", "the", "voice", "of", "the", "undergraduate", "student", "population", "of", "the", "State", "University", "of", "New", "York", "at", "Buffalo", "."], "comment": ""} ......

    test.json

    {"id": "8001", "relation": "Message-Topic(e1,e2)", "sentence": ["The", "most", "common", "<e1>", "audits", "</e1>", "were", "about", "<e2>", "waste", "</e2>", "and", "recycling", "."], "comment": " Assuming an audit = an audit document."} {"id": "8002", "relation": "Product-Producer(e2,e1)", "sentence": ["The", "<e1>", "company", "</e1>", "fabricates", "plastic", "<e2>", "chairs", "</e2>", "."], "comment": " (a) is satisfied"} {"id": "8003", "relation": "Instrument-Agency(e2,e1)", "sentence": ["The", "school", "<e1>", "master", "</e1>", "teaches", "the", "lesson", "with", "a", "<e2>", "stick", "</e2>", "."], "comment": ""} {"id": "8004", "relation": "Entity-Destination(e1,e2)", "sentence": ["The", "suspect", "dumped", "the", "dead", "<e1>", "body", "</e1>", "into", "a", "local", "<e2>", "reservoir", "</e2>", "."], "comment": ""} {"id": "8005", "relation": "Cause-Effect(e2,e1)", "sentence": ["Avian", "<e1>", "influenza", "</e1>", "is", "an", "infectious", "disease", "of", "birds", "caused", "by", "type", "A", "strains", "of", "the", "influenza", "<e2>", "virus", "</e2>", "."], "comment": ""} ......

    1.3 relation2id

    Other 0 Cause-Effect(e1,e2) 1 Cause-Effect(e2,e1) 2 Component-Whole(e1,e2) 3 Component-Whole(e2,e1) 4 Content-Container(e1,e2) 5 Content-Container(e2,e1) 6 Entity-Destination(e1,e2) 7 Entity-Destination(e2,e1) 8 Entity-Origin(e1,e2) 9 Entity-Origin(e2,e1) 10 Instrument-Agency(e1,e2) 11 Instrument-Agency(e2,e1) 12 Member-Collection(e1,e2) 13 Member-Collection(e2,e1) 14 Message-Topic(e1,e2) 15 Message-Topic(e2,e1) 16 Product-Producer(e1,e2) 17 Product-Producer(e2,e1) 18

    2、預訓練詞向量:靜態(tài)詞向量HLBL

    hlbl-embeddings-scaled.EMBEDDING_SIZE=50

    *UNKNOWN* -0.166038776479 0.104395984608 0.163119732357 0.0899594154863 -0.0192271099805 -0.0417631572501 -0.0163376687927 0.0357616216019 0.0536077591673 0.0127688536503 -0.00284508433021 -0.0626207031228 -0.0379452734015 -0.103548297666 0.0381169119981 0.00199421074321 -0.0474636488659 -0.0127526851513 0.016404178535 -0.12759853361 -0.0292937037717 -0.0512566352549 0.0233097445983 0.0360505083995 0.00229317984472 -0.0771565284227 0.0071461584378 -0.051608090196 -0.0267547654304 0.0492994451068 -0.0531630844999 0.00787191810391 0.082280106873 0.066908641868 -0.0283930612982 0.216840166248 0.164923151267 0.00188498983723 0.0328679039324 -0.00175432516758 0.0614261774935 0.0987773071377 0.0548423375506 -0.0307057922059 0.053074241476 0.04982054279 -0.0572485864016 0.132236444766 -0.0379717035014 -0.120915939814 the -0.0841015569168 0.145263825738 0.116945121935 -0.0754618634155 0.17901499611 -0.000652852605208 -0.0713783879233 0.207273704502 0.060711721477 0.0366727701165 -0.0269791566731 -0.156993473526 -0.0393947453024 0.00749161628231 -0.332851634057 -0.1708430781 -0.275163605231 -0.266592614101 0.43349041466 -0.00779248211778 0.031101796379 -0.0257114150838 0.174856713352 -0.0543054233622 -0.0846669459476 -0.006234398456 0.00414488584462 0.119738648443 -0.0914876936952 -0.317381121871 -0.27471439742 0.234269597998 0.170305945138 -0.0282815073325 -0.10127814458 0.156451476203 0.154703520781 -0.0014827085612 0.164287521114 0.0328582913203 0.0356570354049 -0.190254406793 -0.112029936115 -0.198875312619 0.00102875631152 -0.00161517169984 -0.125210890327 0.196903181061 -0.112017915766 -0.00838804375065 . -0.0875932389444 -0.0586365253633 0.0729727126603 0.32072000431 0.0745620569276 -0.0494709138174 0.208708067552 -0.025035364294 -0.197531050237 0.177318202028 0.297077745222 -0.0256369072571 0.182364658364 0.189089099105 0.0589179494006 -0.0627276310572 0.0682898379459 0.241161712515 0.253510796291 -0.0325139691451 -0.0129081882483 -0.083367340352 0.0276167362372 -0.00757124183183 -0.0905801885623 0.305015208385 0.0755474920504 -0.00516459185438 -0.0412876867803 0.105047372601 -0.718674456034 0.184682477295 0.232732814491 0.0929975692214 0.0999329447708 -0.0968008990987 0.421525505372 -0.136460066398 -0.323294448817 0.118318915141 0.415411774103 -0.135770867168 0.0404792691614 0.264279769529 -0.133076243622 0.195087919022 -0.087589323012 0.0335223022065 -0.0365650611956 -0.0163760300203 , -0.023019838485 0.277215570968 0.241932261453 -0.105403438907 0.247316949736 0.0859618436243 -0.0130132156599 0.123988163629 -0.150741462418 0.129993766762 0.0766431623839 0.0547135456598 0.187342182554 0.176303102861 -0.121401723217 0.0458278230666 0.0339804870854 -0.0619606057248 0.0514787739809 0.00732501266557 0.0879996990484 -0.369288823679 0.235222707122 -0.0528783055204 0.0121891472663 -0.165169815904 -0.136829953355 -0.0750751223049 -0.0503433833321 0.0782539868365 -0.400940778018 -0.099745222007 -0.152448498545 -0.0815002789835 -0.010575616616 0.331604536668 -0.0124179474775 0.00173559407939 -0.230971231526 0.0162523457081 0.213848645598 0.184698023693 0.158368229826 0.0975422545404 -0.0307127563081 0.093420146492 -0.0377856184872 -0.0181716170654 0.43322993915 -0.113289957059 to 0.134693667961 0.392203653086 0.0346151199225 0.135354475458 0.0719918082372 0.118667933013 -0.0698386234679 -0.0139927084407 0.144452931939 0.0383223273458 -0.0491954394553 -0.126435975874 0.23979196724 -0.186550477314 0.0602616605691 -0.0875395769807 0.0788848675161 0.132691898026 0.155618778336 0.00680378469567 -0.126513561203 -0.436124771467 0.132675129426 -0.0946286638801 0.0986847070674 -0.354397304845 -0.196909463175 -0.0911408611189 0.134975690877 0.0625931974859 0.0108112360985 -0.107933544401 -0.166545488854 0.0137397678012 -0.0268394211932 -0.260328038765 0.0745185746772 0.020864049205 0.133485534344 -0.0479098207297 0.145382061477 -0.116284346216 0.0822848147919 -0.00621959258902 0.0135679910959 -0.0723116375013 -0.422793539068 0.144456402991 -0.119019192402 0.0659297394103 ......

    3、config.py

    #!/usr/bin/env python # -*- encoding: utf-8 -*- # @Version : Python 3.6import argparse import torch import os import random import json import numpy as npclass Config(object):def __init__(self):# get init configargs = self.__get_config()for key in args.__dict__:setattr(self, key, args.__dict__[key])# select deviceself.device = Noneif self.cuda >= 0 and torch.cuda.is_available():self.device = torch.device('cuda:{}'.format(self.cuda))else:self.device = torch.device('cpu')# determine the model name and model dirif self.model_name is None:self.model_name = 'Att_BLSTM'self.model_dir = os.path.join(self.output_dir, self.model_name)if not os.path.exists(self.model_dir):os.makedirs(self.model_dir)# backup dataself.__config_backup(args)# set the random seedself.__set_seed(self.seed)def __get_config(self):parser = argparse.ArgumentParser()parser.description = 'config for models'# several key selective parametersparser.add_argument('--data_dir', type=str,default='./data',help='dir to load data')parser.add_argument('--output_dir', type=str,default='./output',help='dir to save output')# word embeddingparser.add_argument('--embedding_path', type=str,default='./embedding/glove.6B.100d.txt',help='pre_trained word embedding')parser.add_argument('--word_dim', type=int,default=100,help='dimension of word embedding')# train settingsparser.add_argument('--model_name', type=str,default=None,help='model name')parser.add_argument('--mode', type=int,default=1,choices=[0, 1],help='running mode: 1 for training; otherwise testing')parser.add_argument('--seed', type=int,default=5782,help='random seed')parser.add_argument('--cuda', type=int,default=0,help='num of gpu device, if -1, select cpu')parser.add_argument('--epoch', type=int,default=30,help='max epoches during training')# hyper parametersparser.add_argument('--batch_size', type=int,default=10,help='batch size')parser.add_argument('--lr', type=float,default=1.0,help='learning rate')parser.add_argument('--max_len', type=int,default=100,help='max length of sentence')parser.add_argument('--emb_dropout', type=float,default=0.3,help='the possiblity of dropout in embedding layer')parser.add_argument('--lstm_dropout', type=float,default=0.3,help='the possiblity of dropout in (Bi)LSTM layer')parser.add_argument('--linear_dropout', type=float,default=0.5,help='the possiblity of dropout in liner layer')parser.add_argument('--hidden_size', type=int,default=100,help='the dimension of hidden units in (Bi)LSTM layer')parser.add_argument('--layers_num', type=int,default=1,help='num of RNN layers')parser.add_argument('--L2_decay', type=float, default=1e-5,help='L2 weight decay')args = parser.parse_args()return argsdef __set_seed(self, seed=1234):os.environ['PYTHONHASHSEED'] = '{}'.format(seed)random.seed(seed)np.random.seed(seed)torch.manual_seed(seed) # set seed for cputorch.cuda.manual_seed(seed) # set seed for current gputorch.cuda.manual_seed_all(seed) # set seed for all gpudef __config_backup(self, args):config_backup_path = os.path.join(self.model_dir, 'config.json')with open(config_backup_path, 'w', encoding='utf-8') as fw:json.dump(vars(args), fw, ensure_ascii=False)def print_config(self):for key in self.__dict__:print(key, end=' = ')print(self.__dict__[key])if __name__ == '__main__':config = Config()config.print_config()

    4、model.py

    #!/usr/bin/env python # -*- encoding: utf-8 -*- # @Version : Python 3.6import torch import torch.nn as nn import torch.nn.functional as F from torch.nn import init from torch.nn.utils.rnn import pack_padded_sequence, pad_packed_sequenceclass Att_BLSTM(nn.Module):def __init__(self, word_vec, class_num, config):super().__init__()self.word_vec = word_vecself.class_num = class_num# hyper parameters and othersself.max_len = config.max_lenself.word_dim = config.word_dimself.hidden_size = config.hidden_sizeself.layers_num = config.layers_numself.emb_dropout_value = config.emb_dropoutself.lstm_dropout_value = config.lstm_dropoutself.linear_dropout_value = config.linear_dropout# net structures and operationsself.word_embedding = nn.Embedding.from_pretrained(embeddings=self.word_vec,freeze=False,)self.lstm = nn.LSTM(input_size=self.word_dim,hidden_size=self.hidden_size,num_layers=self.layers_num,bias=True,batch_first=True,dropout=0,bidirectional=True,)self.tanh = nn.Tanh()self.emb_dropout = nn.Dropout(self.emb_dropout_value)self.lstm_dropout = nn.Dropout(self.lstm_dropout_value)self.linear_dropout = nn.Dropout(self.linear_dropout_value)self.att_weight = nn.Parameter(torch.randn(1, self.hidden_size, 1))self.dense = nn.Linear(in_features=self.hidden_size,out_features=self.class_num,bias=True)# initialize weightinit.xavier_normal_(self.dense.weight)init.constant_(self.dense.bias, 0.)def lstm_layer(self, x, mask):lengths = torch.sum(mask.gt(0), dim=-1)x = pack_padded_sequence(x, lengths, batch_first=True, enforce_sorted=False)h, (_, _) = self.lstm(x)h, _ = pad_packed_sequence(h, batch_first=True, padding_value=0.0, total_length=self.max_len)h = h.view(-1, self.max_len, 2, self.hidden_size)h = torch.sum(h, dim=2) # B*L*Hreturn hdef attention_layer(self, h, mask):att_weight = self.att_weight.expand(mask.shape[0], -1, -1) # B*H*1att_score = torch.bmm(self.tanh(h), att_weight) # B*L*H * B*H*1 -> B*L*1# mask, remove the effect of 'PAD'mask = mask.unsqueeze(dim=-1) # B*L*1att_score = att_score.masked_fill(mask.eq(0), float('-inf')) # B*L*1att_weight = F.softmax(att_score, dim=1) # B*L*1reps = torch.bmm(h.transpose(1, 2), att_weight).squeeze(dim=-1) # B*H*L * B*L*1 -> B*H*1 -> B*Hreps = self.tanh(reps) # B*Hreturn repsdef forward(self, data):token = data[:, 0, :].view(-1, self.max_len)mask = data[:, 1, :].view(-1, self.max_len)emb = self.word_embedding(token) # B*L*word_dimemb = self.emb_dropout(emb)h = self.lstm_layer(emb, mask) # B*L*Hh = self.lstm_dropout(h)reps = self.attention_layer(h, mask) # B*repsreps = self.linear_dropout(reps)logits = self.dense(reps)return logits

    5、train_or_test.py

    #!/usr/bin/env python # -*- encoding: utf-8 -*- # @Version : Python 3.6import os import torch import torch.nn as nn import torch.optim as optimfrom config import Config from utils import WordEmbeddingLoader, RelationLoader, SemEvalDataLoader from model import Att_BLSTM from evaluate import Evaldef print_result(predict_label, id2rel, start_idx=8001):with open('predicted_result.txt', 'w', encoding='utf-8') as fw:for i in range(0, predict_label.shape[0]):fw.write('{}\t{}\n'.format(start_idx+i, id2rel[int(predict_label[i])]))def train(model, criterion, loader, config):train_loader, dev_loader, _ = loaderoptimizer = optim.Adadelta(model.parameters(), lr=config.lr, weight_decay=config.L2_decay)print(model)print('traning model parameters:')for name, param in model.named_parameters():if param.requires_grad:print('%s : %s' % (name, str(param.data.shape)))print('--------------------------------------')print('start to train the model ...')eval_tool = Eval(config)min_f1 = -float('inf')for epoch in range(1, config.epoch+1):for step, (data, label) in enumerate(train_loader):model.train()data = data.to(config.device)label = label.to(config.device)optimizer.zero_grad()logits = model(data)loss = criterion(logits, label)loss.backward()nn.utils.clip_grad_value_(model.parameters(), clip_value=5)optimizer.step()_, train_loss, _ = eval_tool.evaluate(model, criterion, train_loader)f1, dev_loss, _ = eval_tool.evaluate(model, criterion, dev_loader)print('[%03d] train_loss: %.3f | dev_loss: %.3f | micro f1 on dev: %.4f'% (epoch, train_loss, dev_loss, f1), end=' ')if f1 > min_f1:min_f1 = f1torch.save(model.state_dict(), os.path.join(config.model_dir, 'model.pkl'))print('>>> save models!')else:print()def test(model, criterion, loader, config):print('--------------------------------------')print('start test ...')_, _, test_loader = loadermodel.load_state_dict(torch.load(os.path.join(config.model_dir, 'model.pkl')))eval_tool = Eval(config)f1, test_loss, predict_label = eval_tool.evaluate(model, criterion, test_loader)print('test_loss: %.3f | micro f1 on test: %.4f' % (test_loss, f1))return predict_labelif __name__ == '__main__':config = Config()print('--------------------------------------')print('some config:')config.print_config()print('--------------------------------------')print('start to load data ...')word2id, word_vec = WordEmbeddingLoader(config).load_embedding()rel2id, id2rel, class_num = RelationLoader(config).get_relation()loader = SemEvalDataLoader(rel2id, word2id, config)train_loader, dev_loader = None, Noneif config.mode == 1: # train modetrain_loader = loader.get_train()dev_loader = loader.get_dev()test_loader = loader.get_test()loader = [train_loader, dev_loader, test_loader]print('finish!')print('--------------------------------------')model = Att_BLSTM(word_vec=word_vec, class_num=class_num, config=config)model = model.to(config.device)criterion = nn.CrossEntropyLoss()if config.mode == 1: # train modetrain(model, criterion, loader, config)predict_label = test(model, criterion, loader, config)print_result(predict_label, id2rel)

    6、evaluate.py

    #!/usr/bin/env python # -*- encoding: utf-8 -*- # @Version : Python 3.6import numpy as np import torchdef semeval_scorer(predict_label, true_label, class_num=10):import mathassert true_label.shape[0] == predict_label.shape[0]confusion_matrix = np.zeros(shape=[class_num, class_num], dtype=np.float32)xDIRx = np.zeros(shape=[class_num], dtype=np.float32)for i in range(true_label.shape[0]):true_idx = math.ceil(true_label[i]/2)predict_idx = math.ceil(predict_label[i]/2)if true_label[i] == predict_label[i]:confusion_matrix[predict_idx][true_idx] += 1else:if true_idx == predict_idx:xDIRx[predict_idx] += 1else:confusion_matrix[predict_idx][true_idx] += 1col_sum = np.sum(confusion_matrix, axis=0).reshape(-1)row_sum = np.sum(confusion_matrix, axis=1).reshape(-1)f1 = np.zeros(shape=[class_num], dtype=np.float32)for i in range(0, class_num): # ignore the 'Other'try:p = float(confusion_matrix[i][i]) / float(col_sum[i] + xDIRx[i])r = float(confusion_matrix[i][i]) / float(row_sum[i] + xDIRx[i])f1[i] = (2 * p * r / (p + r))except:passactual_class = 0total_f1 = 0.0for i in range(1, class_num):if f1[i] > 0.0: # classes that not in the predict label are not consideredactual_class += 1total_f1 += f1[i]try:macro_f1 = total_f1 / actual_classexcept:macro_f1 = 0.0return macro_f1class Eval(object):def __init__(self, config):self.device = config.devicedef evaluate(self, model, criterion, data_loader):predict_label = []true_label = []total_loss = 0.0with torch.no_grad():model.eval()for _, (data, label) in enumerate(data_loader):data = data.to(self.device)label = label.to(self.device)logits = model(data)loss = criterion(logits, label)total_loss += loss.item() * logits.shape[0]_, pred = torch.max(logits, dim=1) # replace softmax with max function, same impactspred = pred.cpu().detach().numpy().reshape((-1, 1))label = label.cpu().detach().numpy().reshape((-1, 1))predict_label.append(pred)true_label.append(label)predict_label = np.concatenate(predict_label, axis=0).reshape(-1).astype(np.int64)true_label = np.concatenate(true_label, axis=0).reshape(-1).astype(np.int64)eval_loss = total_loss / predict_label.shape[0]f1 = semeval_scorer(predict_label, true_label)return f1, eval_loss, predict_label

    7、util.py

    #!/usr/bin/env python # -*- encoding: utf-8 -*- # @Version : Python 3.6import os import json import torch import numpy as np from torch.utils.data import Dataset, DataLoaderclass WordEmbeddingLoader(object):"""A loader for pre-trained word embedding"""def __init__(self, config):self.path_word = config.embedding_path # path of pre-trained word embeddingself.word_dim = config.word_dim # dimension of word embeddingdef load_embedding(self):word2id = dict() # word to wordIDword_vec = list() # wordID to word embeddingword2id['PAD'] = len(word2id) # PAD characterword2id['UNK'] = len(word2id) # out of vocabularyword2id['<e1>'] = len(word2id)word2id['<e2>'] = len(word2id)word2id['</e1>'] = len(word2id)word2id['</e2>'] = len(word2id)with open(self.path_word, 'r', encoding='utf-8') as fr:for line in fr:line = line.strip().split()if len(line) != self.word_dim + 1:continueword2id[line[0]] = len(word2id)word_vec.append(np.asarray(line[1:], dtype=np.float32))word_vec = np.stack(word_vec)vec_mean, vec_std = word_vec.mean(), word_vec.std()special_emb = np.random.normal(vec_mean, vec_std, (6, self.word_dim))special_emb[0] = 0 # <pad> is initialize as zeroword_vec = np.concatenate((special_emb, word_vec), axis=0)word_vec = word_vec.astype(np.float32).reshape(-1, self.word_dim)word_vec = torch.from_numpy(word_vec)return word2id, word_vecclass RelationLoader(object):def __init__(self, config):self.data_dir = config.data_dirdef __load_relation(self):relation_file = os.path.join(self.data_dir, 'relation2id.txt')rel2id = {}id2rel = {}with open(relation_file, 'r', encoding='utf-8') as fr:for line in fr:relation, id_s = line.strip().split()id_d = int(id_s)rel2id[relation] = id_did2rel[id_d] = relationreturn rel2id, id2rel, len(rel2id)def get_relation(self):return self.__load_relation()class SemEvalDateset(Dataset):def __init__(self, filename, rel2id, word2id, config):self.filename = filenameself.rel2id = rel2idself.word2id = word2idself.max_len = config.max_lenself.data_dir = config.data_dirself.dataset, self.label = self.__load_data()def __symbolize_sentence(self, sentence):"""Args:sentence (list)"""mask = [1] * len(sentence)words = []length = min(self.max_len, len(sentence))mask = mask[:length]for i in range(length):words.append(self.word2id.get(sentence[i].lower(), self.word2id['UNK']))if length < self.max_len:for i in range(length, self.max_len):mask.append(0) # 'PAD' mask is zerowords.append(self.word2id['PAD'])unit = np.asarray([words, mask], dtype=np.int64)unit = np.reshape(unit, newshape=(1, 2, self.max_len))return unitdef __load_data(self):path_data_file = os.path.join(self.data_dir, self.filename)data = []labels = []with open(path_data_file, 'r', encoding='utf-8') as fr:for line in fr:line = json.loads(line.strip())label = line['relation']sentence = line['sentence']label_idx = self.rel2id[label]one_sentence = self.__symbolize_sentence(sentence)data.append(one_sentence)labels.append(label_idx)return data, labelsdef __getitem__(self, index):data = self.dataset[index]label = self.label[index]return data, labeldef __len__(self):return len(self.label)class SemEvalDataLoader(object):def __init__(self, rel2id, word2id, config):self.rel2id = rel2idself.word2id = word2idself.config = configdef __collate_fn(self, batch):data, label = zip(*batch) # unzip the batch datadata = list(data)label = list(label)data = torch.from_numpy(np.concatenate(data, axis=0))label = torch.from_numpy(np.asarray(label, dtype=np.int64))return data, labeldef __get_data(self, filename, shuffle=False):dataset = SemEvalDateset(filename, self.rel2id, self.word2id, self.config)loader = DataLoader(dataset=dataset,batch_size=self.config.batch_size,shuffle=shuffle,num_workers=2,collate_fn=self.__collate_fn)return loaderdef get_train(self):return self.__get_data('train.json', shuffle=True)def get_dev(self):return self.__get_data('test.json', shuffle=False)def get_test(self):return self.__get_data('test.json', shuffle=False)if __name__ == '__main__':from config import Configconfig = Config()word2id, word_vec = WordEmbeddingLoader(config).load_embedding()rel2id, id2rel, class_num = RelationLoader(config).get_relation()loader = SemEvalDataLoader(rel2id, word2id, config)test_loader = loader.get_train()for step, (data, label) in enumerate(test_loader):print(type(data), data.shape)print(type(label), label.shape)break

    總結(jié)

    以上是生活随笔為你收集整理的NLP-信息抽取-关系抽取-2016:Attention-BiLSTM实体关系分类器【基于双向LSTM及注意力机制的关系分类】【数据集:SemEval-2010 Task 8】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    欧美人人爱| 国产精品一区二区白浆 | 欧美韩日精品 | 久久日本视频 | av网站免费线看精品 | 成人免费中文字幕 | 99久久婷婷国产精品综合 | 国产精品一区二区在线播放 | 日韩成人av在线 | 成人免费看片98欧美 | 日韩丝袜视频 | 国产在线色 | 日韩电影中文 | 综合色伊人 | 丁香 婷婷 激情 | 久久艹免费 | 国产欧美在线一区 | 亚洲精品午夜国产va久久成人 | 成年人免费av | 亚洲精品在线电影 | 国产精品va在线播放 | 国产高清一 | www.狠狠插.com | 免费看成人av | 久久精品久久精品久久39 | 日韩av福利在线 | 亚洲欧洲av在线 | 日韩videos高潮hd | 97精品国产97久久久久久粉红 | 五月黄色 | 人人插人人看 | 夜夜天天干 | 精品久久久久久一区二区里番 | 日韩久久精品一区二区三区下载 | 久久婷婷开心 | 国产精品igao视频网入口 | 成年人在线看视频 | 久久99久久精品 | 高潮久久久 | 成人欧美日韩国产 | 91在线看黄 | 欧美成人h版电影 | 国产精品毛片网 | 欧美一区二区在线免费看 | 日韩国产精品毛片 | 免费成人在线视频网站 | 亚洲精品一区二区精华 | av+在线播放在线播放 | 久久久久久高清 | 免费一级特黄毛大片 | 91视视频在线直接观看在线看网页在线看 | 色综合 久久精品 | 亚洲精品系列 | 香蕉视频久久 | 91九色最新| 婷婷六月激情 | 午夜黄色大片 | 中文字幕一区二区三区四区久久 | 五月天亚洲综合小说网 | 亚洲经典在线 | 亚洲国产一区二区精品专区 | 99久久日韩精品免费热麻豆美女 | 久久精品婷婷 | 免费在线成人av电影 | 亚洲爱爱视频 | 欧美国产日韩一区二区 | 久久综合天天 | 97天天干| 福利一区视频 | 色婷婷狠狠五月综合天色拍 | 99久久99久久 | 久草久草久草久草 | 日韩高清一 | 天天天色综合 | 男女日麻批 | 99热精品在线观看 | 免费在线激情视频 | 国产精品成人a免费观看 | 午夜精品一二三区 | 97超碰资源总站 | 欧美精品久久久久久久久久久 | 久久免费视频国产 | 婷婷视频导航 | ww视频在线观看 | 久久久久久久久久久久久国产精品 | 精品嫩模福利一区二区蜜臀 | 97精品国自产拍在线观看 | 免费av片在线 | 懂色av一区二区在线播放 | 亚洲国产免费看 | 另类五月激情 | 久久久影院一区二区三区 | 成人97视频一区二区 | 亚洲国产精品电影 | 亚洲综合最新在线 | 国产精品久久婷婷六月丁香 | 成片免费 | 日日夜夜精品免费视频 | 日韩av电影免费观看 | 国产视频一区精品 | 天堂资源在线观看视频 | 91高清免费看 | 国产免费一区二区三区网站免费 | 亚洲国产精品女人久久久 | 免费高清在线视频一区· | 日韩在线电影一区二区 | 成人手机在线视频 | 97精品视频在线 | 成人av电影在线观看 | 日韩中文久久 | 中文字幕观看在线 | 91av在线精品| 狠狠操电影网 | 高清av免费一区中文字幕 | 天天操天天操 | 国产一级二级三级视频 | 色诱亚洲精品久久久久久 | 中文字幕免费高清av | 欧美色图狠狠干 | 亚洲精品乱码久久久久久蜜桃欧美 | 高清av影院 | 韩国av一区二区三区 | 日本xxxxav | 国产91精品一区二区 | 91av精品 | 日韩在线播放欧美字幕 | 女人18片毛片90分钟 | 粉嫩一区二区三区粉嫩91 | 正在播放国产精品 | 国产黄免费 | 国产丝袜一区二区三区 | 玖玖色在线观看 | 国产在线国偷精品产拍 | 精品福利片 | 成人黄色免费在线观看 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 久久撸在线视频 | 亚洲一二三区精品 | 久久这里只有精品久久 | 国产精品第72页 | 少妇bbw搡bbbb搡bbb| 国产a国产 | 激情在线五月天 | 久久夜夜夜 | 国产91精品一区二区麻豆网站 | 国产精品久久电影观看 | 99久久精品国产一区 | 欧美一级性 | 日韩在线观看视频中文字幕 | 亚洲h在线播放在线观看h | 97成人超碰 | 色婷婷激情五月 | 在线国产视频一区 | 一区二区视频在线看 | a视频在线观看 | 亚洲成人欧美 | 日本高清dvd| 国产a国产a国产a | 亚洲 中文字幕av | 又爽又黄又刺激的视频 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 婷婷性综合 | 色com网 | 精品伊人久久久 | 亚洲精品久久久久999中文字幕 | 香蕉久草在线 | 中文av不卡 | 麻豆国产在线视频 | av在线影视| 色.www| 国产高清综合 | 日本黄区免费视频观看 | 国产精品12 | 黄色软件大全网站 | 成人永久在线 | 欧美日韩在线观看视频 | 超碰人人在线 | 精品91 | 久久看视频| 天天操夜夜逼 | 免费高清在线观看成人 | 人交video另类hd | 中文字幕在线观看你懂的 | 日本最大色倩网站www | 最近中文字幕国语免费av | 精品国产一区二区三区噜噜噜 | 色综合婷婷久久 | 久久久久免费精品视频 | 免费在线观看av不卡 | 亚洲精品无 | 国产91全国探花系列在线播放 | 日韩系列 | 亚洲女欲精品久久久久久久18 | 欧美日韩裸体免费视频 | 99这里只有精品视频 | 91精品国自产在线观看欧美 | 亚洲婷婷丁香 | 亚洲精品资源在线 | 国产日韩中文字幕 | 女人魂免费观看 | 国产淫片免费看 | 伊人中文在线 | 日韩 在线观看 | 91高清完整版在线观看 | 91在线91| 天天干一干 | 免费福利视频导航 | av中文在线播放 | 国产 日韩 在线 亚洲 字幕 中文 | 国产精品久久久久久69 | 国产精品岛国久久久久久久久红粉 | 国产美女永久免费 | 日韩精品91偷拍在线观看 | 亚洲乱亚洲乱亚洲 | 国产手机在线观看视频 | www.色就是色 | 国产福利不卡视频 | 久久国产精品久久w女人spa | 人人爽人人做 | 亚洲国产中文字幕 | 精品一区二区免费在线观看 | 91视频久久久久久 | 欧美成a人片在线观看久 | www.久久精品视频 | 西西www4444大胆视频 | 久久久电影 | 国产美女搞久久 | 成人黄色大片在线观看 | 不卡视频在线看 | 国产精选在线观看 | 亚洲欧美综合精品久久成人 | 全久久久久久久久久久电影 | 婷婷精品国产欧美精品亚洲人人爽 | 久久五月激情 | 久久午夜精品影院一区 | 国产亚洲视频在线免费观看 | 91手机电影 | 日韩午夜在线观看 | 521色香蕉网站在线观看 | 国产精品久久久久久影院 | 久草香蕉在线 | 欧美巨大| 欧美一二三区播放 | 九九视频热| 久久免费高清视频 | 伊人黄色网 | 免费av视屏| 亚洲码国产日韩欧美高潮在线播放 | 99热播精品 | 国产精品九九久久久久久久 | 欧美另类v | 欧美日韩视频在线一区 | 久久久久亚洲a | 国产成人免费精品 | 免费国产一区二区视频 | 欧美日产一区 | 色婷婷免费视频 | 国产麻豆电影 | 在线观看91精品国产网站 | 久久久久免费看 | 色成人亚洲 | 深爱五月网 | 天天综合日日夜夜 | 中文字幕国语官网在线视频 | 狠狠干.com | va视频在线| 免费视频网 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 久久国产欧美日韩 | 999毛片| 九九日九九操 | 午夜视频在线观看网站 | 国产 日韩 在线 亚洲 字幕 中文 | 亚洲一区二区三区四区精品 | 欧美日韩精品免费观看 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 国产va在线 | 久久国产成人午夜av影院宅 | 免费看片网站91 | 色婷婷av国产精品 | 超碰在线观看av | 少妇bbbb| 最近中文字幕高清字幕免费mv | 欧美日韩精品在线视频 | 欧美日韩视频精品 | 91精品国产91热久久久做人人 | 日本精品中文字幕在线观看 | 国产视频一区在线播放 | 91av99| 欧美日韩高清在线 | 伊人激情网 | 国产精品去看片 | 久久九九九九 | 99热九九这里只有精品10 | 精品欧美在线视频 | 在线精品视频免费观看 | 91精品免费在线观看 | 久久99最新地址 | 91香蕉国产在线观看软件 | www狠狠| 免费看黄电影 | 91免费高清视频 | 99久久久国产精品美女 | 91九色视频国产 | 久久精品99国产国产精 | 国产日本亚洲高清 | 91成人免费电影 | 精品在线视频一区二区三区 | 国产激情久久久 | 免费在线观看一区二区三区 | 97精品国产97久久久久久免费 | 久久ww| 91av视频观看 | 国产一区精品在线 | 免费看高清毛片 | 久久国产精品第一页 | 亚洲精品国精品久久99热 | 久久精品99视频 | 免费在线观看av网址 | 天天草天天干天天射 | www在线观看视频 | 狠狠地日 | 天天操天天干天天综合网 | 精品一区二区在线免费观看 | 日韩视频三区 | 婷婷久久婷婷 | 中文字幕国产 | 高清精品久久 | 国产成人精品久久久久 | 韩日精品在线 | 国产精品国产亚洲精品看不卡 | 国产婷婷在线观看 | 国产精品久久久久久久久久白浆 | 国产精品一级视频 | 狠狠久久伊人 | 亚洲经典视频 | 不卡的一区二区三区 | 久草网免费 | 久久草 | www五月天婷婷 | 99久久精品免费看国产一区二区三区 | 欧美日韩一区二区在线 | 999精品在线 | 国产一区二区三区免费在线 | 激情综合色播五月 | 婷婷亚洲激情 | 婷婷激情网站 | 国产精品久久久久久久久久久不卡 | 亚洲男男gⅴgay双龙 | 日韩精品大片 | 99色免费视频 | 午夜色站| 91自拍91 | 国产精品久久久久久99 | 中文字幕久久亚洲 | 亚洲精品免费视频 | 看毛片的网址 | 黄色毛片一级片 | 不卡av免费在线观看 | 中文字幕大全 | 久久96国产精品久久99软件 | 在线之家官网 | 69av免费视频| 日韩毛片在线免费观看 | 狠狠干.com | 国产69久久久欧美一级 | 五月综合激情婷婷 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 97精品久久人人爽人人爽 | 欧美一二三区播放 | 在线观看中文字幕一区 | 99久久精品午夜一区二区小说 | 亚洲精品国久久99热 | 夜夜高潮夜夜爽国产伦精品 | 色婷婷在线视频 | 五月开心婷婷网 | av免费在线观 | 91精品免费看 | 久久九九久久九九 | 性色av免费观看 | 中文字幕九九 | av线上免费看 | 日本在线h| 成人黄色资源 | 国产伦精品一区二区三区四区视频 | 91视频免费播放 | www.com黄| 亚洲视频资源在线 | 国产精品一区二区三区久久 | 国产一区二区精 | 婷婷资源站| 91丨九色丨蝌蚪丨老版 | 99精品在线免费视频 | 国产精品尤物视频 | 玖玖在线资源 | 在线观看中文字幕2021 | 99在线视频免费观看 | 亚洲aⅴ免费在线观看 | 久久99精品国产91久久来源 | 久久久噜噜噜久久久 | 国产亚洲精品福利 | 国产拍在线 | 韩日成人av | 色婷婷精品大在线视频 | 日韩一区二区三区免费视频 | 日韩www在线 | 亚洲国产影院av久久久久 | 成人黄色电影在线观看 | 人人狠狠综合久久亚洲 | 9在线观看免费高清完整版 玖玖爱免费视频 | 国产精品激情偷乱一区二区∴ | av资源在线看 | 97超在线 | 国产午夜免费视频 | 日韩av电影网站在线观看 | 久久超级碰视频 | 久久久久 免费视频 | 亚洲蜜桃av | 国产伦精品一区二区三区在线 | 色综合色综合色综合 | 天天鲁天天干天天射 | 久草视频2 | 亚洲精品在线视频观看 | 免费视频久久 | 日韩精品视频在线观看网址 | 免费看日韩| 99久免费精品视频在线观看 | 日韩精品电影在线播放 | 亚洲天天摸日日摸天天欢 | 在线免费观看视频一区二区三区 | 免费看91的网站 | 日韩免费观看一区二区 | 欧洲在线免费视频 | 亚洲毛片在线观看. | 成人av片在线观看 | 欧美日韩免费在线观看视频 | 日韩成人在线免费观看 | 国产精品视屏 | 91 在线视频 | 韩日在线一区 | 国产精品正在播放 | 国产理论一区二区三区 | 日韩中文字幕第一页 | 国产精品白浆视频 | 这里只有精品视频在线观看 | 激情五月在线视频 | 午夜精品电影一区二区在线 | 国产午夜精品理论片在线 | 91免费观看国产 | 欧美日韩后 | 国产精品麻豆欧美日韩ww | 久精品在线观看 | a视频免费在线观看 | 一本一本久久a久久精品综合 | 欧美一级爽 | 免费观看性生活大片 | 一本一本久久a久久精品综合小说 | 精品久久久免费视频 | 久久久91精品国产一区二区精品 | 亚洲欧美日韩精品一区二区 | 日韩.com | 日韩高清在线一区二区三区 | av+在线播放在线播放 | 五月天亚洲婷婷 | 国产精品毛片一区二区三区 | 一区二区三区动漫 | 精品色综合 | 国产一区二区中文字幕 | 欧美一区二区精美视频 | 国产精品入口麻豆 | 在线视频你懂 | 国产午夜精品一区二区三区在线观看 | 国产精品久久久区三区天天噜 | 成年人免费看片网站 | 免费在线成人av电影 | 国产日韩精品一区二区三区 | 亚洲精品在线一区二区 | 日韩电影一区二区三区 | 国产精品亚洲片在线播放 | 精品国产精品久久 | 色香网| 激情五月开心 | 日韩av区| 国产福利精品在线观看 | 黄色看片| bbbbb女女女女女bbbbb国产 | 国产在线播放观看 | 精品国产一区二区三区男人吃奶 | 免费久久网站 | 亚洲精品在线一区二区三区 | 亚洲人成精品久久久久 | 免费在线观看午夜视频 | 精品一区二区在线看 | 美女免费av | 亚洲九九爱| 五月精品 | 国产又粗又猛又黄视频 | 91九色网站 | 精品你懂的 | 国产一区二区在线免费观看 | www.久久色 | 久久精品五月 | 亚洲午夜av久久乱码 | 亚洲精品小区久久久久久 | 欧美视频二区 | h网站免费在线观看 | 色婷婷狠 | 久久综合99 | 午夜在线资源 | 久久久久久蜜av免费网站 | 99精品视频网站 | 久久久性| 欧美久久久久久久久久久 | 五月天丁香视频 | 狠狠色噜噜狠狠狠合久 | 亚洲精品自在在线观看 | 国产人成精品一区二区三 | 四虎永久国产精品 | 97人人添人澡人人爽超碰动图 | 人人讲| 国产青春久久久国产毛片 | 国产精品一区二区三区在线 | 亚洲精品国产精品乱码在线观看 | 伊人电影天堂 | 国产一区观看 | 国产伦理久久精品久久久久_ | 嫩嫩影院理论片 | 久久国产精品精品国产色婷婷 | 精品视频网站 | 国产性xxxx | 91丨九色丨丝袜 | 9在线观看免费高清完整版 玖玖爱免费视频 | 国产福利91精品一区 | 亚洲伊人色| 亚洲一区日韩在线 | 日本久久精 | 天堂在线v | 国产精品永久免费观看 | 国产福利中文字幕 | 天堂av观看| 国产黄色成人av | 丁香久久综合 | 欧美日韩一区二区三区在线免费观看 | 久久久伦理 | 日本久久高清视频 | 81精品国产乱码久久久久久 | 成人黄色电影视频 | 久久亚洲影视 | 欧美精品免费视频 | 欧美一区二视频在线免费观看 | 欧美精品网站 | japanesexxxhd奶水| 中文字幕网站视频在线 | www.com.日本一级 | 激情视频二区 | 久久公开免费视频 | 国产精品白浆 | 一区 在线 影院 | 亚洲片在线 | 天无日天天操天天干 | 国产美女久久久 | 欧美精品三级在线观看 | 免费看一级片 | 欧美精品久久久久久久 | 久久人人爽人人爽人人片av软件 | 婷婷丁香导航 | 天天干人人插 | 日本mv大片欧洲mv大片 | 日韩免费专区 | 国产午夜剧场 | 国产视频九色蝌蚪 | 三级免费黄色 | 久爱综合 | 欧美日韩国产精品爽爽 | 日韩最新在线 | 中文字幕一区二区三 | 国产精品一区二区在线看 | 一区二区三区四区五区六区 | 国产91精品看黄网站在线观看动漫 | 一级精品视频在线观看宜春院 | 国产高清av免费在线观看 | 国产在线1区 | 91精品一区二区三区久久久久久 | 亚洲精品午夜国产va久久成人 | 看片网站黄 | 久久久精品一区二区 | 欧洲高潮三级做爰 | 日韩精品一区二区在线观看视频 | 91精品在线免费观看视频 | 精品久久久久久综合 | 日本不卡久久 | 亚洲精品久久久久58 | 国内精品久久久久久久久久清纯 | 精品女同一区二区三区在线观看 | 亚洲国产精品500在线观看 | 久久久99国产精品免费 | 狠狠激情中文字幕 | 9999亚洲 | 精品国产网址 | 久久特级毛片 | 国产精品一区二区三区四区在线观看 | 国产精品99久久久久久大便 | www色婷婷com | 色姑娘综合 | 91精品视频一区二区三区 | www.伊人网| 欧美精品乱码久久久久久 | 中文字幕超清在线免费 | 97超碰在线久草超碰在线观看 | 九九爱免费视频 | 懂色av一区二区在线播放 | 亚洲一区二区天堂 | 三级黄色在线 | 久久都是精品 | 亚洲日本一区二区在线 | 超碰人人射| 久久99久久99精品免观看软件 | 久久久亚洲麻豆日韩精品一区三区 | 成人一级视频在线观看 | 伊人久久五月天 | 4p变态网欧美系列 | 久久综合九色综合欧美狠狠 | 久久久久亚洲精品成人网小说 | 日本99精品 | 久久超级碰视频 | 亚洲乱码久久久 | 免费视频成人 | 手机在线看片日韩 | 国产黄色免费看 | 国产一区二区不卡视频 | 超碰97在线人人 | 99久久精品久久久久久清纯 | 精品国产电影一区二区 | 国产日韩精品一区二区三区在线 | 欧美激情第28页 | 波多野结衣视频一区 | 日本三级中文字幕在线观看 | av网站在线免费观看 | 日韩免费电影网 | sesese图片 | 久久久久国产成人精品亚洲午夜 | 97精品超碰一区二区三区 | 久久久国产精品一区二区三区 | 日本最新高清不卡中文字幕 | 性色av免费在线观看 | 成在人线av | 色婷婷福利视频 | 国产日韩精品一区二区在线观看播放 | 亚洲精品免费观看 | 婷婷精品在线 | 国产精品视频免费在线观看 | 成人资源网 | 久久精品国产亚洲aⅴ | 久久人人爽人人人人片 | 丝袜+亚洲+另类+欧美+变态 | 日批视频在线 | 国产淫片免费看 | 成人福利在线 | 久久精品影片 | 日韩a级免费视频 | 亚洲激情影院 | 国产麻豆精品传媒av国产下载 | 亚洲区另类春色综合小说 | 欧美污网站| 一本到视频在线观看 | 日韩精品欧美视频 | 国产免费a | av在线之家电影网站 | 国产午夜不卡 | 日日夜夜免费精品视频 | 在线观看中文字幕第一页 | 黄色毛片在线观看 | 欧美综合久久 | 欧美黑人性爽 | 国产精品尤物视频 | 91精品日韩 | 久久九九久久 | 99产精品成人啪免费网站 | 国内精品久久久久 | 狠狠狠狠狠操 | 精品一二三四五区 | 成年人国产在线观看 | 日韩av电影手机在线观看 | 人人爽人人爽人人 | 欧美日韩不卡在线观看 | 黄色av电影免费观看 | 色噜噜在线观看视频 | 最新国产中文字幕 | 国产成人精品免费在线观看 | 成年人视频在线免费 | 97成人精品 | 青草视频网 | 在线国产专区 | 香蕉精品视频在线观看 | 精品久久久久_ | 999国内精品永久免费视频 | 精品视频在线看 | 欧美国产大片 | 欧洲精品一区二区 | 国产精彩视频 | 日韩三区在线观看 | 成+人+色综合 | 99这里只有精品99 | 国产在线播放观看 | 欧美日韩亚洲在线观看 | 亚洲国产中文字幕在线视频综合 | 丁香六月激情 | 欧洲视频一区 | 精品视频在线观看 | 激情综合五月网 | av韩国在线 | 国产网红在线 | 天天操天天射天天操 | 激情小说网站亚洲综合网 | 成年人视频在线 | 免费黄色在线网址 | 六月丁香在线视频 | 精品人人人 | 亚洲欧美视频 | 国产视频精品免费播放 | 999热线在线观看 | 亚洲狠狠干 | 国产精品毛片久久久久久久 | 97精品国产91久久久久久 | 中文字幕av最新更新 | 国内精品亚洲 | 久草a在线 | 国产另类av | 毛片区| 久久人人爽人人爽人人片av免费 | av在线电影播放 | 国产精品久久久久一区二区三区 | 午夜久久久久久久久久影院 | 久草在线在线精品观看 | 激情视频区| 欧美亚洲一区二区在线 | 国产原厂视频在线观看 | 五月婷婷综合久久 | 天天操天天射天天爱 | 国产区免费 | avove黑丝 | 亚洲资源在线网 | 特级xxxxx欧美 | av片中文| 欧美日韩有码 | 97精品久久人人爽人人爽 | 麻豆一区二区三区视频 | 亚洲欧洲精品久久 | 在线免费观看涩涩 | 成人免费精品 | av青草| 成人免费看电影 | 日韩精品视 | 五月婷婷色 | 91欧美日韩国产 | 91久久人澡人人添人人爽欧美 | 成人av网页 | 久久久免费观看 | 色久五月 | 国产中文字幕网 | avhd高清在线谜片 | 91在线超碰| 久久久久国产一区二区三区 | 国产aaa免费视频 | 99视频免费看 | 久久精品91视频 | 国产一级二级在线 | 国产一级h | 91久色蝌蚪| 在线观看久久 | 91九色蝌蚪视频在线 | 久久综合给合久久狠狠色 | 亚洲一区免费在线 | 九草在线观看 | 欧美精品做受xxx性少妇 | 一区二区三区三区在线 | 黄色一级性片 | 日韩精品欧美精品 | 亚洲最新在线视频 | 中文字幕av网站 | 久久久.com | 日韩欧美视频免费在线观看 | 天天鲁天天干天天射 | 中文字幕在线资源 | 亚洲欧美日韩一二三区 | 黄色网址av| 精品成人网| 久久在线观看视频 | 精品夜夜嗨av一区二区三区 | 精品国产一区二区三区蜜臀 | 久久久久久久久久久精 | 99精品在线看| 日韩美一区二区三区 | 日日日日日 | 国产精品精品国产婷婷这里av | 欧美一二三专区 | 久久久国产精品亚洲一区 | 午夜av不卡 | 婷婷色九月 | a级国产乱理论片在线观看 伊人宗合网 | 日b视频国产 | 在线中文视频 | 日韩一区二区三免费高清在线观看 | 99色99| 韩国精品一区二区三区六区色诱 | 婷婷视频| 日韩精品综合在线 | 99视频久 | 在线播放亚洲 | 欧美日韩国语 | 欧美日韩精品在线观看视频 | 中文理论片 | 国产精品99蜜臀久久不卡二区 | 波多野结衣在线播放视频 | 一级片免费在线 | 中文字幕国语官网在线视频 | 久草资源在线观看 | 国产色小视频 | 久久97精品 | 国产成人黄色网址 | 色网站在线 | 五月婷婷黄色网 | 日日夜夜噜| 亚洲色图美腿丝袜 | 在线观看日本高清mv视频 | 国产精品青草综合久久久久99 | 二区三区在线视频 | 蜜臀精品久久久久久蜜臀 | 黄污网站在线 | 伊人五月天.com | 毛片.com| 国产婷婷在线观看 | 天天操夜操 | 91九色成人 | 国产视频精品免费 | 91亚洲精品久久久蜜桃网站 | 国产精品一区久久久久 | 久久久亚洲麻豆日韩精品一区三区 | 色丁香婷婷| 亚洲永久精品国产 | 中文字幕国语官网在线视频 | 久久国内精品视频 | 五月天婷亚洲天综合网鲁鲁鲁 | 精品国产伦一区二区三区观看说明 | 免费试看一区 | 日本久久精 | 东方av免费在线观看 | 日日干夜夜爱 | 99国产一区| 黄色毛片视频免费观看中文 | 国产精品午夜免费福利视频 | www夜夜| 99久久久久国产精品免费 | 黄网站污| 色网站黄| 狠狠操狠狠干天天操 | 天天插视频 | 一区二区三区国产精品 | 99超碰在线观看 | 四虎国产精品永久在线国在线 | a国产精品 | 欧美伦理电影一区二区 | 日韩精品一区二区三区电影 | 精品国产伦一区二区三区观看体验 | 波多野结衣视频一区 | 免费观看的av网站 | 久久综合婷婷国产二区高清 | 日韩欧美网址 | 黄色成人av | 精品久久久免费 | 久久精品久久国产 | 99热精品视| 国产精品区二区三区日本 | 久久久久久久久久久综合 | 久久久久免费看 | 美女久久 | 综合网天天 | 欧美日韩国内在线 | 国产一区二区在线观看视频 | 天天操导航| 在线观看自拍 | 国产精品黑丝在线观看 | 中文字幕在线观 | 国产日韩欧美在线影视 | 久久成人国产精品免费软件 | 亚洲欧美日本一区二区三区 | 色偷偷88欧美精品久久久 | 日韩综合一区二区三区 | 亚洲视频 在线观看 | 国产破处视频在线播放 | 欧美日韩免费一区二区三区 | 亚洲精品国产精品国自产在线 | 在线观看激情av | 国产一级电影 | 国产系列精品av | 国色天香在线 | 国产高清绿奴videos | 国产成人亚洲在线观看 | 免费看的国产视频网站 | 久久久国产精品人人片99精片欧美一 | 久久久视屏 | 午夜国产成人 | 久久激情视频 久久 | 亚洲精品国产欧美在线观看 | 中文字幕av免费观看 | 亚洲一区日韩精品 | 91人人爱| 午夜黄色大片 | 国产精品一区二区av影院萌芽 | 精品久久视频 | 久久男人中文字幕资源站 | 美女网站在线 | 久久久麻豆精品一区二区 | 国产成人在线网站 | 精品福利在线 | 亚洲欧美激情精品一区二区 | 午夜精品久久 | 亚洲最大av网 | 亚洲精品国产成人 | 中文字幕亚洲情99在线 | 特级毛片网站 | av大全在线播放 | 成人精品电影 | 天天干天天干天天 | 香蕉精品在线观看 | 免费情趣视频 | 久久久久女人精品毛片九一 | 欧美日韩中文国产一区发布 | 亚洲理论在线观看 | 国产字幕在线看 | 男女拍拍免费视频 | 98久久| 在线免费成人 | 91精品一区在线观看 | 国产精品中文字幕在线播放 | 亚州国产精品久久久 | 狠狠狠色丁香婷婷综合久久88 | av黄色在线播放 | 欧美乱淫视频 | 欧美精品一二 | 国产特级毛片aaaaaa毛片 | 久久国产精品一国产精品 | 在线观看成人小视频 | 日韩簧片在线观看 | 日本精品视频一区 | 999成人网| 看片黄网站 | 午夜电影一区 | 国产一区二区精品91 | 国产成人av一区二区三区在线观看 | 国产中文字幕亚洲 | 最近最新mv字幕免费观看 | 色五月色开心色婷婷色丁香 | 成人精品福利 | 在线成人免费电影 | 国内丰满少妇猛烈精品播 | 在线a人v观看视频 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 精品国产视频在线观看 | 99日精品| 日韩免费在线观看视频 | 操操操天天操 | 亚洲综合精品在线 | 国产精品99精品久久免费 | 一区二区国产精品 | 日韩免费 | 天堂av在线 | 欧美日韩久久久 | 中文字幕日韩一区二区三区不卡 | 欧美精品日韩 | 韩国一区在线 | 人人爽人人香蕉 | 天天干天天干天天 | 国产精品videossex国产高清 | 97超碰资源网 | 亚州精品在线视频 | 日韩电影在线视频 | 国产精品免费观看在线 | 国产精品1区2区在线观看 | 午夜精品一区二区三区免费 | 亚洲伦理电影在线 | 欧美在线视频第一页 | 欧美va天堂va视频va在线 | 日韩在线播放视频 | 欧洲精品久久久久毛片完整版 | www四虎影院 | 91经典在线| 国产资源在线免费观看 | 国产精品久久久久av免费 | 久久综合色一综合色88 | 天天色天天操天天爽 | 国际av在线 | 久久成人黄色 | 日韩在线观看不卡 | 免费在线观看不卡av | 日本黄色黄网站 | 国产一区成人在线 | 91网在线看 |