임의 문자열 식별

3779 단어 기계 학습Python
주어진 문자열이 무작위인지 무작위인지 판단하기 위해 반복적으로 실험한 기록이다(학습회에서 발표된 기록슬라이드 쇼이다.

보충하여 기록하다

  • 2019/06/05PyPI
  • 등록
  • 2019/06/12실험2
  • 목표


    무작위 문자열의 생성은 매우 간단하지만 (정말 무작위 등 번거로움이 없다면) 어떤 문자열을 지정할 때 이 문자열이 무작위 문자열인지 아닌지를 판정하고 싶습니다.

    이번 처리의 무작위 문자열 정의

  • rand 함수 등에서 무작위로 생성된 문자열
  • 가명, 한자, 영어 숫자 등 각양각색
  • 문자열 길이도 무작위(그러나 실제 길이)
  • 무작위 문자열의 특징과 검증

  • 균등한 분포로 생성되기 때문에 문자가 균일하게 나타난다
  • 발음 등 단어 언어의 생성 규칙과 규칙을 준수하지 않음
  • 무의미한 단어 생성
  • 발생 빈도 확인

  • 카드 제곱 검정을 사용하여 주파수 검정
  • 길이가 10자 정도인 문자열은 충분히 검정할 수 없음
  • 문자 주파수가 1인 단어도 있다(예:word 등)
  • 읽을 수 있는 검증

  • 모음과 자음으로 나뉘어 연속성을 조사
  • 일본어는 기본적으로 "문자 ≈ 발음 기호"
  • 해외(구미권) 대처법
  • 의미 있는 검증

  • 사전 데이터 만들기, 찾기표
  • 문자의 흔들림, 삼단현과 경미한 오자의 문자 변화는 어떻게 하는가
  • 알 수 없는 언어 어떡해
  • 우리는 상태 이동 모델로 고려한다

  • 한 상태에서 다음 상태로 전환하는 시뮬레이션
  • 문자를 상태로, 문자열을 마이그레이션으로 간주

  • 문자 $i$에서 문자 $j$로의 변환 확률을 ${p_{i,\j}$로 설정하면 문자열의 변환 확률은 다음과 같습니다
  • .
    $P =\prod_{i,\j}{p_{i,\j}}$

    이동 확률로 무엇을 볼 수 있는가

  • 학습 데이터의 문자 변환 모델에 따라 학습(계산) 상태 변환 확률
  • 학습 데이터와 입력 문자열의 패턴이 가까우면 이동 확률이 커지고 멀어질수록 작아진다
  • 즉, 학습 패턴에 정확한 단어 데이터를 제공하면 무작위인지 무작위인지 판정할 수 있어야 한다
  • 해봤어요.


    이동 확률을 구하는 절차와 평가를 진행했다.

    실시

  • 나는 단지 파이썬으로 어리석게 주파수를 계산하고 있을 뿐이다
  • mitsuharu/TextTransProb: It computes a transition probability of a text.
  • 실험


    이것은 중학교 영어 단어 일람표에서 학습하여 적당한 입력을 한 결과입니다. 영어 단어와 다른 적당한 문자열은 분리되어 보입니다. 검증은 훈련과 테스트를 엄격하게 구분해야 하지만 대상은 언어입니다. 훈련과 많이 다른 신조어가 자주 생성되지 않는다는 가설은 유사도 판정을 목적으로 합니다.나는 일정한 성능이 있다고 생각한다.
    입력
    확률
    apple
    0.09252656
    blue
    0.06042812
    difficualt
    0.00774749
    nvjhyhjnajas
    0.00018930
    zf3cd
    0.00055871
    가명
    0.00000661
    또 영어 단어에 관해서는 모든 영어 단어를 모은 자료고dwyl/english-wordsn가 있기 때문에 영어 단어에 관해서는 이걸로 공부하면 문제가 없을 것 같다. 또 일본어 단어의 좋은 목록을 찾지 못했다.

    실험2(추가, 2019/06/12)


    상기 영어 단어 데이터dwyl/english-wordsn를 사용하여 학습한 모델로 중학교에서 학습한 영어 단어(약 500개 단어)와 같은 수량의 무작위로 생성된 영어 문자열의 확률을 계산했다.

    총결산


    이 랜덤 판정은 다른 분류 문제의 특징량 중 하나가 될 수 있는지 계산하는 것이다. 실제로 이 랜덤 판정에 편입되어 분류 문제를 진행했지만 좋은 결과를 얻었기 때문에 나쁜 방법은 아니라고 생각한다.

    PyPI 등록됨(추적, 2019/06/05)


    이 이동 확률을 pip install로 계산하기 위해 등록해 보았습니다texttrans · PyPI. 영어 단어는 이미 배워서 공개했습니다. 일본어에 좋은 데이터가 있으면 추가할 것입니다.
    $ pip install texttrans
    
    from texttrans.texttrans import TextTrans
    p = TextTrans().prob("pen")
    print(p) # 0.11640052876679541
    

    좋은 웹페이지 즐겨찾기