--LDA = latente Dirichelet-Zuordnung
In LDA gehört jedes Wort in einem Satz zu einem versteckten Thema (Thema, Kategorie), und es wird angenommen, dass der Satz aus diesem Thema gemäß einer gewissen Wahrscheinlichkeitsverteilung generiert wird und das Thema, zu dem es gehört, abgeleitet wird.
--Papier http://www.jmlr.org/papers/volume3/blei03a/blei03a.pdf
--alpha;: Parameter zum Abrufen des Themas --beta;: Parameter, um die Wörter im Thema zu erhalten --theta;: Polynomverteilungsparameter --w: Wort --z: Thema
Dieses Mal werde ich diese LDA verwenden, um zu überprüfen, ob Sätze nach Themen klassifiziert werden können.
20 Validiert mit Newsgroups
comp.graphics
comp.os.ms-windows.misc
comp.sys.ibm.pc.hardware
comp.sys.mac.hardware
comp.windows.x
rec.autos
rec.motorcycles
rec.sport.baseball
rec.sport.hockey
sci.crypt
sci.electronics
sci.med
sci.space
talk.politics.misc
talk.politics.guns
talk.politics.mideast
talk.religion.misc
alt.atheism
misc.forsale
soc.religion.christian
Dieses Mal verwenden wir die folgenden 4 Typen
'rec.sport.baseball': Baseball
'rec.sport.hockey': Hockey
'comp.sys.mac.hardware': Mac-Computer
'comp.windows.x': Windows-Computer
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.decomposition import LatentDirichletAllocation
import mglearn
import numpy as np
#data
categories = ['rec.sport.baseball', 'rec.sport.hockey', \
'comp.sys.mac.hardware', 'comp.windows.x']
twenty_train = fetch_20newsgroups(subset='train',categories=categories, \
shuffle=True, random_state=42)
twenty_test = fetch_20newsgroups(subset='test',categories=categories, \
shuffle=True, random_state=42)
tfidf_vec = TfidfVectorizer(lowercase=True, stop_words='english', \
max_df = 0.1, min_df = 5).fit(twenty_train.data)
X_train = tfidf_vec.transform(twenty_train.data)
X_test = tfidf_vec.transform(twenty_test.data)
feature_names = tfidf_vec.get_feature_names()
#print(feature_names[1000:1050])
#print()
# train
topic_num=4
lda =LatentDirichletAllocation(n_components=topic_num, max_iter=50, \
learning_method='batch', random_state=0, n_jobs=-1)
lda.fit(X_train)
Überprüfen Sie den Status der Bestätigung unten
sorting = np.argsort(lda.components_, axis=1)[:, ::-1]
mglearn.tools.print_topics(topics=range(topic_num),
feature_names=np.array(feature_names),
topics_per_chunk=topic_num,
sorting=sorting,n_words=10)
topic 0 topic 1 topic 2 topic 3
-------- -------- -------- --------
nhl window mac wpi
toronto mit apple nada
teams motif drive kth
league uk monitor hcf
player server quadra jhunix
roger windows se jhu
pittsburgh program scsi unm
cmu widget card admiral
runs ac simms liu
fan file centris carina
--topic1: Windows-Computer --topic2: Mac-Computer --topic0: Baseball oder Hockey, kann nicht wie erwartet klassifiziert werden --topic3: Computerbezogen? Ich konnte nicht wie erwartet klassifizieren
Es wird davon ausgegangen, dass Thema1 und Thema2 in der Lernphase ordentlich klassifiziert werden können.
Für die Daten zur Schlussfolgerung habe ich einen englischen Artikel von Apple auf Wikipedia ausgeliehen. Setzen Sie einige Wikipedia-Artikel auf text11 und text12.
text11="an American multinational technology company headquartered in Cupertino, "+ \
"California, that designs, develops, and sells consumer electronics,"+ \
"computer software, and online services."
text12="The company's hardware products include the iPhone smartphone,"+ \
"the iPad tablet computer, the Mac personal computer,"+ \
"the iPod portable media player, the Apple Watch smartwatch,"+ \
"the Apple TV digital media player, and the HomePod smart speaker."
Führen Sie die folgende Folgerung durch
# predict
test1=[text11,text12]
X_test1 = tfidf_vec.transform(test1)
lda_test1 = lda.transform(X_test1)
for i,lda in enumerate(lda_test1):
print("### ",i)
topicid=[i for i, x in enumerate(lda) if x == max(lda)]
print(text11)
print(lda," >>> topic",topicid)
print("")
### 0
an American multinational technology company headquartered in Cupertino, California, that designs, develops, and sells consumer electronics,computer software, and online services.
[0.06391161 0.06149079 0.81545564 0.05914196] >>> topic [2]
### 1
an American multinational technology company headquartered in Cupertino, California, that designs, develops, and sells consumer electronics,computer software, and online services.
[0.34345051 0.05899806 0.54454404 0.05300738] >>> topic [2]
Es kann gesagt werden, dass alle Sätze, die sich auf MAC (Apfel) beziehen, korrekt klassifiziert wurden, da gefolgert wurde, dass sie wahrscheinlich zu Thema2 (Mac-Computer) gehören.
Recommended Posts