계속·SentencePiece를 형태소 해석과 같이 사용할 수 있는 WebAPI를 공개했다

소개



요 전날 출시한 SentencePiece를 형태소 해석과 같이 사용할 수 있는 WebAPI입니다만, SentencePiece 작자의 쿠도씨로부터 여러가지 어드바이스를 받았습니다. 마지막 게시물 는 일부 적절하지 않은 구현이 있었으므로, 그것을 수정했습니다. 여기 에서 무료로 사용할 수 있습니다.



API


  • SentencePiece API

  • 샘플 코드


  • Java 샘플

  • 관련 기사


  • 본가 Github
  • 쿠도 씨의 해설
  • 내 블로그
  • Qiita에서의 교환

  • 했던 일



    전회와의 차이만 기술합니다.

    첫째, SentencePiece에서 모델 계산에는 몇 가지 모드가 있습니다. 이번에는 Unigram과 BPE를 시도했습니다.

    Unigram 모드



    쿠도씨로부터 이하의 코멘트를 받았습니다.

    unigram이면, 어휘 테이블의 로그 우도에 -1에 걸쳐 정수 비용으로 하고, 미지어 처리를 끊으면 원리적으로는 함께 됩니다.

    그래서, 그렇게했습니다.
    내가 한 일을 정확하게 전달하면 어휘 테이블의 로그 우도에 -100을 곱하여 정수 비용을 정하고 kuromoji/mecab 사전에 추가했습니다. 알 수없는 단어는 kuromoji를 확장 모드로 실행하려고했습니다. 알 수없는 단어 비용은 SentencePiece의 어휘 테이블보다 충분히 높았기 때문에 기본적으로 SentencePiece의 어휘 테이블에서 형태소 분석됩니다 (아마도). extend 모드에서 실행한 이유는 알 수 없는 단어가 나올 때 문자로 구분하기 때문입니다.

    BPE 모드



    이쪽도 쿠도씨로부터 코멘트를 받았습니다.

    BPE 로의 분할은, 나이브인 구현으로 좋으면 그다지 어렵지 않습니다. 2개의 문자를 연결해 보고 사전에 있으면, 그 2문자를 새로운 심볼로 치환해 갑니다. 대체할 위치가 여러 개 있는 경우 우선순위(처음에 등록된 쪽이 우선)순으로 대체합니다.
    htps : // 그럼.ぃきぺぢ아. rg/우우키/%에 3% 83% 90% 에 3% 82% 에 4% 에 3% 83% 88% 에 5% B7%에 5% 8C% 96
    두 문자의 연속을 연결하여 사전을 그립니다. 만나면, 그 2문자를 연결해 연결한 것을 1문자로 간주합니다.
    그것을 사전 끌어올 수 없을 때까지 반복합니다. 순진한 구현은 매번 2문자 연속을 스캔하므로 O(n^2) 하지만 힙을 사용하면 O(n log n)가 됩니다.

    힙을 사용하는 좋은 방법이 나에게는 몰랐기 때문에 어리석은 일을했습니다. "어휘 테이블을 규칙으로 간주하고 위에서부터 순서대로 규칙을 적용한다"는 것입니다. 예를 들어, 규칙이 다음과 같이 정의된다고 가정합니다.
    あい
    うえ
    あいう
    

    입력이 「아이 우에오」라고 하면, 이 경우는 출력은 「아이 우에오」가 됩니다. 과도한 설명이 될 수 있지만 아래에 표시된 다른 규칙의 경우,
    あい
    あいう
    うえ
    

    출력은 「아이에에오」가 됩니다.

    그 결과는 어떻게 바뀌었습니까?



    거의 같았습니다.

    마지막 예제는 Unigram이든 BPE이든 결과는 모두 변하지 않았습니다. Unigram과 BPE의 어휘 테이블을 비교해 보았습니다만, 가나-와 가깝습니다. Unigram 쪽은 꽉 찼던 데이터도 많을 수 있고, 일단 BPE와의 차이는 있습니다.

    다만, 정확하게 실장할 수 있었다(라고 생각하기 때문에), 안심하고 사용해 줄 수 있다고 생각합니다.

    결론



    여담이지만, Unigram 모드는 BPE 모드에 비해 메모리가 적기 때문에, Wikipedia 전문을 학습에 집중했습니다. 그 결과, 12일간도 계속 계산했습니다. . . 전기 요금이・・・. 그래서 12 일분의 연산 결과를 Apitore에서는 무료로 사용할 수 있으므로 꼭 사용해보십시오.

    좋은 웹페이지 즐겨찾기