Mein Name ist @ naotaka1128 und ich bin verantwortlich für den 20. Tag von LivesenseAdventCalendar 2016. Derzeit bin ich verantwortlich für einen Datenanalysten für einen Mundpropaganda-Service, der als Jobwechsel-Meeting bezeichnet wird.
Job Change Conference ist Japans größter Mundpropaganda-Service für Jobwechsel, der Millionen von Unternehmensbewertungen sammelt. Derzeit zeigen wir nur Mundpropaganda und Partituren an, aber in Zukunft möchten wir Mundpropaganda durch Verarbeitung natürlicher Sprache usw. analysieren und der Welt nützliche Informationen liefern, die bisher nicht verfügbar waren. Wir sind hier.
Dieses Mal werde ich als Ausgangspunkt Mundpropaganda mit Technologien zur Verarbeitung natürlicher Sprache wie word2vec und doc2vec analysieren und Unternehmen klassifizieren.
word2vec In letzter Zeit ist die Verarbeitungstechnologie für natürliche Sprachen namens word2vec ein heißes Thema geworden. Wie viele von Ihnen vielleicht wissen, verwenden wir eine große Anzahl von Sätzen, um Wörter in der Vektordarstellung zu quantifizieren und die folgenden Berechnungen zwischen Wörtern zu ermöglichen.
--König - Mann + Frau = Königin --Paris --France + Japan = Tokio
doc2vec Es gibt auch doc2vec, das word2vec erweitert und die obigen Berechnungen im Dokument selbst ermöglicht. Grob gesagt ist es so, als würde man den von word2vec erfassten Vektor von Wörtern zusammenfassen.
Mit doc2vec ist es möglich, die Ähnlichkeit zwischen verschiedenen Dokumenten durch Digitalisieren der Dokumente zu berechnen. Ich werde die Mundpropaganda des Unternehmens als ein Dokument betrachten und sie mit doc2vec analysieren, um die Beziehung zwischen den Unternehmen zu analysieren.
Wir werden dem Fluss unten folgen.
Es ist fast dasselbe wie Versuchen Sie, Ramen-Läden durch Verarbeitung natürlicher Sprache zu klassifizieren.
#Mundpropaganda lesen
from io_modules import load_data #Selbst erstellte DB-Lesebibliothek
rows = load_data(LOAD_QUERY, KUCHIKOMI_DB) # [Name der Firma,Mundpropaganda]
#Extrahieren Sie das Wort Stamm mit der Stammfunktion des Referenzartikels
from utils import stems #Implementierung des Referenzartikels Fast so wie es ist
companies = [row[0] for row in rows]
docs = [stems(row[1]) for row in rows]
"""
Ich mache die folgenden Daten
companies = ['Black Company Co., Ltd.', 'Belohnung Co., Ltd.', ...]
docs = [
['Lohnend', 'nicht genug', 'im Laufe der Zeit', 'sehr viel', 'Viele', ...
['Mitternacht Überstunden', 'Natürlich', 'Würzig', 'ich will sterben', 'Unmöglich', ...
...
]
"""
Hier ist übrigens der Schlüssel zur Verarbeitung natürlicher Sprache.
Ich würde gerne sagen, aber ich mache nicht viel, weil ich nur die Bibliothek anrufe. Darüber hinaus war die Berechnung schnell und endete reibungslos.
#Bibliothekslast
from gensim import models
#Registrieren Sie Bewertungen auf gensim
#Ich verwende die im Referenzartikel implementierte Erweiterungsklasse, um der Mundpropaganda den Firmennamen zu geben
sentences = LabeledListSentence(docs, companies)
#Lernbedingungseinstellung von doc2vec
# alpha:Lernrate/ min_count:Ignorieren Sie Wörter, die weniger als X Mal vorkommen
# size:Anzahl der Dimensionen des Vektors/ iter:Anzahl der Iterationen/ workers:Anzahl der parallelen Ausführungen
model = models.Doc2Vec(alpha=0.025, min_count=5,
size=100, iter=20, workers=4)
#Vorbereitung für doc2vec(Wortlistenaufbau)
model.build_vocab(sentences)
#Sie können es auch verwenden, indem Sie den aus Wikipedia gelernten Wortvektor zwangsweise anwenden.
# model.intersect_word2vec_format('./data/wiki/wiki2vec.bin', binary=True)
#Ausführung lernen
model.train(sentences)
#sparen
model.save('./data/doc2vec.model')
#Das Modell kann nach dem Training aus der Datei geladen werden
# model = models.Doc2Vec.load('./data/doc2vec.model')
#Die Firmenliste kann nach dem Lernen zurückgerufen werden, da sich die Reihenfolge ändern kann.
companies = model.docvecs.offset2doctag
Die Implementierung von LabeledListSentence ist wie folgt:
#Referenzartikel: http://qiita.com/okappy/items/32a7ba7eddf8203c9fa1
class LabeledListSentence(object):
def __init__(self, words_list, labels):
self.words_list = words_list
self.labels = labels
def __iter__(self):
for i, words in enumerate(self.words_list):
yield models.doc2vec.LabeledSentence(words, ['%s' % self.labels[i]])
Nun, das Modell wurde in kürzester Zeit gebaut.
Wenn die Genauigkeit von word2vec schlecht ist, ist das Ergebnis von doc2vec unweigerlich schlecht Während wir mit word2vec ~~ spielen, werden wir die Genauigkeit überprüfen.
Lassen Sie uns zunächst von der "Überstundenarbeit" ausgehen, die für Überprüfungen von Jobwechseln sehr beliebt ist.
# model.most_similar(positive=[Wort]) で似ているWortが出せる
>> model.most_similar(positive=['im Laufe der Zeit'])
[('Überstunden', 0.8757208585739136),
('Service Überstunden', 0.8720364570617676),
('Rostrückstände', 0.7500427961349487),
('Überstundengebühr', 0.6272672414779663),
('Nachhall', 0.6267948746681213),
('Ferienjob', 0.5998174548149109),
('Lange Arbeitsstunden', 0.5923150777816772),
('Arbeitsbelastung', 0.5819833278656006),
('Im Laufe der Zeit', 0.5778118371963501),
('Überstundenbezahlung', 0.5598958730697632)]
Ähnliche Wörter stehen in einer Reihe ...!
Es ist erstaunlich, Abkürzungen wie "Rostrückstände" und Tippfehler wie "Nachhall" aufzunehmen. Der Computer versteht das Konzept der "Überstunden"! Es war ein zutiefst emotionaler Moment.
Ich möchte, dass Benutzer ihre Jobs jeden Tag positiv wechseln Lassen Sie uns auch positive Wörter überprüfen.
>> model.most_similar(positive=['Lohnend'])
[('Kai', 0.9375230073928833),
('Der wahre Nervenkitzel', 0.7799979448318481),
('interessant', 0.7788150310516357),
('Interessant', 0.7710426449775696),
('angenehm', 0.712959885597229),
('Lebensgrund', 0.6919904351234436),
('Interessant', 0.6607719659805298),
('Freude', 0.6537446975708008),
('Stolz', 0.6432669162750244),
('Langweilig', 0.6373245120048523)]
Es gibt ein Wort, das mich am Ende interessiert, aber es ist ein gutes Gefühl. Es scheint, dass das Wort selbst verstanden wird, daher besteht der nächste Schritt darin, das Wort zu addieren oder zu subtrahieren.
In Bezug auf die Bewertungen von Jobwechseln sind die Inhalte zur Erleichterung der Arbeit für Frauen sehr beliebt. Versuchen Sie etwas wie "alleinstehende Frau-Frau + Mann =?".
Überprüfen Sie zunächst das grundlegende Wortverständnis.
#Worte, die Frauen ähneln
>> model.most_similar(positive=['Weiblich'])
[('Arbeitnehmerin', 0.8745297789573669),
('eine berufstätige Frau', 0.697405219078064),
('Single Frau', 0.6827554106712341),
('Frau', 0.5963315963745117)]
#Worte, die Männern ähneln
>> model.most_similar(positive=['männlich'])
[('Management', 0.7058243751525879),
('Aktiv', 0.6625881195068359),
('Spezialbehandlung', 0.6411184668540955),
('Bevorzugte Behandlung', 0.5910355448722839)]
#Wörter, die einer einzelnen Frau ähneln
>> model.most_similar(positive=['Single Frau'])
[('Arbeitnehmerin', 0.7283456325531006),
('Alleinerziehende Mutter', 0.6969124674797058),
('Unverheiratet', 0.6945561170578003),
('Weiblich', 0.6827554106712341)]
Es scheint in Ordnung zu sein, also führe Addition und Subtraktion aus.
#Single Frau-Weiblich+männlich= ?
# model.most_similar(positive=[Wörter zum Hinzufügen], negative=[Wort zum Zeichnen])
>> model.most_similar(positive=['Single Frau', 'männlich'], negative=['Weiblich'])
[('Unverheiratet', 0.665600597858429),
('Management', 0.6068357825279236),
('Kinder haben', 0.58555006980896),
('Jungs', 0.530462384223938),
('Spezialbehandlung', 0.5190619230270386)]
Trotz einiger verdächtiger Ergebnisse verschwanden die weiblichen Wörter wie "Arbeitnehmerin" und "alleinerziehende Mutter" aus "alleinstehende Frau", und "unverheiratet" wurde als das ähnlichste Wort angesehen.
word2vec scheint so richtig gemacht zu sein, wie es ist Wir werden weiterhin Unternehmen klassifizieren.
Als nächstes untersuchen wir die Beziehungen zwischen Unternehmen.
Wenden Sie sich zunächst an ein einfaches Unternehmen mit vielen verbundenen Unternehmen.
# model.docvecs.most_similar(positive=[Basis-Firmen-ID])
# ID 53 :Rekrutieren Sie Beteiligungen
>> model.docvecs.most_similar(positive=[53])
[('Rekrutieren Sie Lifestyle Co., Ltd.', 0.9008421301841736),
('Rekrutieren Sie Jobs Co., Ltd.', 0.8883105516433716),
('Recruit Carrier Co., Ltd.', 0.8839867115020752),
('Recruit Housing Company Co., Ltd.', 0.8076469898223877),
('Rekrutieren Sie Communications Co., Ltd.', 0.7945607900619507),
('Career Design Center Co., Ltd.', 0.7822821140289307),
('En Japan Co., Ltd.', 0.782017707824707),
('Rekrutieren Sie Marketing Partner Co., Ltd.', 0.7807818651199341),
('Cyber Agent Co., Ltd.', 0.7434782385826111),
('Quick Co., Ltd.', 0.7397039532661438)]
Es scheint zu einfach, aber als Unternehmen ähnlich wie Recruit Holdings Rekrutieren Sie verbundene Unternehmen.
Es sieht in Ordnung aus, also werfen wir einen Blick auf allgemeine Unternehmen.
# ID 1338 : DeNA
>> model.docvecs.most_similar(positive=[1338])
[('Gree Co., Ltd.', 0.8263522386550903),
('Cyber Agent Co., Ltd.', 0.8176108598709106),
('Dricom Co., Ltd.', 0.7977319955825806),
('Seee Co., Ltd.', 0.787316083908081),
('Cyberd Co., Ltd.', 0.7823044061660767),
('Dwango Co., Ltd.', 0.767551064491272),
('Yahoo Japan Corporation', 0.7610974907875061),
('KLab Co., Ltd.', 0.7593647837638855),
('Gloops Co., Ltd.', 0.7475718855857849),
('NHN\u3000comico Co., Ltd.', 0.7439380288124084)]
Herr DeNA, der in letzter Zeit ein heißes Thema war, stellte fest, dass er Herrn Gree ähnlich ist. Es scheint, dass es als mit dem Spiel verwandt beurteilt wurde, und Cyber und Dricom erschienen ebenfalls.
Es sieht ziemlich gut aus. Da besteht die Möglichkeit, dass die Ergebnisse verzerrt werden, wenn es nur Web-Unternehmen gibt Ich werde auch ganz andere Unternehmen betrachten.
# ID 862 :Honda
>> model.docvecs.most_similar(positive=[862])
[('Toyota Motor Corporation', 0.860333263874054),
('Mazda Corporation Inc.', 0.843244194984436),
('Denso Co., Ltd.', 0.8296780586242676),
('Fuji Heavy Industries Ltd.', 0.8261093497276306),
('Hino Motor Co., Ltd.', 0.8115691542625427),
('Nissan Motor Co., Ltd.', 0.8105560541152954),
('Daihatsu Industry Co., Ltd.', 0.8088374137878418),
('Aisin Seiki Co., Ltd.', 0.8074800372123718),
('Honda Technisches Forschungsinstitut Co., Ltd.', 0.7952905893325806),
('Toyota Automatic Lumber Co., Ltd.', 0.7946352362632751)]
# ID 38 :Sony
>> model.docvecs.most_similar(positive=[38])
[('Panasonic Corporation', 0.8186650276184082),
('Toshiba Corporation', 0.7851587533950806),
('OMRON Corporation', 0.7402874231338501),
('NEC', 0.7391767501831055),
('Nikon Corporation', 0.7331269383430481),
('Sony Global Manufacturing & Operations Co., Ltd.', 0.7183523178100586),
('Taiyo Denki Co., Ltd.', 0.7149790525436401),
('Sharp Co., Ltd.', 0.7115868330001831),
('Pioneer Co., Ltd.', 0.7104746103286743),
('Canon Inc.', 0.7103182077407837)]
# ID 1688 :McKinsey(Beratungsfarm)
>> model.docvecs.most_similar(positive=[1688])
[('Accenture Co., Ltd.', 0.7885801196098328),
('Boston Consulting Group Co., Ltd.', 0.7835338115692139),
('Goldman Sachs Securities Co., Ltd.', 0.7507193088531494),
('Deloitte Tohmatsu Consulting LLC', 0.7278151512145996),
('Sigmaxis Co., Ltd.', 0.6909163594245911),
('PwC Advisory LLC', 0.6522221565246582),
('Link und Motivation Co., Ltd.', 0.6289964914321899),
('Morgan Stanley MUFG Securities Co., Ltd.', 0.6283067464828491),
('EY Advisory Co., Ltd.', 0.6275663375854492),
('Abeam Consulting Co., Ltd.', 0.6181442737579346)]
Es sieht so aus, als wäre es im Allgemeinen in Ordnung.
Da die Ähnlichkeit zwischen Unternehmen auf diese Weise berechnet werden kann (= Entfernung kann berechnet werden), Die folgende Analyse kann leicht durchgeführt werden.
Der obige Prozess ist mit scikit-learn sehr einfach zu implementieren.
Dieses Mal habe ich tatsächlich versucht, die Verteilung mit der mehrdimensionalen Skalierungsmethode zu visualisieren. Wenn Sie den Inhalt schreiben, wird dieser Artikel also sehr lang sein Ich möchte es zu einem anderen Zeitpunkt vorstellen.
Wie word2vec kann doc2vec Dokumente addieren und zwischen diesen subtrahieren. Lass es uns vorerst tun.
Wie bereits erwähnt, waren die Unternehmen, die Recruit Holdings ähnelten, Recruit-Unternehmen.
# ID 53:Unternehmen ähnlich wie Recruit Holdings(Erneut veröffentlichen)
>> model.docvecs.most_similar(positive=[53])
[('Rekrutieren Sie Lifestyle Co., Ltd.', 0.9008421301841736),
('Rekrutieren Sie Jobs Co., Ltd.', 0.8883105516433716),
('Recruit Carrier Co., Ltd.', 0.8839867115020752),
('Recruit Housing Company Co., Ltd.', 0.8076469898223877),
('Rekrutieren Sie Communications Co., Ltd.', 0.7945607900619507),
('Career Design Center Co., Ltd.', 0.7822821140289307),
('En Japan Co., Ltd.', 0.782017707824707),
('Rekrutieren Sie Marketing Partner Co., Ltd.', 0.7807818651199341),
('Cyber Agent Co., Ltd.', 0.7434782385826111),
('Quick Co., Ltd.', 0.7397039532661438)]
Hier werden "Jobwechselinformationen DODA", "Teilzeitjobinformationen an" usw. betrieben. Fügen wir die Intelligenz eines großen Personalunternehmens hinzu.
# model.docvecs.most_similar(positive=[Basis-Firmen-ID,Fügen Sie mehr als eine hinzu])
# 「ID 53:Rekrutierungsbeteiligungen "+ 「ID 110:Intelligenz "= ?
>> model.docvecs.most_similar(positive=[53, 110])
[('Recruit Carrier Co., Ltd.', 0.888693630695343),
('Rekrutieren Sie Jobs Co., Ltd.', 0.865821123123169),
('Rekrutieren Sie Lifestyle Co., Ltd.', 0.8580507636070251),
('Career Design Center Co., Ltd.', 0.8396339416503906),
('En Japan Co., Ltd.', 0.8285592794418335),
('Meine Navi Co., Ltd.', 0.7874248027801514),
('Quick Co., Ltd.', 0.777060866355896),
('Recruit Housing Company Co., Ltd.', 0.775804877281189),
('Cyber Agent Co., Ltd.', 0.7625365257263184),
('Neo Carrier Co., Ltd.', 0.758436381816864)]
Die obigen Ergebnisse können wie folgt betrachtet werden.
Ich habe das Gefühl, ein willkürliches Beispiel gegeben zu haben, das leicht zu verstehen ist. Es scheint in Ordnung zu sein, zu beurteilen, dass es so gut läuft, wie es ist.
In diesem Artikel haben wir die folgenden Inhalte anhand der Bewertungen des Karrierewechsel-Meetings erreicht.
--Word2vec brachte die Maschine dazu, das Konzept von Wörtern zu verstehen, die in Mundpropaganda erscheinen, und führte eine Wortähnlichkeitsberechnung und Addition / Subtraktion durch.
In Zukunft wird es möglich sein, Berechnungen wie "Wort + Wort => ähnliches Unternehmen" (Beispiel: Belohnung + Wachstum => Ribsense) und das Unternehmen mit der Unternehmenskultur, die Benutzer mögen, und [Jobs](https: // Karriere) durchzuführen. Ich möchte eine Technologie ausprobieren, die jobtalk.jp/) durchsuchen kann.
Gegenwärtig gibt es jedoch ein schwerwiegendes Problem, weshalb ich es am Ende kurz vorstellen werde. Unten finden Sie ein leicht verständliches Beispiel.
#Welche Wörter ähneln "schwarz"?
>> model.most_similar(positive=['schwarz'])
[('Schwarze Gesellschaft', 0.8150135278701782),
('Weiß', 0.7779906392097473),
('Weiße Gesellschaft', 0.6732245683670044),
('Schwarze Gesellschaft', 0.5990744829177856),
('Schwarz Schwarz', 0.5734715461730957),
('Berühmt', 0.563334584236145),
('sauber', 0.5561092495918274),
('grau', 0.5449624061584473),
('Nachtloses Schloss', 0.5446360111236572),
('Religiöse Organisation', 0.5327660441398621)]
Wie in diesem Beispiel gezeigt, erkennt die diesmal eingeführte einfache Methode "schwarz" und "weiß" als ähnliche Wörter.
Wörter, die im selben Kontext verwendet werden, werden als gleich angesehen, und die Polarität kann nicht bestimmt werden, und die Maschine scheint Folgendes zu erkennen.
――Ich verstehe, dass Sie über Überstunden sprechen ――Ich bin mir nicht sicher, ob es mehr oder weniger Überstunden gibt
Um das Ergebnis von "word + word => ähnliche Firma" auszugeben, habe ich die Gensim-Bibliothek geändert und erweitert.
Ich dachte jedoch, es wäre zu unehrlich, es wegen solcher Probleme anzukündigen, und die Genauigkeit der Ergebnisse kann nicht garantiert werden, deshalb habe ich es diesmal nicht eingeführt. (Ich habe ein hartes Beispiel wie "Live Sense + Overtime + Hard => ??" vorbereitet ...!)
Dieses Gefühl der Herausforderung besteht unabhängig von Japanisch, und es scheint, dass verschiedene Studien in der Welt Fortschritte machen. Darunter eine Studie, dass sich das Ergebnis erheblich ändert, wenn word2vec nach Berücksichtigung der Abhängigkeit gelernt wird (Referenz Es scheint /)) zu geben, und ich möchte solche Anstrengungen in Zukunft unternehmen.
Recommended Posts