BERTで自分のツイートを分類してみた

プログラミング

こむぎパパは、いちおうデータ分析の仕事をしているのですが、

BERTという自然言語処理の技術を使ってみたいな~

と思ったので、BERTを使って自分のTwitterのツイートを分類してみました。

 

なお、こむぎパパは西東京に住んでいて、コーギーのこむぎを飼っています。

コーギー関連の記事は、こちらのブログを確認ください。

スポンサーリンク

結果

分類はしてみましたが、解釈が難しい結果となりました。

Cluster  1
['年末年始です。あたしも"食っちゃ寝"するです。 ', '頭隠して尻隠さず。 ', '食パンというよりは、おまんじゅうなお尻。 ', 'コーギーフェス、山中湖に前泊(素泊まり)することにしました。しかし、山中湖でペット可モーニング有りのレストランがない。。。泣', 'Virtual Marketというバーチャルイベントに参加したところ、かわいい柴犬のアバターに出会えました。残念ながら、コーギーのアバターはなかった。。泣  ', 'パパ「こむぎ、おやつたくさん食べたでしょ。不要不急のおやつはあげれないよ!」こむぎ「不要不急かどうかは、こむぎが決めます。」   ', '二度といわず、何度でも。(そして散歩を放棄)   ', '「パパ、どこにも行かせないです。」 ', '「パパ、あたし、洗われるなんて聞いてないわ!」  ']

Cluster  2
['結婚記念写真をフォトスタジオで撮影しました。さすがはプロのカメラマン!こむぎもニコニコな写真がたくさん撮れました  ', '東京下町の親戚の家にて、コーギーサンタが2匹。かわいいなあ。  ', '虎の敷物に似た、コーギーの敷物が完成しました。(いちおうボール遊びしてます) ', '家で遊ぶのも、楽しいわん。 ', '感染対策を十分にしたうえで、八ヶ岳わんわんパラダイスに宿泊してきました!ドッグフレンドリーな店員さんが多く、こむぎも終始ニコニコでした。ブログも読んでもらえると嬉しいです。「八ヶ岳わんわんパラダイスに宿泊した理由3選」… ', '「おむつトレーニングはじめたわよ!パパもママも褒めてくれて楽しい!」 ', ' 愛犬用の馬肉チップクリーム(犬用なので、砂糖は抜きで)', 'プログラミングにより、Youtubeで再生回数の多いコーギー動画を検索しました。興味があれば見てもらえると嬉しいです。結果はこちら【2021年上半期】コーギー系Youtube動画の再生回数トップ10… ', '車の中での熱中症が不安なので、Bluetooth接続できる温湿度センサーを購入しました。詳細をブログにまとめましたので、興味があれば見てもらえると嬉しいです↓↓↓ブログはこちら↓↓【犬の熱中症対策に】Inkbird I… ', 'blog追加しました【世界のコーギーのお尻を掲載】海外でもコーギーのお尻は食パンかどうか、検証してみた。↓↓ブログです↓↓興味があれば見てもらえると嬉しいです。可愛い… ', '10月23日(土)に関東で開催される、Corgi Festival 2021(以下リンク)を予約できました!色んなコーギーと会えるのが楽しみだ~コーギー… ', 'blog追加しましたTwitterで話題のコーギーのツイートまとめ【2021年6月・海外】↓↓↓ブログです↓↓興味があれば、見てもらえると嬉しいです。可愛いコーギーが… ', '「パパ、山中湖の旅行、すごく楽しかったわよ!」blog追加しました【1歳~1歳2か月】コーギーこむぎの成長↓↓↓ブログです↓↓少し長いですが、読んでもらえると嬉しいで… ', 'blog追加しましたコーギーの病気に備えよう!|コーギー版家庭犬の医学を読んで↓↓↓ブログです↓↓コーギーの病気に関して、様々な資料をまとめてます。ぜひ読んでみてくださ… ', '論文によると、犬と見つめあうと幸せホルモンが出るようです。blog追加しました犬の「癒し」って何?|「ペットがもたらす健康効果」を読んで↓↓↓ブログです↓↓気になった… ', 'カインズ昭島店のカートで大興奮!blog追加しました【セルフウォッシュが併設】カインズ昭島店のドッグランでは、愛犬がドロドロになっても大丈夫!↓↓↓ブログです↓↓読ん… ', '親戚から、愛犬用のスイカパーカー頂きました。可愛い!可愛いぞ!(親バカ) ', '「パパ、あたし、頑張って泳いだ!!」プールデビュー@わんダフルネイチャービレッジ(東京都あきる野市)コーギー向けのプールだったので、魅力をブログにまとめました。コーギー… ']

Cluster  3
['すごく今さらですが、「コギフェス1日のタイムスケジュール」というテーマでブログを書きました。こむぎはパリピになれなかったのですが、記録は残したいなあと。。。興味があれば見てもらえると嬉しいです。… ', '秘書こむぎ「ママは仕事中なので、こむぎがキープしました。」 ', '最近あまりツイートできてませんが、相変わらずボール遊びが大好きなこむぎさんです。 ', 'Twitterもブログも更新できていませんが、こむぎは元気に過ごしています。御岳山の「山の上のレモネード」に取り上げてもらったのでシェアします。', 'こむぎさん、実は1か月半前から膀胱炎でした。。。こむぎの頑張りのおかげで、今はほとんど完治してます。飼い主の反省もこめて闘病記を書きました。興味があれば見てもらえると嬉しいです。「愛犬こむぎの膀胱炎闘病記」… ', '「ママ、仕事の前にやることがあるです。よしよしするです。」 ', '昨日の朝、久しぶりのスタバモーニング!こむぎも、テーブルの下で笑顔に待っててくれました。 ', 'こむぎさんは、馬のヒヅメが大層お気に入りのようです。短い手をうまく使って、一心不乱にヒヅメをガジガジしてます。 ', '「こむぎの成長を一目で見たい」という声を頂いたので、【各月1枚のみ】という条件で写真を厳選しました↓↓↓ブログです↓↓写真多めなので、見てもらえると嬉しいです… ', '9月に開催される「アウトドアドッグフェスタin八ヶ岳」に参加します!参加される皆様、こむぎはビビりですが宜しくお願いします!  ', '「こむぎ隊員、ほふく前進は得意であります!縄は離さないのであります!」 ', 'パパ、ワクチン2回目を接種。接種翌日、パパ体調不良。こむぎが心配の舞を踊る。接種翌々日、パパ体調が良くなってくる。こむぎ「昨日イチャイチャできなかったぶん!」←今ココ ', 'ドロドロすぎるが、こむぎが楽しかったなら、それでよかろう。。 ', 'RT  新しいポケモンプレイしてないけどネットで見かけたワンパチの進化が全然違う犬種になっててショックだった・・もっとこうずんぐり体形を維持したままトゲトゲした感じに進化すると思ってたので\u3000ワンパチ→テンパチとか ', '運動不足解消のために「とってこい」を覚えてもらいました。散歩で歩かない日でも、「とってこい」はちゃんとやります! ', '「その日、人類は思い出した。奴らに支配されていた恐怖を。」(進撃の巨人1巻から引用) ', 'RT  最近、やけに迷い犬の記事を多く見かけます確かに管理不足や油断から実際の迷い子もいると思いますが、これだけ数が多いとそうではないケースもあるのではないかと…コロナ禍によるペットブームのシワ寄せに危機感を持っています。良いも悪いも【…', 'blog追加しました【犬を飼う生涯費用は200万円強】「全国犬猫飼育実態調査」から、様々な統計データを見る↓↓↓ブログです↓↓興味があれば、ぜひ読んでみてください!… ', '「散歩行くよ〜」と、声をかけた後のこむぎ。「パパが散歩したいって言うから、しょうがなく付き合ってあげてるのよ」とか思ってそう ', '少し昔の動画ですが、動画編集に慣れてきたのでアップです。パパ「こむぎがヘディングしてる!偉い!」こむぎ「わんっ!(違う!キャッチしたいの!)」 ', 'こむぎちゃん、パパとママの足の間で液状化しました。 ', '犬の嗅覚はすごいですね。。コロナ陽性者を嗅ぎ分け\u3000探知犬、精度97%―仏研究', 'パパ、わたし、どこまでも見張ってるからね! ']

Cluster  4
['こむぎ半端ないって。あいつ半端ないって。後ろ向きのボールめっちゃキャッチするもん。そんなんできひんやん、普通。※ 映像が若干乱れております。申し訳ありません。 ', 'こむぎ4コママンガ(1)こむぎ警部「どこに隠した?」 ', '「ボールは友達!」  ', 'こむぎによる微脚アピール ', '微脚による菜々緒ポーズ  ', '「ね~、はやく遊ぼうよ~。」 ', 'ジメジメしてて、おもしろくないのです。 ', '(あれは、宇宙人?) ', 'RT  corgi floatie!⠀toulou.corgi & threecorgis | IG ', 'ネタ切れの、"I(アイ)"!!一番簡単な、"I(アイ)"!!  ', '"y(小文字のワイ)!!"  ', '"エル(L)!!"  ', '「遊んでるの、ばれちった。。」 ']

Cluster  5
['こむぎサンタが、みんなにプレゼントをお届け!  ', 'こむぎサンタ、スタバへ行く。  ', 'こむぎを洗った後に、昭島アウトドアヴィレッジへ。近くの紅葉がきれいでした。 ', 'こむぎ用のカートを買いました!乗り物好きなこむぎさんは、だいぶゴキゲンです。 ', '定番のスタバモーニング!お店のロゴと一緒に一枚。 ', '「洗われてるです~~」からの、「きれいになったです!!」 ', '土曜日のワンダフルネイチャヴィレッジでの1枚。いい笑顔。 ', 'こむぎさん、散歩が終わって笑顔。  ', 'RT  ペットおやつ回収!サルモネラ菌検出のため回収しています。\u3000\u3000\u3000\u3000\u3000 ', '我が家のこむぎさん、メロンのおいしさに目覚めました。  ', '動物病院でシャンプーしてもらって、きれいな食パンになってきました。 ', '旬なので桃をあげました。「ママ、これ絶対に美味しいです。早く食べさせるです!」  ', '「ナイスキャッチ!」と喜んでいましたが、さくっとスリッパ持っていかれました。。 ', '撮影中のパパを待ってくれる、優しいスイカさんでした。 ', ' はじめまして!散歩の途中にスタバに寄れて助かってます。宣伝になってしまいますが、こちらのリンクからスイカパーカー頼めますよ!', '先週の週末に、スイカ着てスタバに行ってきました。既にブログで紹介していますが、このスタバのテラス席はペット可なので、飼い主は大助かりです!    ', '昨晩の茜空がきれいでした! ', '「パパ、ちゃんとおさえててね!」 ', '「枝はガジガジするためにキープよ!」 ']

Cluster  6
['こむぎとお出かけした西東京の公園・飲食店を一つの記事にまとめました。興味があれば見てもらえると嬉しいです。西東京の愛犬とのお出かけスポット年も、いっぱい出かけるぞ~! ', '昭和記念公園のドッグランのブログを作成しました興味があれば見てもらえると嬉しいです。【内気な犬でも安心!】はじめての昭和記念公園ドッグランのモデルプランコーギー… ', '1か月ほど前ですが、御岳山へプチ登山に行きました。ペット可のケーブルカーで上まで登れるので、微脚なコーギーにもおススメです!  ', 'インスタグラムでコギフェスの持ち物リストが出てたので、シェアしときます!山中湖、とにかく寒そう。。。コーギー', '昭和記念公園にデイキャンプに行ってきました。  ', 'アウトドアドッグフェスタにも参加してきました!人混みを避けて、ハンモックにゴキゲンなこむぎさんでした。 ', '昭和記念公園のドッグランに行こうと思ったのに、改修工事でほとんど閉まってるのね。。。泣コーギー', '雨が続いたので、東京都立川市の若葉ケヤキモールで散歩してきました。こむぎが楽しそうで何よりです。 ※ 犬目線での若葉ケヤキモールは、こちらの記事で詳しく説明してます。(再掲です。)… ', '今日は   なので、ペットの防災に関するブログ記事を貼らせてもらいます。こむぎ家も、備蓄品を再点検します↓↓ブログはこちら↓↓【犬は災害弱者】犬と一緒に生き残る防災BOOKを読んで… ', '公園行きました!後ろ姿だけで、ゴキゲンの良さが伝わってくるぞ ', 'RT  コーギーフェスティバルのお知らせ。会場が山中湖交流プラザきらら「原っぱ」に変更になります。このようなご時世の為イベント自体がキャンセルとなる場合もありますのでご了承下さい。変更に伴うキャンセルも受け付けます。参加枠の追加もあるようです。…', '参考までにですが、前回の山中湖旅行では、中央道の渋滞回避&こまめな休憩 のために、平日出発&三度の休憩 で行きました。コーギーフェス運営の皆様、宮ケ瀬での開催に向けて頑張ってください※ 参考ブログはこちら… ', 'コーギーフェス、会場変更の可能性ありか。。。宮ケ瀬のほうがアクセスしやすいんだけどな~。山中湖だと、こむぎの体力持つかな~。(前回の山中湖旅行では、談合坂SAのドッグランでそこそこ疲れてた。)', '「パパ、エレベーター楽しい!」雨の日は、若葉ケヤキモールの中を散策してます。↓↓↓若葉ケヤキモールのブログです↓↓東京都立川市の施設ですが、興味があれば読んでみてください!… ', '「なんとしても、鹿の角で遊ぶぞ!」雨の日のストレス解消に、鹿の角が効果的でした。blog更新しました【コーギーのストレス解消に!】犬用の丈夫なおもちゃ5選読んでもらえる… ', '緊急事態宣言の延長で、こむぎの大好きな公園がまだ閉園。。泣ブログ修正しました【西東京・緊急事態宣言下】愛犬とのお出かけ場所の開園状況↓↓↓ブログです↓↓近くに住んでれ… ', '呼んだら笑顔で来てくれました!この公園が大好きで、ご機嫌なこむぎちゃんです。※ 音は消してます。  ', '雨の日は、屋根付きショッピングモールでニコニコです。blog修正しました雨の日に最適!コーギー犬こむぎと行く若葉ケヤキモール|写真と動画で徹底解説↓↓↓ブログです↓↓ ', '昨日はスタバでカフェトレーニングしてきました!blogにまとめました【テラス席ペット同伴可】スターバックス国立店で、朝の散歩の小休憩をしてみよう!↓↓↓ブログです↓↓ ', '応募します!はじめての昭和記念公園(東京都)でのドヤ顔! ']

Cluster  7
['飼い主、ソファの肘置きに嫉妬するの巻 ', 'ママのベッドで、我が物顔で、寝るこむぎ ', '小平市のeggg cafeへ、こむぎと一緒に。こむぎ「パパ、このベッドは小さいです。小型犬用な気がするです。」 ', 'ママのベッドを我が物顔で使用。いびきをかいて大爆睡です。 ', '「散歩の後はクレートに入って、パパを見張っとくわん!」 ', '「オバケだぞ~。パパにピッタリくっつくぞ~。」  ', 'こむぎが可愛く誘惑してきて、パパは大変困っております。 ', '「クレートで休みたい~、けど、パパともっと遊びたい~」という結果、こうなりました。  ', '「パパ、あたし、犬用のベッドじゃ不満なの!人間と同じサイズの寝床を用意しなさい!」  ', 'こむぎ、パパの部屋のベッドの上で、掃除の終わりを待つ。静かにできて偉いね〜   ', '雨で散歩に行けないストレスを、おもちゃにぶつけてます。1歳になって、家具をあまり噛まなくなりましたいい子になったね〜! ', '「パパ、今日暑くて元気が出ない。。」→ やむを得ずクーラーかけました。  ']

Cluster  8
['雨の日は牛のヒヅメに限るです。 ', 'コギフェスでパリピになりきれず、本日もお疲れ気味のこむぎさんです。 ', 'コギフェスに着ていく服が決まりました。  ', '昨日は台風でどこにも出かけられなかったので、こむぎを見上げる構図でとってみました。かわいいのう。(写真がブレててすみません。。) ', 'Wonderful Nature Village行って、クタクタになるまで走ってきました! ', 'コーギーはないのか。。。泣 ', '雨が降ってて、おもしろくないわん。。 ', 'こむぎさん、足を組んで「デキる女」を演出してます。ただカワイイだけだぞ。。 ', '八ヶ岳わんわんパラダイス、コロナ感染者が出て休業。。。いろいろと大変かと思いますが、頑張ってください!', 'こむぎさん、馬の蹄を完食してドヤ顔です。 ', '疲れ切ったこむぎさん。歯が見えてまっせ。。。 ', '「あつい~。つかれた~。だっこしろ~。」よく頑張りました!次は、もっと朝早く行こう。 ', '雷は終わった。あとは寝るのみ。 ', '「雨は降ってないけど、なんでこんなに蒸し暑いですか。。。ぐすん」  ', ' 「冬は、コーギーも寒いのである」 ', '1年前のこむぎ。去年の5月にお迎えして、1年経ちました。大きくなったな~  ', '朝の6時から散歩に行ったけど、それでも少し暑かったみたい。。よく歩いたね~\u3000 ', 'こむぎ、ワイルドにママの帰りを待つ。   ', '朝の散歩で、こむぎドロドロになる。朝は雨降らなくて良かったね~ ']

作成方法

Twitterから自分のツイートを抽出

ローカルPCのjupyter notebookにて、Tweepyを使用して自分のツイートのタイムラインをcsvに出力します。

今回は、リプライのツイートは除外しています。

import tweepy
import pandas as pd
import datetime
import emoji
# Setting 280 characters in a column
pd.set_option("display.max_colwidth", 280)
import numpy as np

def get_api_value(consumer_key,consumer_secret,access_token,access_secret):
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_secret)
    api = tweepy.API(auth)
    return api


def collect_tweet_data(user_id, api):
    '''
    ツイッターAPIを使用してデータを収集し、リストを作成する関数

    '''
    
    tweet_data = []

    #自分のツイート数が280以下なので、280ツイートのみを取得するよう設定
    for tweet in tweepy.Cursor(api.user_timeline, user_id=user_id, count=20).items(280):
        #in_reply_to_user_idに返信先のidが表示されるため、返信ツイートではないツイートのみ抽出
        if tweet.in_reply_to_user_id is None:
            tweet_data.append([tweet.id_str,
                               tweet.user.screen_name,
                               tweet.created_at+datetime.timedelta(hours=9),
                               tweet.text.replace('\n',''),
                               tweet.favorite_count,tweet.retweet_count])
    return tweet_data

def create_tweets_df(user_id,api):
    
    tweet_data = collect_tweet_data(user_id=user_id, api=api)
    
    # 取得する列名を指定する
    columns_name=["TW_NO","USER_NAME","TW_TIME","TW_TEXT","FAV","RT"]
    df=pd.DataFrame(tweet_data,columns=columns_name)
    
    return df

consumer_key、consumer_secret、access_token、access_secret は、各自設定した値を入力ください。

またuser_idは、自分が取得したいuser_idを指定してください。user_idの確認方法は以下のリンクの通りです。

Twitterアカウント – ユーザー ID の確認(表示)

# Getting customer key and access token
consumer_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
consumer_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
access_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
access_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'


api=get_api_value(consumer_key,consumer_secret,access_token,access_secret)
user_id="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

df = create_tweets_df(user_id, api)

自分のツイートのテキストを、自然言語処理向けに整形

一般的な自然言語処理では、絵文字やリンクが含まれていると精度が悪くなると言われています。

これらの文字を削除し、ツイートを整形します。

def remove_emoji(text):
    return emoji.get_emoji_regexp().sub(u'', text)

def format_df_text(text_col,df):
    '''
    ツイートから不要な情報を削除
    '''
    df_temp = df[[text_col]].copy()
    df_temp['temp'] = df_temp[text_col].replace(r'https?://[w/:%#$&?()~.=+-…]+', '', regex=True) #画像へのリンクを削除
    df_temp['temp'] = df_temp['temp'].replace(r'@[w/:%#$&?()~.=+-…]+', '', regex=True) #'@'によるメンションを削除
    df_temp['temp'] = df_temp['temp'].replace(r'#(\w+)', '', regex=True) #ハッシュタグ(半角)を削除
    df_temp['temp'] = df_temp['temp'].replace(r'#(\w+)', '', regex=True) #ハッシュタグ(全角)を削除
    df_temp['temp'] = df_temp['temp'].apply(lambda x: remove_emoji(x)) #🐶のような絵文字を削除
    return df_temp['temp']
df['TW_TEXT_mod'] = format_df_text('TW_TEXT',df)

csvファイルとして出力

今回は、Google colaboratory上でBERTを使用するため、csvファイルを出力します。

df['TW_TEXT_mod'].to_csv('2112_twitter.csv')

BERTでツイートを分類

BERTという技術を用い、ツイートを分類します。

以下のリンクを参考に分類しました。

【日本語モデル付き】2020年に自然言語処理をする人にお勧めしたい文ベクトルモデル

 

上のリンクからの変更点は、

  • google driveにマウント
  • マウント先からpandasでDataFrameを読み込み

です。

その他の参考文献

APIリファレンス — tweepy 3.6.0 ドキュメント

TwitterAPIの上限までTweetを取得する|つぶやきをWordcloudで可視化①

ツイートを整形する【🐶のような絵文字も削除】|つぶやきをWordcloudで可視化②

コメント

タイトルとURLをコピーしました