Beruflich Dokumente
Kultur Dokumente
References.......................................................................................................................................... 55
Abstract
Die für Flask bzw. TensorFlow Serving exportierten Dateien sind bei
Deepset BERT um 270 MB sowie die vocab-Datei um 724 KB kleiner.
Die Performance beim Serving ist nahezu identisch, da das Laden der
Dateien ein einmaliger Vorgang ist (beim Starten der Server). Die
Antwortzeit auf einem Ubuntu 16.04 Server beträgt ca. 1s.
Es gibt verschiedene Verfahren, mit denen man Texte analysiert und nach
bestimmten Kriterien klassifiziert. Es wurde bereits gezeigt, dass BERT -
Bidirectional Encoder Representations from Transformers (Devlin et al.
2018) dabei die besten Ergebnisse erzielt.
https://github.com/google-research/bert
https://github.com/tensorflow/serving.
https://projects.fzai.h-da.de/iggsa/data-2019/.
Das Trainingsdatenset (train.tsv) betrug gut 12.000 Tweets aus 2018 und
2019. Das Evaluierungsdatenset (dev.tsv) bestand aus gut 3.000 Tweets
aus 2019. Beide Datensets enthielten gelabelte (0 – nicht beleidigend und
1 - beleidigend) deutschsprachige Tweets:
# Label / Polarity
label_list = [0, 1]
labels = ["nicht beleidigend", "beleidigend"]
# Gelabelte Dataframes (df_train, df_eval)
# id label text_b sentence
# ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
# text_b ‐ None
# sentence (text_a) ‐ Tweet
df_train.to_csv(‘train.tsv’, sep = '\t', index=True, header=False)
df_eval.to_csv(‘dev.tsv’, sep = '\t', index=True, header=False)
1.3. Feintunen
Das Feintunen (mit train.tsv) von Google Multilingual BERT sowie Deepset
BERT erfolgte mit Google Colab (GPU) auf Google Drive:
# Google Drive anbinden
from google.colab import drive
drive.mount("/content/gdrive", force_remount=True)
import os
os.chdir("gdrive/My Drive")
# Feintunen und Export mit Deepset BERT
!python run_new_classifier.py \
‐‐task_name=cola \
‐‐do_export=true \
‐‐do_train=true \
‐‐do_eval=true \
‐‐do_predict=false \
‐‐do_lower_case=false \
‐‐data_dir=bert_output \
‐‐export_dir=bert_output \
‐‐label_list=[0, 1] \
‐‐vocab_file=bert‐base‐german‐cased/vocab.txt \
‐‐bert_config_file=bert‐base‐german‐cased/bert_config.json \
‐‐init_checkpoint=bert‐base‐german‐cased/bert_model.ckpt \
‐‐save_checkpoints_steps=5000 \
‐‐iterations_per_loop=500 \
‐‐max_seq_length=128 \
‐‐train_batch_size=32 \
‐‐learning_rate=2e‐5 \
‐‐num_train_epochs=3.0 \
‐‐output_dir=bert_output/
max_seq_length=128 max_seq_length=128
train_batch_size=32 train_batch_size=32
learning_rate=2e-5 learning_rate=2e-5
num_train_epochs=3.0 num_train_epochs=3.0
max_seq_length=192 max_seq_length=192
train_batch_size=16 train_batch_size=16
learning_rate=2e-5 learning_rate=2e-5
num_train_epochs=3.0 num_train_epochs=3.0
max_seq_length=256 max_seq_length=256
train_batch_size=8 train_batch_size=8
learning_rate=2e-5 learning_rate=2e-5
num_train_epochs=3.0 num_train_epochs=3.0
# Modellexport für Serving
estimator._export_to_tpu = False
estimator.export_saved_model(FLAGS.export_dir, serving_input_fn)
# Exported Model (Google Multilingual BERT)
1
variables
variables.data‐00000‐of‐00001 695 MB
variables.index 9 KB
saved_model.pb 885 KB
vocab.txt 973 KB
# Exported Model (Deepset BERT)
1
variables
variables.data‐00000‐of‐00001 427 MB
variables.index 9 KB
saved_model.pb 884 KB
vocab.txt 249 KB
# Modell für Vorhersagen laden
# wenn nur Flask, ohne TensorFlow Serving
import tensorflow as tf
predict_fn = tf.contrib.predictor.from_saved_model(
os.path.join('dir_to_model', '1'))
# Flask app.py
def predict(sentence, url, model_name, tokenizer, max_seq_length,
label_list, labels):
. . .
POST‐Request zu TensorFlow Server
. . .
return label
tokenizer_multi = tokenization.FullTokenizer(
os.path.join('dir_to_vokab_txt',
'vocab.txt'),
do_lower_case=False)
tokenizer_deepset = tokenization.FullTokenizer(
os.path.join('dir_to_vokab_txt',
'vocab.txt'),
do_lower_case=False)
Die predict-Funktion kann das Modell mit predict_fn laden oder aber das
bereits unter TensorFlow Serving gestartete Modell benutzen. Im ersten
Fall wird der Flask-Server stak belastet. Deshalb ist die Variante ohne
Modell Server (TensorFlow Serving) nicht zu empfehlen.
# Javascript POST‐Request an den Webserver
var xhr = new XMLHttpRequest();
xhr.open("POST", '/bert_germeval/', true);
xhr.setRequestHeader('content‐type', 'application/x‐www‐form‐
urlencoded;charset=UTF‐8');
xhr.onload = function () {
alert('BERT Tweet‐Bewertung: \n' + xhr.responseText);
};
xhr.send("b64=" + sentence)
# Apache Proxy zu Flask
<Location "/bert_germeval">
ProxyPass http://localhost:port/bert_germeval
ProxyPassReverse http://localhost:port/bert_germeval
</Location>
# Flask app.py
@app.route('/bert_germeval/', methods=['POST'])
def bert_germeval():
data = request.form["b64"]
sentence = data.split('///')
try:
out1 = predict(sentence = sentence[0],
url = "http://localhost:port",
model_name = "GoogleGermEval",
tokenizer = tokenizer_multi,
max_seq_length = 128,
label_list = [0, 1],
labels = ["nicht beleidigend", "beleidigend"])
out2 = predict(sentence = sentence[0],
url = "http://localhost:port",
model_name = "DeepsetGermEval",
tokenizer = tokenizer_deepset,
max_seq_length = 128,
label_list = [0, 1],
labels = ["nicht beleidigend", "beleidigend"])
return jsonify({'Google BERT' :out1,'Deepset BERT' :out2})
except Exception as e:
print(e)
return jsonify({"Ergebnis":"Fehler im Modell"})
Die Performance (Antwortzeit) wurde für beide Modelle auf einem Ubuntu
16.04 Server untersucht. Es konnten keine Unterschiede festgestellt
werden. Die Antwortzeit beträgt ca. 1s.
Abstract
Nachrichten sind in der Regel Kurztexte. Mit Google BERT versuchen wir
deutschsprachige Nachrichten aufgrund der ersten 512 Wörter (Token) zu
thematisieren (German news topic prediction).
2.1. Einführung
https://deepset.ai/german-bert.
https://github.com/google-research/bert
https://github.com/tensorflow/serving.
2.2. Daten
https://tblock.github.io/10kGNAD/.
Das Feintunen (train.tsv) mit Deepset BERT erfolgte mit Google Colab
(GPU) auf Google Drive.
Die Ergebnisse der Evaluierung (dev.tsv) mit Deepset BERT wurden wie
folgt zusammengestellt:
max_seq_length=512 max_seq_length=512
train_batch_size=6 train_batch_size=6
learning_rate=2e-5 learning_rate=2e-5
num_train_epochs=3.0 num_train_epochs=3.0
Abstract
Kundenposts sind nicht immer Kurztexte. Mit Google BERT versuchen wir
die Kundenstimmung aus Posts über die Deutsche Bahn aufgrund der
ersten 512 Wörter (Token) zu klassifizieren.
3.1. Einführung
Mit Google BERT versuchen wir die Kundenstimmung aus Posts über die
Deutsche Bahn aufgrund der ersten 512 Wörter (Token) zu klassifizieren.
https://deepset.ai/german-bert.
https://github.com/google-research/bert
https://github.com/tensorflow/serving.
3.2. Daten
https://sites.google.com/view/germeval2017-absa/data
Das Projekt sucht nach Möglichkeiten, Posts über die Deutsche Bahn aus
den sozialen Netzwerken in 3 Kategoriern automatisch zu bewerten:
'negativ', 'neutral' oder 'positiv'.
Das Feintunen (train.tsv) mit Deepset BERT erfolgte mit Google Colab
(GPU) auf Google Drive.
Die Ergebnisse der Evaluierung (dev.tsv) mit Deepset BERT wurden wie
folgt zusammengestellt:
max_seq_length=512 max_seq_length=512
train_batch_size=6 train_batch_size=6
learning_rate=2e-5 learning_rate=2e-5
num_train_epochs=3.0 num_train_epochs=3.0
Abstract
Ein QA-Beispiel dafür wäre die richtige Antwort aus einer Menge
vorgegebener Frage/Antwort-Paare automatisch herauszufinden (FAQ
Bot).
Die Kundenstimmung aus Posts messen, ist eine für viele Unternehmen
wichtige Anwendung. Mit 100-200 gelabelten Posts kann bereits gestartet
werden (Kundenstimmung messen).
Die Performance beim Serving ist sehr gut, da das Laden der Dateien ein
einmaliger Vorgang ist (beim Starten der Server). Die Antwortzeit auf
einem Ubuntu 16.04 Server beträgt ca. 1s.
https://en.wikipedia.org/wiki/Nearest_neighbor_search
und dadurch die semantische Ähnlichkeit der Texte messen. Dafür gibt es
verschiedene Verfahren:
Der euklidische Abstand der Vektoren q und p wird wie folgt berechnet
Der euklidische Abstand ist schwer interpretierbar. Dafür eignet sich mehr
die euklidische Ähnlichkeit (s).
https://github.com/hanxiao/bert-as-service
https://deepset.ai/german-bert.
# Javascript POST‐Request an den Webserver
var xhr = new XMLHttpRequest();
xhr.open("POST", '/bert_service_encoder/', true);
xhr.setRequestHeader('content‐type', 'application/x‐www‐form‐
urlencoded;charset=UTF‐8');
xhr.onload = function () {
res = xhr.responseText;
res = res.split("///");
alert("Text 1: " + sentence1 + "\nText 2: " + sentence2 +
"\n\nEuklidischer Abstand = " + res[0] +
"\n\nEuklidische Ähnlichkeit = " + res[1]);
};
xhr.send("b64=" + sentence1 + ‘///’ + sentence2);
# Apache Proxy zu Flask
<Location "/bert_service_encoder ">
ProxyPass http://localhost:port/bert_service_encoder
ProxyPassReverse http://localhost:port/bert_service_encoder
</Location>
# Flask app.py
from bert_serving.client import BertClient
bc = BertClient(port=port, port_out=port_out)
@app.route('/bert_service_encoder/', methods=['POST'])
def bert_service_encoder():
data = request.form["b64"]
sentence = data.split('///')
texts = [sentence[0], sentence[1]]
try:
vec_bc = bc.encode(texts, is_tokenized=False)
vec1 = vec_bc[0]
vec2 = vec_bc[1]
#payload = {"id": 123,"texts": texts,
"is_tokenized": False}
#req = requests.post('http://localhost:port/encode',
json=payload)
#pred = json.loads(req.content.decode('utf‐8'))
#vec1 = np.array(pred['result'][0])
#vec2 = np.array(pred['result'][1])
distance = np.sqrt(np.sum((vec1 ‐ vec2)**2))
similarity = np.sum(vec1*vec2)/
(np.sqrt(np.sum(vec1**2))*np.sqrt(np.sum(vec2**2)))
ret = str(distance) + '///' + str(similarity)
return ret
except Exception as e:
print(e)
return jsonify({"Ergebnis":"Fehler im Modell"})
https://bankenverband.de/fachthemen/steuern/fragen-und-antworten-
zum-thema-geldwaesche/
Und so funktioniert es: Die gestellte Frage wird mit allen FAQ-Fragen
verglichen und die FAQ-Antwort der FAQ-Frage mit der größten
Ähnlichkeit mit der gestellten Frage wird angezeigt.
- Datenstruktur (faq.tsv):
# ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
# id Frage Antwort
# ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
# sep = '\t'
# header=False
# Javascript POST‐Request an den Webserver
var xhr = new XMLHttpRequest();
xhr.open("POST", '/bert_faq_encoder/', true);
xhr.setRequestHeader('content‐type', 'application/x‐www‐form‐
urlencoded;charset=UTF‐8');
xhr.onload = function () {
res = xhr.responseText;
res = res.split("///");
alert(frage + '\n\n' + res[1]);
};
xhr.send("b64=" + frage);
# Apache Proxy zu Flask
<Location "/bert_faq_encoder ">
ProxyPass http://localhost:port/bert_faq_encoder
ProxyPassReverse http://localhost:port/bert_faq_encoder
</Location>
# Flask app.py
from bert_serving.client import BertClient
bc = BertClient(port=port, port_out=port_out)
faq = pd.read_csv('/dir_to/faq.tsv', sep = '\t',
header=None,
encoding='latin1')
faq_sentences = []
for i in range(1,len(faq)+1):
faq_sentences.append(faq[1][i‐1])
doc_vecs = bc.encode(faq_sentences)
@app.route('/bert_faq_encoder/', methods=['POST'])
def bert_faq_encoder():
data = request.form["b64"]
sentence = data.split('///')
try:
query_vec = bc.encode([sentence[0]])[0]
score = np.sum(query_vec * doc_vecs, axis=1)/
(np.linalg.norm(query_vec)*
np.linalg.norm(doc_vecs, axis=1)
topk_idx = np.argsort(score)[::‐1][:1]
for idx in topk_idx:
ret = str(score[idx]) + '///' + str(faq[2][idx])
return ret
except Exception as e:
print(e)
return jsonify({"Ergebnis":"Fehler im Modell"})
https://www.focus.de/gesundheit/news/titelthema-sars-cov-2-
zwischenbilanz-einer-pandemie_id_12343424.html
Und so funktioniert es: Die gestellte Frage wird mit allen FAQ-Fragen
verglichen und die FAQ-Antwort der FAQ-Frage mit der größten
Ähnlichkeit mit der gestellten Frage wird angezeigt.
- Datenstruktur (faq_corona.tsv):
# id Frage Antwort
# ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
# sep = '\t'; header=False
# Javascript POST‐Request an den Webserver
var xhr = new XMLHttpRequest();
xhr.open("POST", '/bert_faq_corona_encoder/', true);
xhr.setRequestHeader('content‐type', 'application/x‐www‐form‐
urlencoded;charset=UTF‐8');
xhr.onload = function () {
res = xhr.responseText;
res = res.split("///");
alert(frage + '\n\n' + res[1]);
};
xhr.send("b64=" + frage);
# Apache Proxy zu Flask
<Location "/bert_faq_corona_encoder ">
ProxyPass http://localhost:port/bert_faq_corona_encoder
ProxyPassReverse http://localhost:port/bert_faq_corona_encoder
</Location>
# Flask app.py
from bert_serving.client import BertClient
bc = BertClient(port=port, port_out=port_out)
faq_corona = pd.read_csv('/dir_to/faq_corona.tsv', sep = '\t',
header=None,
encoding='latin1')
faq_corona_sentences = []
for i in range(1,len(faq_corona)+1):
faq_corona_sentences.append(faq_corona[1][i‐1])
doc_vecs = bc.encode(faq_corona_sentences)
@app.route('/bert_faq_corona_encoder/', methods=['POST'])
def bert_faq_corona_encoder():
data = request.form["b64"]
sentence = data.split('///')
try:
query_vec = bc.encode([sentence[0]])[0]
score = np.sum(query_vec * doc_vecs, axis=1)/
(np.linalg.norm(query_vec)*
np.linalg.norm(doc_vecs, axis=1)
topk_idx = np.argsort(score)[::‐1][:1]
for idx in topk_idx:
ret = str(score[idx]) + '///' + str(faq_corona[2][idx])
return ret
except Exception as e:
print(e)
return jsonify({"Ergebnis":"Fehler im Modell"})
https://tblock.github.io/10kGNAD/.
# Javascript POST‐Request an den Webserver
var xhr = new XMLHttpRequest();
xhr.open("POST", '/bert_news_encoder/', true);
xhr.setRequestHeader('content‐type', 'application/x‐www‐form‐
urlencoded;charset=UTF‐8');
xhr.onload = function () {
res = xhr.responseText;
res = res.split("///");
alert('Thema: ' + res[1] + '\n\n' + news);
};
xhr.send("b64=" + news);
# Apache Proxy zu Flask
<Location "/bert_news_encoder ">
ProxyPass http://localhost:port/bert_news_encoder
ProxyPassReverse http://localhost:port/bert_news_encoder
</Location>
# Flask app.py
from bert_serving.client import BertClient
bc = BertClient(port=port, port_out=port_out)
news = pd.read_csv('/dir_to/train.tsv', sep = '\t',
header=None,
encoding='latin1')
news_sentences = []
for i in range(1,len(news)+1):
news_sentences.append(news[1][i‐1])
doc_vecs = bc.encode(news_sentences)
@app.route('/bert_news_encoder/', methods=['POST'])
def bert_news_encoder():
data = request.form["b64"]
sentence = data.split('///')
try:
query_vec = bc.encode([sentence[0]])[0]
score = np.sum(query_vec * doc_vecs, axis=1)/
(np.linalg.norm(query_vec)*
np.linalg.norm(doc_vecs, axis=1)
topk_idx = np.argsort(score)[::‐1][:1]
for idx in topk_idx:
ret = str(score[idx]) + '///' + str(news[2][idx])
return ret
except Exception as e:
print(e)
return jsonify({"Ergebnis":"Fehler im Modell"})
https://sites.google.com/view/germeval2017-absa/data
Das Projekt sucht nach Möglichkeiten, Posts über die Deutsche Bahn aus
den sozialen Medien in 3 Kategoriern automatisch zu bewerten: 'negativ',
'neutral' oder 'positiv'.
# Javascript POST‐Request an den Webserver
var xhr = new XMLHttpRequest();
xhr.open("POST", '/bert_posts_encoder/', true);
xhr.setRequestHeader('content‐type', 'application/x‐www‐form‐
urlencoded;charset=UTF‐8');
xhr.onload = function () {
res = xhr.responseText;
res = res.split("///");
alert('Stimmung: ' + res[1] + '\n\n' + posts);
};
xhr.send("b64=" + posts);
# Apache Proxy zu Flask
<Location "/bert_posts_encoder ">
ProxyPass http://localhost:port/bert_posts_encoder
ProxyPassReverse http://localhost:port/bert_posts_encoder
</Location>
# Flask app.py
from bert_serving.client import BertClient
bc = BertClient(port=port, port_out=port_out)
posts = pd.read_csv('/dir_to/train.tsv', sep = '\t',
header=None,
encoding='latin1')
posts_sentences = []
for i in range(1,len(posts)+1):
posts_sentences.append(posts[1][i‐1])
doc_vecs = bc.encode(posts_sentences)
@app.route('/bert_posts_encoder/', methods=['POST'])
def bert_posts_encoder():
data = request.form["b64"]
sentence = data.split('///')
try:
query_vec = bc.encode([sentence[0]])[0]
score = np.sum(query_vec * doc_vecs, axis=1)/
(np.linalg.norm(query_vec)*
np.linalg.norm(doc_vecs, axis=1)
labels=['negativ', 'neutral', 'positiv']
topk_idx = np.argsort(score)[::‐1][:1]
for idx in topk_idx:
ret = str(score[idx]) + '///' + str(labels[posts[1][idx]])
return ret
except Exception as e:
print(e)
return jsonify({"Ergebnis":"Fehler im Modell"})
Filme nach Inhalt suchen: Für diese Untersuchungen kann man Stanford
IMDB-Dataset
http://www.cs.cmu.edu/~ark/personas/
Für die semantische Suche sind Name und Inhalt der Filme von
Bedeutung. Die Inhalte aller Filme werden mit Bert-as-a-service
vektorisiert. Sie haben beispielsweise den Film „Indiana Jones and the
Raiders of the Lost Ark” gesehen und möchten weitere Filme mit einem
ähnlichen Inhalt sehen.
Und so funktioniert es: Es wird der vektorisierte Inhalt dieses Films mit
allen anderen verglichen und die Namen der Filme mit der größten
Ähnlichkeit mit „Indiana Jones and the Raiders of the Lost Ark” werden
angezeigt:
y = Xβ + e (1)
y = xb (3)
Ein Beispiel hierfür wäre die Sentiment-Analyse mit den beiden Labels
negativ = 0 und positiv = 1 oder die Tweet-Bewertung in 0 – nicht
beleidigend und 1 - beleidigend.
Wenn die Anzahl der Datensätze gering im Vergleich zu der Anzahl der
unabhängigen Variablen ist (n<<768), entsteht eine Überanpassung und
dadurch eine Verzerrung der Erbenisse. In solchen Fällen liefern
Regressionsmodelle mit Regularisierung (zusätzliche Bedingung zu der
Verlustfunktion der Regression) wesentlich bessere Schätzgenauigkeit als
Regressionen ohne Regularisierung. Dazu gehören die Lasso Regression
(L1-Regularisierung)
# Beispiel für Lineare Regression
from bert_serving.client import BertClient
bc = BertClient(port=port, port_out=port_out)
import pandas as pd
df = pd.read_csv('/dir_to/train.tsv', sep = '\t',
header=None,
encoding='latin1')
sentences = []
y = []
n = ...
for i in range(0, n):
sentences.append(df[2][i])
y.append(df[1][i])
X = bc.encode(sentences)
from sklearn import linear_model
reg = linear_model.LinearRegression()
reg.fit(X, y)
new_sentence = 'In seiner erst zweiten Saison konnte Leclerc ' +
'der Formel 1 bereits seinen Stempel aufdrücken.'
x = bc.encode(new_sentence)
y_predicted = reg.predict(x)
# Beispiel für Binomiale und Multinomiale Regression (Klassifikation)
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
reg = LogisticRegression()
reg.fit(train_X, train_y)
# Klassifikationsgüte
print("Genauigkeit: %f" % accuracy_score(test_y, reg.predict(test_X)))
https://deepset.ai/german-bert
Das Feintunen mit den ersten 200 Nachrichten ergibt eine um 0,8%
niedrigere Genauigkeit der Prognose gegenüber der Variante mit allen
Datensätzen.
Abstract
Das BERT-Modell kann mit ungelabelten deutschsprachigen Daten
von Grund auf neu trainiert oder ein bereits vortrainiertes Modell
nachtrainiert werden.
ClinicalBert (Huang et al., 2019) ist ein Basis-BERT-Modell, das von Grund
auf mit englischsprachigen klinischen Daten vortrainiert wurde.
FinBert (Yang et al. 2020) ist ein Basis-BERT-Modell, das von Grund auf
mit englischsprachigen Geschäftsberichten (Jahres- und Quartalsberichte
– 10-K und 10-Q) der amerikanischen SEC (Securities Exchange
Commission) vortrainiert wurde.
https://github.com/google-research/bert
import pandas as pd
input_file = 'germeval/train.tsv'
output_file = 'germeval/pre‐training.txt'
df = pd.read_csv(input_file, sep = '\t', header=None, encoding='latin1')
df[3].to_csv(output_file, sep = '\t', index=False, header=False)
!python create_pretraining_data.py \
‐‐input_file=germeval/pre‐training.txt \
‐‐output_file=germeval/tf_pre_training.tfrecord \
‐‐vocab_file=bert‐base‐german‐cased/vocab.txt \
‐‐do_lower_case=False \
‐‐max_seq_length=512 \
‐‐max_predictions_per_seq=77 \
‐‐masked_lm_prob=0.15 \
‐‐random_seed=12345 \
‐‐dupe_factor=5
!python run_pretraining.py \
‐‐input_file=germeval/tf_pre_training.tfrecord \
‐‐output_dir=bert_output \
‐‐do_train=True \
‐‐do_eval=True \
‐‐bert_config_file=bert‐base‐german‐cased/bert_config.json \
‐‐init_checkpoint=bert‐base‐german‐cased/bert_model.ckpt \
‐‐train_batch_size=6 \
‐‐max_seq_length=512 \
‐‐max_predictions_per_seq=77 \
‐‐num_train_steps=20000 \
‐‐num_warmup_steps=2000 \
‐‐save_checkpoints_steps=20000 \
‐‐learning_rate=2e‐5
Welche Bedeutung die einzelnen Parameter haben und wie diese gewählt
werden sollen, ist im „Abschnitt Pre-training with BERT“ dem folgenden
Link https://github.com/google-research/bert zu entnehmen.
Erst nach 20.000 training steps (global_step = 20.000) ist die erreichte
Genauigkeit hoch genug (96,8%).
Nach dem Pre-training mit den GermEval-Daten kann Deepset BERT auch
noch zusätzlich mit gelabelten Daten feingetunt werden.
ClinicalBert (Huang et al., 2019) ist ein Basis-BERT-Modell, das von Grund
auf mit englischsprachigen klinischen Daten vortrainiert wurde.
FinBert (Yang et al. 2020) ist ein Basis-BERT-Modell, das von Grund auf
mit englischsprachigen Geschäftsberichten (Jahres- und Quartalsberichte
– 10-K und 10-Q) der amerikanischen SEC (Securities Exchange
Commission) vortrainiert wurde.
https://publikations-
plattform.de/sp/wexsservlet?global_data.designmode=pp&page.navid=to
_start&dest=wexsservlet&global_data.language=de#b
Deutsch- und englischsprachig gelabelte Daten liegen vor und können für
eine Feinabstimmung sowohl von Google Multilingual BERT als auch für
Deepset BERT und Google BERT-Base verwendet werden. Diese Daten
können aber auch für Anwendungen mit Bert-as-a-service (Abschnitt 4)
genutzt werden.
contactAppsTable = contactAppsAccounts
Mit Feldnamen:
contactAppsRecord = contactAppsFieldName1 + '\t' +
contactAppsFieldName1 + ': ' + contactAppsFieldValue1 + '<§>' +
contactAppsFieldName2 + ': ' + contactAppsFieldValue2 +…+ '\n'
Die digitale Transformation ist ein Phänomen, mit dem sich jedes
Unternehmen auseinandersetzen muss. Kunden verlangen neue
Erfahrungen, Partner erwarten einen besseren Zugang, Mitarbeiter wollen
mehr Komfort und die Möglichkeit von überall auf Systeme und Daten
zugreifen zu können. Unternehmen, die lernen, in einer integrierten,
vernetzten Weise zu arbeiten, haben große Vorteile. Der Wandel zu einer
zukunftssicheren, serviceorientierten Architektur, von der Infrastruktur bis
zu der Software führt zwangsläufig über die Cloud.
Infrastructur-as-a-Service
Infrastructure-as-a-Service (IaaS) erfordert die externe Verlegung der
physischen Infrastruktur von IT-Systemen, wie Speicher, Hardware,
Server und Netzwerkkomponenten für Zugriffe as-a-Service über das
Internet. Die Reduzierung der IT-Kosten durch die Migration auf virtuelle
Server und die Steigerung der Geschäftsflexibilität durch den Einsatz von
On-Demand Ressourcen sind die häufigsten Gründe für die Einführung von
IaaS.
Platform-as-a-Service
Platform-as-a-Service (PaaS) ist die nächste Schicht im Cloud Computing
Modell. PaaS ist die Softwaregrundlage für Cloudanwendungen, wie
Entwicklungswerkzeuge, Frameworks, Datenbanken und Tools. Amazon
AWS, Microsoft Azure, IBM Cloud, Google Cloud Platform, SAP Cloud
Platform und Saleforce Cloud Platform sind führende Anbieter von PaaS.
Für deutsche Unternehmen wird Datenschutz (Datenhaltung in
Deutschland oder wenigstens in der EU) immer wichtiger. Auch Multi-
Cloud-Lösungen werden zunehmend präferiert.
Software-as-a-Service
Software-as-a-Service (SaaS) ist das Nutzungsmodell für
Softwareanwendungen als Dienstleitung über das Internet. Alle Salesforce
Produkte sind beispielsweise komplett SaaS.
Software On-Premises
Software On-Premises ist das Backoffice-Modell für Softwareanwendungen
beim Kunden vor Ort. Enterprise-Systeme, wie SAP und Oracle ERP
gehören ebenfalls dazu.
Wie es funktioniert
Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. 2018.
BERT: Pre-training of deep bidirectional transformers for language under-
standing.arXiv preprint arXiv:1810.04805, pages 1–16.
Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. 2019.
Bert: Pre-training of deep bidirectional transformers for language
understanding. In Proceedings of NAACL, pages 4171–4186.
Ikuya Yamada, Akari Asai, Jin Sakuma, Hiroyuki Shindo, Hideaki Takeda,
Yoshiyasu Takefuji, Yuji Matsumoto 2020. Wikipedia2Vec: An Efficient
Toolkit for Learning and Visualizingthe Embeddings of Words and Entities
from Wikipedia.
Nina Poerner, Ulli Waltinger, and Hinrich Schuetze 2019. BERT is Not a
Knowledge Base (Yet): Factual Knowledge vs. Name-Based Reasoning in
Unsupervised QA.arXiv preprint arXiv:1911.03681v1.
Julian Risch, Anke Stoll, Marc Ziegele and Ralf Krestel. 2019. hpiDEDIS at
GermEval 2019: Offensive Language Identification using a German BERT
model.
Dietmar Schabus, Marcin Skowron and Martin Trapp, 2017. One Million
Posts: A Data Set of German Online Discussions. Proceedings of the 40th
International ACM SIGIR Conference on Research and Development in
Information Retrieval (SIGIR). Pages 1241-1244. Tokyo, Japan. Doi:
10.1145/3077136.3080711.