精华内容
下载资源
问答
  • 关于 中国高新技术产品出口目录技术领域代码的说明 为便于目录使用者了解产品所在的技术领域本目录按照科技部确定的技术领域范围将产品划分为九类并用代码标识 技术领域代码设立如下 01 电子信息 02 软件 03 航空...
  •   本项目将会介绍在2019语言智能技术竞赛的三元组抽取比赛方面的一次尝试。由于该比赛早已结束,当时也没有参加这个比赛,因此没有测评成绩,我们也只能拿到训练集和验证集。但是,这并不耽误我们在这方面做实验...

    信息抽取实战:三元组抽取

    一、限定领域的三元组抽取

      本项目将会介绍在2019语言与智能技术竞赛三元组抽取比赛方面的一次尝试。由于该比赛早已结束,当时也没有参加这个比赛,因此没有测评成绩,我们也只能拿到训练集和验证集。但是,这并不耽误我们在这方面做实验。

    比赛介绍

      该比赛的网址为:http://lic2019.ccf.org.cn/kg,给定schema约束集合及句子sent,其中schema定义了关系P以及其对应的主体S和客体O的类别,例如(S_TYPE:人物,P:妻子,O_TYPE:人物)、(S_TYPE:公司,P:创始人,O_TYPE:人物)等。比如下面的例子:

    {
      "text": "九玄珠是在纵横中文网连载的一部小说,作者是龙马",
      "spo_list": [
        ["九玄珠", "连载网站", "纵横中文网"],
        ["九玄珠", "作者", "龙马"]
      ]
    }
    

      该比赛一共提供了20多万标注质量很高的三元组,其中17万训练集,2万验证集和2万测试集,实体关系(schema)50个
      在具体介绍的思路和实战前,先介绍下本次任务的处理思路
    在这里插入图片描述

      首先是对拿到的数据进行数据分析,包括统计每个句子的长度及三元组数量,每种关系的数量分布情况。接着,对数据单独走序列标注模型和关系分析模型。最后在提取三元组的时候,用Pipeline模型,先用序列标注模型预测句子中的实体,再对实体(加上句子)走关系分类模型,预测实体的关系,最后形成有效的三元组。
      接下来将逐一介绍,项目结构图如下:
    在这里插入图片描述

    数据分析

      我们对训练集做数据分析,训练集数据文件为train_data.json
      数据分析会统计训练集中每个句子的长度及三元组数量,还有关系的分布图,代码如下:

    # -*- coding: utf-8 -*-
    import json
    from pprint import pprint
    import pandas as pd
    from collections import defaultdict
    import matplotlib.pyplot as plt
    
    plt.figure(figsize=(18, 8), dpi=100)   # 输出图片大小为1800*800
    # # Mac系统设置中文字体支持
    # plt.rcParams["font.family"] = 'Arial Unicode MS'
    # 解决中文显示问题
    plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
    plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
    
    # 加载数据集
    def load_data(filename):
        D = []
        with open(filename, 'r', encoding='utf-8') as f:
            content = f.readlines()
    
        content = [_.replace(' ', '').replace('\u3000', '').replace('\xa0', '').replace('\u2003', '') for _ in content]
    
        for l in content:
            l = json.loads(l)
            D.append({
                'text': l['text'],
                'spo_list': [
                    (spo['subject'], spo['predicate'], spo['object'])
                    for spo in l['spo_list']
                ]
            })
        return D
    
    filename = '../data/train_data.json'
    
    D = load_data(filename=filename)
    pprint(D)
    
    # 创建text, text_length, spo_num的DataFrame
    text_list = [_["text"] for _ in D]
    spo_num = [len(_["spo_list"])for _ in D]
    
    df = pd.DataFrame({"text": text_list, "spo_num": spo_num} )
    df["text_length"] = df["text"].apply(lambda x: len(x))
    print(df.head())
    print(df.describe())
    
    # 绘制spo_num的条形统计图
    pprint(df['spo_num'].value_counts())
    label_list = list(df['spo_num'].value_counts().index)
    num_list = df['spo_num'].value_counts().tolist()
    
    # 利用Matplotlib模块绘制条形图
    x = range(len(num_list))
    rects = plt.bar(x=x, height=num_list, width=0.6, color='blue', label="频数")
    plt.ylim(0, 80000) # y轴范围
    plt.ylabel("数量")
    plt.xticks([index + 0.1 for index in x], label_list)
    plt.xlabel("三元组数量")
    plt.title("三元组频数统计图")
    
    # 条形图的文字说明
    for rect in rects:
        height = rect.get_height()
        plt.text(rect.get_x() + rect.get_width() / 2, height+1, str(height), ha="center", va="bottom")
    
    plt.savefig('./spo_num_bar_chart.png')
    plt.show()
    
    plt.close()
    
    # 关系统计图
    plt.figure(figsize=(18, 8), dpi=100)   # 输出图片大小为1800*800
    # # Mac系统设置中文字体支持
    # plt.rcParams["font.family"] = 'Arial Unicode MS'
    # 解决中文显示问题
    plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
    plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
    
    # 关系统计图
    relation_dict = defaultdict(int)
    
    for spo_dict in D:
        # print(spo_dict["spo_list"])
        for spo in spo_dict["spo_list"]:
            relation_dict[spo[1]] += 1
    
    label_list = list(relation_dict.keys())
    num_list = list(relation_dict.values())
    
    # 利用Matplotlib模块绘制条形图
    x = range(len(num_list))
    rects = plt.bar(x=x, height=num_list, width=0.6, color='blue', label="频数")
    # plt.ylim(0, 80000) # y轴范围
    plt.ylabel("数量")
    plt.xticks([index + 0.1 for index in x], label_list)
    plt.xticks(rotation=45) # x轴的标签旋转45度
    plt.xlabel("三元组关系")
    plt.title("三元组关系频数统计图")
    
    # 条形图的文字说明
    for rect in rects:
        height = rect.get_height()
        plt.text(rect.get_x() + rect.get_width() / 2, height+1, str(height), ha="center", va="bottom")
    
    plt.savefig('./relation_bar_chart.png')
    plt.show()
    

      输出结果如下:
    在这里插入图片描述
    在这里插入图片描述

      句子的平均长度为54,最大长度为300;每句话中的三元组数量的平均值为2.1,最大值为25
      每句话中的三元组数量的分布图如下:
    在这里插入图片描述

      关系数量的分布图如下:
    在这里插入图片描述

    序列标注模型

      我们将句子中的主体和客体作为实体,分别标注为SUBJ和OBJ,标注体系采用BIO。一个简单的标注例子如下:

    如 O
    何 O
    演 O
    好 O
    自 O
    己 O
    的 O
    角 O
    色 O
    , O
    请 O
    读 O
    《 O
    演 O
    员 O
    自 O
    我 O
    修 O
    养 O
    》 O
    《 O
    喜 B-SUBJ
    剧 I-SUBJ
    之 I-SUBJ
    王 I-SUBJ
    》 O
    周 B-OBJ
    星 I-OBJ
    驰 I-OBJ
    崛 O
    起 O
    于 O
    穷 O
    困 O
    潦 O
    倒 O
    之 O
    中 O
    的 O
    独 O
    门 O
    秘 O
    笈 O
    

      序列标注的模型采用ALBERT+Bi-LSTM+CRF结构图如下:
    在这里插入图片描述

      模型方面的代码不再具体给出,有兴趣的同学可以参考文章信息抽取实战:命名实体识别NER【ALBERT+Bi-LSTM模型 vs. ALBERT+Bi-LSTM+CRF模型】(附代码),也可以参考文章最后给出的Github项目网址。
      模型设置文本最大长度为128,利用ALBERT做特征提取,在自己的电脑上用CPU训练5个epoch,结果如下:

    
    Train on 173109 samples, validate on 21639 samples
    Epoch 1/10
    173109/173109 [==============================] - 422s 2ms/step - loss: 0.4460 - crf_viterbi_accuracy: 0.8710 - val_loss: 0.1613 - val_crf_viterbi_accuracy: 0.9235
    Epoch 2/10
    173109/173109 [==============================] - 417s 2ms/step - loss: 0.1170 - crf_viterbi_accuracy: 0.9496 - val_loss: 0.0885 - val_crf_viterbi_accuracy: 0.9592
    Epoch 3/10
    173109/173109 [==============================] - 417s 2ms/step - loss: 0.0758 - crf_viterbi_accuracy: 0.9602 - val_loss: 0.0653 - val_crf_viterbi_accuracy: 0.9638
    Epoch 4/10
    173109/173109 [==============================] - 415s 2ms/step - loss: 0.0586 - crf_viterbi_accuracy: 0.9645 - val_loss: 0.0544 - val_crf_viterbi_accuracy: 0.9651
    Epoch 5/10
    173109/173109 [==============================] - 422s 2ms/step - loss: 0.0488 - crf_viterbi_accuracy: 0.9663 - val_loss: 0.0464 - val_crf_viterbi_accuracy: 0.9654
    Epoch 6/10
    173109/173109 [==============================] - 423s 2ms/step - loss: 0.0399 - crf_viterbi_accuracy: 0.9677 - val_loss: 0.0375 - val_crf_viterbi_accuracy: 0.9660
    Epoch 7/10
    173109/173109 [==============================] - 415s 2ms/step - loss: 0.0293 - crf_viterbi_accuracy: 0.9687 - val_loss: 0.0265 - val_crf_viterbi_accuracy: 0.9664
    Epoch 8/10
    173109/173109 [==============================] - 414s 2ms/step - loss: 0.0174 - crf_viterbi_accuracy: 0.9695 - val_loss: 0.0149 - val_crf_viterbi_accuracy: 0.9671
    Epoch 9/10
    173109/173109 [==============================] - 422s 2ms/step - loss: 0.0049 - crf_viterbi_accuracy: 0.9703 - val_loss: 0.0036 - val_crf_viterbi_accuracy: 0.9670
    Epoch 10/10
    173109/173109 [==============================] - 429s 2ms/step - loss: -0.0072 - crf_viterbi_accuracy: 0.9709 - val_loss: -0.0078 - val_crf_viterbi_accuracy: 0.9674
               precision    recall  f1-score   support
    
          OBJ     0.9593    0.9026    0.9301     44598
         SUBJ     0.9670    0.9238    0.9449     25521
    
    micro avg     0.9621    0.9104    0.9355     70119
    macro avg     0.9621    0.9104    0.9355     70119
    

      利用seqeval模块做评估,在验证集上的F1值约为93.55%
    在这里插入图片描述

    关系分类模型

      需要对关系做一下说明,因为会对句子(sent)中的主体(S)和客体(O)组合起来,加上句子,形成训练数据。举个例子,在句子历史评价李氏朝鲜的创立并非太祖大王李成桂一人之功﹐其五子李芳远功不可没,三元组为[{“predicate”: “父亲”, “object_type”: “人物”, “subject_type”: “人物”, “object”: “李成桂”, “subject”: “李芳远”}, {“predicate”: “国籍”, “object_type”: “国家”, “subject_type”: “人物”, “object”: “朝鲜”, “subject”: “李成桂”}]},在这句话中主体有李成桂,李芳远,客体有李成桂和朝鲜,关系有父亲(关系类型:2)和国籍(关系类型:22)。按照的思路,这句话应组成4个关系分类样本,如下:

    2 李芳远$李成桂$历史评价李氏朝鲜的创立并非太祖大王###一人之功﹐其五子###功不可没
    0 李芳远$朝鲜$历史评价李氏##的创立并非太祖大王李成桂一人之功﹐其五子###功不可没
    0 李成桂$李成桂$历史评价李氏朝鲜的创立并非太祖大王###一人之功﹐其五子李芳远功不可没
    22 李成桂$朝鲜$历史评价李氏##的创立并非太祖大王###一人之功﹐其五子李芳远功不可没
    

      因此,就会出现关系0(表示“未知”),这样我们在提取三元组的时候就可以略过这条关系,形成真正有用的三元组。
      因此,关系一共为51个(加上未知关系:0)。关系分类模型采用ALBERT+Bi-GRU+ATT,结构图如下:
    在这里插入图片描述

      模型方面的代码不再具体给出,有兴趣的同学可以参考文章信息抽取实战:人物关系抽取【BERT模型】(附代码),也可以参考文章最后给出的Github项目网址。
      模型设置文本最大长度为128,利用ALBERT做特征提取,在自己的电脑上用CPU训练30个epoch(实际上,由于有early stopping机制,训练不到30个eopch),在验证集上的评估结果如下:

    Epoch 23/30
    396766/396766 [==============================] - 776s 2ms/step - loss: 0.1770 - accuracy: 0.9402 - val_loss: 0.2170 - val_accuracy: 0.9308
    
    Epoch 00023: val_accuracy did not improve from 0.93292
    49506/49506 [==============================] - 151s 3ms/step
    
    在测试集上的效果: [0.21701653493155634, 0.930776059627533]
        precision    recall  f1-score   support
    
              未知       0.87      0.76      0.81      5057
              祖籍       0.92      0.73      0.82       181
              父亲       0.79      0.88      0.83       609
            总部地点       0.95      0.95      0.95       310
             出生地       0.94      0.95      0.94      23301.00      1.00      1.00      1271
              面积       0.90      0.92      0.91        79
              简称       0.97      0.99      0.98       138
            上映时间       0.94      0.98      0.96       463
              妻子       0.91      0.83      0.87       680
            所属专辑       0.97      0.97      0.97      1282
            注册资本       1.00      1.00      1.00        63
              首都       0.92      0.96      0.94        47
              导演       0.92      0.94      0.93      26030.96      0.97      0.97       339
              身高       0.98      0.98      0.98       393
            出品公司       0.96      0.96      0.96       851
            修业年限       1.00      1.00      1.00         2
            出生日期       0.99      0.99      0.99      2892
             制片人       0.69      0.88      0.77       127
              母亲       0.75      0.88      0.81       425
              编剧       0.82      0.80      0.81       771
              国籍       0.92      0.92      0.92      1621
              海拔       1.00      1.00      1.00        43
            连载网站       0.98      1.00      0.99      1658
              丈夫       0.84      0.91      0.87       678
              朝代       0.85      0.92      0.88       419
              民族       0.98      0.99      0.99      14340.95      0.99      0.97       197
             出版社       0.98      0.99      0.99      2272
             主持人       0.82      0.86      0.84       200
            专业代码       1.00      1.00      1.00         3
              歌手       0.89      0.94      0.91      2857
              作词       0.85      0.81      0.83       884
              主角       0.86      0.77      0.81        39
             董事长       0.81      0.74      0.78        47
            毕业院校       0.99      0.99      0.99      1433
            占地面积       0.89      0.89      0.89        61
            官方语言       1.00      1.00      1.00        15
            邮政编码       1.00      1.00      1.00         4
            人口数量       1.00      1.00      1.00        45
            所在城市       0.90      0.94      0.92        77
              作者       0.97      0.97      0.97      4359
            成立日期       0.99      0.99      0.99      1608
              作曲       0.78      0.77      0.78       849
              气候       1.00      1.00      1.00       103
              嘉宾       0.76      0.72      0.74       158
              主演       0.94      0.97      0.95      7383
             改编自       0.95      0.82      0.88        71
             创始人       0.86      0.87      0.86        75
    
        accuracy                           0.93     49506
       macro avg       0.92      0.92      0.92     49506
    weighted avg       0.93      0.93      0.93     49506
    

    在这里插入图片描述

    三元组提取

      最后一部分,也是本次比赛的最终目标,就是三元组提取
      三元组提取采用Pipeline模式先用序列标注模型预测句子中的实体,然后再用关系分类模型判断实体关系的类别,过滤掉关系为未知的情形,就得到提取的三元组了
      三元组提取的代码如下:

    # -*- coding: utf-8 -*-
    import os, re, json, traceback
    
    import json
    import numpy as np
    from keras_contrib.layers import CRF
    from keras_contrib.losses import crf_loss
    from keras_contrib.metrics import crf_accuracy, crf_viterbi_accuracy
    from keras.models import load_model
    from collections import defaultdict
    from pprint import pprint
    from text_classification.att import Attention
    
    from albert_zh.extract_feature import BertVector
    
    # 读取label2id字典
    with open("./sequence_labeling/ccks2019_label2id.json", "r", encoding="utf-8") as h:
        label_id_dict = json.loads(h.read())
    
    id_label_dict = {v: k for k, v in label_id_dict.items()}
    # 利用ALBERT提取文本特征
    bert_model = BertVector(pooling_strategy="NONE", max_seq_len=128)
    f = lambda text: bert_model.encode([text])["encodes"][0]
    
    # 载入NER模型
    custom_objects = {'CRF': CRF, 'crf_loss': crf_loss, 'crf_viterbi_accuracy': crf_viterbi_accuracy}
    ner_model = load_model("./sequence_labeling/ccks2019_ner.h5", custom_objects=custom_objects)
    
    # 载入分类模型
    best_model_path = './text_classification/models/per-rel-19-0.9329.h5'
    classification_model = load_model(best_model_path, custom_objects={"Attention": Attention})
    
    # 分类与id的对应关系
    with open("./data/relation2id.json", "r", encoding="utf-8") as g:
        relation_id_dict = json.loads(g.read())
    
    id_relation_dict = {v: k for k, v in relation_id_dict.items()}
    
    
    # 从预测的标签列表中获取实体
    def get_entity(sent, tags_list):
    
        entity_dict = defaultdict(list)
        i = 0
        for char, tag in zip(sent, tags_list):
            if 'B-' in tag:
                entity = char
                j = i+1
                entity_type = tag.split('-')[-1]
                while j < min(len(sent), len(tags_list)) and 'I-%s' % entity_type in tags_list[j]:
                    entity += sent[j]
                    j += 1
    
                entity_dict[entity_type].append(entity)
    
            i += 1
    
        return dict(entity_dict)
    
    class TripleExtract(object):
    
        def __init__(self, text):
            self.text = text.replace(" ", "")    # 输入句子
    
        # 获取输入句子中的实体(即:主体和客体)
        def get_entity(self):
            train_x = np.array([f(self. text)])
            y = np.argmax(ner_model.predict(train_x), axis=2)
            y = [id_label_dict[_] for _ in y[0] if _]
    
            # 输出预测结果
            return get_entity(self.text, y)
    
        # 对实体做关系判定
        def relation_classify(self):
            entities = self.get_entity()
            subjects = list(set(entities.get("SUBJ", [])))
            objs = list(set(entities.get("OBJ", [])))
    
            spo_list = []
    
            for subj in subjects:
                for obj in objs:
                    sample = '$'.join([subj, obj, self.text.replace(subj, '#'*len(subj)).replace(obj, "#"*len(obj))])
                    vec = bert_model.encode([sample])["encodes"][0]
                    x_train = np.array([vec])
    
                    # 模型预测并输出预测结果
                    predicted = classification_model.predict(x_train)
                    y = np.argmax(predicted[0])
    
                    relation = id_relation_dict[y]
                    if relation != "未知":
                        spo_list.append([subj, relation, obj])
    
            return spo_list
    
        # 提取三元组
        def extractor(self):
    
            return self.relation_classify()
    

      运行三元组提取脚本,代码如下:

    # -*- coding: utf-8 -*-
    import os, re, json, traceback
    from pprint import pprint
    
    from triple_extract.triple_extractor import TripleExtract
    
    text = "真人版的《花木兰》由新西兰导演妮基·卡罗执导,由刘亦菲、甄子丹、郑佩佩、巩俐、李连杰等加盟,几乎是全亚洲阵容。"
    # text = "《冒险小王子》作者周艺文先生,教育、文学领域的专家学者以及来自全国各地的出版业从业者参加了此次沙龙,并围绕儿童文学创作这一话题做了精彩的分享与交流。"
    # text = "宋应星是江西奉新人,公元1587年生,经历过明朝腐败至灭亡的最后时期。"
    # text = "韩愈,字退之,河阳(今河南孟县)人。"
    # text = "公开资料显示,李强,男,汉族,出生于1971年12月,北京市人,北京市委党校在职研究生学历,教育学学士学位,1996年11月入党,1993年7月参加工作。"
    # text = "杨牧,本名王靖献,早期笔名叶珊,1940年生于台湾花莲,著名诗人、作家。"
    # text = "杨广是隋文帝杨坚的第二个儿子。"
    # text = "此次权益变动后,何金明与妻子宋琦、其子何浩不再拥有对上市公司的控制权。"
    # text = "线上直播发布会中,谭维维首次演绎了新歌《章存仙》,这首歌由钱雷作曲、尹约作词,尹约也在直播现场透过手机镜头跟网友互动聊天。"
    # text = "“土木之变”后,造就了明代杰出的民族英雄于谦。"
    # text = "真纳大学坐落在伊斯兰堡市,是一所创建于1967年7月的公立研究型大学。"
    # text = "黄书豪毕业于泰国博仁大学,并签约北京经纪公司,2018年参加《偶像练习生》,曾在节目中表演洗脑神曲《容易动情的人》,让全场嗨到又唱又跳,节目最终排名第43位。"
    # text = "浙江金裕包装有限公司坐落于杭州湾畔金国最大的铝氧化生产基地----江南古镇沥海工业园区,公司西近杭州,紧靠杭州湾世纪大道,距上海100公里余,是一家专业生产氧化铝化妆品配套产品,兼产酒瓶盖、小家电等铝包装产品的制造企业"
    # text = "另外,哈尔滨历史博物馆也是全国面积最小的国有博物馆,该场馆面积只有50平方米,可称之“微缩博物馆”。"
    # text = "孙杨的妈妈叫杨明,孙杨的名字后面一个字也是来源于她的名字。"
    # text = "企查查显示,达鑫电子成立于1998年6月,法定代表人张高圳,注册资本772.33万美元,股东仅新加坡达鑫控股有限公司一名。"
    
    
    triple_extract = TripleExtract(text)
    print("原文: %s" % text)
    entities = triple_extract.get_entity()
    print("实体: ", end='')
    pprint(entities)
    
    spo_list = triple_extract.extractor()
    print("三元组: ", end='')
    pprint(spo_list)
    

      我们在网上找几条样本进行测试,测试的结果如下:
    在这里插入图片描述

    总结

      本项目标题为限定领域的三元组抽取,之所以取名为限定领域,是因为该任务的实体关系是确定,一共为50种关系
      当然,上述方法还存在着诸多不足,参考苏建林的文章基于DGCNN和概率图的轻量级信息抽取模型 ,我们发现不足之处如下:

    • 主体和客体的标注策略有问题,因为句子中有时候主体和客体会重叠在一起;
    • 新引入了一类关系:未知,是否有办法避免引入;
    • 其他(暂时未想到)

      从比赛的角度将,本项目的办法效果未知,应该会比联合模型的效果差一些。但是,这是作为自己的模型,算法是一种尝试,之所以采用这种方法,是因为一开始是从开放领域的三元组抽取入手的,而这种方法方便扩展至开放领域。关于开放领域的三元组抽取,稍后就会写文章介绍。
      本项目的源代码已经公开至Github,网址为:https://github.com/chenlian-zhou/ccks_triple_extract/tree/master/limite_extract_platform

    二、开放领域的三元组抽取

      关于三元组抽取的基本介绍和常用办法,之前已经在不少文章中描述过,这里不再过多介绍,有兴趣的读者可以参考文章利用关系抽取构建知识图谱的一次尝试 。本文将会介绍在开放领域做三元组抽取的一次尝试。
      本项目已经开源至Github,文章最后会给出相应的网址。本项目的项目结构如下:
    在这里插入图片描述

      本项目一共分为四部分,主要模块介绍如下:

    • extract_example: 利用训练好的模型对基本小说和新闻进行三元组抽取,形成知识图谱例子
    • sequence_labeling训练标注,对标注的实体数据进行序列标注算法训练
    • spo_tagging_platform标注平台,标注subject,predicate和object以及三元组是否有效
    • text_classification文本分类,用于判别抽取的三元组是否有效

      本项目的抽取系统流程图如下:
    在这里插入图片描述

    标注平台

      用tornado搭建了简易的标注平台,在标注页面中,标注人员需要输入标注的句子(句子级别的抽取)以及subject,predicate,object,点击“显示SPO”,将有效的三元组标注为1,无效的三元组标注为0。之所以采取这种标注方法,是因为我们可以在句子中标注subject,predicate,object,这些标注的实体就会形成可能的三元组组合,再利用0,1来标注这种三元组是否有效,这样就能做到在开放领域进行三元组抽取。
      一个简单的标注例子如下:
    在这里插入图片描述

      再对以上的标注结果做一些说明,我们的标注是以句子为单位,进行句子级别的标注,不同要素在标注的时候加 # 区分,标注了两个subject,1个predicate(共用)和2个object,其中predidate是这些subject和object公用的,所以只需要标注一次。这样,点击“显示SPO”,一共会显示4个三元组,s,p,o用#隔开,0,1表示是否是有效三元组,默认为0
      利用空余时间,一共标注了3200多个样本,对于序列标注来说,就是3200多个样本,对于文本分类来说,就是9000多个样本了

    序列标注

      对于上述的标注例子,会形成如下的标注序列

    美	B-SUBJ
    国	I-SUBJ
    疾	I-SUBJ
    控	I-SUBJ
    中	I-SUBJ
    心	I-SUBJ
    主	B-PRED
    任	I-PRED
    雷	B-OBJ
    德	I-OBJ
    菲	I-OBJ
    尔	I-OBJ
    德	I-OBJ
    (	O
    左	O
    圈	O
    )	O
    和	O
    美	B-SUBJ
    国	I-SUBJ
    国	I-SUBJ
    立	I-SUBJ
    卫	I-SUBJ
    生	I-SUBJ
    研	I-SUBJ
    究	I-SUBJ
    院	I-SUBJ
    过	I-SUBJ
    敏	I-SUBJ
    和	I-SUBJ
    传	I-SUBJ
    染	I-SUBJ
    病	I-SUBJ
    研	I-SUBJ
    究	I-SUBJ
    所	I-SUBJ
    主	B-PRED
    任	I-PRED
    福	B-OBJ
    西	I-OBJ
    (	O
    右	O
    圈	O
    )	O
    

      将数据集分为训练集和测试集,比例为8:2。采用经典的深度学习模型ALBERT+Bi-LSTM+CRF进行实体识别,设置最大文本长度为128,训练100个epoch。关于该模型的介绍,可以参考文章信息抽取实战:命名实体识别NER【ALBERT+Bi-LSTM模型 vs. ALBERT+Bi-LSTM+CRF模型】(附代码)
      在测试集上的训练结果如下:

    accuracy:  93.69%; precision:  76.26%; recall:  82.33%; FB1:  79.18
    
    OBJ: precision:  80.47%; recall:  88.81%; FB1:  84.44  927
    PRED: precision:  76.89%; recall:  83.69%; FB1:  80.14  1021
    SUBJ: precision:  71.72%; recall:  75.32%; FB1:  73.48  983
    

      在测试集上的总体F1值接近80%

    文本分类

      关于文本分类,需要多做一些说明。
      虽然本文的题目是关于在开发领域的三元组抽取的尝试,但实际我在标注的时候,还是更多地标注人物头衔,人物关系,公司与人的关系,影视剧主演、导演信息等。形成的有效的文本分类的样本为9000多个,一共有关系1365个,数量最多的前20个关系,如下图:
    在这里插入图片描述

      以上述的标注数据为例,形成的标注数据如下:

    美国疾控中心#主任#雷德菲尔德#1#美国疾控中心主任雷德菲尔德(左圈)和美国国立卫生研究院过敏和传染病研究所主任福西(右圈)
    美国疾控中心#主任#福西#0#美国疾控中心主任雷德菲尔德(左圈)和美国国立卫生研究院过敏和传染病研究所主任福西(右圈)
    美国国立卫生研究院过敏和传染病研究所#主任#雷德菲尔德#0#美国疾控中心主任雷德菲尔德(左圈)和美国国立卫生研究院过敏和传染病研究所主任福西(右圈)
    美国国立卫生研究院过敏和传染病研究所#主任#福西#1#美国疾控中心主任雷德菲尔德(左圈)和美国国立卫生研究院过敏和传染病研究所主任福西(右圈)
    

      在实际模型训练的时候,会将原文中的subject用S*len(subject)代替,predicate用P,object用O
      将数据集分为训练集和测试集,比例为8:2。采用经典的深度学习模型ALBERT+Bi-GRU+ATT+FC,设置文本的最大长度为为128,训练30个epoch,采用early stopping机制,训练过程的loss和acc图像如下:
    在这里插入图片描述

      最终在测试集上的accuracy约为96%

    新数据进行三元组抽取

      上述的模型训练完毕后,我们就可以将其封装成HTTP服务。对于新输入的句子,我们先利用序列标注模型预测出其中的subject,predicate和object,组合成三元组与句子的拼接,输入到文本分类模型,判别该三元组是否有效,0为无效,1为有效
      从网上找几个例子,预测的结果如下:
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

      extract_example目录中为抽取的效果,包括几本小说和一些新闻上的效果,关于这方面的演示,可以参考另一个项目:https://github.com/percent4/knowledge_graph_demo 。也可以参考文章知识图谱构建举例 https://blog.csdn.net/jclian91/article/details/104685424 中给出的几个知识图谱的建构的例子。

    总结

      本文写的过程较为简单,也没有代码,这是因为在之前的文章中做了大量的铺垫,主要是集中在模型方面。况且,这个项目比较大,也不适合在这里详细讲述,只在这里给出思路和大概的处理流程,具体的实现代码可以参考下方的Github地址。
      在实际的抽取过程中,一些句子也存在抽取出大量无用的三元组的情况,导致召回率高,这是因为本项目针对的是开放领域的三元组抽取,因此效果比不会有想象中的那么好,提升抽取效果的办法如下:

    • 增加数据标注量,目前序列标注算法的样本仅3200多个
    • 模型方面:现在是pipeline形式,各自的效果还行,但总体上不如Joint形式好
    • 对于自己想抽的其他三元组的情形,建议增加这方面的标注
    • 文本预测耗时长(该问题已经解决)。

      本项目作为在开放领域的三元组抽取的一次尝试,在此之前关于这方面的文章或者项目还很少,因此可以说是探索阶段。
      源码和数据已经在Github项目中给出,网址为 https://github.com/chenlian-zhou/ccks_triple_extract/tree/master/spo_extract_platform/spo_extract_platform

    参考文献

    1. 信息抽取实战:命名实体识别NER【ALBERT+Bi-LSTM模型 vs. ALBERT+Bi-LSTM+CRF模型】(附代码)
    2. 信息抽取实战:人物关系抽取【BERT模型】(附代码)
    3. 基于DGCNN和概率图的轻量级信息抽取模型
    4. 利用关系抽取构建知识图谱的一次尝试: https://www.cnblogs.com/jclian91/p/11107323.html
    5. 《知识图谱 方法、实践与应用》 王昊奋、漆桂林、陈华钧著,中国工信出版集团、电子工业出版社出版。
    展开全文
  • PyTorch项目代码与资源列表 ...所有代码均按照所属技术领域分类,包括机器视觉/图像相关、自然语言处理相关、强化学习相关等等。所以如果你打算入手这风行一世的 PyTorch 技术,那么就快快收藏本文

    PyTorch项目代码与资源列表


    本文收集了大量基于 PyTorch 实现的代码链接,其中有适用于深度学习新手的“入门指导系列”,也有适用于老司机的论文代码实现,包括 Attention Based CNN、A3C、WGAN等等。所有代码均按照所属技术领域分类,包括机器视觉/图像相关、自然语言处理相关、强化学习相关等等。所以如果你打算入手这风行一世的 PyTorch 技术,那么就快快收藏本文吧!

    PyTorch 是什么?

    PyTorch即 Torch 的 Python 版本。Torch 是由 Facebook 发布的深度学习框架,因支持动态定义计算图,相比于 Tensorflow 使用起来更为灵活方便,特别适合中小型机器学习项目和深度学习初学者。但因为 Torch 的开发语言是Lua,导致它在国内一直很小众。所以,在千呼万唤下,PyTorch应运而生!PyTorch 继承了 Troch 的灵活特性,又使用广为流行的 Python 作为开发语言,所以一经推出就广受欢迎!


    目录:
    入门系列教程
    入门实例
    图像、视觉、CNN相关实现
    对抗生成网络、生成模型、GAN相关实现
    机器翻译、问答系统、NLP相关实现
    先进视觉推理系统
    深度强化学习相关实现
    通用神经网络高级应用


    1 入门系列教程

    1.PyTorch Tutorials
    https://github.com/MorvanZhou/PyTorch-Tutorial.git
    著名的“莫烦”PyTorch系列教程的源码。


    2.Deep Learning with PyTorch: a 60-minute blitz
    http://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html
    PyTorch官网推荐的由网友提供的60分钟教程,本系列教程的重点在于介绍PyTorch的基本原理,包括自动求导,神经网络,以及误差优化API。


    3.Simple examples to introduce PyTorch
    https://github.com/jcjohnson/pytorch-examples.git
    由网友提供的PyTorch教程,通过一些实例的方式,讲解PyTorch的基本原理。内容涉及Numpy、自动求导、参数优化、权重共享等。


    2 入门实例

    1.Ten minutes pyTorch Tutorial
    https://github.com/SherlockLiao/pytorch-beginner.git
    知乎上“十分钟学习PyTorch“系列教程的源码。

    2.Official PyTorch Examples
    https://github.com/pytorch/examples
    官方提供的实例源码,包括以下内容:
    MNIST Convnets
    Word level Language Modeling using LSTM RNNs
    Training Imagenet Classifiers with Residual Networks
    Generative Adversarial Networks (DCGAN)
    Variational Auto-Encoders
    Superresolution using an efficient sub-pixel convolutional neural network
    Hogwild training of shared ConvNets across multiple processes on MNIST
    Training a CartPole to balance in OpenAI Gym with actor-critic
    Natural Language Inference (SNLI) with GloVe vectors, LSTMs, and torchtext
    Time sequence prediction - create an LSTM to learn Sine waves

    3.PyTorch Tutorial for Deep Learning Researchers
    https://github.com/yunjey/pytorch-tutorial.git

    据说是提供给深度学习科研者们的PyTorch教程。教程中的每个实例的代码都控制在30行左右,简单易懂,内容如下:

    PyTorch Basics
    Linear Regression
    Logistic Regression
    Feedforward Neural Network
    Convolutional Neural Network
    Deep Residual Network
    Recurrent Neural Network
    Bidirectional Recurrent Neural Network
    Language Model (RNN-LM)
    Generative Adversarial Network
    Image Captioning (CNN-RNN)
    Deep Convolutional GAN (DCGAN)
    Variational Auto-Encoder
    Neural Style Transfer
    TensorBoard in PyTorch


    4.PyTorch-playground
    https://github.com/aaron-xichen/pytorch-playground.git
    PyTorch初学者的Playground,在这里针对一下常用的数据集,已经写好了一些模型,所以大家可以直接拿过来玩玩看,目前支持以下数据集的模型。
    mnist, svhn
    cifar10, cifar100
    stl10
    alexnet
    vgg16, vgg16_bn, vgg19, vgg19_bn
    resnet18, resnet34, resnet50, resnet101, resnet152
    squeezenet_v0, squeezenet_v1
    inception_v3


    3 图像、视觉、CNN相关实现

    1.PyTorch-FCN
    https://github.com/wkentaro/pytorch-fcn.git
    FCN(Fully Convolutional Networks implemented) 的PyTorch实现。

    2.Attention Transfer
    https://github.com/szagoruyko/attention-transfer.git
    论文 "Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfer" 的PyTorch实现。

    3.Wide ResNet model in PyTorch
    https://github.com/szagoruyko/functional-zoo.git
    一个PyTorch实现的 ImageNet Classification 。

    4.CRNN for image-based sequence recognition
    https://github.com/bgshih/crnn.git
    这个是 Convolutional Recurrent Neural Network (CRNN) 的 PyTorch 实现。CRNN 由一些CNN,RNN和CTC组成,常用于基于图像的序列识别任务,例如场景文本识别和OCR。

    5.Scaling the Scattering Transform: Deep Hybrid Networks
    https://github.com/edouardoyallon/pyscatwave.git
    使用了“scattering network”的CNN实现,特别的构架提升了网络的效果。

    6.Conditional Similarity Networks (CSNs)
    https://github.com/andreasveit/conditional-similarity-networks.git
    《Conditional Similarity Networks》的PyTorch实现。

    7.Multi-style Generative Network for Real-time Transfer
    https://github.com/zhanghang1989/PyTorch-Style-Transfer.git
    MSG-Net 以及 Neural Style 的 PyTorch 实现。

    8.Big batch training
    https://github.com/eladhoffer/bigBatch.git
    《Train longer, generalize better: closing the generalization gap in large batch training of neural networks》的 PyTorch 实现。

    9.CortexNet
    https://github.com/e-lab/pytorch-CortexNet.git
    一个使用视频训练的鲁棒预测深度神经网络。

    10.Neural Message Passing for Quantum Chemistry
    https://github.com/priba/nmp_qc.git
    论文《Neural Message Passing for Quantum Chemistry》的PyTorch实现,好像是讲计算机视觉下的神经信息传递。


    4 对抗生成网络、生成模型、GAN相关实现

    1.Generative Adversarial Networks (GANs) in PyTorch
    https://github.com/devnag/pytorch-generative-adversarial-networks.git
    一个非常简单的由PyTorch实现的对抗生成网络

    2.DCGAN & WGAN with Pytorch
    https://github.com/chenyuntc/pytorch-GAN.git
    由中国网友实现的DCGAN和WGAN,代码很简洁。

    3.Official Code for WGAN
    https://github.com/martinarjovsky/WassersteinGAN.git
    WGAN的官方PyTorch实现。

    4.DiscoGAN in PyTorch
    https://github.com/carpedm20/DiscoGAN-pytorch.git
    《Learning to Discover Cross-Domain Relations with Generative Adversarial Networks》的 PyTorch 实现。

    5.Adversarial Generator-Encoder Network
    https://github.com/DmitryUlyanov/AGE.git
    《Adversarial Generator-Encoder Networks》的 PyTorch 实现。

    6.CycleGAN and pix2pix in PyTorch
    https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix.git
    图到图的翻译,著名的 CycleGAN 以及 pix2pix 的PyTorch 实现。

    7.Weight Normalized GAN
    https://github.com/stormraiser/GAN-weight-norm.git
    《On the Effects of Batch and Weight Normalization in Generative Adversarial Networks》的 PyTorch 实现。

    5 机器翻译、问答系统、NLP相关实现

    1.DeepLearningForNLPInPytorch
    https://github.com/rguthrie3/DeepLearningForNLPInPytorch.git

    一套以 NLP 为主题的 PyTorch 基础教程。本教程使用Ipython Notebook编写,看起来很直观,方便学习。

    2.Practial Pytorch with Topic RNN & NLP
    https://github.com/spro/practical-pytorch
    以 RNN for NLP 为出发点的 PyTorch 基础教程,分为“RNNs for NLP”和“RNNs for timeseries data”两个部分。
    3.PyOpenNMT: Open-Source Neural Machine Translation
    https://github.com/OpenNMT/OpenNMT-py.git
    一套由PyTorch实现的机器翻译系统。

    4.Deal or No Deal? End-to-End Learning for Negotiation Dialogues
    https://github.com/facebookresearch/end-to-end-negotiator.git
    Facebook AI Research 论文《Deal or No Deal? End-to-End Learning for Negotiation Dialogues》的 PyTorch 实现。

    5.Attention is all you need: A Pytorch Implementation
    https://github.com/jadore801120/attention-is-all-you-need-pytorch.git
    Google Research 著名论文《Attention is all you need》的PyTorch实现。

    6.Improved Visual Semantic Embeddings
    https://github.com/fartashf/vsepp.git
    一种从图像中检索文字的方法,来自论文:《VSE++: Improved Visual-Semantic Embeddings》。

    7.Reading Wikipedia to Answer Open-Domain Questions
    https://github.com/facebookresearch/DrQA.git
    一个开放领域问答系统DrQA的PyTorch实现。

    8.Structured-Self-Attentive-Sentence-Embedding
    https://github.com/ExplorerFreda/Structured-Self-Attentive-Sentence-Embedding.git
    IBM 与 MILA 发表的《A Structured Self-Attentive Sentence Embedding》的开源实现。


    6 先进视觉推理系统

    1.Visual Question Answering in Pytorch
    https://github.com/Cadene/vqa.pytorch.git
    一个PyTorch实现的优秀视觉推理问答系统,是基于论文《MUTAN: Multimodal Tucker Fusion for Visual Question Answering》实现的。项目中有详细的配置使用方法说明。

    2.Clevr-IEP
    https://github.com/facebookresearch/clevr-iep.git
    Facebook Research 论文《Inferring and Executing Programs for Visual Reasoning》的PyTorch实现,讲的是一个可以基于图片进行关系推理问答的网络。


    7 深度强化学习相关实现

    1.Deep Reinforcement Learning withpytorch & visdom

    https://github.com/onlytailei/pytorch-rl.git
    多种使用PyTorch实现强化学习的方法。

    2.Value Iteration Networks in PyTorch
    https://github.com/onlytailei/Value-Iteration-Networks-PyTorch.git
    Value Iteration Networks (VIN) 的PyTorch实现。

    3.A3C in PyTorch
    https://github.com/onlytailei/A3C-PyTorch.git
    Adavantage async Actor-Critic (A3C) 的PyTorch实现。


    8 通用神经网络高级应用

    1.PyTorch-meta-optimizer
    https://github.com/ikostrikov/pytorch-meta-optimizer.git
    论文《Learning to learn by gradient descent by gradient descent》的PyTorch实现。

    2.OptNet: Differentiable Optimization as a Layer in Neural Networks
    https://github.com/locuslab/optnet.git
    论文《Differentiable Optimization as a Layer in Neural Networks》的PyTorch实现。

    3.Task-based End-to-end Model Learning
    https://github.com/locuslab/e2e-model-learning.git
    论文《Task-based End-to-end Model Learning》的PyTorch实现。

    4.DiracNets
    https://github.com/szagoruyko/diracnets.git
    不使用“Skip-Connections”而搭建特别深的神经网络的方法。

    5.ODIN: Out-of-Distribution Detector for Neural Networks
    https://github.com/ShiyuLiang/odin-pytorch.git
    这是一个能够检测“分布不足”(Out-of-Distribution)样本的方法的PyTorch实现。当“true positive rate”为95%时,该方法将DenseNet(适用于CIFAR-10)的“false positive rate”从34.7%降至4.3%。

    6.Accelerate Neural Net Training by Progressively Freezing Layers
    https://github.com/ajbrock/FreezeOut.git
    一种使用“progressively freezing layers”来加速神经网络训练的方法。

    7.Efficient_densenet_pytorch
    https://github.com/gpleiss/efficient_densenet_pytorch.git
    DenseNets的PyTorch实现,优化以节省GPU内存。
    展开全文
  • 我在萨尔大学获得语言科学与技术硕士学位的“开源代码和低资源语言”论文 抽象的 当前使用的大约七千种语言中,只有不到五十种具有重要的数字形象。 为了使一种语言能够以数字方式使用并长期存在,其讲者可能需要...
  • 高斯过程回归与分类 高斯过程的回归 我们有嘈杂的传感器读数(由错误栏指示)。 首先,我们将进行点预测: 接下来,我们将预测100分 最后,我们使用超参数的MAP估计: 高斯过程分类 我们已经生成了训练点和标签,...
  • 领域驱动设计模式实战

    热门讨论 2012-08-09 17:50:23
    7.3.3 将规则绑定到与领域有关的转换,还是绑定到基础架构有关的转换 7.3.4 精化原则:所有状态,即使是错误状态,都应该是可保存的 7.4 持久化有关的基本的规则API的需求 7.4.1 回到已发现的API问题上 7.4.2 ...
  • 所有代码均按照所属技术领域分类,包括机器视觉/图像相关、自然语言处理相关、强化学习相关等等。所以如果你打算入手这风行一世的 PyTorch 技术,那么就快快收藏本文吧! PyTorch 是什么? ...

     

    本文收集了大量基于 PyTorch 实现的代码链接,其中有适用于深度学习新手的“入门指导系列”,也有适用于老司机的论文代码实现,包括 Attention Based CNN、A3C、WGAN等等。所有代码均按照所属技术领域分类包括机器视觉/图像相关、自然语言处理相关、强化学习相关等等。所以如果你打算入手这风行一世的 PyTorch 技术,那么就快快收藏本文吧!

    PyTorch 是什么?

    PyTorch即 Torch 的 Python 版本。Torch 是由 Facebook 发布的深度学习框架,因支持动态定义计算图,相比于 Tensorflow 使用起来更为灵活方便,特别适合中小型机器学习项目和深度学习初学者。但因为 Torch 的开发语言是Lua,导致它在国内一直很小众。所以,在千呼万唤下,PyTorch应运而生!PyTorch 继承了 Troch 的灵活特性,又使用广为流行的 Python 作为开发语言,所以一经推出就广受欢迎!

    目录:

    1. 入门系列教程

    2. 入门实例

    3. 图像、视觉、CNN相关实现

    4. 对抗生成网络、生成模型、GAN相关实现

    5. 机器翻译、问答系统、NLP相关实现

    6. 先进视觉推理系统

    7. 深度强化学习相关实现

    8. 通用神经网络高级应用

    1

    入门系列教程

    1.PyTorch Tutorials

    https://github.com/MorvanZhou/PyTorch-Tutorial.git

    著名的“莫烦”PyTorch系列教程的源码。

    2.Deep Learning with PyTorch: a 60-minute blitz

    http://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html

    PyTorch官网推荐的由网友提供的60分钟教程,本系列教程的重点在于介绍PyTorch的基本原理,包括自动求导,神经网络,以及误差优化API。

    3.Simple examples to introduce PyTorch

    https://github.com/jcjohnson/pytorch-examples.git

    由网友提供的PyTorch教程,通过一些实例的方式,讲解PyTorch的基本原理。内容涉及Numpy、自动求导、参数优化、权重共享等。

    2

    入门实例

    1.Ten minutes pyTorch Tutorial

    https://github.com/SherlockLiao/pytorch-beginner.git

    知乎上“十分钟学习PyTorch“系列教程的源码。

    2.Official PyTorch Examples

    https://github.com/pytorch/examples

    官方提供的实例源码,包括以下内容:

    • MNIST Convnets

    • Word level Language Modeling using LSTM RNNs

    • Training Imagenet Classifiers with Residual Networks

    • Generative Adversarial Networks (DCGAN)

    • Variational Auto-Encoders

    • Superresolution using an efficient sub-pixel convolutional neural network

    • Hogwild training of shared ConvNets across multiple processes on MNIST

    • Training a CartPole to balance in OpenAI Gym with actor-critic

    • Natural Language Inference (SNLI) with GloVe vectors, LSTMs, and torchtext

    • Time sequence prediction - create an LSTM to learn Sine waves

    3.PyTorch Tutorial for Deep Learning Researchers

    https://github.com/yunjey/pytorch-tutorial.git

    据说是提供给深度学习科研者们的PyTorch教程←_←。教程中的每个实例的代码都控制在30行左右,简单易懂,内容如下:

    • PyTorch Basics

    • Linear Regression

    • Logistic Regression

    • Feedforward Neural Network

    • Convolutional Neural Network

    • Deep Residual Network

    • Recurrent Neural Network

    • Bidirectional Recurrent Neural Network

    • Language Model (RNN-LM)

    • Generative Adversarial Network

    • Image Captioning (CNN-RNN)

    • Deep Convolutional GAN (DCGAN)

    • Variational Auto-Encoder

    • Neural Style Transfer

    • TensorBoard in PyTorch

    4PyTorch-playground

    https://github.com/aaron-xichen/pytorch-playground.git

    PyTorch初学者的Playground,在这里针对一下常用的数据集,已经写好了一些模型,所以大家可以直接拿过来玩玩看,目前支持以下数据集的模型。

    • mnist, svhn

    • cifar10, cifar100

    • stl10

    • alexnet

    • vgg16, vgg16_bn, vgg19, vgg19_bn

    • resnet18, resnet34, resnet50, resnet101, resnet152

    • squeezenet_v0, squeezenet_v1

    • inception_v3

    3

    图像、视觉、CNN相关实现

    1.PyTorch-FCN

    https://github.com/wkentaro/pytorch-fcn.git

    FCN(Fully Convolutional Networks implemented) 的PyTorch实现。

    2.Attention Transfer

    https://github.com/szagoruyko/attention-transfer.git

    论文 "Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfer" 的PyTorch实现。

    3.Wide ResNet model in PyTorch

    https://github.com/szagoruyko/functional-zoo.git

    一个PyTorch实现的 ImageNet Classification 。

    4.CRNN for image-based sequence recognition

    https://github.com/bgshih/crnn.git

    这个是 Convolutional Recurrent Neural Network (CRNN) 的 PyTorch 实现。CRNN 由一些CNN,RNN和CTC组成,常用于基于图像的序列识别任务,例如场景文本识别和OCR。

    5.Scaling the Scattering Transform: Deep Hybrid Networks

    https://github.com/edouardoyallon/pyscatwave.git

    使用了“scattering network”的CNN实现,特别的构架提升了网络的效果。

    6.Conditional Similarity Networks (CSNs)

    https://github.com/andreasveit/conditional-similarity-networks.git

    《Conditional Similarity Networks》的PyTorch实现。

    7.Multi-style Generative Network for Real-time Transfer

    https://github.com/zhanghang1989/PyTorch-Style-Transfer.git

    MSG-Net 以及 Neural Style 的 PyTorch 实现。

    8.Big batch training

    https://github.com/eladhoffer/bigBatch.git

    《Train longer, generalize better: closing the generalization gap in large batch training of neural networks》的 PyTorch 实现。

    9.CortexNet

    https://github.com/e-lab/pytorch-CortexNet.git

    一个使用视频训练的鲁棒预测深度神经网络。

    10.Neural Message Passing for Quantum Chemistry

    https://github.com/priba/nmp_qc.git

    论文《Neural Message Passing for Quantum Chemistry》的PyTorch实现,好像是讲计算机视觉下的神经信息传递。

    4

    对抗生成网络、生成模型、GAN相关实现

    1.Generative Adversarial Networks (GANs) in PyTorch

    https://github.com/devnag/pytorch-generative-adversarial-networks.git

    一个非常简单的由PyTorch实现的对抗生成网络

    2.DCGAN & WGAN with Pytorch

    https://github.com/chenyuntc/pytorch-GAN.git

    由中国网友实现的DCGAN和WGAN,代码很简洁。

    3.Official Code for WGAN

    https://github.com/martinarjovsky/WassersteinGAN.git

    WGAN的官方PyTorch实现。

    4.DiscoGAN in PyTorch

    https://github.com/carpedm20/DiscoGAN-pytorch.git

    《Learning to Discover Cross-Domain Relations with Generative Adversarial Networks》的 PyTorch 实现。

    5.Adversarial Generator-Encoder Network

    https://github.com/DmitryUlyanov/AGE.git

    《Adversarial Generator-Encoder Networks》的 PyTorch 实现。

    6.CycleGAN and pix2pix in PyTorch

    https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix.git

    图到图的翻译,著名的 CycleGAN 以及 pix2pix 的PyTorch 实现。

    7.Weight Normalized GAN

    https://github.com/stormraiser/GAN-weight-norm.git

    《On the Effects of Batch and Weight Normalization in Generative Adversarial Networks》的 PyTorch 实现。

    5

    机器翻译、问答系统、NLP相关实现

    1.DeepLearningForNLPInPytorch

    https://github.com/rguthrie3/DeepLearningForNLPInPytorch.git

    一套以 NLP 为主题的 PyTorch 基础教程。本教程使用Ipython Notebook编写,看起来很直观,方便学习。

    2.Practial Pytorch with Topic RNN & NLP

    https://github.com/spro/practical-pytorch

    以 RNN for NLP 为出发点的 PyTorch 基础教程,分为“RNNs for NLP”和“RNNs for timeseries data”两个部分。

    3.PyOpenNMT: Open-Source Neural Machine Translation

    https://github.com/OpenNMT/OpenNMT-py.git

    一套由PyTorch实现的机器翻译系统。

    4.Deal or No Deal? End-to-End Learning for Negotiation Dialogues

    https://github.com/facebookresearch/end-to-end-negotiator.git

    Facebook AI Research 论文《Deal or No Deal? End-to-End Learning for Negotiation Dialogues》的 PyTorch 实现。

    5.Attention is all you need: A Pytorch Implementation

    https://github.com/jadore801120/attention-is-all-you-need-pytorch.git

    Google Research 著名论文《Attention is all you need》的PyTorch实现。

    6.Improved Visual Semantic Embeddings

    https://github.com/fartashf/vsepp.git

    一种从图像中检索文字的方法,来自论文:《VSE++: Improved Visual-Semantic Embeddings》。

    7.Reading Wikipedia to Answer Open-Domain Questions

    https://github.com/facebookresearch/DrQA.git

    一个开放领域问答系统DrQA的PyTorch实现。

    8.Structured-Self-Attentive-Sentence-Embedding

    https://github.com/ExplorerFreda/Structured-Self-Attentive-Sentence-Embedding.git

    IBM 与 MILA 发表的《A Structured Self-Attentive Sentence Embedding》的开源实现。

    6

    先进视觉推理系统

    1.Visual Question Answering in Pytorch

    https://github.com/Cadene/vqa.pytorch.git

    一个PyTorch实现的优秀视觉推理问答系统,是基于论文《MUTAN: Multimodal Tucker Fusion for Visual Question Answering》实现的。项目中有详细的配置使用方法说明。

    2.Clevr-IEP

    https://github.com/facebookresearch/clevr-iep.git

    Facebook Research 论文《Inferring and Executing Programs for Visual Reasoning》的PyTorch实现,讲的是一个可以基于图片进行关系推理问答的网络。

    7

    深度强化学习相关实现

    1.Deep Reinforcement Learning withpytorch & visdom

    https://github.com/onlytailei/pytorch-rl.git

    多种使用PyTorch实现强化学习的方法。

    2.Value Iteration Networks in PyTorch

    https://github.com/onlytailei/Value-Iteration-Networks-PyTorch.git

    Value Iteration Networks (VIN) 的PyTorch实现。

    3.A3C in PyTorch

    https://github.com/onlytailei/A3C-PyTorch.git

    Adavantage async Actor-Critic (A3C) 的PyTorch实现。

    8

    通用神经网络高级应用

    1.PyTorch-meta-optimizer

    https://github.com/ikostrikov/pytorch-meta-optimizer.git

    论文《Learning to learn by gradient descent by gradient descent》的PyTorch实现。

    2.OptNet: Differentiable Optimization as a Layer in Neural Networks

    https://github.com/locuslab/optnet.git

    论文《Differentiable Optimization as a Layer in Neural Networks》的PyTorch实现。

    3.Task-based End-to-end Model Learning

    https://github.com/locuslab/e2e-model-learning.git

    论文《Task-based End-to-end Model Learning》的PyTorch实现。

    4.DiracNets

    https://github.com/szagoruyko/diracnets.git

    不使用“Skip-Connections”而搭建特别深的神经网络的方法。

    5.ODIN: Out-of-Distribution Detector for Neural Networks

    https://github.com/ShiyuLiang/odin-pytorch.git

    这是一个能够检测“分布不足”(Out-of-Distribution)样本的方法的PyTorch实现。当“true positive rate”为95%时,该方法将DenseNet(适用于CIFAR-10)的“false positive rate”从34.7%降至4.3%。

    6.Accelerate Neural Net Training by Progressively Freezing Layers

    https://github.com/ajbrock/FreezeOut.git

    一种使用“progressively freezing layers”来加速神经网络训练的方法。

    7.Efficient_densenet_pytorch

    https://github.com/gpleiss/efficient_densenet_pytorch.git

    DenseNets的PyTorch实现,优化以节省GPU内存。

    展开全文
  • 是的matlab代码 informationatiCup2017-GitHub存储库分类器 :party_popper: :party_popper: 今年,这是第十二届学生计算机科学竞赛的举办地。 今年的InformatiCup致力于解决基于人工智能和存储库挖掘的新可能性-基于...
  • 《软件保护及分析技术--原理实践》对软件安全领域的保护分析技术进行了全面的讨论和剖析,通过保护分析的对比讲解,结合代码和操作流程,对软件安全领域的各种技术进行了详尽的讨论,并将理论实践相结合,...
  • 本文收集了大量基于 PyTorch 实现的代码链接,其中有适用于深度学习新手的...所有代码均按照所属技术领域分类,包括机器视觉/图像相关、自然语言处理相关、强化学习相关等等。所以如果你打算入手这风行一世的 ...

    http://www.sohu.com/a/164171974_741733

    本文收集了大量基于 PyTorch 实现的代码链接,其中有适用于深度学习新手的“入门指导系列”,也有适用于老司机的论文代码实现,包括 Attention Based CNN、A3C、WGAN等等。所有代码均按照所属技术领域分类,包括机器视觉/图像相关、自然语言处理相关、强化学习相关等等。所以如果你打算入手这风行一世的 PyTorch 技术,那么就快快收藏本文吧!

    PyTorch 是什么?

    PyTorch即 Torch 的 Python 版本。Torch 是由 Facebook 发布的深度学习框架,因支持动态定义计算图,相比于 Tensorflow 使用起来更为灵活方便,特别适合中小型机器学习项目和深度学习初学者。但因为 Torch 的开发语言是Lua,导致它在国内一直很小众。所以,在千呼万唤下,PyTorch应运而生!PyTorch 继承了 Troch 的灵活特性,又使用广为流行的 Python 作为开发语言,所以一经推出就广受欢迎!

    目录:

    1. 入门系列教程

    2. 入门实例

    3. 图像、视觉、CNN相关实现

    4. 对抗生成网络、生成模型、GAN相关实现

    5. 机器翻译、问答系统、NLP相关实现

    6. 先进视觉推理系统

    7. 深度强化学习相关实现

    8. 通用神经网络高级应用

    1 入门系列教程

    1.PyTorch Tutorials

    https://github.com/MorvanZhou/PyTorch-Tutorial.git

    著名的“莫烦”PyTorch系列教程的源码。

    2.Deep Learning with PyTorch: a 60-minute blitz

    http://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html

    PyTorch官网推荐的由网友提供的60分钟教程,本系列教程的重点在于介绍PyTorch的基本原理,包括自动求导,神经网络,以及误差优化API。

    3.Simple examples to introduce PyTorch

    https://github.com/jcjohnson/pytorch-examples.git

    由网友提供的PyTorch教程,通过一些实例的方式,讲解PyTorch的基本原理。内容涉及Numpy、自动求导、参数优化、权重共享等。

    2 入门实例

    1.Ten minutes pyTorch Tutorial

    https://github.com/SherlockLiao/pytorch-beginner.git

    知乎上“十分钟学习PyTorch“系列教程的源码。

    2.Official PyTorch Examples

    https://github.com/pytorch/examples

    官方提供的实例源码,包括以下内容:

    • MNIST Convnets

    • Word level Language Modeling using LSTM RNNs

    • Training Imagenet Classifiers with Residual Networks

    • Generative Adversarial Networks (DCGAN)

    • Variational Auto-Encoders

    • Superresolution using an efficient sub-pixel convolutional neural network

    • Hogwild training of shared ConvNets across multiple processes on MNIST

    • Training a CartPole to balance in OpenAI Gym with actor-critic

    • Natural Language Inference (SNLI) with GloVe vectors, LSTMs, and torchtext

    • Time sequence prediction - create an LSTM to learn Sine waves

    3.PyTorch Tutorial for Deep Learning Researchers

    https://github.com/yunjey/pytorch-tutorial.git

    据说是提供给深度学习科研者们的PyTorch教程←_←。教程中的每个实例的代码都控制在30行左右,简单易懂,内容如下:

    • PyTorch Basics

    • Linear Regression

    • Logistic Regression

    • Feedforward Neural Network

    • Convolutional Neural Network

    • Deep Residual Network

    • Recurrent Neural Network

    • Bidirectional Recurrent Neural Network

    • Language Model (RNN-LM)

    • Generative Adversarial Network

    • Image Captioning (CNN-RNN)

    • Deep Convolutional GAN (DCGAN)

    • Variational Auto-Encoder

    • Neural Style Transfer

    • TensorBoard in PyTorch

    4PyTorch-playground

    https://github.com/aaron-xichen/pytorch-playground.git

    PyTorch初学者的Playground,在这里针对一下常用的数据集,已经写好了一些模型,所以大家可以直接拿过来玩玩看,目前支持以下数据集的模型。

    • mnist, svhn

    • cifar10, cifar100

    • stl10

    • alexnet

    • vgg16, vgg16_bn, vgg19, vgg19_bn

    • resnet18, resnet34, resnet50, resnet101, resnet152

    • squeezenet_v0, squeezenet_v1

    • inception_v3

    3 图像、视觉、CNN相关实现

    1.PyTorch-FCN

    https://github.com/wkentaro/pytorch-fcn.git

    FCN(Fully Convolutional Networks implemented) 的PyTorch实现。

    2.Attention Transfer

    https://github.com/szagoruyko/attention-transfer.git

    论文 "Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfer" 的PyTorch实现。

    3.Wide ResNet model in PyTorch

    https://github.com/szagoruyko/functional-zoo.git

    一个PyTorch实现的 ImageNet Classification 。

    4.CRNN for image-based sequence recognition

    https://github.com/bgshih/crnn.git

    这个是 Convolutional Recurrent Neural Network (CRNN) 的 PyTorch 实现。CRNN 由一些CNN,RNN和CTC组成,常用于基于图像的序列识别任务,例如场景文本识别和OCR。

    5.Scaling the Scattering Transform: Deep Hybrid Networks

    https://github.com/edouardoyallon/pyscatwave.git

    使用了“scattering network”的CNN实现,特别的构架提升了网络的效果。

    6.Conditional Similarity Networks (CSNs)

    https://github.com/andreasveit/conditional-similarity-networks.git

    《Conditional Similarity Networks》的PyTorch实现。

    7.Multi-style Generative Network for Real-time Transfer

    https://github.com/zhanghang1989/PyTorch-Style-Transfer.git

    MSG-Net 以及 Neural Style 的 PyTorch 实现。

    8.Big batch training

    https://github.com/eladhoffer/bigBatch.git

    《Train longer, generalize better: closing the generalization gap in large batch training of neural networks》的 PyTorch 实现。

    9.CortexNet

    https://github.com/e-lab/pytorch-CortexNet.git

    一个使用视频训练的鲁棒预测深度神经网络。

    10.Neural Message Passing for Quantum Chemistry

    https://github.com/priba/nmp_qc.git

    论文《Neural Message Passing for Quantum Chemistry》的PyTorch实现,好像是讲计算机视觉下的神经信息传递。

    4 对抗生成网络、生成模型、GAN相关实现

    1.Generative Adversarial Networks (GANs) in PyTorch

    https://github.com/devnag/pytorch-generative-adversarial-networks.git

    一个非常简单的由PyTorch实现的对抗生成网络

    2.DCGAN & WGAN with Pytorch

    https://github.com/chenyuntc/pytorch-GAN.git

    由中国网友实现的DCGAN和WGAN,代码很简洁。

    3.Official Code for WGAN

    https://github.com/martinarjovsky/WassersteinGAN.git

    WGAN的官方PyTorch实现。

    4.DiscoGAN in PyTorch

    https://github.com/carpedm20/DiscoGAN-pytorch.git

    《Learning to Discover Cross-Domain Relations with Generative Adversarial Networks》的 PyTorch 实现。

    5.Adversarial Generator-Encoder Network

    https://github.com/DmitryUlyanov/AGE.git

    《Adversarial Generator-Encoder Networks》的 PyTorch 实现。

    6.CycleGAN and pix2pix in PyTorch

    https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix.git

    图到图的翻译,著名的 CycleGAN 以及 pix2pix 的PyTorch 实现。

    7.Weight Normalized GAN

    https://github.com/stormraiser/GAN-weight-norm.git

    《On the Effects of Batch and Weight Normalization in Generative Adversarial Networks》的 PyTorch 实现。

    5 机器翻译、问答系统、NLP相关实现

    1.DeepLearningForNLPInPytorch

    https://github.com/rguthrie3/DeepLearningForNLPInPytorch.git

    一套以 NLP 为主题的 PyTorch 基础教程。本教程使用Ipython Notebook编写,看起来很直观,方便学习。

    2.Practial Pytorch with Topic RNN & NLP

    https://github.com/spro/practical-pytorch

    以 RNN for NLP 为出发点的 PyTorch 基础教程,分为“RNNs for NLP”和“RNNs for timeseries data”两个部分。

    3.PyOpenNMT: Open-Source Neural Machine Translation

    https://github.com/OpenNMT/OpenNMT-py.git

    一套由PyTorch实现的机器翻译系统。

    4.Deal or No Deal? End-to-End Learning for Negotiation Dialogues

    https://github.com/facebookresearch/end-to-end-negotiator.git

    Facebook AI Research 论文《Deal or No Deal? End-to-End Learning for Negotiation Dialogues》的 PyTorch 实现。

    5.Attention is all you need: A Pytorch Implementation

    https://github.com/jadore801120/attention-is-all-you-need-pytorch.git

    Google Research 著名论文《Attention is all you need》的PyTorch实现。

    6.Improved Visual Semantic Embeddings

    https://github.com/fartashf/vsepp.git

    一种从图像中检索文字的方法,来自论文:《VSE++: Improved Visual-Semantic Embeddings》。

    7.Reading Wikipedia to Answer Open-Domain Questions

    https://github.com/facebookresearch/DrQA.git

    一个开放领域问答系统DrQA的PyTorch实现。

    8.Structured-Self-Attentive-Sentence-Embedding

    https://github.com/ExplorerFreda/Structured-Self-Attentive-Sentence-Embedding.git

    IBM 与 MILA 发表的《A Structured Self-Attentive Sentence Embedding》的开源实现。

    6 先进视觉推理系统

    1.Visual Question Answering in Pytorch

    https://github.com/Cadene/vqa.pytorch.git

    一个PyTorch实现的优秀视觉推理问答系统,是基于论文《MUTAN: Multimodal Tucker Fusion for Visual Question Answering》实现的。项目中有详细的配置使用方法说明。

    2.Clevr-IEP

    https://github.com/facebookresearch/clevr-iep.git

    Facebook Research 论文《Inferring and Executing Programs for Visual Reasoning》的PyTorch实现,讲的是一个可以基于图片进行关系推理问答的网络。

    7 深度强化学习相关实现

    1.Deep Reinforcement Learning withpytorch & visdom

    https://github.com/onlytailei/pytorch-rl.git

    多种使用PyTorch实现强化学习的方法。

    2.Value Iteration Networks in PyTorch

    https://github.com/onlytailei/Value-Iteration-Networks-PyTorch.git

    Value Iteration Networks (VIN) 的PyTorch实现。

    3.A3C in PyTorch

    https://github.com/onlytailei/A3C-PyTorch.git

    Adavantage async Actor-Critic (A3C) 的PyTorch实现。

    8 通用神经网络高级应用

    1.PyTorch-meta-optimizer

    https://github.com/ikostrikov/pytorch-meta-optimizer.git

    论文《Learning to learn by gradient descent by gradient descent》的PyTorch实现。

    2.OptNet: Differentiable Optimization as a Layer in Neural Networks

    https://github.com/locuslab/optnet.git

    论文《Differentiable Optimization as a Layer in Neural Networks》的PyTorch实现。

    3.Task-based End-to-end Model Learning

    https://github.com/locuslab/e2e-model-learning.git

    论文《Task-based End-to-end Model Learning》的PyTorch实现。

    4.DiracNets

    https://github.com/szagoruyko/diracnets.git

    不使用“Skip-Connections”而搭建特别深的神经网络的方法。

    5.ODIN: Out-of-Distribution Detector for Neural Networks

    https://github.com/ShiyuLiang/odin-pytorch.git

    这是一个能够检测“分布不足”(Out-of-Distribution)样本的方法的PyTorch实现。当“true positive rate”为95%时,该方法将DenseNet(适用于CIFAR-10)的“false positive rate”从34.7%降至4.3%。

    6.Accelerate Neural Net Training by Progressively Freezing Layers

    https://github.com/ajbrock/FreezeOut.git

    一种使用“progressively freezing layers”来加速神经网络训练的方法。

    7.Efficient_densenet_pytorch

    https://github.com/gpleiss/efficient_densenet_pytorch.git

    DenseNets的PyTorch实现,优化以节省GPU内存。

    感觉微信文章查询不方便?

    微信公众号后台回复:资源

    可以找到本文PDF和HTML版的下载链接哦!

    (通过连接找到资料下载即可)

    自学容易走弯路?

    快来跟张江教授学习深度学习&PyTorch吧!

    _________________________________________________________________________________________________________________________________________________
    每一个不曾起舞的日子,都是对生命的辜负。
    But it is the same with man as with the tree. The more he seeks to rise into the height and light, the more vigorously do his roots struggle earthward, downward, into the dark, the deep - into evil.
    其实人跟树是一样的,越是向往高处的阳光,它的根就越要伸向黑暗的地底。----尼采

    展开全文
  • 本书还对于机器视觉进行了前导性的探究,重点介绍了两种在工程技术领域非常流行的分类技术——人工神经网络(ANN)和支持向量机(SVM),并在配套给出的识别案例中直击光学字符识别(OCR)和人脸识别两大热点问题。...
  • 本书还对于机器视觉进行了前导性的探究,重点介绍了两种在工程技术领域非常流行的分类技术——人工神经网络(ANN)和支持向量机(SVM),并在配套给出的识别案例中直击光学字符识别(OCR)和人脸识别两大热点问题。...
  • 摘要:当前数据挖掘技术使用最为广泛的莫过于文本挖掘领域,包括领域本体构建、短文本实体抽取以及代码的语义级构件方法研究。常用的数据挖掘功能包括分类、聚类、预测和关联四大模型。本文针对四大模型...
  • 数字水印原理与技术

    热门讨论 2012-11-27 15:09:56
    《数字水印原理与技术》从技术角度对数字水印的基本状况、理论、主流算法、性能、检测技术和典型应用进行了全面介绍,对水印研究应用中遇到的主要问题进行了系统阐述,并辅以丰富的例子,还在附录部分给出了主要算法...
  • 本书还对于机器视觉进行了前导性的探究,重点介绍了两种在工程技术领域非常流行的分类技术——人工神经网络(ANN)和支持向量机(SVM),并在配套给出的识别案例中直击光学字符识别(OCR)和人脸识别两大热点问题。...
  • 本书还对于机器视觉进行了前导性的探究,重点介绍了两种在工程技术领域非常流行的分类技术——人工神经网络(ANN)和支持向量机(SVM),并在配套给出的识别案例中直击光学字符识别(OCR)和人脸识别两大热点问题。...
  • 本书还对于机器视觉进行了前导性的探究,重点介绍了两种在工程技术领域非常流行的分类技术——人工神经网络(ANN)和支持向量机(SVM),并在配套给出的识别案例中直击光学字符识别(OCR)和人脸识别两大热点问题。...
  • 本书还对于机器视觉进行了前导性的探究,重点介绍了两种在工程技术领域非常流行的分类技术——人工神经网络(ANN)和支持向量机(SVM),并在配套给出的识别案例中直击光学字符识别(OCR)和人脸识别两大热点问题。...
  • 摘要: 本文对胶囊网络进行了非技术性的简要概括,分析了其两个重要属性,之后针对MNIST手写体数据集上...从图像分类到自然语言处理,研究人员正在对不同领域建立深层神经网络模型并取得相关的突破性成果。但是随着...
  • 本书还对于机器视觉进行了前导性的探究,重点介绍了两种在工程技术领域非常流行的分类技术——人工神经网络(ANN)和支持向量机(SVM),并在配套给出的识别案例中直击光学字符识别(OCR)和人脸识别两大热点问题。...
  • 本书还对于机器视觉进行了前导性的探究,重点介绍了两种在工程技术领域非常流行的分类技术——人工神经网络(ANN)和支持向量机(SVM),并在配套给出的识别案例中直击光学字符识别(OCR)和人脸识别两大热点问题。...
  • 这项研究调查了高级信号处理和深度学习技术在PQ障碍信号的模式识别和分类中的用途。 为此,带有滤波器组的连续小波变换用于从具有电压干扰的信号中生成具有时频表示的二维图像。 这项工作旨在使用卷积神经网络(CN
  • 下载频道>资源分类>开发技术>Java>Spring技术内幕:深入解析Spring架构设计原理 1/2 Spring技术内幕:深入解析Spring架构设计原理 1/2资源大小:59MB 上传日期:2011-11-15 资源积分:5分 下载次数:30 上 传 者...
  • 这是一种监督分类技术。 为每个班级选择合适的培训领域。 应该使用训练区域对神经网络进行训练。 这里.CSV(逗号分隔值)文件用于存储训练区域(下载“5_class_test.csv”)和相应的类。 训练完神经网络后,整个...
  • kris kaspersky是黑客破译、反汇编与代码优化技术的专栏作家。他一直致力于研究安全与系统程序设计方面的问题,内容涉及编译器开发、优化技术、安全机制研究、实时操作系统内核的创建以及反病毒程序的设计等多个领域...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 343
精华内容 137
关键字:

技术领域分类与代码