텍스트 마이닝 : 인공 지능으로 텍스트 (예 : 뉴스 기사)를 클러스터링하는 방법?


15

나는 탁구 연주, 필기 숫자 및 물건 분류와 같은 다양한 작업을 위해 일부 신경망 (MLP (완전히 연결되어 있음), Elman (반복))을 만들었습니다.

또한 여러 자필 필기 노트를 분류하기 위해 첫 번째 회선 신경망을 구축하려고 시도했지만 25x25 크기의 이미지와 같은 표준화 된 입력에 의존 할 수있는 이미지 인식 / 클러스터링 작업에서 텍스트를 분석하고 클러스터링하는 것은 완전히 새로운 방법입니다. RGB 또는 그레이 스케일 등 ... 사전 가정 기능이 많이 있습니다.

뉴스 기사와 같은 텍스트 마이닝의 경우 입력 크기가 달라집니다 (다른 단어, 다른 문장, 다른 텍스트 길이 등).

인공 지능, 바람직하게는 신경망 / SOM을 활용하는 최신 텍스트 마이닝 도구를 어떻게 구현할 수 있습니까?

불행히도 시작하는 간단한 자습서를 찾을 수 없었습니다. 복잡한 과학 논문은 읽기 어렵고 주제를 배우기위한 최선의 선택은 아닙니다 (제 의견으로는). 이미 MLP, 드롭 아웃 기술, 컨볼 루션 신경망 등에 관한 논문을 많이 읽었지만 텍스트 마이닝에 대한 기본 논문을 찾을 수 없었습니다. 내가 찾은 모든 것은 매우 제한된 텍스트 마이닝 기술에 비해 너무 높은 수준이었습니다.

답변:


12

Latent Dirichlet Allocation (LDA)은 훌륭하지만 신경망을 사용하는 더 나은 것을 원한다면 doc2vec ( https://radimrehurek.com/gensim/models/doc2vec.html )를 강력히 제안 합니다.

그것은 무엇입니까? Google의 word2vec와 유사하게 작동하지만 단일 단어 기능 벡터 대신 단락에 대한 기능 벡터를 얻습니다. 이 방법은 스킵 그램 모델과 신경망을 기반으로하며 문서의 특징 벡터를 추출하는 가장 좋은 방법 중 하나로 간주됩니다.

이제이 벡터가 있다면 k- 평균 군집화 (또는 다른 바람직한 알고리즘)를 실행하고 결과를 군집화 할 수 있습니다.

마지막으로, 특징 벡터를 추출하려면 다음과 같이 쉽게 할 수 있습니다.

from gensim.models import Doc2Vec
from gensim.models.doc2vec import LabeledSentence

class LabeledLineSentence(object):
    def __init__(self, filename):
        self.filename = filename
    def __iter__(self):
        for uid, line in enumerate(open(self.filename)):
            yield LabeledSentence(words=line.split(), labels=['TXT_%s' % uid])


sentences = LabeledLineSentence('your_text.txt')

model = Doc2Vec(alpha=0.025, min_alpha=0.025, size=50, window=5, min_count=5,
                dm=1, workers=8, sample=1e-5)

model.build_vocab(sentences)

for epoch in range(500):
    try:
        print 'epoch %d' % (epoch)
        model.train(sentences)
        model.alpha *= 0.99
        model.min_alpha = model.alpha
    except (KeyboardInterrupt, SystemExit):
        break

2
NLP 문헌에서 LDA는 Latent Dirichlet Analysis를 참조하는 것으로 보입니다. 이 문헌에서 선형 판별 분석은 아무 소용이 없습니까?
Sid

정확히, LDA는 우리의 경우에 Latent Dirichlet Allocation입니다.
Yannis Assael 2016 년

5

LDA 외에도 K-Means 와 함께 Latent Semantic Analysis 를 사용할 수 있습니다 . 신경망이 아니라 "클래식"클러스터링이지만 꽤 잘 작동합니다.

sklearn의 예 ( 여기 ) :

dataset = fetch_20newsgroups(subset='all', shuffle=True, random_state=42)
labels = dataset.target
true_k = np.unique(labels).shape[0]

vectorizer = TfidfTransformer()
X = vectorizer.fit_transform(dataset.data)

svd = TruncatedSVD(true_k)
lsa = make_pipeline(svd, Normalizer(copy=False))

X = lsa.fit_transform(X)

km = KMeans(n_clusters=true_k, init='k-means++', max_iter=100)
km.fit(X)

이제 클러스터 할당 레이블을 사용할 수 있습니다 km.labels_

예를 들어 다음은 LSA를 사용하여 20 개의 뉴스 그룹에서 추출한 주제입니다.

Cluster 0:  space  shuttle  alaska  edu  nasa  moon  launch  orbit  henry  sci
Cluster 1:  edu  game  team  games  year  ca  university  players  hockey  baseball
Cluster 2:  sale  00  edu  10  offer  new  distribution  subject  lines  shipping
Cluster 3:  israel  israeli  jews  arab  jewish  arabs  edu  jake  peace  israelis
Cluster 4:  cmu  andrew  org  com  stratus  edu  mellon  carnegie  pittsburgh  pa
Cluster 5:  god  jesus  christian  bible  church  christ  christians  people  edu  believe
Cluster 6:  drive  scsi  card  edu  mac  disk  ide  bus  pc  apple
Cluster 7:  com  ca  hp  subject  edu  lines  organization  writes  article  like
Cluster 8:  car  cars  com  edu  engine  ford  new  dealer  just  oil
Cluster 9:  sun  monitor  com  video  edu  vga  east  card  monitors  microsystems
Cluster 10:  nasa  gov  jpl  larc  gsfc  jsc  center  fnal  article  writes
Cluster 11:  windows  dos  file  edu  ms  files  program  os  com  use
Cluster 12:  netcom  com  edu  cramer  fbi  sandvik  408  writes  article  people
Cluster 13:  armenian  turkish  armenians  armenia  serdar  argic  turks  turkey  genocide  soviet
Cluster 14:  uiuc  cso  edu  illinois  urbana  uxa  university  writes  news  cobb
Cluster 15:  edu  cs  university  posting  host  nntp  state  subject  organization  lines
Cluster 16:  uk  ac  window  mit  server  lines  subject  university  com  edu
Cluster 17:  caltech  edu  keith  gatech  technology  institute  prism  morality  sgi  livesey
Cluster 18:  key  clipper  chip  encryption  com  keys  escrow  government  algorithm  des
Cluster 19:  people  edu  gun  com  government  don  like  think  just  access

신청할 수도 있습니다 음이 아닌 행렬 인수 분해를클러스터링으로 해석 될 수있는 수 . 변환 된 공간에서 각 문서의 가장 큰 구성 요소를 가져 와서 클러스터 할당으로 사용하기 만하면됩니다.

sklearn에서 :

nmf = NMF(n_components=k, random_state=1).fit_transform(X)
labels = nmf.argmax(axis=1)

각 군집의 주요 단어를 어떻게 얻었습니까?
Mayukh Nair

3

LSA + KMeans는 잘 작동하지만 원하는 클러스터 양을 입력해야합니다. 또한 발견 된 클러스터의 실루엣 계수는 일반적으로 낮습니다.

더 나은 결과를 얻는 또 다른 방법은 DBSCAN 예제 를 사용하는 것입니다. 입니다. 밀도가 높은 센터를 검색하고 클러스터를 만들기 위해 확장합니다. 이 방법에서는 최적의 클러스터 양을 자동으로 찾습니다.

또한 Snowball과 같은 형태소 분석기를 사용하여 오타로 인한 오류를 줄이는 것이 매우 중요하다는 것을 알았습니다. 중요한 의미가없는 일반적인 단어가 많기 때문에 의미가없는 일부 군집을 제거하려면 좋은 단어 중지 목록도 매우 중요합니다. 카운트 매트릭스를 만들 때 정규화도 중요하므로 데이터 세트에서 발생 빈도는 낮지 만 특정 샘플에서는 발생 빈도가 높은 단어에 가중치를 추가 할 수 있습니다. 이 단어는 의미가 있으며 놓치지 않으려 고합니다. 또한 모든 특정 샘플에서 단어가 많이 나오는 단어의 무게를 줄입니다 (중지 단어와 비슷하지만 약간의 의미가있는 단어의 경우). 마지막으로 주목해야 할 것은 클러스터의 상위 10 개 단어를 인쇄하는 것이 아니라보다 확장 된 선택을하는 것입니다. 일반적으로 클러스터에 제공 할 라벨에 대한 키워드의 품질과 관련성은 이러한 상위 10-20 단어 후에 크게 감소하는 경향이 있습니다. 따라서 상위 키워드에 대한 확장 된보기를 통해 클러스터가 실제로 관련성이 있거나 소음에 의해 오염되었는지 분석 할 수 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.