Dieses Mal werden wir über die Erstellung eines Modells sprechen, das die Anzahl der Aufrufe aus dem Titel von Jar Jals Video vorhersagt. Da NLP ein kompletter Amateur ist, habe ich versucht, es zu imitieren, indem ich mich auf die Artikel anderer Leute bezog.
Jar Jar ist eine ** kräftigste Lachkombination **, die aus Junpei Goto und Shusuke Fukutoku besteht, die zum Hauptquartier von Yoshimoto Kogyo in Tokio gehören. Derzeit veröffentliche ich tägliche Nachrichten zum Projekt JARUJARU TOWER auf dem offiziellen YouTube-Kanal von Jarjaru. Ich werde.
Es ist sehr kostspielig, das täglich auf Youtube veröffentlichte Material zu überprüfen. Außerdem wachsen Jar Jal-Videos mit unklaren Titeln leichter (sehr subjektiv). Zum Beispiel "Der Typ, der von einem schlechten Angestellten zu einem schlechten Kunden gemacht wurde" "[Der Eier-Typ des Diktators](https: // www. youtube.com/watch?v=RPXFYBRJVMw) ". Wenn der Titel Wörter wie "Gefährlich, verrückt" enthält, ist die Anzahl der Aufrufe meiner Meinung nach im Allgemeinen hoch. Andererseits wird die Geschichte "Der Typ, der die Geschichte von Chara Man Bancho sieht" seltener gespielt, und jeder im Video mit diesem Titel * Es ist eine jährliche Veranstaltung, bei der eine niedrige Bewertung ** vergeben wird, ohne Fragen zu stellen.
Dieses Mal werden wir die Youtube-Daten-API verwenden, um Videotitel und -ansichten als Set zu sammeln. Der Artikel "Verwenden von YouTube Data API v3 von Python zum Abrufen von Videos eines bestimmten Kanals [^ 1]" und "Verwenden von YouTube Data API v3 von Python zum Abrufen der Anzahl der sanft angezeigten Videos [^ 2]" Ich habe auf den Artikel verwiesen. Da für die Verwendung der Youtube-API ein API-Schlüssel erforderlich ist, "So erhalten Sie den YouTube-API-API-Schlüssel [^ 3]", habe ich den Schlüssel unter Bezugnahme auf diesen Artikel erhalten. Sammeln Sie zunächst den Titel und die Video-ID des folgenden Codevideos (erforderlich, um die Anzahl der Aufrufe des Videos zu ermitteln).
jarujaru_scraping1.py
import os
import time
import requests
import pandas as pd
API_KEY = os.environ['API_KEY']#Bringen Sie die der Umgebungsvariablen hinzugefügte ID mit
CHANNEL_ID = 'UChwgNUWPM-ksOP3BbfQHS5Q'
base_url = 'https://www.googleapis.com/youtube/v3'
url = base_url + '/search?key=%s&channelId=%s&part=snippet,id&maxResults=50&order=date'
infos = []
while True:
time.sleep(30)
response = requests.get(url % (API_KEY, CHANNEL_ID))
if response.status_code != 200:
print('Endet mit einem Fehler')
print(response)
break
result = response.json()
infos.extend([
[item['id']['videoId'], item['snippet']['title'], item['snippet']['description'], item['snippet']['publishedAt']]
for item in result['items'] if item['id']['kind'] == 'youtube#video'
])
if 'nextPageToken' in result.keys():
if 'pageToken' in url:
url = url.split('&pageToken')[0]
url += f'&pageToken={result["nextPageToken"]}'
else:
print('Erfolgreiche Fertigstellung')
break
videos = pd.DataFrame(infos, columns=['videoId', 'title', 'description', 'publishedAt'])
videos.to_csv('data/video1.csv', index=None)
Verwenden Sie nach dem Sammeln der Videotitel und IDs den folgenden Code, um die Anzahl der Aufrufe zu erfassen.
jarujaru_scraping2.py
import os
import time
import requests
import pandas as pd
API_KEY = os.environ['API_KEY']
videos = pd.read_csv('videos.csv')
base_url = 'https://www.googleapis.com/youtube/v3'
stat_url = base_url + '/videos?key=%s&id=%s&part=statistics'
len_block = 50
video_ids_per_block = []
video_ids = videos.videoId.values
count = 0
end_flag = False
while not end_flag:
start = count * len_block
end = (count + 1) * len_block
if end >= len(video_ids):
end = len(video_ids)
end_flag = True
video_ids_per_block.append(','.join(video_ids[start:end]))
count += 1
stats = []
for block in video_ids_per_block:
time.sleep(30)
response = requests.get(stat_url % (API_KEY, block))
if response.status_code != 200:
print('error')
break
result = response.json()
stats.extend([item['statistics'] for item in result['items']])
pd.DataFrame(stats).to_csv('data/stats.csv', index=None)
videos = pd.read_csv('videos.csv')
stasas = pd.read_csv('stats.csv')
pd.merge(videos, stasas, left_index=True, right_index=True).to_csv('data/jarujaru_data.csv')
Die folgenden Daten werden gespeichert.
Dieses Mal werde ich die Anzahl der Ansichten in drei Stufen unterteilen und daraus ein Klassifizierungsproblem machen. Das Histogramm der Wiedergabezahl ist wie folgt. Aus der folgenden Grafik werden wir mit überwältigender Subjektivität beschriften. Die Anzahl der Aufrufe beträgt weniger als 100.000, 100.000 oder mehr und weniger als 250.000 und 250.000 oder mehr.
Der folgende Code ist ein Code, der nur den Kontrollnamen aus der Beschriftung und den Titel des Videos übernimmt. Jar Jals Conte-Video verwendet immer den Conte-Namen in "".
jarujaru_scraping3.py
import re
import pandas as pd
info = []
df = pd.read_csv('data/jarujaru_data.csv')
for row, item in df.iterrows():
if '『' in item['title']:
title = 'x' + item['title']
title = re.split('[『』]', title)[1]
if item['viewCount'] >= 250000:
label = 2
elif 100000 <= item['viewCount'] < 250000:
label = 1
elif item['viewCount'] < 100000:
label = 0
info.extend([[title, item['viewCount'], item['likeCount'], item['dislikeCount'], item['commentCount'], label]])
pd.DataFrame(info, columns=['title', 'viewCount', 'likeCount', 'dislikeCount', 'commentCount', 'label']).to_csv('data/jarujaru_norm.csv')
In diesem Artikel [^ 4] können Sie den Titel des Steuerelements morphologisch analysieren und den Titel in einen Merkmalsvektor (Bag-of-Words-Format) konvertieren. Unten ist ein Teil des Codes. Alle Implementierungen werden auf GitHub [^ 5] veröffentlicht.
jarujaru.py
import analysis #Ich werde es auf meinem eigenen Code, GitHub, veröffentlichen.
import pandas as pd
from gensim import corpora
from gensim import matutils
def vec2dense(vec, num_terms):
return list(matutils.corpus2dense([vec], num_terms=num_terms).T[0])
df = pd.read_csv('data/jarujaru_norm.csv')
words = analysis.get_words(df['title']) #Geben Sie hier den morphologisch analysierten Titel ein
#Erstelle ein Wörterbuch
dictionary = corpora.Dictionary(words)
dictionary.filter_extremes(no_below=2, keep_tokens=['Chara','Mann','Bancho'])
dictionary.save('data/jarujaru.dict')
courpus = [dictionary.doc2bow(word) for word in words]
# Bag-of-In das Wortformat konvertieren
data_all = [vec2dense(dictionary.doc2bow(words[i]),len(dictionary)) for i in range(len(words))]
Dieses Mal haben wir SVM als Modell übernommen, da die Anzahl der Daten gering ist. Teilen Sie die Daten in Trainingsdaten und Testdaten und tauchen Sie in das Modell ein.
jarujaru.py
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
#Einstellen von Trainingstestdaten
train_data = data_all
X_train, X_test, y_train, y_test = train_test_split(train_data, df['label'], test_size=0.2, random_state=1)
#Datenstandardisierung
sc = StandardScaler()
sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)
#Erstellen eines Lernmodells
clf = SVC(C = 1, kernel = 'rbf')
clf.fit(X_train_std, y_train)
import pickle
with open('data/model.pickle', mode='wb') as fp:
pickle.dump(clf, fp)
Lassen Sie uns das Modell bewerten.
jarujaru.py
score = clf.score(X_test_std, y_test)
print("{:.3g}".format(score))
predicted = clf.predict(X_test_std)
Die Genauigkeit betrug 53%. Es sind 33%, also kann ich lernen (obwohl es schrecklich ist). Schauen wir uns auch den Verwirrungsprozess an. Es scheint, dass die meisten Videos ein robustes Modell sind, das mehr als 100.000 Wiedergaben vorhersagt.
Dieses Mal habe ich ein Modell erstellt, das die Anzahl der Aufrufe aus dem Titel des Videos von Jar Jal vorhersagt. Als NLP-Amateur wusste ich nicht viel über das Vektorisieren von Sätzen, aber ich konnte bis zum Ende ein Modell erstellen. Alle Implementierungen werden auf GitHub [^ 5] veröffentlicht. Das nächste Mal werde ich dieses Modell verwenden, um "LINE-Bot zu entwickeln, der Sie benachrichtigt, wenn es sich lohnt, es sich anzusehen, wenn ein Jar Jal-Video veröffentlicht wird". Außerdem möchte ich die Methode zur Vektorisierung von Sätzen und Modellen untersuchen, die mit Zeitreihendaten (LSTM usw.) umgehen.
[^ 1]: Videos für einen bestimmten Kanal mit YouTube Data API v3 von Python abrufen [^ 2]: Verwenden Sie YouTube Data API v3 von Python, um die Anzahl der Videoaufrufe sanft abzurufen [^ 3]: So erhalten Sie den YouTube-API-API-Schlüssel [^ 4]: Vorhersage der Klassifizierung von Nachrichtenartikeln durch maschinelles Lernen [^ 5]: Quellcode dieser Zeit
Recommended Posts