COTOHA로 문장의 유사도를 얻어 보기

코토하



공식 사이트


구현


  • COTOHA라고 하는 NTT가 제공하고 있는 자연 언어계의 API를 접해 봅니다.
  • 문장과 문장의 유사도를 산출하는 API를 사용합니다.
  • Ipython 형식으로 구현합니다.

  • 라이브러리 가져오기


    import json
    import numpy as np
    import pandas as pd
    import urllib.request
    from os import path
    

    정보 정의



  • 계정 홈 의 데이터를 정의한다.

  • Developer API Base URL과 Access Token Publish URL은 모든 사용자 공통이라고 생각합니다만, 만약을 위해서 각자 등록해 조사해 주세요.

  • base_url = [Developer API Base URL]
    developer_id = [Developer Client id]
    secret = [Developer Client secret]
    token_url = [Access Token Publish URL]
        'Content-Type': 'application/json',
    }
    

    액세스 토큰 얻기


  • 액세스 토큰을 얻기 위해 POST에서 액세스 토큰을 얻기위한 API에 액세스합니다.
  • data = {
      'grantType': 'client_credentials',
      'clientId': developer_id,
      'clientSecret': secret
    }
    
    req = urllib.request.Request(token_url, json.dumps(data).encode(), headers=headers, method='POST')
    with urllib.request.urlopen(req) as res:
        access_info = json.load(res)
    
    print(access_info['access_token'])
    

    단어 문장끼리의 유사도 취득



    * 획득한 액세스 토큰을 헤더에 채우고 유사도 획득 API에 액세스합니다.
    def similarity_api(s1: str, s2: str):
        data = {
            's1': s1,
            's2': s2,
            'type': 'default'
        }
        headers = {
            'Content-Type': 'application/json;charset=UTF-8',
            'Authorization': 'Bearer {}'.format(access_info['access_token'])
        }
        url = base_url + 'nlp/v1/similarity'
        req = urllib.request.Request(url, json.dumps(data).encode(), headers=headers, method='POST')
        with urllib.request.urlopen(req) as res:
            body = json.load(res)
        return body
    
    similarity_api('近くのレストランはどこですか?', 'このあたりの定食屋はどこにありますか?')
    

    소감


  • 단어나 문장의 유사도의 산출은, tf-idf, word2vec나 doc2vec로 비교적 세상에 나돌고 있기 때문에, 참신함은 없습니다.
  • 단지, 기계 학습에 익숙하지 않은 분에게는 비교적 간단하게 취급할 수 있으므로, 편리하다고 생각합니다.
  • 또한 wikipedia의 데이터로 스스로 학습한 word2vec의 모델보다, 대응하고 있는 단어도 많고, 유사도의 정밀도도 높은 인상이었습니다.
  • 좋은 웹페이지 즐겨찾기