스마트 어휘를 통한 언어 모델 성능 향상
이 프로젝트는 "보다 스마트한" 어휘를 생성하기 위해 품사 레이블 및 명명된 엔터티를 사용하여 Billion Word Corpus를 전처리하는 방법을 탐색하도록 설계되었습니다. 이러한 기술을 사용하면 코퍼스에서만 상위 N개 단어를 사용하는 것보다 더 나은 난해성 점수를 얻을 수 있습니다.
처리에 대한 자세한 설명과 그것이 얻을 수 있는 난해성 점수에 미치는 영향은 Improving Language Model Performance with Smarter Vocabularies를 참조하세요.
프로젝트에는 다음에 대한 스크립트가 포함되어 있습니다.
이 프로젝트는 제자리에서 사용하도록 설계되었으며 pip 설치가 없습니다. GitHub에서 소스를 다운로드하고 구성 옵션을 설정한 후 번호가 매겨진 스크립트를 순서대로 실행하면 됩니다. 이 코드는 연구원을 위해 설계되었으므로 실행 중인 스크립트의 코드를 검토하고 특정 결과를 얻기 위해 필요에 따라 옵션을 수정해야 할 것으로 예상됩니다.
메인 디렉토리의 스크립트에는 실행할 순서를 나타내는 숫자가 접두어로 붙습니다. 메인 디렉토리에 있는 대부분의 스크립트는 연관된 라이브러리 함수를 호출하는 상대적으로 짧은 시리즈입니다. 각 스크립트를 실행하기 전에 해당 스크립트를 열고 구성 매개변수를 설정하여 원하는 결과를 얻으십시오.
여러 스크립트에서 사용되는 전역 구성 옵션은 ./configs/config.py에 설정됩니다. 아래 스크립트를 실행하기 전에 이 파일로 이동하여 데이터 경로를 수정하십시오.
00_StanfordCoreNLPServer.py : 구성 파일 ./configs/snlp_server.py를 사용하여 Stanford Core NLP 파서를 시작합니다. 서버가 실행되는 동안 스크립트가 차단됩니다. 원하는 경우 서버를 수동으로 시작할 수 있습니다. 이 스크립트는 편의를 위한 것입니다.
10_ExtractUniqueSents.py : Billion Word Corpus에서 고유한 문장을 구문 분석하기 전에 추출합니다. 파일 상단에는 원시 코퍼스를 다운로드하고 설정하는 방법에 대한 몇 가지 지침이 있습니다.
12_STParseBWCorpus.py : Stanford Parser를 통해 모든 고유 문장을 실행합니다. 이 단계에는 상당한 시간(아마 하루 종일)이 소요되며 멀티 코어 프로세서에서 큰 이점을 얻을 수 있습니다. 런타임에 대한 파일의 참고 사항을 참조하세요.
14_RemoveDuplicates.py : 구문 분석/정규화 후에 발생하는 중복 문장을 제거하기 위해 데이터를 두 번째로 통과합니다.
20_CreateEnglishDictionary.py : 스마트 어휘 생성에 필요합니다.
22_CreateVocab.py : 이 스크립트는 다양한 유형의 어휘를 생성합니다. 사용자가 생성할 어휘 유형을 선택할 수 있도록 파일에 큰 if/elif 블록이 존재합니다.
24_IndexVocab.py : 언어 모델 훈련에 사용되는 색인화된 코퍼스 데이터를 생성합니다. 여기에는 사용할 어휘 유형을 선택하기 위해 사용자가 설정해야 하는 큰 if/elif 블록이 있습니다.
30_TrainBasicLM.py : 모델 훈련을 설정하고 실행합니다. 여기에는 사용자가 훈련할 어휘를 선택할 수 있는 명령문 블록이 있습니다. 또한 사용자는 모델 구성 매개변수가 있는 파일을 선택해야 합니다. 모델 구성 매개변수는 L1_2048_512.py와 같은 파일 이름으로 구성 디렉터리에 저장됩니다.
32_TestPerplexity : 훈련된 모델에 대해 혼란 테스트를 실행합니다. 스크립트 하단에서 테스트할 모델을 선택하세요.
34_NextWordPrediction.py : 사용자가 문장의 첫 부분을 입력할 수 있도록 하고 모델을 호출하여 다음 단어를 예측합니다. 스크립트의 주요 부분에서 사용할 모델을 구성합니다.
코드의 일부는 Saarland University의 언어 모델 툴킷에서 채택되었습니다. TF-NNLM-TK를 참조하세요.
해당 코드는 부분적으로 TensorflowPTB-LM 예제 모델을 기반으로 했습니다.