이 프로젝트는 다양한 모델 (HMM, CRF, BI-LSTM, BI-LSTM+CRF 포함)을 사용하여 중국 이름 지정 엔티티 인식 문제를 해결하려고 시도합니다. 데이터 세트는 격자 LSTM을 사용하여 논문 ACL 2018 중국 NER에서 수집 된 이력서 데이터를 사용합니다. 데이터 형식은 다음과 같습니다. 그것의 각 줄은 단어와 해당 주석으로 구성됩니다. 주석 세트는 바이오이며 문장은 빈 줄로 분리됩니다.
美 B-LOC
国 E-LOC
的 O
华 B-PER
莱 I-PER
士 E-PER
我 O
跟 O
他 O
谈 O
笑 O
风 O
生 O
이 데이터 세트는 프로젝트 디렉토리의 ResumeNER 폴더에 있습니다.
다음은 네 가지 모델 과이 네 가지 모델의 예측 결과의 정확도입니다 (최선을 다함).
| 흠 | CRF | bilstm | BILSTM+CRF | 앙상블 | |
|---|---|---|---|---|---|
| 리콜 속도 | 91.22% | 95.43% | 95.32% | 95.72% | 95.65% |
| 정확성 | 91.49% | 95.43% | 95.37% | 95.74% | 95.69% |
| F1 점수 | 91.30% | 95.42% | 95.32% | 95.70% | 95.64% |
앙상블의 마지막 열은이 네 가지 모델의 예측 결과를 결합하고 "투표"방법을 사용하여 최종 예측 결과를 얻습니다.
(Ensemble의 세 가지 지표는 Bilstm+Crf만큼 좋지 않습니다. 앙상블 프로세스에서 Bilstm+CRF를 끌어온 다른 세 가지 모델이라고 말할 수 있습니다).
특정 출력의 경우 output.txt 파일을 볼 수 있습니다.
먼저 종속성을 설치하십시오.
pip3 install -r requirement.txt
설치 후 직접 사용하십시오
python3 main.py
모델을 교육하고 평가할 수 있습니다. 평가 모델은 모델의 정확도, 리콜, F1 점수 값 및 혼란 매트릭스를 인쇄합니다. 관련 모델 매개 변수 또는 교육 매개 변수를 수정하려면 ./models/config.py 파일로 설정할 수 있습니다.
교육 후 모델을로드하고 평가하려면 다음 명령을 실행하십시오.
python3 test.py다음은 이러한 모델에 대한 간단한 소개입니다 (Github 웹 페이지는 수학 공식을 잘 지원하지 않으며 공식과 관련된 부분은 정상적으로 표시 될 수 없습니다. 내 블로그는 이러한 모델과 코드에 대한 자세한 소개를 가지고 있습니다).
숨겨진 Markov 모델은 숨겨진 Markov 체인에서 관찰 할 수없는 상태 랜덤 시퀀스를 무작위로 생성 한 다음 각 상태로부터 관찰을 생성하여 관찰 랜덤 시퀀스 (Li Hang 통계 학습 방법)를 생성하는 과정을 설명합니다. 숨겨진 Markov 모델은 초기 상태 분포, 상태 전이 확률 매트릭스 및 관찰 된 확률 매트릭스에 의해 결정됩니다.
이름 지정 엔터티 인식은 본질적으로 서열 레이블 문제로 간주 될 수 있습니다. 명명 된 엔티티 인식의 시퀀스 라벨링 문제를 해결하기 위해 HMM을 사용하는 경우, 우리가 관찰 할 수있는 것은 단어 (관찰 순서)로 구성된 순서이며, 관찰 할 수없는 것은 각 단어에 해당하는 레이블 (상태 시퀀스)입니다.
초기 상태 분포는 각 레이블의 초기화 확률이며, 상태 전이 확률 매트릭스는 특정 레이블에서 다음 레이블로 전송할 확률입니다 (즉, 이전 단어의 레이블이 $ tag_i $ 인 경우 다음 단어의 레이블이 $ tag_j $입니다.
특정 마크에서 특정 단어를 생성 할 확률.
HMM 모델의 훈련 과정은 숨겨진 Markov 모델 (Li Hang의 통계 학습 방법)의 학습 문제에 해당합니다.
실제로, 최대 가능성 방법, 즉 초기 상태 분포, 상태 전이 확률 매트릭스 및 위에서 언급 한 관측 확률 매트릭스에 기초하여 모델의 세 가지 요소를 추정하는 것이다. 모델이 훈련 된 후 모델은 디코딩에 사용됩니다. 즉, 주어진 관찰 순서에 대해 해당 상태 서열을 찾는 것입니다. 주어진 문장에 대한 문장에서 각 단어에 대한 해당 주석을 찾는 것입니다. 이 디코딩 문제의 경우 Viterbi 알고리즘을 사용합니다.
구체적인 자세한 내용은 models/hmm.py 파일을 확인하십시오.
HMM 모델에는 두 가지 가정이 있습니다. 하나는 출력 관찰 값이 엄격하게 독립적이며, 다른 상태는 현재 상태가 상태 전환 동안 이전 상태와 관련이 있다는 것입니다. 즉, 명명 엔터티 인식 시나리오에서 흠은 관찰 된 문장의 각 단어가 서로 독립적이며 현재 순간의 레이블은 이전 모멘트의 레이블과 관련이 있다고 생각합니다. 그러나 실제로, 이름 지정 엔티티 인식은 종종 말하기, 단어 문맥 등의 일부와 같은 더 많은 기능이 필요합니다. 동시에, 현재 순간의 레이블은 이전 순간의 레이블과 다음 순간의 레이블과 관련되어야합니다. 이 두 가정이 존재하기 때문에 HMM 모델이 지명 된 엔티티 인식의 문제를 해결하는 데 결함이 있음이 분명합니다.
조건부 임의의 필드는 관찰 사이의 의존성을 표현할 수있을뿐만 아니라 현재 관찰과 이전 및 후속 상태 사이의 복잡한 의존성을 나타내며, 이는 HMM 모델이 직면 한 문제를 효과적으로 극복 할 수 있습니다.
조건부 랜덤 필드를 설정하려면 먼저 피처 함수 세트를 정의해야하며, 세트의 각 기능 함수는 주석 시퀀스를 입력 및 추출 된 기능을 출력으로 가져옵니다. 함수 세트가 다음이라고 가정합니다.

여기서 $ x = (x_1, ..., x_m) $는 관찰 순서를 나타내고 $ s = (s_1, ......, s_m) $는 상태 시퀀스를 나타냅니다. 그런 다음 조건부 랜덤 필드는 로그 선형 모델을 사용하여 주어진 관찰 순서 하에서 상태 서열의 조건부 확률을 계산합니다.

여기서 $ s^{ '} $는 가능한 모든 상태의 시퀀스이고 $ w $는 조건부 임의의 필드 모델의 매개 변수이며 각 기능 함수의 가중치로 간주 될 수 있습니다. CRF 모델의 교육은 실제로 매개 변수 $ w $의 추정입니다. 우리가 $ n $ 표시 된 데이터 $ {(x^i, s^i)} _ {i = 1}^n $를 가지고 있다고 가정합니다.
그런 다음 로그-원시 기능의 정규화 형태는 다음과 같습니다.

그런 다음 최적의 매개 변수 $ w^*$는 다음과 같습니다.

모델 교육이 완료된 후 주어진 관찰 시퀀스 $ x $에 대해 해당 최적 상태 시퀀스가 다음에는 있어야합니다.

디코딩시 HMM과 유사하며 Viterbi 알고리즘도 사용할 수 있습니다.
자세한 내용은 models/crf.py 파일을 확인하십시오.
확률 그래프 모델을 기반으로하는 위의 두 가지 방법 외에도 LSTM은 종종 서열 레이블 문제를 해결하는 데 사용됩니다. HMM 및 CRF와 달리 LSTM은 신경망의 강력한 비선형 피팅 능력에 의존합니다. 훈련하는 동안, 샘플은 고차원 공간에서 복잡한 비선형 변환을 통해 학습 한 다음이 기능을 사용하여 지정된 샘플에 대한 각 토큰의 주석을 예측합니다. 아래는 양방향 LSTM을 사용한 시퀀스 주석 회로도입니다 (양방향은 시퀀스 간의 종속성을 더 잘 포착 할 수 있음).

양방향 LSTM을 기반으로 한 시퀀스 라벨링 모델 구현은 models/bilstm.py 파일을 볼 수 있습니다.
LSTM의 장점은 양방향 설정을 통해 관측 시퀀스 (입력 단어) 간의 의존성을 배울 수 있다는 것입니다. 훈련 과정에서 LSTM은 대상 (예 : 엔티티 식별 엔티티)에 기초하여 관측 시퀀스의 특성을 자동으로 추출 할 수 있지만, 단점은 상태 서열 (출력 레이블) 간의 관계를 배울 수 없다는 것입니다. 이름 지정 엔터티 인식 작업에는 레이블 사이에 특정 관계가 있음을 알아야합니다. 예를 들어, B 레이블 (엔티티의 시작을 나타내는)은 다른 B 레이블이 뒤 따르지 않습니다. 따라서 LSTM이 NER과 같은 시퀀스 라벨링 작업을 해결하면 복잡한 기능 엔지니어링을 제거 할 수 있지만 라벨링 컨텍스트를 배울 수 없다는 단점도 있습니다.
반대로 CRF의 장점은 암시 적 상태를 모델링하고 상태 서열의 특성을 배울 수 있다는 것입니다. 그러나 그 단점은 시퀀스 기능의 수동 추출이 필요하다는 것입니다. 따라서 일반적인 접근 방식은 LSTM 뒤에 다른 CRF 층을 추가하여 두 가지의 장점을 얻는 것입니다.
특정 구현은 models/bilstm_crf.py 참조하십시오
OOV (어휘를 벗어난)의 문제는 HMM 모델에서 처리해야합니다. 즉, 테스트 세트의 일부 단어는 교육 세트에 없습니다. 이때, OOV에 해당하는 다양한 상태의 확률은 관찰 확률 매트릭스를 통해 찾을 수 없습니다. 이 문제를 해결하기 위해 OOV에 해당하는 상태의 확률 분포는 균일 한 분포로 설정 될 수 있습니다.
HMM의 세 가지 매개 변수 (즉, 상태 전이 확률 매트릭스, 관찰 확률 매트릭스 및 초기 상태 확률 매트릭스)가 감독 학습 방법을 사용하여 추정에 사용될 때, 일부 용어가 나타나지 않으면이 용어의 해당 위치는 Viterbi 알고리즘을 사용하여 해당하는 경우 계산 프로세스는 이러한 값을 배제해야합니다. 그런 다음 0이있는 용어가 있으면 전체 경로의 확률도 0이됩니다. 또한 디코딩 프로세스 중에 다수의 낮은 확률 곱셈이 언더 플로우를 유발할 수 있습니다. 이 두 가지 문제를 해결하기 위해, 우리는 결코 나타나지 않은 용어 (예 : 0.00000001)에 매우 적은 숫자를 할당합니다. 동시에, 디코딩 할 때, 우리는 모델의 세 매개 변수를 모두 로그 공간에 매핑하여 언더 플로를 피할 수있을뿐만 아니라 곱셈 작업을 단순화 할 수 있습니다.
CRF의 모델에 대한 입력으로 교육 데이터 및 테스트 데이터를 사용하기 전에 기능 기능을 사용하여 기능을 추출해야합니다!
Bi-LSTM+CRF 모델의 경우 다음을 참조 할 수 있으며, 이름이 지정된 엔티티 인식을위한 신경 아키텍처를 참조하십시오. 손실 함수의 정의에 중점을 둘 수 있습니다. 코드의 손실 함수 계산은 동적 프로그래밍과 유사한 방법을 사용하여 이해하기 쉽지 않습니다. 여기서는 다음 블로그를 보는 것이 좋습니다.