Neulich bemerkte ich diese Bemerkung von Shinjiro Koizumi.
"Stellen Sie sich die Zukunft der Diät vor, und wenn dieselben Fragen oft gestellt werden, möchte ich, dass Sie künstliche Intelligenz verwenden. Es gibt viele Dinge, die Sie tun können, wie die Verwendung künstlicher Intelligenz und die Zukunft der Diät. Ja “([Herr Koizumi, ein Einwohner,„ Ähnliche Frage, in Zukunft mit KI drehen “) (https://www.asahi.com/articles/ASL1Q6W20L1QUTFK01N.html))
Also fragte ich mich, ob ich das wirklich tun könnte, während ich gleichzeitig Doc2Vec studierte, und versuchte, den "Fragebogen" zu verwenden, der es bis zu einem gewissen Grad einfach macht, Daten zu erhalten. BERT (Bidirectional Encoder Representations from Transformers) und ELMo (Embeddings from Language Models) kommen heutzutage heraus, Doc2Vec? Ich denke, einige Leute sagen das, aber ich denke, dass es immer noch aktiv ist, um eine kleine Analyse durchzuführen, wie zum Beispiel in Gensim verpackt und einfach zu bedienen.
Wenn Sie im Landtag eine Frage stellen, können Sie sich vorstellen, dass ein Mitglied des Landtages den Minister mündlich fragt. Dem Kabinett Fragen zu Gesetzentwürfen und Richtlinien zu stellen, ist eine wichtige Aufgabe für den Gesetzgeber, aber diese Fragen können auch schriftlich gestellt werden. Das ist die Fragestellung.
Die Zeit, um Fragen im Parlament zu stellen, ist begrenzt, insbesondere bei Minderheitenparteien. Diese Fragestellung wird in solchen Fällen häufig verwendet. Es ist eine der wichtigsten Verfolgungsmethoden für Parlamentarier, die in der Vergangenheit dem AIDS-Vorfall mit Drogenschäden ausgesetzt waren.
In der Regel muss das Kabinett, das den Fragebogen erhält, innerhalb von 7 Tagen schriftlich antworten. Die Antwort zu diesem Zeitpunkt muss jedoch durch das Kabinett geleitet werden. Es scheint eine schwere Aufgabe für das Feld zu sein, da die Antwort auf den Fragebogen die offizielle Meinung der Regierung bleiben wird, auch weil sie die Kabinettssitzung bestanden hat.
Was ist der "Fragebogen", den Kasumi nicht mag? ABC in Bezug auf aktuelle Angelegenheiten Ich habe versucht, WordCloud als Übermittler des Fragebogens für den diesmal vorgesehenen Zeitraum zu verwenden. Die überwältigende Präsenz von Muneo Suzuki ...
Doc2Vec Docment-to-Vector, das Dokument = Dokumentmerkmale als Vektor darstellt. Doc2Vec wurde von Tomas Mikilov vorgeschlagen, der Word2Vec entwickelt hat, und die folgenden zwei Methoden werden als Lernmethoden vorgeschlagen.
In PV-DM wird der Dokumentvektor gelernt, um das unmittelbar folgende Wort aus dem Wortvektor vorherzusagen, der mit dem Dokumentvektor kontinuierlich ist.
In PV-DBOW wird nach Ignorieren der Wortreihenfolge der Satzvektor gelernt, um das im Satz enthaltene Wort zu erraten. Es wird gesagt, dass die verteilte Darstellung von Sätzen mit dieser Methode einfacher als PV-DM ist, aber weniger genau. Verwendung der Technologie zur Verarbeitung natürlicher Sprache - Ich habe versucht, die Qualität von Papieren mithilfe von Doc2Vec und DAN vorherzusagen! -
Dieses Mal werde ich den Fragebogen des Repräsentantenhauses und des Repräsentantenhauses verwenden, der durch Kriechen und Schaben erhalten wurde. Eigentlich wollte ich alle Daten aus der 1. Nationalversammlung extrahieren, aber weil mein Herz in der Mitte brach, konzentrierte ich mich auf Heisei und Reiwa und extrahierte die Daten des Fragebogens. Das Zielparlament ist vom 114. bis zum 200. Parlament. Da diesmal Doc2Vec der Hauptcode ist, wird außerdem der Crawling- und Scraping-Code weggelassen und nur das Ergebnis veröffentlicht. Darüber hinaus werden wir in diesem Artikel von der 114. bis zur 199. Nationalversammlung modellieren und die Ähnlichkeit des Fragebogens in der 200. Nationalversammlung schätzen.
Importieren Sie zunächst die Bibliothek, bevor Sie den Inhalt der Daten anzeigen. Da ich diesmal auf Japanisch zeichne, verwende ich die Schriftart "NotoSansMonoCJKjp-Regular.otf". Abschied vom Tofu.
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.pylab import rcParams
from matplotlib.font_manager import FontProperties
font_path = "/mnt/c/u_home/font/NotoSansMonoCJKjp-Regular.otf"
font_prop = FontProperties(fname=font_path)
Nun, die Daten dieses Mal sind so. Von oben die Fragebögen der Repräsentantenhäuser vom 114. bis zum 199., die Fragebögen der Repräsentantenhäuser der 200. Versammlung und der Zeitraum, in dem der Landtag geöffnet ist ([Seite hier]](Abgerufen von http://www.shugiin.go.jp/internet/itdb_annai.nsf/html/statics/shiryo/kaiki.htm).
data = pd.read_excel("data.xlsx")
data_200 = pd.read_excel("data_200.xlsx")
data_diet_open = pd.read_excel("data_diet_open.xlsx")
Nach Datum sortieren und die oberen zwei und unteren zwei anzeigen. ..
data.sort_values(by=['date']).iloc[np.r_[0:2, -2:0]]
Ergänzend
time
Die Sitzung des Landtages, in der der Fragebogen eingereicht wurde
"Diät" Repräsentantenhaus oder Haus der Ratsmitglieder
title
Der Titel der Fragestellung
name
Einsender des Fragebogens
Datum
Das Datum, an dem der Fragebogen eingereicht wurde
question
Der Text der Fragestellung
q_numb
Anzahl der Fragen in der Fragenerklärung (Details werden später beschrieben)
Jahr
Das Jahr, in dem der Fragebogen eingereicht wurde
Monat
Der Monat, in dem der Fragebogen eingereicht wurde
Tag
Der Tag, an dem der Fragebogen eingereicht wurde
Die ältesten Daten, die dieses Mal verwendet wurden, sind der "Fragebogen zur Zinskontrolle von Geldgebern", der von Vertreter Shigeji Inokuma am 20.01.1989 eingereicht wurde, und der neueste ist Vertreter Noshi Koga 2019-08-. Dies ist der "Fragebogen zu" Vertragsuntersuchungen und Verbesserungsbemühungen der Japan Post Group ", der im Jahr 05 eingereicht wurde. Die Anzahl der Daten beträgt 15.515. Haben Sie das Gefühl, dass diese Anzahl von Daten nicht zu gering ist?
data.shape
(15515, 10)
Gleiches gilt für die Daten der 200. Nationalversammlung. Die Anzahl der Daten beträgt 167.
data_200.sort_values(by=['date']).iloc[np.r_[0:2, -2:0]]
Schließlich eine Liste der parlamentarischen Sitzungen
EDA Durchsuchen Sie die Daten, bevor Sie zu Doc2Vec wechseln
Zunächst eine Grafik für jedes Jahr. Sie hat seit etwa 2006 rapide zugenommen.
rcParams['figure.figsize'] = 8,4
data.groupby('year').size().plot.bar()
Dann monatlich. Viele im Juni. Von Juli bis September gibt es nur wenige.
rcParams['figure.figsize'] = 8,4
data.groupby('year').size().plot.bar()
Endlich jeden Tag. Da die Anzahl der 31. in erster Linie gering ist, verstehe ich, dass die Anzahl der Absichten ebenfalls gering ist, aber es gibt keine andere Tendenz als diese.
rcParams['figure.figsize'] = 8,4
data.groupby('day').size().plot.bar()
Um zu verstehen, wie viele Absichten pro Tag eingereicht wurden, haben wir nach Datum sortiert und die Anzahl der Fälle gezählt und die Anzahl der nicht eingereichten Tage auf Null gesetzt, den ersten Tag der 114. Nationalversammlung (30. Dezember 1988). ) Bis zum letzten Tag der 199. Nationalversammlung (5. August 2019) möchte ich Zeitreihendaten erstellen.
def convert_to_daily(data):
time_index = pd.DataFrame(index=pd.date_range('19881230','20190805'))
#Legen Sie den ersten und den letzten Tag des Zielzeitraums fest
doc_num_daily = pd.DataFrame(data.groupby('date').size(), columns=['doc_num'])
#Zählen Sie die Anzahl der Hauptdokumente für jedes Datum und geben Sie den Spaltennamen ein'doc_num'Zu
data_daily = pd.concat([time_index, doc_num_daily], axis=1) #verschmelzen
data_daily['doc_num'] = data_daily['doc_num'].fillna(0) #Keine fehlenden Werte
data_daily = data_daily.iloc[:,0] #In der Pandas-Serie
return data_daily
data_daily = convert_to_daily(data) #Lauf
Darüber hinaus haben wir während der Diät eine Funktion erstellt, um die Hintergrundfarbe grau zu machen.
def plot_daily_data(data_daily, start_day, end_day):
subdata = data_diet_open[(data_diet_open['end'] >= start_day) & (data_diet_open['end'] <= end_day)].sort_values(by='diet_time').reset_index(drop=True)
plt.plot(data_daily.loc[start_day:end_day])
plt.title("Number of docments between " + start_day + " and " + end_day)
for i in range(subdata.shape[0]):
plt.axvspan(subdata.start[i],subdata.end[i], color=sns.xkcd_rgb['grey'], alpha=0.5)
Also Handlung.
rcParams['figure.figsize'] = 20,5
start_day = "1988-12-30"; end_day = "2019-12-31"
plot_daily_data(data_daily, start_day, end_day)
Irgendwie steigt es und es scheint, dass es seit 2004 zugenommen hat, aber es ist schwer zu sehen ... also habe ich es in drei Teile geteilt.
start_day = "1988-12-30"; end_day = "1999-12-31"
plot_daily_data(data_daily, start_day, end_day)
start_day = "2000-01-01"; end_day = "2009-12-31"
plot_daily_data(data_daily, start_day, end_day)
start_day = "2010-01-01"; end_day = "2019-12-31"
plot_daily_data(data_daily, start_day, end_day)
Da der Fragebogen nur während der Sitzung des Landtages eingereicht werden kann, ist klar, dass die Anzahl der Einreichungen am Ende jeder Sitzung des Landtages zunimmt (= ganz rechts in Grau). Trotzdem habe ich es in drei Teile geteilt und die Grafik gelöscht, aber die Skala auf der linken Seite nimmt allmählich zu, was deutlich zeigt, dass die Fragestellung heutzutage häufig verwendet wird.
Zeigen Sie die Anzahl der eingereichten Fragebögen in einem Histogramm an. Es ist eine schöne abfallende Grafik.
plt.hist(data_daily[data_daily > 0], bins=50)
Der Maximalwert beträgt 84 am 25. September 2015! Was an diesem Tag passiert ist, wird später beschrieben ...
data_daily.max()
doc_num 84.0
dtype: float64
data.groupby('date').size().idxmax()
Timestamp('2015-09-25 00:00:00')
Ich würde gerne sehen, welche Parlamentarier den Fragebogen oft einreichen. Erstens beträgt die Anzahl der in den Daten aufgeführten Parlamentarier 789. Bitte beachten Sie, dass diese Daten den gemeinsamen Namen als "Masaken Akamine, Chizuru Takahashi, Hidekatsu Yoshii" behandeln.
len(data.name.unique())
789
Übrigens, hier sind die 30 besten Leute, die interessiert sind!
subdata = data.groupby('name').filter(lambda x: len(x) >= 100)
len(subdata.name.unique())
30 #Extrahieren Sie die Top 30 Personen
plot_value = subdata.groupby('name').size().sort_values(ascending=False)
plot_index = subdata.groupby('name').size().sort_values(ascending=False).index
rcParams['figure.figsize'] = 20,5
plt.bar(plot_index, plot_value)
plt.xticks(plot_index, rotation=90, fontproperties=font_prop)
for i, v in enumerate(plot_value):
plt.text(i - 0.5, v + 5, str(v), color='blue')
Es war Muneo Suzuki, der weit hinter dem 2. Platz und darunter die Führung übernahm. Diese Nummer 2155 ... [Wikipedia](https://ja.wikipedia.org/wiki/%E8%B3%AA%E5%95%8F%E4%B8%BB%E6%84%8F%E6%9B%B8#%E6% 8F% 90% E5% 87% BA% E6% 95% B0) hat auch eine perfekte Beschreibung.
"Ein Beispiel für viele Einreichungen ist Muneo Suzuki, eine neue Partei, die in der Oppositionszeit 1900 Fragen eingereicht hat, auch bekannt als" König der Fragen ". Muneo verließ den Landtag, nachdem er 2010 seinen Job verloren hatte. Danach reichte er den Fragebogen weiterhin bei Takahiro Asano ein, der sein Nachfolger in derselben neuen Partei wurde. Als Takako Suzuki, die älteste Tochter von Muneo, im Juni 2013 gewählt wurde, hat sie Takako mit einer schriftlichen Untersuchung angegriffen. ”
Es wird gesagt, dass die Anwesenheit von Muneo Suzuki die Rolle des Fragebogens stark verändert hat. Es wird auch in [NHK-Artikel] erwähnt (https://www3.nhk.or.jp/news/html/20190926/k10012096901000.html). Daher möchte ich die Anzahl der Fragen von Muneo Suzuki betrachten.
muneo_daily = convert_to_daily(data[data['name']=="Muneo Suzuki"].reset_index(drop=True))
rcParams['figure.figsize'] = 20,5
plt.plot(data_daily)
plt.plot(muneo_daily)
for i in range(data_diet_open.shape[0]):
plt.axvspan(data_diet_open.start[i],data_diet_open.end[i], color=sns.xkcd_rgb['grey'], alpha=0.4)
Die orange Farbe ist die Anzahl der Einreichungen des Fragebogens von Herrn Muneo Suzuki. Verlängerung des Zeitraums, in dem Herr Muneo Suzuki den Fragebogen einreichte,
start_day = "2005-10-03"; end_day = "2010-08-04"
subdata = data_diet_open[(data_diet_open['end'] >= start_day) & (data_diet_open['end'] <= end_day)].sort_values(by='diet_time').reset_index(drop=True)
plt.plot(data_daily.loc[start_day:end_day])
plt.plot(muneo_daily.loc[start_day:end_day])
plt.title("Number of docments between " + start_day + " and " + end_day)
for i in range(subdata.shape[0]):
plt.axvspan(subdata.start[i],subdata.end[i], color=sns.xkcd_rgb['grey'], alpha=0.5)
Von 2006 bis 2007 konnten Sie sehen, dass die meisten der eingereichten Fragebögen Herr Muneo Suzuki waren.
Das nächste Mal möchte ich ein Mitglied finden, das viel pro Tag einreicht.
subdata = data.groupby(['name','date']).filter(lambda x: len(x) >= 15)
pd.DataFrame(subdata.groupby(['name','date']).size().sort_values(ascending=False))
An der Spitze stand Herr Konishi, der am 25. September 2015 55 Bücher einreichte. Wie erwartet gibt es Zeiten, in denen es nur den Spitznamen "Quizkönig der Diät" trägt. Hier ist übrigens der Titel des Fragebogens von Herrn Konishi, der an diesem Tag eingereicht wurde.
Ähnliche Titel gehen weiter, aber vor allem 39 und 40 haben nicht geklappt ... Obwohl die Kosten für die Fragestellung geschrien werden, scheint es, als würde man nach einem Fehler suchen.
Diesbezüglich wurde auch dieser Artikel geschrieben.
"Bei Betrachtung der Fragen von Vertreter Konishi, der diesmal eine Rekordzahl von 55 Fragen einreichte, gab es einen Fall, in dem nur eineinhalb Zeilen Fragen mehrmals mit demselben Thema gestellt wurden. Wenn das Buch das gleiche Thema hat, können Sie mehrere Fragen in Aufzählungszeichen stellen. Viele der Inhalte fragen auch nach der Interpretation des Wortlauts, und Premierminister Abe sagte einmal im Haushaltsausschuss: "Fragen wie Quiz sind produktiv. Es ist ein Eindruck, dass Fragen ohne großes Bild aufgereiht sind, was mich an die Szene erinnert, in der mir erzählt wurde. ""
In der Erklärung des Spaltennamens der Daten habe ich geschrieben, dass "q_numb" später beschrieben wird, aber dieses Mal wird zum Zeitpunkt des Scrapings nicht nur die Anzahl der Fragenabsichten, sondern auch die Anzahl der in der Fragenabsicht beschriebenen Fragen extrahiert. Zum Beispiel stellt diese Erklärung drei Fragen.
Der chinesische Zahlenteil ist eine individuelle Frage. Die Idee ist, dass die tatsächlichen Kosten erzielt werden können, indem die Anzahl der Fragen in der Fragenerklärung und nicht nur die Anzahl der Fragen betrachtet wird. Beginnen wir mit der Gesamtzahl der Fragen pro Tag.
def convert_to_daily_qnum_sum(data):
time_index = pd.DataFrame(index=pd.date_range('19881230','20190805'))
doc_num_daily = data.groupby(['date'], as_index=False)['q_numb'].sum()
doc_num_daily.set_index('date', inplace=True)
data_daily = pd.concat([time_index, doc_num_daily], axis=1)
data_daily['q_numb'] = data_daily['q_numb'].fillna(0)
data_daily = data_daily["q_numb"]
return data_daily
convert_to_daily_qnum_sum(data).plot()
for i in range(data_diet_open.shape[0]):
plt.axvspan(data_diet_open.start[i],data_diet_open.end[i], color=sns.xkcd_rgb['grey'], alpha=0.4)
Dies hat auch seit 2000 zugenommen. Insbesondere seit etwa 2007 gab es 269 (2007-07-03) Fragen, die erheblich zugenommen haben, und seitdem wurden mehr als 200 Tage gesehen. Wir werden uns auch die durchschnittliche Anzahl der Fragen pro Tag ansehen.
def convert_to_daily_qnum_mean(data):
time_index = pd.DataFrame(index=pd.date_range('19881230','20190805'))
doc_num_daily = data.groupby(['date'], as_index=False)['q_numb'].mean()
doc_num_daily.set_index('date', inplace=True)
data_daily = pd.concat([time_index, doc_num_daily], axis=1)
data_daily['q_numb'] = data_daily['q_numb'].fillna(0)
data_daily = data_daily["q_numb"]
return data_daily
convert_to_daily_qnum_mean(data).plot()
for i in range(data_diet_open.shape[0]):
plt.axvspan(data_diet_open.start[i],data_diet_open.end[i], color=sns.xkcd_rgb['grey'], alpha=0.4)
Hier ist nicht viel zu spüren ... Die größte Anzahl von Fragen in einer Frage war Kazunori Yamais "Fragebogen zu nationalen strategischen Sonderzonen im Beschäftigungssektor" mit 68 Fragen! Irgendwie fühlt es sich so an, als würden Sie einen Test machen, wie "Bitte geben Sie drei konkrete Beispiele für die Klärung der Entlassungsregeln an" und "Ist Artikel 16 des Arbeitsvertragsgesetzes in der Sonderzone überhaupt nicht anwendbar?" wurde….
Doc2Vec
Die Datensuche ist lang geworden, aber hier ist die eigentliche Produktion. Teilen Sie zunächst den Satz in Wörter für jeden Text der Fragestellung (separate Schrift). Wenn es sich beispielsweise um "Ich bin ein Mann" handelt, wird es in Wortebenen wie "[Ich bin ein Mann]" unterteilt und jeweils durch ein Leerzeichen halber Breite getrennt. Die, die ich dieses Mal in der Abteilung verwendet habe, ist "MeCab". Die folgende Funktion wird für die Division verwendet. Es können nur die für "POS1" erforderlichen Teilwörter extrahiert werden.
import MeCab
def word_pos(text, POS1=['Coalm','Substantiv','Adverb','Verb','Präfix','Verbindung',
'Hilfsverb','Partikel','Adjektiv','Symbol','Beeindruckende Worte','Füllstoff','Andere']):
tagger = MeCab.Tagger('mecab -d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd')
tagger.parse('')
node = tagger.parseToNode(text)
word_class = []
while node:
word = node.surface
wclass = node.feature.split(',')
if wclass[0] != u'BOS/EOS':
if wclass[6] == None:
if wclass[0] in POS1:
word_class.append((word,wclass[0],wclass[1],""))
else:
if wclass[0] in POS1:
word_class.append((word,wclass[0],wclass[1]))
node = node.next
word_class = pd.DataFrame(word_class, columns=['term', 'pos1', 'pos2'])
return word_class
Nachdem wir die Lücken im Hauptteil der Fragestellung gelöscht haben, werden wir nur die Nomenklatur und die Adjektive extrahieren und dann die Schwänze, Nichtunabhängigkeit und Zahlen löschen, die nicht viel Sinn machen. Und speichern Sie es als word_list
in data
data.question = data.question.str.replace("\u3000", " ")
data_200.question = data_200.question.str.replace("\u3000", " ")
data['word_list'] = ""
for i in range(data.shape[0]):
each_data = word_pos(data.question[i], ["Substantiv","Adjektiv"])
each_data1 = each_data[each_data['pos2'] != 'Suffix']
each_data1 = each_data1[each_data1['pos2'] != 'Nicht unabhängig']
each_data1 = each_data1[each_data1['pos2'] != 'Nummer']
data.loc[i,"word_list"] = " ".join(list(each_data1.term))
data_200['word_list'] = ""
for i in range(data_200.shape[0]):
each_data = word_pos(data_200.question[i], ["Substantiv","Adjektiv"])
each_data1 = each_data[each_data['pos2'] != 'Suffix']
each_data1 = each_data1[each_data1['pos2'] != 'Nicht unabhängig']
each_data1 = each_data1[each_data1['pos2'] != 'Nummer']
data_200.loc[i,"word_list"] = " ".join(list(each_data1.term))
Um ein Bild zu erhalten, gebe ich Ihnen nur ein Beispiel. Wenn Sie in Kamakura City, Präfektur Kanagawa, word_pos
verwenden, um das Tsunami-Evakuierungstraining an einem Strand in der Stadt durchzuführen, ist dies wie folgt.
Doc2Vec Hier werden wir den Text in Wörter unterteilen und sie für jede Frage in die Liste aufnehmen. Das Bild ist [([Wort 1, Wort 2, Wort 3], Dokument-ID), ...]. Im folgenden Code beziehen sich Wörter auf die Liste der im Dokument enthaltenen Wörter (mit doppelten Wörtern), und Tags beziehen sich auf die Kennung der Fragenanweisung (in der Liste angegeben. Einer Frageanweisung können mehrere Tags hinzugefügt werden). ..
docments = data.word_list
tagged_data = [TaggedDocument(words = data.split(),tags = [i]) for i,data in enumerate(docments)]
model = Doc2Vec(documents=tagged_data, size=300, window=10, min_count=5, workers=4, seed=1, dm=1)
Für Parameter
size
: Länge des Vektors
window
: Fenstergröße
min_count
: Mindestanzahl der zu zählenden Wörter
Arbeiter
: Anzahl der Threads
seed
: Feste Zufallszahl
dm
: Wenn dm = 1 ist, lerne mit PV-DM, sonst mit DBoW
Es wird sein. Darüber hinaus gibt es "alpha" und "min_alpha", die die Lernrate angeben, aber nachdem ich verschiedene Dinge ausprobiert und qualitativ bewertet habe, habe ich mich für die vorherigen Parameter entschieden. Um ehrlich zu sein, hat gensim
keine Funktion, um den Verlust automatisch zu berechnen, daher hatte ich das Gefühl, dass es viel einfacher wäre, diesen Bereich selbst zu modellieren. Außerdem sehe ich viel solchen Code im Sinne des Lernens.
for epoch in range(10):
print('iteration {0}'.format(epoch+1))
model.train(tagged_data, total_examples=model.corpus_count, epochs=model.iter)
model.alpha -= 0.0002 # decrease the learning rate
model.min_alpha = model.alpha # fix the learning rate, no decay
Laut dem Ersteller von "gensim" ist dies jedoch der Lerncode für die ältere Version von "Doc2Vec", und die aktuelle Version muss nur ausgeführt werden, wenn Sie ein sehr erfahrener Experte sind. war. What does epochs mean in Doc2Vec and train when I have to manually run the iteration? "An advanced user who needed to do some mid-training logging or analysis or adjustment might split the training over multiple train() calls, and very consciously manage the effective alpha parameters for each call. An extremely advanced user experimenting with further training on an already-trained model might also try it, aware of all of the murky quality/balance issues that might involve. But essentially, unless you already know specifically why you'd need to do so, and the benefits and risks, it's a bad idea."
Es gibt auch einen interessanten Kommentar des Erstellers von "gensim" zur Größe des Vektors. Reicht die Datenmenge diesmal gerade noch aus? what is the minimum dataset size needed for good performance with doc2vec? In general, word2vec/paragraph-vector techniques benefit from a lot of data and variety of word-contexts. I wouldn't expect good results without at least tens-of-thousands of documents. Documents longer than a few words each work much better. Results may be harder to interpret if wildly-different-in-size or -kind documents are mixed in the same training – such as mixing tweets and books.
model.save("doc2vec.model") #Modell speichern
model = Doc2Vec.load('doc2vec.model') #Modellaufruf
Sie können mit model.docvecs.most_similar ()
nach ähnlichen Fragenabsichten suchen.
model.docvecs.most_similar(10531)
[(12348, 0.8008440732955933),
(10543, 0.7899609804153442),
(10534, 0.7879745960235596),
(12278, 0.7819333076477051),
(14764, 0.7807815074920654),
(13340, 0.7798347473144531),
(11314, 0.7743450403213501),
(14881, 0.7730422616004944),
(1828, 0.7719383835792542),
(14701, 0.7534374594688416)]
So werden das Original und die beiden oberen angezeigt
pd.set_option('display.max_colwidth', -1)
data.iloc[10531:10532,:6]
idx = model.docvecs.most_similar(10531)[0][0]
pd.set_option('display.max_colwidth', -1)
data.iloc[idx:idx+1,:6]
idx = model.docvecs.most_similar(10531)[1][0]
pd.set_option('display.max_colwidth', -1)
data.iloc[idx:idx+1,:6]
Alle von ihnen sind Themen wie Überstunden und Work-Life-Balance, daher denke ich, dass dies ein faires Ergebnis ist.
Nun, das Hauptthema ist endlich von hier.
"Stellen Sie sich die Zukunft der Diät vor, und wenn dieselben Fragen oft gestellt werden, möchte ich, dass Sie künstliche Intelligenz verwenden. Es gibt viele Dinge, die Sie tun können, wie die Verwendung künstlicher Intelligenz und die Zukunft der Diät. Ja "(Herr Shinjiro Koizumi)
Wir werden den Ähnlichkeitsgrad anhand des Fragebogens der 200. Nationalversammlung abschätzen, der nicht im Modell enthalten ist. Verwenden Sie model.infer_vector ()
, um ein neues Dokument in einen Vektor zu verwandeln. Geben Sie für "()" ein neues Dokument an und "Schritt", wie oft das Modell gedreht werden soll. Die Anzahl der Schritte wurde auf der Grundlage der Meinung des Erstellers von "gensim" auf 20 festgelegt.
Außerdem lautet der Vektor für dieses neue Dokument "model.docvecs.most_similar (positiv = [new_docvec], topn = 1)", wodurch die Ähnlichkeit mit dem Dokument im vorhandenen Modell berechnet wird. topn
gibt an, wie viele Top-Dokumente extrahiert werden sollen.
list_most_sim_doc = []
list_most_sim_value = []
for i in range(data_200.shape[0]):
new_doc = data_200.loc[i,'word_list']
new_doc = new_doc.split(" ")
new_docvec = model.infer_vector(new_doc, steps=20)
most_sim_doc = model.docvecs.most_similar(positive=[new_docvec], topn=1)[0][0]
most_sim_value = model.docvecs.most_similar(positive=[new_docvec], topn=1)[0][1]
list_most_sim_doc.append(most_sim_doc)
list_most_sim_value.append(most_sim_value)
Die Verteilung der Ähnlichkeit ist wie folgt. Je näher es an 1 ist, desto näher ist es.
plt.hist(list_most_sim_value, bins=50)
Kombinieren Sie nun die nächstgelegenen Dokument-ID- und Ähnlichkeitswerte mit dem vorhandenen Datensatz.
new_doc_sim = pd.DataFrame({"sim_doc":list_most_sim_doc,"sim_value":list_most_sim_value})
data_200_sim = pd.concat([data_200, new_doc_sim], axis= 1)
Klicken Sie hier für die Top 3 Ähnlichkeiten. Alle sind über 0,8.
pd.reset_option('^display.', silent=True)
data_200_sim = data_200_sim.sort_values(by='sim_value', ascending=False).reset_index(drop=True)
data_200_sim.head(3)
Was ist das für ein Inhalt? Dokument 1 der 200. Nationalversammlung. Der Inhalt ist, warum das Medikament Gardacil nicht zugelassen ist.
idx=data_200_sim.index[1]
pd.set_option('display.max_colwidth', -1)
data_200_sim.iloc[idx:idx+1,:6]
Als nächstes ist das Dokument 1 der 200. Nationalversammlung das nächstgelegene Dokument im Modell. lange…. Der Inhalt handelt von der Zulassung eines Arzneimittels namens Iressa. Angemessenes Ergebnis.
idx=data_200_sim.index[0]
pd.set_option('display.max_colwidth', -1)
data_200_sim.iloc[idx:idx+1,:6]
Dokument 2 der 200. Nationalversammlung. lange…. Der Inhalt besteht aus Konjunkturmaßnahmen, die auf der MMT-Theorie basieren.
idx=data_200_sim.index[0]
pd.set_option('display.max_colwidth', -1)
data_200_sim.iloc[idx:idx+1,:6]
Als nächstes ist das Dokument 2 der 200. Nationalversammlung das nächstgelegene Dokument im Modell. Länger ... Inhalt der Konjunkturmaßnahmen vorerst. Kein schlechtes Ergebnis.
idx=data_200_sim.index[0]
pd.set_option('display.max_colwidth', -1)
data_200_sim.iloc[idx:idx+1,:6]
Dokument 3 der 200. Nationalversammlung. Der Inhalt handelt von der Begnadigung der Reiwa-Ära.
idx=data_200_sim.index[2]
pd.set_option('display.max_colwidth', -1)
data_200_sim.iloc[idx:idx+1,:6]
Das nächstgelegene Dokument im Modell handelt auch von der Gnade der Reiwa-Ära. Dies ist auch ein gutes Ergebnis.
idx=data_200_sim.sim_doc[2]
pd.set_option('display.max_colwidth', -1)
data.iloc[idx:idx+1,:6]
Die Datensuche machte unterwegs Spaß, und ich schrieb sie lange Zeit vergeblich, aber als ich Doc2Vec leicht ausprobierte, konnte ich die Ähnlichkeit für das neue Dokument, das als Fragestellung der 200. Diät bezeichnet wurde, ziemlich gut einschätzen. Ist es nicht? Trotzdem habe ich den Eindruck, dass die Welt, in der KI Fragen stellt, wie Herr Shinjiro Koizumi sagt, ein zukünftiges Ereignis ist, das nicht in der Nähe ist.
Dieses Mal habe ich versucht, Daten mit Doc2Vec zu suchen und Ähnlichkeiten zu beurteilen, aber in Zukunft werde ich Clustering durchführen, während ich die Daten der politischen Partei mische, und die "Qualität" der Frage beurteilen, die ich wirklich versuchen möchte Ich würde gerne ausprobieren. Insbesondere in Bezug auf die "Qualität" des Fragebogens denke ich, dass wir den Ton ändern können, dass die einfache Ausgabe einer großen Anzahl von Fragebögen zu Ergebnissen führt.
Ich habe einen Crawling- und Scraping-Datensatz in der Hand. Wenn also jemand diese Daten analysieren und analysieren möchte, hoffe ich, dass wir gemeinsam etwas tun können!
Recommended Posts