인간을위한 NLP. 빠르고 사용하기 쉬운 NLP (Natural Language Processing) 툴킷으로 NLP에 대한 상상력을 만족합니다.
→ 영어 버전

기본 소개 • 설치 • 시작 가이드 • 세부 튜토리얼 • 명예 • 코드 기여 방법 • 따옴표 • 승인
Fancy-NLP는 Tencent의 제품 광고 전략 팀이 구축 한 제품 초상화를 구축하기위한 텍스트 지식 마이닝 도구입니다. 엔티티 추출, 텍스트 분류 및 텍스트 유사성 일치와 같은 다양한 일반적인 NLP 작업을 지원합니다. 업계에서 일반적으로 사용되는 프레임 워크와 비교할 때 사용자는 빠른 기능 구현을 구현할 수 있습니다. 고급 사용자의 모델의 깊은 사용자 정의를 충족 할뿐만 아니라 일반 사용자가 미리 훈련 된 모델을 빠르게 사용하여 기능적 실습을 신속하게 연습 할 수 있습니다. 현재 제품 광고 비즈니스 시나리오 에서이 도구를 사용하여 대규모 제품 데이터의 특성을 빠르게 탐색하여 광고 제품 권장 사항과 같은 모듈을 지원합니다.
이 프로젝트의 원래 의도는 사용하기 쉬운 NLP 도구 세트를 제공하는 것입니다.이 도구는 사용 시나리오를 직접 목표로하고 NLP 작업에 대한 사용자의 요구를 충족 시켜서 사용자가 복잡한 전처리 및 기타 중간 프로세스를 처리 할 필요가 없으며 입력 자연 언어 텍스트에 대한 여러 NLP 작업을 직접 완료 할 필요가 없습니다.
공상은 무엇입니까? 이름이 지정된 엔티티 인식 (NER), 텍스트 분류 및 텍스트 유사성 매칭 (SPM)과 같은 많은 현재 NLP 작업의 경우, 대부분의 도구는 모델 교육 및 평가를 선호하도록 설계되었습니다. 일반 사용자가 실제 비즈니스 시나리오에 이러한 모델을 적용하려는 경우 복잡한 사전 프로세스 및 개요 구성을 수행 할 필요가 있습니다. 따라서 사용자가 예상하는 프로세스와 일치하지 않기 때문에 종종 귀하의 상상력과 일치하지 않습니다. Fancy-NLP에서 NLP 작업의 각 링크 중에서 모델을 실제 수요 시나리오에 효율적으로 적용합니다.
Fancy-NLP 는 현재 Python 3 환경에서 사용하도록 지원되며 Python 3.6에서 완전히 테스트되었습니다. TensorFlow 2.X 는 현재 버전에 완전히 의존합니다. 모듈 호환성에 대한 우려가있는 경우 VirtualEnV를 사용 하여이 도구를 사용하기 위해 가상 환경을 만드는 것이 좋습니다.
Fancy-NLP는 pip 사용하여 한 클릭 설치를 지원합니다.
pip install fancy-nlp시작 가이드에서는 미리 훈련 된 모델을 사용하여 Fancy-NLP의 기본 기능을 빠르게 이해하고 경험할 수 있습니다.
참고 : 사용자가 직접 사용할 수 있도록 여러 시나리오 (다른 주석이 달린 데이터)의 엔티티 인식 모델을 계속 최적화합니다. 관련 데이터 세트가있는 경우 문제에 대한 긍정적 인 피드백을 제공 할 수 있습니다.
Fancy-NLP의 현재 버전은 기본적으로 MSRA NER 서브 세트 데이터를 사용하여 교육 된 NER 모델을로드 할 수 있습니다. 중국어 텍스트의 조직 구조 (ORG), 위치 (LOC) 및 사람 (당) 개체를 식별 할 수 있습니다. 기본적으로로드 된 기본 모델은 사용자가 직접 경험하는 것입니다. 자신의 사용자 정의 모델을 직접 사용하려면 후속 세부 튜토리얼 의 소개를 참조하여 엔티티 추출 시스템을 구축 할 수 있습니다.
> >> from fancy_nlp . applications import NER
> >> ner_app = NER ()위의 코드를 처음 실행하면 사전 훈련 된 NER 모델이 클라우드에서 다운로드됩니다.
> >> ner_app . analyze ( '同济大学位于上海市杨浦区,校长为陈杰' )
{ 'text' : '同济大学位于上海市杨浦区,校长为陈杰' ,
'entities' : [
{ 'name' : '同济大学' ,
'type' : 'ORG' ,
'score' : 1.0 ,
'beginOffset' : 0 ,
'endOffset' : 4 },
{ 'name' : '上海市' ,
'type' : 'LOC' ,
'score' : 1.0 ,
'beginOffset' : 6 ,
'endOffset' : 9 },
{ 'name' : '杨浦区' ,
'type' : 'LOC' ,
'score' : 1.0 ,
'beginOffset' : 9 ,
'endOffset' : 12 },
{ 'name' : '陈杰' ,
'type' : 'PER' ,
'score' : 1.0 ,
'beginOffset' : 16 ,
'endOffset' : 18 }]} > >> ner_app . restrict_analyze ( '同济大学位于上海市杨浦区,校长为陈杰' )
{ 'text' : '同济大学位于上海市杨浦区,校长为陈杰' ,
'entities' : [
{ 'name' : '同济大学' ,
'type' : 'ORG' ,
'score' : 1.0 ,
'beginOffset' : 0 ,
'endOffset' : 4 },
{ 'name' : '杨浦区' ,
'type' : 'LOC' ,
'score' : 1.0 ,
'beginOffset' : 9 ,
'endOffset' : 12 },
{ 'name' : '陈杰' ,
'type' : 'PER' ,
'score' : 1.0 ,
'beginOffset' : 16 ,
'endOffset' : 18 }]} >>> ner_app.predict('同济大学位于上海市杨浦区,校长为陈杰')
['B-ORG',
'I-ORG',
'I-ORG',
'I-ORG',
'O',
'O',
'B-LOC',
'I-LOC',
'I-LOC',
'B-LOC',
'I-LOC',
'I-LOC',
'O',
'O',
'O',
'O',
'B-PER',
'I-PER']
Fancy-NLP는 현재 게시 된 중국 뉴스 타이틀 분류 데이터 세트에서 훈련 된 텍스트 분류 모델과 함께 기본적으로로드됩니다. 뉴스 제목 텍스트에 속하는 뉴스 범주를 예측할 수 있습니다.
> >> from fancy_nlp . applications import TextClassification
> >> text_classification_app = TextClassification ()위의 프로그램을 처음 실행하면 사전 훈련 된 모델이 클라우드에서 다운로드됩니다.
> >> text_classification_app . predict ( '苹果iOS占移动互联网流量份额逾65% 位居第一' )
'科技' > >> text_classification_app . analyze ( '苹果iOS占移动互联网流量份额逾65% 位居第一' )
( '科技' , 0.9996544 )Fancy-NLP는 현재 게시 된 Webank 고객 서비스 질문 일치 데이터 세트에서 훈련 된 텍스트 유사성 일치 모델에서 기본적으로로드됩니다.이 텍스트 쌍에 대해 동일한 의도를 표현하는지 여부를 예측할 수 있습니다.
> >> from fancy_nlp . applications import SPM
> >> spm_app = SPM ()위의 프로그램을 처음으로 실행하면 사전 훈련 된 텍스트 유사성 모델이 클라우드에서 다운로드됩니다.
> >> spm_app . predict (( '未满足微众银行审批是什么意思' , '为什么我未满足微众银行审批' ))
'1' 예측 결과에서 1 동일한 의도 또는 유사한 텍스트를 나타내고 0 다른 의도 또는 다른 텍스트를 나타냅니다.
> >> spm_app . analyze (( '未满足微众银行审批是什么意思' , '为什么我未满足微众银行审批' ))
( '1' , array ([ 1.6599501e-09 , 1.0000000e+00 ], dtype = float32 ))자세한 자습서 에서는 Fancy-NLP를 사용하여 고유 한 데이터 세트를 사용하여 사용자 정의 시나리오를 충족하는 사용자 정의 모델을 구축하고 Fancy-NLP의 인터페이스를보다 포괄적으로 이해하는 방법을 배울 수 있습니다.
다음 튜토리얼을 완전히 경험하려면 사용하는 데이터 세트 및 버트 모델을 다운로드해야합니다.
86geqk7e6rb7 다운로드 된 데이터를 examples 디렉토리와 동일한 수준으로 이동할 수 있으며 최종 디렉토리 구조는 다음과 같습니다.
.
├── datasets
│ ├── ner
│ │ └── msra
│ │ ├── test_data
│ │ └── train_data
│ ├── spm
│ │ └── webank
│ │ ├── BQ_dev.txt
│ │ ├── BQ_test.txt
│ │ └── BQ_train.txt
│ └── text_classification
│ └── toutiao
│ ├── toutiao_cat_data.txt
│ └── toutiao_label_dict.txt
├── examples
│ ├── bert_combination.py
│ ├── bert_fine_tuning.py
│ ├── bert_single.py
│ ├── ner_example.py
│ ├── spm_example.py
│ └── text_classification_example.py
└── pretrained_embeddings
└── chinese_L-12_H-768_A-12
├── bert_config.json
├── bert_model.ckpt.data-00000-of-00001
├── bert_model.ckpt.index
├── bert_model.ckpt.meta
└── vocab.txt
따라서 샘플 프로그램을 직접 실행할 수 있습니다. 예를 들어, python examples/ner_example.py .
우리는 여전히 위에서 언급 한 MSRA NER 서브 세트 데이터를 사용하여 기존 데이터 세트를 사용하여 자체 엔터티 인식 모델을 훈련시키는 방법을 소개합니다. 다음 코드 스 니펫의 전체 버전은 examples/ner_example.py 를 참조하십시오.
Fancy-NLP에서 엔티티 인식 응용 프로그램은 표준 NER 데이터 세트 형식의 사용을 지원하고 각 문자를 식별하고 해당 태그를 t 로 구분하고 문장은 빈 줄로 분리됩니다. 태그 형식은 BIO 및 BIOES 와 같은 일반적인 표준 형식 일 수 있습니다.
Fancy-NLP에서 제공하는 인터페이스를 사용하여 데이터 세트를 직접로드하여 모델에서 요구하는 형식으로 처리 할 수 있습니다.
from fancy_nlp . applications import NER
ner_app = NER ( use_pretrained = False )
from fancy_nlp . utils import load_ner_data_and_labels
train_data , train_labels = load_ner_data_and_labels ( 'datasets/ner/msra/train_data' )
valid_data , valid_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' ) load_ner_data_and_labels NER 데이터 세트의 효과적인로드를 구현합니다. 데이터의 파일 경로 (교육 세트, 유효성 검사 세트 또는 테스트 세트)를 직접 사용하여 매개 변수로로드 할 수 있습니다. 테스트 세트는 검증 세트로 사용됩니다. 실제 작업에서는 귀중한 테스트 평가 결과를 얻기 위해 자체 독립적 인 검증 세트 및 테스트 세트가 있어야합니다.
유효한 데이터를 얻은 후 NER 애플리케이션은 모델을 직접 교육하기 시작할 수 있습니다.
checkpoint_dir = 'pretrained_models'
model_name = 'msra_ner_bilstm_cnn_crf'
ner_app . fit ( train_data , train_labels , valid_data , valid_labels ,
ner_model_type = 'bilstm_cnn' ,
char_embed_trainable = True ,
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = checkpoint_dir ,
model_name = model_name ,
load_swa_model = True ) NER 응용 프로그램의 fit 인터페이스의 경우 이전에 처리 된 교육 세트 및 검증 세트 샘플을 전달해야합니다. 나머지 매개 변수의 의미는 다음과 같습니다.
ner_model_type : 사용할 모델 이름을 나타냅니다. 이 예에서는 bilstm_cnn 모델이 사용됩니다.char_embed_trainable : 단어 벡터 레이어가 미세 조정이 될 수 있는지 여부. 이 예에서는 True 로 설정되어 미세 조정이 수행 될 수 있음을 나타냅니다.callback_list : 사용해야하는 콜백 함수의 이름입니다. 이 예제에 사용 된 콜백 함수는 다음과 같습니다.modelcheckpoint : 모델 체크 포인트 기능을 사용하십시오. 각 반복 후에는 훈련 된 모델을 저장하십시오.earlystopping : 초기 정지 기능을 사용하십시오. N 라운드 반복 후 모델의 성능이 개선되지 않으면 (기본 N = 5), 훈련이 종료됩니다.swa : SWA는 확률 론적 중량 평균화를 의미하며, 이는 모델의 성능을 효과적으로 향상시킬 수있는 일반적인 모델 통합 전략입니다. 자세한 내용은 원본 논문의 소개를 참조하십시오.checkpoint_dir : 모델 파일을 저장하는 디렉토리 경로;model_name : 모델 파일의 파일 이름;load_swa_model : 모델을 훈련 한 후 SWA 모델 무게를로드할지 여부. 여기에서 True 로 설정하여 SWA 모델의 사용을 나타냅니다. test_data , test_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . score ( test_data , test_labels ) 여기에서 load_ner_data_and_labels 여전히 테스트 세트 데이터를 처리하는 데 사용됩니다. 유효한 데이터 형식을 얻은 후 NER 애플리케이션의 score 인터페이스를 사용하여 테스트 세트에서 모델의 점수를 얻으십시오.
모델을 훈련 한 후, 다른 외부 애플리케이션에서 멋진 NLP 훈련 된 모델의 사용을 용이하게하기 위해 작업에 필요한 모든 모델 관련 파일을 저장해야합니다.
import os
ner_app . save (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' )) NER 애플리케이션의 save 인터페이스는 모델의 구조 파일 (JSON), 웨이트 파일 (HDF5) 및 전처리 관련 결과 (피클)를 지속하는 데 사용될 수 있습니다.
modelcheckpoint 함수를 통해 가중치 파일이 저장 되었기 때문에 일반적으로 사양을 표시 할 필요가 없습니다. ner_app . load (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' ),
weights_file = os . path . join ( checkpoint_dir , f' { model_name } _swa.hdf5' )) 현재 ner_app 이미 샘플을 예측할 수있는 기능이 있으며 소개 안내서 에 언급 된 관련 예측 기능을 완료 할 수 있습니다. 예를 들어, analyze , restrict_analyze .
우리는 여전히 위에서 언급 한 중국 뉴스 타이틀 분류 데이터 세트를 예제로 사용하여 기존 데이터 세트를 사용하여 자체 텍스트 분류 모델을 훈련시키는 방법을 소개합니다. 다음 코드 스 니펫의 전체 버전은 examples/text_classification_example.py 를 참조하십시오.
Fancy-NLP에서 텍스트 분류 애플리케이션은 원본 텍스트를 사용하여 고정 구분자로 분리 된 데이터 세트 형식을 지원합니다. 텍스트 분류 작업과 무관 한 중복 열을 가질 수 있습니다. 레이블 열과 입력 텍스트 열이 통합 된 고정 위치에 있는지 확인하면됩니다.
또한 분류 태그의 경우 태그 및 태그 ID의 매핑 파일도 필요합니다. 두 열로 구성됩니다. 첫 번째 열은 데이터 세트의 태그의 원래 이름, 일반적으로 일부 인코딩 된 ID; 두 번째 열은 태그의 원래 이름에 해당하는 읽을 수있는 이름입니다. 이 파일의 서신은 모델을 예측할 때 읽기 쉬운 레이블 이름을 직접 출력하는 데 사용됩니다.
Fancy-NLP에서 제공하는 인터페이스를 사용하여 데이터 세트를 직접로드하여 모델에서 요구하는 형식으로 처리 할 수 있습니다.
from fancy_nlp . applications import TextClassification
text_classification_app = TextClassification ( use_pretrained = False )
data_file = 'datasets/text_classification/toutiao/toutiao_cat_data.txt'
from fancy_nlp . utils import load_text_classification_data_and_labels
train_data , train_labels , valid_data , valid_labels , test_data , test_labels =
load_text_classification_data_and_labels ( data_file ,
label_index = 1 ,
text_index = 3 ,
delimiter = '_!_' ,
split_mode = 2 ,
split_size = 0.3 ) load_ner_data_and_labels 텍스트 분류 데이터 세트의 효과적인로드를 구현합니다. 데이터의 파일 경로 (교육 세트, 유효성 검사 세트 또는 테스트 세트)를 직접 사용하여 매개 변수로로드 할 수 있습니다. 전체 데이터는 여기서 훈련 세트, 검증 세트 및 테스트 세트를 나누는 데 사용됩니다. 데이터 파일 외에도 위의 나머지 매개 변수의 특정 의미는 다음과 같습니다.
label_index : 데이터 파일에서 분류 태그의 위치 (위치 번호는 0부터 시작);text_index : 데이터 파일에 분류 할 텍스트의 위치;delimiter : 데이터 파일의 열 사이의 분리기;split_mode : 매개 변수를 변경하여 원래 데이터를 나누는 방법을 나타냅니다. 안에:split_size : 데이터 분할 비율. split_mode=1 인 경우, split_size 비율을 원래 데이터에서 나누는 데이터가 확인 세트로 사용됨을 의미합니다. split_mode=2 인 경우, split_size 비율을 원래 데이터에서 나누는 데이터는 확인 세트 및 테스트 세트의 합으로 사용되며, 확인 세트 및 테스트 세트의 비율은 각 계정으로 반으로 계정됩니다. 유효한 데이터를 얻은 후 텍스트 분류 응용 프로그램은 모델을 직접 교육하기 시작할 수 있습니다.
dict_file = 'datasets/text_classification/toutiao/toutiao_label_dict.txt'
model_name = 'toutiao_text_classification_cnn'
checkpoint_dir = 'pretrained_models'
text_classification_app . fit (
train_data , train_labels , valid_data , valid_labels ,
text_classification_model_type = 'cnn' ,
char_embed_trainable = True ,
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = checkpoint_dir ,
model_name = model_name ,
label_dict_file = dict_file ,
max_len = 60 ,
load_swa_model = True ) 텍스트 분류 응용 프로그램의 fit 인터페이스의 경우 이전에 처리 된 교육 세트 및 검증 세트 샘플을 전달해야합니다. 나머지 매개 변수의 의미는 다음과 같습니다.
text_classification_model_type : 사용할 모델 이름을 나타냅니다. 이 예에서는 cnn 모델이 사용됩니다.char_embed_trainable : 단어 벡터 레이어가 미세 조정이 될 수 있는지 여부. 이 예에서는 True 로 설정되어 미세 조정이 수행 될 수 있음을 나타냅니다.callback_list : 사용해야하는 콜백 함수의 이름입니다. 이 예제에 사용 된 콜백 함수는 다음과 같습니다.modelcheckpoint : 모델 체크 포인트 기능을 사용하십시오. 각 반복 후에는 훈련 된 모델을 저장하십시오.earlystopping : 초기 정지 기능을 사용하십시오. N 라운드 반복 후 모델의 성능이 개선되지 않으면 (기본 N = 5), 훈련이 종료됩니다.swa : SWA는 확률 론적 중량 평균화를 의미하며, 이는 모델의 성능을 효과적으로 향상시킬 수있는 일반적인 모델 통합 전략입니다. 자세한 내용은 원본 논문의 소개를 참조하십시오.checkpoint_dir : 모델 파일을 저장하는 디렉토리 경로;model_name : 모델 파일의 파일 이름;label_dict_file : 두 열로 구성된 레이블 사전 파일 : 첫 번째 열은 데이터 세트의 레이블의 원래 이름, 일반적으로 일부 인코딩 된 ID; 두 번째 열은 레이블의 원래 이름에 해당하는 읽을 수있는 이름입니다.max_len : 입력 텍스트로 유지되는 최대 길이의 경우 해당 길이 이상의 텍스트가 잘립니다.load_swa_model : 모델을 훈련 한 후 SWA 모델 무게를로드할지 여부. 여기에서 True 로 설정하여 SWA 모델의 사용을 나타냅니다. text_classification_app . score ( test_data , test_labels ) 여기에서 텍스트 분류 응용 프로그램의 score 인터페이스를 직접 사용하여 테스트 세트에서 모델의 점수를 얻을 수 있습니다.
모델을 훈련 한 후, 다른 외부 애플리케이션에서 멋진 NLP 훈련 된 모델의 사용을 용이하게하기 위해 작업에 필요한 모든 모델 관련 파일을 저장해야합니다.
import os
text_classification_app . save (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' )) 텍스트 분류 응용 프로그램의 save 인터페이스는 모델의 구조 파일 (JSON), 웨이트 파일 (HDF5) 및 전처리 관련 결과 (피클)를 지속하는 데 사용될 수 있습니다.
modelcheckpoint 함수를 통해 중량 파일이 저장되었으므로 일반적으로 사양을 표시 할 필요가 없습니다. text_classification_app . load (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' ),
weights_file = os . path . join ( checkpoint_dir , f' { model_name } _swa.hdf5' )) 현재 text_classification_app 이미 샘플을 예측할 수있는 기능이 있으며 소개 안내서 에 언급 된 관련 예측 기능을 완료 할 수 있습니다. 예를 들어, predict , analyze .
우리는 여전히 위에서 언급 한 Webank 고객 서비스 질문 일치 데이터 세트를 사용하여 기존 데이터 세트를 사용하여 자체 텍스트 유사성 일치 모델을 교육하는 방법을 소개합니다. 다음 코드 스 니펫의 전체 버전은 examples/spm_example.py 를 참조하십시오.
Fancy-NLP에서 텍스트 유사성 일치 작업 응용 프로그램은 세 가지 열로 구성된 t 로 분리 된 데이터 세트 형식의 원본 텍스트 사용을 지원합니다. 첫 번째 열과 두 번째 열은 각각 텍스트 쌍 세트입니다. 세 번째 열은 샘플 레이블, 1 텍스트 의미론이 비슷하며 0 을 의미하는 것을 의미합니다.
Fancy-NLP에서 제공하는 인터페이스를 사용하여 데이터 세트를 직접로드하여 모델에서 요구하는 형식으로 처리 할 수 있습니다.
from fancy_nlp . applications import SPM
spm_app = applications . SPM ( use_pretrained = False )
train_file = 'datasets/spm/webank/BQ_train.txt'
valid_file = 'datasets/spm/webank/BQ_dev.txt'
from fancy_nlp . utils import load_spm_data_and_labels
train_data , train_labels = load_spm_data_and_labels ( train_file )
valid_data , valid_labels = load_spm_data_and_labels ( valid_file ) load_spm_data_and_labels 텍스트 유사성 일치 데이터 세트의 효과적인로드를 구현합니다. 데이터의 파일 경로 (교육 세트, 유효성 검사 세트 또는 테스트 세트)를 직접 사용하여 매개 변수로로드 할 수 있습니다.
유효한 데이터를 얻은 후 텍스트 유사성 일치 응용 프로그램은 모델을 직접 교육하기 시작할 수 있습니다.
model_name = 'spm_siamese_cnn'
checkpoint_dir = 'pretrained_models'
spm_app . fit ( train_data , train_labels , valid_data , valid_labels ,
spm_model_type = 'siamese_cnn' ,
word_embed_trainable = True ,
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = checkpoint_dir ,
model_name = model_name ,
max_len = 60 ,
load_swa_model = True ) 텍스트 유사성 일치 애플리케이션의 fit 인터페이스의 경우 이전에 처리 된 교육 및 검증 세트 샘플을 전달해야합니다. 나머지 매개 변수의 의미는 다음과 같습니다.
spm_model_type : 사용할 모델 이름을 나타냅니다. 이 예에서 siamese_cnn 모델이 사용됩니다.word_embed_trainable : 단어 벡터 레이어가 미세 조정이 될 수 있는지 여부. 이 예에서는 True 로 설정되어 미세 조정이 수행 될 수 있음을 나타냅니다.callback_list : 사용해야하는 콜백 함수의 이름입니다. 이 예제에 사용 된 콜백 함수는 다음과 같습니다.modelcheckpoint : 모델 체크 포인트 기능을 사용하십시오. 각 반복 후에는 훈련 된 모델을 저장하십시오.earlystopping : 초기 정지 기능을 사용하십시오. N 라운드 반복 후 모델의 성능이 개선되지 않으면 (기본 N = 5), 훈련이 종료됩니다.swa : SWA는 확률 론적 중량 평균화를 의미하며, 이는 모델의 성능을 효과적으로 향상시킬 수있는 일반적인 모델 통합 전략입니다. 자세한 내용은 원본 논문의 소개를 참조하십시오.checkpoint_dir : 모델 파일을 저장하는 디렉토리 경로;model_name : 모델 파일의 파일 이름;max_len : 입력 텍스트로 유지되는 최대 길이의 경우 해당 길이 이상의 텍스트가 잘립니다.load_swa_model : 모델을 훈련 한 후 SWA 모델 무게를로드할지 여부. 여기에서 True 로 설정하여 SWA 모델의 사용을 나타냅니다. test_file = 'datasets/spm/webank/BQ_test.txt'
test_data , test_labels = load_spm_data_and_labels ( test_file )
spm_app . score ( test_data , test_labels ) 여기서 텍스트 유사성 일치 응용 프로그램 score 인터페이스를 직접 사용하여 테스트 세트에서 모델의 점수를 얻을 수 있습니다.
모델을 훈련 한 후, 다른 외부 애플리케이션에서 멋진 NLP 훈련 된 모델의 사용을 용이하게하기 위해 작업에 필요한 모든 모델 관련 파일을 저장해야합니다.
import os
spm_app . save (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' )) 텍스트 유사성 일치 응용 프로그램의 save 인터페이스는 모델의 구조 파일 (JSON), 웨이트 파일 (HDF5) 및 전처리 관련 결과 (피클)를 지속하는 데 사용될 수 있습니다.
modelcheckpoint 함수를 통해 중량 파일이 저장되었으므로 일반적으로 사양을 표시 할 필요가 없습니다. spm_app . load (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' ),
weights_file = os . path . join ( checkpoint_dir , f' { model_name } _swa.hdf5' )) 현재 spm_app 이미 샘플을 예측할 수있는 기능이 있으며 소개 안내서 에 언급 된 관련 예측 기능을 계속 완료 할 수 있습니다. 예를 들어, predict , analyze .
FACNY-NLP는 BERT 모델을 사용하는 다양한 방법을 제공합니다.
Fancy-NLP에서 Bert를 사용하려면 미리 훈련 된 Bert 모델 (예 : Google이 제공하는 중국어 Bert 모델, Baidu가 제공하는 Ernie 모델 및 Harbin Institute of Technology에서 제공하는 Bert-WWM 모델) 만 다운로드하면됩니다. 그런 다음 Bert Model의 어휘 파일, 구성 파일 및 모델 파일의 경로를 관련 응용 프로그램의 fit 메소드로 전달할 수 있습니다. 다음은 엔티티 인식 응용 프로그램의 예입니다. 전체 예제 코드는 examples/bert_fine_tuning.py , examples/bert_single.py 및 examples/bert_combination.py 를 참조하십시오.
버트 모델은 단어 벡터가 아닌 문자 벡터와 함께만 사용할 수 있습니다.
import tensorflow as tf
from fancy_nlp . applications import NER
ner_app = NER ( use_pretrained = False )
from fancy_nlp . utils import load_ner_data_and_labels
train_data , train_labels = load_ner_data_and_labels ( 'datasets/ner/msra/train_data' )
valid_data , valid_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . fit ( train_data , train_labels , valid_data , valid_labels ,
ner_model_type = 'bert' ,
use_char = False ,
use_word = False ,
use_bert = True ,
bert_vocab_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/vocab.txt' ,
bert_config_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_config.json' ,
bert_checkpoint_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_model.ckpt' ,
bert_trainable = True ,
optimizer = tf . keras . optimizers . Adam ( 1e-5 ),
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = 'pretrained_models' ,
model_name = 'msra_ner_bert_crf' ,
load_swa_model = True )위의 코드 스 니펫에서는 다음과 같이 중요합니다.
ner_model_type : 모델 유형을 bert 로 설정합니다.use_char : 문자 수준 벡터를 사용하지 않도록 설정하십시오.use_word : 단어 수준 벡터를 보조 입력으로 사용하지 않도록 설정하십시오.use_bert : BERT 모델을 미세 조정할 때 Bert 입력 만 사용하도록 설정하십시오.bert_vocab_file , bert_config_file , bert_checkpoint_file : Bert 모델 관련 파일의 경로bert_trainable : Bert 모델 매개 변수를 훈련 가능한 상태, 즉 미세 조정으로 설정합니다.optimizer : BERT 모델의 최적화기를 설정하십시오. 버트 모델을 미세 조정할 때 최적화의 학습 속도는 더 작은 수준으로 조정되어야합니다. from fancy_nlp . applications import NER
ner_app = NER ( use_pretrained = False )
from fancy_nlp . utils import load_ner_data_and_labels
train_data , train_labels = load_ner_data_and_labels ( 'datasets/ner/msra/train_data' )
valid_data , valid_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . fit ( train_data , train_labels , valid_data , valid_labels ,
ner_model_type = 'bilstm_cnn' ,
use_char = False ,
use_word = False ,
use_bert = True ,
bert_vocab_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/vocab.txt' ,
bert_config_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_config.json' ,
bert_checkpoint_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_model.ckpt' ,
bert_trainable = False ,
optimizer = 'adam' ,
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = 'pretrained_models' ,
model_name = 'msra_ner_bilstm_cnn_bert_crf' ,
load_swa_model = True )위의 코드 스 니펫에서는 다음과 같이 중요합니다.
ner_model_type : 모델 유형을 bilstm_cnn 으로 설정하고 여기에서 비 베르트 모델을 사용해야합니다.use_char : 문자 수준 벡터를 사용하지 않도록 설정하십시오.use_word : 단어 수준 벡터를 보조 입력으로 사용하지 않도록 설정하십시오.use_bert : Bert 벡터 만 기능 입력으로 사용하도록 설정합니다.bert_vocab_file , bert_config_file , bert_checkpoint_file : Bert 모델 관련 파일의 경로bert_trainable : Bert 모델 매개 변수를 트레인 할 수없는 상태로 설정하면 여기에서 True 로 설정할 수도 있습니다.optimizer : Optimizer를 설정하십시오. BET 모델이 훈련 가능하면 Optimizer의 학습 속도를 더 작은 것으로 조정하는 것이 좋습니다. import tensorflow as tf
from fancy_nlp . applications import NER
ner_app = NER ( use_pretrained = False )
from fancy_nlp . utils import load_ner_data_and_labels
train_data , train_labels = load_ner_data_and_labels ( 'datasets/ner/msra/train_data' )
valid_data , valid_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . fit ( train_data , train_labels , valid_data , valid_labels ,
ner_model_type = 'bilstm_cnn' ,
use_char = True ,
use_word = False ,
use_bert = True ,
bert_vocab_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/vocab.txt' ,
bert_config_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_config.json' ,
bert_checkpoint_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_model.ckpt' ,
bert_trainable = True ,
optimizer = tf . keras . optimizers . Adam ( 1e-5 ),
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = 'pretrained_models' ,
model_name = 'msra_ner_bilstm_cnn_char_bert_crf' ,
load_swa_model = True )위의 코드 스 니펫에서는 다음과 같이 중요합니다.
ner_model_type : 모델 유형을 bilstm_cnn 으로 설정하고 여기에서 비 베르트 모델을 사용해야합니다.use_char : 사용 문자 수준 벡터를 설정하십시오.use_word : 단어 수준 벡터를 보조 입력으로 사용하지 않도록 설정하십시오.use_bert : 단어 벡터와 버트 벡터를 기능 입력으로 결합한 Bert 벡터 사용을 설정합니다.bert_vocab_file , bert_config_file , bert_checkpoint_file : Bert 모델 관련 파일의 경로bert_trainable : Bert 모델 매개 변수를 훈련 가능한 상태로 설정하면 여기에서 False 로 설정할 수도 있습니다.optimizer : Optimizer를 설정하십시오. BET 모델이 훈련 가능하면 Optimizer의 학습 속도를 더 작은 것으로 조정하는 것이 좋습니다. 멋진 NLP 코드 개선에 관심이있는 개발자는 다음 사양을 따라 풀 요청을 제출해야합니다.
관련 연구 과정에서 멋진 NLP를 사용하는 경우 인용 목록에 다음을 추가 할 수 있습니다.
@misc{tencent2019fancynlp,
title={Fancy-NLP},
author={Li Yang and Shiyao Xu and Shijia E},
howpublished={ url {https://github.com/boat-group/fancy-nlp}},
year={2019}
}▴ 위로 돌아갑니다
이 프로젝트는 많은 우수한 오픈 소스 프로젝트, 특히 Keras에서 영감을 얻었습니다. Keras의 슬로건 : 인간을위한 딥 러닝 (Deep Learning)이 말했듯이, 우리는 공상 NLP가 특히 중국 분야에서 인간을위한 NLP가 되기를 바랍니다.