복붙노트

[PYTHON] 단어 - 단어 동시 발생 매트릭스

PYTHON

단어 - 단어 동시 발생 매트릭스

나는 당신이 낱말 낱말 co-ocurrence 모체를 파생하게하는 sklearn에있는 단위를 찾고있다. 나는 문서 - 용어 행렬을 구할 수 있지만, 단어 - 단어 행렬의 동시 발생 (co-occurences)을 얻는 방법에 대해서는 확신 할 수 없다.

해결법

  1. ==============================

    1.다음은 Scikit-Learn에서 CountVectorizer를 사용하는 예제 솔루션입니다. 그리고이 글을 참고하면 행렬 곱셈을 사용하여 단어 - 단어 동시 발생 행렬을 얻을 수 있습니다.

    다음은 Scikit-Learn에서 CountVectorizer를 사용하는 예제 솔루션입니다. 그리고이 글을 참고하면 행렬 곱셈을 사용하여 단어 - 단어 동시 발생 행렬을 얻을 수 있습니다.

    from sklearn.feature_extraction.text import CountVectorizer
    docs = ['this this this book',
            'this cat good',
            'cat good shit']
    count_model = CountVectorizer(ngram_range=(1,1)) # default unigram model
    X = count_model.fit_transform(docs)
    # X[X > 0] = 1 # run this line if you don't want extra within-text cooccurence (see below)
    Xc = (X.T * X) # this is co-occurrence matrix in sparse csr format
    Xc.setdiag(0) # sometimes you want to fill same word cooccurence to 0
    print(Xc.todense()) # print out matrix in dense format
    

    count_model에있는 단어 사전을 참조 할 수도 있습니다.

    count_model.vocabulary_
    

    또는 대각선 성분으로 정규화하려는 경우 (이전 게시물의 답변 참조)

    import scipy.sparse as sp
    Xc = (X.T * X)
    g = sp.diags(1./Xc.diagonal())
    Xc_norm = g * Xc # normalized co-occurence matrix
    

    @Federico Caccia 응답에주의를 기울여야 할 경우, 자신의 텍스트에서 가짜 인 동시 발생을 원하지 않으면 1 : 1보다 큰 발생을 설정하십시오.

    X[X > 0] = 1 # do this line first before computing cooccurrence
    Xc = (X.T * X)
    ...
    
  2. ==============================

    2.CountVectorizer 또는 TfidfVectorizer에서 ngram_range 매개 변수를 사용할 수 있습니다

    CountVectorizer 또는 TfidfVectorizer에서 ngram_range 매개 변수를 사용할 수 있습니다

    코드 예 :

    bigram_vectorizer = CountVectorizer(ngram_range=(2, 2)) # by saying 2,2 you are telling you only want pairs of 2 words
    

    카운트 할 단어의 공동 발생을 명시 적으로 말하려면 어휘 매개 변수를 사용하십시오. 즉, vocabulary = { 'awesome unicorns': 0, 'batman forever': 1}

    http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html

    사전 정의 된 단어 - 단어 동시 발생으로 코드를 사용하고 자명하며 준비가되었습니다. 이 경우 우리는 멋진 유니콘과 배트맨의 동시 발생을 영원히 추적하고 있습니다.

    from sklearn.feature_extraction.text import CountVectorizer
    import numpy as np
    samples = ['awesome unicorns are awesome','batman forever and ever','I love batman forever']
    bigram_vectorizer = CountVectorizer(ngram_range=(1, 2), vocabulary = {'awesome unicorns':0, 'batman forever':1}) 
    co_occurrences = bigram_vectorizer.fit_transform(samples)
    print 'Printing sparse matrix:', co_occurrences
    print 'Printing dense matrix (cols are vocabulary keys 0-> "awesome unicorns", 1-> "batman forever")', co_occurrences.todense()
    sum_occ = np.sum(co_occurrences.todense(),axis=0)
    print 'Sum of word-word occurrences:', sum_occ
    print 'Pretty printig of co_occurrences count:', zip(bigram_vectorizer.get_feature_names(),np.array(sum_occ)[0].tolist())
    

    최종 결과물은 ( 'awesome unicorns', 1), ( 'batman forever', 2)이며, 우리의 샘플 제공 데이터와 정확하게 일치합니다.

  3. ==============================

    3.@titipata 우리가 실제 co-ocurrences에 동일한 가중치를 주었고 단지 가짜 인 사건에 당신의 솔루션이 좋은 척도가 아니라고 생각합니다. 예를 들어, 5 개의 텍스트가 있고 apple과 house라는 단어가이 frecuency와 함께 나타나는 경우 :

    @titipata 우리가 실제 co-ocurrences에 동일한 가중치를 주었고 단지 가짜 인 사건에 당신의 솔루션이 좋은 척도가 아니라고 생각합니다. 예를 들어, 5 개의 텍스트가 있고 apple과 house라는 단어가이 frecuency와 함께 나타나는 경우 :

    텍스트 1 : 사과 : 10, "집": 1

    text2 : apple : 10, "house": 0

    text3 : apple : 10, "house": 0

    text4 : 사과 : 10, "집": 0

    text5 : apple : 10, "house": 0

    우리가 측정 할 공동 발생은 10 * 1 + 10 * 0 + 10 * 0 + 10 * 0 + 10 * 0 = 10이지만 단지 가짜입니다.

    그리고 다음과 같은 또 다른 중요한 경우에는 다음과 같습니다.

    텍스트 1 : 사과 : 1, "바나나": 1

    텍스트 2 : 사과 : 1, "바나나": 1

    텍스트 3 : 사과 : 1, "바나나": 1

    text4 : apple : 1, "banana": 1

    텍스트 5 : 사과 : 1, "바나나": 1

    우리는 사실 공동 출현이 정말로 중요 할 때 단지 1 * 1 + 1 * 1 + 1 * 1 + 1 * 1 = 5의 동시 발생을 얻을 것입니다.

    @Guiem Bosch이 경우 두 단어가 연속적 일 때만 동시 발생이 측정됩니다.

    매트릭스를 계산하기 위해 @titipa 솔루션을 사용할 것을 제안합니다.

    Xc = (Y.T * Y) # this is co-occurrence matrix in sparse csr format
    

    여기서 X를 사용하는 대신 0보다 큰 위치의 행렬 Y와 다른 위치의 0을 사용합니다.

    이것을 사용하여, 첫 번째 예에서 우리는 다음을 갖게 될 것입니다 : 동시 발생 : 1 * 1 + 1 * 0 + 1 * 0 + 1 * 0 + 1 * 0 = 1 두 번째 예 : 동시 출현 : 1 * 1 + 1 * 1 + 1 * 1 + 1 * 1 + 1 * 0 = 5 그것은 우리가 정말로 찾고있는 것입니다.

  4. from https://stackoverflow.com/questions/35562789/word-word-co-occurrence-matrix by cc-by-sa and MIT license