Giter Site home page Giter Site logo

tianchi2020chinesemedicinener's Introduction

Tianchi2020ChineseMedicineNER

2020阿里云天池大数据竞赛-中医药命名实体识别挑战赛

  • 初赛: 0.7680, 排名:35/1682(single model)
  • 复赛: 0.7128, 排名: 20/1682(single model)

核心思路: 利用Machine Reading Comprehension的思路来解决NER问题(思路来源: ACL2020 A Unified MRC Framework for Named Entity Recognition)

数据处理: preprocess.py, 构造(Query, Answer, Context)三元组, 对于较长文本, 采用滑动窗口法处理(等于将长文本拆分成多个短文本, 为了尽可能保持上下文连续性, 后面的每个短文本都会有一部分其前序文本的片段, 具体看构造流程)

模型训练: RoBERTa + Finetune(MRC任务利用BERT解决的最基本的方法), 与参考的那篇论文相比, 我们模型去除了span loss, 因为加了span loss模型都无法训练. 同时我们也测试了focal loss, 但似乎效果并没有提升

个人感悟:玄学比赛(qaq), 复赛我的小伙伴用了很多方法, 但效果不增反降, 最佳的成绩居然还是我们初赛的baseline模型, 炼丹真奇妙

tianchi2020chinesemedicinener's People

Contributors

menghuanlater avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

tianchi2020chinesemedicinener's Issues

您好!关于这个项目请教一些问题?

非常感谢作者开源这个项目!
第一,我使用这个项目用比赛的数据去跑的时候看着loss是没问题的,但是在每一轮验证的时候会如下的错误:
image
然后我打印下s_seq[i][1]的值,发现都小于设置的"threshold": 0.45,导致分母为空获得的值如下截图:
image
第二,我想问下您在设置滑动窗口的时候比如一段话可以使用滑动窗口分为两个segment的话,其中交叉的那部分信息若存在label的话,是没有在第二个segment标记出来吗?
感谢回答!

sequence_dec函数与数据构造的问题

您好,首先非常感谢您能够开源比赛代码!通过阅读您的代码,我收获良多。但是有三个问题想要请教一下:

  1. 关于sequence_dec函数,原始代码是:
 @staticmethod
    def sequence_dec(s_seq, e_seq, q_type, start, end, c_start, distance, context):
        
        ans_index = []
        i_start, i_end = [], []
        for i in range(start, end + 1):
            if s_seq[i][1] > args["threshold"]:
                i_start.append(i)
            if e_seq[i][1] > args["threshold"]:
                i_end.append(i)
        # 然后遍历i_end
        cur_end = -1
        for e in i_end:
            s = [] #以e为end pos的entity的list
            for i in i_start:
                if e >= i >= cur_end and (e - i) <= max_dec_len_map[q_type]:
                    s.append(i)
            max_s = 0.0
            t = None
            for i in s:
                if s_seq[i][1] + e_seq[e][1] > max_s:
                    t = (i, e)
                    max_s = s_seq[i][1] + e_seq[e][1]
            cur_end = e
            if t is not None:
                ans_index.append(t)
        out = []
        for item in ans_index:
            out.append({"type": q_type, "start": distance + item[0] - c_start, "end": distance + item[1] + 1 - c_start,
                        "label": context[item[0]-c_start: item[1]-c_start+1]})
        return out

在这个实现里面,首先选出大于阈值的start_list与end_list,然后去遍历每一个end_idx,这样的话,就针对于flat ner进行解码,并没有考虑nested ner的entity,请问当时为什么会这么做呢?是因为这样做的效果更好吗?
2. 在数据构造方式上,比较疑惑的是:训练集与验证集的构造方式不一样(我指的是通过继承Dataset产生的数据),请问为什么要这么做呢?实际上,训练集与验证集的原始数据格式是一样的,为什么在产生输入到模型的数据格式会不一样?因为如果我构造成一样的,似乎也是可以训练与验证的。是有什么原因吗?
3. 原始的那片论文里面有添加span loss,而您有提到,加入span loss会导致模型无法训练,这个怎么理解呢?因为我也有去看那篇原始的原始的实现,似乎是在数据构造的时候,多了一个span matrix,其shape是:[seq_len,seq_len],然后在模型里面添加了span loss,似乎训练没有问题,您所提到的无法训练指的是:训练太慢了还是真的就没有办法训练?

期待您的回复,祝一切顺利~

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.