ELMO埋め込みを用いたテキスト分類


教師付き学習について話すとき、多くの悪用されたタスクは「テキストまたは画像分類」です.今日、我々はBBCニュースデータセットのテキスト分類を議論します.

データセット
ビジネス、エンターテイメント、政治、スポーツまたは技術の5つのカテゴリーのうちの1つの下でラベルされる2225の記事から成るBBCから、我々はパブリックデータセットを使用します.
データセットは、トレーニングのための1490の記録とテストのための735に分けられます.目標は、正しいカテゴリに以前に目に見えないニュース記事を正確に分類することができるシステムを構築することです.

前処理
我々は、生のテキストまたは人間の理解できるテキストを直接我々のモデルに供給することができません.テキストを前処理することは、反復して冗長な語または単に、ストップワードを除去するために、語(その語)のためにstemmingしている語を破壊します.テキストの前処理は一般化されず、データのタスクとドメインに非常に特有である.我々のデータセットはかなり単純です、そして、これは初心者に焦点を当てられたチュートリアルです.
パンダを使用してデータを読み込みます.
import pandas as pd
data = pd.read_csv('Filename.csv')
我々は、NLTKや自然言語ツールキット、テキストモデリングのためのPythonライブラリを使用します.ストップワードは、反復的な単語、記事や例の場合は、NLPの視点からテキストに値を追加しない接続詞です.NLTKライブラリは私たちのタスクを簡単に一般的に発生するストップワードのリストを提供することになります.
from nltk.corpus import stopwords
stop_words = stopwords.words( ' english ' )
print(stop_words)
出力:
[私]、『私』、『私』、『私』、『我々』、『我々』、『我々』、『我々』、『我々』、『我々』、『あなた』、『あなた』、『あなた』、『あなた』
「自分」、「あなた自身」、「彼」、「彼」、「彼」、「彼」、「彼」、「彼」、「彼女」、「彼女」、「彼女」、『Hers』
「自分」、「it」、「its」、「それ自体」、「それら」、「それら」、「それら」、「彼ら」、「彼ら」、「彼ら」、「彼ら」.
「誰」、「誰」、「誰」、「これ」「それ」「それ」「これら」、「それら」、「それら」、「am」、「is」、「is」、「is」は「何」である.
「は」、「は」、「存在」、「持っている」、「持っている」、「持っている」、「持っている」、「持っている」、「持っている」、「do」、「する」.
' a '、' a '、' a '、' '、'と'、'、'、' if '、'または'、' '、' as '、'まで'
の間に「に」、「に」、「反対」、「反対」、「間」、「と」の間に「の」、「の」、「に」、「」
'を介して、'前'、'前'、'後'、'上記'、'下'、'から'、'まで'、'アップ'、'ダウン'.
' in '、' Out '、' Off '、' Off '、' Over '、' Unit '、' An '、'それ以降'、'その後'、' One '、'ここ'
'そこ'、'どこ'、'理由'、'方法'、' all '、'任意'、'両方'、'各'、'少数'、' more '.
'ほとんど'、'他'、'一部'、'そのような'、' no '、' not '、' not '、' only '、' own '、'同じ'、' so '.
'は'は、'非常に'、' s '、' t '、' can '、' will '、'ちょうど'、'ドン'、'すべき'、'今'、' d '.
' ll '、' m '、' o '、' re '、' ve '、' y '、' ain '、' ain '、' can '、' not '、' not '、' hadn '
「ハンス」、「ヘン」、「イスト」、「馬」、「マッツ」、「ムスタング」、「needn」、「シャン」、「シューブル」、「スー」
『ウーレン』『ウォン』、『ドゥ』
また、分類タスクのラベルをエンコードします.

埋め込み
単語埋め込みモデルは,類似語がベクトル空間に類似の表現を持つテキストの表現を学習するための重要なブレークスルーであった.
ELMOは、(1)単語使用の複雑な特性(例えば、構文と意味論)の両方をモデル化する深い文脈化された単語表現であり、(2)これらの使用が言語文脈(すなわち、モデル多義性)を横切って変化する方法.これらの単語ベクトルは、深いテキスト言語モデル(BILM)の内部の状態の学習機能です.彼らは簡単に既存のモデルに追加することができます大幅に質問応答、テキストの含意と感情の分析を含むNLPの問題に挑戦の広い範囲間でアートの状態を改善するエルモはAllenで開発された.
文脈化された単語表現は、周囲の語に大いに依存している語の表現です.ELMOは、テキストのセマンティクスをキャプチャするために埋め込みを生成する前に、すべてのテキストを考慮に入れる.
モデル多義性とは何か
多義性は、その1つの意味をより多く持っている単語の能力です.
明るく、'知的'と同様に輝いている.
エルモは、テキストデータモデリングのこれらの問題に対処します.
別のタイプのSOTA埋込みについてもっと議論します.
10億ワードベンチマークで訓練されたエルモ埋め込み事前訓練モデルはTensorflow-Hubで利用可能である.
コードしましょう!
import tensorflow as tf
import tensorflow_hub as hub
embed = hub.Module("https://tfhub.dev/google/elmo/2", trainable=True)
def ELMoEmbedding(x):
    return embed(tf.squeeze(tf.cast(x, tf.string)), signature="default", as_dict=True)["default"]
我々のモデルを訓練し,0.91の精度と0 . 28のカテゴリー交雑損失を達成した.
input_text = Input(shape=(1,), dtype=tf.string)
embedding = Lambda(ELMoEmbedding, output_shape=(1024, ))(input_text)
dense = Dense(256, activation='relu')(embedding)
pred = Dense(5, activation='softmax')(dense)
model = Model(inputs=[input_text], outputs=pred)
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
ノートパソコンhereを見ることができます.