사용자 정의 사전을 사용하여 엔티티 발견
제품 이름 또는 조직 목록과 같이 감지하려는 고정된 용어 세트가 있는 경우 사전을 작성할 수 있습니다. 사전 일치는 매우 빠르고 자원 효율적입니다.
Watson 자연어 처리 사전에는 다음을 포함하여 단순 문자열 일치를 넘는 고급 일치 기능이 있습니다.
- 사전 용어는 단일 토큰(예: wheel) 또는 다중 토큰(예: steering wheel)으로 구성될 수 있습니다.
- 사전 용어 일치는 대소문자를 구분하거나 대소문자를 구분하지 않을 수 있습니다. 대소문자를 구분하는 일치를 사용하면 ABS와 같은 약어가 서로 다른 의미를 갖는 abs와 같은 일반 언어의 용어와 일치하지 않는지 확인할 수 있습니다.
- 여러 사전 항목이 동일한 텍스트와 일치할 때 일치하는 항목을 통합하는 방법을 지정할 수 있습니다. 두 개의 사전 항목(Watson 및 Watson 자연어 처리)가 있는 경우 "I like Watson Natural Language Processing"에서 일치해야 하는 항목을 구성할 수 있습니다(Watson 자연어 처리 Watson 또는 둘 다 포함).
- 모든 정보를 열거하는 대신에 lemma와 일치하도록 지정할 수 있습니다. 이러한 방식으로 단일 사전 항목 mouse는 텍스트에서 mouse 및 mice를 모두 감지합니다.
- 각 사전 항목에 레이블을 첨부할 수 있습니다(예: 일치에 추가 메타데이터를 포함하기 위해 조직 카테고리).
이러한 모든 기능을 구성할 수 있으므로 유스 케이스에 대한 올바른 옵션을 선택할 수 있습니다.
사전 파일의 유형
Watson 자연어 처리는 두 가지 유형의 사전 파일을 지원합니다.
용어 목록(
.dict
에서 종료)용어 목록 예제:
Arthur Allen Albert Alexa
테이블(
.csv
에서 종료)테이블의 예:
"label", "entry" "ORGANIZATION", "NASA" "COUNTRY", "USA" "ACTOR", "Christian Bale"
동일한 추출 중에 여러 사전을 사용할 수 있습니다. 또한 두 유형 모두를 동시에 사용할 수 있습니다. 예를 들어, 세 개의 사전, 하나의 용어 목록 및 두 개의 테이블로 단일 추출을 실행할 수 있습니다.
사전 파일 작성
노트북 내부에 모듈 디렉토리를 작성하여 시작하십시오. 이것은 사전 파일을 저장하기 위해 임시로 사용될 노트북 파일 시스템 내의 디렉토리입니다.
노트북에서 사전 파일을 작성하려면 다음을 수행하십시오.
- 모듈 디렉토리를 작성하십시오. 모듈 폴더의 이름에는 오류가 발생하므로 대시를 포함할 수 없습니다.
import os import watson_nlp module_folder = "NLP_Dict_Module_1" os.makedirs(module_folder, exist_ok=True)
- 사전 파일을 작성하고 이를 모듈 디렉토리에 저장하십시오. 외부 목록 또는 CSV 파일에서 읽거나 다음과 같은 사전 파일을 작성할 수 있습니다.
# Create a term list dictionary term_file = "names.dict" with open(os.path.join(module_folder, term_file), 'w') as dictionary: dictionary.write('Bruce') dictionary.write('\n') dictionary.write('Peter') dictionary.write('\n') # Create a table dictionary table_file = 'Places.csv' with open(os.path.join(module_folder, table_file), 'w') as places: places.write("\"label\", \"entry\"") places.write("\n") places.write("\"SIGHT\", \"Times Square\"") places.write("\n") places.write("\"PLACE\", \"5th Avenue\"") places.write("\n")
사전 로드 및 일치 옵션 구성
사전은 다음 헬퍼 메소드를 사용하여 로드할 수 있습니다.
- 단일 사전을 로드하려면
watson_nlp.toolkit.rule_utils.DictionaryConfig (<dictionary configuration>)
을(를) 사용하십시오. - 여러 사전을 로드하려면
watson_nlp.toolkit.rule_utils.DictionaryConfig.load_all([<dictionary configuration>)])
을(를) 사용하십시오.
각 사전에 대해 사전 구성을 지정해야 합니다. 사전 구성은 다음과 같은 속성을 가진 Python 사전입니다.
속성 | 값 | 설명 | 필수 |
---|---|---|---|
name |
문자열 | 사전의 이름 | 예 |
source |
문자열 | module_folder 에 상대적인 사전에 대한 경로 |
예 |
dict_type |
파일 또는 테이블 | 사전 아티팩트가 용어 목록(파일)인지 또는 맵핑 테이블(테이블)인지 여부 | 아니오. 기본값은 파일입니다. |
consolidate |
ContainedWithin(가장 긴 일치 및 중복 유지)/NotContainedWithin(최단 일치 및 중복 유지)/ContainsButNotEqual(가장 긴 일치는 유지하지만 중복 매치는 유지)/ExactMatch(중복)/LeftToRight(가장 왼쪽에서 가장 긴 겹치지 않는 범위 유지) | 겹치는 사전과 일치하는 것은 무엇입니까. | 아니오. 기본값은 일치를 통합하지 않는 것입니다. |
case |
정확/둔감 | 정확한 대소문자를 일치시키거나 대소문자를 구분하지 않습니다. | 아니오. 기본값은 정확히 일치합니다. |
lemma |
true / false | 사전에 있는 용어와 텍스트의 용어를 일치시킵니다. 사전에는 렘마 양식만 포함되어야 합니다. 예를 들어, 사전에 mouse 을(를) 추가하여 텍스트에서 mouse 및 mice 을(를) 모두 일치시키십시오. 사전에서 mice 을(를) 추가하지 마십시오. 다중 토큰으로 구성된 용어를 텍스트로 일치시키려면 사전에서 해당 용어의 길이를 공백 문자로 구분하십시오. |
아니오. 기본값은 False입니다. |
mappings.columns (열 as attribute of 맵핑: {}) |
목록 [문자열] | 테이블 csv에 있는 것과 같은 순서로 열 헤더 목록 | dict_type: table 일 경우 예 |
mappings.entry (항목 as attribute of 맵핑: {}) |
문자열 | 문서에 대해 일치시킬 문자열이 포함된 열 헤더의 이름입니다. | dict_type: table 일 경우 예 |
label |
문자열 | 일치하는 항목에 첨부할 레이블입니다. | 아니오 |
코드 샘플
# Load the dictionaries
dictionaries = watson_nlp.toolkit.rule_utils.DictionaryConfig.load_all([{
'name': 'Names',
'source': term_file,
'case':'insensitive'
}, {
'name': 'places_and_sights_mappings',
'source': table_file,
'dict_type': 'table',
'mappings': {
'columns': ['label', 'entry'],
'entry': 'entry'
}
}])
사전을 포함하는 모델 훈련
사전을 로드한 후 사전 모델을 작성하고 RBR.train()
메소드를 사용하여 모델을 훈련하십시오. 메소드에서 다음을 지정합니다.
- 모듈 디렉토리
- 사전 항목의 언어
- 사용할 사전
코드 샘플
custom_dict_block = watson_nlp.resources.feature_extractor.RBR.train(module_folder,
language='en', dictionaries=dictionaries)
새 데이터에 모델 적용
사전을 교육한 후 기존의 선행 학습된 블록에서 사용하는 것처럼 run()
메소드를 사용하여 새 데이터에 모델을 적용하십시오.
코드 샘플
custom_dict_block.run('Bruce is at Times Square')
코드 샘플의 출력:
{(0, 5): ['Names'], (12, 24): ['SIGHT']}
사전의 레이블 또는 이름을 표시하려면 다음을 수행하십시오.
RBR_result = custom_dict_block.executor.get_raw_response('Bruce is at Times Square', language='en')
print(RBR_result)
레이블을 표시하는 출력:
{'annotations': {'View_Names': [{'label': 'Names', 'match': {'location': {'begin': 0, 'end': 5}, 'text': 'Bruce'}}], 'View_places_and_sights_mappings': [{'label': 'SIGHT', 'match': {'location': {'begin': 12, 'end': 24}, 'text': 'Times Square'}}]}, 'instrumentationInfo': {'annotator': {'version': '1.0', 'key': 'Text match extractor for NLP_Dict_Module_1'}, 'runningTimeMS': 3, 'documentSizeChars': 32, 'numAnnotationsTotal': 2, 'numAnnotationsPerType': [{'annotationType': 'View_Names', 'numAnnotations': 1}, {'annotationType': 'View_places_and_sights_mappings', 'numAnnotations': 1}], 'interrupted': False, 'success': True}}
상위 주제: 자신의 모델 만들기