2016-10-18 10 views
2

문자열의 배열이 있고이를 클러스터로 정렬해야한다고 가정 해 봅시다.텍스트 문자열 유사성을 계산하는 방법은 무엇입니까?

클러스터 1 : 저는 현재 N-g, 예를 들어, 사용하여 분석을 수행하고

  • 파이프 파이프에 대해 라스 베이거스에서
  • 영화를 고정
    • 파이프를 고정 고정을

클러스터 2 :

  • 클래식 음악 클래식 음악이 좋은 이유
    • 클래식 음악

이의 나는이 두 문자열이이 배열 내 가정 해 봅시다 무엇

  • 텍스트 (기타 포함) :

    그들은 같은 토큰 화 된 구조를 공유하지 않는

    일본

  • 에서
    • 일본인 학생
    • 학생들은 이제 N 그램 방법은 분명,이 두 가지 문자열을 넣어하지 않습니다. 나는 Damerau-Levenshtein 거리 계산과 TF/IDF를 사용해 보았지만 둘 다 너무 많은 외부 잡음을 잡았다. 이 두 문자열이 단일 클러스터에 속한다는 것을 이해하는 데 사용할 수있는 다른 기술은 무엇입니까?

    답변

    3

    유니 프레임과 빅 블램 (형태소 분석 후 가능)을 모두 취해이를 특성 벡터에 넣은 다음 예를 들어 코사인을 사용하여 벡터 간의 유사성을 측정 할 수 있습니다. here 또는 here을 참조하십시오. 이것은 더 긴 문서를 위해 작동하기위한 것이지만, 당신의 목적을 위해 충분히 잘 작동 할 것입니다.

    더 복잡한 기술은 문서 모음에서 distributed bag-of-words model을 학습 한 다음 문서 모음에서 유사점을 찾는 데 사용됩니다.

    [편집]

    또한 word2vec를 사용하여 분산 활 모델을 사용할 수 있습니다. 예를 들어, gensim 라이브러리와 파이썬에 word2vec Google News model 사전 훈련 :

    from gensim.models import word2vec 
    model = word2vec.Word2Vec.load_word2vec_format('GoogleNews-vectors-negative300.bin.gz', binary=True) 
    print model.n_similarity(['students', 'Japan'], ['Japanese', 'students']) 
    

    출력 :

    0.8718219720170907 
    
    +0

    감사합니다. 감사합니다. –

    1

    당신은 정규화 문제가 있습니다. 문자열 등가성은 일치 알고리즘을 실행하며 "일본"과 "일본어"는 문자열과 동일하지 않습니다. 몇 가지 옵션 :

    1) "Japanese"가 "Japan"또는 그와 비슷한 것으로 정규화되도록 토큰을 루트 양식으로 표준화합니다.정상화는 "스티브 잡스"에 대해 이야기 할 때 "잡스"가 "잡"으로 정상화되기를 원하지 않는다는 것과 같은 몇 가지 문제가 있습니다. 포터 줄기, 기타 형태 도구 등이 도움이 될 수 있습니다.

    2) 문자열 동등성을 위해 문자 n-gram을 사용하십시오. 3-5 그램을했다면 두 문장 모두에 집중할 수있는 "일본"의 사례가있을 것입니다. 나는 분류를 위해 이것에 대한 큰 팬이며, 클러스터링에 대한 확신은 적다.

    3) 잠복 기법을 사용하여 잠재 성 Dirichelet 할당과 같은 클러스터를 돕습니다. 대략 "도쿄"와 같은 단어와 강하게 연관된 다른 문자열 대응 단어를 통해 "일본"을 "일본어"와 연관시킵니다.

    Breck