0 / 0
영어 버전 문서로 돌아가기

사용자 정의 사전을 사용하여 엔티티 발견

마지막 업데이트 날짜: 2024년 7월 23일
사용자 정의 사전을 사용하여 엔티티 발견

제품 이름 또는 조직 목록과 같이 감지하려는 고정된 용어 세트가 있는 경우 사전을 작성할 수 있습니다. 사전 일치는 매우 빠르고 자원 효율적입니다.

Watson 자연어 처리 사전에는 다음을 포함하여 단순 문자열 일치를 넘는 고급 일치 기능이 있습니다.

  • 사전 용어는 단일 토큰(예: wheel) 또는 다중 토큰(예: steering wheel)으로 구성될 수 있습니다.
  • 사전 용어 일치는 대소문자를 구분하거나 대소문자를 구분하지 않을 수 있습니다. 대소문자를 구분하는 일치를 사용하면 ABS와 같은 약어가 서로 다른 의미를 갖는 abs와 같은 일반 언어의 용어와 일치하지 않는지 확인할 수 있습니다.
  • 여러 사전 항목이 동일한 텍스트와 일치할 때 일치하는 항목을 통합하는 방법을 지정할 수 있습니다. 두 개의 사전 항목(WatsonWatson 자연어 처리)가 있는 경우 "I like Watson Natural Language Processing"에서 일치해야 하는 항목을 구성할 수 있습니다(Watson 자연어 처리 Watson 또는 둘 다 포함).
  • 모든 정보를 열거하는 대신에 lemma와 일치하도록 지정할 수 있습니다. 이러한 방식으로 단일 사전 항목 mouse는 텍스트에서 mousemice를 모두 감지합니다.
  • 각 사전 항목에 레이블을 첨부할 수 있습니다(예: 일치에 추가 메타데이터를 포함하기 위해 조직 카테고리).

이러한 모든 기능을 구성할 수 있으므로 유스 케이스에 대한 올바른 옵션을 선택할 수 있습니다.

사전 파일의 유형

Watson 자연어 처리는 두 가지 유형의 사전 파일을 지원합니다.

  • 용어 목록(.dict에서 종료)

    용어 목록 예제:

    Arthur
    Allen
    Albert
    Alexa
    
  • 테이블(.csv에서 종료)

    테이블의 예:

    "label", "entry"
    "ORGANIZATION", "NASA"
    "COUNTRY", "USA"
    "ACTOR", "Christian Bale"
    

동일한 추출 중에 여러 사전을 사용할 수 있습니다. 또한 두 유형 모두를 동시에 사용할 수 있습니다. 예를 들어, 세 개의 사전, 하나의 용어 목록 및 두 개의 테이블로 단일 추출을 실행할 수 있습니다.

사전 파일 작성

노트북 내부에 모듈 디렉토리를 작성하여 시작하십시오. 이것은 사전 파일을 저장하기 위해 임시로 사용될 노트북 파일 시스템 내의 디렉토리입니다.

노트북에서 사전 파일을 작성하려면 다음을 수행하십시오.

  1. 모듈 디렉토리를 작성하십시오. 모듈 폴더의 이름에는 오류가 발생하므로 대시를 포함할 수 없습니다.
    import os
    import watson_nlp
    module_folder = "NLP_Dict_Module_1"
    os.makedirs(module_folder, exist_ok=True)
    
  2. 사전 파일을 작성하고 이를 모듈 디렉토리에 저장하십시오. 외부 목록 또는 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을(를) 추가하여 텍스트에서 mousemice을(를) 모두 일치시키십시오. 사전에서 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}}

상위 주제: 자신의 모델 만들기