Durch Anwendung der Dokumentvektorisierungsmethode in der Verarbeitung natürlicher Sprache haben wir eine farbcodierte Karte jeder Region basierend auf den im Text beschriebenen Regionsinformationen erstellt. Insbesondere werden die Ergebnisse der Klassifizierung der Dokumente der Stadtplanung (Instandhaltung, Entwicklung, Naturschutzpolitik: sogenannte Instandhaltung) des Ballungsraums nach dem Themenmodell (LDA) auf der Karte mit RGB-Werten ausgedrückt.
Ich denke, dass dies zu einer konzeptionellen Entdeckung führen könnte, dass "dieses Gebiet und dieses Gebiet geografisch getrennt sind, aber die gleichen Eigenschaften wie erwartet aufweisen".
Gegenwärtig sind die Daten nicht vollständig organisiert und die Zähne fehlen. Beispielsweise ist die Präfektur Ibaraki häufig lila, während die Präfekturen Chiba und Saitama meist grün und braun sind. Aber auch in Saitama zeigt die Westseite wie Chichibu eine Farbe, die der der Präfektur Ibaraki nahe kommt. Auch Kimitsu und Tokorozawa sind überraschend nah. Es ist ein Rätsel, warum das Zentrum von Saitama City (Omiya) auch lila ist usw. Mit zunehmender Anzahl von Daten kann sich das Genauigkeitsgefühl verbessern.
Wir haben die Stadtplanungsdokumente für Chiba, Saitama und Ibaraki von Links zum Masterplan für Stadtplanung des Ministeriums für Land, Infrastruktur, Verkehr und Tourismus repariert. Es werden jedoch nicht alle Bereiche abgedeckt und sind nur Beispiele. Ich habe einen solchen Datensatz (CSV-Format) als Eingabe erstellt.
name | description | |
---|---|---|
1 | Ryugasaki / Ushihisa | Ryugasaki / Ushiku-Stadtplanung (Ryugasaki-Stadt, Ushiku-Stadt, Tonstadt) - Stärkung der Zusammenarbeit zwischen benachbarten Städten im Stadtplanungsgebiet, Koexistenz mit reichlich vorhandener Natur und ländlicher Umgebung, während sie zusammenarbeiten und zusammenleben Es wurde (weggelassen)) |
2 | Iino City | Iino City Planning (Iino City) Ziel ist die Verwirklichung einer kohlenstoffarmen Gesellschaft durch Förderung der Nutzung öffentlicher Verkehrsmittel und Schaffung von Grünflächen im Stadtplanungsgebiet. Einzigartige Entwicklung der Region ~ (weggelassen) |
――Der tatsächlich erstellte Code lautet wie folgt. MeCab wird für die morphologische Analyse verwendet, Gensim wird für die Vektorisierung nach Themenmodellen verwendet und Scikit-Learn wird für die Dimensionsreduktion durch TSNE verwendet. Es mag viele Verbesserungen geben, aber ich möchte diese Bereiche nach Bedarf korrigieren.
visualizer.py
from sklearn.manifold import TSNE
from gensim import corpora, models
import string
import re
import MeCab
import pandas as pd
import numpy as np
#Text Tokenizer by MeCab
def text_tokenizer(text):
token_list = []
tagger = MeCab.Tagger()
tagger.parse('')
node = tagger.parseToNode(text)
while node:
pos = node.feature.split(",")
if pos[0] in ["Substantiv", "Verb", "Adjektiv"]: #target word-class
if pos[6] != '*': #lemma is added when it exists
token_list.append(pos[6])
else:
token_list.append(node.surface)
node = node.next
return list(token_list)
#Loading input dataset
df = pd.read_csv('input.csv', encoding="utf-8")
df['text'] = df['description'] #set target column
#Remove https-links
df['text_clean'] = df.text.map(lambda x: re.sub(r'https?://[\w/:%#\$&\?\(\)~\.=\+\-]+', "", x))
#Remove numerals
df['text_clean'] = df.text_clean.map(lambda x: re.sub(r'\d+', '', x))
#Converting all letters into lower case
df['text_clean'] = df.text_clean.map(lambda x: x.lower())
#Creating DataFrame for Token-list
df['text_tokens'] = df.text_clean.map(lambda x: text_tokenizer(x))
#LDA
np.random.seed(2000)
texts = df['text_tokens'].values
dictionary = corpora.Dictionary(texts)
corpus = [dictionary.doc2bow(text) for text in texts]
ldamodel = models.ldamodel.LdaModel(corpus, id2word=dictionary, num_topics=20, passes=5, minimum_probability=0)
ldamodel.save('lda_bz.model')
print(ldamodel.print_topics())
#Converting Topic-Model result into numpy matrix
hm = np.array([[y for (x,y) in ldamodel[corpus[i]]] for i in range(len(corpus))])
#Dimensionality reduction by tsne
tsne = TSNE(n_components=3, init='pca', verbose=1, random_state=2000, perplexity=50, method='exact', early_exaggeration=120, learning_rate=200, n_iter=1000)
embedding = tsne.fit_transform(hm)
x_coord = embedding[:, 0]
y_coord = embedding[:, 1]
z_coord = embedding[:, 2]
#RGB conversion with normalization
def std_norm(x, axis=None):
xmean = x.mean(axis=axis, keepdims=True)
xstd = np.std(x, axis=axis, keepdims=True)
y = (x-xmean)/xstd
min = y.min(axis=axis, keepdims=True)
max = y.max(axis=axis, keepdims=True)
norm_rgb = (y-min)/(max-min) * 254
result = norm_rgb.round(0)
return result
x_rgb = std_norm(x_coord, axis=0)
y_rgb = std_norm(y_coord, axis=0)
z_rgb = std_norm(z_coord, axis=0)
embedding = pd.DataFrame(x_coord, columns=['x'])
embedding['y'] = pd.DataFrame(y_coord)
embedding['z'] = pd.DataFrame(y_coord)
embedding["r"] = pd.DataFrame(x_rgb)
embedding["g"] = pd.DataFrame(y_rgb)
embedding["b"] = pd.DataFrame(z_rgb)
embedding['description'] = df.description
#export to csv
embedding.to_csv("output.csv", encoding="utf_8")
Das Grundkonzept besteht darin, eine "dreidimensionale Visualisierung von Dokumentvektoren" durchzuführen, die häufig in der Verarbeitung natürlicher Sprache durchgeführt wird, und die dreidimensionalen Vektoren (x-, y-, z-Werte) in RGB-Werte umzuwandeln.
Dieses Mal haben wir das [Themenmodell](https://qiita.com/tags/Topic Model) zum Vektorisieren von Dokumenten übernommen. Der Grund dafür ist, dass bei anderen Vektorisierungsmethoden (z. B. basierend auf tf-idf und word2vec) der xyz-Wert nach der Dimensionsreduzierung in vielen Fällen einen Ausreißerwert aufweist und der Effekt bei der Konvertierung in einen RGB-Wert von 0 bis 255 beeinträchtigt wird. Weil es zu groß war. Im Fall des Themenmodells dachte ich, dass bei entsprechender Einstellung der Parameter Ausreißer nicht leicht auftreten würden und dieses Problem gelöst werden könnte.
――Wenn jemand weiß, lassen Sie mich bitte wissen, ob es eine Möglichkeit gibt, den RGB-Wert in den Attributinformationen wie in QGIS auszudrücken.
―― Wenn der gesprochene Inhalt (Tendenz zum Auftreten von Wörtern, Thema usw.) nahe beieinander liegt, wird der Dokumentvektor in kurzer Entfernung als Vektor angezeigt. Wenn Sie ihn also in Farbe konvertieren, eine Stadt mit ähnlichen Schattierungen Ich denke, es kann beurteilt werden, dass der Inhalt, der erzählt wird, ähnlich ist. Bitte weisen Sie darauf hin, dass wir einen Gegenschlag gerne annehmen.
――Da diese Farbe die relative Beziehung zwischen Regionen anzeigt, ändert sich die Farbe jedes Mal, wenn Sie analysieren, indem Sie den Anfangswert ändern. Es ist schwierig, in Fällen wie "diese Arbeit jedes Jahr durchführen und Änderungen im Laufe der Zeit verfolgen" zu verwenden, daher würde ich gerne eine Lösung dafür finden.
――Wir verwenden diesmal Stadtplanungsdokumente probeweise, aber es ist nicht nur noch nicht möglich, alle Städte und Dörfer abzudecken, sondern es besteht allgemein das Gefühl, dass diese vorher "Merkmale der Stadt" darstellen. Ich denke, es gibt eine Lücke mit. Letztendlich denke ich, dass es interessant wäre, etwas zu schaffen, das die Stimmen der Touristen und die Diskussionsaufzeichnungen von Workshops auf Gemeindeebene widerspiegelt.
Recommended Posts