IBM Cloud Function에서 NLU 호출

소개



IBM Cloud Function 시리즈의 연속입니다.
이전 기사 IBM Cloud Function에서 Watson ML 웹 서비스 호출을 작성할 때 발견되었지만 IBM Cloud Function의 Action에서는 bx 명령을 사용하여 서비스와 바인딩하면 자격 증명을 쉽게 얻을 수 있습니다.
이 메커니즘을 사용하여 NLU의 엔티티 추출을 수행하는 서비스를 만들었습니다.

서비스 만들기



IBM Cloud 대시보드에서 Functions를 선택하십시오.



아래 화면이 나타나면 만들기 시작을 클릭합니다.



다음 화면에서는 [Create Action]을 클릭합니다.



아래 화면이 나오면
Action Name: nlu-servce
Runtime: Python 3
를 입력하고 Create를 클릭합니다.



코드 편집 화면이 나오면 코드 내용을 다음과 같이 바꿉니다.
교체가 끝나면 Save를 클릭합니다.
#
#
# main() will be run when you invoke this action
#
# @param Cloud Functions actions accept a single parameter, which must be a JSON object.
#
# @return The output of this action, which must be a JSON object.
#
#
import sys
import json
from watson_developer_cloud import NaturalLanguageUnderstandingV1
from watson_developer_cloud.natural_language_understanding_v1 \
  import Features, EntitiesOptions, KeywordsOptions, ConceptsOptions, CategoriesOptions, RelationsOptions, SentimentOptions

def main(dict):
    # 解析対象文
    text = dict['text']

    # 認証情報の取得
    creds = dict['__bx_creds']['natural-language-understanding']
    #print(creds)
    username = creds['username']
    password = creds['password']

    # NLUクライアントインスタンス生成

    natural_language_understanding = NaturalLanguageUnderstandingV1(
        username = username,
        password = password,
        version='2018-03-16')

    # NLU呼出し
    response = natural_language_understanding.analyze( text = text, features = Features(
        #relations = RelationsOptions()
        entities = EntitiesOptions(),
        #concepts = ConceptsOptions(),
        #keywords = KeywordsOptions(),
        #sentiment = SentimentOptions(),
        #categories = CategoriesOptions()
    ))

    # 結果解析
    entities = response['entities']
    person = ''
    company = ''
    location = ''
    for item in entities:
        if item['type'] == 'Organization':
            company = item['text']
        if item['type'] == 'Person':
            person = item['text']
        if item['type'] == 'Location':
            location = item['text']

    return { 'person': person, 'company': company, 'location': location }

Cloud Function 플러그인 배포



Cloud Function 플러그인 배포가 아직 있을 경우(bx wsk 명령을 사용할 수 없음) 아래 링크에서 플러그인을 배포합니다.
Cloud Function 플러그인

서비스 바인딩



그런 다음 NLU 서비스와 지금 만든 Cloud Function의 Action을 바인딩합니다.
이렇게하면 위 코드 중
    creds = dict['__bx_creds']['natural-language-understanding']
    username = creds['username']
    password = creds['password']

에서 NLU 자격 증명을 얻을 수 있습니다.

먼저 다음 명령으로 만든 Function 서비스의 이름을 확인합니다./<org_name>_<space_name>/nlu-service라는 action이 존재해야합니다.
$ bx login
$ bx wsk action list

다음 명령을 사용하여 Watson NLU 서비스에 바인딩합니다.
$ bx wsk service bind natural-language-understanding nlu-service

여러 NLU 서비스가 있는 경우 다음과 같이 인스턴스 이름도 선택적으로 추가합니다.
$ bx wsk service bind natural-language-understanding nlu-service --instance <instance_name>

성공적으로 바인딩되었는지 여부는 다음 명령으로 확인할 수 있습니다.
bx wsk action get nlu-service

바인드 되고 있는 경우, username 나 password 등의 정보도, __bx_creds 의 부하로 설정되어 있습니다.

파라미터 설정



Cloud Function 서비스가 구문 분석 매개변수(text)를 수신할 수 있도록 합니다.
또한 테스트를 위해 매개 변수의 기본값을 설정합니다.

Cloud Function 관리 화면에서 액션 -> nlu-service를 선택하여 방금 만든 Cloud Function 세부정보 화면을 표시합니다.



메뉴에서 Parameters를 선택하고 Add를 클릭하여 다음 매개 변수 text와 기본값을 설정합니다.text 의 디폴트치는 테스트용의 해석 대상 텍스트입니다. 뭐든지 괜찮습니다만, 나는 아래와 같은 자기 소개문을 설정했습니다. 디폴트 값에 문자열을 설정하는 경우, 더블 쿼트로 둘러쌀 필요가 있으므로, 주의해 주세요.
"はじめまして。私は日本アイ・ビー・エムの山田花子です。私は大阪から来ました。"



이것으로 준비 완료입니다. 코드 탭으로 돌아가서 invoke를 클릭합니다.



잘하면 아래와 같은 결과가 돌아올 것입니다.
Entity로서 Company("일본 아이 비 엠"), Person("야마다 하나코"), Location("오사카")가 잡혀 있는 것을 알 수 있다고 생각합니다.



잘못되면 파이썬 소스에 적절한 print 문을 넣고 디버깅하십시오.
코드를 수정했을 경우, bx wsk service bind 문은 재발행할 필요가 있으므로, 그 점에 주의해 주세요.

좋은 웹페이지 즐겨찾기