--LDA = allocation de dirichelet latente
Dans LDA, chaque mot d'une phrase appartient à un sujet caché (sujet, catégorie), et le sujet est déduit en supposant que la phrase est générée à partir de ce sujet selon une distribution de probabilité.
--alpha;: Paramètres pour obtenir le sujet --beta;: Paramètres pour obtenir les mots du sujet --theta;: paramètre de distribution polynomiale --w: mot --z: sujet
Cette fois, j'utiliserai cette LDA pour vérifier si les phrases peuvent être classées par sujet.
20 Validé à l'aide de groupes de discussion
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
--Cette fois, nous utilisons les 4 types suivants
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)
Vérifiez l'état de la confirmation ci-dessous
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: ordinateur Windows --topic2: ordinateur Mac --topic0: Baseball ou hockey, ne peut pas être classé comme prévu --topic3: lié à l'ordinateur? Je ne pouvais pas classer comme prévu
On considère que le sujet 1 et le sujet 2 pourraient être classés de façon précise au stade de l'apprentissage.
Pour les données d'inférence, j'ai emprunté un article en anglais à Apple sur wikipedia. Définissez certains articles de wikipedia sur text11 et 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."
Effectuer une inférence ci-dessous
# 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]
On peut dire que toutes les phrases liées à MAC (apple) ont été correctement classées car il a été déduit qu'elles étaient susceptibles d'appartenir à topic2 (ordinateur mac).
Recommended Posts