[Python] Versuchen Sie, Ramen-Shops durch Verarbeitung natürlicher Sprache zu klassifizieren

Einführung

Hallo, Sie kopieren und fügen Datenwissenschaftler ein.

Vor ungefähr 3 Jahren habe ich einen lustigen LT namens "Ramen und Verarbeitung natürlicher Sprache" gemacht, aber jetzt ist es peinlich schäbig, also Python Ich habe versucht, es mit neu zu machen.

Es ist lange her, wenn Sie es also in 3 Zeilen zusammenstellen

Methode

Wir verwenden eine Technik namens statistische Analyse der latenten Bedeutung. Grob gesagt erhalten Sie eine Vorstellung davon, welches Thema das Dokument hat und worum es geht.

Da das jedem Thema zugewiesene Verhältnis mit dem folgenden Bild berechnet werden kann, kann im folgenden Beispiel berechnet werden, dass A und B nahe beieinander liegen.

Es wird nicht wie oben verwendet, aber ich denke, die folgenden Anwendungsbeispiele und Bücher werden hilfreich sein.

Hauptsächlich verwendet

Rauer Fluss

Das ist so lange her Zunächst werde ich den allgemeinen Ablauf auflisten.

  1. Vorbereitung von Dokumentdaten wie Mundpropaganda
  1. Vorbereitung für das Klassifikatorlernen
  1. Lernen von Klassifikatoren: Lernen Sie das LDA-Modell mit Gensim
  2. Klassifizierung speichern: Themenklassifizierung anhand von Dokumentdaten in einem geschulten Klassifizierer
  3. Suchen Sie ein ähnliches Geschäft

Ich werde tatsächlich von hier aus arbeiten

1. Mundpropaganda Datenaufbereitung

#Lesen der gesammelten Dokumentdaten
from io_modules import load_data  #Selbst erstellte DB-Lesebibliothek
rows = load_data(LOAD_QUERY, RAMEN_DB)

#Extrahieren Sie das Wort Stamm mit der Stammfunktion des Referenzartikels
from utils import stems  #Implementierung des Referenzartikels Fast so wie es ist
docs = [stems(row) for row in rows]

"""
docs = [
  ['Große Portion', 'Impressionen', 'Richtung', 'Beste', 'Ramen', ...
  ['Ramen', 'Warteschlange', 'Kalt', 'Heiß', 'Freude', ...
   ...
]
"""

2. Vorbereitung vorbereiten

Von hier aus werden wir LDA tatsächlich mit Gensim durchführen. Erstellen Sie zunächst ein Wörterbuch und einen Korpus für Gensim.

Gensim Last

from gensim import corpora, models

Wörterbuch erstellen

Es ist verwirrend, aber es ist nicht das Benutzerwörterbuch, das zum Trennen in MeCab verwendet wird, sondern Gensim zum Zuordnen der im Dokument angezeigten Wörter und Wort-IDs.

dictionary = gensim.corpora.Dictionary(docs)
dictionary.save_as_text('./data/text.dict')  #sparen
# gensim.corpora.Dictionary.load_from_text('./data/text.dict')  #Die Datei kann ab dem nächsten Mal geladen werden

"""
Wort-ID Anzahl der Wörter
1543 Asari 731
62 Easy 54934
952 Warm 691
672 heiß 1282
308 Danke 4137
・
・
"""

Korpus erstellen

Die erste gesammelte Mundpropaganda wird als Korpus aufbewahrt und zum Erlernen des Klassifikators verwendet.

corpus = [dictionary.doc2bow(doc) for doc in docs]
gensim.corpora.MmCorpus.serialize('./data/text.mm', corpus)  #sparen
# corpus = gensim.corpora.MmCorpus('./data/text.mm')  #Das Laden von Dateien ist ab dem nächsten Mal möglich

"""\
doc_id  word_ID Häufigkeit des Auftretens
     6      150       3  # word_id=150:Moyashi
     6      163       9  # word_id=163:Sojasauce
     6      164       1
     6      165       1
・
・
"""

Es gibt einige Debatten darüber, ob es notwendig ist, Dieses Mal werden wir eine TFIDF-Verarbeitung am Korpus durchführen und eine LDA durchführen.

tfidf = gensim.models.TfidfModel(corpus)
corpus_tfidf = tfidf[corpus]

#Ich habe es berechnet, also speichere es in Essiggurke
import pickle
with open('./data/corpus_tfidf.dump', mode='wb') as f:
    pickle.dump(corpus_tfidf, f)

#Sie können es ab dem nächsten Mal laden
# with open('./data/corpus_tfidf.dump', mode='rb') as f:
#     corpus_tfidf = pickle.load(f)

3. Den Klassifikator lernen

Jetzt, da wir bereit sind, werden wir tatsächlich LDA mit Gensim durchführen. Dieses Mal habe ich versucht, es in 50 Themen zu klassifizieren.

#Je nach Anzahl der Dokumente kann dies mehrere Stunden dauern.
# '18/12/03 Nachtrag:Die Erhöhung der Anzahl der Mitarbeiter in LdaMulticore kann viel schneller erfolgen
lda = gensim.models.LdaModel(corpus=corpus_tfidf, id2word=dictionary,
                             num_topics=50, minimum_probability=0.001,
                             passes=20, update_every=0, chunksize=10000)
lda.save('./data/lda.model')  #sparen
# lda = gensim.models.LdaModel.load('./data/lda.model')  #Kann ab dem nächsten Mal geladen werden

Lassen Sie uns nun den Inhalt des gelernten Modells anzeigen.

Obwohl einige Themen, die Eindrücke ausdrücken (Nr. 0, Nr. 36, Nr. 42 usw.), gemischt sind, handelt es sich im Allgemeinen um Themen, die den Geschmack von Ramen ausdrücken (Nr. 2: Miso, Nr. 49: Familienlinie usw.). Es scheint, dass der Klassifikator von gemacht ist.

for i in range(50):
    print('tpc_{0}: {1}'.format(i, lda.print_topic(i)[0:80]+'...'))

==============

tpc_0: 0.019*Beeindruckt+ 0.014*Einschlag+ 0.013*Lange gesucht+ 0.012*Schwierigkeit+ 0.012*köstlich+ 0.011*Ramen+ 0.010*Tiefe Emotionen+...
tpc_1: 0.035*Gegrilltes Schwein+ 0.022*gekühlte chinesische Nudeln+ 0.018*heiß+ 0.010*Süchtig machend+ 0.009*Stur+ 0.008*köstlich+ 0.008*Gut...
tpc_2: 0.050*Miso+ 0.029*Miso+ 0.017*Ingwer+ 0.013*Butter+ 0.012*Moyashi+ 0.011*Schmalz+ 0.009*Mais+...
tpc_3: 0.013*Geschmack+ 0.010*Knoblauch+ 0.010*Reich+ 0.009*gebratenes Schweinefilet+ 0.008*Öl+ 0.008*Reich+ 0.008*...
tpc_4: 0.010*Sojasauce+ 0.009*verwenden+ 0.009*Seetang+ 0.008*Material+ 0.007*Suppe+ 0.007*Meeresfrüchte+ 0.007*gebratenes Schweinefilet...
tpc_5: 0.015*Kommen Sie+ 0.014*Ein Sari+ 0.012*Dünn+ 0.010*Ramen+ 0.010*Popularität+ 0.010*Es fühlt sich gut an+ 0.010*...
tpc_6: 0.047*Garnele+ 0.046*Garnele+ 0.014*Sesam+ 0.014*Garnele+ 0.012*Süchtig machend+ 0.008*köstlich+ 0.008*Sukiyaki...
tpc_7: 0.016*Ungenießbar+ 0.015*Erwartungen+ 0.013*Schlecht+ 0.012*Es tut uns leid+ 0.012*köstlich+ 0.011*gewöhnlich+ 0.011*Ramen...
tpc_8: 0.070*Soba+ 0.015*Soboro+ 0.013*Anfügen+ 0.012*Mentaiko+ 0.012*Hähnchen+ 0.010*Reich+ 0.010*köstlich+...
tpc_9: 0.041*Zitrone+ 0.024*japanischer Stil+ 0.017*Eintopf+ 0.010*Klee+ 0.010*Leben+ 0.009*köstlich+ 0.009*Meeresfrüchte+...
tpc_10: 0.040*Gemüse+ 0.027*Knoblauch+ 0.018*Extra+ 0.013*Karotte+ 0.010*Moyashi+ 0.010*Weniger+ 0.009*Ca....
tpc_11: 0.026*Handgemacht+ 0.023*Haben+ 0.016*Ingwer+ 0.010*würzig+ 0.010*Ramen+ 0.009*köstlich+ 0.008*Gefühl...
tpc_12: 0.031*Buchweizen+ 0.030*Soba+ 0.029*Chinesisch+ 0.016*Shirayu+ 0.011*Kriegshuhn+ 0.008*köstlich+ 0.007*Ramen+...
tpc_13: 0.057*schwarz+ 0.023*schwarz+ 0.020*Schwarz+ 0.018*Sojasauce+ 0.011*Ausdauer+ 0.010*Auster+ 0.009*Aussehen...
tpc_14: 0.060*Tanmen+ 0.048*Garnele+ 0.019*Gemüse+ 0.014*Chinakohl+ 0.011*Tsumire+ 0.009*Gyoza+ 0.007*köstlich...
tpc_15: 0.073*Würzig+ 0.015*Würzig+ 0.012*Miso+ 0.011*Chili+ 0.011*Sansho+ 0.010*Würzig+ 0.010*辛Miso+ 0...
tpc_16: 0.031*Aoba+ 0.029*Gittergewebe+ 0.019*doppelt+ 0.012*Meeresfrüchte+ 0.010*Trend+ 0.009*sofortig+ 0.009*Rame...
tpc_17: 0.041*Ersatzkugel+ 0.017*Ersatzkugel+ 0.014*Tonkotsu+ 0.014*Würzig+ 0.010*Extra fein+ 0.010*Ramen+ 0.009*rot...
tpc_18: 0.032*Nostalgisch+ 0.023*Einfach+ 0.016*Bedeutung+ 0.012*Ramen+ 0.011*freundlich+ 0.010*Gefühl+ 0.010*Ah...
tpc_19: 0.027*Zitrone+ 0.016*Normal+ 0.011*Eingeweide+ 0.009*Bedauerlich+ 0.009*Steak+ 0.008*Reich+ 0.008*Köstlich...
tpc_20: 0.088*Gekocht+ 0.009*Soba+ 0.008*Duft+ 0.008*Ramen+ 0.008*Suppe+ 0.007*gebratenes Schweinefilet+ 0.007*Sojasauce...
tpc_21: 0.023*Sushi+ 0.015*Empfohlen+ 0.012*Favorit+ 0.010*Ramen+ 0.009*köstlich+ 0.008*Aufwachsen+ 0.008*...
tpc_22: 0.025*Gebraten+ 0.021*Modisch+ 0.017*Modisch+ 0.016*Cafe+ 0.014*Modisch+ 0.014*Atmosphäre+ 0.011*...
tpc_23: 0.024*Wert+ 0.022*Weißes Miso+ 0.018*Miso+ 0.014*赤Miso+ 0.010*ultimativ+ 0.010*köstlich+ 0.009*verbrannt+...
tpc_24: 0.095*Gebratener Reis+ 0.040*einstellen+ 0.017*Mini+ 0.013*Gyoza+ 0.012*Ramen+ 0.011*köstlich+ 0.009*...
tpc_25: 0.024*Oden+ 0.015*Nostalgisch+ 0.013*Gegrilltes Fleisch+ 0.011*eben+ 0.010*Dunkler Mund+ 0.010*Ramen+ 0.009...
tpc_26: 0.010*aus+ 0.009*Ramen+ 0.009*köstlich+ 0.008*ernst+ 0.008*Köstlich+ 0.008*Laut+ 0.008...
tpc_27: 0.073*Mochi+ 0.032*Kimchi+ 0.012*Würziges Miso+ 0.010*Köstlich+ 0.010*köstlich+ 0.008*gebratenes Schweinefilet+ 0.00...
tpc_28: 0.021*Sudachi+ 0.019*Shichimi+ 0.018*Männer+ 0.015*Zwiebel+ 0.011*Zwiebel+ 0.010*Enttäuschend+ 0.010*Anfügen...
tpc_29: 0.079*Gyoza+ 0.026*Bier+ 0.011*köstlich+ 0.010*Ramen+ 0.009*生Bier+ 0.009*Sojasauce+ 0.008...
tpc_30: 0.021*Festziehen+ 0.018*Asexuell+ 0.018*Keim+ 0.015*Sake Hefe+ 0.010*In Wasser gekocht+ 0.009*Krabbe+ 0.009*Reich+ 0....
tpc_31: 0.051*Champon+ 0.024*Schüler+ 0.015*Tantan+ 0.011*Meeresfrüchte+ 0.009*Schock+ 0.009*Original+ 0.009*Köstlich...
tpc_32: 0.025*Geruch+ 0.023*Geruch+ 0.016*Geruch+ 0.010*Geheimnis+ 0.010*Köstlich+ 0.010*Ramen+ 0.010*Tsuyu...
tpc_33: 0.010*Sojasauce+ 0.009*gebratenes Schweinefilet+ 0.008*Meeresfrüchte+ 0.008*Geschmack+ 0.007*Suppe+ 0.007*Menma+ 0.007*gut...
tpc_34: 0.074*Curry+ 0.040*Gegrillter Reis+ 0.015*Ganso+ 0.011*Gewürze+ 0.010*einstellen+ 0.008*köstlich+ 0.008*La...
tpc_35: 0.068*Tomate+ 0.031*Käse+ 0.015*Italienisch+ 0.014*Pasta+ 0.011*Hormon+ 0.011*Risotto+ 0.00...
tpc_36: 0.038*Kollege+ 0.014*am stärksten+ 0.010*hart+ 0.010*Ramen+ 0.010*Dantotsu+ 0.009*köstlich+ 0.009*Thema...
tpc_37: 0.059*Tonkotsu+ 0.026*Sojasauce+ 0.025*Kinder+ 0.015*Köstlich+ 0.012*Schlammig+ 0.012*Ramen+ 0.01...
tpc_38: 0.027*Reis+ 0.025*Reisbällchen+ 0.022*Reis+ 0.016*Sonstiges Kochen+ 0.014*Reis+ 0.012*Gurken+ 0.011*einstellen...
tpc_39: 0.026*Yuzu+ 0.019*blass+ 0.009*Altern+ 0.009*Gegrilltes Schwein+ 0.008*Sojasauce+ 0.008*gebratenes Schweinefilet+ 0.007*Suppe...
tpc_40: 0.042*Udon+ 0.012*Katsuo+ 0.009*Ja+ 0.009*Tempura+ 0.009*Ramen+ 0.008*köstlich+ 0.008*Gefühl...
tpc_41: 0.023*Salzig+ 0.020*Wer+ 0.012*Müll+ 0.012*Anfügen+ 0.009*Französisch+ 0.008*Koch+ 0.008*Ra...
tpc_42: 0.029*Freund+ 0.028*Köstlich+ 0.015*Warteschlange+ 0.015*köstlich+ 0.013*Ramen+ 0.013*Einfach+ 0.012*...
tpc_43: 0.012*Menma+ 0.011*gebratenes Schweinefilet+ 0.010*Sojasauce+ 0.009*Negi+ 0.009*gut+ 0.008*Meeresfrüchte+ 0.008*Suppe...
tpc_44: 0.040*Anfügen+ 0.014*Reich+ 0.013*Schleimig+ 0.013*Teilt+ 0.013*Meeresfrüchte+ 0.013*Fischmehl+ 0.011*Prime+ 0....
tpc_45: 0.019*Schlechten Geschmack+ 0.017*Steinkleber+ 0.017*Harukiku+ 0.012*Nr. 1 in Japan+ 0.010*köstlich+ 0.009*Ramen+ 0.008*Linie...
tpc_46: 0.074*Wantan+ 0.045*Männer+ 0.015*gebratenes Schweinefilet+ 0.009*köstlich+ 0.008*Wolkengetränk+ 0.008*Sojasauce+ 0.007*...
tpc_47: 0.027*Gewöhnlich+ 0.019*Serie+ 0.017*Sheng Soba+ 0.012*Eingelegt+ 0.010*alt+ 0.010*Köstlich+ 0.010*Hart...
tpc_48: 0.018*Hälfte+ 0.014*Salat+ 0.014*Dessert+ 0.014*Küche+ 0.013*Taverne+ 0.012*Tofu+ 0.010*einstellen...
tpc_49: 0.068*Familie+ 0.019*Spinat+ 0.013*Seetang+ 0.010*Sojasauce+ 0.010*gebratenes Schweinefilet+ 0.010*Dunkel+ 0.010*La...

4. Ladenklassifizierung (Themeneinteilung)

Nachdem Sie den Klassifizierer gelernt haben, können Sie den Speicher in Themen unterteilen (Themenvektorberechnung), indem Sie die Bewertungen des Geschäfts durch diesen Klassifizierer übergeben.

Lassen Sie uns zunächst einen Bericht über die Abholung des Lebensmittelprotokolls von "Shinfukusaikan Main Store @ Kyoto" eingeben, den ich seit meiner Schulzeit geliebt habe, und die Aufführung sehen. Aber vorher werde ich mitteilen, welche Art von Ramen Shinfukusaikan anbietet, um das Verständnis der folgenden Punkte zu erleichtern.

"Shinfukusaikan Kyoto" スクリーンショット 2016-07-23 3.30.54.png

Es ist schwarz ... Es ist ein schwarzer Ramen.

Im Gegensatz zu seinem Aussehen ist es jedoch eine köstliche Sojasauce Ramen, die überraschend leicht und reichhaltig ist.

Was für ein Ergebnis wird der diesmal erstellte Klassifikator zurückgeben?

#Quelle zitieren: http://tabelog.com/kyoto/A2601/A260101/26000791/dtlrvwlst/763925/
#Übrigens ziehe ich es persönlich vor, keine rohen Eier zu legen lol
>> str="Als ich auf einer Geschäftsreise nach Kyoto war, besuchte ich das Hauptgeschäft von Shinfukusaikan, nach dem ich mich gesehnt hatte.(Unterlassung)Immerhin wird die Suppe angepasst, die Nudeln werden gekocht, die Zutaten werden serviert, die Holzkohle ist köstlich und der Hauptladen ist noch köstlicher! Ich fühlte, dass. Wie auch immer, das ist billig bei 650 Yen. "Chuka Soba" bei Shinfukusaikan zeichnet sich durch eine schwarze Suppe wie die Brühe aus Holzkohle und Kujo-Zwiebeln mit viel davon aus. Natürlich ist "Yakimeshi" unwiderstehlich.(Unterlassung)Auf dem Heimweg sah ich plötzlich die Bestellung des Kunden (ich sah die Bewertung hier später und stellte fest, dass es sich um "extra großes Shinfuku Soba" handelte), und ich mag rohe Eier. Dann war ich schockiert: "Oh, hätte ich das tun können?" Es scheint gut zu der Suppe bei Shinfukusaikan zu passen, und ich werde beim nächsten Mal definitiv danach fragen."
>> vec = dictionary.doc2bow(utils.stems(str))

#Anzeige der Klassifizierungsergebnisse
>> print(lda[vec])
[(0, 0.28870310712135505), (8, 0.25689765230576195), (13, 0.3333132412551591), (31, 0.081085999317724824)]

#Inhalt jedes Themas/In absteigender Reihenfolge des Einflusses
>> lda.print_topic(13)  #Die Eigenschaften der schwarzen Ramen von Shinfukusaikan werden erfasst
0.057*schwarz+ 0.023*schwarz+ 0.020*Schwarz+ 0.018*Sojasauce+ 0.011*Ausdauer+ 0.010*Auster+ 0.009*Aussehen+ 0.008*Dunkel+ 0.008*Ramen+ 0.008*köstlich

>> lda.print_topic(0)
0.019*Beeindruckt+ 0.014*Einschlag+ 0.013*Lange gesucht+ 0.012*Schwierigkeit+ 0.012*köstlich+ 0.011*Ramen+ 0.010*Tiefe Emotionen+ 0.010*Warteschlange+ 0.010*Köstlich+ 0.008*köstlich

>> lda.print_topic(8)
0.070*Soba+ 0.015*Soboro+ 0.013*Anfügen+ 0.012*Mentaiko+ 0.012*Hähnchen+ 0.010*Reich+ 0.010*köstlich+ 0.008*gebratenes Schweinefilet+ 0.008*Einfach+ 0.007*Reis

>> lda.print_topic(31)
0.051*Champon+ 0.024*Schüler+ 0.015*Tantan+ 0.011*Meeresfrüchte+ 0.009*Schock+ 0.009*Original+ 0.009*köstlich+ 0.008*Ramen+ 0.008*Gemüse+ 0.008*Besondere

Die schwarzen Ramen kamen richtig heraus.

Nachdem wir nun wissen, dass es funktioniert, verknüpfen wir die Hunderte von Sätzen im Web, die den Shinfukusaikan-Hauptspeicher erwähnen, und fügen sie in den Klassifikator ein.

>> str = "Im WEB gesammelte Sätze"
>> sinpuku_vec = dictionary.doc2bow(utils.stems(str))
>> print(lda[sinpuku_vec])
[(0, 0.003061940579476011), (5, 0.001795672854987279), (7, 0.016165280743592875), (11, 0.0016683462844631061), (13, 0.387457274481951), (16, 0.048457912903426922), (18, 0.025816920842756448), (19, 0.0014647251485231138), (20, 0.0018013651819984121), (21, 0.001155430885775867), (24, 0.11249915373166983), (25, 0.0030405756373518885), (26, 0.0031413889216075561), (27, 0.0030955757983300515), (29, 0.0021349369911582098), (32, 0.006158571006380364), (34, 0.061260735988294568), (36, 0.0023903609848973475), (37, 0.020874795314517719), (41, 0.0018301667593946488), (42, 0.27803177713836785), (45, 0.0055461332216832828), (46, 0.0016396961473594117), (47, 0.0056507918659765869)]

>> lda.print_topic(13)  #Wert: 0.38
0.057*schwarz+ 0.023*schwarz+ 0.020*Schwarz+ 0.018*Sojasauce+ 0.011*Ausdauer+ 0.010*Auster+ 0.009*Aussehen+ 0.008*Dunkel+ 0.008*Ramen+ 0.008*köstlich

>> lda.print_topic(42)  #Wert: 0.27
0.029*Freund+ 0.028*Köstlich+ 0.015*Warteschlange+ 0.015*köstlich+ 0.013*Ramen+ 0.013*Einfach+ 0.012*Beeindruckend+ 0.011*Gefühl+ 0.011*Berühmt+ 0.011*Viele

>> lda.print_topic(24)  #Wert: 0.11
0.095*Gebratener Reis+ 0.040*einstellen+ 0.017*Mini+ 0.013*Gyoza+ 0.012*Ramen+ 0.011*köstlich+ 0.009*Köstlich+ 0.009*Einzelexemplar+ 0.008*bestellen+ 0.008*gebratenes Schweinefilet

Das Ergebnis ist etwas schwer zu sehen, aber gebratener Reis ist im dritten Thema als Ergebnis aufgetaucht, das viele Meinungen widerspiegelt.

Es scheint, dass die Person, die die erste Bewertung geschrieben hat, nicht gefragt wurde, aber tatsächlich ist Shinfukusaikan auch berühmt für seinen schwarzen gebratenen Reis. Daraus (?) Wurde festgestellt, dass die thematische Aufteilung der Ramen-Läden nach kollektivem Wissen funktioniert.

5. Suchen Sie ein ähnliches Geschäft

Jetzt kann der Klassifikator den Themenvektor eines beliebigen Ramen-Shops berechnen. Schließlich möchte ich diesen Klassifikator verwenden, um ähnliche Geschäfte zu finden.

Theoretisch können Sie ein Geschäft finden, das jedem Geschäft ähnlich ist, aber ich werde den Inhalt des vorherigen Abschnitts übernehmen und nach einem Geschäft suchen, das dem Shinfukusaikan-Hauptgeschäft ähnlich ist.

Obwohl der detaillierte Code fehlerhaft ist, wird im Allgemeinen die LDA-Themenberechnung von Ramen-Shops im ganzen Land durchgeführt → Die Ähnlichkeitsberechnung mit dem LDA-Thema des Shinfukusaikan-Hauptgeschäfts wird wie folgt durchgeführt.

#verschiedene Einstellungen
MIN_SIMILARITY = 0.6  #Ähnlichkeitsschwelle
RELATE_STORE_NUM = 20  #Anzahl der extrahierten ähnlichen Geschäfte

#LDA-Themenberechnung von Ramen-Shops im ganzen Land
from my_algorithms import calc_vecs
(names, prefs, vecs) = calc_vecs(reviews, lda, dictionary)

#Berechnen Sie die Ähnlichkeit zwischen dem Shinfukusaikan-Hauptgeschäft und den LDA-Themen der Ramen-Geschäfte im ganzen Land
from sklearn.metrics.pairwise import cosine_similarity
similarities = cosine_similarity(sinpuku_vec, vecs)

#Ähnliche Geschäfte anzeigen
import pandas as pd
df = pd.DataFrame({'name': names,
                   'pref': prefs,
                   'similarity': similarities})
relate_store_list = df[df.similarity > MIN_SIMILARITY] \
                      .sort_values(by="similarity", ascending=False) \
                      .head(RELATE_STORE_NUM)
print(relate_store_list)

==============

id	similarity	pref	name
0	0.934 toyama Makoto
1	0.898 hokkaido Isono Kazuo
2	0.891 Shiga Kinkuemon Mitsui Outlet Park Shiga Ryuo
3	0.891 kyoto Shinfukusaikan Higashi Tsuchikawa Geschäft
4	0.888 osaka Kinkuemon Dotonbori Geschäft
5	0.886 Chiba Charcoal Ramen
6	0.874 osaka Kinkuemon Esaka Geschäft
7	0.873 toyama Iroha Iroha Hauptgeschäft
8	0.864 osaka Kinkuemon Umeda Laden
9	0.861 mie Hayashiya
10	0.847 niigata Ramen Tsuriyoshi
11	0.846 osaka Kinkuemon Hauptgeschäft
12	0.838 toyama Menhachi Gotabiya
13	0.837 aichi Kikuya Hanten
14	0.820 Hyogo Nakanoya
15	0.814 kyoto Kinkuemon Kyoto Saiin Geschäft
16	0.807 aichi Yokoji
17	0.804 Kumamoto Lieblings Ramen Shop
18	0.792 kyoto Shinfukusaikan Kumiyama Geschäft
19	0.791 niigata Goingoin

Nehmen wir einige und überprüfen das Ergebnis.

"Makoto und Tomiyama" スクリーンショット 2016-07-23 2.31.42.png

"Isono Kazuo Hokkaido" スクリーンショット 2016-07-23 2.32.56.png

"Kanekuemon Mitsui Outlet Park Shiga Ryuo Store" スクリーンショット 2016-07-23 2.33.43.png

Es ist schwarz ... es ist großartig schwarz. Ich habe auch andere Dinge überprüft, aber alle waren schwarze Ramen außer Nakanoya in Hyogo.

Shinfukusaikan hat mehrere Filialen, und ich denke, es ist ein guter Punkt, dass die Ergebnisse ordnungsgemäß eingegangen sind, obwohl der Name des Geschäfts vollständig entfernt und analysiert wurde.

Toyama Black ist berühmt und einige sind erschienen, aber ich frage mich, ob der Geschmack von Shinfukusaikan etwas anders ist als der von Toyama Black. Es ist nicht zu leugnen, dass ein ähnliches Geschäft aufgrund der Schwärze der Ramen und nicht aufgrund des Geschmacks ausgewählt wurde. Ich möchte die Komplexität dieses Bereichs als einen Punkt für zukünftige Verbesserungen betrachten.

Zusammenfassung

Dieses Mal haben wir unter Verwendung von Ramen als Thema vorgestellt, wie man (fast) ohne menschliches Eingreifen verschiedene Erkenntnisse aus im Netz liegenden Charakterdaten erhält.

Es mag im Vergleich zu der Methode der Klassifizierung anhand von überwachten Daten, die durch menschliches Eingreifen erstellt wurden, als sehr unzuverlässiges Ergebnis erscheinen, aber das Ergebnis, das mit der vorhandenen Python-Bibliothek leicht erzielt werden kann, ist nicht so gut. Ich denke.

Natürlich können nicht nur Ramen, sondern auch verschiedene Dinge behandelt werden, wenn es eine bestimmte Anzahl von Sätzen oder mehr gibt. Wenn Sie möchten, versuchen Sie es bitte mit verschiedenen Dokumenten.

Recommended Posts

[Python] Versuchen Sie, Ramen-Shops durch Verarbeitung natürlicher Sprache zu klassifizieren
Python: Verarbeitung natürlicher Sprache
[Jobwechsel-Meeting] Versuchen Sie, Unternehmen zu klassifizieren, indem Sie Mundpropaganda in natürlicher Sprache mit word2vec verarbeiten
[Verarbeitung natürlicher Sprache / NLP] Einfache Rückübersetzung durch maschinelle Übersetzung mit Python
100 Sprachverarbeitung Knock Kapitel 1 von Python
Vorbereitung zum Starten der Verarbeitung natürlicher Sprache
Japanische Verarbeitung natürlicher Sprache mit Python3 (4) Emotionsanalyse durch logistische Regression
3. Verarbeitung natürlicher Sprache durch Python 2-1. Netzwerk für das gleichzeitige Auftreten
3. Verarbeitung natürlicher Sprache durch Python 1-1. Word N-Gramm
Versuchen Sie, O'Reillys Bücher durch Clustering zu klassifizieren
3. Verarbeitung natürlicher Sprache mit Python 1-2. So erstellen Sie einen Korpus: Aozora Bunko
3. Verarbeitung natürlicher Sprache durch Python 2-2. Koexistenznetzwerk [mecab-ipadic-NEologd]
Python unerfahrene Person versucht, 100 Sprachverarbeitung 14-16 zu klopfen
[Python] Ich habe mit der Verarbeitung natürlicher Sprache ~ Transformatoren ~ gespielt
Python: Tiefes Lernen in der Verarbeitung natürlicher Sprache: Grundlagen
Python unerfahrene Person versucht, 100 Sprachverarbeitung 07-09 zu klopfen
Python unerfahrene Person versucht, 100 Sprachverarbeitung 10 ~ 13 zu klopfen
Python unerfahrene Person versucht, 100 Sprachverarbeitung 05-06 zu klopfen
Python unerfahrene Person versucht, 100 Sprachverarbeitung 00-04 zu klopfen
Eintrag, bei dem Python-Anfänger ihr Bestes geben, um nach und nach 100 Sprachprozesse zu beenden
Einführung in die Python-Sprache
RNN_LSTM2 Verarbeitung natürlicher Sprache
[Keras] Persönliches Memo zum Klassifizieren von Bildern nach Ordner [Python]
[Sprachverarbeitung 100 Schläge 2020] Zusammenfassung der Antwortbeispiele von Python
Versuchen Sie, ein Python-Modul in C-Sprache zu erstellen
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Erstellen einer Umgebung für die Verarbeitung natürlicher Sprache mit Python
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Vergleichen Sie, wie die Verarbeitung für Listen nach Sprache geschrieben wird
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Ich habe versucht, Mr. Hanyu und Mr. Hanyu mit dem Verarbeiter der Verarbeitung natürlicher Sprache × Naive Bayes zu klassifizieren
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 3 Schritt 09 Memo "Identifier by Neural Network"
Die erste künstliche Intelligenz. Ich wollte die Verarbeitung natürlicher Sprache ausprobieren, daher werde ich die morphologische Analyse mit MeCab mit Python3 versuchen.
100 Sprachverarbeitungsklopfen mit Python 2015
Versuchen Sie, Python selbst zu verstehen
100 Sprachverarbeitung Knock Kapitel 1 (Python)
Verarbeitung natürlicher Sprache 1 Morphologische Analyse
Verarbeitung natürlicher Sprache 3 Wortkontinuität
Bildverarbeitung mit Python (Pillow)
Python: Vektordarstellung in natürlicher Sprache
Versuchen Sie, eine Sprache auszuwählen
Verarbeitung natürlicher Sprache 2 Wortähnlichkeit
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 06 Memo "Identifier"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 02 Memo "Vorverarbeitung"
Ich werde eine detaillierte Erklärung zum Tod schreiben, während ich 100 Python für die Verarbeitung natürlicher Sprache 2020 mit Python löse
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 07 Memo "Evaluation"
Verarbeitung zur Verwendung von notMNIST-Daten in Python (und versucht, sie zu klassifizieren)
[Einführung in RasPi4] Umgebungskonstruktion, Mecab des Verarbeitungssystems für natürliche Sprache usw. .. .. ♪
Dockerfile mit den notwendigen Bibliotheken für die Verarbeitung natürlicher Sprache mit Python
Lose Artikel für diejenigen, die mit der Verarbeitung natürlicher Sprache beginnen möchten
Fassen Sie mit tf.data.Dataset api zusammen, wie Text (Verarbeitung natürlicher Sprache) vorverarbeitet wird
Der Versuch, Segmentbäume Schritt für Schritt zu implementieren und zu verstehen (Python)
Vergleich der Stapelverarbeitungsgeschwindigkeit nach Sprache
Studieren Sie die Verarbeitung natürlicher Sprache mit Kikagaku
Überlassen Sie die mühsame Verarbeitung Python
100 Klicks in der Verarbeitung natürlicher Sprache Kapitel 4 Kommentar
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)