생성형AI

SciBERT

도그사운드 2024. 10. 8. 14:45

과학관련 자료에 특화된 BERT

 

 

SciBERT : 과학문헌에 특화된 언어모델

출처가 앨런AI

 

Abstract

BERT를 활용하여 만든 SCIBERT로 시퀀스 태깅(사람, 장소 등 레이블링), 문장 분류, 의존구문 분석을 수행했다. 코드는 https://github. com/allenai/scibert/에서 확보 가능하다.

 

Vocabulary

BertWordPiece를 사용했기에 같은 방식으로 활용했다.

SentencePiece 라이브러리를 활용해서 WordPiece 사전을 과학문헌과 관련하여 SciVOCAB 형태로 만들어 냈다. 케이스와 언케이스로 30K개를 만들어서 BaseVOCAB와 비교가능한 사이즈로 만들었다. 두 사전에서 공통된 토큰은 42%였다.

 

Corpus

SciBERT1.14M개의 논문을 Semant Scholar에서 확보하여 학습시켰다. 18%는 컴퓨터 과학, 82%는 다양한 생명공학 영역의 자료로 구성되어 있다. abstract만이 아니라 전체 문헌이 사용되었다. 논문당 평균 길이는 154개 센텐스로서 2,769개의 토큰이었다. 코퍼스 사이즈는 전에 3.17B 토큰이 활용되었다. 센텐스는 ScispaCy(사이스페이시)를 활용했다. 과학 텍스트에 최적화 되어 있다.

 

SentenPiece 라이브러리

https://github.com/google/sentencepiece

 

GitHub - google/sentencepiece: Unsupervised text tokenizer for Neural Network-based text generation.

Unsupervised text tokenizer for Neural Network-based text generation. - google/sentencepiece

github.com

 

 

scispacy 라이브러리 이것도 엘런AI에서 만든거라네

https://github.com/allenai/SciSpaCy

 

GitHub - allenai/scispacy: A full spaCy pipeline and models for scientific/biomedical documents.

A full spaCy pipeline and models for scientific/biomedical documents. - allenai/scispacy

github.com

 

 

주요 작업은 다음과 같은 순서로 처리함

작업 1 : NER

작업 2 : PICO Extraction(PICO)

작업 3 : Text Classification(CLS)

작업 4 : Relation Classification(REL)

작업 5 : Dependency Parsing(DEP)

PICONER처럼 시퀀스 레이블링을 해주는 작업인데 Participants, Interventions, Comparision로 확대되어 있다고 보면 되고 의료실험 도메인에서 나온 방법임

REL은 텍스트 분류의 특수 방법으로 두개의 서로 다른 엔티티에서 예측해주는 방법

 

데이터셋

사용된 데이터넷은 EBM-NLP(의료실험 영역에서 PICO 적용), PICO, SciERC(컴퓨터 과학쪽 논문의 abstract를 엔티니와 관계로 분류), ACL-ARC SciCite(이 둘은 과학논문에서 의도를 비교, 확장 등으로 레이블링)

 

 

SOTA : state of the art 당시 기준으로 최상위를 기록한 모델들의 결과물

이 자료만을 보았을때는 SciBERT가 최상위 성능을 능가한 경우가 많다.

 

 

 

BioBERTSciBERT처럼 특정 영역에 특화된 언어모델, 둘의 차이가 그렇게 크게 나타나지 않는걸 보면 특화된 모델들이 이런 성능을 보여주는 듯

PICO : Population, Intervention, Comparison, Outcome로 정보를 추출하는 작업. 의학 쪽에서 주로 사용되는 작업

NER : 사람, 조직, 위치 등을 인식하는 작업

CLS : 텍스트를 정치, 스포츠, 경제 등의 범주로 분류하는 작업

REL : 두 개체간의 관계 분류, John works at Microsoft에서 JohnMicrosoft의 관계를 고용으로 분류하는 경우를 예로 볼 수 있음

DEP : 단어들간의 구문적 관계 파악

 

Pretrained BERT Variants

버트를 어떻게 변형했는가?

버트의 원본코드 https://github.com/google-research/ bert

SciBERT 원본 버트코드를 활용해서 SciBERT를 훈련시켰다. SciBERT를 훈련시킬때는 4개의 서로 다른 버전을 사용했는데 첫번째 caseduncased, 두번째 BaseVOCABSCIVOCAB로 만들었다.

두개의 모델은 BERT의 사전을 사용하고 다른 두 모델은 SCI 용으로 만들어졌다.

장문의 경우 버트가 느릴 수 있음. 그래서 원본 BERT와 비교해서 최대 문장길이를 128개의 토큰으로 제한함

TPU v3 8코어의 경우 12k개의 훈련셋에 대해 1주일이 소요되었다고 함

BERT코드는 pytorch로 활용

https://github.com/huggingface/transformers

Casing NER을 위해 cased 모델을 사용

 

Finetuning BERT

CLSREL의 경우 선형분류 레이어를 사용하고, 시퀀스 레이블링은(NER, PICO)는 소프트맥스 레이어에 입력했다. DEP stacked BiLSTM 대신에 종속성 태그를 붙여서 사이즈 100 아크 임베딩으로 진행했다.

드롭아웃은 0.1, 로스함수는 아담, 옵티멀은 크로스 엔트로피가 사용, 2~5 에폭, 배치사이즈32, 러닝레이트는 5e-6, 1e-5, 2e-5, 5e-5로 진행, slanted triangular 스케쥴(선형 감소 후에 선형 증가, 요건 모르겠음)

가장 피팅이 잘 된건 2~4에폭, 2e-5 러닝레이트